7 面向对象设计.ppt_第1页
7 面向对象设计.ppt_第2页
7 面向对象设计.ppt_第3页
7 面向对象设计.ppt_第4页
7 面向对象设计.ppt_第5页
已阅读5页,还剩24页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、,面向对象设计,面向对象设计,对象职责分配 面向对象设计原则 类图建模 CRC卡片分拣法 设计模式,软件设计-对象交互,对象职责,“知道”型职责(knowing) “做”型职责(doing) “交流”型职责(communicating),GRASP职责分配原则,信息专家 (Information Expert) 创造者 (Creator) 低耦合 (Low coupling) 高内聚(High cohesion) 控制器 (Controller) 多态 (Polymorphism) 纯虚构 (Pure Fabrication) 间接(Indirection ) 受保护变化 (Protected

2、 Variations),通用职责分配软件模式GRASP(General Responsibility Assignment Software Patterns)是描述对象设计和职责分配的基本原则。,面向对象设计原则,S = Single Responsibility Principle O = Opened-Closed Principle L = Liskov Substitution Principle I = Interface Segregation Principle D = Dependency Inversion Principle,单一职责原则(Single Responsi

3、bility Principle),就一个类而言,应该仅有一个引起它变化的原因。 不要把变化原因各不相同的职责放在一起,因为不同的变化会影响到不相干的职责。,开闭原则(Open/Closed Principle,OCP),最初由Bertrand Meyer提出 软件实体在扩展性方面应该是开放的,而在更改性方面应该是封闭的。,例:打印输出设计,Liscov Substitution Principle(Liskovs替换原则),子类型必须能够替换掉它们的基类型。,public class Rectangle private int topLeftX; private int topLeftY;

4、int width; int height; public void setWidth(int width) this.width = width; public void setHeight(int height) this.height = height; public int getWidth() return width; public int getHeight() return height; ,问题:如果将Square作为Rectangle的子类,则如何定义Square类的setWidth和setHeight方法?,解决方法:,public class Square extend

5、s Rectangle public void setWidth(int width) super.setWidth(width); super.setHeight(width); public void setHeight(int height) super.setHeight(height); super.setWidth(height); ,public class Test public static void main(String args) Test t = new Test(); Rectangle r = new Rectangle(); Square s = new Squ

6、are(); t.g(r); / t.g(s); ,private void g(Rectangle r) r.setWidth(10); r.setHeight(20); assert (r.getWidth()*r.getHeight() = 200); ,如果传给方法g的参数是Rectangle类型的对象,则没有问题 如果是Square类型的对象,则出错, 在设计时采用多个和特定客户类(client)有关的接口要比采用一个通用的接口要好。,使用通用接口的设计,使用分离接口的设计,Interface Segregation Principle(接口分离原则),Dependency Inve

7、rsion Principle(依赖倒置原则),结构化设计中模块间的依赖关系,面向对象设计中模块间的依赖关系,抽象不应该依赖于细节,细节应该依赖于抽象。,类图建模-类的定义,类关系, 对象并非孤立存在的,对象之间存在着千丝万缕的联系 用类关系来建模对象之间的关系: 关联关系(Association) 泛化关系(Generalization) 依赖关系(Dependency) 实现关系(Realization),按照关联所连接的类的数量,对象类之间的关联可分为: 自返关联(reflexive association) 二元关联(binary association) N元关联(n-ary ass

8、ociation),关联关系的多样性/维度(Multiplicity),关联类,为关联相关信息的存储定义一个专门的类,称为“关联类”,聚合(Aggregation)与组合(Composition)关系,聚合(Aggregation)用于表达一个整体对象与其成员对象之间的关系 “Has-a” 或是 “Whole/part” 组合(Composition)用于表达一个整体对象与其组成部分之间的关系 组合关系所表达的整体类与部分类之间的所属关系更强 整体类的对象不存在时,部分类的对象也不存在 整体类对象撤销之前要负责将部分类对象撤销,继承/泛化(Inheritance/Generalization)

9、,子类继承父类的属性、关联和操作,子类可以覆盖继承来的内容 父类可以声明为抽象类abstract,则将不会为它直接创建实例对象。意味着现有子类覆盖了该类对象的全集。,继承/泛化关系建模的意义在于系统环境发生变化时便于添加新的子类 继承/泛化关系建模的过程: 自顶向下 将某个类分割为属性和操作不同的子类,或者发现关联关系定义的是分类关系“kind of” 自底向上 为现有的多个具有公共属性及方法的类,定义一个父类,类图的抽象层次,在软件开发的不同阶段使用的类图具有不同的抽象层次。一般地,类图可分为三个层次,即概念类,设计说明类和实现类。,总结:建立类图的步骤,1. 研究分析问题领域,确定系统的需求。 2. 发现对象与类,明确它们的含义和责任,确定属性和操作。 3. 发现类之间的关系。把类之间的关系用关联、泛化、聚集、组合、依赖等关系表达出来。 4. 设计类与类的关系。调整和细化已得到的类和类之间的关系,解决诸如命名冲突、功能重复等问题。 5. 绘制类图并编制相应的说明。,CRC卡片分拣法,CRC是类(Class)、责任(Responsibility)和

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论