chapter01基础知识

上传人:自*** 文档编号:26125831 上传时间:2017-12-22 格式:PPT 页数:45 大小:227.13KB
返回 下载 相关 举报
chapter01基础知识_第1页
第1页 / 共45页
chapter01基础知识_第2页
第2页 / 共45页
chapter01基础知识_第3页
第3页 / 共45页
chapter01基础知识_第4页
第4页 / 共45页
chapter01基础知识_第5页
第5页 / 共45页
点击查看更多>>
资源描述

《chapter01基础知识》由会员分享,可在线阅读,更多相关《chapter01基础知识(45页珍藏版)》请在金锄头文库上搜索。

1、面向对象分析与设计Object Oriented Analysis and Design,广州大学华软软件学院软件工程系蒋慧勇 Email:Tel: 13926230196,主要内容,OOA&D基础知识GRASP模式、OO原则和GoF设计模式UML建模工具 Rational Rose 2003,OOA&D基础知识,OO基本概念及特点 UML和类图关系OO原则与模式,OO基本概念,首先根据客户需求抽象出业务对象;然后对需求进行合理分层,构建相对独立的业务模块;之后设计业务逻辑,利用多态、继承、封装、抽象的编程思想,实现业务需求;最后通过整合各模块,达到高内聚、低耦合的效果,从而满足客户要求。面向

2、对象的分析根据抽象关键的问题域来分解系统。面向对象的设计是一种提供符号设计系统的面向对象的实现过程,它用非常接近实际领域术语的方法把系统构造成“现实世界”的对象。,OO术语,对象:对象是运行期的基本实体,它是一个封装了数据和操作这些数据的代码的逻辑实体。 类:类是具有相同类型的对象的抽象。一个对象所包含的所有数据和代码可以通过类来构造。 封装:封装是将数据和代码捆绑到一起,避免了外界的干扰和不确定性。对象的某些数据和代码可以是私有的,不能被外界访问,以此实现对数据和代码不同级别的访问权限。 继承:继承是让某个类型的对象获得另一个类型的对象的特征。通过继承可以实现代码的重用:从已存在的类派生出的

3、一个新类将自动具有原来那个类的特性,同时,它还可以拥有自己的新特性。,多态:多态是指不同事物具有不同表现形式的能力。多态机制使具有不同内部结构的对象可以共享相同的外部接口,通过这种方式减少代码的复杂度。 动态绑定:绑定指的是将一个过程调用与相应代码链接起来的行为。动态绑定是指与给定的过程调用相关联的代码只有在运行期才可知的一种绑定,它是多态实现的具体形式。 消息传递:对象之间需要相互沟通,沟通的途径就是对象之间收发信息。消息内容包括接收消息的对象的标识,需要调用的函数的标识,以及必要的信息。消息传递的概念使得对现实世界的描述更容易。 方法:方法(Method)是定义一个类可以做的,但不一定会去

4、做的事。,OO特点,封装继承多态类的复用,封装,类(class)接口(interface)包(package) 类图(UML),UML 类图,UML 接口,UML 包,继承,类的继承(extends)接口的继承(extends)接口的实现(implements),多态,把不同的子类对象都当作父类来看,可以屏蔽不同子类对象之间的差异,写出通用的代码,做出通用的编程,以适应需求的不断变化。 方法多态方法重载(overloading)方法覆盖(overriding)对象变量多态(李氏替换原则)。泛型多态(genericity )。实现运行时多态技术的条件:有一个继承层次关系;在子类中重写基类的方法;

5、通过基类的引用对子类对象进行调用。,类的复用,继承优点: 容易进行新的实现,因为其大多数可继承而来。 易于修改或扩展那些被复用的实现。缺点: 破坏了封装性,因为这会将父类的实现细节暴露给子类。 “白盒”复用,因为父类的内部细节对于子类而言通常是可见的。 当父类的实现更改时,子类也不得不会随之更改。 从父类继承来的实现将不能在运行期间进行改变。,组合也就是一个类的对象是另外一个类的成员 class HeadHead()System.out.println( head );class BodyBody()System.out.println( body );class Person()Head h

