软件工程-软件工程导论(第六版) 第九章 面向对象方法学引论(图片+文字)

1 引言

申请夏令营的事情已经结束,只等待结果。临近期末,备战考试,其余的不要多想。今天的整理内容是第九章,面向对象方法学引论。

2 面向对象方法学引论

2.1 面向对象方法学概述

2.1.1 面向对象方法学的要点

面向对象方法学的要点面向对象方法学的出发点和基本原则,是尽可能模拟人类习惯的思维方式,使开发软件的方法与过程尽可能接近人类认识世界解决问题的方法与过程,也就是使描述问题的问题空间(也称为问题域)与实现解法的解空间(也称为求解域)在结构上尽可能一致。
    面向对象方法把对象作为由数据及可以施加在这些数据上的操作所构成的统一体。对象与传统的数据有本质区别,它不是被动地等待外界对它施加操作,相反,它是进行处理的主体。必须发消息请求对象主动地执行它的某些操作,处理它的私有数据,而不能从外界直接对它的私有数据进行操作。

面向对象方法具有下述4个要点:
(1)面向对象的软件系统是由对象组成的,软件中的任何元素都是对象,复杂的软件对象由比较简单的对象组合而成。
(2)把所有对象都划分成各种对象类(简称为类,class),每个对象类都定义了一组数据和一组方法。数据用于表示对象的静态属性,是对象的状态信息。
(3)按照子类(或称为派生类)与父类(或称为基类)的关系,把若干个对象类组成一个层次结构的系统(也称为类等级)。
(4)对象彼此之间仅能通过传递消息互相联系。

2.1.2 面向对象方法学的优点

1.与人类习惯的思维方法一致

2.稳定性好

3.可重用性好

4.较易开发大型软件产品

5.可维护性好

2.2 面向对象的概念

2.2.1 对象






2.2.2 其他概念

1.类(class)

在面向对象的软件技术中,“类”就是对具有相同数据和相同操作的一组相似对象的定义,也就是说,类是对具有相同属性和行为的一个或多个对象的描述,通常在这种描述中也包括对怎样创建该类的新对象的说明。

2.实例(instance)
实例就是由某个特定的类所描述的一个具体的对象。
“对象” 既可以指一个具体的对象,也可以泛指一般的对象,但是,“实例”必然是指一个具体的对象。
3.消息(massage)

    消息就是要求某个对象执行在定义它的那个类中所定义的某个操作的规格说明。通常,一个消息由接收消息的对象、消息选择符(也称为消息名) 、 零个或多个变元3部分组成

4.方法(method)
    方法就是对象所能执行的操作,也就是类中所定义的服务。方法描述了对象执行操作的算法,响应消息的方法。在C++语言中把方法称为成员函数。
5.属性(attribute)
    属性就是类中所定义的数据,它是对客观世界实体所具有的性质的抽象。类的每个实例都有自己特有的属性值。在C++语言中把属性称为数据成员。

    例如,Circle类中定义的代表圆心坐标、半径、颜色等的数据成员,就是圆的属性。

6.封装(encapsulation)
    在面向对象的程序中,封装是指把数据和实现操作的代码集中起来放在对象内部。
    对象具有封装性的条件如下:
    (1) 有一个清晰的边界。所有私有数据和实现操作的代码都被封装在这个边界内,从外面看不见更不能直接访问。
    (2) 有确定的接口(即协议)。这些接口就是对象可以接受的消息,只能通过向对象发送消息来使用它。
    (3) 受保护的内部实现。实现对象功能的细节(私有数据和代码)不能在定义该对象的类的范围外访问。

    封装就是信息隐藏,通过封装对外界隐藏对象的实现细节。     

7.继承(inheritance)
    在面向对象的软件技术中,继承是子类自动地共享基类中定义的数据和方法的机制。

    面向对象软件技术把类组成一个层次结构的系统(类等级):一个类的上层可以有父类,下层可以有子类。这种层次结构系统的一个重要性质是继承性,一个类直接继承其父类的全部描述(数据和操作)。

7.继承(inheritance)
继承具有传递性,即一个类实际上继承了它所在的类等级中在它上层的全部基类的所有描述。
当类等级为树形结构时,类的继承是单继承;当允许一个类有多个父类时,类的继承是多重继承。多重继承的类可以组合多个父类的性质构成所需的性质,使用多重继承时要注意避免二义性。
当需要扩充原有的功能时,派生类的方法可以调用其基类的方法,并在此基础上增加必要的程序代码;当需要完全改变原有操作的算法时,可以在派生类中实现一个与基类方法同名而算法不同的方法;当需要增加新的功能时,可以在派生类中实现一个新的方法。

有了继承性可以用把已有的一般性的解加以具体化的办法,来达到软件重用的目的。

8.多态性(polymorphism)
    在面向对象的软件技术中,多态性是指子类对象可以像父类对象那样使用,同样的消息既可以发送给父类对象也可以发送给子类对象。即,在类等级的不同层次中可以共享(公用)一个行为(方法)的名字,然而不同层次中的每个类却各自按自己的需要来实现这个行为。
    多态性机制不仅增加了面向对象软件系统的灵活性,进一步减少了信息冗余,而且显著提高了软件的可重用性和可扩充性。
9.重载(overloading)
        有两种重载:函数重载是指在同一作用域内的若干个参数特征不同的函数可以使用相同的函数名字;运算符重载是指同一个运算符可以施加于不同类型的操作数上面。

    重载进一步提高了面向对象系统的灵活性和可读性。

2.3 面向对象模型


2.4 面向对象模型

2.4.1 类图的基本符号




2.4.2 表示关系的符号














2.5 动态模型

动态模型表示瞬时的、行为化的系统的“控制”性质,它规定了对象模型中的对象的合法变化序列。

    所有对象都具有自己的生命周期(或称为运行周期)。生命周期中的阶段就是对象的状态。状态是对对象属性值的一种抽象。各对象之间相互触发(即作用)就形成了一系列的状态变化。人们把一个触发行为称作一个事件。对象对事件的响应,取决于接受该触发的对象当时所处的状态,响应包括改变自己的状态或者又形成一个新的触发行为。

    状态有持续性,它占用一段时间间隔。状态与事件密不可分,一个事件分开两个状态,一个状态隔开两个事件。事件表示时刻,状态代表时间间隔。
    通常,用UML提供的状态图来描绘对象的状态、触发状态转换的事件以及对象的行为(对事件的响应)。

    每个类的动态行为用一张状态图来描绘,各个类的状态图通过共享事件合并起来,从而构成系统的动态模型。也就是说,动态模型是基于事件共享而互相关联的一组状态图的集合。

2.6 功能模型

功能模型表示变化的系统的“功能”性质,它指明系统应该“做什么”,因此更直接地反映了用户对目标系统的需求。
功能模型由一组数据流图组成。建立功能模型有助于软件开发人员更深入地理解问题域,改进和完善自己的设计。
UML提供的用例图是进行需求分析和建立功能模型的强有力工具。在UML中把用用例图建立起来的系统模型称为用例模型。
使用用例模型代替传统的功能说明,往往能够更好地获取用户需求,它所回答的问题是“系统应该为每个(或每类)用户做什么”。

用例模型描述的是外部行为者(actor)所理解的系统功能。用例模型的建立是系统开发者和用户反复讨论的结果,它描述了开发者和用户对需求规格所达成的共识。

2.6.1 用例图






2.6.2 用例建模



2.7 三种模型之间的关系


3 结束语

我去吃饭!哈哈!

猜你喜欢

转载自blog.csdn.net/Chen_Yongbo/article/details/80569202