面向对象分析设计原则

合集下载

面向对象设计原则

面向对象设计原则

面向对象设计原则
面向对象设计原则是一种实践性的指导,它指导程序员如何使用面向对象的方式设计出优秀的程序。

它旨在提升程序的可读性、可维护性、可测试性和可扩展性,以及可重用性和可扩展性。

面向对象设计原则涵盖了一系列的原则,可以帮助程序员在设计时避免常见的错误,从而确保程序的可靠性和可维护性。

1、单一职责原则(SRP):单一职责原则要求每个类只负责一件事情,而不是多个职责。

这样,在维护类时,程序员就可以更加专心致志,从而减少出错的可能性,也减少了代码的复杂程度。

2、开放-封闭原则(OCP):开放-封闭原则要求一个软件实体(类、模块、函数)应该是可以扩展的,但不可修改。

这样,在需求变更的情况下,程序员只需要增加新的代码,而不用修改现有的代码,从而确保程序的稳定性。

3、接口隔离原则(ISP):接口隔离原则要求程序员应该尽量将接口分解为多个小接口,并要求每个类只实现自己需要的接口,而不是实现一个大而全的接口。

这样,程序员就可以在实现接口时不会出错,从而提高程序的可读性、可维护性和可测试性。

4、依赖倒置原则(DIP):依赖倒置原则要求程序员在编写代码时,应该尽量避免“程序依赖于具体类型”的情况,而是要求“程序依赖于
抽象类型”,这样,在后期的维护时,程序员就可以根据实际情况自由地更换依赖的类型,从而提高程序的可扩展性和可维护性。

通过实施面向对象设计原则,程序员可以更好地管理代码,并可以让程序更加规范,从而提高程序的可读性、可维护性和可测试性。

简述面向对象分析的基本原则

简述面向对象分析的基本原则

简述面向对象分析的基本原则
1、模块化原则,把复杂的软件系统分解为模块,每个模块完成单一任务。

2、抽象性原则,将具有相同属性和功能的单元放在一起,实现了局部性和抽象性。

3、信息隐蔽性原则,软件系统将内部状态转化为对外界事物变化的描述,使得外部人员难以理解其中的细节。

4、接口隔离性原则,为保证子系统间接口的清晰与合法,使得它们彼此独立又相互关联。

5、接口对等原则,为了更好地交流信息,提高软件的维护性和可靠性,应该建立接口来表示数据流,且接口应该是开放的。

6、面向对象分析基本原则之接口优先的原则,面向对象分析时必须考虑接口因素,没有接口就不会有对象。

1)所谓的“接口”,就是面向对象的软件系统中用来描述各种模块间相互关系的术语,这些模块间的结构关系和操作关系就是对应的接口。

在设计中,接口的选择要慎重,要遵循面向对象分析的原则。

7、面向对象分析基本原则之封装原则,封装的概念:将一个接口中的数据转换成另一个接口中的数据;或者说封装指一个对象被转换成多个对象,而不改变它们的功能和行为。

通俗地讲,就是将类中的信息以一定的方式(比如:封装类的信息、静态变量的存储、实现类的构造函数等)存放在数据库中,这样即便是改变了类中的数据也只需修改对应的数据库即可,从而避免了大量的修改工作,还可以提高代码的复用率。

面向对象分析设计原则

面向对象分析设计原则

一、单一职责原则(SRP)就一个类而言,应该仅有一个引起它变化的原因。

软件设计真正要做的许多内容,就是发现职责并把那些职责相互分离。

测试驱动的开发实践常常会在设计出现臭味之前就迫使我们分离职责。

二、开闭原则(OCP)软件实体(类、模块、函数)应该是可扩展的,但是不可修改的。

也就是说:对于扩展是开放的,对于更改是封闭的。

怎样可能在不改动模块源代码的情况下去更改它的行为呢?怎样才能在无需对模块进行改动的情况下就改变它的功能呢?关键是抽象!因此在进行面向对象设计时要尽量考虑接口封装机制、抽象机制和多态技术。

该原则同样适合于非面向对象设计的方法,是软件工程设计方法的重要原则之一。

三、替换原则(LSP)子类应当可以替换父类并出现在父类能够出现的任何地方。

这个原则是Liskov于1987年提出的设计原则。

它同样可以从Bertrand Meyer 的DBC (Design by Contract〔基于契约设计〕) 的概念推出。

四、依赖倒置原则(DIP)1、高层模块不应该依赖于低层模块。

二者都应该依赖于抽象。

2、抽象不应该依赖于细节。

细节应该依赖于抽象。

在进行业务设计时,与特定业务有关的依赖关系应该尽量依赖接口和抽象类,而不是依赖于具体类。

具体类只负责相关业务的实现,修改具体类不影响与特定业务有关的依赖关系。

在结构化设计中,我们可以看到底层的模块是对高层抽象模块的实现(高层抽象模块通过调用底层模块),这说明,抽象的模块要依赖具体实现相关的模块,底层模块的具体实现发生变动时将会严重影响高层抽象的模块,显然这是结构化方法的一个"硬伤"。

面向对象方法的依赖关系刚好相反,具体实现类依赖于抽象类和接口。

五、接口分离原则(ISP)采用多个与特定客户类有关的接口比采用一个通用的涵盖多个业务方法的接口要好。

ISP原则是另外一个支持诸如COM等组件化的使能技术。

缺少ISP,组件、类的可用性和移植性将大打折扣。

软件工程-面向对象分析

软件工程-面向对象分析

第7章面向对象分析•7.1.1 面向对象分析过程面向对象的分析主要以用例模型为基础。

开发人员在收集到的原始需求的基础上,通过构建用例模型从而得到系统的需求。

进而再通过对用例模型的完善,使得需求得到改善。

所谓用例是指系统中的一个功能单元,可以描述为参与者与系统之间的一次交互。

用例常被用来收集用户的需求。

①首先要找到系统的操作者,即用例的参与者。

参与者是在系统之外,透过系统边界与系统进行有意义交互的任何事物。

②可以把参与者执行的每一个系统功能都看作一个用例。

可以说,用例描述了系统的功能,涉及系统为了实现一个功能目标而关联的参与者、对象和行为。

③确定了系统的所有用例之后,就可以开始识别目标系统中的对象和类了。

把具有相似属性和操作的对象定义为一个类。

边界类示意图控制类示意图目标系统的类可以划分为边界类、控制类和实体类。

