软件工程第七章面向对象方法学_第1页
软件工程第七章面向对象方法学_第2页
软件工程第七章面向对象方法学_第3页
软件工程第七章面向对象方法学_第4页
软件工程第七章面向对象方法学_第5页
已阅读5页,还剩72页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

软件工程第七章面向对象方法学第七章面向对象方法学7.1传统方法学的缺点7.2面向对象的基本概念7.3对象模型7.4动态模型7.5功能模型

第2页,共77页,2024年2月25日,星期天7.1传统方法学的缺点

结构化及其他方法学的本质,是在具体的软件开发工作开始之前,通过需求分析预先定义软件需求。结构化及其他方法学部分地缓解了软件危机,对软件开发工程化起了重要的促进作用。第3页,共77页,2024年2月25日,星期天

结构化及其他方法学并不能完全消除软件危机。结构化及其他方法学仍然有许多不足之处。对某些类型的软件开发,这种方法学比较适用。对另一些类型的软件则可能完全不适用。第4页,共77页,2024年2月25日,星期天7.1.1问题的表现生产效率低率 生命周期方法学中强调采用先进的结构分析、设计、编程技术和软件工具的技术方法不能满足软件的需要量急剧增长。不能满足用户需要

第5页,共77页,2024年2月25日,星期天软件复用程度很低 结构分析、结构设计和结构程序设计技术开发软件时,几乎每一次开发一个新系统时都要针对这个具体的系统做大量重复繁琐的劳动。软件仍然很难维护 实践的经验告诉我们,即使是用生命周期方法学开发出的软件,维护起来仍然相当困难,软件维护成本仍然很高。第6页,共77页,2024年2月25日,星期天7.1.2问题的原因结构化技术本身的问题预先定义的需求可能是过时语言鸿沟系统需求的模糊性第7页,共77页,2024年2月25日,星期天7.2面向对象的基本概念第8页,共77页,2024年2月25日,星期天7.2.1对象(object)对象是实现世界中一个实际存在的事物,它可以是有形的(比如一辆汽车),也可以是无形的(比如一项计划)。第9页,共77页,2024年2月25日,星期天对象的定义: 对象是问题域或实现域中某些事物的一个抽象,它反映该事物在系统中需要保存的信息和发挥作用;它是一组属性和有权对这些属性进行操作的一组服务的封装体。第10页,共77页,2024年2月25日,星期天对象有如下一些基本特点:以数据为中心。对象是主动的。实现了数据封装。本质上具有并行性。模块独立性好。第11页,共77页,2024年2月25日,星期天7.2.2类(class)

类的定义: 类是具有相同属性和服务的一组对象的集合,它为属于该类的全部对象提供了统一的抽象描述,其内部包括属性和服务两个主要部分。第12页,共77页,2024年2月25日,星期天

图7.2类与对象的关系

类与对象的关系如同一个模具与用这个模具铸造出来的铸件之间的关系。他们的关系可以用图7.2表示。

第13页,共77页,2024年2月25日,星期天7.2.3继承(inheritance)

继承是面向对象中的重要概念,在软件实现中的重要手段。并且是面向对象技术可提高软件开发效率的重要原因之一。 特殊类的对象拥有其一般类的全部属性与服务,称作特殊类对一般类的继承。第14页,共77页,2024年2月25日,星期天

一个特殊类既有自己新定义的属性和服务,又有从它的一般类中继承下来的属性与服务。 继承的实现是通过面向对象系统的继承机制来保证的。 继承关系具有传递性。第15页,共77页,2024年2月25日,星期天

一个类可以是多个一般类的特殊类,它从多个一般类中继承了属性与服务,这种继承模式叫作多继承。第16页,共77页,2024年2月25日,星期天7.2.4封装(encapsulation)

封装就是把对象的属性服务结合成为一个独立的系统单位,并尽可能隐蔽对象的内部细节。 封装是一种信息隐蔽技术。封装是面向对象方法的一个重要原则。它有两个涵义:把对象的全部属性和全部服务结合在一起,形成一个不可分割的独立单位。尽可能隐蔽对象的内部细节,只保留有限的对外接口使之与外部发生联系。第17页,共77页,2024年2月25日,星期天

封装是一种机制,封装的信息隐蔽作用反映了事物的相对独立性。 封装的原则在软件上的反映是:要求使对象以外的部分不能随意存取对象的内部数据(属性),从而有效地避免了外部错误对它的“交叉感染”,使软件错误能够局部化。第18页,共77页,2024年2月25日,星期天

