软件工程中南大学CentralSouthUniversity2019/12/15第九章面向对象方法学引论2019/12/152本讲内容9.1面向对象方法学概述9.2面向对象的概念9.3面向对象建模9.4对象模型9.5动态模型9.6功能模型9.73种模型之间的关系软件工程中南大学CentralSouthUniversity2019/12/159.1面向对象方法学概述2019/12/1549.1面向对象方法学概述--传统的软件工程方法学应用于大型软件产品的开发时,似乎很少取得成功。--源于20世纪60年代后期出现的面向对象编程语言Simula-67(类和对象的概念),逐步形成了面向对象方法学。到了20世纪90年代,面向对象方法学已经成为人们在开发软件时首选的范型。2019/12/1559.1.1面向对象方法学的要点现实世界问题空间解空间(计算机系统)问题域实现域抽象模拟领域知识设计知识生成知识•面向对象方法学的要点2019/12/1569.1.1面向对象方法学的要点语义断层——不同的语言(/对象)来表达问题和解.客观世界中的实体既具有静态的属性又具有动态的行为。然而传统语言提供的解空间对象实质上却仅是描述实体属性的数据,必须在程序中从外部对它施加操作,才能模拟它的行为。2019/12/1579.1.1面向对象方法学的要点对象?(面向对象语言)在问题空间中,对象是……•现实世界中存在的实体•应用所关心的抽象概念、规则、事件、或者具有明确边界和意义的具体事物在解空间(计算机系统)中,对象是……•问题空间中的对象在计算机系统中的表示•封装(encapsulation)了数据和行为的通信单位2019/12/1589.1.1面向对象方法学的要点与传统方法相反,面向对象方法是一种以数据或信息为主线,把数据和处理相结合的方法。面向对象方法把对象作为由数据及可以施加在这些数据上的操作所构成的统一体。对象与传统的数据有本质区别,它不是被动地等待外界对它施加操作,相反,它是进行处理的主体。面向对象方法是一种新的思维方法,它是把程序看作是相互协作而又彼此独立的对象的集合。这样就减小了语义断层:系统中解空间对象可以直接模拟问题空间的对象,解空间与问题空间的结构十分一致。2019/12/1599.1.1面向对象方法学的要点面向对象方法具有下述4个要点:(1)认为客观世界是由各种对象组成的,任何事物都是对象,复杂的对象可以由比较简单的对象以某种方式组合而成。因此,面向对象的软件系统是由对象组成的。(2)类(class)是对一组对象的抽象,集中了该组对象的共同特性(一组数据和一组方法)。对象是类的实例。(3)按照子类(或称为派生类)与父类(或称为基类)的关系,把若干个对象类组成一个层次结构的系统(也称为类等级)。在这种结构中,下层的派生类自动具有和上层的基类相同的特性,这种现象称为继承(inheritance)。(4)对象彼此之间仅能通过传递消息互相联系。一切局部于该对象的私有信息,都被封装在该对象类的定义中,就好像装在一个不透明的黑盒子中一样,在外界是看不见的,更不能直接使用,这就是“封装性”。2019/12/15109.1.1面向对象方法学的要点面向对象的方法学可以用下列方程来概括:OO=objects+classes+inheritance+communicationwithmessages面向对象就是既使用对象又使用类和继承等机制,而且对象之间仅能通过传递消息实现彼此通信。也可以说,只有同时使用对象、类、继承和消息的方法,才是真正面向对象的方法。9.1.2面向对象方法学的优点1与人类习惯的思维方法一致2稳定性好3可重用性好4较易开发大型软件产品5可维护性好2019/12/15119.2面向对象的概念2019/12/1512对象类类间关系消息与事件多态性9.2.1对象2019/12/1513对象在解空间(计算机系统)中,对象的非严格记法:对象::=接口,数据,行为对象通信消息数据行为接口接口9.2.1对象2019/12/1514对象的基本特征每个对象均有自己的惟一标识,从而区别于其他对象。对象之间通过消息进行通信。对象总是处于一定的状态。对象有若干种行为。对象的行为分为三类:创建新对象、与其他对象通信、改变自身状态。对象的状态只能被自身的行为所改变。9.2.1对象2019/12/1515对象的特点以数据为中心。对象是主动的。实现数据的封装。本质上具有并行性。模块独立性好。9.2.2其他概念2019/12/1516类在问题空间中……“人以类聚,物以群分”类代表着具有类似性质的一组对象类中的每一个对象即为类的不同实例(instance)在解空间(计算机系统)中……类是对一组对象的抽象,集中了该组对象的共同特性。在构造软件时,类实际上是具有特定功能的模块,其代码由该种所有对象所共享。类vs.对象:静vs.动。9.2.2其他概念2019/12/1517类名属性:操作:属性:操作类的两种图形记法:9.2.2其他概念2019/12/1518对象状态:张三,30岁,计算机系,讲师,1000元行为:提职称,调工资类(教师)属性:姓名,年龄,系别,职称,工资操作:提职称,调工资方法(指操作的具体代码实现)实际上,类是创建对象的模板!9.2.2其他概念2019/12/1519类间关系继承(inheritance)聚合(aggregation)关联(relationship)9.2.2其他概念2019/12/1520继承的含义继承是一种“求同存异”的高度抽象方式相关术语超类(super-class)/父类(parentclass)/祖先类(ancestorclass)子类(sub-class)/后裔类(descendantclass)一般化(generalization)具体化(specialization)9.2.2其他概念2019/12/1521继承的分类单继承多继承多继承使类层次复杂化多继承容易产生配置控制方面的潜在问题继承的图形记法一般化具体化9.2.2其他概念2019/12/1522一般化、具体化、继承等术语均是复用思想的体现一般化和具体化是对同一个类间关系的不同角度审视父类是子类的一般化(从父类角度出发)子类是父类的具体化(从子类角度出发)继承强调一般化/具体化关系中共享属性和操作的机制9.2.2其他概念2019/12/1523聚合的含义聚合表示“部分——整体”关系相关术语组元类(componentclass)组合类(assemblyclass)注意,组合对象的存在依赖于组元对象!9.2.2其他概念2019/12/1524聚合的图形记法9.2.2其他概念2019/12/1525关联的含义对象实例之间的物理或概念联结被称为链关联是对一组语义与结构相似的链的抽象链是关联的实例关联vs.链:类vs.对象(a)二元关联人员公司雇用二元关联的例(人员)张涛(公司)通大雇用链的例子(b)三元关联项目语言◆人三元关联的例(项目)CAD系统(语言)C++◆(人)李波链的例子9.2.2其他概念2019/12/1526聚合vs.继承聚合更强调对象实例之间的关系,本质上是“与关系”(ispartof,ISP)继承更关注对象类之间的关系,本质上是“或关系”(isa,ISA)聚合树vs.继承树聚合vs.关联聚合是关联的一种特殊形式聚合与关联之间的模糊差异无关紧要9.2.2其他概念2019/12/1527消息和事件(message&event)消息是对象之间进行通信的构造或结构消息分为请求消息和完成消息两种(由消息模式描述)消息模式:发送对象、接收对象、内容事件指对象之间一次消息的传递多个事件按照时间顺序可构成事件序列消息vs.事件:静vs.动9.2.2其他概念2019/12/1528消息与对象一个对象能接收不同形式不同内容的多个消息。相同形式的消息可以送往不同的对象。对于相同形式的消息,不同对象可以有不同的解释,可以作出不同的反映。消息与方法对象接收到有效消息后,总会以某种行为做出适当反映。期间,对象行为复用了类操作的代码实现(即类方法)。在某种程度上,消息与方法可视为同义词。但是,必须牢记:消息与代码无关,而方法是操作的代码实现。9.2.2其他概念2019/12/1529多态性(polymorphism)--含义同一个操作可以是多个不同类的行为。不同对象接收到同一个消息后,可产生完全不同的反映。同一个消息可调用不同的方法。--意义允许每个对象以自己最合适的方式去响应共同的消息,从而增强软件的灵活性和可复用性。9.2.2其他概念2019/12/1530多态性的示例海尔长虹TCL9.3面向对象建模2019/12/1531建立问题模型是人们理解表达问题的方法之一。模型是对事物作出的一种抽象,是对事物的一种形式化的描述。模型常由专门的语言(一组图示符号和规则)来描述.面向对象建模就是根据面向对象观点(模拟人类习惯的思维方式)建立问题的解模式.面向对象的实现能将此模式在计算机上实施.9.3面向对象建模2019/12/1532面向对象方法需要建立3种形式的模型:1)描述系统数据结构的对象模型2)描述系统控制结构的动态模型3)描述系统功能的功能模型在不同的应用问题中,这3种模型的相对重要程度会有所不同,对象模型始终都是最重要、最基本、最核心的。典型的软件系统组合了上述3方面内容:使用数据结构(对象模型),执行操作(动态模型),并且完成数据值的变化(功能模型)。本课程介绍UML作为描述这些模型的语言.9.4对象模型2019/12/1533UML(UnifiedModelingLanguage)产生于90年代中期。它不仅统一了Booch、OMT和OOSE方法中的概念和表示法,而且对其作了进一步扩展,最终成为在面向对象技术领域占主导地位的、并被大众所接受的标准建模语言。1、UML概述UML的发展历程(下图)UML是一个通用的标准建模语言,可以对任何具有静态结构和动态行为的系统进行可视化建模。UML不是一个开发过程,也不是一个方法,但允许任何一种开发过程和面向对象方法使用它。统一建模语言UML2019/12/1534documentsUML2.0documentsUML1.2documentsUML1.1documentsUML1.0documentsUML0.9documentsUnifiedMethod0.8documentsUML1.3documentsUML1.41995文档版类1996精华相关1997年1月最初提交给OMG1997年9月最后提交给OMG199819992000年(计划的较小修订)2001年计划的重要修订文字上的修改没有显著的技术变化2019/12/1535UML事物关系图结构事物行为事物组织事物辅助事物静态图实现关系泛化关系依赖关系关联关系动态图交互状态机包注释顺序图活动图用例图实施图类图构件图对象图状态图协作图节点组件活动类协作接口类用例9.4对象模型2019/12/1536(1)统一标准UML统一了Booch、OMT和OOSE等方法中的基本概念,已成为OMG的正式标准,提供了标准的面向对象的模型元素的定义和表示。(2)面向对象UML还吸取了面向对象技术领域中其他流派的长处。UML符号表示考虑了各种方法的图形表示,删掉了大量易引起混乱的、多余的和极少使用的符号,也添加了一些新符号。(3)可视化、表示能力强系统的逻辑模型或实现模型都能用UML模型清晰的表示,可用于复杂软件系统的建模。(4)独立于过程UML是系统建模语言,独立于开发过程。(5)易掌握、易用由于UML的概念明确,建模表示法简洁明了,图形结构清晰,易于掌握使用。9.4对象模型2019/12/1537对象模型表示静态的、结构化的系统的“数据