Ø边界类代表了系统及其操参与者的边界,描述参与者与系统之间的交互。

它更加关注系统的职责,而不是实现职责的具体细节。

通常,界面控制类、系统和设备接口类都属于边界类。

Ø控制类代表了系统的逻辑控制,描述一个用例所具有的事件流的控制行为,实现对用例行为的封装。

通常,可以为每个用例定义一个控制类。

Ø实体类描述了系统中必须存储的信息及相关的行为,通常对应于现实世界中的事物。

确定了系统的类和对象之后,就可以分析类之间的关系了。

对象或类之间的关系有依赖、关联、聚合、组合、泛化和实现。

①依赖关系是“非结构化”的和短暂的关系,表明某个对象会影响另外一个对象的行为或服务。

②关联关系是“结构化”的关系,描述对象之间的连接。

③聚合关系和组合关系是特殊的关联关系,它们强调整体和部分之间的从属性,组合是聚合的一种形式,组合关系对应的整体和部分具有很强的归属关系和一致的生命期。

比如,计算机和显示器就属于聚合关系。

④泛化关系与类间的继承类似。

⑤实现关系是针对类与接口的关系。

明确了对象、类和类之间的层次关系之后,需要进一步识别出对象之间的动态交互行为,即系统响应外部事件或操作的工作过程。

面向对象的系统分析与设计方法

面向对象的系统分析与设计方法

面向对象的系统分析与设计方法在信息化时代,各种软件系统已经深入到人们日常生活的方方面面。

如何将软件设计得更加高效、安全、易用成为设计人员不断探索的问题。

其中,面向对象的系统分析与设计方法被广泛应用于软件领域,成为当前软件研发中的流行趋势。

一、面向对象思想面向对象思想是一种软件分析、设计和编程思路。

它将现实世界中的实体抽象为对象,通过对象之间的交互和信息处理来实现系统的功能。

对象的行为和属性都与现实世界中的事物相对应,因此可以更加符合人类的思维方式,易于理解和维护。

同时,面向对象的设计还具有可重用性好、扩展性强、易维护等优点,因此被广泛应用于软件开发中。

二、面向对象的系统分析与设计面向对象的系统分析与设计方法采用面向对象思想,以系统的对象为中心,对系统所涉及到的实体进行抽象分析和设计。

其主要步骤包括系统需求分析、面向对象的分析和面向对象的设计。

1.系统需求分析系统需求分析是整个软件开发的关键,需要通过对用户需求、客户需求和用户交互接口需求等方面进行深入分析和调研,明确软件的功能、性能、可靠性和安全性等需求要求,为后续的设计和编码打下基础。

2.面向对象的分析面向对象的分析将系统需求分析的结果转化为面向对象的模型,具体包括对象、类、关系、约束条件等方面的分析。

其中,最重要的是通过实体之间的关系和交互来建立对象模型,理清对象之间的依赖关系和功能流程,同时将软件的功能划分为一个个模块,为后续的设计提供可靠的基础。

3.面向对象的设计面向对象的设计是指基于面向对象的分析结果,对系统进行更加详细的设计。

在设计过程中,需要运用各种通用的面向对象设计模式,如单例模式、工厂模式、观察者模式等,从而提高系统的可维护性、可扩展性和可重用性,同时还需考虑系统安全性、性能等方面的设计。

三、面向对象设计方法的优势1.提高系统的可维护性面向对象设计方法可以将系统中的实体进行模块化的设计,每个模块都可以自行管理本身功能的维护和更新,同时多个模块之间的协调和合作也容易实现,从而提高了系统的可维护性。

面向对象设计六大原则

面向对象设计六大原则

面向对象设计六大原则面向对象设计的原则是面向对象思想的提炼,它比面向对象思想的核心要素更具可操作性,但与设计模式相比,却又更加的抽象,是设计精神要义的抽象概括。

形象地将,面向对象思想像法理的精神,设计原则则相对于基本宪法,而设计模式就好比各式各样的具体法律条文了。

面向对象设计原则有6个:开放封闭原则,单一职责原则,依赖倒置原则,Liskov替换原则,迪米特法则和接口隔离原则或合成/聚合复用原则(不同资料略有不同,这里对7个都做了整理)。

1单一职责原则(Single Responsibility Principle SRP)There should never be more than one reason for a class to change. 什么意思呢?所谓单一职责原则就是一个类只负责一个职责,只有一个引起变化的原因。

如果一个类承担的职责过多,就等于把这些职责耦合在一起,一个职责的变化会削弱或抑制这个类完成其他职责的能力,这个耦合会导致脆弱的设计。

软件设计真正要做的许多内容,就是发现职责并把这些职责相互分离;如果能够想到多于一个动机去改变一个类,那么这个类就具有多于一个职责,就应该考虑类的分离。

以调制解调器为例如下图:从上述类图里面我们发现有四个方法Dial(拨通电话),Hangup(挂电话),Receive(收到信息),Send(发送信息),经过分析不难判断出,实际上Dial(拨通电话)和Hangup(挂电话)是属于连接的范畴,而Receive(收到信息)和Send(发送信息)是属于数据传送的范畴。

这里类包括两个职责,显然违反了SRP。

这样做有潜在的隐患,如果要改变连接的方式,势必要修改Modem,而修改Modem 类的结果导致凡事依赖Modem类可能都需要修改,这样就需要重新编译和部署,不管数据传输这部分是否需要修改。

因此要重构Modem类,从中抽象出两个接口,一个专门负责连接,另一个专门负责数据传送。

实验报告面向对象分析设计

实验报告面向对象分析设计

实验报告面向对象分析设计1. 引言面向对象分析与设计(Object-Oriented Analysis and Design,简称OOAD)是一种软件开发方法论,它以对象为中心,将软件系统看作是一组互相协作的对象集合。

本实验旨在通过一个具体的案例,通过分析和设计实践,掌握面向对象分析与设计的基本原则和方法。

2. 实验目的通过本实验,我们将学习和掌握以下内容:- 了解面向对象分析与设计的概念和基本原则- 学习使用UML(Unified Modeling Language)进行面向对象分析和设计- 掌握面向对象分析与设计的基本流程和方法- 熟悉常用的面向对象分析与设计工具和技术3. 实验内容及步骤3.1 实验环境本实验使用以下工具和环境:- UML工具:如Visual Paradigm、StarUML等- 编辑器:如Visual Studio Code、Eclipse等- 编程语言:Java、C++等3.2 实验步骤本实验主要分为以下几个步骤:1. 了解案例需求:首先,我们需要明确一个具体的案例,如图书馆管理系统、学生选课系统等。

