惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

AI
AI
cs.AI updates on arXiv.org
cs.AI updates on arXiv.org
Google DeepMind News
Google DeepMind News
T
Tenable Blog
博客园_首页
S
Securelist
Spread Privacy
Spread Privacy
Google Online Security Blog
Google Online Security Blog
Forbes - Security
Forbes - Security
Engineering at Meta
Engineering at Meta
U
Unit 42
L
LINUX DO - 热门话题
量子位
T
Threat Research - Cisco Blogs
博客园 - 【当耐特】
C
Cyber Attacks, Cyber Crime and Cyber Security
K
Kaspersky official blog
MyScale Blog
MyScale Blog
P
Proofpoint News Feed
The Last Watchdog
The Last Watchdog
Google DeepMind News
Google DeepMind News
GbyAI
GbyAI
Martin Fowler
Martin Fowler
Exploit-DB.com RSS Feed
Exploit-DB.com RSS Feed
cs.CL updates on arXiv.org
cs.CL updates on arXiv.org
Security Latest
Security Latest
Scott Helme
Scott Helme
V
Vulnerabilities – Threatpost
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
I
InfoQ
Know Your Adversary
Know Your Adversary
Cisco Talos Blog
Cisco Talos Blog
The Register - Security
The Register - Security
T
The Blog of Author Tim Ferriss
aimingoo的专栏
aimingoo的专栏
V2EX - 技术
V2EX - 技术
T
Tailwind CSS Blog
月光博客
月光博客
Recent Announcements
Recent Announcements
G
Google Developers Blog
F
Full Disclosure
W
WeLiveSecurity
宝玉的分享
宝玉的分享
腾讯CDC
G
GRAHAM CLULEY
Vercel News
Vercel News
Simon Willison's Weblog
Simon Willison's Weblog
美团技术团队
cs.CV updates on arXiv.org
cs.CV updates on arXiv.org
Help Net Security
Help Net Security

机核

