《面向对象技术与UML-郭》由会员分享,可在线阅读,更多相关《面向对象技术与UML-郭(91页珍藏版)》请在金锄头文库上搜索。
1、第2章 面向对象技术与 UML l2.1 面向对象技术概述 l2.2 面向对象的分析l2.3 面向对象的设计l2.4 基于UML的面向对象分析、设计过 程 软件开发的难点l结构化软件开发方法的主要思想:对问题进行功能分解,如果分解后得到的功能过大,那 么再对这些功能进行分解,直到最后分解得到的功能能比 较方便地处理和理解为止。(功能分解法 )在结构化方法中,现实世界被映射为功能(函数)的集合。结构化方法的特点:结构化程序设计:程序 = 算法 + 数据结构从算法的角度进行建模,大量精力都集中在控制流程 和算法的分解上(功能分解)。缺点:需求变动、维护困难2.1 面向对象技术概述l面向对象 方法的
2、引 入:软件 复杂性的 增长, 使 软件开发 越来越困 难。l面向对象 的方法按 照人类的 自然思维 的方式, 面对客观 世界建立 软件模型 。l软件现实业务映射到计算机l面向对象软件开发方法的主要思想:安照人类的自然思维的方式,对客观世界建立软件模型。l客观实体和实体之间的联系构成了现实世界的所有问题。l面向对象技术将现实世界中的实体及相互关系映射为对象 及对象间的关系,实体间的相互作用被映射为对象间的消 息发送等。面向对象方法的主要优点l把易变的数据结构和部分功能封装在对象内并加以隐藏 保证了对象行为的可靠性对其修改并不会影响其它对象,有利于维护,对需求变 化有较强的适应性l封装性和继承性
3、有利于复用对象把对象的属性和操作捆绑在一起,提高了对象(作为模 块)的内聚性,减少了与其它对象的耦合,为复用对象提 供了可能性和方便性在继承结构中,特殊类对一般类的继承,本身就是对一 般类的属性和操作的复用什么叫问题域?l开发一个软件是为了解决某些问题,这些问 题所涉及的业务范围称为该软件的问题域。l不同问题域中同一事务描述的角度就不相同 。l问题域的范围也对软件开发的复杂程度有一 定的影响。2.1.1 面向对象的基本概念 lCoad和Yourdon: 面向对象=对象+类+继承+通信 面向对象技术基于对象概念,以对象为中心 ,以类和继承为构造机制,充分利用接口和 多态提供灵活性,来认识、理解、
4、刻划客观 世界和设计、构建相应的软件系统。2.1.1 面向对象的基本概念l面向对象技术的基本观点:客观世界由对象组成,任何客观实体都是对 象,复杂对象可以由简单对象组成。具有相同数据和操作的对象可归纳成类,对 象是类的一个实例。类可以派生出子类,子类除了继承父类的全 部特性外还可以有自己的特性。对象之间的联系通过消息传递来维系。2.1.1 面向对象的基本概念l面向对象的核心元素:对象 类抽象封装继承多态性消息结构与连接 1. 对象l客观世界里的任何实体都可以被称为对象。 l对象可以是具体的、有形的物,也可以是无形的事物或概 念。 l对象是问题域或实现域中某些事物的一个抽象。不同的角 度和不同的
5、问题域对一个对象的描述有所不同。l对象是一个封装数据属性和操作行为的实体。l系统中的对象在软件生命周期的各个阶段可能有不同的表 示形式。例如:分析设计阶段和编码阶段不同。 对象的标识(名字)l每一个对象都有一个唯一的标识, 即使其状态有 可能与其它对象一样。no1no2no3对象的状态(数据属性)l一个对象的状态是它反映于现实世界的一系 列属性:l基本描述 载客人数 飞机类型l它与其它对象的关系 飞机驾驶员 所属的航空公司 l任一时刻的历史状态可能的状态:停泊 飞行 着陆 班机 747对象的行为(操作行为)l定义当其它对象发出请求时,该对象如何反应l由对象定义的一系列操作决定班机 747核对出
6、发时间(返回 9:27)机票代理动作: 起飞 着落UML中的对象表示注意:对象名下有下划线1.1. 命名对象命名对象2. 2. 匿名对象匿名对象对象名对象名对象名:类名对象名:类名:类名:类名2. 类l类是一组具有相同数据结构和相同操作的对 象的集合,类是对象的抽象,它为属于该类 的对象提供了统一的抽象描述。在下面这副图中您看到了什么类?属性l属性是类的特征或特性l属性的值是某一特定对象的属性值l在类中属性名必须是唯一的l同类的对象具有相同的属性,但属性值会有所不 同。银行帐户类属性帐号 银行名称 拥有者 金额Mary的银行帐户属性值12345678 First National Bank M
7、ary Smith $1024.48UML对象的绘制 注意:对象名下有下 划线属性取决于视点l 从销售人员的角度 l 型号l 价格l 颜色l 里程数一辆汽车具有的属性:l 从维修人员的角度 l 马达类型l 传动类型l 维修记录操作l对象的行为是由为此对象定义的一系列操作 决定的。l操作访问或修改对象的属性值。l一个类可能同时存在多个实例,也可能在某 一时刻没有实例。l一个类的所有实例都可以使用在这个类中定 义的操作。l 从销售人员的角度 l处理客户定单l准备销售合同l加入清单l从清单中删除一辆汽车具有的操作:l 从维修人员的角度 l测试刹车l修理刹车l转动轮胎l检查马达速度操作取决于视点类和对
8、象对象对象实体实体类类抽象数据类型抽象数据类型计算机世界计算机世界实实例例化化抽抽 象象映映 射射映映 射射现实世界现实世界类是生成对象的模板l类是生成对象的模板l类的定义中包含有产生和删除对象的操作。 (构造函数和析构函数)l一个类定义了使用哪种数据表示法来描述属性l每一个实例都采用有属性值的数据表示法。l一个类通过一系列操作来定义行为l这种操作能在每个实例中激活。类和对象的关系l每一个对象都是某一个类的实例。l每一个类在某一时刻都有零个或更多的实体 。l类是静态的;它们的存在、语义和关系在执 行前就已经定义好了。l对象是动态的; 它们在程序执行时可以被创 建和删除。3.抽象l抽象是从众多的
9、事物中抽取出共同的、本质性 的特征 。l抽取对问题域有帮助的对象属性和行为。l l问题域不同,抽象结果也不同。问题域不同,抽象结果也不同。Sample-Object and Class现实世界中的学生对象和对Student类的建模BobJohnKateBeverlyStudent属性方法一些Student对象Student类抽象为一个项目的抽象依赖于定义抽象的问题域一个项目的抽象依赖于定义抽象的问题域问题域不同,抽象程度也不同问题域不同,抽象程度也不同4. 封装 (encapsulation)l封装是面向对象方法的一个重要原则。 l封装有两个含义:结合性(数据抽象):把对象的属性和方法结合起
10、来,形成一个不可分割的单位。信息隐蔽性:尽可能隐藏对象的内部细节,对象的 私有数据不能被外界存取,对外使用接口与外部发 生联系。例如:电视机为什么要封装结构化程序设计:程序 = 算法 + 数据结构全局数据全局数据算法算法算法算法一个大问题:如何保证数据的 一致性和安全性?面向对象程序设计:程序 = 对象s + 消息对象1算法 + 数据结构 . 对象n 算法 + 数据结构封装信息隐藏的过程有选择的数据隐藏防止意外的数据破坏,保证数据的一致性和安全性更易于隔离和修复错误封装的目的l将对象的使用者和对象的设计者分开,使用者不必知道 行为实现的细节,只需用设计者提供的消息来访问该对 象。l把定义和实现
11、分开,可以大大提高软件的可维护性、可 修改性。在类的外部不能访问在类的外部可以访问私有公有类可见性问题lVisibility可见性l层次lpublic: +lprotected: #lprivate: -lfriend 友元UML 类图ROSE画 出的类图5. 继承l继承性是面向对象程序设计语言不同于其他语 言的最主要特点。 l继承是指子类可以自动拥有父类的全部属性与 操作的机制。 l父类(基类)l子类(派生类)动物l继承性表示类之间的层次关系。l类间具有共享特征l类间具有差别或新增部分l类间具有层次关系继承关系是“is a ”或“kind of”的关系。继承的好处l通过继承可实现代码复用,可
12、降低软件开发 和维护的费用,继承是OO技术和非OO技术 的一个很明显的区别。l继承的另一个好处是可以保证类之间的一致 性,父类可以为所有的子类定制规则,子类 必须去遵守这些规则。如C+中的虚函数, Java中的接口。继承的描述 子类可以继承父类的全部属性与操作 ,并可以添加或重新定义所继承的方 法。 如果是重新定义,称为覆盖。注意:覆盖和重载是不同的。l覆盖的例子public class AString name;public String getValues()return “Name is”+name; public class B extends AString address;publ
13、ic String getValues()return “address is”+address; l重载的例子public class AString name;public String getValues()return “Name is”+name; public class B extends AString address;public String getValues(String name)return “address is”+address; l继承性又分为单重继承和多重继承两类。单重继承:子类只有一个父类多重继承:有多个父类的继承思考一下?lC+是否支持多继承?lJAVA
14、是否支持多继承? l 继承是否具有传递性?6. 多态性l定义:同一操作作用于不同的对象,可以有 不同的解释,产生不同的执行结果。l例子: 动物叫l多态性是指在父类中定义的属性和操作被子类 继承后,可以表现出不同的行为。l在父类与子类的类层次结构中,利用多态性可 以使不同层次的类之间共享一个方法名,而个 自有不同的操作。当一个对象接收到一个请求 消息时,所采取的操作将根据该对象所属的类 决定。l多态性分为两种: 1.编译时的多态性。通过重载和对象调用实现 。(静态绑定) 2.运行时的多态性。通过指向基类的指针实现 ,并且需要虚函数。(动态绑定)接口(Interface)的概念l接口是一组没有相应
15、方法实现的操作,非常类 似于仅包含抽象方法的抽象类。l接口是对对象行为的描述,但是并不给出对象 的实现和状态。(通俗的说,接口只是说明函 数应该做什么(what),但没有定义函数如何 做(how)。)l接口只包含操作而不包含属性,并且接口也没 有对外界可见的关联。l一个类可以实现多个接口。使用接口比使用 抽象类要安全得多,因为它可以避免许多与 多重继承相关的问题。这也是为什么像Java和C#等新型编程语言允 许类实现多个接口,但只能继承一个通用或 抽象类。1. 通过接口实现多态性 接口描述类需要实现实现的操作以及每个操 作需要接收和返回的参数类型,但将操作的特 定实现留给实现接口的类去完成。多
16、个类可以实现相同的接口。单个类可以实现一个或多个接口。实现某接口的类都有此接口定义操作的不同实 现方式。多态性的实现方式:2.通过继承实现多态性:多个类可以从单个基类继承,子类不仅接收基 类的所有方法,还可以重写基类的操作以提供 不同的实现。3通过抽象类实现的多态性抽象类同时提供了继承和接口的元素。抽象 类本身不能实例化,必须被继承。抽象类的部 分或全部成员可能未实现,该实现由继承类提 供。已实现的成员仍可被重写,并且继承类可 以实现附加接口或其它功能。7. 消息 messagel消息是向对象发出的服务请求。l一个消息包含消息名、接受对象的标志、服务(方 法)标志、输入信息、回答信息等。 l消息传递机制。 注意:消息和函数存在区别消息可以包括同步消息和异步消息。如果消息是异 步的,则一个对象发送消息后,就继续自己的活动 ,不用等待消息接收者返回控制,而函数调用往往