本实验以图书馆管理系统为例。

2. 创建用例图:使用UML工具,根据需求,创建图书馆管理系统的用例图。

用例图描述系统的功能需求,包括用户角色、用户的需求和系统的功能。

3. 创建类图:基于用例图和需求分析,使用UML工具创建类图。

类图描述系统的静态结构,包括类和类之间的关系。

4. 创建时序图:基于用例图和类图,使用UML工具创建时序图。

时序图描述系统的动态行为,展示对象之间的交互关系和顺序。

5. 完善设计:基于用例图、类图和时序图,进一步完善系统设计。

包括类的属性和方法的设计、系统的架构设计等。

4. 实验结果与分析通过本实验,我们完成了图书馆管理系统的面向对象分析与设计。

通过用例图、类图和时序图的创建,我们清晰地描述了系统的功能需求、静态结构和动态行为。

通过系统设计的完善,我们定义了系统的架构和各个类的属性和方法。

面向对象分析与设计原理及实践

面向对象分析与设计原理及实践

面向对象分析与设计原理及实践面向对象程序设计(Object Oriented Programming, OOP)是目前程序设计领域中最为流行的一种设计方法,伴随着软件开发的日益复杂,我们需要高效的方法来管理和维护软件的复杂性。

在OOP中,一切皆为对象,对象是根据类定义而创建的。

类定义了一组属性和行为,对象是类的实例,拥有这些属性和行为。

使用面向对象的方式,可以更好地组织代码,提高代码重用和可维护性。

面向对象程序设计的三大特征面向对象程序设计的三大特征分别为封装、继承和多态。

封装是指将数据和行为打包到一个单元(class)中,通过访问权限限制来保证数据的安全性。

继承是指通过已有类派生出新的类,子类继承父类的所有属性和行为,同时可以添加自己的属性和行为,这种方式可以减少代码的重复性。

多态是指同一行为对于不同的对象具有不同的表现形式。

多态的实现方式有重载、重写和向上转型等。

面向对象分析与设计面向对象分析(Object Oriented Analysis, OOA)是一种软件工程方法,是软件设计中的第一步,它主要是从用户的需求出发,描述系统中的对象和他们之间的关系。

面向对象设计(Object Oriented Design, OOD)是软件设计的第二步,它主要是在OOA的基础上,根据系统需求,定义系统中的类以及类之间的关系。

在面向对象分析和设计中,主要有以下步骤:1. 需求收集和分析:通过与用户沟通,理解用户的需求,收集和分析需求。

2. 建立用例图和场景描述:从需求中抽取功能点,建立用例,同时描述用例的详细场景。

3. 建立类图:根据用例图和场景描述,建立类图,描述类之间的关系和属性。

4. 设计框架和结构:根据类图,设计系统的框架和结构。

5. 编写代码:在完成以上步骤后,编写代码实现系统。

面向对象实践在面向对象程序设计中,我们可以使用很多编程语言来实践,较为常见的有Java、C++、Python等。

在实践中,我们首先需要了解各种编程语言的特点和优势,根据需求选择合适的编程语言。

面向对象六大基本原则的理解

面向对象六大基本原则的理解

⾯向对象六⼤基本原则的理解在学习设计模式的时候,总是被推荐先学习⼀下⾯向对象的六⼤原则,学习后果然受益匪浅。

以下完全是我对六⼤基本原则的理解,和官⽹解释可能有出路,⽽且我更多是站在设计模式的⾓度,⽽不是⾯向对象的⾓度理解,如果有什么错误,敬亲谅解。

1.开闭原则很多教程都把开闭原则作为这六⼤原则中最基本的原则,也就是说他是各个原则的核⼼。

开闭原则指的是,⼀个软件实体如类、模块和函数应该对扩展开放,对修改关闭。

⾄于这个具体怎么理解,我也看了很多教程,有些教程说当我们遇到新的需求,就需要我们对我们模块继承的形式进⾏扩展,⽽不是修改代码。

这样的解释貌似有道理,但是如果真的这样做了,程序结构只会更加复杂,业务逻辑只会更不清晰,完全是⼀种作死的做法。

当业务发⽣改变的时候,肯定是要修改代码的,不需要的东西留着只会让程序臃肿,让维护者搞不清什么是有⽤的代码,什么是已经过时的代码。

我不太相信开闭原则的真谛是让我们⾛向这样⼀个死胡同。

对于开闭原则,我的理解是,我们在设计软件的时候,⾸先要搞清楚程序当中什么是未来可能变化的,什么是未来不会变化的。

对于可能变化的东西,我们要提前给与可以对应的扩展接⼝。

当然实际开发中,即便是我们认为这些不会变化的地⽅,未来还是可能变化的,这种变化就只能改代码了,但是这种修改仅仅只是改变个别细节,整体架构往往不会变化。

⽽对于可能变化的地⽅,我们要给出可以⾜够扩展的空间,让其能够⾃由扩展,基本发⽣了重⼤的需求变更,整体架构也不会受影响。

例如:⼯⼚模式中,我们将创建对象的过程封装了起来,这样创建对象对的过程中,创建的代码就和调⽤的代码尽可能地解除了耦合。

创建过程可能是变化的,⽽调⽤过程往往是不变的。

我们创建⼀个对象之后,需要为其初始化,设定⼀些配置,这个过程需要我们给出可以扩展的余地,⽽且要求扩展的时候不能影响调⽤部分,所以需要使⽤⼯⼚模式,将可变的创建过程封装起来,供不变的调⽤模块。

这样说来,开闭原则的核⼼是解耦了?没错,我认为开闭原则讲的就是解构,但是他要求我们在设计的时候,重点要预判出什么地⽅是会发⽣变化的,并要为变化的地⽅留出余地。

软件工程-电子教案第9章