游戏性能旗舰最强之选,一加 Ace 6 至尊版国补到手价2999元起 6元钱自己更换电动车刹车线 《生化危机9:安魂曲》编剧Haris Orkin专访 摸金游戏?音乐游戏!暗区新赛季这把能弹的琴有何来历? 好评国产武侠SRPG《息风谷战略》免费DLC现已推出 | 机核 GCORES 碎片 《生化危机:安魂曲》将于5月实装首个免费更新内容 | 机核 GCORES 新锐东方游戏,谱写世界新章! 沉浸式恋爱视觉小说游戏《心象演算》免费试玩版现已正式上线 | 机核 GCORES 互动影游《代号三国:龙起》上线!穿越三国与曹操并肩、与佳人同行、与权谋博弈! 《老头收集梦想生活》,游戏酒桌会6,录音笔VOL.689 | 机核 GCORES 破界·共生——《白日梦:无限世界》五大核心游戏特点解析 价格已到史低,锐龙5 9600X/锐龙7 9700X正适合抄底 时间循环之旅即刻启程!《归环》一周目测试今日开启 热门在线韩游变魂游,洛奇衍生作能否打破“花瓶”魔咒? LG UltraGear evo 全新高端显示器系列:当“5K”遇见“AI”,不止强大,更懂热爱 反套路三国互动影游《代号三国:龙起》今日上线! 愿望单登记人数突破10万!备受瞩目的“女儿养成游戏” 《梦幻魔法公主》今日于Steam平台上线!限时八折优惠中 《黑神话:悟空》全球音乐会2026巡演将于4月29日12时开票 | 机核 GCORES “Snowguelike”生存肉鸽挖矿新作《蛙穿雪境》公布发售日期,5月7日正式上线 | 机核 GCORES 重塑移动办公、AI创作新境!全新华硕灵耀Air系列、ProArt 骁龙版震撼首发,创芯未来 均分88:《Saros》媒体评分汇总 | 机核 GCORES 上海烛龙公布合作遗迹探险游戏《吉时已到》首支预告片 | 机核 GCORES 首个独立游戏《萝薇日记》已上线Steam! 烛龙新IP《吉时已到》首曝,打造国内首款中式合作遗迹探险游戏 喜加一:《暗黑破坏神Ⅳ》国服现已开启限时免费领取本体活动 | 机核 GCORES 新版《生化危机》电影定于9月18日上映,官方网站现已上线 | 机核 GCORES 《冲就完事模拟器2》“星球大战”联动DLC正式宣布 | 机核 GCORES SteamController将于5月4日发售,售价99美元 | 机核 GCORES 事已至此,内存这么用也算省钱了,“2+1”非对称双通道应用实测 505游戏母公司现已收购《明末:渊虚之羽》IP | 机核 GCORES 基石 手动杂谈12|格斗游戏也能讲好故事 | 机核 GCORES I Love You Mr Snowball 我的向日葵小姐 会比GTA6先发售吗?最硬核的生存游戏《DAYZ》要推新DLC了 周记02:在2026遇到新怪谈 什么硬件,能让游戏Loading界面快速消失? | 机核 GCORES GadioSpec《百年风云世界杯》免费试听集 | 机核 GCORES 百年风云世界杯Vol.1丨足球崛起 | 机核 GCORES 100年前,一群人提前替我们经历了AI恐惧 | 机核 GCORES 《呼啸山庄》2026 ——一辆当代艺术的大卡车冲撞了我的大脑 手游《天穗之咲稻姬:日之香巡灵传》宣布将于7月27日停服 | 机核 GCORES 集结梦之队,征战世界杯,《最佳球会ONLINE》上线Steam 山水绝景随心拼 休闲建造游戏《千里山河录》Steam商店页公开 巫师帽、法袍、魔杖,为什么它们是影视、游戏里的法师必备三件套? 《无鞘信使》-第一章 复古风自动战斗肉鸽《终结之终结》Steam商店页面现已上线 电脑里有一款不破不立的MMO,录音笔VOL.688 | 机核 GCORES 《生化危机》30周年纪念周边发售,这次是真的“保护伞” 可靠耐用+AI全能,惠普战66 2025锐龙版深度体验 《时之书:无尽终章》关卡“大航海时代”全球首次公开 经典名作《乌龙派出所》改编经营模拟游戏《乌龙派出所~阿两的商店街物语~》正式宣布支持简体中文 明日开冲,解锁反套路三国互动影游《代号三国:龙起》即将上线 独立游戏《这是我的宝藏!》已发售~ 降低难度不是唯一解,无压力死亡也是好体验 Netflix官宣新片《普通人》:讲述韩国现代史上的权力风暴 《生化危机:安魂曲》全球销量现已突破700万份 《绝地鸭卫》PC版5月15日正式发售 亡妻回忆录?女性向情感叙事游戏《S-mail》现已正式发售 全新酷黑风格,酷睿Ultra 200S PLUS的高性价比搭档!七彩虹BATTLE-AX B860M-PLUS S WIFI7 V20 超级黑刃主板测评 胖狗 索尼发布了港台地区PS5产品价格调整公告,将于5月1日起实施 二次元怪猎+性感美女!《碧蓝幻想:无尽黄昏》开启Beta公测 这款怪谈类型中式恐怖游戏居然更新了?! 《百日战纪 -最终防卫学园-》改编漫画将于今年冬季开启连载 《如被附身,请致电我们》:匈牙利黑色幽默恐怖小说 《竹屿山房杂部卷五》(译文) 大树 超越引擎 摄影分享丨四月 碎片杂记vol.72 当老式FPS与老式动画技术碰撞出新时代的火花—《神探杰克鼠》 想做独游,如何避免首个项目就褒姒? 在线多人动作游戏《OCTOPinbs》将于5月12日上线Steam! 《酒鬼女神的酒诡》确定将于2026年登陆Steam 《CRYMELIGHT》将于11月5日(周四)正式发售!4月25日开始预购! 钢铁国度MKI部落Evolution,蛮兵部分 【钢铁国度】部落-Primal MK I,蛮兵部分 这是一个高中生用ai跑出来的作品,我自称他为物理神话 钢铁国度MKI部落Metamorphosis,蛮兵部分上 钢铁国度MKI部落Metamorphosis,蛮兵部分下 INDIE Live Expo于4月25日举办:首发9款新作,超200款独立游戏亮相 暗黑卡牌策略新作《魔忌:穷鼠啮狸》发布全新中文试玩版和发售预告片,4月30日正式上线在即 战锤40K长篇小说:变节者・苦难主宰(三)(全书完) 战锤40K长篇小说:变节者・苦难主宰(二) 战锤40K长篇小说:变节者・苦难主宰(一) 英语语言学习丨短语专题1:短语的特点 唯一的EVE战争 【少前同人】【M200】战术人形会梦见音乐会吗 【昏迷3】即将发售,前作主角悉数到场!“恶灵”宋老师化身可操控角色 业内人士:游戏公司“十有八九”使用生成式AI,包括卡普空 欢庆一周年:《光与影:33号远征队》全新纪念艺术图、超值折扣与免费更新同步上线 才刚刚开始呢 【抽奖】《星际卡车司机》推出免费大型更新,四折平史低折扣进行中 四人合作FPS游戏《佣兵猎手》抢先体验重大更新 1 现已上线 Raw Fury新作《深馅地牢 Deep Dish Dungeon》将于今秋加入 XGP 塔防幸存者游戏《魔怪来袭》推出首个 DLC 《饿狼传说:群狼之城》1周年纪念!新DLC“沃尔夫冈·克劳萨”今日参战 猫狗相伴 欢乐闯关 双人合作平台跳跃游戏《猫狗同行》上线Steam商店页 《同行:月球逃脱》(Together: Moon Escape)上线将于明日上线Steam
墓碑上的软件工程:UML
韩大 · 2024-12-12 · via 机核

