</p> (2)消息和方法程序的执行是靠在对象间传递消息来完成的。7发送消息的对象称为发送者,接收消息的对象称为接收者。消息中仅包含发送者的要求,它只告诉接收者需要完成哪些处理,但并不指示接收者应如何完成这些处理。消息完全由接收者解释,并决定完成所需的处理的方式。一个对象可以接收不同形式、不同内容的多个消息;相同形式的消息可以发往不同的对象。不同的对象对形式相同的消息可以有不同的解释,因而可以作出不同的反应。这里,反应并不是必需的。这与子程序的调用/返回有明显的不同。把全部对象分成各种对象表,每个类都定义一组所谓“方法”。方法实际上是允许作用于该类对象上的各种操作。当一个面向对象的程序在运行期间,一般要做三件事:
" N' ~5 _" m7 j/ w (1)根据需要创建对象;
, ~, I! D- A, X, p3 C (2)从一个对象(或用户)向另一个对象传递消息;' f1 r* l6 {* n3 k, r L
(3)若不再需要该对象时,应删除它,并回收它所占用的存储单元。
+ x N7 G# F4 {5 b* a (3)类和类的层次在面向对象的程序设计中,对象是程序的基本单位。相似的对象,可以像传统程序设计语言中的变量与类型关系一样,归并到一类(class)中去。程序员只需定义一个类对象,就可以得到若干实例(instance),作为可以使用的对象。具体地说,类由方法和数据组成,是关于一类对象的性质的描述。它包括外部特性和内部特性两个方面。通过描述消息模式及其相应的处理能力来定义对象的外部特性。通过描述内部状态的表现形式及固有的处理能力的实现来定义对象的内部实现特性。对象是在执行过程中,根据对象所属的类,动态地生成的。一个类可以生成多个不同的对象。同一类对象具有相同的特性。一个对象的内部状态只能由其自身来修改,任何别的地象都不可能修改它。因此,同一个类的对象,虽然在内部状态的表现形式上相同,但它们可以有不同的内部状态,故此这些对象并不完全一模一样。一个类的上层可以有超类(superclass),下层可以有子类(subclass),这样形成了一种类的层次结构。层次结构的一个重要特点是继承性,一个类可以直接或间接地继承其超类的全部描述。继承性具有传递性。一个类可以有多个子类,也可以有多个超类。抽象类(abstract class)是一种不能建立实例的类。抽象类将有关的类组合在一起,提供了一个公共的根,其它一些子类从这个根派生出来。通常一个抽象类只描述了这个类的 有关的操作接口。或者操作的部分实现;完整的实现则被留给一个或几个子类,抽象类一般用于定义一种协议或概念。
! d2 I7 X' b0 E7 S (4)继承性继承性(inherintance)是自动地共享子类、超类和对象中的方法和数据的一种机制。如果没有继承性,不同类中的对象中的数据和方法就可能出现大量的重复。继承性比较自然地体现了对象间的联系。
5 C6 V! U0 t7 I$ Z (5)封装性封装是一种信息隐蔽技术,用户只能看到对象封装界面上的信息,对象内部的信息对用户是隐蔽的。封装的目的是使对象的使用者和对象的设计者分开,使用者不必知道实现的具体细节,只须按设计者的要求来访问对象,这样方便于系统的集成。封装是一种强有力的系统集成手段。封装和类说明有关。一个类的每一个实例都是一个单独的封装(或组件)。显式地把对象的规格说明(specification)和对象的实现分开是面向对象的一大特色。封装本身即是一个模块,把对象的定义模块和实现模块分开,从而使得维护和修改变得方便。* v) S+ c6 ^, @2 h) d( F" [
(6)多态性所谓多态(polymorphic),即一个名字可以具有多种语义。多态与动态类型和静态类型有关。动态类型是指在执行期间可以改变的类型。静态类型是在程序文本中声明时确定下来的类型。在面向对象的系统中,利用重名这样多义性不会带来混乱,并且为需求分析和设计带来了好处。( y" R1 P: G! {5 K' x
5.动态聚束7 ^# h5 K: m/ l, P
聚束(binding)其实并不是一个新概念。一个程序经编译到连接成为可运行的目标代码,就是将可执行代码聚束在一起。用传统语言写的程序在运行之前即可聚束,故此称之为静态聚束(static binding)。而面向对象语言则在程序运行时可发生聚束,故称之为动态聚束(dynamic binding)。动态聚束增加了程序的简单性和可扩充性,使程序增删自如,不易出错,但效率略低。应该指出,静态聚束运行效率高,但修改维护时工作量大。1 ?. Z2 a/ ~, o3 N3 U
6.面向对象的系统分析方法
: j- J# w/ Q4 F" R6 q 系统分析过程就是提取一个系统的需求过程,即是指为了满足用户的需求,系统必须做什么,而不是指系统如何实现。系统分析通常是一个需求文档开始点,同用户进行一系列的讨论为开端。一般来说,参加制定文档的人应包括系统的最终用户、问题域专家、系统的开发者以及其它感兴趣的人。在过去的10年中,已经在系统分析中使用了功能分解法、数据流法、信息模拟法。最近研究了面向对象分析(OOA)方法。下面将综述这4种主要的需求分析方法。0 R. g& l. h' W |
(1)功能分解法 它可表示为功能=子功能+子功能接口, }/ G6 T- N* f) I* P$ a: n
(2)数据流法 数据流法,即通常所说的结构分析法,它可表示为数据流=数据存储+数据变换+过程说明+数据字典
" u0 E1 X4 O9 m6 c1 [; y7 \
1 q- y5 d9 s; u* c. | (3)信息模拟法 信息模拟的主要建模工具是实体-关系图,现已发展成为语义数据模型。信息模拟法可以表示为信息模拟法=对象+属性+关系+超类+子类+对象 |