6、=null;Body b=null;Person() h=new Head(); b =new Body();,优点: 容器类仅能通过被包含对象的接口来对其进行访问。 “黑盒”复用,因为被包含对象的内部细节对外是不可见。 封装性好。 实现上的相互依赖性比较小。 每一个类只专注于一项任务。 通过获取指向其它的具有相同类型的对象引用,可以在运行期间动态地定义(对象的)组合。缺点: 从而导致系统中的对象过多。 为了能将多个不同的对象作为组合块来使用,必须仔细地 对接口进行定义,UML和类图关系,实现关系(Realization) 泛化关系(Generalization)关联关系(Associatio

7、n)聚合关系(Aggregation)合成关系(Composition)依赖关系(Dependency),泛化关系(Generalization),泛化表示一个更泛化的元素和一个更具体的元素之间的关系。泛化是用于对继承进行建模的UML元素。在Java中,用extends关键字来直接表示这种关系。,实现关系(Realization),实例关系指定两个实体之间的一个合同。换言之,一个实体定义一个合同,而另一个实体保证履行该合同。对Java应用程序进行建模时,实现关系可直接用implements关键字来表示。,关联关系(Association),关联关系表明对象是相互连接的。箭头是可选的,它用于指定

8、导航能力。如果没有箭头,暗示是一种双向的导航能力。,聚合关系(Aggregation),聚合是关联的一种形式,代表两个类之间的整体/局部关系。聚合暗示着整体在概念上处于比局部更高的一个级别,而关联暗示两个类在概念上位于相同的级别。聚合也转换成Java中的一个实例作用域变量。,合成关系(Composition),合成 是聚合的一种特殊形式,暗示“局部”在“整体”内部的生存期职责。合成也是非共享的。所以,虽然局部不一定要随整体的销毁而被销毁,但整体要么负责保持局部的存活状态,要么负责将其销毁。局部不可与其他整体共享。但是,整体可将所有权转交给另一个对 象,后者随即将承担生存期职责。,依赖关系(De

9、pendency),发生变化后,可能影响依赖于它的其他实例。更具体地说,它可转换为对不在实例作用域内的一个类或对象的任何类型的引用。其中包括一个局部变量,对通过方法调用而获得的一个对象的引用或者对一个类 的静态方法的引用。,OO原则与模式,OO原则GRASP模式 GoF设计模式建筑设计模式软件设计模式,OO原则,(1)“开-闭”原则(Open-Closed Principle,OCP)(2)里氏代换原则 (Liskov Substitution Principle, 或者LSP) (3)依赖倒转原则 (Dependency Inversion Principle, 或者DIP) (4)接口隔离

10、原则 (Interface Segregation Principle, 或者ISP) (5)组合/聚合复用原则 (Composition/Aggregation Principle, 或者CARP)(6)迪米特法则或最少知识原则 ( Law of Demeter or Least Knowlegde Principle,LoD or LKP ) (7)单一职责原则 (Single Responsibility Principle ,SRP ),(1)“开-闭”原则 (Open-Closed Principle,OCP),Software entities should be open for

11、 extension,but closed for modification 。简单的来说开闭原则就是对系统的修改关闭,系统的扩展开放,做到有的放矢。在设计一个模块的时候,应当使这个模块在不被修改的前提下被扩展。换言之,应当可以在不必修改源代码的情况下改变这个模块的行为。GOF的23种设计模式基本都支持OCP,说明OCP的重要性,可以说开闭原则是设计系统的总则 。,例子:玉帝招安美猴王,当年大闹天宫便是美猴王对玉帝的新挑战。美猴王说:皇帝轮流做,明年到我家。只教他搬出去,将天宫让于我!对于这项挑战,太白金星给玉皇大帝提出的建议是:降一道招安圣旨,宣上界来,一则不劳师动众,二则收仙有道也。换而言