软件工程-电子教案第9章
《软件工程》 陆惠恩主编 10
9.3.2 设计用户界面 9.3.3 画UML顺序图或活动图
【例9.4】画出招聘考试管理系统的顺序图 某市人事局举行统一招聘考试。首先,各招聘 单位向人事局登记本单位各专业的招聘人数, 由人事局向社会公布招聘情况;考生报名、填 志愿;人事局组织安排考试;录入考试成绩; 向考生和招聘单位公布成绩;招聘单位进行录 用;发录用通知书。这里,共有三个对象类: 人事局、考生和招聘单位。
《软件工程》 陆惠恩主编
3
9.2.2 确定类的相互关系 1. 类的一般-特珠关系
《软件工程》 陆惠恩主编
4
2. 聚集关系
“整体-部分”关系
90 80 70 60 50 40 30 20 10 0 第一季度 第三季度 东部 西部 北部
《软件工程》 陆惠恩主编
5
3. 关联关系
阶 链属性
限定
《软件工程》 陆惠恩主编
《软件工程》 陆惠恩主编 18
9.7 UML的应用
9.7.1 UML模型 1. 用例模型 2. 静态模型 3.动态模型 4.实现模型
《软件工程》 陆惠恩主编
19
9.7.2 UML视图
视图域 视图 静态视图 结构分类 用例视图 实现视图 部署视图 状态视图 动态行为 活动视图 交互视图 图 类图 用例图 构件图 部署图 状态图 活动图 顺序图 协作图 模型管理 可扩展性 模型管理视图 类图 所有 所有 主要概念 类、关联、泛化、依赖关系、实现、接口 用例、执行者、关联、扩展、包含、用例 继承 构件、接口、依赖关系、实现 结点、构件、依赖关系、位置。 状态、事件、转换、动作 状态、活动、转换、分叉、连接 交互、对象、消息、激活 协作、交互、角色、消息 包、子系统、模型。 约束、版型、标签值

UML-面向对象的分析和设计

