面向对象分析与设计技术.ppt
第四讲 面向对象分析与设计技术,4.1 概念模型4.2 用面向对象方法建立概念模型4.3 面向对象设计的软件生命周期4.4 面向对象设计的方法,4.1 概念模型4.2 用面向对象方法建立概念模型4.3 面向对象设计的软件生命周期4.4 面向对象设计的方法,4.1.1 建立概念模型的动机,程序设计者必须清楚用户需求,才能设计出易于使用和维护的大型信息系统。程序设计者在设计过程中遇到的困难主要有以下几点:,缺乏对信息系统应用领域的了解;不同的专业人员对同一概念的理解不同;需求分析的结果很难被全体用户一致确认;过早地进入信息系统实现阶段。,上述困难迫切需要某种工具帮助实现程序设计者和用户之间的充分交流,并达成一致,概念模型就是这样一种工具。,4.1 概念模型4.2 用面向对象方法建立概念模型4.3 面向对象设计的软件生命周期4.4 面向对象设计的方法,4.1.2 概念之间的关系,概念的定义:是对实体属性的抽象和概括。,概念的静态联系有三种形式:,(1)属性关系:即一个实体概念是另一个实体概念的属性。(2)层次关系:即一个实体概念是另一个实体概念的上位概念。(3)并列关系:有两个实体概念都是同一实体概念的下位概念,但这两个实体概念的外延不相交。,概念的动态联系:由行为概念反映出来。,这种行为概念是行为的客体概念、主体概念、结果概念的联系纽带,又可以作为客体概念和主体概念的属性。,4.1 概念模型4.2 用面向对象方法建立概念模型4.3 面向对象设计的软件生命周期4.4 面向对象设计的方法,4.1.3 信息系统的概念模型,概念模型的含义:程序设计者和用户对系统所涉及的客观事物及其关系的理解,表现为一组相互关联的概念。它是由一组概念通过各种概念间关系构成的概念体系,抽象地描述了信息系统对象的结构和行为两方面的特征和关系。,4.1 概念模型4.2 用面向对象方法建立概念模型4.3 面向对象设计的软件生命周期4.4 面向对象设计的方法,构造概念模型的建模方法:“实体联系法”(E-R图法),三种基本符号:,长方形:表示实体集(类),在方框内写上该实体集的名称(类名)。,学 生,课 程,椭圆形:表示属性,在椭圆中写上属性的名称。,菱形:表示关系,在菱形中写上关系的名称。,E-R图法的缺陷:只能表示概念之间的静态关系;无法表示概念之间的动态关系,4.1 概念模型4.2 用面向对象方法建立概念模型4.3 面向对象设计的软件生命周期4.4 面向对象设计的方法,概念模型的作用:,作为公共参考框架,帮助设计者和用户在系统分析阶段进行充分交流。帮助设计者理解信息系统的应用领域以及用户需求。作为数据模型的设计依据,也可用于检验和评价系统设计。作为文档的一部分,在维护阶段有利于系统的修改和扩充。帮助用户从整体上理解和认识信息系统。,4.1 概念模型4.2 用面向对象方法建立概念模型4.3 面向对象设计的软件生命周期4.4 面向对象设计的方法,面向对象方法是构造概念模型的方法之一。与E-R图法相比,面向对象方法不仅能够描述概念之间的静态关系,而且能够描述概念之间的动态关系。,4.1 概念模型4.2 用面向对象方法建立概念模型4.3 面向对象设计的软件生命周期4.4 面向对象设计的方法,4.2.1 识别对象和类,建立信息系统的基本思路:分析信息系统将取代哪些人类活动,这些活动涉及到的具体事物、具体过程和具体规则。,识别对象首先要弄清信息系统拟解决问题涉及的具体事物。,4.1 概念模型4.2 用面向对象方法建立概念模型4.3 面向对象设计的软件生命周期4.4 面向对象设计的方法,按事物的存在,可将事物可以分为五类:,有形物:指的是看得见摸得着的东西。当拟解决问题确定后,很容易找出与该问题相关的”有形物“。如人、药等。角色:人或组织机构所扮演的角色。角色之间存在着紧密联系。只要找出一个角色对象,就很容易找出一组相关的角色对象。如”医生“、”病人“。事件:事件对象表示发生的事件。如”出诊“”吃药“。交互:交互对象具有”交易“或者”订合同“的性质,通常能将多个对象联系起来。如”购买“将售货员、顾客和商品联系到一起。规范:规范对象具有”标准“或”定义“的性质,例如产品的技术指标和学校的专业培养目标都是规范。,4.1 概念模型4.2 用面向对象方法建立概念模型4.3 面向对象设计的软件生命周期4.4 面向对象设计的方法,按照面向对象的观点,可以区分三类对象:,客观存在物:这一类对象包括有形物和角色对象,在面向对象系统中它体现问题的结构特性。行为:这一类对象包括事件对象和交互对象。识别行为是识别对象的一部分,行为是信赖于对象的。在面向对象系统中它体现问题的行为特性。概念:观察现实世界与获取应用领域知识是分不开的,在现实世界中,人的活动必然关联了一系列的客观存在物和它们的行为,并且这种关联通常是有规律的。概念就是他们交流各领域知识的工具,是识别对象时的一类认识和分析对象。,4.1 概念模型4.2 用面向对象方法建立概念模型4.3 面向对象设计的软件生命周期4.4 面向对象设计的方法,4.2.2 对象之间的通讯,对象之间的通讯是借助于消息完成的。,向一个对象发送消息就是调用该对象的某个成员函数。一条消息就是一次函数调用。消息名称和该成员函数名称相同,并且消息必须提供该成员函数所需的入口参数。,调用某个对象的成员函数的唯一途径就是发送消息。消息只表示请求,不保证动作;完全由接收消息的对象决定是否响应该请求以及响应的具体方式。,4.1 概念模型4.2 用面向对象方法建立概念模型4.3 面向对象设计的软件生命周期4.4 面向对象设计的方法,4.2.3 对象关系图示 类图,对象关系图能够确定系统设计中的消息通讯是否完整。对象类之间的静态结构关系相互有消息传递的对象之间的动态关系,使用对象关系图的益处:发现设计中的错误,特别是对象间关系的错误作为实际编码时的依据系统出错时的调试与检错,4.1 概念模型4.2 用面向对象方法建立概念模型4.3 面向对象设计的软件生命周期4.4 面向对象设计的方法,类的层次结构,类的层次结构表示信息系统中所有类关系的轮廓,以这种形式可以很容易地跟踪基类和派生类之间的关系。,设有3个对象类A,B和C,其中B是从A中派生出来的,C又是从B中派生出来的。那么用类的层次结构图表示它们之间的关系如下:,(1)一个类的所有派生类按字母排序;,(2)用锯齿形表示基类下的派生类;,4.1 概念模型4.2 用面向对象方法建立概念模型4.3 面向对象设计的软件生命周期4.4 面向对象设计的方法,例1:在一个学校中有学生、教师、教室、办公室和课程。设计一个类层次:用Object作为所有类的公共基类,它有三个派生类:人员类(person)、房间类(room)、课程类(subject)。人员类有两个派生类:学生类(student)和教师类(teacher)。房间有两个派生类:教室类(classroom)和办公室类(office)。将这些类之间的关系给层次结构图表示出来。,4.1 概念模型4.2 用面向对象方法建立概念模型4.3 面向对象设计的软件生命周期4.4 面向对象设计的方法,4.1 概念模型4.2 用面向对象方法建立概念模型4.3 面向对象设计的软件生命周期4.4 面向对象设计的方法,对象间的创建关系,对象间的创建关系是委托关系的具体实现。一个对象在其成员函数中创建一个或多个关系对象,然后委托它们进行部分工作,最后完成自身工作。,若对象A在实施方法m(C+中称为成员函数)中创建了对象B,那么对象A和对象B之间通过方法m构成了“创建关系”。正式说法为:对象A是对象B的基于方法m的创建者。,4.1 概念模型4.2 用面向对象方法建立概念模型4.3 面向对象设计的软件生命周期4.4 面向对象设计的方法,例2:在例1给出的学校系统中有关人员情况的类有3个:person类、student类和teacher类。在person类中有一个成员函数number()计算全校的教师和学生的总人数。这需要student类对和teacher类对象分别计数后,再由person类对象汇总。因此,number()必须首先创建student类对象和teacher类对象,然后再委托它们做计数工作。因此,在person类对象、student类对象和teacher类对象之间存在着“创建关系”。,4.1 概念模型4.2 用面向对象方法建立概念模型4.3 面向对象设计的软件生命周期4.4 面向对象设计的方法,4.1 概念模型4.2 用面向对象方法建立概念模型4.3 面向对象设计的软件生命周期4.4 面向对象设计的方法,对象间的聚合关系,对象间的聚合关系是指一个对象是由若干个其它对象组合而成的,这是一种直接的包含关系,对象的创建不需要通过中间方法来实现。当该对象被创建时,组成它的各个对象也将自动被创建。,4.1 概念模型4.2 用面向对象方法建立概念模型4.3 面向对象设计的软件生命周期4.4 面向对象设计的方法,例3:飞机类由机身类、引擎类、机翼类和尾翼类四个对象类构成。这四个对象类在飞机类中以成员对象的形式存在,它们之间体现的是对象之间的聚合关系。,4.1 概念模型4.2 用面向对象方法建立概念模型4.3 面向对象设计的软件生命周期4.4 面向对象设计的方法,对象间的消息流图,对象间的消息流图用来描述信息系统中对象之间的消息流。它只描述相关对象之间交换的主要消息,以帮助设计者和用户理解对象是如何通过交互完成具体任务的。,消息流图分为两种:内向消息图:描述对象如何从外界对象接收消息。外向消息图:措述对象如何向外界对象发送消息。,4.1 概念模型4.2 用面向对象方法建立概念模型4.3 面向对象设计的软件生命周期4.4 面向对象设计的方法,例3:对象B和对象C分别向对象A发送了一条消息。,(对象A的内向消息图),(对象A的外向消息图),例4:对象A分别发送了一条消息向对象B和对象C。,4.1 概念模型4.2 用面向对象方法建立概念模型4.3 面向对象设计的软件生命周期4.4 面向对象设计的方法,4.2.4 类描述语言,描述概念模型中类结构的语言被称作类描述语言CDL。,CDL中的成分可分为五部分:1.class 用于定义类,格式为class:类名类描述子句2.superclass 用于说明类的所有上位类(直接基类)的类描述子句,格式为superclass:上位类表 在上位类表中列出此类的所有直接基类的名字,中间用“,”隔开。,4.1 概念模型4.2 用面向对象方法建立概念模型4.3 面向对象设计的软件生命周期4.4 面向对象设计的方法,3.attribute 用于说明类属性的类描述子句,格 式为attribute:属性定义;属性既可以是一般数据,也可以是类。4.method 用于描述类的方法,即类的行为特性,格式为 method:方法名消息表;消息表由该类向其它类发送的消息构成。5.request 用于表达在一个类的方法中向其它类发送的消息,格式为 request 请求消息表;请求消息表由一组请求消息构成,每个请求消息的格式为:目标类.方法名(参数表)。,4.1 概念模型4.2 用面向对象方法建立概念模型4.3 面向对象设计的软件生命周期4.4 面向对象设计的方法,例5:学校系统有四个对象类:(1)address类:该类包含属性city,street和zip;该类具有方法putaddress和getaddress。(2)person类:该类包含属性name,age,sex和ddress;该类具有方法put和get。这两个方法实现时都需要借助add ress类对象,也就是要通过发送消息,委托address类对象完成部分工作。(3)student类:该类为person类的派生类,它自身所特有的属性为major,grade和course;所具有的方法为putgra de,putgeneral和getgeneral。(4)teacher类:该类为person类的派生类,它自身所特有的属性为major,subject和salary;所具有的方法是putinfo和getinfo。,4.1 概念模型4.2 用面向对象方法建立概念模型4.3 面向对象设计的软件生命周期4.4 面向对象设计的方法,class:address attribute:city;attribute:street;attribute:zip;method:putaddress;method:getaddress;class:person attribute:name;attribute:age;attribute:sex;attribute:address;method:put request address.putaddress;method:get request address.getaddress;,4.1 概念模型4.2 用面向对象方法建立概念模型4.3 面向对象设计的软件生命周期4.4 面向对象设计的方法,class:student superclass:person;attribute:major;attribute:grade;attribute:course;method:putgrade;method:putgeneral;method:getgeneral;class:teacher superclass:person;attribute:major;attribute:subject;attribute:salary;method:putinfo;method:getinfo;,4.1 概念模型4.2 用面向对象方法建立概念模型4.3 面向对象设计的软件生命周期4.4 面向对象设计的方法,4.3.1 面向对象软件的开发生命周期,设计,演化,维护,分析,4.1 概念模型4.2 用面向对象方法建立概念模型4.3 面向对象设计的软件生命周期4.4 面向对象设计的方法,面向对象设计的开发生命周期中每一阶段都可以相互反馈,整个过程是迭代、渐增的开发过程。(1)分析阶段 在面向对象设计中,把分析看作是从问题域中选出词汇,建立类和对象的模型世界。(2)设计阶段 设计是对问题域的行为进行关键抽象再分解的过程。设计的结果反馈到分析上进行修正,当关键抽象简单到不需要再分解的程度时就停止该阶段工作。(3)演化阶段 演化实际上是编码、测试和集成构成的阶段。(4)维护阶段 维护是在系统提交运行后的变更活动。,4.1 概念模型4.2 用面向对象方法建立概念模型4.3 面向对象设计的软件生命周期4.4 面向对象设计的方法,4.3.2 需求分析阶段,分析阶段集中于问题域关键抽象,明确问题中有哪些数据实体存在,它们的意义是什么,而暂时不考虑它们是怎样处理的。,三个子阶段:(1)定义问题边界:在满足系统要求的前提下,定义问题边界的重点是确保系统的应变性和稳定性,制定适当的设计策略。(2)问题域的关键抽象:即找出有关系的对象和类。对于任何一个抽象类来说,每一个成员必须是相互独立的、不可再分的。类中全体成员都依赖于其中一个关键成员建立关系。(3)类的抽象:将拟解决问题涉及的数据内容进行归纳,从这些数据中抽象出信息系统中的实际类。,4.1 概念模型4.2 用面向对象方法建立概念模型4.3 面向对象设计的软件生命周期4.4 面向对象设计的方法,4.3.3 设计阶段,设计阶段的主要工作是给出类层次结构及对象之间的关系,对各个类给出定义。,三个子阶段:(1)定义类层次结构:根据分析阶段的结果,对拟解决问题的信息系统画出类的层次结构图。(2)定义对象之间的各种关系:即使用对象关系图确定对象之间的创建关系、聚合关系等。(3)用CDL描述系统:根据(2)步结果,使用类描述语言CDL对整个信息系统给出定义。,4.1 概念模型4.2 用面向对象方法建立概念模型4.3 面向对象设计的软件生命周期4.4 面向对象设计的方法,4.3.4 演化阶段,演化是在设计基础上的编码、测试、集成的迭代渐近过程。,演化阶段开始时间取决于问题域中最基本的设计是否已经完成。这是通过以下三点来把握的:,问题域已经明确定义;最基本的问题关键已经把握;最基本的问题关键的解决方法已经找到,系统实现可以预见。,4.1 概念模型4.2 用面向对象方法建立概念模型4.3 面向对象设计的软件生命周期4.4 面向对象设计的方法,演化阶段的必要准备,(1)要具备良好的开发平台:良好的开发平台通常拥有许多成熟的集成工具,可以缩短演化阶段迭代和渐近的过程。,(2)要搭建测试环境:在开发平台上的测试往往只能做功能性测试,而系统性能测试的最理想方法是搭建真实的用户环境。如果条件不具备,那么就必须准备一个能够模拟真实应用的环境。,(3)需建立自己的原型库:原型库的建立在于软件工程化管理,它是从开发结果中提取可重用的原型。,4.1 概念模型4.2 用面向对象方法建立概念模型4.3 面向对象设计的软件生命周期4.4 面向对象设计的方法,两个子阶段:,(1)模块划分:在面向对象设计中不是以算法的逻辑结构来划分模块,而是以类和对象的逻辑结构来划分模块。(2)分模块开发系统:为保证系统整体的一致性,采取的开发策略是先开发系统的公共部分,再展开个别部分的演化。,4.1 概念模型4.2 用面向对象方法建立概念模型4.3 面向对象设计的软件生命周期4.4 面向对象设计的方法,4.3.5 维护阶段,维护是在软件投入运行后的开发活动。它同样需要经过分析、设计和演化。因此,它也是一种系统变更的迭代过程。,维护的代价取决于是否有良好的分析与设计。,4.1 概念模型4.2 用面向对象方法建立概念模型4.3 面向对象设计的软件生命周期4.4 面向对象设计的方法,面向对象程序设计方法通常可总结为三步:,(1)发现对象:所有的对象都有唯一标识,对象之间是可区分的。具有共同特性的对象组成了类。(2)发现对象之间的关系:对象之间存在着许多关系,主要要寻找两种:委托关系和继承关系。(3)发现类:类所描述的是具有相似性质的一组对象。这组对象具有相似的行为模式、相似的关系和相似的语义。,4.1 概念模型4.2 用面向对象方法建立概念模型4.3 面向对象设计的软件生命周期4.4 面向对象设计的方法,面向对象程序设计方法通常可为三级:,(1)第一级帮助系统分析人员以面向对象方式来分析和考察应用系统,这一级被称为“概念级”。(2)第二级集中在“面向对象程序设计过程中几个重要问题”之上。例如,集中的和分散的控制流以及类继承问题等,这一组被称为“系统级”。(3)第三级考虑设计规范的产生,这些规范将被传递给实现阶段,此级被称为“规范级”。,作 业,有一个学校管理系统,在此系统中具有这样一些内容:学生集合:所包含的基本内容有学号、姓名、年龄、所在系。教师集合:所包含的基本内容有职工号、姓名、专业。课程集合:所包含的基本内容有课程号、课程名。教室集合:所包含的基本内容有教室号、位置、容纳人数。除出这些基本内容之外,还具有一些反映它们之间联系的内容:学生集合和课程集合之间通过讲课发生关系,应当具有某一学生选修某一课程的评价。教师集合和课程集合之间通过上课发生关系,应当具有某一教师讲授某一课程的评价。课程集合和教室集合之间通过上课发生关系,应当具有某一课程在某一教室中的上课时间。所要处理的问题是:分析所有的对象,进行类抽象,给出这个系统的类层次结构。用对象关系图给出对象之间的各种关系。用类描述语言CDL描述本系统。,