封装是面向对象方法的一个原则,也是面向对象技术必须提供的一种机制。例如在面向对象的语言中,要求把属性和服务结合起来定义成一个程序单位,并通过编译系统保证对象的外部不能直接存取对象的属性或调用它的内部服务。这种机制就叫作封装机制。第19页,共77页,2024年2月25日,星期天

强调严格的封装,则对象的任何属性都不允许外部直接存取,因此就要增加许多没有其它服务意义,而仅负责读或写的服务。这为编程工作增加了负担。 所以我们在用面向对象进行编写程序时,总会觉得程序显得臃肿。为了避免这一点,语言往往采取一种比较现实的灵活态度–––允许对象有不同程度的可见性。

第20页,共77页,2024年2月25日,星期天7.2.5消息(message)

对象是一个独立的单位,它通过对外提供的服务在系统中发挥作用。而只有当系统中的其它对象向它请求某个服务时,它就响应这个请求,才能体现其作用。 面向对象方法中将这种向对象发出的服务请求称作消息。第21页,共77页,2024年2月25日,星期天

面向对象方法的另一个原则是通过消息进行对象之间的通信。它与封装的的原则有密切的关系。封装使对象成为互不干扰的独立单位;而消息通信则为它们提供合法动态联系途径,使它们互相配合构成一个系统。第22页,共77页,2024年2月25日,星期天面向对象方法中对消息的定义: 消息就是向对象发出的服务请求,它应该含有下述信息:提供服务的对象标识、服务标识、输入信息和回答信息。第23页,共77页,2024年2月25日,星期天7.2.6结构与连接

为了完成某种功能,需要用消息将独立的对象联系起来。在构造系统中,对象间关系不仅仅是用消息的连接方式。为了使系统能够有效地映射问题域,系统开发者需认识并描述对象之间的的分类关系、对象之间的组成关系、对象属性之间的静态联系和对象行为之间的动态联系。第24页,共77页,2024年2月25日,星期天

面向对象方法运用一般-特殊结构、整体-部分结构、实例连接和消息连接描述对象之间的关系。第25页,共77页,2024年2月25日,星期天一般-特殊结构

一般-特殊结构是由一组具有一般-特殊关系的类所组成的结构。它是一个以类为结合,以继承关系为边的连通有向图。

如果是由一些存在单继承关系的类形成的结构又称作层次结构或树型结构; 如果由一些存在多继承关系的类形成的结构又称作网格结构。第26页,共77页,2024年2月25日,星期天

图7.3一般--特殊结构第27页,共77页,2024年2月25日,星期天整体-部分结构 当一个对象是另一个(组)对象的组成或部分,则称他们有整体-部分关系。整体-部分结构由一组彼此间存在着这种组成关系的对象构成。它描述对象之间的组成关系。即:如图7--4所示。第28页,共77页,2024年2月25日,星期天

图7--4整体-部分结构第29页,共77页,2024年2月25日,星期天

整体-部分结构有两种实现方式。用部分对象的类作为一种广义的数据类型来定义整体对象的一个属性,构成一个嵌套对象。独立地定义和创建整体对象和部分对象,并在整体对象中设置一个属性,它的值是部分对象的对象标识,或者是一个指向部分对象的指针。第30页,共77页,2024年2月25日,星期天实例连接 实例连接反映对象与对象之间的静态联系。例如教师和学生之间的关系。这种双边关系在实现中可以通过对象的属性表达出来。所以这种关系称作实例连接。第31页,共77页,2024年2月25日,星期天消息连接 描述对象之间的动态联系是用消息连接。若一个对象在执行自己的服务时,需要请求另一个对象为它完成某个服务。那么,这两个对象之间存在着消息连接。消息连接是有向的,从消息发送者指向消息接收者。第32页,共77页,2024年2月25日,星期天7.2.7多态性(Polymorphism)

多态性是指允许不同类的对象对同一消息作出响应。 多态性引用具有静态类型和动态类型。动态类型可以在程序执行期间在实例之间进行变化。静态类型是在程序上下文中由实体说明决定的。第33页,共77页,2024年2月25日,星期天

对象的多态性是指在一般类中定义的属性或服务被特殊类继承之后,可以具有不同的数据类型或表现出不同的行为。这使得同一个属性或服务名在一般类及其各个特殊类中具有不同的语义。第34页,共77页,2024年2月25日,星期天

