③在某种可以改善而不损害程序可读性的情况下。 2.3面向对象的程序设计 2.3.1关于面向对象方法 面向对象方法的本质,就是主张从客观世界固有的事物出发来构造系统,提倡用人类在 现实生活中常用的思维方法米认识、理解和描述客观事物,强调最终建立的系统能够映射问 题域,也就是说,系统中的对象以及对象之间的关系能够如实地反映问题域中固有事物及其 关系 优点: 与人类习惯的思维方法一致 面向对象方法和技术以对象为核心。对象是由数据和容许的操作组成的封装体,与客观 实体有直接的关系。对象之间通过传递消息互相联系,以模拟现实世界中不同事物彼此之间 的联系。 面向对象的设计方法与传统的面向程的方法右本质不同,这种方法的基本原理是:伸 用现实世界的概念抽象地思考问题从而自然地解决问题。它强调模拟现实世界中的概念而不 强调算法,它鼓励开发者在软件开发的绝大部分过程中都用应用领域的要领去思考。 2、稳定性好 面向对象方法基于构造问题领域的对象模型,以对象为中心构造软件系统。它的基本作 法是用对象模拟问题领域小的实体,以对象间的联系刻画实体间的联系。因为面向对象的敏 件系统结构是根据问题领域的模型建立起来的,而不是基于对系统应完成的功能的分解,所 以,当对系统的功能需求变化时并不会引起软件结构的整体变化,往往仅需要作一些局部性 的修改。由于现实世界中的实体是相对稳定的,因此,以对象为中心构造的软件系统也是比 较稳定的。 3、可重用性好 软件重用是指在不同的软件开发过程中重复作用相同或相似软件元素的过程。重用是提 高软件生产率的最主要的方法 在面向对象方法中所使用的对象,其数据和操作是作为平等伙伴出现的。因此,对象具 有很强的自含性。此外,对象所固有的封装性,使得对象的内部实现与外界隔离,具有较强 的独立性。由此可见,对象提供了比较理想的模块化机制和可重用的软件成分。 4、易于开发大型软件品 用面向对 象范型开发软件时,可以 一个大型产品看作 系列本质上相互独立的小产品 来处理,这就不仅降低了开发的技术难度,而且也使得对开发工作的管理变得容易。这就是 为什么对于大型软件产品来说,面向对象范型优于结构化范型的原因之一。许多软件开发公 司的经验都表明,当把面向对象技术用于大型软件开发时,软件成本明显地降低了,软件的 整体质量也提高了 5、可维护性好 (1)用面向对象的方法开发的软件稳定性比较好 (2)用面向对象的方法开发的软件比较容易修改 (3)用面向对象的方法开发的软件比较容易理解: (4)易于测试和调试。 31
31 ③在某种可以改善而不损害程序可读性的情况下。 2.3 面向对象的程序设计 2.3.1 关于面向对象方法 面向对象方法的本质,就是主张从客观世界固有的事物出发来构造系统,提倡用人类在 现实生活中常用的思维方法来认识、理解和描述客观事物,强调最终建立的系统能够映射问 题域,也就是说,系统中的对象以及对象之间的关系能够如实地反映问题域中固有事物及其 关系。 优点: 1、 与人类习惯的思维方法一致 面向对象方法和技术以对象为核心。对象是由数据和容许的操作组成的封装体,与客观 实体有直接的关系。对象之间通过传递消息互相联系,以模拟现实世界中不同事物彼此之间 的联系。 面向对象的设计方法与传统的面向过程的方法有本质不同,这种方法的基本原理是:使 用现实世界的概念抽象地思考问题从而自然地解决问题。它强调模拟现实世界中的概念而不 强调算法,它鼓励开发者在软件开发的绝大部分过程中都用应用领域的要领去思考。 2、稳定性好 面向对象方法基于构造问题领域的对象模型,以对象为中心构造软件系统。它的基本作 法是用对象模拟问题领域小的实体,以对象间的联系刻画实体间的联系。因为面向对象的软 件系统结构是根据问题领域的模型建立起来的,而不是基于对系统应完成的功能的分解,所 以,当对系统的功能需求变化时并不会引起软件结构的整体变化,往往仅需要作一些局部性 的修改。由于现实世界中的实体是相对稳定的,因此,以对象为中心构造的软件系统也是比 较稳定的。 3、可重用性好 软件重用是指在不同的软件开发过程中重复作用相同或相似软件元素的过程。重用是提 高软件生产率的最主要的方法。 在面向对象方法中所使用的对象,其数据和操作是作为平等伙伴出现的。因此,对象具 有很强的自含性。此外,对象所固有的封装性,使得对象的内部实现与外界隔离,具有较强 的独立性。由此可见,对象提供了比较理想的模块化机制和可重用的软件成分。 4、易于开发大型软件产品 用面向对象范型开发软件时,可以把一个大型产品看作一系列本质上相互独立的小产品 来处理,这就不仅降低了开发的技术难度,而且也使得对开发工作的管理变得容易。这就是 为什么对于大型软件产品来说,面向对象范型优于结构化范型的原因之一。许多软件开发公 司的经验都表明,当把面向对象技术用于大型软件开发时,软件成本明显地降低了,软件的 整体质量也提高了。 5、可维护性好 (1)用面向对象的方法开发的软件稳定性比较好; (2)用面向对象的方法开发的软件比较容易修改; (3)用面向对象的方法开发的软件比较容易理解; (4)易于测试和调试
2.3.2面向对象方法的基本概念 1、对象(ob ject 对象是面向对象方法中最基本的概念。对象可以用来表示客观世界中的任何实体,也就 是说,应用领域中有意义的、与所要解决的问题有关系的任何事物都可以作为对象,它既可 以是具体的物理实体的抽象,也可以是人为的概念,或者是任何有明确边界的意义的东西。 总之,对象是对问题域中某个实体的抽象,设立某个对象就反映软件系统保存有关它的信息 并具有与它进行交互的能力 面向对象的程序设计方法中涉及的对象是系统中用来描述客观事物的一个实体,是构成 系统的一个基本单位,它由一组表示其静态特征的属性和它可执行的一组操作组成。 对象可以做的操作表示它的动态行为,在面向对象分析和面向对象设计中,通常把对象 的操作也称为方法或服务。 属性即对 象所包含的信总,它在设计对象时确定 只能通过挂靠对象的操作 来改变 操作描述了对象执行的功能,若通过消息传递,还可以为其他对象使用。操作的过程为 外是封闭的,即用户只能看到这一操作实施后的结果。这相当于事先己经设计好的各种过程 只需要调用就可以了,用户不必去关心这一过程是如何编写的。事实上,这个过程已经封装 在对象中,用户也看不到。对的这一特性即是对象的封装性。 对象右如下一些其本特占 (1)标识惟一性。指对象是可区分的,并且由对象有的内在本质来区分,而不是通过 描述来区分。 (2)分类性。指可以将具有相同属性的操作的对象抽象成类。 (3)多太性。指同一个操作可以是不同对象的行为。 (4)村装性。从外面看只能看到对象的外部性,即只需知首数据的取估范围和可以 对该数据施加的操作,根本无 需知道数据的具体结构以及实现操作的算法。对象的内部,即 处理能力的实行和内部状态,对外是不可见的。从外面不能直接使用对象的处理能力,也不 能直接修政其内部状态,对象的内部状态只能由其自身改变。 (5)模块独立性好。对象是面向对象的软件的基本模块,它是由数据及可以对这些数 据施加的操作所组成的统一体,而且对象是以数据为中心的,操作围绕对其数据所需做的处 理来设置,没有无关的操作从模块的独立性考虑,对象内部各种元素彼此结合得很紧密,内 聚性强 2、类(Class)和实例(Instance) 将属性、操作相似的对象归为类,也就是说,类是具有共同属性、共同方法的对象的集 合。所以,类是对象的抽象,它描述了属于该对象类型的所有对象的性质,而一个对象则是 其对应类的一个实别 要注意的是, 使用“对象”这个术语时,既可以指一个具体的对象, 也可以泛指一般 的对象,但是,当使用“实例”这个术语时,必然是指一个具体的对象 例如:Integer是一个整数类,它描述了所有整数的性质。因此任何整数都是整数类的 对象,而一个具体的整数“123”是类Integer的实例。 由类的定义可知,类是关于对象性质的描述,它同对象一样,包括一组数据属性和在数 据上的一组合法操作 3、消息(Me age. 面向对象的世界是通过对象与对象间彼此的相互合作米推动的,对象间的这种相互合作 需要一个机制协助进行,这样的机制称为“消息”。消息是一个实例与另一个实例之间传递 信息,它请示对象执行某一处理或回答某一要求的信息,它统一了数据流的控制流。消息的
32 2.3.2 面向对象方法的基本概念 1、对象(object) 对象是面向对象方法中最基本的概念。对象可以用来表示客观世界中的任何实体,也就 是说,应用领域中有意义的、与所要解决的问题有关系的任何事物都可以作为对象,它既可 以是具体的物理实体的抽象,也可以是人为的概念,或者是任何有明确边界的意义的东西。 总之,对象是对问题域中某个实体的抽象,设立某个对象就反映软件系统保存有关它的信息 并具有与它进行交互的能力。 面向对象的程序设计方法中涉及的对象是系统中用来描述客观事物的一个实体,是构成 系统的一个基本单位,它由一组表示其静态特征的属性和它可执行的一组操作组成。 对象可以做的操作表示它的动态行为,在面向对象分析和面向对象设计中,通常把对象 的操作也称为方法或服务。 属性即对象所包含的信息,它在设计对象时确定,一般只能通过挂靠对象的操作来改变。 操作描述了对象执行的功能,若通过消息传递,还可以为其他对象使用。操作的过程对 外是封闭的,即用户只能看到这一操作实施后的结果。这相当于事先已经设计好的各种过程, 只需要调用就可以了,用户不必去关心这一过程是如何编写的。事实上,这个过程已经封装 在对象中,用户也看不到。对的这一特性即是对象的封装性。 对象有如下一些基本特点: (1)标识惟一性。指对象是可区分的,并且由对象有的内在本质来区分,而不是通过 描述来区分。 (2)分类性。指可以将具有相同属性的操作的对象抽象成类。 (3)多太性。指同一个操作可以是不同对象的行为。 (4)封装性。从外面看只能看到对象的外部特性,即只需知道数据的取值范围和可以 对该数据施加的操作,根本无需知道数据的具体结构以及实现操作的算法。对象的内部,即 处理能力的实行和内部状态,对外是不可见的。从外面不能直接使用对象的处理能力,也不 能直接修改其内部状态,对象的内部状态只能由其自身改变。 (5)模块独立性好。对象是面向对象的软件的基本模块,它是由数据及可以对这些数 据施加的操作所组成的统一体,而且对象是以数据为中心的,操作围绕对其数据所需做的处 理来设置,没有无关的操作从模块的独立性考虑,对象内部各种元素彼此结合得很紧密,内 聚性强。 2、类(Class)和实例(Instance) 将属性、操作相似的对象归为类,也就是说,类是具有共同属性、共同方法的对象的集 合。所以,类是对象的抽象,它描述了属于该对象类型的所有对象的性质,而一个对象则是 其对应类的一个实例。 要注意的是,当使用“对象”这个术语时,既可以指一个具体的对象,也可以泛指一般 的对象,但是,当使用“实例”这个术语时,必然是指一个具体的对象。 例如:Integer 是一个整数类,它描述了所有整数的性质。因此任何整数都是整数类的 对象,而一个具体的整数“123”是类 Integer 的实例。 由类的定义可知,类是关于对象性质的描述,它同对象一样,包括一组数据属性和在数 据上的一组合法操作。 3、消息(Message) 面向对象的世界是通过对象与对象间彼此的相互合作来推动的,对象间的这种相互合作 需要一个机制协助进行,这样的机制称为“消息”。消息是一个实例与另一个实例之间传递 信息,它请示对象执行某一处理或回答某一要求的信息,它统一了数据流的控制流。消息的
使用类似于函数调用,消息中指定了某一个实例,一个操作名和一个参数表(可空)。接收 消息的实例执行消息中指定的操作,并将形式参数数与参数表中相应的值结合起来。消息传 递过程。 发送消息的对象 象)的触发操作产生输出纳 作为消 传送至接 消息的对象(接受对象),引发接受消息的对象一系列的操作。所传送的消息实质上是接受 对象所具有的操作/方法名称,有时还包括相应参数。 消息中只包含传递者的要求,它告诉接受者需要做哪些处理,但并不指示接受者应该怎 样完成这些处理。消息完全由接受者解释,接受者独立决定采用什么方式完成所需的处理, 发送者对接受者不起任何控制作用 个对象能够接受不同形式 不同内容的多个消息: 同形式的消息可以送往不同的对家 不同的对象对于形式相同的消息可以有不同的解释,能 够做出不同的反映。一个对象可以同时往多个对象传递信总,两个对象也可以同时向某个对 象传递消总。 例如,一个汽车对象具有“行驶”这项操作,那么要让汽车以时速50公里行驶的话 需传递给汽车对象“行驶”及“时速50公里”的消总 通常 个消息由下述三部分组成: (1)接收消息的对象的名称: (2)消息标识符(也称为消息名): (3)零个或名个参数 4、继承(inheritance) 继承是面向对象的方法的一个主要特征。继承是使用己有的类定义作为基础建立新类的 定义技术。已有的类可当作基类来引用,则新类相应地可当作派生类来引用 广义地说,继承是指能够直接获得已有的性质和特征,而不必重复定义它们。 面向对象软件技术的许多强有力的功能和突出的优点,都来源于把类组成一个层次结构 的系统:一个类的上层可以有父类,下层可以有子类。这种层次结构系统的一个重要性质是 继承性,一个类直接继承其父类的描述(数据和操作)或特性,子类自动地共享基类中定义 的数据和方法 维承具有传递性,如果类C继承类B,类B继承类A,则类C继承类A。因此一个类头 际上继承了它上层的全部基类的特性,也就是说,属于某类的对象除了具有该类所定义的特 性外,还具有该类上层全部基类定义的特性。 继承分为单继承与多重继承。单继承是指, 一个类只允许有一个父举,即类等级为树形 结构。多重继承是指」 个类允许有多个父类 。多重继承的类可以组合多个父类的性质构成 所需要的性质。因此,功能更强,使用更方便:便是,使用多重继承时要注意避免二义性 继承性的优点是,相似的对象可以共享程序代码和数据结构,从而大大减少了程序中的 冗余信息,提高软件的可重用性,便于软件个性维护。此外,继承性便利用户在开发新的应 用系统时不必完全从零开始,可以继承原有的相似系统的功能或者从类库中选取需要的类, 再派生出新的类以实现所需要的功能。 5、 多态性(Polymorphism 对象根据所接受的消息而做出动作,同样的消息被不同的对象接受时可导致完全不同的 行动,该现象称为多态性。在面向对象的软件技术中,多态性是指类对象可以像父类对象那 样使用,同样的消总既可以发送给父类对象也可以发送给子类对象。 多态性机制不仅增加了面向对象软件系统的灵活性,进一步减少了信息冗余,而且显著 地提高了软件的可重用性和可扩充性 当扩充系统功能增加新的实体类型时,只需派生出 新实体类相应的新的子类,完全无需修改原有的程序代码,甚至不需要重新编译原有的程序 利用多态性,用户能够发送一般形式的消息,而将所有的实现细节都留给接受消息的对象。 33
33 使用类似于函数调用,消息中指定了某一个实例,一个操作名和一个参数表(可空)。接收 消息的实例执行消息中指定的操作,并将形式参数数与参数表中相应的值结合起来。消息传 递过程中,由发送消息的对象(发送对象)的触发操作产生输出结果,作为消息传送至接受 消息的对象(接受对象),引发接受消息的对象一系列的操作。所传送的消息实质上是接受 对象所具有的操作/方法名称,有时还包括相应参数。 消息中只包含传递者的要求,它告诉接受者需要做哪些处理,但并不指示接受者应该怎 样完成这些处理。消息完全由接受者解释,接受者独立决定采用什么方式完成所需的处理, 发送者对接受者不起任何控制作用。一个对象能够接受不同形式、不同内容的多个消息;相 同形式的消息可以送往不同的对象,不同的对象对于形式相同的消息可以有不同的解释,能 够做出不同的反映。一个对象可以同时往多个对象传递信息,两个对象也可以同时向某个对 象传递消息。 例如,一个汽车对象具有“行驶”这项操作,那么要让汽车以时速 50 公里行驶的话, 需传递给汽车对象“行驶”及“时速 50 公里”的消息。 通常,一个消息由下述三部分组成: (1)接收消息的对象的名称; (2)消息标识符(也称为消息名); (3)零个或多个参数。 4、继承(Inheritance) 继承是面向对象的方法的一个主要特征。继承是使用己有的类定义作为基础建立新类的 定义技术。已有的类可当作基类来引用,则新类相应地可当作派生类来引用。 广义地说,继承是指能够直接获得已有的性质和特征,而不必重复定义它们。 面向对象软件技术的许多强有力的功能和突出的优点,都来源于把类组成一个层次结构 的系统:一个类的上层可以有父类,下层可以有子类。这种层次结构系统的一个重要性质是 继承性,一个类直接继承其父类的描述(数据和操作)或特性,子类自动地共享基类中定义 的数据和方法。 继承具有传递性,如果类 C 继承类 B,类 B 继承类 A,则类 C 继承类 A。因此一个类实 际上继承了它上层的全部基类的特性,也就是说,属于某类的对象除了具有该类所定义的特 性外,还具有该类上层全部基类定义的特性。 继承分为单继承与多重继承。单继承是指,一个类只允许有一个父类,即类等级为树形 结构。多重继承是指,一个类允许有多个父类。多重继承的类可以组合多个父类的性质构成 所需要的性质。因此,功能更强,使用更方便;便是,使用多重继承时要注意避免二义性。 继承性的优点是,相似的对象可以共享程序代码和数据结构,从而大大减少了程序中的 冗余信息,提高软件的可重用性,便于软件个性维护。此外,继承性便利用户在开发新的应 用系统时不必完全从零开始,可以继承原有的相似系统的功能或者从类库中选取需要的类, 再派生出新的类以实现所需要的功能。 5、 多态性(Polymorphism) 对象根据所接受的消息而做出动作,同样的消息被不同的对象接受时可导致完全不同的 行动,该现象称为多态性。在面向对象的软件技术中,多态性是指类对象可以像父类对象那 样使用,同样的消息既可以发送给父类对象也可以发送给子类对象。 多态性机制不仅增加了面向对象软件系统的灵活性,进一步减少了信息冗余,而且显著 地提高了软件的可重用性和可扩充性。当扩充系统功能增加新的实体类型时,只需派生出与 新实体类相应的新的子类,完全无需修改原有的程序代码,甚至不需要重新编译原有的程序。 利用多态性,用户能够发送一般形式的消息,而将所有的实现细节都留给接受消息的对象
2.4本章小结 学习完本章之后要掌握以下内容 1.程序设计方法与风格 2.结构化程序设计。 3.面向对象的程序设计方法,对象,方法,属性及继承与多态性。 习题2 一、选择题 1.在结构化程序设计思想提出之前,在程序设计中曾强调程序的效率。与程序的效率相比, 人们更重视程序的()。 A.安全性 B.一致性C.可理解性D.合理性 2.对建立良好的程序设计风格,下面的描述正确的是( A程序应简单、清晰、可读性好 B.符号名的命名只要符合语法 C.充分考虑程序的执行效率 D.程序的注释可有可无 3.在设计程序时.应采纳的原则之一是( A.不限制G0T0语句的使用 B,减少或取消注解行 C程域短城好 D.程序结构应有助于读者理解 4.结构化程序设计主要强调的是( A程序的规模 B.程序的易读性 C.程序的执行效率D.程序的可移植性 5.下列叙述中,不属于结构化程序设计方法的主要原则的是( A自顶向下B.由底向上C模块化D限制使用GOTO语句 6.以下不屈于对象的基本特占的是 A分类性 B.多态性 C.继承性 D.封装性 7.下面关于对象的描述错误的是( A任何对象都必须有继承性B.对象是属性和方法的封装体 C对象间的通迅靠消总传递D.操作是对象的动态属性 8、在下列概念中,不属于面向对象方法的是( )。 A对B继承 D.过程调用 9、在面向对象方法中 一个对象请求另一对象为其服务的方式是通过发送( A调用语句 B.命令 C.口令 D.消总 10、面向对象的设计方法与传统的的面向过程的方法有本质不同,它的基本原理是( A、模拟现实世界中不同事物之间的联系 强调模拟现实世界中的算法而不强调概念 c 使用现实世 抽象地 考问题从而自然地解决问是 、鼓励开发者在软件开发的绝大部分中都用实际领域的概念去思考 二、填空题 1、结构化程序设计的3种结构是
34 2.4 本章小结 学习完本章之后要掌握以下内容: 1. 程序设计方法与风格。 2. 结构化程序设计。 3. 面向对象的程序设计方法,对象,方法,属性及继承与多态性。 习 题 2 一、选择题 1.在结构化程序设计思想提出之前,在程序设计中曾强调程序的效率。与程序的效率相比, 人们更重视程序的( )。 A.安全性 B.一致性 C.可理解性 D.合理性 2.对建立良好的程序设计风格,下面的描述正确的是( )。 A.程序应简单、清晰、可读性好 B.符号名的命名只要符合语法 C.充分考虑程序的执行效率 D.程序的注释可有可无 3. 在设计程序时.应采纳的原则之一是( )。 A.不限制 GOTO 语句的使用 B.减少或取消注解行 C.程序越短越好 D.程序结构应有助于读者理解 4.结构化程序设计主要强调的是( )。 A.程序的规模 B.程序的易读性 C.程序的执行效率 D.程序的可移植性 5.下列叙述中,不属于结构化程序设计方法的主要原则的是( )。 A.自顶向下 B.由底向上 C.模块化 D.限制使用 GOTO 语句 6.以下不属于对象的基本特点的是( )。 A.分类性 B.多态性 C.继承性 D.封装性 7.下面关于对象的描述错误的是( )。 A.任何对象都必须有继承性 B.对象是属性和方法的封装体 C.对象间的通迅靠消息传递 D.操作是对象的动态属性 8、在下列概念中,不属于面向对象方法的是( )。 A.对象 B.继承 C.类 D.过程调用 9、在面向对象方法中,一个对象请求另一对象为其服务的方式是通过发送 ( )。 A. 调用语句 B. 命令 C. 口令 D. 消息 10、面向对象的设计方法与传统的的面向过程的方法有本质不同,它的基本原理是( )。 A、模拟现实世界中不同事物之间的联系 B、强调模拟现实世界中的算法而不强调概念 C、使用现实世界的概念抽象地思考问题从而自然地解决问题 D、鼓励开发者在软件开发的绝大部分中都用实际领域的概念去思考 二、填空题 1、结构化程序设计的 3 种结构是 、 、
2、结构化程序设计的主要特点是 3 是一个支持集成的抽象数据类型,而对象是它的实例。 4、对象实现了数据和操作的 对数据和数 据的操作进行 5、在面向对象方法中,类之间共享属性和操作的机制称为 第3章软件工程基础 软件工程(Software Engineering,简称为SE)是一门研究用工程化方法构建和维护有效 的、实用的和高质量的软件的学科。它涉及到程序设计语言,数据库,软件开发工具,系统 平台,标准,设计模式等方面。 在现代社会中,软件应用于多个方面。典型的软件比如有电子邮件,嵌入式系统,人机 界面,办公套件,操作系统,编译器,数据库,游戏等。同时,各个行业几乎都有计算机载 件的应用,比如工业,农业,银行,航空,政府部门等。这些应用促进了经济和社会的发展, 使得人们的工作更加高效,同时提高了生活质量
35 2、结构化程序设计的主要特点是 。 3、 是一个支持集成的抽象数据类型,而对象是它的实例。 4、对象实现了数据和操作的结合,是指对数据和数据的操作进行 。 5、在面向对象方法中,类之间共享属性和操作的机制称为 。 第 3 章 软件工程基础 软件工程(Software Engineering,简称为 SE)是一门研究用工程化方法构建和维护有效 的、实用的和高质量的软件的学科。它涉及到程序设计语言,数据库,软件开发工具,系统 平台,标准,设计模式等方面。 在现代社会中,软件应用于多个方面。典型的软件比如有电子邮件,嵌入式系统,人机 界面,办公套件,操作系统,编译器,数据库,游戏等。同时,各个行业几乎都有计算机软 件的应用,比如工业,农业,银行,航空,政府部门等。这些应用促进了经济和社会的发展, 使得人们的工作更加高效,同时提高了生活质量