550 likes | 649 Views
软件工程. 第九章 面向对象方法学引论. 第九章 面向对象方法学引论. 9 . 1 面向对象方法学概述 9 . 2 面向对象概念 9 . 3 面向对象建模 9 . 4 对象模型 9 . 5 动态模型 9 . 6 功能模型 9 . 7 三种模型之间的关系. 学习重点和难点. 理解面向对象技术中的基本思想、概念和原理等;理解面向对象建立的三种模型的功能和相互关系。. 9 . 1 面向对象方法学概述. 软件工程发展的两个重要阶段 传统软件工程 面向对象软件的工程. 传统软件工程. 以 面向过程的结构化程序设计 为基础;
E N D
软件工程 第九章 面向对象方法学引论
第九章 面向对象方法学引论 • 9 . 1 面向对象方法学概述 • 9 . 2 面向对象概念 • 9 . 3 面向对象建模 • 9 . 4 对象模型 • 9 . 5 动态模型 • 9 . 6 功能模型 • 9 . 7 三种模型之间的关系
学习重点和难点 • 理解面向对象技术中的基本思想、概念和原理等;理解面向对象建立的三种模型的功能和相互关系。
9 . 1 面向对象方法学概述 • 软件工程发展的两个重要阶段 • 传统软件工程 • 面向对象软件的工程
传统软件工程 • 以面向过程的结构化程序设计为基础; • 遵循“程序=数据结构+算法”的思路; • 由“追求技巧与效率”到“清晰第一,效率第二” • 缺点: • 不太适应规模大、特别复杂的项目; • 难以解决软件重用的问题; • 难以适应需求的变化; • 难以彻底解决维护问题。
面向对象软件工程 • 按人类习惯的思维方法,以现实世界中客观存在的事物(即对象)为中心来思考和认识问题。 • 采用的思想方法与原则:抽象、分类、继承、聚合、封装等。 • 以易于理解的方式表达软件系统,建立问题域模型,使设计出的软件尽可能直接地描述现实世界,具有更好的可维护性
软件工程学家Codd 和Yourdon认为: • 面向对象=对象+类+继承+通信 • 如果一个软件系统采用这些概念来建立模型并予以实现,那么它就是面向对象的。
面向对象技术发展概述 • 初始阶段:上世纪 60 年代,挪威奥斯陆大学和挪威计算中心开发的 Simula67 的语言; • 70 年代中期, Xerox 研究中心开发的 Smallta Ik 语言,具备了面向对象语言的各种特征。 • 发展阶段:涌现大批面向对象编程语言(OOPL )。如 C ++、 objective-C 、 ob j ect Pascal 、 Eiffel 、 Actor 等。 • 成熟阶段:面向对象分析(OOA )和面向对象设计( OOD )的研究。出现各种著名的面向对象分析设计的方法,如: Coad/ Yourdon 的方法、 Booch 的方法、 OMT方法、 wirtf-Brock 的 RDD 方法、 Jacobson 的 OOSE 方法 … … 等。
面向对象技术的基本观点 • ① 任何客观的事物或实体都是对象。对象组成客观世界,复杂的对象可以由简单的对象组成。 • ② 具有相同数据和操作的对象可以归并为一个类(class ) ,对象是对象类的一个实例。 • ③ 类可以派生出子类,子类继承父类的全部特性(数据和操作),又可以有自己的新特性。子类与父类形成类的层次结构。 • ④ 对象之间通过消息传递相互联系。
面向对象方法学的优点 • 详见教材 P205 一 P208 页 • 1 、与人类习惯的思维方法一致 • 2 、稳定性好 • 3 、可重用性好 • 4 、较易开发大型软件产品 • 5 、可维护性好
9 . 2 面向对象的概念 • 9 . 2 . 1 对象( objoct ) • 在现实世界中有意义的、与所要解决的问题有关系的任何事物都可以作为对象,包括具体的物理实体的抽象、人为的概念、任何有明确边界和意义的东西。 • 如:一名职工、一本图书、贷款、生产计划、一场演出等。 • 对象既有静态的属性,又有动态的行为(操作)。
从软件开发的角度定义对象 • 系统中用来描述客观事物的实体,是构成系统的基本单位。 • 由一组属性和相关操作组成的服务组成。这是对象的两个基本要素: • 属性:用来描述对象静态特征的一个数据项; • 服务:用来描述对象动态特征(行为)的一个操作序列。 • 对象的属性和所有操作封装在一起,构成一个统一体。 • 属性一般只能通过执行对象的操作来改变。
表示内部状态的数据、实现各操作的代码及局部数据,被隐藏,无法从外面看见、访问或修改;表示内部状态的数据、实现各操作的代码及局部数据,被隐藏,无法从外面看见、访问或修改; • 使用对象的时候,只能通过对象与外界的界面来操作; • 操作时,只需知道该操作的名字和所需要的参数,不需要知道这些操作是如何实现的; • 简单、方便,安全性和可靠性高。
9.2.2 其他概念 • 1、类( Class ) • 具有相同属性和服务的一组对象的集合,它为属于该类的全部对象提供了统一的抽象描述。 • “类”好比是一个对象模板,用它可以产生多个对象。 类的描述
例: • 类(class):是对象的“类型”(type) • 一般用关键字class来表示。 • Class CPeople{ • long ID; • string name; • void DoSomething(); • } • 对象是类的实例:CPeople Tom
2、实例(instance) • 实例是某个特定类所描述的一个具休对象。 • 如:“张三”“李四”是类“学生”的实例。 • 对象:可以是一个具体的对象,也可以泛指一般的对象。 • 实例:必然是指一个在客观世界中存在的具体对象。
3、消息(message) • 对象之间通信的手段,是一个对象要求另一对象执行类中定义的某个操作的规格说明。 • 通常一个消息由三部分组成: • 接收消息的对象 • 消息标识符(即消息名) • 零个或多个变元 • 例如: MyCircle.Show (Green ) • MyCircle是接收消息的对象的名字, Show 是消息名,Green是消息的变元。
4 、方法( method ) • 对象所能执行的操作称为方法,也就是类中所定义的服务。方法描述了对象执行的功能、响应消息的操作。 • 在 C + +中称为成员函数。
5 、属性( attribute) • 属性是对客观世界实体所具有的性质的抽象,是类中所定义的数据。 • 如:学生类属性有姓名、年龄、性别等。 • 不同对象的同一属性可以具有相同或不同的属性值。 • 如:张三的年龄为19 ,李四 的年龄为20。
6 、封装(encapsulation ) • 封装是把对象的属性和实现操作的代码结合成一个独立的系统单位,并尽可能隐藏对象的内部细节,对象以外的部分不能直接作用于对象的内部数据(属性),对象间的通信只能通过明确的消息来进行。
7、继承( inheritance) • 在现存类定义的基础上,建立新定义类的技术。 • 新类的定义可以是现存类所声明的数据、定义与新类所增加的声明的组合。 • 新类复用现存类的定义,而不要求修改现存类。 • 现存类可当作父类(泛化类、基类或超类)来引用,则新类相应地可当作子类(特化类、子女类或派生类)来引用。
父类、子类、超类 • 父类:一个类的上层是父类。 • 子类:一个类的下层是子类。 • 超类:若 C2 是 C1 的子类, C3 是 C2 的子类,则 C1 是 C3的超类。
单继承与多继承 • 单继承:一个类只允许有一个父类,即类等级为树形结构。 • 多继承:一个类允许有多个父类 • 继承的传递性: • 如果类 C 继承类 B , • 类 B 继承类 A ,则类 C 继承类 A 。
继承性的优点 • 使得相似的对象可以共享程序代码和数据结构,大大减少程序中的冗余信息。 • 便于软件修改维护。 • 用户在开发新系统时不必从零开始,可以继承原有相似功能或者从类库中选取需要的类,再派生新类。
8 、多态性(polymorphism ) • 指对象根据所接受的消息而做出动作,同样的消息为不同的对象接受时可导致完全不同的行动。
9 、重载( overloading) • 包括: • 函数重载:在同一作用域,若干个参数特征不同的函数可以使用相同的函数名字; • 运算符重载:同一个运算符可以施加于不同类型的操作数上面。
9 .3 面向对象建模 • 模型:是一组图示符号和组织这些符号的规则,利用它们来定义和描述问题域中的术语和概念。 • 面向对象模型的组成: 描述系统控制结构 描述系统数据结构 描述系统功能
一般的建模顺序: • ① 对象模型(object model ) :定义实体,描述系统数据,定义“对谁做” • ② 动态模型( dynamic model ) :描述系统控制结构,规定“何时做” • ③ 功能模型( functional model ) :描述系统功能,指明系统应“做什么”
几种著名的面向对象方法 • Booch 方法( 1991 ) • Coad 一 Yourdon 方法( 1991 ) • Rumbaugh 方法(简称 OMT ) ( object Modeling Technology , 1991 ) • Jacobson 方法(简称 OOSE , 1992 ) • 由 Rumbaugh 、 Booch 、 Jacobson 提出的统一建模语言 ( 简称 UML ) ( Unify Modeling Language , 1994 )
UML 统一建模语言 • 一种可视化建模语言,能描述开发需要的各种视图,并以此为基础组建系统。 • 其发展过程如右图: • 常用的工具: Rational Rose
面向对象的软件开发模型 • 对象模型: 描述系统数据结构的对象模型; • 动态模型:描述系统控制结构; • 功能模型:描述系统功能。 • 一个典型的软件系统使用数据结构(对象模型),执行操作(动态模型),并且完成数据值的变化(功能模型)。
9 . 4 对象模型 • 描述系统内部对象的静态结构,包括对象本身的定义、对象的属性和操作、以及对象与其它对象之间的关系。 • UML 中,对象模型通常由“类图”组成。
9 . 4 . 2 表示关系的符号 • 类和类之间的联系称为“关系”;关系可以是物理的,也可以是逻辑的。 • 通常分为:关联、范化、依赖和细化四种。
1 、关联 • 表示:在类之间画一条连线。 • 角色:关联的端点,说明类在关联中的作用和角色。
关联的重数 • 表示类中有多少个对象与关联类中的一个对象相关。常见的描述有: • 未标明,默认为 1 ;0 .. 1 ; 0 ... *+或 *; • 0+ 或1 .. ;1 .. 5 ; 3
限定关联 • 对关联的含义做某种约束。通常用在一对多或多对多的关联关系中,把模型中的重数从一对多(或多对多)变成一对一(或多对一) 文件在目录内是唯一的
关联的属性 • 进一步说明对象间关联的性质,可引入一个关联类来记录这些附加信息。关联类通过一条虚线与关联连接。
2、聚合 • 一种“整体与成员”的关系。表示整体类的那一端增加一个菱形框。 • 包括共享聚合和组合聚合。如:
4 、依赖和细化 • 依赖:一个模型元素是独立的,另一个依赖于这个独立的模型元素,若独立元素改变,将影响此元素。 • 如成绩依赖课程:
A B 细化:同一事物在不同抽象层次上描述时,这些描述之间具有细化关系。 B在A的基础上更详细的描述
9 . 5 动态模型 • 状态图描述对象可能的状态及其转换,关心对象在某过程中的经历。 • 生命周期中的阶段也就是对象的状态。 • 一个触发行为称为一个事件. • 状态有持续性,它占用一段时间间隔。 • 事件表示时刻,状态代表时间间隔。 • 通过状态图来描绘对象的状态、触发状态转换的事件以及对象的行为。
9 . 6 功能模型 • 功能模型表示变化的系统的“功能”性质,它指明了系统应该“做什么”,因此更直接地反映了用户对目标系统的需求。 • UML提供的用例图也是进行需求分析和建立功能模型的强有力工具。 • 在UML中把用用例图建立起来的系统模型称为用例模型。 • 用例模型描述的是外部行为者(actor)所理解的系统功能。是其他视图的核心和基础。
关系 行为者 方框代表系统 椭圆代表用例 图9.16自动售货机系统用例图