类和类之间的关系 类的设计原则
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
类图
六、迪米特法例(LoD) 起码常识原则 夸大类之间的松耦合。即:假如两个类不必互相直接通 讯,那么着两个类就不应当发送直接的彼此浸染。假如 个中一个类必要挪用另一个类的某一个要领的话,可以 通过圈外人转发这个挪用。
1.1 开-闭原则的定义和优点
定义: 一个软件实体应当对扩展开放,对修
改关闭。即在设计一个模块的时候,应当使这 个模块可以在不被修改的前提下被扩展。
2. 1 里氏替换原则
定义: 如果对每一个类型为T1的对象O1,都有类型为T2 的对象
O2,使得以T1定义的所有程序P在所有的对象O1都代换为O2时, 程序P的行为没有变化,那么类型T2是类型T1的子类型。
//... SE ai=new SE(); SE joe=new SE(); PM gates=new PM(); List<Employee> empl=new List<Employee>(); empl.Add(ai); empl.Add(joe); 子类可以替换父类 empl.Add(gates); //...
2. 1 里氏替换原则
定义: 如果对每一个类型为T1的对象O1,都有类型为T2 的对象
O2,使得以T1定义的所有程序P在所有的对象O1都代换为O2时, 程序P的行为没有变化,那么类型T2是类型T1的子类型。
//... SE ai=new SE(); SE joe=new SE(); PM gates=new PM(); List<Employee> empl=new List<Employee>(); empl.Add(ai); empl.Add(joe); 子类可以替换父类 empl.Add(gates); //...
二、里氏代换原则(LSP) 1.一个软件实体假如行使的是一个父类的话,那么必然 合用于该子类,并且他发觉不出父类工具和子类工具的 区别。也就是说,在软件内里,把父类都替代成它的子 类,措施的举动没有变革。
【一句话】:子范例必需可以或许替代掉他们的父范例。
三、依靠倒置原则(DIP) 1.高层模块不该该依靠于底层模块。两个都应该依靠抽 象。2.抽象不该该依靠于细节,细节依靠于抽象( 【白话】:针对接口编程,不要针对实现编程。
• 关联体现的是两个类之间语义级别的一种强依赖关 系,比如我和我的朋友,这种关系比依赖更强、不 存在依赖关系的偶然性、关系也不是临时性的,一 般是长期性的,而且双方的关系一般是平等的。关 联可以是单向、双向的。表现在代码层面,为被关 联类B以类的属性形式出现在关联类A中,也可能 是关联类A引用了一个类型为被关联类B的全局变 量。在UML类图设计中,关联关系用由关联类A指 向被关联类B的带箭头实线表示,在关联的两端可 以标注关联双方的角色和多重性标记。
Parent(父类)
继承
Child(子类)
依赖Dependency
两个相对独立的A和B,当A负责构造B时,A 与B形成依赖关系,即A使用B。 Java 代码中的表现为局部变量,方法的参数, 以及对静态方法的调用。
Computer
依赖
Source
关联(Association)
两个相对独立的A和B,当A对象持有B对象的 时候,形成关联关系。 关联分为两种形式,聚合 (Aggregation) 和 组合 (Composition),聚合和组合只有概念 上的区别,在Java 中代码实现没有区别。
聚合 (Aggregation)
聚合:指的是整体与部分的关系,如图 1-1 。 SoftwareCompany
IBM
Microsoft 图 1-1
Oracle
组合 (Composition)
组合:表示类之间整体和部分的关系,但是组合 关系中部分和整体具有统一的生存期,即整体对 象不存在,部分对象也将不存在,如图 1-2 。
Computer 电脑
keyboard键盘
Mouse鼠标
显示器
图 1Fra Baidu bibliotek2
组合也是关联关系的一种特例,它体现的是一种 contains-a的关系,这种关系比聚合更强,也称 为强聚合。它同样体现整体与部分间的关系,但 此时整体与部分是不可分的,整体的生命周期结 束也就意味着部分的生命周期结束,
第7章
四、接口断绝原则(ISP) 1.行使多个专门的接口比行使单一的总接口总要好。换 而言之,从一个客户类的角度来讲:一个类对其它一个 类的依靠性该当是成立在最小接口上的。 2.过于痴肥的接口是对接口的污染。不该该强制客户 依靠于它们不消的要领。
五、合成/聚合复用原则(CARP) 只管行使合成/聚合,只管不要行使类担任。 【聚合】:暗示一种弱的拥有相关,浮现的是A工具可 以包括B工具,但B工具不是A工具的一部门。 【合成】:一种强的拥有相关,提现了严格的部门和整 体的相关,部门和整体的保留周期同等。
面向对象设计的基本原则
"开放-关闭"原则(OCP) 在软件计划模式中,这种不能修改,但可以扩展的头脑 也是最重要的一种计划原则。即软件实体(类、模板、 函数等等)应该可以扩展,可是不行修改。 【普通】:计划的时辰,时候思量,只管让这个类是足 够好,写好了就不要去修改了,假如新需求来,我们增 进一些类就完事了,原本的代码能不动则不动。
1、抽象化是面向对象设计的第一个核心本质。 2、在面向对象编程中,通过抽象类及接口,规 定了具体类的特征作为抽象层,相对稳定,不 需修改, 从而满足“对修改关闭”;而从抽象 类导出的具体类可以改变系统的行为,从而满 足“对扩展开放”。 3、对实体进行扩展时,不必改变软件源代码或 者二进制代码。关键在于抽象。
类和类之间的关系
实现 • 实现指的是一个class类实现interface 接口(可以是多个)的功能,实现是 类与接口之间最常见的关系。在Java 中此类关系通过关键字implements明 确标识,
继承 (Inherit)
是说子类获得父类的功能的同时,还可以 扩展自己的功能。 Java 代码表现为: extends 和 implements
优点:
a) 通过扩展的已有的软件系统,可以提供新的行为,以满足对软 件新的需求,使变化中的的软件有一定的适用性和灵活性。 b) 已有的软件模块,特别是最重要的抽象层模块不能被修改,这 就使变化中的软件系统有一定的稳定性和延续性。 c) 这样的系统同时满足了可复用性和可维护性。
1.2 如何实现“开-闭”原则