本节书摘来自华章出版社《系统架构:复杂系统的产品设计与开发》一书中的第3章,第3.4节特殊的逻辑关系,作者[美]布鲁斯·卡梅隆,更多章节内容可以访问云栖社区“华章计算机”公众号查看

3.4特殊的逻辑关系
3.4.1类/实例关系
理解并管理复杂度的另一项工具,是类/实例关系。“类/实例关系”这个说法,更多地用在软件而非硬件中。类(class)是一种结构,它用来描述某种事物所共有的特征。而实例(instance)则是类的具体表现。实例也称为类的实例化。
用类和实例的关系来表示事物,是很常见的做法。比如,我们可以把某种型号的车(例如福特探险家,Ford Explorer)视为类,把具体的车辆识别代号(Vehicle Identification Number,VIN)视为该类的实例。在本例中,型号就相当于类,而序列号则相当于实例。许多计算机编程语言明确地支持类/实例关系。比如,在给某个在线服务应用程序编写Web界面时,我们可能会使用“Button”类的不同实例来表示界面中的不同按钮,当用户点击这些按钮时,它们能够完成各自不同的操作(有的按钮用来刷新屏幕,还有的按钮用来给服务器提交信息)。
我们其实已经在不经意间提到了类/实例关系。仔细看表3.1,会发现其中有两位分析师。我们可以在团队名册中先创建“Analyst”类,然后再列出该类的两个实例。如果某种实体反复地出现,或是某个类能够轻松地加以实例化,那我们就可以考虑用类/实例关系来有效地管理复杂度。比如,足球队中的11名球员及钢琴上的88个键,可以分别视为“Player”类及“Key”类的实例。

3.4.2特化关系
有一个概念与类/实例关系有关,这就是特化/泛化关系。它描述了通用的物体与一组特殊的物体之间的关系。
本书第二部分会讲到,特化操作是一种在设计中广泛使用的操作。买房时,要根据住户、预算以及装修情况等一系列因素来选择具体要买什么样的房子,而这个选择的过程就是一种特化操作。通用对象是“House”,而具体的对象则是风格各异的房屋,例如具有北美殖民地时期风格的房屋、维多利亚式房屋或现代风格的房屋等。在Team XT中,针对“Group”这个泛化的概念,我们创建了三个具体的特化物,它们分别是:需求拟定小组、设计小组,以及支持小组。
特化这一概念类似于面向对象编程语言中的继承。我们可以从某个通用的类中创建一个子类,使得该子类继承通用类中的某些属性及功能。此外,我们还可以向子类中添加一些新的属性及功能。

3.4.3递归
如果某套过程或某个对象把它自己包括进来,那么就会发生递归(recursion)。换句话说,递归就是以一种与自身相似的方式来使用实体或关系的现象。如果某例程或某功能调用了它自己,或是在系统某一层面上所采用的手法,又运用到了系统中的另一层面上,那么就出现了递归。
在Team XT这个范例中,我们稍稍使用了递归。Team XT这个大团队是由团队中的所有成员合起来构成的。而大团队中的三个小组又可以分别视为三个小团队,它们也是由其各自成员所构成的,如图3.4所示。
软件工程中经常用到递归,而且会以极其明确的方式来使用。比如,在创建由节点和边所构成的网络时,有一种实现方式是创建一个“Node”类,并令其含有一个名为“Neighbors”的属性,而该属性本身又是一个由若干Node所构成的数组。于是,Node类就成了由含有Node数组的Neighbors属性所构成的类。由于该类的定义中提到了Node本身,因此出现了递归现象。

