700 likes | 891 Views
第9章:面向对象方法学引论. 9.1 面向对象方法学概述 9.1.1 面向对象方法学的要点 面向对象方法学的基本原则:尽可能模拟人类习惯的思维方式,使开发软件的方法与过程尽可能接近人类认识世界解决问题的方法与过程。. 客观世界中的实体 —— 问题域中的对象; 计算机中的实体 —— 解空间对象; 解空间对象取决于程序设计语言: 汇编语言的对象:存储单元; 面向过程的高级语言的对象:变量、数组、记录、文件等; 面向对象的高级语言的对象:除上述元素外,还包括窗体、菜单、按钮、等等。.
E N D
第9章:面向对象方法学引论 • 9.1 面向对象方法学概述 • 9.1.1 面向对象方法学的要点 • 面向对象方法学的基本原则:尽可能模拟人类习惯的思维方式,使开发软件的方法与过程尽可能接近人类认识世界解决问题的方法与过程。
客观世界中的实体——问题域中的对象; • 计算机中的实体——解空间对象; • 解空间对象取决于程序设计语言: • 汇编语言的对象:存储单元; • 面向过程的高级语言的对象:变量、数组、记录、文件等; • 面向对象的高级语言的对象:除上述元素外,还包括窗体、菜单、按钮、等等。
与传统方法不同,面向对象方法以数据为主线,将数据和操作方法封装在对象中,通过消息请求对象主动执行它的内部操作,改变其内部私有数据。
面向对象方法具有四个要点: • A.认为客观世界是由对象组成; • B.把所有对象都划分成各种对象类(Class); • C.把若干对象类组成一个层次结构的系统(类等级); • D.对象彼此间仅通过传递消息互相联系。 • OO = Objects + Class + Inheritance + Communication with message
9.1.2 面向对象方法的优点 • 1.与人们习惯的思维方法一致; • 2.稳定性好; • 3.可重用性好; • 4.较易开发大型软件产品; • 5. 可维护性好。
操作1 状态S 操作2 界面 操作3 操作1、2、3的实现 图9.2 对象的形象表示 9.2 面向对象的概念 • 9.2.1 对象 1、对象的形象表示
2、对象的定义 • 1)定义1:对象是具有相同状态的一组操作的集合。 • 2)定义2:对象是对属性值和操作的封装。 • 3)定义3:对象::= < ID, MS, DS, MI > 其中,ID是对象的名字;MS是对象中的操作集合;DS是对象的数据集合;MI是对象受理的消息名集合(即对外接口)。
输入fi , X 输出 fi (X, S) 状态S 操作:f1, f2, …, fn 转换:g1, g2, …,gn 转换:新状态S’=gi (X,S) 图9.3 用自动机模拟对象
3、对象的特点 • 1)以数据为中心; • 2)对象是主动的; • 3)实现了数据封装; • 4)本质上具有并行性; • 5)模块独立性好。
9.2.2 其他概念 1、类(Class) 类就是对具有相同数据和相同操作的一组相似对象的定义。 如:Circle类具有相同的数据(圆心坐标、半径、颜色)和相同的操作(显示自己、放大缩小半径、在屏幕上移动位置)。
又如:下面C++语言定义的Queue类,可用于实现一个队列(即先进先出的表): • Class Queue • { int q [100]; • int sloc, rloc; • public: • void init ( ); //成员函数 • void qput (int i); • int qget( ); • };
类有私有变量(Private)和公有变量(Public)。 • 缺省时,都属于私有的,只能由类内部其他成员来访问,不能由程序的其他部分来访问。 • 这是一种实现封装的方法。
2、实例(Instance) • 实例就是由某个特定的类所描述的一个具体的对象。 • 如:Circle a ; //声明Circle类实例a • Queue Q1, Q2; //声明Queue类实例Q1和Q2
3、消息(Message) • 消息就是用来请求对象执行某个处理或回答某些信息的要求。 • 消息既可以是数据流,也可以是控制流。一条消息可以发送给不同的对象,对消息的解释完全由接收信息的对象来完成,不同的对象对相同形式的消息可以有不同的解释。
与传统程序的“调用/返回”所不同的是,对于传来的消息,对象可以返回相应的回答信息,也可以不返回。 • 一个消息由三个部分组成: • 1)接收信息的对象; • 2)信息选择符(即消息名); • 3)零个或多个变元(参数)。 • 如:MyCircle.Show(GREEN);
4、方法(Method) • 方法,是对象所能执行的操作。 • C++中把方法称为成员函数,如Circle类中定义的成员函数:Show(int color)
5、属性(Attribute) 属性,是类中定义的数据。 C++中把属性称为数据成员。
6、封装(encapsulation) • 封装就是信息隐藏,通过封装对外界隐藏了对象的实现细节。
类A A的实例a1 类A A的操作 A的变量 A的实例变量 B的实例b1 类B:A的子类 从A的继承特性 类B B的操作 继承来的A的实例变量 B的变量 B的实例变量 图9.4 实现继承机制的原理 继承,是指能够直接获得已有的性质和特征,而不必重复定义它们。 • 7、继承(Inheritance)
8、多态性(Polymorphism) • 多态性,指子类对象可以象父类对象那样使用,同样的消息既可以发送给父类对象,也可以发送给子类对象。 • 即不同等级的类,可以公用一个方法的名字。 • C++中,多态性是通过虚函数来实现的。在不同层次的类中,虚函数实现算法不同,在运行时根据接收消息的对象所属于的类来决定执行虚函数的版本,称为动态联编。
9、重载(Overloading) • 有两种重载: • 1)函数重载 • 指在同一作用域内的若干个参数特征不同的函数可以使用相同的函数名字。 • 如: Show(int a, int b) • Show(int x) • Show(int x, int y, int z) • C++语言中函数重载是通过静态联编实现的。即编译时根据函数变元的个数和类型,决定函数版本。
2)运算符重载 • 指同一运算符可以施加于不同类型的操作数上面。当被操作数类型不同时,运算符的含义是不同的。 • 编译时根据被操作数的类型,决定使用算符的哪种语义。
另外,在实现一个类成员函数时,必须通过用类名限定函数名来告诉编译器这个函数属于哪个类。 • 如,编写qput( )函数: • Void Queue :: qput (int i) • { if (sloc = =100) • {cout << “Queue if full” ; • return; } • sloc++; • q [sloc] = i; • }
从程序中调用一个类的成员函数,用对象和点运算符。如: • Queue ob1, ob2; • ob1.init( ); //是对对象ob1的初始化函数init( )的调用 • ob1, ob2之间的唯一关系是它们是同一类对象。ob1的初始化不影响ob2。
9.3 面向对象建模 • 用面向对象方法开发软件,通常需要建立三种形式的模型,它们分别是: • (1)对象模型:描述系统的数据结构; • (2)动态模型:描述系统的控制结构; • (3)功能模型:描述系统的功能。 • 3种模型必不可少,其重要程度不同,对象模型是最基本、最重要的。
UML(Unified Modeling Language) • UML是面向对象的分析与设计(OOA&D)方法发展的产物。
1. 标准建模语言UML的出现 • 公认的面向对象建模语言出现于70年代中期。 • 90年代中,一批新方法出现了,其中最引人注目的是Booch 1993、OOSE和OMT-2等。
1995年10月:第一个公开版本UM 0.8(Unified Method)。 • 1996年6月:UM改名为UML(Unified Modeling Language),发布 UML 0.9。 • 1996年底:UML占面向对象技术市场的85%,成为可视化建模语言事实上的工业标准。 • 现最新版本:UML2.0
2. 标准建模语言UML的内容 • UML是标准的建模语言,而不是标准的开发过程。 • 在不同组织和不同应用领域,UML应用需采取不同的开发过程。 • 1998年:RUP( Rational Unified Process)是一种典型的建模过程。
UML的重要内容可以由五类图(9种图形)来定义:UML的重要内容可以由五类图(9种图形)来定义: 1)用例图:从用户角度描述系统功能,并指出各功能 • UML的定义包括UML语义和UML表示法两部分。
2)静态图:包括类图、对象图和包图; 对象图 包图
3)行为图:描述系统的动态模型; 4)交互图:描述对象间的交互关系; 交互图
5)实现图:如配置图,定义系统中软硬件的物理体系结构。5)实现图:如配置图,定义系统中软硬件的物理体系结构。
3. 标准建模语言UML的应用领域 • UML适用于软件开发中从需求分析到测试的不同阶段: • 需求获取:用例图、活动图 • 需求分析:类图、对象图和包图 • 系统分析与设计:状态图、顺序图、合作图、活动图、部件图和配置图。 • 测试:单元测试用类图、集成测试用部件图和合作图、确认测试用用例图等。
UML常用于建立软件系统模型,但同样可用于描述非软件领域的系统,如: • 机械系统; • 企业机构或业务过程; • 处理复杂数据的信息系统; • 具有实时要求的工业系统或工业过程; • …等。
类名 属性 服务 图9.5 表示类的图形符号 9.4 对象模型 • 9.4.1 类图的基本符号 • 1. 定义类
2. 定义属性 • UML描述属性的语法格式: • 可见性 属性名:类型名=初值{性质串} • 可见性:公有(public)/ +、私有(private)/-、保护(protected)/# (没有默认可见性) • {性质串}:可能枚举值或其它性质,如{只读} • 例:-管理员:String=“未定” • 类变量实例:-货单数:Integer • (类变量在该类所有对象中的属性值相等)
3. 定义服务(操作) • UML描述操作的语法格式: • 可见性 操作名(参数表):返回值类型{性质串} • 参数的语法: • 参数名:类型名=默认值 • -Show(x:integer=0, y :integer, z :integer):integer
1…* 使用 * 作家 计算机 被使用 图9.6 普通关联示例 • 9.4.2 表示关系的符号 • 1. 关联 • 1)普通关联
重数(multiplicity)的表示方法: • 0…1 表示 0到1个对象; • 0…* 或* 表示 0到多个对象; • 1+ 或1…* 表示 1到多个对象; • 1…15 表示 1到15个对象; • 3 表示 3个对象。
人 妻子 丈夫 结婚 图9.7 关联的角色 2)关联的角色 上图是一个递归关联的例子。 这种情况下,标明角色名有助于理解类图。
目录 文件 文件名 1…* 保存 目录 文件 图9.8 限定关联 被保存 普通关联 3)限定关联 利用限定词把一对多关系简化成了一对一关系。
队列 4 电梯控制器 电梯 * 按钮 图9.9 关联类示例 4)关联类 控制器对象和电梯对象之间的连接,对应着一个队列(对象),它存储着控制器和电梯内部按钮的请求信息。
* 1…* 课题组 人 成员 图9.10 共享聚集示例 2. 聚集 • 聚集表示类与类之间是整体与部分的关系。 1)共享聚集 处于部分方的对象可同时参与多个处于整体方对象的构成。
2)组合聚集 • 部分类完全隶属于整体类,部分与整体共存,整体不存在了部分也随之消失。
教材 包含 1+ 封面 前言 目录 章 包含 1+ 节 习题 描绘教材结构的对象模型(组合聚集) 例子:
3. 泛化(继承) • 1)普通泛化 抽象类:描述子类的公共属性和行为,不能生成具体对象的类。