您好,欢迎访问三七文档
©2008BUPTTSEG软件工程模型与方法Models&MethodsofSoftwareEngineering第八章面向对象基础修佳鹏xiujiapeng@bupt.cn2©2008BUPTTSEG北京邮电大学通信软件工程中心本章内容8.1面向对象基本思想8.2面向对象的主要概念和基本原则8.3几种经典的面向对象的分析和设计方法8.4统一建模语言UML简介3©2008BUPTTSEG北京邮电大学通信软件工程中心8.1面向对象基本思想面向对象方向20世纪60年代末提出,90年代得到了广泛的应用,解决问题的思路是从现实世界中的客观对象(如人或事物)出发,尽量运用人类的自然思维方式(如抽象和分类)来构造软件系统。结构化开发方法将系统划分为功能和数据两个部分,功能描述了系统能做什么,数据是系统能够操作的对象。数据和功能分别设计和实现。面向对象从现实出发,将系统抽象为一组交互的对象,每个对象既包含功能,也拥有数据。4©2008BUPTTSEG北京邮电大学通信软件工程中心8.1面向对象基本思想以图书管理信息系统为例来比较结构化开发方法和面向对象方法的思路。结构化方法:图书基本信息读者基本信息图书借阅信息图书预约信息等数据库管理员管理图书基本信息管理员办理借阅管理员办理还书读者查询图书基本信息读者查询自己的借阅信息等函数和过程5©2008BUPTTSEG北京邮电大学通信软件工程中心8.1面向对象基本思想面向对象的方法:从图书借阅的应用中抽象出四类对象数据:姓名、学号、班级、入学年份、宿舍、电话等功能:借书、还书、预约、查询图书信息、查询借阅信息、交罚款等学生数据:书名、ISBN号、出版社、出版日期、作者等功能:告知图书状态、查询借阅时间、查询借阅该书读者信息等图书数据:姓名、工作证号、所在学院、入职年份、职称、电话等功能:借书、还书、预约、查询图书信息、查询借阅信息、交罚款等教师数据:姓名、工作证号、入职时间功能:图书入库图书出库办理借书/还书收罚款管理员6©2008BUPTTSEG北京邮电大学通信软件工程中心8.1面向对象基本思想可见,面向对象不仅是一些具体的软件开发技术与策略,而且是一整套关于如何看待软件系统与现实世界的关系、用什么观点来研究问题并进行问题求解、以及如何进行系统构造的软件方法学。Coad和Yourdon给出了一个定义:“面向对象=对象+类+继承+通信”。如果一个软件系统是使用这样4个概念设计和实现的,则我们认为这个软件系统是面向对象的。一个面向对象的程序的每一成份应是对象,计算是通过新的对象的建立和对象之间的通信来执行的。7©2008BUPTTSEG北京邮电大学通信软件工程中心8.1面向对象基本思想面向对象方法是一种运用对象、类、继承、封装、聚合、关联、消息、多态性等概念来构造系统的软件开发方法。面向对象基本思想可以概括为:(1)从现实世界中客观存在的事物出发来构建软件系统,强调直接以问题域(现实世界)中的事物为中心来思考问题、认识问题,并根据这些事物的本质特征和要解决的具体问题域语境,把它们抽象地表示为软件系统中的对象,作为软件系统的基本构成单位。(对象(object))8©2008BUPTTSEG北京邮电大学通信软件工程中心8.1面向对象基本思想(2)用对象的属性表示事物的静态特征;用对象的服务(操作)表示事物的动态特征。(属性(attribute)与服务(operation))(3)对象的属性与服务结合为一体,成为一个独立的、不可分的实体,对外屏蔽其内部细节。(对象的封装(encapsulation))(4)对事物进行分类。把具有相同属性和服务的对象归为一类,类是这些对象的抽象描述,每个对象是它的类的一个实例。(分类(classification))9©2008BUPTTSEG北京邮电大学通信软件工程中心8.1面向对象基本思想(5)类具有封闭性,把内部的属性和服务隐藏起来,只有公共的服务对外是可见的。(类的封闭性)(6)复杂的对象可以用简单的对象作为其构成部分。(聚合(aggregation))(7)通过在不同程度上运用抽象的原则,可以得到较一般的类和较特殊的类。特殊类继承一般类的属性与服务,从而简化系统的构造过程及文档。(继承(inheritance))(8)通过关联表达类之间的静态关系。(关联(association))(9)对象之间通过消息进行通信,以实现对象之间的动态联系。(消息(message))10©2008BUPTTSEG北京邮电大学通信软件工程中心8.2面向对象的主要概念和基本原则8.2.1主要概念8.2.2基本原则11©2008BUPTTSEG北京邮电大学通信软件工程中心8.2.1主要概念对象类关联和链继承/泛化聚合12©2008BUPTTSEG北京邮电大学通信软件工程中心对象理解对象的两个角度:现实世界:客观存在的任何事物都可以被看作是对象。这些对象可以是有形的,如一个人或一件物品,也可以是无形的,如一项计划或者一个事件。对象是一个独立单位,它具有自己的静态特征和动态特征。软件系统:对象是用来描述现实世界客观事物的一个实体,是构成系统的一个基本单位。对象由一组属性和对这组属性进行操纵的一组操作组成。属性用来描述对象静态特征,操作用来描述对象动态特征。13©2008BUPTTSEG北京邮电大学通信软件工程中心类类是具有相同属性、操作、关系和语义的对象集合的描述。类为属于该类的全部对象提供了统一的抽象描述,由类名、属性和服务三个主要部分组成。对象是类的实例。类名属性操作+借阅图书()+归还图书()+预约图书()+查询图书()-学号-姓名学生学号=G1005姓名=王林学生2:学生学号=G1009姓名=陈浩学生3:学生学号=G1030姓名=孙周学生1000:学生学号=G1001姓名=张红学生1:学生14©2008BUPTTSEG北京邮电大学通信软件工程中心关联和链关联用来描述类之间的静态联系,可以包含关联的名称、关联的方向和多重性等属性。如上边所示:关联名称:借阅关联方向:单向多重性:7(表示最多借阅7本)图书学生借阅15©2008BUPTTSEG北京邮电大学通信软件工程中心关联和链链是关联的实例,用于描述具体对象之间的某种联系。对象之间的链可以通过对象的属性表达出来。例如,用类“学生”的对象的属性来记录该对象具体借阅的“图书”对象。16©2008BUPTTSEG北京邮电大学通信软件工程中心继承/泛化继承也称泛化,是面向对象描述类之间相似性的一种重要机制。当需要定义的一个新类与已经存在的类存在一定程度的相似度的时候,可以通过继承已经存在的类的方法来创建新类,从而减少定义新类的工作量。在类的继承层次结构中,位于较高层次的类叫做一般类/超类/父类,而位于较低层次的类叫做特殊类/子类。继承使得特殊类自动地拥有或隐含地复制一般类的全部属性、操作和关联。17©2008BUPTTSEG北京邮电大学通信软件工程中心继承/泛化+接电话()+打电话()+收电子邮件()-姓名-电话-电子邮箱地址人+考试()-学号-班级学生+授课()-工作证号-工龄教授-名称-位置大学-名称-活动时间兴趣小组18©2008BUPTTSEG北京邮电大学通信软件工程中心继承/泛化需要注意的是,只有当两个类之间是“isa”,“islike”或“isakindof”关系时,才可以使用继承。由于“学生”“isa”“人”,“教授”“isa”“人”,因此类“学生”可以继承类“人”、类“教授”可以继承类“人”。继承可分为单继承和多继承。如果一个子类继承了超过一个以上的父类的属性和操作,那么这种继承就是多继承,否则就是单继承。继承是可传递的,可以跨越任意层次。子类继承其所有祖先类的属性、操作和关联。-姓名-......人员-学号-班级-......研究生-职称-工龄-......教职工-在职单位-......在职研究生19©2008BUPTTSEG北京邮电大学通信软件工程中心聚合聚合刻画了现实世界事物的构成关系,是一种具有整体--部分语义的关联,也就是说,聚合是关联的一种,只是普通关联的语义没有聚合那么强。举例,车是一个整体实体,车轮轮胎、发动机、车身、车座等是整辆车的一部分。20©2008BUPTTSEG北京邮电大学通信软件工程中心8.2.2基本原则分类封装和信息隐藏消息通信多态性21©2008BUPTTSEG北京邮电大学通信软件工程中心分类分类是按照某种原则划分事物的类别,利用它有助于对复杂世界的认识。在面向对象的方法中,分类就是把具有相同属性和操作的对象划分为一类,用类作为这些对象的抽象描述。运用分类原则,可以清楚地表示对象和类之间的关系以及特殊类和一般类之间的关系。22©2008BUPTTSEG北京邮电大学通信软件工程中心封装和信息隐藏封装是指将属于对象的各种信息(属性)和对象的行为(操作)组织起来,形成一个实体――对象。接口:定义外部实体能对对象进行的操作方式;信息隐藏有两方面含义:对象属性只有通过对象对外发布的接口访问;外部对象只关心接口的访问方法,不关心接口的内部实现;属性集操作操作操作操作23©2008BUPTTSEG北京邮电大学通信软件工程中心消息通信消息是对象间实现通信的手段。操作是对象与外界的接口,当系统中的其他对象或其他系统成分请求这个对象执行某个操作时,该对象就响应这个请求,执行该操作的实现。在面向对象系统中,把向对象发出的操作请求称为消息。一条消息应包括:消息名、入口参数和返回参数。对象接收到消息后先分析消息的合法性,然后为请求者提供服务。一个对象可以是消息的发送者,也可以是消息的接收者,还可以作为消息中的参数。24©2008BUPTTSEG北京邮电大学通信软件工程中心多态性多态性(polymorphism)指在不同的类中可以定义相同的操作,而这些操作在这些类中可以有不同的实现。简单说,当将子类对象的引用传给声明为父类的一个对象变量,如果子类有这个方法就调用子类的方法,如果子类没有这个方法就调用父类的这个方法。多态性也是一种特性,这种特性使得一个属性或变量在不同时期可以表示不同类型的对象。从而增加了代码的灵活性和扩展性。25©2008BUPTTSEG北京邮电大学通信软件工程中心多态性设有一个类Instrument,在该类中定义了一个操作play,类Wind、Percussion、Stringed和Brass继承类Instrument而成为该类的子类,不同的子类对play操作都有不同的实现。现在,需要写一段代码,分别创建上述4个子类的对象,并让这些对象执行play操作。26©2008BUPTTSEG北京邮电大学通信软件工程中心多态性publicclassMusic{//不用关心数组元素具体是绑定到哪种对象staticvoidtuneAll(Instrument[]e){for(inti=0;ie.length();i++)e[i].play();}publicstaticvoidmain(String[]args){Instrument[]orchestra=newInstrument[4];inti=0;//将子类对象的引用赋值给引用父类对象的变量orchestra[i++]=newWind();orchestra[i++]=newPercussion();orchestra[i++]=newStringed();orchestra[i++]=newBrass();tuneAll(orchestra);}}//27©2008BUPTTSEG北京邮电大学通信软件工程中心8.3几种经典的面向对象的分析和设计方法8.3.1OOA/OOD8.3.2Booch方法8.3.3对象建模技术(OMT)8.3.4面向对象软件工程方法(OOSE)28©2008BUPTTSEG北京邮电大学通信软件工程中心8.3.1OOA/OODOOA(Obj
本文标题:软件工程模型与方法
链接地址:https://www.777doc.com/doc-213289 .html