UML-面向对象的分析和设计
目录 首页 末页
面向对象分析与设计
15/180
注意,执行者与用户是不同的两个概念, 注意,执行者与用户是不同的两个概念,一个用 户可以扮演几个角色(执行者), ),一个执行者可以是 户可以扮演几个角色(执行者),一个执行者可以是 用户,也可以是其他系统(应用程序或设备)。 )。得到 用户,也可以是其他系统(应用程序或设备)。得到 的用例必须进行复审,以使需求完整。 的用例必须进行复审,以使需求完整。
构成类图的元素所表达的模型信息, 构成类图的元素所表达的模型信息, 对象层 分为三个层次: 分为三个层次: 三个层次 对象层—给出系统中所有反映问题域 对象层 给出系统中所有反映问题域 特征层 系统责任的对象。 和系统责任的对象。 特征层—给出类 对象)的内部特征, 给出类( 特征层 给出类(对象)的内部特征, 关系层 即类的属性和操作。 即类的属性和操作。 关系层—给出各类 对象) 给出各类( 关系层 给出各类(对象)之间的关 图 OOA基本模型 基本模型 包括继承、组装、一般—特殊 系,包括继承、组装、一般 特殊 、整 体—部分、属性的静态依赖关系,操作的 部分、属性的静态依赖关系, 部分 动态依赖关系。 动态依赖关系。
目录
首页
末页
面向对象分析与设计
6/180
抽象类与子类示例
Shape { abstract } draw ( ) { abstract }
Abstract class Abstract operation
Circle draw ( )
Rectangle draw ( )
目录
首页
末页
面向对象分析与设计
目录 首页 末页
面向对象分析与设计
18/180
构造对象—关系模型 4. 构造对象 关系模型

面向对象设计七大原则

面向对象设计七大原则

⾯向对象设计七⼤原则1. 单⼀职责原则(Single Responsibility Principle)每⼀个类应该专注于做⼀件事情。

2. ⾥⽒替换原则(Liskov Substitution Principle)超类存在的地⽅,⼦类是可以替换的。

3. 依赖倒置原则(Dependence Inversion Principle)实现尽量依赖抽象,不依赖具体实现。

4. 接⼝隔离原则(Interface Segregation Principle)应当为客户端提供尽可能⼩的单独的接⼝,⽽不是提供⼤的总的接⼝。

5. 迪⽶特法则(Law Of Demeter)⼜叫最少知识原则,⼀个软件实体应当尽可能少的与其他实体发⽣相互作⽤。

6. 开闭原则(Open Close Principle)⾯向扩展开放,⾯向修改关闭。

7. 组合/聚合复⽤原则(Composite/Aggregate Reuse Principle CARP)尽量使⽤合成/聚合达到复⽤,尽量少⽤继承。

原则:⼀个类中有另⼀个类的对象。

细则单⼀职责原则(Single Responsibility Principle)因为:可以降低类的复杂度,⼀个类只负责⼀项职责,其逻辑肯定要⽐负责多项职责简单的多;提⾼类的可读性,提⾼系统的可维护性;变更引起的风险降低,变更是必然的,如果单⼀职责原则遵守的好,当修改⼀个功能时,可以显著降低对其他功能的影响。

需要说明的⼀点是单⼀职责原则不只是⾯向对象编程思想所特有的,只要是模块化的程序设计,都适⽤单⼀职责原则。

所以:从⼤局上看Android中的Paint和Canvas等类都遵守单⼀职责原则,Paint和Canvas各司其职。

⾥⽒替换原则(Liskov Substitution Principle)因为:⾥⽒替换原则告诉我们,在软件中将⼀个基类对象替换成它的⼦类对象,程序将不会产⽣任何错误和异常,反过来则不成⽴,如果⼀个软件实体使⽤的是⼀个⼦类对象的话,那么它不⼀定能够使⽤基类对象。

面向对象七大基本设计原则

面向对象七大基本设计原则

面向对象七大基本设计原则面向对象设计原则是OOPS(Object-Oriented Programming System,面向对象的程序设计系统)编程的核心。

在设计面向对象的程序的时,模式不是一定要套的,但是有一些原则最好是遵守。

这些原则已知的有七个,包括:单一职责原则、开闭原则、里氏代换原则、依赖注入(倒转)原则、接口分离原则、迪米特原则、合成聚合复用原则。

原则一单一职责原则单一职责原则(SRP:Single responsibility principle)又称单一功能原则核心:解耦和增强内聚性(高内聚,低耦合)。

描述:类被修改的几率很大,因此应该专注于单一的功能。

如果你把多个功能放在同一个类中,功能之间就形成了关联,改变其中一个功能,有可能中止另一个功能,这时就需要新一轮的测试来避免可能出现的问题。

原则二里氏替换原则里氏替换原则(LSP:Liskov Substitution Principle)核心:在任何父类出现的地方都可以用他的子类来替代(子类应当可以替换父类并出现在父类能够出现的任何地方)四层含义:(1)子类必须完全实现父类的方法。

在类中调用其他类是务必要使用父类或接口,如果不能使用父类或接口,则说明类的设计已经违背了LSP原则。

(2)子类可以有自己的个性。

子类当然可以有自己的行为和外观了,也就是方法和属性(3)覆盖或实现父类的方法时输入参数可以被放大。

即子类可以重载父类的方法,但输入参数应比父类方法中的大,这样在子类代替父类的时候,调用的仍然是父类的方法。

即以子类中方法的前置条件必须与超类中被覆盖的方法的前置条件相同或者更宽松。

(4)覆盖或实现父类的方法时输出结果可以被缩小。

原则三依赖注入原则依赖注入原则(DIP:Dependence Inversion Principle)别名:依赖倒置原则或依赖反转原则核心:要依赖于抽象,不要依赖于具体的实现三层含义:(1)高层模块不应该依赖低层模块,两者都应该依赖其抽象(抽象类或接口);(2)抽象不应该依赖细节(具体实现);(3)细节(具体实现)应该依赖抽象。

面向对象技术

面向对象技术

二面向对象技术的基本概念
1.对象 对象是客观世界中的一个实体,它具有以下特性: (1)有一个名字以区别其它对象; (2)有一个状态用来描述它的某些特征; (3)有一组操作,每个操作决定对象的一种功能或行为; (4)对象的操作可分为两类:一类是自身所承受的操作, 一类是施加于其它对象的操作。 简而言之,对象是其自身具有的状态特征及可以对这 些状态施加的操作结合在一起所所构成的独立实体。 在面向对象技术中的“对象”术语,既可能泛指客观 世界中的某些事物,也可能专指它们在系统中的抽象。 在系统中,对象是系统中用来描述客观事物的一个实 体,它是构成系统的一个基本单位。一个对象有一组 属性和对属性进行操作的一组方法构成。
(3)面向对象的实现 面向对象的实现(编程)是要在面向对象设计的 基础上,选择一种面向对象的编程语言(c++,Java 等),把设计作适当映射并改写成相应的程序。 (4)面向对象的测试 面向对象的测试是指在测试过程中运用面向对象 技术,进行以对象(或类)为核心的测试。 (5)面向对象的维护 面向对象的维护是指在软件运行之后的正常活动, 软件维护不是一种“简单”的修理,而是一种复杂的 开发活动,它同样需要经过分析、设计、实现和测试, 因此是一种系统更新的迭代过程。
(1)一个清楚的边界,所有对象内部组件的范围被限定 在这个边界内; (2)一个接口,这个接口描述这个对象和其它对象之间 的相互作用; (3)受保护的内部实现,这个实现给出了由软件对象提 供的功能的细节,实现细节不能在这个的范围被限定 在定义这个对象的类的外面访问。 面向对象系统中的封装单位是对象,即主要是对象的 封装。 6.继承 继承:继承所表达的就是一种对象类之间的相互关系, 它使得某类对象可以继承另外一类对象的特征和能力。 若类间具有继承关系,则它们之间应具有下列几个特 征:

软件工程第11章面向对象设计

软件工程第11章面向对象设计

2. 重用已有的类
重用已有类(代码重用)实现分析模型;若没有可以重用类而需要创建新 类时,则在设计这些新类时需要考虑其可重用性。
对于已有的可重用类,典型重用方法和过程如下: 1)选择可能被重用的已有类,标出类中对本问题无用的属性和服务,选 择那些能使无用的属性和服务最少的类; 2)从被重用的已有类派生出问题域类(继承重用类而产生问题域类); 3)标出从已有类继承来的属性和服务,而无须在分析类内定义;
6. 可重用
软件重用是提高软件开发生产率和目标系统质量的重要途径。 重用有两方面的含义: 一是尽量使用已有的类(类库或已建立的类), 二是如果确实需要创建新类,则在设计这些新类的协议时,应该考虑将 来的可重复使用性。
11.2
启发规则
与结构设计规则类似,通过OOD实践也总结了一些设计规则: 1. 设计结果应该清晰易懂 设计结果清晰、易读、易懂,是提高软件可维护性和可重用性的重要 措施。保证设计结果清晰易懂的主要因素为:用词一致;使用已有的 协议;避免模糊的定义等。
1)层次组织:这种组织方案把软件系统组织成一个层次系统,每层是一 个子系统。上层和下层自系统形成C/S结构 层次结构的两种模式:封闭式和开放式:封闭式,每层子系统仅仅使用其 直接下层提供的服务;开放式,任一层次可以向下跨层次调用。 2)块状组织:把软件系统垂直地分解成若干个相对独立的、松耦合的子 系统,一个子系统相当于一块,每块提供一种类型的服务。
第11章
11.1 11.2 11.3 11.4 11.5 11.6 11.7 11.8 11.9 11.10 11.11
面向对象设计
面向对象设计的准则 启发规则 软件重用 系统分解 设计问题域子系统 设计人机交互子系统 设计任务管理子系统 设计数据管理子系统 设计类中的服务 设计关联 设计优化

面向对象设计的七大原则

面向对象设计的七大原则

⾯向对象设计的七⼤原则在上⼀篇⾥我们谈了谈为何设计模式,那接下来我们再浅谈⼀下在⾯向对象设计中我们常常要遵循的⼀些原则。

这些原则是经过⽆数的前⼈总结出来的经验的结晶。

仅仅有遵循这些原则。

你才有可能涉及出优秀的代码。

今天我们要谈的原则有七⼤原则,即:单⼀职责。

⾥⽒替换。

迪⽶特法则,依赖倒转,接⼝隔离,合成/聚合原则。

开放-封闭。

1. 开闭原则定义:软件实体应当对扩展开放,对改动关闭。

这句话说得有点专业。

更通俗⼀点讲,也就是:软件系统中包括的各种组件,⽐如模块(Modules)、类(Classes)以及功能(Functions)等等。

应该在不改动现有代码的基础上。

去扩展新功能。

开闭原则中“开”。

是指对于组件功能的扩展是开放的。

是同意对其进⾏功能扩展的。

开闭原则中“闭”。