UML 是 Unified Modeling Language 的缩写,意思是统一建模语言。虽然叫做语言,但是压根没有一种计算机语言的样子,实际上是一些软件开发过程中画图的规定而已。虽然这是一个“标准”,比较搞笑的是,在 wiki 上记录着:在软件工程中,大多数从业者不使用 UML,而是制作非正式的手绘图表;然而,这些图表通常包含来自 UML 的元素。

UML 的诞生,就是来源于“面向对象”思想的流行,所以不用抬杠为什么没有包含“函数”和“变量”的代码结构图示——结构化编程基本上用传统的流程图就 OK 了。但是 UML 也不仅仅是用来画出“对象”“类”这些东西的。由于这个东西本身是一种画图的规定,所以并不会要求使用者 100% 准确,而是希望大家能看懂,能画出来就好了。UML 的标准好像已经更新到版本 2 了,不过具体有啥差异也许不太重要。所以我也主要是想介绍几种常用的 UML,特别是这种图的用处。

类图

类图是用来表达,你的项目中的各种“类”之间的耦合关系的一种图。如果你使用的语言没有“类”关键字,但如果有“类”的概念的,也可以用这种图来表达,无需纠结是不是要把“原型链”上的对象都画出来。类图的基本单元就是“类”,每个矩形里面写上一个类的名字,表示这个类的存在。矩形下面可以再分成上下两格,上面是属性变量,下面是方法函数。

上面这个图是一个简略的画法,如果你需要更详细表达,可以参考下图。不过一般我们画图主要目的是沟通,私有类成员经常都会省略掉不画出来,也就不需要标记什么 + - #

不同的类之间,一般都是有“关系”的:

  • A 类的属性变量的类型,可能是另外一个类 B

  • A 类的方法函数的参数、返回值的类型,可能是另外一个类 B

  • A 类可能继承于/实现 B 类,A 类是 B 类的子类

所以 A 类和 B 类就有了关系。如果是 A 类的代码中有如同上述情况用到 B 类,我们就叫 A 类依赖于 B 类,在 UML 中就需要画一个箭头,从 A 类指向 B 类。注意,类图之间的箭头,是和运行时程序的数据流无关的,完全就是代码里面各个类之间的关系。简单来说,你的源码里面的每一行 import(或者类似语句),都可以在类图上表达为一根箭头。箭头也分为几种样子:

  • 如果是成员变量形式耦合,并且成功变量是一个容器(list/map/数组啥的),一般在依赖方这边画个菱形,表示“组合”;如果不是容器,就不用画什么(画上也没错)。对于被依赖那一端,画上一个普通的箭头即可。如果要讲究点,还可以在这两端写上数字,譬如 0..* 包含的数量是 0 个到不限数量、1 表示会有一个对象。有的人还会把菱形涂黑,表示“聚合”,区别在于被依赖的类是不是很强烈的被认为是依赖方的一部分,而不会存在于其他类“身上”。

  • 如果是方法函数的参数、返回值依赖,一般就是一个普通箭头可以了

  • 如果是继承/实现,箭头需要是一个空心箭头,从依赖方(子类)指向被依赖方(父类)

实际上,大家在用的时候,不会完全的把所有的细节都画出来,过于严格的去标注加号、减号,或者是箭头的样子、箭头线段是否虚线,其实都是不必要的。最关键的是把类之间的关系表达清楚:哪些类之间是关联的,是怎样关联的。很多设计模式的书,都会用 UML 类图来说明代码中的耦合关系,但很少需要严格区分聚合和组合、关联和依赖、继承和实现接口。比较需要注意区分的是继承和关联这两种就好了。

