您好,欢迎访问三七文档
当前位置:首页 > 建筑/环境 > 设计及方案 > 第9章面向对象方法学引论.
第9章面向对象方法学引论1面向对象方法学概述2面向对象的概念3面向对象建模4对象模型5动态模型6功能模型73种模型之间的关系1.面向对象方法学的出发点和基本原则:是尽可能模拟人类习惯的思维方式,使开发软件的方法与过程尽可能接近人类认识世界解决问题的方法与过程,也就是使描述问题的问题空间(也称为问题域)与实现解法的解空间(也称为求解域)在结构上尽可能一致。9.1面向对象方法学概述9.1.1面向对象方法学2.问题域中的对象:我们把客观世界中的实体抽象为问题域中的对象。3.解空间对象:我们把计算机中的实体称为解空间对象。显然,解空间对象取决于所使用的程序设计语言。4.对象的行为:从动态观点看,对对象施加的操作就是该对象的行为。5.面向对象方法:是一种以数据或信息为主线,把数据和处理相结合的方法。面向对象方法把对象作为由数据及可以施加在这些数据上的操作所构成的统一体。6.面向对象方法学所提供的“对象”概念:是让软件开发者自己定义或选取解空间对象,然后把软件系统作为一系列离散的解空间对象的集合。应该使这些解空间对象与问题空间对象尽可能一致。这些解空间对象彼此间通过发送消息而相互作用,从而得出问题的解。7.面向对象方法具有下述4个要点:1)认为客观世界是由各种对象组成的,任何事物都是对象,复杂的对象可以由比较简单的对象以某种方式组合而成。2)把所有对象都划分成各种对象类(简称为类),每个对象类都定义了一组数据和一组方法。数据用于表示对象的静态属性,是对象的状态信息。类中定义的方法,是允许施加于该类对象上的操作。3)按照子类与父类的关系,把若干个对象类组成一个层次结构的系统(也称为类等级)。在这种层次结构中,通常下层的派生类具有和上层的基类相同的特性(包括数据和方法),这种现象称为继承。4)对象彼此之间仅能通过传递消息互相联系。◆面向对象的方法学可以用下列方程来概括:OO=objects+classes+inheritance+communicationwithmessages9.1.2面向对象方法学的优点1.与人类习惯的思维方法一致2.稳定性好3.可重用性好4.较易开发大型软件产品5.可维护性好★用面向对象范型开发软件时与用结构化范型开发软件时相比较,软件的生命周期有何不同?这种差异带来了什么后果?★用面向对象范型开发软件时与用结构化范型开发软件时相比较,软件的生命周期有何不同?这种差异带来了什么后果?答:用结构化范型开发软件时,用面向对象范型开发软件时,软件的生命周期如下:软件的生命周期如下:1)可行性研究1)可行性研究2)陈述需求阶段2)陈述需求阶段3)规格说明分析阶段3)面向对象分析阶段4)设计阶段4)面向对象设计阶段5)实现阶段5)面向对象实现阶段6)维护阶段6)维护阶段1)什么是对象?◆在应用领域中有意义的、与所要解决的问题有关系的任何事物都可以作为对象;◆它既可以是具体的物理实体的抽象,也可以是人为的概念,或者是任何有明确边界和意义的东西◆对象是对问题域中某个实体的抽象,设立某个对象就反映了软件系统具有保存有关它的信息并且与它进行交互的能力。9.2面向对象的概念9.2.1对象2)面向对象方法学中的对象:◆是由描述该对象属性的数据以及可以对这些数据施加的所有操作封装在一起构成的统一体。◆对象可以作的操作表示它的动态行为,在面向对象分析和面向对象设计中,通常把对象的操作称为服务或方法。1.对象的形象表示◆为有助于读者理解对象的概念,下图形象地描绘了具有3个操作的对象。图9.2对象的形象表示2.对象的定义1)定义1:对象是具有相同状态的一组操作的集合。2)定义2:对象是对问题域中某个东西的抽象,这种抽象反映了系统保存有关这个东西的信息或与它交互的能力。也就是说,对象是对属性值和操作的封装。3)定义3:对象∷=〈ID,MS,DS,MI〉总之,对象是封装了数据结构及可以施加在这些数据结构上的操作的封装体,这个封装体有可以惟一地标识它的名字,而且向外界提供一组服务(即公有的操作)。3.对象的特点(1)以数据为中心;(2)对象是主动的;(3)实现了数据封装;(4)本质上具有并行性;(5)模块独立性好。★什么是对象?它与传统的数据有何异同?1.类(class)◆人们习惯于把具有相似特征的事物归为一类,分类是人类认识客观世界的基本方法。◆在面向对象的软件技术中,“类”就是对具有相同数据和相同操作的一组相似对象的定义。◆例:circle类◆也就是说,类是对具有相同属性和行为的一个或多个对象的抽象描述。9.2.2其他概念2.实例(instance)◆是由某个特定的类所描述的一个具体的对象。◆类是建立对象时的样板,按照这个样板所建立的一个个具体的对象,就是类的实际例子,通常称为实例。◆术语对象指:术语实例指:3.消息(message)◆消息就是要求某个对象执行在定义它的那个类中所定义的某个操作的规格说明。◆通常,一个消息由下述3部分组成:♦接收消息的对象;♦消息选择符(也称为消息名);♦零个或多个变元。◆例:Mycircle是一个半径为4cm,圆心位于(100,200)的circle类的对象,现在要求它以绿色在屏幕上显示自己:Mycircle.Show(green)4.方法(method)◆方法就是对象所能执行的操作,也就是类中所定义的服务。◆方法描述了对象执行操作的算法,响应消息的方法。在C++语言中把方法称为成员函数。◆例:为使circle类的对象能够响应让它在屏幕上显示自己的消息Show(green),在circle类中必须?5.属性(attribute)◆属性就是类中所定义的数据,它是对客观世界实体所具有的性质的抽象。◆类中的每个实例都有自己特有的属性值。◆在circle类中:圆心坐标、半径、颜色…6.封装(encapsulation)◆包装:◆在面向对象的程序中,把数据和实现操作的代码集中起来放在对象内部。从外面是看不见的,更不能从外面直接访问或修改这些数据和代码。◆对象具有封装性的条件:1)有一个清晰的边界2)有确定的接口3)受保护的内部实现◆总结:封装就是信息隐藏,通过封装对外界隐藏了对象的实现细节。7.继承(inheritance)◆在面向对象的软件技术中,继承是子类自动地共享基类中定义的数据和方法的机制。◆继承机制的原理:◆继承具有传递性;◆单继承;◆多重继承:◆优点:8.多态性(polymorphism)◆在面向对象的软件技术中,多态性是指子类对象可以像父类对象那样使用,同样的消息既可以发送给父类对象也可以发送给子类对象。◆也就是说,在类等级的不同层次中可以共享(公用)一个行为(方法)的名字,然而不同层次中的每个类却各自按自己的需要来实现这个行为。◆当对象接收到发送给它的消息时,根据该对象所属于的类动态选用在该类中定义的实现算法。◆在C++语音中,多态性是通过虚类来实现的。9.重载(overloading)◆函数重载:是指在同一作用域内的若干个参数特征不同的函数可以使用相同的函数名字;◆运算符重载:是指同一个运算符可以施加于不同类型的操作数上面。◆当然,当参数特征不同或被操作数的类型不同时,实现函数的算法或运算符的语义是不相同的。1.为什么要建模?2.什么是模型?3.用面向对象的方法开发软件,通常需要建立哪些模型?对象模型,动态模型,功能模型9.3面向对象建模◆对象模型表示静态的、结构化的系统的“数据”性质。它是对模拟客观世界实体的对象以及对象彼此间的关系的映射,描述了系统的静态结构。◆对象模型为建立动态模型和功能模型,提供了实质性的框架。◆在建立对象模型时,目标是从客观世界中提炼出对具体应用有价值的概念。◆为了建立对象模型,需要用适当的建模语言来表达模型,UML。9.4对象模型◆类图是一种静态模型;◆类图描述类及类与类之间的静态关系,它是创建其他UML图的基础;◆一个系统可以由多张类图来描述,一个类也可以出现在几张类图中。1.定义类◆UML中类的图形符号为长方形,用两条横线把长方形分成上、中、下3个区域,3个区域分别放类的名字、属性和服务。9.4.1类图的基本符号图9.5表示类的图◆为类命名时应该遵守以下几条准则:(1)使用标准术语。(2)使用具有确切含义的名词。(3)必要时用名词短语作名字。2.定义属性◆UML描述属性的语法格式如下:可见性属性名:类型名=初值{性质串}属性的可见性(即可访问性)通常有下述3种:公有的、私有的和保护的,分别用加号(+)、减号(-)和井号(#)表示。◆没有默认的可见性。◆类型名表示该属性的数据类型,它可以是基本数据类型,也可以是用户自定义的类型。◆用花括号括起来的性质串明确地列出该属性所有可能的取值。例如:“发货单”类的属性“管理员”,在UML类图中像下面那样描述:-管理员:String=“未定”◆类的作用域属性:也称为类变量类的属性中还可以有一种能被该类所有对象共享的属性例如:发货单类的类变量“货单数”,用来统计发货单的总数,在该类所有对象中这个属性的值都是一样的,下面是对这个属性的描述:-货单数:Integer3.定义服务◆服务也就是操作;◆UML描述操作的语法格式如下:可见性操作名(参数表):返回值类型{性质串};◆参数表是用逗号分隔的形式参数的序列。◆描述一个参数的语法如下:参数名:类型名=默认值◆类作用域操作1.关联◆关联表示两个类的对象之间存在某种语义上的联系。1)普通关联◆是最常见的关联关系,只要在类与类之间存在连接关系就可以用普通关联表示。◆普通关联的图示符号是连接两个类之间的直线。◆关联是双向的。9.4.2表示关系的符号图9.6普通关联示例◆在表示关联的直线两端可以写上重数,它表示该类有多少个对象与对方的一个对象连接。重数的表示方法通常有:0..1表示0到1个对象0..*或*表示0到多个对象1+或1..*表示1到多个对象1..15表示1到15个对象3表示3个对象◆如果图中未明确标出关联的重数,则默认重数是12)关联的角色◆在任何关联中都会涉及到参与此关联的对象所扮演的角色(即起的作用)。图9.7关联的角色3)限定关联◆限定关联通常用在一对多或多对多的关联关系中,可以把模型中的重数从一对多变成一对一,或从多对多简化成多对一。◆在类图中把限定词放在关联关系末端的一个小方框内。图9.8一个受限的关联4)关联类◆为了说明关联的性质可能需要一些附加信息。可以引入一个关联类来记录这些信息。◆关联中的每个连接与关联类的一个对象相联系。◆关联类通过一条虚线与关联连接。图9.9关联类示例2.聚集◆聚集也称为聚合,是关联的特例。◆聚集表示类与类之间的关系是整体与部分的关系在陈述需求时使用的“包含”、“组成”、“分为……部分”等字句,往往意味着存在聚集关系。1)共享聚集◆如果在聚集关系中处于部分方的对象可同时参与多个处于整体方对象的构成,则该聚集称为共享聚集。图9.10共享聚集示例2)组合聚集◆如果部分类完全隶属于整体类,部分与整体共存,整体不存在了部分也会随之消失,则该聚集称为组合聚集(简称为组成)。图9.11组合聚集示例3.泛化◆UML中的泛化关系就是通常所说的继承关系,◆它是通用元素和具体元素之间的一种分类关系。具体元素完全拥有通用元素的信息,并且还可以附加一些其他信息。◆在UML中,用一端为空心三角形的连线表示泛化关系,三角形的顶角紧挨着通用元素。◆注意,泛化针对类型而不针对实例,◆一个类可以继承另一个类,但一个对象不能继承另一个对象。1)普通泛化◆普通泛化与讲过的继承基本相同;◆需要特别说明的是,没有具体对象的类称为抽象类。抽象类通常作为父类,用于描述其他类(子类)的公共属性和行为;◆抽象类通常都具有抽象操作;◆抽象操作仅用来指定该类的所有子类应具有哪些行为。抽象操作的图示方法与抽象类相似,在操作标记后面跟随一个性质串{abstract}。◆与抽象类相反的类是具体类,具体类有自己的对象,并且该类的操作都有具体的实现方法。图9.12抽象类示例图9.13复杂类图示例2)受限泛化◆可以给泛化关系附加约束条件,以进一步说明该泛化关系的使用方法或扩充方法,这样的泛化关系称为受限泛化。
本文标题:第9章面向对象方法学引论.
链接地址:https://www.777doc.com/doc-2113677 .html