是指对于原有代码的改动是封闭的,即不应该改动原有的代码。

问题由来:凡事的产⽣都有缘由。

我们来看看。

开闭原则的产⽣缘由。

在软件的⽣命周期内,由于变化、升级和维护等原因须要对软件原有代码进⾏改动时。

可能会给旧代码中引⼊错误,也可能会使我们不得不正确整个功能进⾏重构,⽽且须要原有代码经过⼜⼀次測试。

这就对我们的整个系统的影响特别⼤。

这也充分展现出了系统的耦合性假设太⾼,会⼤⼤的添加后期的扩展。

维护。

为了解决问题,故⼈们总结出了开闭原则。

解决开闭原则的根本事实上还是在解耦合。

所以。

我们⾯向对象的开发,我们最根本的任务就是解耦合。

解决⽅法:当软件须要变化时。

尽量通过扩展软件实体的⾏为来实现变化。

⽽不是通过改动已有的代码来实现变化。

⼩结:开闭原则具有理想主义的⾊彩。

说的⾮常抽象,它是⾯向对象设计的终极⽬标。

其它⼏条原则,则能够看做是开闭原则的实现。

我们要⽤抽象构建框架,⽤实现扩展细节。

2. 单⼀职责原则(Single Responsibility Principle)定义:⼀个类。

仅仅有⼀个引起它变化的原因。

即:应该仅仅有⼀个职责。

每个职责都是变化的⼀个轴线。

网络购物平台系统设计(面向对象的分析与设计)

网络购物平台系统设计(面向对象的分析与设计)

网络购物平台系统设计(面向对象的分析与设计)1. 引言网络购物平台已经成为现代人们购物的主要方式之一。

为了满足用户的需求,设计一个高效、稳定、安全的网络购物平台系统是至关重要的。

本文旨在通过面向对象的分析与设计,探讨网络购物平台系统的设计原则和方法。

2. 系统需求分析网络购物平台系统的需求分析是系统设计的第一步。

根据用户需求和市场调研结果,明确系统的功能和性能要求,包括但不限于以下几个方面:- 用户注册与登录- 商品浏览与搜索- 购物车管理- 支付和订单管理- 用户评价和反馈- 物流与售后服务3. 系统设计原则面向对象的分析与设计方法可以有效地对网络购物平台系统进行设计。

在设计过程中,应遵循以下几个原则:3.1 单一职责原则每个类应该只有一个单一的责任。

例如,用户类应该专注于用户的管理和认证,商品类应该专注于商品信息的管理等。

3.2 开放封闭原则系统设计应该对扩展开放,对修改封闭。

通过合理的设计和抽象,新的功能可以通过拓展而不是修改已有的代码来实现。

3.3 依赖倒置原则高层模块不应该依赖低层模块,而是应该通过抽象来进行通信。

这样可以降低耦合度,提高系统的可维护性和可扩展性。

4. 系统设计方法4.1 用例图通过用例图可以清晰地描述用户和系统之间的交互以及系统的功能。

用例图包括用户用例和系统用例,它们之间通过参与者和关系进行连接。

4.2 类图类图用于描述系统的静态结构,包括类、属性和方法。

通过类图可以明确系统中各个类之间的关系,例如继承、关联、依赖、聚合等。

4.3 时序图时序图用于描述系统中不同对象之间的消息传递顺序和时间顺序。

通过时序图可以清楚地展示系统的运行过程和对象之间的交互关系。

4.4 活动图活动图用于描述系统中的业务流程,包括各个活动和活动之间的流程控制。

通过活动图可以清晰地展示用户在购物平台上的操作流程。

5. 总结本文介绍了网络购物平台系统设计的面向对象的分析与设计方法。

通过明确系统需求,遵循设计原则,使用用例图、类图、时序图和活动图等工具,可以设计出高效、稳定、安全的网络购物平台系统。

面向对象设计(OOD)思想

面向对象设计(OOD)思想