类图中最重要的东西,是箭头的方向,如果你的设计中,可以把所有类的箭头方向,都做成一个方向,譬如从上往下,或者从左往右,说明这个设计非常不错,因为代表在着类之间的关系是分层的,这样很方便修改任何一个位置的类,因为依赖它的其他类是可以很简单找到的。但如果箭头的方向是打圈的、循环的,就代表类之间的关系非常复杂,任何一个类的修改,影响到的范围难以简单掌握。

在实际工作中,使用类图还需要注意的是:

  1. 不要把项目中的类及其细节,事无巨细全部都画上去,要画关联最多最复杂的类,那些处于辅助地位的类就不需要画了。要关注类的关系,而不是类的内部。

  2. 尽量把图形画的有层次感,把依赖关系画的尽量沿着一个方向延申,而不是交错往返。类图应该表现出设计者的思路,应该是有比较清晰的结构的。

  3. 不要害怕在 UML 图上标注其他东西,只要是能清楚解释问题的,都可以加上。UML 类图不需要“纯洁”。

部署图

某大厂的服务器端程序员,最爱“部署图”了,虽然不是标准的 UML 画法,但这是他们最认可的“架构图”。

和上面的“类图”不同,“部署图”并不关注源代码里面的信息,它要暂时的是系统运行时的进程之间的关系。由于现代软件一般都不会仅仅由一个进程来完成所有任务,所以需要说明多个进程之间,是怎样协作来共同完成功能的。特别是网站一类的系统,其分布式的架构更是由成千上万的进程和服务器构成。

部署图的标准特别简单:

  1. 立体块表示一个节点(Node),一个进程、一个硬件都可以称为一个节点

  2. 节点之间的连线,表示节点的关系,一般是通过网络关联起来,可以在线上标注网络协议

部署图会标识出软件在运行的某个时刻,其所有“节点”的连接情况。所以有可能一个系统,在不同时间,这个图是不一样的。如果能简单的表示清楚不同时间下的情况,画到同一个图上也没问题,但如果随着时间不同,部署图上节点的关系有复杂的变化,就不能只用一个图来表达了。

从软件架构上来说,部署图最时候表示“运行时架构”,这种架构可以比较好的表示系统在运行性能上的设计。因为所有的缓存系统、数据库、进程之间的交互,都可以表示出来,所以性能瓶颈可能在哪里,就能从图上猜到一二。但是这种图能表示的信息也比较简陋,一来它无法展示代码里面的互相关系,所以对于计算密集型的系统来说,从部署图来看,是看不出太多东西;二来是一个系统可能会有很多不同的功能,这个图并不能展示具体某个功能的数据流程和节点使用情况,这也可能很影响对性能问题的判断。

序列图

序列图是一种特别直观的,对于多模块协作进行表示的一种图。

我们在画时序图时会涉及下面7种元素:

  • 角色(Actor)

  • 对象(Object)

  • 生命线(LifeLine)

  • 控制焦点(Activation)

  • 消息(Message)

  • 自关联消息

  • 组合片段。

虽然标准里面有很多定义,但是我们也不必每个图都有全部以上的元素。需要注意的是,“对象”可以是一个进程,也可以是一个代码里的对象,或者是一个服务系统,但不能是某个“行为”。序列图可以很好的展现一个复杂的,经过多个对象处理的过程,但也有一个问题:它不能很好表示 if 这种分支判断的逻辑。如果只是一个正常流程,以及一系列错误返回流程,放在一个序列图里面表达,还可以接受。但如果有大量的分支流程,就没办法用一个序列图进行全部描述,有可能需要每个流程都画一个序列图。

在我们设计分布式的系统(可能是微服务)时,是比较需要用序列图把每种业务逻辑的处理流程画清楚的,因为涉及很多不同的进程和网络交互,如果没有一个统一的图,很难让人掌握整体情况。而且序列图要和部署图相统一,每个部署图上的节点,都应该曾出现在其中一个序列图中;而每个序列图中的对象,都应该能在部署图上找到。

其他

UML 除了上面说的三个,其实还有很多不同的图,但是那些一般用的比较少。也有一些如状态图,其实并不是非常的直观(当然比没有图要好),失之细节过多过杂,影响阅读。