软件工程1软件工程第六章面向对象技术6.1面向对象的概念6.2UML统一建模语言软件工程2(1)优点①整体思路清楚,目标明确。②设计工作中阶段性非常强,有利于系统开发的总体管理和控制。③在系统分析时可以诊断出原系统中存在的问题和结构上的缺陷。(2)缺点①用户要求难以在系统分析阶段准确定义,致使系统在交付使用时产生许多问题。②用系统开发每个阶段的成果来进行控制,不能适应事物变化的要求。③系统的开发周期长。导入结构化方法优缺点软件工程3哲学的观点认为现实世界是由各种各样的实体(事物、对象)所组成的,每种对象都有自己的内部状态和运动规律,不同对象间的相互联系和相互作用就构成了各种不同的系统,并进而构成整个客观世界。同时人们为了更好的认识客观世界,把具有相似内部状态和运动规律的实体(事物、对象)综合在一起称为类。类是具有相似内部状态和运动规律的实体的抽象,进而人们抽象的认为客观世界是由不同类的事物间相互联系和相互作用所构成的一个整体。计算机软件的目的就是为了模拟现实世界,使各种不同的现实世界系统在计算机中得以实现,进而为我们工作、学习、生活提供帮助。6.1面向对象的概念软件工程46.1面向对象的概念软件工程5客观世界中的应用问题面对的主体都是物理的或概念的实体。从这些实体出发,分析实体的作用、责任以及它们之间协作,从而找出问题的解,是很自然的。面向对象技术就是适合用这种方式分析和解决问题的方法。它的基石就是问题领域中识别出来的各种对象。依赖这些对象提供的服务和对象之间相互的协同(关系),实现期望的功能。面向对象技术能够在解决方案中直接模拟问题领域,并与人类的思维习惯相一致。6.1面向对象的概念软件工程6什么是面向对象PeterCoad和EdwardYourdon提出面向对象方法的概念:面向对象=对象+分类+继承+消息通信采用这四个概念开发的软件系统就是面向对象的软件系统。一个面向对象的程序的每一成份应是对象,计算是通过新的对象的建立和对象之间的通信来执行的。软件工程7面向对象的特点抽象性:对象包含数据抽象和行为抽象;封装性:信息隐蔽(使用与实现分开);共享性:同一个类中所有对象共享相同的数据结构和行为;同一应用中的对象通过继承关系,共享共同的数据结构和行为;不同应用中的对象通过复用,共享数据结构和行为。软件工程8对象(object)对象是系统中描述客观事物的实体,是构成系统的一个基本单元,由一组属性值和一组对属性进行操作的服务组成。对象=对象名+数据(属性)+操作(行为)属性值一般只能通过执行对象的操作来改变。操作(方法或服务)描述了对象执行的功能,若通过消息传递,还可以为其他对象使用。对象可以是外部实体、信息结构、事件、角色、组织结构、地点或位置、操作规程等。软件工程9计算机窗口中的三个多边形对象(50,60)(50,85)(35,60)(35,85)(50,45)(60,35)(56,10)(46,37)(10,50)(20,20)(23,30)软件工程10表示多边形的三个对象drawmove(x,y)contains?(aPoint)(10,50)(20,20)(23,30)triangledrawmove(x,y)contains?(aPoint)(46,37)(50,45)(60,35)(56,10)quadrilateral1drawmove(x,y)contains?(aPoint)(35,60)(35,85)(50,85)(50,60)quadrilateral2软件工程11类(class)把具有相同属性(数据结构)和服务(操作)的对象归在一起就形成了类。类的定义包括一组数据属性和在数据上的一组合法操作。属于某一个类的各个对象都是该类的实例(instance),它们都可使用类中的操作。类定义了各个实例所共有的数据结构,使用类的构造函数,可以在创建该类的实例时初始化这个实例的状态。软件工程12由两个四边形对象导出一个类drawmove(x,y)contains?(aPoint)(46,37)(50,45)(60,35)(56,10)quadrilateral1drawmove(x,y)contains?(aPoint)(35,60)(35,85)(50,85)(50,60)quadrilateral2drawmove(x,y)contains?(aPoint)point1point2point3point4quadrilateral软件工程13消息(message)消息是一个对象向另一个对象传递的信息。有四类消息:发送对象请求接收对象提供服务、发送对象激活接收对象、发送对象询问接收对象、发送对象仅传送信息给接收对象。消息的使用类似于函数调用,消息中指定了某一个实例,一个操作名和一个参数表(可能是空的),如quadrilateral1.move(15,20)。接收消息的实例执行消息中指定的操作,并将形式参数与参数表中相应的值结合起来。软件工程14消息(message)软件工程15继承(inheritance)如果某几个类之间具有共性的东西(属性和行为),抽取出来放在一个泛化类中,将各个类的特有的东西放在特化类中分别描述,则可建立起特化类对泛化类的继承。继承是使用已有的类定义做为基础建立新类的定义技术。已有的类可当做泛化类(父类)来引用,则新类相应地可当做特化类(子类)来引用。软件工程16建立继承结构的好处:易编程、易理解代码短,结构清晰易修改共同部分只要在一处修改即可易增加新类只须描述不同部分怎样建立一个好的继承层次类可以从父类继承,父类又可以从它的父类继承,形成多层次的继承结构。当增加一个新类时,不一定在最低层,可能需要插在中间层,这样可能需要调整原来的层次结构。软件工程17a)建立一个新类起重车。它的底盘、发动机、轮胎、驱动装置等都在已有类汽车中。关系如右图所示。新类是已有类的特殊情形。这时直接让起重车类作为汽车类的子类即可。起重车类汽车类汽车载重车大轿车救火车起重车软件工程18b)增加一个新类拖拉机。它的底盘、发动机等与汽车不同,但驱动装置、轮胎等与汽车相同。调整继承结构。建立一个新的一般的车辆类,把拖拉机与汽车类的共性放到车辆类中,拖拉机与汽车类都成为车辆类的子类。车辆是抽象类,相关操作到子类汽车找。汽车拖拉机车辆汽车拖拉机软件工程19c)另一种情形是在已有类的基础上加入新类,使得新类成为已有类的泛化类。例如,已经存在三角形类,四边形类,想加入一个多边形类,并使之成为三角形和四边形类的泛化类。三角形类四边形类多边形类六边形多边形四边形三角形软件工程20d)前三个情况主要是通过查找(应用领域)类库,找到可以原封不动地继承的类或可以通过调整继承层次结构继承的类。但如果在已有的继承层次中找不到可以继承的已有类,就从新开始完全独立地建立一个类。如果一个类需要用到多个现有类的特征,可以从多个类中继承,称为多继承。例如退休教师是继承退休者和教师这两个类的某些特征或行为而得到的一个新类。多继承软件工程21多态性和动态绑定对象互相通信,即一个对象发消息给另一个对象,执行某些行为或又发消息给另外的对象,从而执行系统的功能。退休者教师退休教师软件工程22多态性指同名的函数或操作可在不同类型的对象中有各自相应的实现。例如a)整数“+”:整数加法b)浮点数“+”:浮点数加法c)字符串“+”:字符串连接d)点“+”:两个点的坐标位置分别叠加具有多态的函数或操作在运行时才根据实际的对象类型,执行相应实现程序的连接,此即动态绑定。软件工程23例如,想要在屏幕上画一系列多边形,多态性允许发送消息draw,根据消息接收对象的类型不同,画出不同的多边形。draw针对的是一系列的类型(类族)而不仅仅是一个类型。多态性的实现有2种:利用继承关系,把所有数据类型当作一个抽象数据类型的子类型。软件工程24利用模板机制,把所有可能的数据类型用一个参数化的数据类型来代替。动态绑定保证在程序执行时实施与对象P连接的操作。如果P是矩形类的实例,则执行与矩形连接的操作,如果P是三角形类的实例,则执行与三角形连接的操作。动态绑定把函数调用与目标代码块的连接延迟到运行时进行。这样,只有发送消息时才与接收消息实例的一个操作绑定。软件工程256.2统一建模语言UMLUML是UnifiedModelingLanguage的缩写。它是一种标准的语言,以直观的表述、定义、构造和文档化软件为主的系统的工作制品。UML聚集了来自下列建模的精髓:数据建模(实体关系图ERD)业务建模(工作流)对象建模构件建模它可用于软件生命周期各个过程,并适用于各种不同的实现技术。软件工程26UML的特点统一标准融合了当前一些流行的面向对象开发方法的主要概念和技术,成为一种面向对象的标准化的统一建模语言。提供了标准的面向对象的模型元素的定义和表示法,有标准的语言工具可用。已成为工业标准化组织OMG的正式标准。面向对象支持面向对象的主要概念,提供了一批基本的模型元素的表示图形和方法。软件工程27可视化,表示能力强大一种图形化语言,系统的逻辑模型和实现模型都能用UML的模型图形清晰地表示。可以处理与软件的说明和文档有关的问题。提供了语言的扩展机制,用户可以根据需要增加定义自己的衍型(StereoType)、标记值和约束等。可用于各种复杂类型的软件系统的建模。独立于过程系统建模语言,独立于开发过程。软件工程28容易掌握使用概念明确,建模表示法简洁明了,图形结构清晰,容易掌握使用。着重学习三个方面的主要内容:(1)UML的基本模型元素(2)组织模型元素的规则(3)UML语言的公共机制与程序设计语言的关系用Java,C++等编程语言可实现一个系统。一些CASE工具可以根据UML所建立的系统模型来产生Java、C++等代码框架。软件工程29UML的定义UML定义有两个组成部分:语义和表示法。语义用自然语言描述,表示法定义了UML的可视化标准表示符号,这决定了UML是一种可视化的建模语言。在语义上,模型是元模型的实例。UML定义给出了语法结构的精确定义。使用UML时,要从不同的角度观察系统,为此定义了概念“视图”。视图是对系统的模型在某方面的投影,注重于系统的某个方面。软件工程30UML的构成UML的三个主要组成元素1)基本构造块(basicbuildingblocks)2)组织构造块的规则(rules)3)运用于整个UML的公共机制(commonmechanisms)UML包括三种基本构造块:1)事物(things)2)关系(relationships)3)图(diagrams)软件工程31UML事物—结构事物1)Class(类)2)Interface(接口)描述了一个类或构件的服务(操作)集。ISpelling类名属性操作open()close()move()display()originsizeWindow操作属性类名软件工程323)Collaboration(协作)合作完成某个特定任务的一组类及其关联的集合,用于对用例的实现建模。4)UseCase(用例)表示系统想要实现的行为,不关心这些行为是怎样实现的。PlaceOrderOrderManagement用例协作实现实现协作用例软件工程335)ActiveClass(主动类)与一般类相同,但它至少拥有一个进程或线程,故能够启动控制活动。6)Component(构件)系统中物理的、可替代的部件。Orderform.javasuspend()flush()EventManager软件工程347)Node(节点)系统在运行时存在的物理元素。数据库服务器应用服务器课程管理成绩管理软件工程35UML事物—行为事物8)Interaction(交互)交互由在特定的上下文环境中共同完成一定任务的一组对象之间传递的消息组成。交互涉及的元素包