面向对象技术与UML-郭.ppt

上传人:za****8 文档编号:15717464 上传时间:2020-09-01 格式:PPT 页数:91 大小:2.46MB
返回 下载 相关 举报
面向对象技术与UML-郭.ppt_第1页
第1页 / 共91页
面向对象技术与UML-郭.ppt_第2页
第2页 / 共91页
面向对象技术与UML-郭.ppt_第3页
第3页 / 共91页
点击查看更多>>
资源描述
第2章 面向对象技术与UML,2.1 面向对象技术概述 2.2 面向对象的分析 2.3 面向对象的设计 2.4 基于UML的面向对象分析、设计过程,软件开发的难点,结构化软件开发方法的主要思想: 对问题进行功能分解,如果分解后得到的功能过大,那么再对这些功能进行分解,直到最后分解得到的功能能比较方便地处理和理解为止。(功能分解法 ),在结构化方法中,现实世界被映射为功能(函数)的集合。,结构化方法的特点: 结构化程序设计:程序 = 算法 + 数据结构 从算法的角度进行建模,大量精力都集中在控制流程和算法的分解上(功能分解)。 缺点:需求变动、维护困难,2.1 面向对象技术概述,面向对象方法的引入:软件复杂性的增长, 使软件开发越来越困难。 面向对象的方法按照人类的自然思维的方式,面对客观世界建立软件模型。,软件现实业务映射到计算机,面向对象软件开发方法的主要思想: 安照人类的自然思维的方式,对客观世界建立软件模型。 客观实体和实体之间的联系构成了现实世界的所有问题。 面向对象技术将现实世界中的实体及相互关系映射为对象及对象间的关系,实体间的相互作用被映射为对象间的消息发送等。,面向对象方法的主要优点,把易变的数据结构和部分功能封装在对象内并加以隐藏 保证了对象行为的可靠性 对其修改并不会影响其它对象,有利于维护,对需求变化有较强的适应性 封装性和继承性有利于复用对象 把对象的属性和操作捆绑在一起,提高了对象(作为模块)的内聚性,减少了与其它对象的耦合,为复用对象提供了可能性和方便性 在继承结构中,特殊类对一般类的继承,本身就是对一般类的属性和操作的复用,什么叫问题域?,开发一个软件是为了解决某些问题,这些问题所涉及的业务范围称为该软件的问题域。 不同问题域中同一事务描述的角度就不相同。 问题域的范围也对软件开发的复杂程度有一定的影响。,2.1.1 面向对象的基本概念,Coad和Yourdon: 面向对象=对象+类+继承+通信 面向对象技术基于对象概念,以对象为中心,以类和继承为构造机制,充分利用接口和多态提供灵活性,来认识、理解、刻划客观世界和设计、构建相应的软件系统。,2.1.1 面向对象的基本概念,面向对象技术的基本观点: 客观世界由对象组成,任何客观实体都是对象,复杂对象可以由简单对象组成。 具有相同数据和操作的对象可归纳成类,对象是类的一个实例。 类可以派生出子类,子类除了继承父类的全部特性外还可以有自己的特性。 对象之间的联系通过消息传递来维系。,2.1.1 面向对象的基本概念,面向对象的核心元素: 对象 类 抽象 封装 继承 多态性 消息 结构与连接,1. 对象,客观世界里的任何实体都可以被称为对象。 对象可以是具体的、有形的物,也可以是无形的事物或概念。 对象是问题域或实现域中某些事物的一个抽象。不同的角度和不同的问题域对一个对象的描述有所不同。 对象是一个封装数据属性和操作行为的实体。 系统中的对象在软件生命周期的各个阶段可能有不同的表示形式。例如:分析设计阶段和编码阶段不同。,对象的标识(名字),每一个对象都有一个唯一的标识, 即使其状态有可能与其它对象一样。,no1,no2,no3,对象的状态(数据属性),一个对象的状态是它反映于现实世界的一系列属性: 基本描述 载客人数 飞机类型 它与其它对象的关系 飞机驾驶员 所属的航空公司 任一时刻的历史状态,可能的状态: 停泊 飞行 着陆,班机 747,对象的行为(操作行为),定义当其它对象发出请求时,该对象如何反应 由对象定义的一系列操作决定,动作: 起飞 着落,UML中的对象表示,注意:对象名下有下划线,1. 命名对象,2. 匿名对象,对象名,对象名:类名,:类名,2. 类,类是一组具有相同数据结构和相同操作的对象的集合,类是对象的抽象,它为属于该类的对象提供了统一的抽象描述。 在下面这副图中您看到了什么类?,属性,属性是类的特征或特性 属性的值是某一特定对象的属性值 在类中属性名必须是唯一的 同类的对象具有相同的属性,但属性值会有所不同。,银行帐户类属性 帐号 银行名称 拥有者 金额,Mary的银行帐户属性值 12345678 First National Bank Mary Smith $1024.48,UML对象的绘制 注意:对象名下有下划线,属性取决于视点,从销售人员的角度 型号 价格 颜色 里程数,一辆汽车具有的属性:,从维修人员的角度 马达类型 传动类型 维修记录,操作,对象的行为是由为此对象定义的一系列操作决定的。 操作访问或修改对象的属性值。 一个类可能同时存在多个实例,也可能在某一时刻没有实例。 一个类的所有实例都可以使用在这个类中定义的操作。,从销售人员的角度 处理客户定单 准备销售合同 加入清单 从清单中删除,一辆汽车具有的操作:,从维修人员的角度 测试刹车 修理刹车 转动轮胎 检查马达速度,操作取决于视点,类和对象,对象,实体,类,抽象数据类型,计算机世界,实 例 化,抽 象,映 射,映 射,现实世界,类是生成对象的模板,类是生成对象的模板 类的定义中包含有产生和删除对象的操作。(构造函数和析构函数) 一个类定义了使用哪种数据表示法来描述属性 每一个实例都采用有属性值的数据表示法。 一个类通过一系列操作来定义行为 这种操作能在每个实例中激活。,类和对象的关系,每一个对象都是某一个类的实例。 每一个类在某一时刻都有零个或更多的实体。 类是静态的;它们的存在、语义和关系在执行前就已经定义好了。 对象是动态的; 它们在程序执行时可以被创建和删除。,3.抽象,抽象是从众多的事物中抽取出共同的、本质性的特征 。 抽取对问题域有帮助的对象属性和行为。 问题域不同,抽象结果也不同。,Sample-Object and Class,现实世界中的学生对象和对Student类的建模,Bob,John,Kate,Beverly,Student 属性 方法,一些Student对象,Student类,抽象为,一个项目的抽象依赖于定义抽象的问题域 问题域不同,抽象程度也不同,4. 封装 (encapsulation),封装是面向对象方法的一个重要原则。 封装有两个含义: 结合性(数据抽象):把对象的属性和方法结合起来,形成一个不可分割的单位。 信息隐蔽性:尽可能隐藏对象的内部细节,对象的私有数据不能被外界存取,对外使用接口与外部发生联系。 例如:电视机,为什么要封装,结构化程序设计:程序 = 算法 + 数据结构,全局数据,算法,算法,算法,算法,一个大问题:如何保证数据的一致性和安全性?,面向对象程序设计:程序 = 对象s + 消息 对象1算法 + 数据结构 . 对象n 算法 + 数据结构,封装 信息隐藏的过程 有选择的数据隐藏 防止意外的数据破坏,保证数据的一致性和安全性 更易于隔离和修复错误,封装的目的,将对象的使用者和对象的设计者分开,使用者不必知道行为实现的细节,只需用设计者提供的消息来访问该对象。 把定义和实现分开,可以大大提高软件的可维护性、可修改性。,可见性问题,Visibility可见性 层次 public: + protected: # private: - friend 友元,UML 类图,ROSE画出的类图,5. 继承,继承性是面向对象程序设计语言不同于其他语言的最主要特点。 继承是指子类可以自动拥有父类的全部属性与操作的机制。 父类(基类) 子类(派生类),继承性表示类之间的层次关系。 类间具有共享特征 类间具有差别或新增部分 类间具有层次关系 继承关系是“is a ”或“kind of”的关系。,继承的好处,通过继承可实现代码复用,可降低软件开发和维护的费用,继承是OO技术和非OO技术的一个很明显的区别。 继承的另一个好处是可以保证类之间的一致性,父类可以为所有的子类定制规则,子类必须去遵守这些规则。如C+中的虚函数,Java中的接口。,继承的描述 子类可以继承父类的全部属性与操作,并可以添加或重新定义所继承的方法。 如果是重新定义,称为覆盖。注意:覆盖和重载是不同的。,覆盖的例子 public class A String name; public String getValues() return “Name is”+name; public class B extends A String address; public String getValues() return “address is”+address; ,重载的例子 public class A String name; public String getValues() return “Name is”+name; public class B extends A String address; public String getValues(String name) return “address is”+address; ,继承性又分为单重继承和多重继承两类。,单重继承:子类只有一个父类,多重继承:有多个父类的继承,思考一下?,C+是否支持多继承? JAVA是否支持多继承? 继承是否具有传递性?,6. 多态性,定义:同一操作作用于不同的对象,可以有不同的解释,产生不同的执行结果。 例子: 动物叫,多态性是指在父类中定义的属性和操作被子类继承后,可以表现出不同的行为。 在父类与子类的类层次结构中,利用多态性可以使不同层次的类之间共享一个方法名,而个自有不同的操作。当一个对象接收到一个请求消息时,所采取的操作将根据该对象所属的类决定。,多态性分为两种: 1.编译时的多态性。通过重载和对象调用实现。 (静态绑定) 2.运行时的多态性。通过指向基类的指针实现,并且需要虚函数。 (动态绑定),接口(Interface)的概念,接口是一组没有相应方法实现的操作,非常类似于仅包含抽象方法的抽象类。 接口是对对象行为的描述,但是并不给出对象的实现和状态。(通俗的说,接口只是说明函数应该做什么(what),但没有定义函数如何做(how)。) 接口只包含操作而不包含属性,并且接口也没有对外界可见的关联。,一个类可以实现多个接口。使用接口比使用抽象类要安全得多,因为它可以避免许多与多重继承相关的问题。 这也是为什么像Java和C#等新型编程语言允许类实现多个接口,但只能继承一个通用或抽象类。,1. 通过接口实现多态性 接口描述类需要实现实现的操作以及每个操作需要接收和返回的参数类型,但将操作的特定实现留给实现接口的类去完成。 多个类可以实现相同的接口。 单个类可以实现一个或多个接口。 实现某接口的类都有此接口定义操作的不同实现方式。,多态性的实现方式:,2.通过继承实现多态性: 多个类可以从单个基类继承,子类不仅接收基类的所有方法,还可以重写基类的操作以提供不同的实现。 3通过抽象类实现的多态性 抽象类同时提供了继承和接口的元素。抽象类本身不能实例化,必须被继承。抽象类的部分或全部成员可能未实现,该实现由继承类提供。已实现的成员仍可被重写,并且继承类可以实现附加接口或其它功能。,7. 消息 message,消息是向对象发出的服务请求。 一个消息包含消息名、接受对象的标志、服务(方法)标志、输入信息、回答信息等。 消息传递机制。 注意:消息和函数存在区别 消息可以包括同步消息和异步消息。如果消息是异步的,则一个对象发送消息后,就继续自己的活动,不用等待消息接收者返回控制,而函数调用往往是同步的,消息发送者要等待接收者返回。,一个对象能够接收多个形式、内容不同的消息 相同形式的消息可以发送给不同的对象 不同的对象对于形式形同的消息可以有不同的解释,做出不同的反应。,面向对象例子,面向对象(Object Oriented,简称OO)方法将世界看作一个个相互独立的对象,相互之间并无因果关系。只有在某个外部力量的驱动下,对象之间才会依据某种规律相互传递信息。,如果一次成型一辆汽车太过困难,我们可以将汽车分解为很多零件,分步制造,再依据预先设计好的接口把它们安装起来,形成最终的产品。,1. 当对象们被按规则组合起来以后,就能表达预期的功能。其实世界就是这样组成的。平时看上去每个对象都互无关系,然而当它们按图示规则组织起来之后,踩下刹车,汽车便乖乖停住了。,2.每个对象都只与有限的其他对象有关系。每个对象不再需要从整个系统的角度 来分析,需要关心的只是与它有关系的那几个对象。 这使得我们在分析对象的时候需要考虑的信息量大大减少,减化了我们所面对的复杂程度。,3.只要符合规则要求,这些标准零件就可以替换!这给我们带来了极大的灵活性和扩展能力。,4.抽象层次。站在汽车的抽象层次,我们会发现汽车是由变速器、发动机、底盘等部件组成的;站在发动机的抽象层次,我们会现发动机是由汽缸、活塞等零件组成的;而站在活塞的抽象层次,我们还会发现活塞是由拉杆、曲轴等更小的零件组成的 抽象层次的好处是不论在哪一个层次上,我们都只需要面对有限的复杂度和有限的对象结构,从而可以专心地了解这个层次上的对象是如何工作的;抽象层次的另一个更重要的好处是低层次的零件更换不会影响高层次的功能,设想一下更换了发动机的火花塞以后,汽车并不会因此而不能驾驶。,8. 结构与连接,问题域中对象关系之间的描述:对象的分类关系、对象之间的组成关系,对象属性之间的静态关系,对象行为之间的动态关系。 面向对象方法用以下四种方法描述对象之间的关系。 一般/特殊结构 整体/部分结构 实例连接 消息连接,1.一般/特殊结构,一般/特殊结构又称做分类结构,是一组由一般/特殊关系的类所组成的结构。,单继承 树形结构,多继承 网络结构,2.整体/部分结构,整体/部分结构又称为组装(成)结构,描述对象之间的组成关系。,3.实例连接,反映对象和对象间的静态关系。,可通过对象的属性表达出来。,Class Driver /. . . ; Class Car Driver d; /. . . ;,4.消息连接,描述对象之间的动态联系。 一个对象需要另一个对象对它提供服务。 消息连接是有向。连接从消息发送者指向消息接收者。,可通过对象之间发送消息。,实例:“东北一家人?”,东北人都是活雷锋 人、东北人、雷锋 老张开车去东北 撞啦! 老张、汽车、开车 撞啦,class Region class 人 Region 籍贯; interface 雷锋 helpPeople() class 东北人 extends 人 implements 雷锋 籍贯 = 东北; helpPeople() ,class Car DriveTo(Region) throws Exception (撞车) 人 Driver; main() 人 老张; Car 夏利; 夏利.Driver = 老张; try 夏利.DriveTo(东北); catch (Exception) ,2.1.2 面向对象的开发语言,1. 面向对象的建模语言 2. 面向对象的程序设计语言,1. 面向对象的建模语言,Unified Modeling Language(UML)(统一建模语言)是对象管理组织(OMG)制定的一个通用的、可视化的建模语言标准,可以用来可视化(visualize) 、描述(specify)、构造(construct)和文档化(document)软件密集型系统的各种工件(artifacts,又译制品) 。,UML-Unified Modeling Language,UML-Unified Modeling Language,语义 语法,UML诞生,公众 反馈,OOPSLA95 Unified Method 0.8,工业化 标准化 统一化 分散的 各部分,Booch93 OMT-2,1996.6和1996.10 UML 0.9&0.91,1997.9公布 UML 1.1,1997.1公布 UML 1.0,合作伙伴意见,1997.11.17 UML 1.1被OMG 接纳为标准,Booch91 OMT-1 其他方法 OOSE,OMG (Object Management Group) 对象管理组织,UML的发展过程,UML发展现状,目前通用的是UML 1.x版 主要UML 1.3、UML 1.4 2003年3月正式发布UML 1.5 UML 2.0 2003年6月OMG采纳了UML 2.0的Superstructure的提案 正处于发展阶段,UML的应用领域,信息系统: 与数据库有关的系统 技术系统:处理和控制技术设备 嵌入式系统:控制像移动电话这样的设备以及家用设备 分布式系统:分布式系统(distributed system)是建立在网络之上的软件系统。 基于web的分布式应用(client-sever结构) 系统软件:操作系统和编写系统实用程序 业务系统:与工作流有关的系统,UML语言的特点,不是一种可视化的程序设计语言,而是一种可视化的建模语言。 是一种建模语言规格说明,是面向对象分析与设计的一种标准表示。 不是过程,也不是方法,但允许任何一种过程和方法使用它。(RUP:Rational Unified Process ) 简单并且可扩展,具有扩展和专有化机制,便于扩展,无需对核心概念进行修改。 UML独立于实现技术(如开发语言),在软件开发各个环节都可能用到。 为面向对象的设计与开发中涌现出的高级概念(如协作、框架、模式和组件)提供支持,强调在软件开发中,对架构、框架、模式和组件的重用。,UML 与 RUP,UML并不是一个方法,而只是一种语言。UML定义了基本元素,定义了语法,但是如果要做一个软件项目,还需要有方法的指导。 RUP(Rational Unified Process)统一过程。统一过程归纳和整理了很多在实践中总结出来的软件工程的最佳实践,是一个采用了面向对象思想,使用UML作为软件分析设计语言,并且结合了项目管理、质量保证等许多软件工程知识综合而成的一个非常完整和庞大的软件方法。 RUP定义了软件开发过程中最重要的阶段和工作(四个阶段和九个核心工作流),定义了参与软件开发过程的各种角色和他们的职责,还定义了软件生产过程中产生的工件(见注),并提供了模板。最后,采用演进式软件生命周期(迭代)将工作、角色和成果物串在一起,形成了统一过程。,74,UML主要作用,使用可视化建模来获取并表现商业逻辑和对象,使用可视化建模来分析和设计计算机应用程序,UML是客户、系统分析员和程序员之间的“桥梁”,用图形的方式展现系统,建立模型是为了更好地理解我们开发的系统,便于交流。,用例图 类图 对象图 活动图 状态图 时序图 组件图 部署图 ,75,UML主要作用,UML从客户的角度将复杂的系统整理清楚。(用例图分析需求和测试),76,UML主要作用,开发人员可以从不同角度整体上理解 我们要开发的系统,UML主要作用,文档化我们所作出的决定,将所建造的系统记录下来,便于新程序员跟进。 并且开发产品新版本时很有用处。 并且UML既支持正向工程又支持反向工程。,2. 面向对象的程序设计语言,四个基本的分支: 基于Smalltalk的语言 基于C的语言 C+ JAVA 基于LISP的语言 基于PASCAL的语言,2.1.3 面向对象的设计与开发工具,1. 面向对象的开发工具 面向对象的程序设计语言对应的可视化的集成开发环境。 VC+ JBuild Eclpise .NET 2. 面向对象的设计工具 支持面向对象建模。 IBM Rational Rose,2.2 面向对象分析(OOA),2.2.1面向对象分析的基本原则 2.2.2 对象之间的通信,2.2.1 面向对象分析的基本原则*,为了尽可能完成高质量、高效率的分析,分析过程应遵循如下原则: 抽象原则 分类原则 聚合原则 关联原则 消息通信原则,1.抽象原则,系统中的对象是对现实世界中事物的抽象。 类是对象的抽象。 一般类是特殊类的抽象。 属性是事物静态特征的抽象。 操作是事物动态特征的抽象。,2.分类原则,分类是把具有相同属性和行为的对象划分为一类,用类作为这些对象的抽象描述。 通过不同程度的抽象可以形成一般/特殊结构。 3.聚合原则 在面向对象分析中运用聚合原则将一个复杂的事物划分为几个组成部分,形成整体/部分结构。,4.关联原则,通过一个事物可以联想到另外一个事物。 在面向对象分析中运用关联原则可以在系统模型中明确表示对象之间的静态联系。实例连接 5.消息通信原则 对象之间只能通过消息进行通信。 由于封装性。 用消息连接表示对象之间的动态联系。,2.2.6 对象之间的通信,1. 一般/特殊结构 2. 整体/部分结构 3. 实例连接 4. 消息连接,1. 一般/特殊结构,一般/特殊结构均形成层次或网络,2. 整体/部分结构,3. 实例连接,实例连接用于表达对象之间的静态联系,4. 消息连接,定义:两个对象之间存在的由于通信需要而形成的关系。 表示方法:使用箭头从发送消息的对象指向接收消息的对象。,高层模块设计的准则*,弱耦合。 强内聚。 减少通信开销。 良好的可扩充性。,
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 图纸专区 > 课件教案


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!