面向对象方法学引论
面向对象方法学
主要观点
1.客观世界是由各种对象组成的
2.所有对象划分成了各种对象类,每个对象类定义了一组数据和一组方法。这也是与面向过程设计的最大不同,面向对象将二者分开。
3.按照父类和子类划分若干层级,形成一个层次结构。
4.对象彼此间仅通过传递信息相互联系。
优点
(1)与人类习惯的思维方式一致
(2)稳定性好
(3)可重用性好
(4)较易开发大型软件产品
(5)可维护性好
面向对象的概念
对象的三种定义
1.具有相同状态的一组操作的集合。
2.对问题域中某个东西的抽象,这种抽象反映了系统保存有这个东西的信息或与它交互的能力。对象是对属性值和操作的封装。
3.形式化定义——对象:=<ID, MS, DS, MI>,分别表示对象名、所含操作、数据结构、受理的消息名。
对象的特点
1.以数据为中心
2. 对象是主动的
3. 实现的数据封装
4. 本质上具有并行性
5. 模块独立性好
相关概念
类:对具有相同属性和行为的一个或多个对象的描述
实例:由某个特定的类所描述的一个具体的对象
消息:要求某个对象执行在定义它的那个类中所定义的某个操作的规格说明
方法:对象所能够执行的操作。也就是类中所定义的服务
属性:类中所定义的数据,它是对客观实践实体所具有的性质的抽象
封装:在面向对象的程序中,把数据和实现操作的代码集中起来放在对象的内部,称之为封装
继承:指能够直接获得已有的性质和特征,而不必重复定义它们
多态性:子类对象可以像父类对象那样使用,同样的消息既可以发送给父类对象也可以发送给子类对象
函数重载:在同一个作用域内的若干个参数特征不同的函数可以使用相同的函数名字
运算符重载:同一个运算符可以施加于不同类型的操作数上面
面向对象建模
三种模型:
模型种类 | 作用 | 工具 |
---|---|---|
对象模型 | 定义系统静态结构(做事情的实体),考虑对象的静态属性 | 类图 |
动态模型 | 描述系统控制结构(规定什么时候做),考虑对象的动态行为 | 状态转换图 |
功能模型 | 描述系统计算结构(指明做什么),直接反映用户需求 | 数据流图、用例图 |
其中,对象模型是最基础、最核心、最重要的。
对象模型(重点)
对象模型的四种关系:
1.关联:两个类的对象之间存在的某种语义上的联系。
普通关联:
–最常见的关联关系
–关联是双向的
–图形符号是连接两个类之间的直线
示例如下:其中文字和三角形可选。
限定关联:一对多变一对一或多对多变多对一。
关联类
–为了说明关联的性质可能需要一些附加的信息
–关联类通过一条虚线与关联连接
–关联类与一般类一样,具有属性、操作和关联
2.聚集:也称为聚合,是关联的特例。表示类与类之间是整体与部分的关系。
共享聚集:聚集关系中处于部分方的对象可以同时参与多个处于整体方对象的构成。利用空心菱形的实线表示。
如下图,一个人可以参加多个课题组,所以是共享聚集。
组合聚集:部分类完全属于整体类,无法独立存在。利用实心菱形的实线表示。
3.泛化:继承
普通泛化:与继承基本相同。利用空心三角的实线表示。
抽象类:没有对象的类。如下图所示,交通工具类即为抽象类。
受限泛化: 给泛化关系附加约束条件,以进一步说明该泛化关系。约束条件包括:多重、不相交、完全、不完全。
多重:一个子类可以同时多次继承同一个上层基类,如下图所示
不相交:一个子类不能多次继承同一个基类
完全:父类种所有子类都已在类图种穷举出来了
不完全:父类中子类没有都穷举出来
4.依赖和细化:
依赖:一个模型元素是独立的,另一个不是独立的而是依赖于前者,包括一个使用另一个作为操作的参数、一个类向另一个发消息、一个类用另一个类的对象作为数据成员。利用实心箭头虚线连接,箭头指向独立的类。如下图,类B是类A的友元。
细化:不同层次上,一个类是另一个类更加详尽的描述。利用空心箭头虚线。
如下图:分析类细化了设计类。
复杂类图举例:P222
类图性质:
1.描述类及类与类之间的静止关系;
2.是一种静态模型;
3.一个系统可以由多张类图来描述;
4.一个类也可以出现在几张类图中;
动态模型
在需求分析部分已经介绍。
功能模型
用例图包含的模型元素有:系统、行为者、用例及用例之间的关系。
系统:方框,提供用例的黑盒,用户无法得知内部工作细节。
用例:椭圆,一个具体的完整的功能。
行为者:火柴人,与系统交互的人或其他系统,代表外部实体。
用例间关系:扩展关系,向原用例添加动作构成新用例,后者继承前者的一些行为,程新用例为扩展用例,图中售散装饮料是售货的扩展;使用关系,一个用例使用另一个,图中供货用例使用打开机器和关闭机器。
创建用例模型的工作:
1.定义系统
2.寻找行为者和用例
3.描述用例
4.定义用例之间的关系
5. 确定模型
三种模型之间的关系
相互补充、相互配合。