如果一种面向对象程序设计语言能支持对象的多态性,则可为开发者带来不少方便。 多态性是一种比较高级的功能。多态性的实现需要面向对象程序设计语言提供相应的支持。第35页,共77页,2024年2月25日,星期天支持多态性的实现的语言应具备的功能是:重载–––在特殊中对继承来的属性或服务进行重新定义。动态绑定–––在运行时根据对象接收的消息动态地确定要连接哪一段服务代码。类属(generic)–––服务参量的类型可以是参数化的。第36页,共77页,2024年2月25日,星期天7.2.8其他概念方法(Method) 方法,就是对象所能执行的操作,也就是类中所定义的服务。方法描述了对象执行操作的算法,响应消息的方法。属性(Attribute) 属性,就是类中所定义的数据,它是是客观世界实体所具有的性质的抽象。类的每个实例都有自己特有的属性值。第37页,共77页,2024年2月25日,星期天重载(Overloading) 有两种重载:函数重载是指在一同一作用域内的若干个参数特征不同的函数可以使用相同的函数名字;运算符重载是指同一运算符可以施加于不同类型的操作数上面。当然,当参数特征不同或被操作数的类型不同时,实现函数的算法或运算符的语义是不相同的。第38页,共77页,2024年2月25日,星期天7.3对象模型

为了更好地理解问题,人们常常采用建立问题模型的方法。所谓模型,就是为了理解事物而对事物作出的一种抽象,是对事物的一种无歧以的书面描述。 模型由一组图示符号和组织这些符号的规则组成,利用它们来定义和描述问题域中的术语和概念。第39页,共77页,2024年2月25日,星期天

所谓对象模型就是表示静态的、结构化的系统的“数据”性质。它是客观世界实体的对象以及对象彼此间的关系的映射的模拟,描述了系统的静态结构。第40页,共77页,2024年2月25日,星期天

在建立对象模型时,我们的目标是从客观世界中提炼出对具体应用有价值的概念。为了建立对象模型,需要定义一组图形符号,并且规定一组组织这些符号以表示特定语义的规则。第41页,共77页,2024年2月25日,星期天

面向对象方法学的有许多表示方法,这些表示方法虽然形式各异。但是,它们共同的特点就是独立于具体的开发模式。 现有的用于建立对象模型的表示方法,都包含下列符号:

1.表示类的符号(应该既能表示属性又能表示服务);第42页,共77页,2024年2月25日,星期天2.表示对象(类实例)的符号;3.表示继承关系的符号;4.表示类和(或)对象间其他关系的符号。第43页,共77页,2024年2月25日,星期天7.3.1表示法1.对象符号 类符号通常用来代表一个没有实例的抽象类。类符号是一个矩形框,由两条横线把矩形框分为三部分,最上面部分是类的名字,中间部分列出该类内定义的属性,最下面部分列出该类提的服务。第44页,共77页,2024年2月25日,星期天

图7--5表示类的图形符号普通对象由图7--5所示的类符号表示。

第45页,共77页,2024年2月25日,星期天

当不需要详细描述一个类内定义了哪些属性和服务时,可以仅在一个矩形框内写上类名代表该类;当不需要列出一个类所提供的服务时,可以仅用一条横线把代表该类的矩形框分成两半,上半部分写上该类的名字,下半部分列出该类内定义的属性。第46页,共77页,2024年2月25日,星期天2.命名 类名是一类对象的名字,命名是否恰当对系统的可理解性影响相当大。名字应该是富于描述性的、简洁的而且无二义性的。因此,命名时应该遵守以下几条准则:(1)使用标准术语。(2)使用具有确切含义的名词。第47页,共77页,2024年2月25日,星期天(3)必要时用名词短语作名字。第48页,共77页,2024年2月25日,星期天7.3.2表示结构

在面向对象分析和面向对象设计中,结构表示了问题域中的复杂关系,是对客观世界实体相互间关系的抽象。 结构与目标系统的任务直接相关,也就是说,目标系统的任务决定了系统的结构。第49页,共77页,2024年2月25日,星期天一般一特殊关系 一般--特殊关系反映了一个类与若干个互不相容的子类之间的分类关系。高层类定义一般性的属性与服务,低层类说明特殊属性与服务。第50页,共77页,2024年2月25日,星期天

图7—6表示一般--特殊关系的符号

第51页,共77页,2024年2月25日,星期天2.整体一部分关系 整体-部分结构又称组装结构,用于描述系统中各类对象之间的组成关系,通过它可以看出某个类的对象以另外一些类的对象作为其组成部分。第52页,共77页,2024年2月25日,星期天

图7—7表示整体-部分关系的图形符号第53页,共77页,2024年2月25日,星期天