面向对象设计(OOD)思想(C#)面向对象分析(道法自然)面向对象的思维方式:面向对象是围绕对象和类来分析、设计软件系统的。

面向对象分析:面向对象分析的主要任务是根基用户的需求,建立一个准确的、完整的、一致的系统模型。

在面向对象的分析过程里,项目组通过分析软件的功能性需求,得到一个理想化的系统模型,该模型更多的侧重于描述我们需求解决的问题是什么---我们称这种模型为分析模型。

面向对象分析与面向对象设计的区别:1、在侧重点上,面向对象分析侧重于理解问题,描述软件做什么,而面向对象设计侧重于理解解决方案,描述软件如何做。

2、面向对象分析一般只考虑理想的设计,不关心技术和实现的细节,而面向对象设计更具体、更详细、更接近真实的代码的设计方案。

3、在设计结果的描述方式上,分析阶段侧重描述对象的行为,设计阶段侧重于描述对象的属性和方法。

4、面向对象分析只关注功能性需求,而面向对象设计既关注功能性需求,也关注非功能性需求。

5、面向对象分析的产生的系统模型通常规模较小,而面向对象的设计产生的系统模型规模较大,内容也比较完整、详尽。

用例驱动的面向对象分析:面向对象分析的过程包括:1、从用例中提取实体对象和实体类。

提取实体对象的方法,依据用例描述中出现的名词和名词短语来提取实体对象,必须对原始的名词和名词短语进行筛选。

得到实体对象后,对实体对象进行归纳、抽象出实体类。

2、提取属性3、提取关系4、添加边界类5、添加控制类6、绘制类图7、绘制顺序图8、编制术语表有了思想才能飞翔,缺乏灵活就象少了轮子的汽车,难以飞奔。

为了更好的理解设计思想,结合一个尽可能简洁的实例来说明OOD、设计模式及重构。

通过下面的代码,详细地阐述面向对象设计思想。

一、传统过程化设计思想假定我们要设计一个媒体播放器(只从软件设计的角度,不涉及硬件)。

该媒体播放器目前只支持音频文件mp3和wav。

按照结构化设计思想,设计出来的播放器的代码如下:面向对象设计(OOD)思想(C#)有了思想才能飞翔,缺乏灵活就象少了轮子的汽车,难以飞奔。

简述面向对象设计的原则

简述面向对象设计的原则

简述面向对象设计的原则面向对象设计原则是一些指导原则,用于帮助开发者设计高质量、可维护、可扩展的面向对象程序。

这些原则是从实践中总结出来的,可以用于指导设计师在开发过程中做出正确的设计决策。

下面将详细介绍五个常用的面向对象设计原则。

1. 单一职责原则(Single Responsibility Principle,SRP)单一职责原则要求一个类应该只有一个引起它变化的原因。

换句话说,一个类应该只负责一项职责。

这样做的好处是,当需求发生变化时,只需修改与之相关的类,而不影响其他类。

这样可以降低类之间的耦合度,提高代码的可维护性和可复用性。

2. 开闭原则(Open-Closed Principle,OCP)开闭原则要求软件实体(类、模块、函数等)对扩展开放,对修改关闭。

这意味着,当需求发生变化时,应该通过扩展现有的实体来满足新的需求,而不是修改现有的代码。

通过使用抽象和接口来实现可扩展性,可以避免代码的大规模修改,减少出错的可能性。

3. 里氏替换原则(Liskov Substitution Principle,LSP)里氏替换原则要求子类型必须能够替换掉它们的父类型。

也就是说,父类型定义的所有功能在子类型中都应该可用,并且一致地实现。

这样才能确保代码的正确性和可靠性。

遵循里氏替换原则可以提高代码的可扩展性和可维护性,同时降低代码的复杂度。

4. 依赖倒置原则(Dependency Inversion Principle,DIP)依赖倒置原则要求高层模块不应该依赖于低层模块,二者都应该依赖于抽象。

换句话说,高层模块和低层模块都应该依赖于抽象类或接口,而不是具体的实现类。

这样可以降低模块之间的耦合度,提高代码的可扩展性和可重用性。

5. 接口隔离原则(Interface Segregation Principle,ISP)接口隔离原则要求一个类不应该依赖于它不需要的接口。

换句话说,一个类应该只关心它需要使用的方法,而不关心其他方法。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

一、单一职责原则(SRP)就一个类而言,应该仅有一个引起它变化的原因。

软件设计真正要做的许多内容,就是发现职责并把那些职责相互分离。

测试驱动的开发实践常常会在设计出现臭味之前就迫使我们分离职责。

二、开闭原则(OCP)软件实体(类、模块、函数)应该是可扩展的,但是不可修改的。

也就是说:对于扩展是开放的,对于更改是封闭的。

怎样可能在不改动模块源代码的情况下去更改它的行为呢?怎样才能在无需对模块进行改动的情况下就改变它的功能呢?关键是抽象!因此在进行面向对象设计时要尽量考虑接口封装机制、抽象机制和多态技术。

该原则同样适合于非面向对象设计的方法,是软件工程设计方法的重要原则之一。

三、替换原则(LSP)子类应当可以替换父类并出现在父类能够出现的任何地方。

这个原则是Liskov于1987年提出的设计原则。

它同样可以从Bertrand Meyer 的DBC (Design by Contract〔基于契约设计〕) 的概念推出。

四、依赖倒置原则(DIP)1、高层模块不应该依赖于低层模块。

二者都应该依赖于抽象。

2、抽象不应该依赖于细节。

细节应该依赖于抽象。

在进行业务设计时,与特定业务有关的依赖关系应该尽量依赖接口和抽象类,而不是依赖于具体类。

具体类只负责相关业务的实现,修改具体类不影响与特定业务有关的依赖关系。

在结构化设计中,我们可以看到底层的模块是对高层抽象模块的实现(高层抽象模块通过调用底层模块),这说明,抽象的模块要依赖具体实现相关的模块,底层模块的具体实现发生变动时将会严重影响高层抽象的模块,显然这是结构化方法的一个"硬伤"。

面向对象方法的依赖关系刚好相反,具体实现类依赖于抽象类和接口。

五、接口分离原则(ISP)采用多个与特定客户类有关的接口比采用一个通用的涵盖多个业务方法的接口要好。

ISP原则是另外一个支持诸如COM等组件化的使能技术。

缺少ISP,组件、类的可用性和移植性将大打折扣。

这个原则的本质相当简单。

如果你拥有一个针对多个客户的类,为每一个客户创建特定业务接口,然后使该客户类继承多个特定业务接口将比直接加载客户所需所有方法有效。

以上五个原则是面向对象中常常用到的原则。

此外,除上述五原则外,还有一些常用的经验诸如类结构层次以三到四层为宜、类的职责明确化(一个类对应一个具体职责)等可供我们在进行面向对象设计参考。

但就上面的几个原则看来,我们看到这些类在几何分布上呈现树型拓扑的关系,这是一种良好、开放式的线性关系、具有较低的设计复杂度。

一般说来,在软件设计中我们应当尽量避免出现带有闭包、循环的设计关系,它们反映的是较大的耦合度和设计复杂化。

面向对象之代码复用规则1、对接口编程"对接口编程"是面向对象设计(OOD)的第一个基本原则。

它的含义是:使用接口和同类型的组件通讯,即,对于所有完成相同功能的组件,应该抽象出一个接口,它们都实现该接口。

具体到JAVA中,可以是接口,或者是抽象类,所有完成相同功能的组件都实现该接口,或者从该抽象类继承。

尽量使用接口。

接口只是对象打交道的入口,只有具有继承关系才使用抽象类。

2、优先使用对象组合,而不是类继承"优先使用对象组合,而不是类继承"是面向对象设计的第二个原则。

并不是说继承不重要,而是因为每个学习OOP的人都知道OO的基本特性之一就是继承,以至于继承已经被滥用了,而对象组合技术往往被忽视了。

只有有现实生活中的父子关系才使用继承。

相关的设计模式有:Bridge、Composite、Decorator、Observer、Strategy等。

3、将可变的部分和不可变的部分分离"将可变的部分和不可变的部分分离"是面向对象设计的第三个原则。

如果使用继承的复用技术,我们可以在抽象基类中定义好不可变的部分,而由其子类去具体实现可变的部分,不可变的部分不需要重复定义,而且便于维护。

如果使用对象组合的复用技术,我们可以定义好不可变的部分,而可变的部分可以由不同的组件实现,根据需要,在运行时动态配置。

这样,我们就有更多的时间关注可变的部分。

对于对象组合技术而言,每个组件只完成相对较小的功能,相互之间耦合比较松散,复用率较高,通过组合,就能获得新的功能。

4、减少方法的长度通常,我们的方法应该只有尽量少的几行,太长的方法会难以理解,而且,如果方法太长,则应该重新设计。

对此,可以总结为以下原则:三十秒原则:如果另一个程序员无法在三十秒之内了解你的函数做了什么(What),如何做(How)以及为什么要这样做(Why),那就说明你的代码是难以维护的,必须得到提高;一屏原则:如果一个函数的代码长度超过一个屏幕,那么或许这个函数太长了,应该拆分成更小的子函数;一行代码尽量简短,并且保证一行代码只做一件事那种看似技巧性的冗长代码只会增加代码维护的难度。

5、消除case / if语句要尽量避免在代码中出现判断语句,来测试一个对象是否某个特定类的实例。

通常,如果你需要这么做,那么,重新设计可能会有所帮助。

我在工作中遇到这样的一个问题:我们在使用JAVA做XML解析时,对每个标签映射了一个JAVA类,采用SAX(简单的XML接口API:Simple API for XML)模型。

结果,代码中反复出现了大量的判断语句,来测试当前的标签类型。

为此,我们重新设计了DTD(文档类型定义:Document Type Definition),为每个标签增加了一个固定的属性:classname,而且重新设计了每个标签映射的JAVA类的接口,统一了每个对象的操作:addElement(Element aElement); //增加子元素addAttribute(String attName, String attValue); //增加属性;则彻底消除了所有的测试当前的标签类型的判断语句。

每个对象通过Class.forName(aElement.attributes.getAttribute("classname")).newInstence(); 动态创建,6、类层次的最高层应该是抽象类。

在许多情况下,提供一个抽象基类有利做特性化扩展。

由于在抽象基类中,大部分的功能和行为已经定义好,使我们更容易理解接口设计者的意图是什么。

由于JAVA不允许"多继承",从一个抽象基类继承,就无法再从其它基类继承了。

所以,提供一个抽象接口(interface)是个好主意,一个类可以实现多个接口,从而模拟实现了"多继承",为类的设计提供了更大的灵活性。

7、尽量减少对变量的直接访问。

对数据的封装原则应该规范化,不要把一个类的属性暴露给其它类,而是应该通过访问方法去保护他们,这有利于避免产生波纹效应。

如果某个属性的名字改变,你只需要修改它的访问方法,而不是修改所有相关的代码。

8、拆分过大的类。

如果一个类有太多的方法(超过50个),那么它可能要做的工作太多,我们应该试着将它的功能拆分到不同的类中。

9、作用截然不同的对象应该拆分。

在构建的过程中,你有时会遇到这样的问题:对同样的数据,有不同的视图。

某些属性描述的是数据结构怎样生成,而某些属性描述的是数据结构本身。

最好将这两个视图拆分到不同的类中,从类名上就可以区分出不同视图的作用。

类的域、方法也应该有同样的考虑!如LinkedList和ListNode◆SRP,单一职责原则,一个类应该有且只有一个改变的理由。

◆OCP,开放封闭原则,一个类对扩展开放,而对修改闭合。

◆LSP,替换原则,所有用基类的地方都可以用派生类来替换。

◆DIP,依赖倒置原则,依赖于抽象而不是实现。

◆ISP,接口隔离原则,客户只要关注它们所需的接口。

接口尽可能单一,最小化,不要视图抽象一个包含很多功能的接口。

六十一条面向对象分析设计的经验原则你不必严格遵守这些原则,违背它们也不会被处以宗教刑罚。

但你应当把这些原则看成警铃,若违背了其中的一条,那么警铃就会响起。

(1)所有数据都应该隐藏在所在的类的内部。

(2)类的使用者必须依赖类的共有接口,但类不能依赖它的使用者。

(3)尽量减少类的协议中的消息。

(4)实现所有类都理解的最基本公有接口。

如类对象toString而不应该自定义其他接口(5)不要把实现细节放到类的公有接口中。

公有函数是对外接口,具体实现应该尽量用私有函数做。

(6)不要以用户无法使用或不感兴趣的东西扰乱类的公有接口。

(7)类之间应该零耦合,或者只有导出耦合关系。

也即,一个类要么同另一个类毫无关系,要么只使用另一个类的公有接口中的操作。

(8)一个类应该只表示一个关键抽象。

(Java不允许多重继承,解决了这个问题)包中的所有类对于同一类性质的变化应该是共同封闭的。

一个变化若对一个包影响,则将对包中的所有类产生影响,而对其他的包不造成任何影响.(9)把相关的数据和行为集中放置。

设计者应当留意那些通过get之类操作从别的对象中获取数据的对象。

这种类型的行为暗示着这条经验原则被违反了。

(10)把不相关的信息放在另一个类中(也即:互不沟通的行为)朝着稳定的方向进行依赖.(11)确保你为之建模的抽象概念是类,而不只是对象扮演的角色。

(12)在水平方向上尽可能统一地分布系统功能,也即:按照设计,顶层类应当统一地共享工作。

(13)在你的系统中不要创建全能类/对象。

对名字包含Driver、Manager、System、Susystem 的类要特别多加小心。

规划一个接口而不是实现一个接口。

类对象实现的功能要单一。

(14)对公共接口中定义了大量访问方法的类多加小心。

大量访问方法意味着相关数据和行为没有集中存放。

(15)对包含太多互不沟通的行为的类多加小心。

(16)在由同用户界面交互的面向对象模型构成的应用程序中,模型不应该依赖于界面,界面则应当依赖于模型。

(17)尽可能地按照现实世界建模(我们常常为了遵守系统功能分布原则、避免全能类原则以及集中放置相关数据和行为的原则而违背这条原则) 。

(18)从你的设计中去除不需要的类。

(19)去除系统外的类。

系统外的类的特点是,抽象地看它们只往系统领域发送消息但并不接受系统领域内其他类发出的消息。

(20)不要把操作变成类。

质疑任何名字是动词或者派生自动词的类,特别是只有一个有意义行为的类。

考虑一下那个有意义的行为是否应当迁移到已经存在或者尚未发现的某个类中。

(21)我们在创建应用程序的分析模型时常常引入代理类。

在设计阶段,我们常会发现很多代理没有用的,应当去除。

(22)尽量减少类的协作者的数量。

一个类用到的其他类的数目应当尽量少。

(23)尽量减少类和协作者之间传递的消息的数量。

(24)尽量减少类和协作者之间的协作量,也即:减少类和协作者之间传递的不同消息的数量。

相关文档
最新文档