12、之,不劳师动众、不破坏天规便是闭,收仙有道便是开。招安之道便是玉帝天庭的开放封闭原则。招安之法的关键便是不允许更改现有的天庭秩序,但允许将妖猴纳入现有秩序中,从而扩展了这一秩序。用面向对象的语言来讲,不允许更改的是系统的抽象层,而允许更改的是系统的实现层。,(2)里氏代换原则 (Liskov Substitution Principle, 或者LSP),很严格的原则,规则是“子类必须能够替换基类,否则不应当设计为其子类。”也就是说,子类只能去扩展基类,而不是隐藏或覆盖基类。LSP是继承复用的基石。只有当子类可以替换掉基类,软件单位的功能不会受到影响时,基类才能真正被复用,而子类也才能够在基类的

13、基础上增加新的行为。,(3)依赖倒转原则 (dependence inversion principle, DIP),依赖倒转原则讲的是:要依赖于抽象,不要依赖于具体就是说我们尽量在抽象层进行控制编程,要针对接口编程,不要针对实现编程。,(4)接口隔离原则(Interface Segregation Principle, 或者ISP),使用多个专门的接口比使用单一的总接口要好。也就是,从一个客户类的角度来讲:一个类对另外一个类的依赖性应当是建立在最小的接口上的。把几个看上去差不多的接口合并成一个接口,节省接口的数目,而形成一个臃肿的大接口,是对接口的污染。,(5)组合/聚合复用原则(Compo

14、sition/Aggregation Principle, CARP) 也称为 合成复用原则 (Composite Reuse Principle或CRP),要尽量使用合成/聚合,尽量不要使用继承。合成(Composition)和聚合(Aggregation)均是关联(Association)的特殊种类。聚合用来表示“has-a”关系或者整体与部分的关系,而合成则用来表示一种强的多得“has-a”关系。在一个合成关系里,部分和整体的生命周期是一样的。一个对象在同一个时间内只能属于一个合成关系,一个合成关系中的成分对象是不能与另一个合成关系共享的。这种复用是黑盒复用。继承复用通过扩展一个已有对象

15、的实现来得到新的功能。继承复用破坏包装,因为继承将超类的实现细节暴露给子类。这种复用是白盒复用。如果超类的实现发生改变,那么子类的实现不得不发生改变的。继承是“Is-A”关系。合成/聚合是“Has-A”关系。,(6)迪米特法则或最少知识原则 (Law of Demeter or Least Knowlegde Principle,LoD or LKP),这个原则首次在Demeter系统中得到正式运用,所以定义为迪米特法则。它讲的是“一个对象应当尽可能少的去了解其他对象”。也就是又一个关于如何松耦合(Loosely-Coupled)的法则。如果不是“朋友”,就不给予调用。 不和陌生人说话。,(7

16、)单一职责原则(Single Responsibility Principle ,SRP ),单一职责很容易理解,也很容易实现。所谓单一职责,就是一个设计元素只做一件事。什么是“只做一件事”?简单说就是少管闲事。现实中就是如此,如果要你专心做一件事情,任何人都有信心可以做得很出色。,GRASP模式概述,设计模式是关于类和对象的一种高效、灵活的使用方式,也就是说,必须先有类和对象,才能有设计模式的用武之地,否则一切都是空谈,那么类和对象是从那冒出来的呢?这时就需要GRASP模式登场了!GRASP(General Responsibility Assignment Software Patterns),中文名称为“通用职责分配软件模式”,GRASP一共包括9种模式,它们描述了对象设计和职责分配的基本原则。也就是说,如何把现实世界的业务功能抽象成对象,如何决定一个系统有多少对象,每个对象都包括什么职责,GRASP模式给出了最基本的指导原则。,

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 高等教育 > 大学课件

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号