传递性是整体-部分关系具有的最重要的特性。如果A是B的一部分,B是C的一部分,则A也是C的一部分。当组合关系有多个层次时,可以用一棵简单的聚集树来表示它。第54页,共77页,2024年2月25日,星期天

聚集树是多级组合关系的一种简化表示形式。图7--8是描绘一所学校结构的聚集树,它表明,一所学校由教务、总务、财务及若干系组成,每系由若干教研室和实验实组成。第55页,共77页,2024年2月25日,星期天

图7--8学校结构的聚集树第56页,共77页,2024年2月25日,星期天3.关联关系 通常把两类对象之间的二元关系再细分为一对一(1:1)、一对多(1:M)和多对多(M:N)等三种基本类型,类型的划分依据参与关联的对角的数目。第57页,共77页,2024年2月25日,星期天

实际上,在面向对象分析和面向对象设计中遇到的绝大多数关联都是二元的,多元关联的语义,表示及实现,都比二元关联复杂得多,只要有可能就应该避免使用多元关联。第58页,共77页,2024年2月25日,星期天7.3.3例子

对象模型把面向对象的概念(对象、类、继承等)与传统方法中常用的住处建模概念结合起来了,从而改进和拓广了普通的信息模型析可理解性和表达能力。第59页,共77页,2024年2月25日,星期天

图7--9是一家公司的对象模型,它表明,该公司有许多部门,部门名唯一地确定一个部门;每个部门由一名经理管理,也有的经理并不管理任何一个部门;每个部门生产多种产品,每种产品仅由一个部门生产。第60页,共77页,2024年2月25日,星期天

图7--9公司的对象模型第61页,共77页,2024年2月25日,星期天

该公司有许多员工为之工作,员工又进一步划分为经理和工人两类。每名工人可参加多个工程项目,每个项目需要多名工人;每位经理可以主持多个项目,每个项目仅有一人主持。这个对象模型还描述了某些类对象所具有的属性,以及公司类对象提供的服务。第62页,共77页,2024年2月25日,星期天7.4动态模型

一旦建立起对象模型之后,就需要考察对象的动态行为。动态模型是表示瞬时的、行为化的系统的“控制”性质,它规定了对象模型中的对象的合法变化序列。第63页,共77页,2024年2月25日,星期天7.4.1术语事件 在某个特定时刻所发生的事情称为事件。它是对引起对象从一种状态转换到另一种状态的现实世界中的事件的抽象。2.状态 对象在某个特定阶段所处的情形就是状态。它是对象行为的属性值的一种抽象。状态规定了对象对输入事件的响应方式。第64页,共77页,2024年2月25日,星期天

状态与事件密不可分,一个事件分开两个状态,一个状态隔开两上事件。事件表示时刻,状态代表时间间隔。在定义状态的时候,应该忽略那些不影响对象行为的属性。第65页,共77页,2024年2月25日,星期天3.行为 行为是指对象达到某种状态时所做的一系列处理操作。这些操作是需要耗费时间的。所有对象都具有自己的生命周期。第66页,共77页,2024年2月25日,星期天7.4.2表示方法图7--10给出了状态图中使用的主要表示符号。第67页,共77页,2024年2月25日,星期天

状态用圆形框或椭圆框表示,框内可标上状态名也可以不给状态起名字,行为在框内用关键字do(后接冒号)标明。 从一个状态到另一个状态的转换用箭头线表示,线上标以事件名。必要时可在事件名后面加一个方括号,括号内写上状态转换的条件。第68页,共77页,2024年2月25日,星期天7.4.3例子第69页,共77页,2024年2月25日,星期天

图中表明,没有创建时,栈处于空状态;如果如果压入数据,栈处于半空状态;这时既可以继续压入,直到压满进入满状态。也可以弹出,当弹出最后一个数据后,栈就重新处于空状态。就绪后……。第70页,共77页,2024年2月25日,星期天7.5功能模型

功能模型表示变化的系统的“功能”性质,它指明了系统应该“做什么”,因此更直接地反映了用户对目标系统的需求。第71页,共77页,2024年2月25日,星期天7.5.1表示方法

通常,功能模型由一组数据流图组成。一般说来,与对象模型和动态模型比较起来,数据流图并没有增加新的信息,但是,建立功能模型有助于软件开发人员更深入地理解问域,改进和完善自己的设计。因此,不能完全忽视功能模型的作用。第72页,共77页,2024年2月25日,星期天7.5.2与其他两种模型的关

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论