《系统架构:复杂系统的产品设计与开发》——第3章,第3.4节特殊的逻辑关系...相关推荐

  1. 软件架构--《系统架构:复杂系统的产品设计与开发》笔记

    <系统架构:复杂系统的产品设计与开发>笔记 1 简介 1.1 内容简介 1.2 作者介绍 2 摘要 系统架构原则 系统思维任务步骤 系统思维 1 系统架构简介 1.1 复杂系统的架构 1. ...

  2. 设计系统(Design System),设计和开发之间的“DevOps”

    最近,我们网站的上新增了几个新功能,比如通过导航栏的QR Code可以下载App:通过Carousel的方式,显示多条信息. 以往这样的功能可能需要2-3个Sprints完成,但是现在这些功能都是在一 ...

  3. 高端电动汽车制造商蔚来使用Panasas ActiveStor存储加速产品设计和开发

    加利福尼亚州桑尼维尔--(美国商业资讯)--性能横向扩展网络附加存储(NAS)领导者--Panasas®于今日宣布,中国高端电动汽车市场的先驱蔚来汽车(NIO)已选择Panasas ActiveSto ...

  4. 《产品设计与开发(原书第5版)》——3.8 步骤5:选出最佳机会方案

    本节书摘来自华章计算机<产品设计与开发(原书第5版)>一书中的第3章,第3.8节,作者:(美)乌利齐(Ulrich, K. T.),(美)埃平格(Eppinger, S. D.)著,更多章 ...

  5. 《产品设计与开发(原书第5版)》——第1章 概论 1.1 成功的产品开发的特点...

    本节书摘来自华章计算机<产品设计与开发(原书第5版)>一书中的第1章,第1.1节,作者:(美)乌利齐(Ulrich, K. T.),(美)埃平格(Eppinger, S. D.)著,更多章 ...

  6. 《产品设计与开发(原书第5版)》——3.2 机会识别的评比结构

    本节书摘来自华章计算机<产品设计与开发(原书第5版)>一书中的第3章,第3.2节,作者:(美)乌利齐(Ulrich, K. T.),(美)埃平格(Eppinger, S. D.)著,更多章 ...

  7. 《产品设计与开发(原书第5版)》——2.6 产品开发组织

    本节书摘来自华章计算机<产品设计与开发(原书第5版)>一书中的第2章,第2.6节,作者:(美)乌利齐(Ulrich, K. T.),(美)埃平格(Eppinger, S. D.)著,更多章 ...

  8. 网页中设定表格边框的厚度的属性_网页设计与开发第6章试卷及答案资料

    网页设计与开发第6章试卷及答案资料 网页设计与开发第6章试卷一. 选择题1)在HTML文件中,可以让表格显示边框线,例如table border5,5代表边框线的粗细,它的单位是 .Acm Bpixe ...

  9. 系统架构的过程 浮现式设计

    系统架构如果设计之初就设计错了,那么必然是南辕北辙. 很多人做系统设计总是东一下,西一下,杂乱无章,想到那是那,然后系统的边界很大,总会有疏漏. 那么系统架构应该怎么设计呢? 首先来说分层 系统分为三 ...

最新文章

  1. 4月机器学习热文出炉,这10篇文章你读了吗?
  2. 让DJANGO里的get_success_url定义的reverse_lazy带参数跳转
  3. 10285 - Longest Run on a Snowboard
  4. 什么是消息队列 RocketMQ 版?
  5. 编译gcc4.4.6与ICE遇到的几个问题
  6. 操作系统(1)-进程与线程
  7. Android SqlLite数据库的创建、增、删、改、查、使用事务
  8. 【转载】异步调用与多线程的区别
  9. 网盘和云备份 区别在哪里
  10. 计算机组成与设计---硬件/软件接口---计算机概要与技术
  11. SSM订单数据管理系统
  12. git php框架,如何用Git安装TP框架
  13. python 将图像变为矢量图(可字符和序列化)
  14. 使用 vlmcsd 部署 KMS 服务器
  15. css 实现一个尖角_css实现气泡的小尖角效果
  16. 一键快速打开IE的Internet选项->连接->局域网设置
  17. redis数据类型命令
  18. 详细讲解修改allure报告自定义的logo和名称中文
  19. 用VB实现的QQ自动登录器
  20. Gradle‘s dependency cache may be corrupt (this sometimes occurs after a network connection timeout)

热门文章

  1. 阿里巴巴开源项目 -- Druid
  2. MySQL根据生日计算年龄
  3. 麻将的和牌、听牌以及一向听(即能否打一张牌进行立直)的算法。
  4. 【FPGA教程案例34】通信案例4——基于FPGA的QPSK调制信号产生,通过matlab测试其星座图
  5. 慧荣SM3271AD芯片U盘量产工具V18.07.23.22 R0727
  6. 阿里本地生活NLP与推荐算法招聘【社招】
  7. 【数据结构】(二叉树)递归求解双分支结点个数
  8. 基于Nibiru的安卓AR开发教程
  9. 职业生涯规划书高中计算机专业,高中职业生涯规划书生涯规划计算机我的近期目标...
  10. 股票数据爬取常用库及方法