软件工程九章面向对象方法学_第1页
软件工程九章面向对象方法学_第2页
软件工程九章面向对象方法学_第3页
软件工程九章面向对象方法学_第4页
软件工程九章面向对象方法学_第5页
已阅读5页,还剩90页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、第九章第九章 面向对象方法学面向对象方法学9.1 9.1 面向对象方法学引论面向对象方法学引论31 1 传统方法学的缺点传统方法学的缺点p传统的生命周期方法学的本质,是在具体的传统的生命周期方法学的本质,是在具体的软件开发工作开始之前,通过需求分析预先软件开发工作开始之前,通过需求分析预先定义软件需求,然后一个阶段接着一个阶段定义软件需求,然后一个阶段接着一个阶段有条不紊地开发用户所要求的软件,实现预有条不紊地开发用户所要求的软件,实现预先定义的软件需求。先定义的软件需求。p但它并不能完全消除软件危机。生命周期方但它并不能完全消除软件危机。生命周期方法学仍然有许多不足之处,对某些类型的软法学仍

2、然有许多不足之处,对某些类型的软件开发,这种方法学比较适用,对另一些类件开发,这种方法学比较适用,对另一些类型的软件则可能完全不适用。型的软件则可能完全不适用。4存在的问题存在的问题1 1生产率提高的幅度远不能满足需要生产率提高的幅度远不能满足需要p生命周期方法学强调需求分析的重要性,强调在每生命周期方法学强调需求分析的重要性,强调在每个阶段结束之前必须进行评审,从而提高了软件开个阶段结束之前必须进行评审,从而提高了软件开发的成功率,减少了重大返工的次数;发的成功率,减少了重大返工的次数;p开发过程中实行严格的质量管理,采用先进的技术开发过程中实行严格的质量管理,采用先进的技术方法(主要是结构

3、分析、设计、编程技术)和软件方法(主要是结构分析、设计、编程技术)和软件工具,也都加快了软件开发的速度。工具,也都加快了软件开发的速度。p但开发效率的提高仍然很有限,提高的幅度远远赶但开发效率的提高仍然很有限,提高的幅度远远赶不上对软件产品的需要。不上对软件产品的需要。p从用户提出要求到他们最终得到所需要的目标系统,从用户提出要求到他们最终得到所需要的目标系统,往往需要经过几年甚至更长的延迟时间。往往需要经过几年甚至更长的延迟时间。5 2 2软件重用程度很低软件重用程度很低p重用也称为再用或复用,是指同一事物不经修改或重用也称为再用或复用,是指同一事物不经修改或稍加改动就多次重复使用。稍加改动

4、就多次重复使用。p软件重用是节约人力,提高软件生产率的重要途径。软件重用是节约人力,提高软件生产率的重要途径。p结构分析、结构设计和结构程序设计(简写为结构分析、结构设计和结构程序设计(简写为 sasasdsdspsp)技术,虽然给软件产业带来了巨大进步,)技术,虽然给软件产业带来了巨大进步,但却没能很好地解决软件但却没能很好地解决软件 重用问题。重用问题。p几乎每次开发一个新的软件系统时,都要针对这个几乎每次开发一个新的软件系统时,都要针对这个具体的系统作大量重复而又繁琐的工作。具体的系统作大量重复而又繁琐的工作。6 3. 3.软件仍然很难维护软件仍然很难维护p传统的生命周期方法学强调文档资

5、料的重要性,规传统的生命周期方法学强调文档资料的重要性,规定最终的软件产品应该由完整、致的配置成分组定最终的软件产品应该由完整、致的配置成分组成;在软件开发整个过程中,始终强调软件的可读成;在软件开发整个过程中,始终强调软件的可读性、可修改性和可测试性是软件的重要质量指标。性、可修改性和可测试性是软件的重要质量指标。因此,对这样的软件所进行的维护属于结构化维护因此,对这样的软件所进行的维护属于结构化维护的范畴,可维护性有比较明显的提高,软件从不能的范畴,可维护性有比较明显的提高,软件从不能维护变成基本上可以维护。维护变成基本上可以维护。p但实践表明,即使是用生命周期方法学开发出的软但实践表明,

6、即使是用生命周期方法学开发出的软件,维护起来仍然相当困难,软件维护成本仍然很件,维护起来仍然相当困难,软件维护成本仍然很高。高。7 4 4软件往往不能真正满足用户需要软件往往不能真正满足用户需要p用传统方法开发涉及多种不同领域知识的大型软件用传统方法开发涉及多种不同领域知识的大型软件系统,或开发需求模糊或需求动态变化的系统时,系统,或开发需求模糊或需求动态变化的系统时,所开发出的软件系统往往不能真正满足用户的需要。所开发出的软件系统往往不能真正满足用户的需要。p 所谓所谓“不能真正满足用户的需要不能真正满足用户的需要”,主要有以下两,主要有以下两种表现:种表现:一种是开发人员不能完全获一种是开

7、发人员不能完全获 得或不能彻底理解用得或不能彻底理解用户的需求,以致开发出的软件系统与用户预期的系户的需求,以致开发出的软件系统与用户预期的系统不一致,不能满足用户的需要。统不一致,不能满足用户的需要。另一种表现是,所开发出的系统不能适应用户需求另一种表现是,所开发出的系统不能适应用户需求经常变化的情况,系统的稳定性和可扩充性不能满经常变化的情况,系统的稳定性和可扩充性不能满足要求。足要求。8出现问题的原因出现问题的原因1 1僵化的设计模型僵化的设计模型p瀑布模型意味着在生命周期各阶段间存在着严格的瀑布模型意味着在生命周期各阶段间存在着严格的顺序性和依赖性。生命周期方法学特别强调预先定顺序性和

8、依赖性。生命周期方法学特别强调预先定义需求的重要性。义需求的重要性。p要求在着手进行具体的开发工作之前,必须通过需要求在着手进行具体的开发工作之前,必须通过需求分析预先定义并求分析预先定义并“冻结冻结”软件需求,然后再一步软件需求,然后再一步一步地实现这些需求。一步地实现这些需求。9p实践表明,在系统建立起来之前,往往很难仅仅实践表明,在系统建立起来之前,往往很难仅仅依靠分析就确定出一套完整、准确、一致、有效依靠分析就确定出一套完整、准确、一致、有效的应用需求,这种预先定义需求的方法更不能适的应用需求,这种预先定义需求的方法更不能适应用户需求不断变化的情况:应用户需求不断变化的情况:预先定义需

9、求的策略所作的假设,只对某些预先定义需求的策略所作的假设,只对某些软件成立,对于多数软件并不成立。人们为了软件成立,对于多数软件并不成立。人们为了充实和细化他们的初步设想,通常需要经过在充实和细化他们的初步设想,通常需要经过在某个能运行的系统上的实践过程。某个能运行的系统上的实践过程。项目参与者之间存在通信鸿沟项目参与者之间存在通信鸿沟良好的通信和相互理解对于保证工程成功是至良好的通信和相互理解对于保证工程成功是至关重要的。关重要的。各种文档,本质上是被动、静止的通信工具,各种文档,本质上是被动、静止的通信工具,通过它们来理解一个动态系统是困难的。通过它们来理解一个动态系统是困难的。10预先定

10、义的需求可能是过时的预先定义的需求可能是过时的一些类型的软件,用户对它们的需求与外部环境、一些类型的软件,用户对它们的需求与外部环境、公司经营策略或经营内容等密切相关,因此是随时公司经营策略或经营内容等密切相关,因此是随时间变化的,在不同时间用户的需求可能有较大不同。间变化的,在不同时间用户的需求可能有较大不同。采用预先定义需求的策略,在一年或数年之前预先采用预先定义需求的策略,在一年或数年之前预先指定对需求随时间变化的软件的需求,显然是不切指定对需求随时间变化的软件的需求,显然是不切实际的。实际的。按照这样预先指定的需求开发软件,当软件开发出按照这样预先指定的需求开发软件,当软件开发出来的时

11、候就已经过时了,不符合那时的用户需要了。来的时候就已经过时了,不符合那时的用户需要了。然而按照生命周期方法学,在开发后期修改需求需然而按照生命周期方法学,在开发后期修改需求需付出很高代价,甚至根本不可能修改。付出很高代价,甚至根本不可能修改。112 2结构化技术的缺点结构化技术的缺点用这种技术开发出的软件,其稳定性、可修改性和用这种技术开发出的软件,其稳定性、可修改性和可重用性都比较差。可重用性都比较差。围绕实现处理功能的围绕实现处理功能的“过程过程”来构造系统的。然来构造系统的。然而用户需求的变化大部分是针对功能的而用户需求的变化大部分是针对功能的不稳不稳定性定性清楚地定义了目标系统的边界,

12、软件通过界面与清楚地定义了目标系统的边界,软件通过界面与客观世界通信。系统结构依赖于对系统边界的定客观世界通信。系统结构依赖于对系统边界的定义,很难把这样的系统扩展到新的边界义,很难把这样的系统扩展到新的边界系统系统较难修改和扩充较难修改和扩充把处理分解成子处理的过程多少带些任意性,并把处理分解成子处理的过程多少带些任意性,并且把数据和操作作为分离的实体且把数据和操作作为分离的实体可重用性差可重用性差122 2 软件工程的新途径软件工程的新途径 快速原型法快速原型法克服传统方法学的致命弱点克服传统方法学的致命弱点所开发出的系统往往所开发出的系统往往不能真正满足用户的需要不能真正满足用户的需要1

13、 1区分两类不同的软件系统区分两类不同的软件系统一类系统的需求比较稳定而且能够预先指定一类系统的需求比较稳定而且能够预先指定预预先指定的系统。开发这类系统应该预先进行严格的先指定的系统。开发这类系统应该预先进行严格的形式化的需求分析,制定出很精确的需求规格说明,形式化的需求分析,制定出很精确的需求规格说明,并在严格管理下采用形式化的开发生命周期。并在严格管理下采用形式化的开发生命周期。13另一类系统的需求是模糊的或随时间变化的,通常另一类系统的需求是模糊的或随时间变化的,通常在系统安装运行之后,还会由用户驱动对需求进行在系统安装运行之后,还会由用户驱动对需求进行动态修改动态修改用户驱动的系统。

14、用户驱动的系统。开发这类系统需要采用一种适于进行反复试探的技开发这类系统需要采用一种适于进行反复试探的技术。这类系统必须具有能够快速、简便地进行调整术。这类系统必须具有能够快速、简便地进行调整的特性,以便在运行使用的过程中,及时根据用户的特性,以便在运行使用的过程中,及时根据用户需求的变化相应地修改系统。需求的变化相应地修改系统。142 2快速原型法简介快速原型法简介p快速原型法(原型法):从常规的程序设计方法和快速原型法(原型法):从常规的程序设计方法和僵化的瀑布模型开发(传统的自顶向下的开发)模僵化的瀑布模型开发(传统的自顶向下的开发)模式,飞跃到一种快速、灵活、交互式的软件开发。式,飞跃

15、到一种快速、灵活、交互式的软件开发。p其核心是,用交互的、快速建立起来的原型取代了其核心是,用交互的、快速建立起来的原型取代了形式的、僵硬的(不允许更改的)大部头的规格说形式的、僵硬的(不允许更改的)大部头的规格说明,用户通过在计算机上实际运行和试用原型系统明,用户通过在计算机上实际运行和试用原型系统而向开发者提供真实的反馈意见。而向开发者提供真实的反馈意见。15原型法的基本思想:原型法的基本思想:p首先建立一个能反映用户主要需求的原型系统,让首先建立一个能反映用户主要需求的原型系统,让用户在计算机上运行、试用这个原型系统,通过实用户在计算机上运行、试用这个原型系统,通过实践,了解未来系统的概

16、貌,提出许多修改意见,根践,了解未来系统的概貌,提出许多修改意见,根据这些意见,快速修改原型系统,然后用户再次试据这些意见,快速修改原型系统,然后用户再次试用修改后的原型系统用修改后的原型系统p用户在试用原型系统的过程中,很容易判断它是否用户在试用原型系统的过程中,很容易判断它是否真正满足自己的业务工作需要。真正满足自己的业务工作需要。p软件开发人员首先向用户提供一个软件开发人员首先向用户提供一个“样品样品”(即原(即原型系统),用户经过试用向开发人员作出型系统),用户经过试用向开发人员作出“反馈反馈”。通过通过“试用一反馈一修改试用一反馈一修改”的多次反复,最终开发的多次反复,最终开发出真正

17、符合用户需要的应用系统,这就是用原型法出真正符合用户需要的应用系统,这就是用原型法开发软件的优点。开发软件的优点。163 3用原型法开发软件的过程用原型法开发软件的过程(1 1)抛弃原型法)抛弃原型法目的:是评价目标系统的某个(或某些)特性,目的:是评价目标系统的某个(或某些)特性,以便更准确地确定需求,或者更严格地验证设以便更准确地确定需求,或者更严格地验证设计方案。计方案。使用完之后就把这种原型系统抛弃掉,然后再重使用完之后就把这种原型系统抛弃掉,然后再重新建立正式的目标系统。新建立正式的目标系统。本质上仍属于瀑布模型,建立原型只不过是一种本质上仍属于瀑布模型,建立原型只不过是一种辅助性的

18、步骤。辅助性的步骤。17(2 2)演化原型法(高度迭代的动态方法)演化原型法(高度迭代的动态方法)p在每次迭代过程中,都要再次分析和确定需求,再在每次迭代过程中,都要再次分析和确定需求,再次进行设计,再次实现系统,以及再次进行测试和次进行设计,再次实现系统,以及再次进行测试和评价。评价。p基本作法:分析用户需求基本作法:分析用户需求实现原型系统实现原型系统用户试用意见用户试用意见对原型进行修改和扩充对原型进行修改和扩充用户试用用户试用18面向对象方法学面向对象方法学面向对象方法面向对象方法简介简介p出发点和基本原则:尽可能模拟人类习惯的思维方出发点和基本原则:尽可能模拟人类习惯的思维方式,使开

19、发软件的方法与过程尽可能接近人类认识式,使开发软件的方法与过程尽可能接近人类认识世界解决问题的方法与过程,也就是使描述问题的世界解决问题的方法与过程,也就是使描述问题的问题空间(也称为问题域)与实现解法的解空间问题空间(也称为问题域)与实现解法的解空间(也称为求解域)在结构上尽可能一致。(也称为求解域)在结构上尽可能一致。19p面向对象方法的四个要点:面向对象方法的四个要点: 认为客观世界是由各种对象组成的,任何事物认为客观世界是由各种对象组成的,任何事物都是对象,复杂的对象可以由比较简单的对象以都是对象,复杂的对象可以由比较简单的对象以某种方式组合而成。某种方式组合而成。面向对象的软件系统是

20、由对象组成的,软件中的面向对象的软件系统是由对象组成的,软件中的任何元素都是对象,复杂的软件对象由比较简单的任何元素都是对象,复杂的软件对象由比较简单的对象组合而成。对象组合而成。20把所有对象都划分成各种对象类(简称为类,把所有对象都划分成各种对象类(简称为类, classclass),每个对象类都定义了一组数据和一组方法。),每个对象类都定义了一组数据和一组方法。数据用于表示对象的静态属性,是对象的状态信息。数据用于表示对象的静态属性,是对象的状态信息。类中定义的方法,是允许施加于该类对象上的操作,类中定义的方法,是允许施加于该类对象上的操作,是该类所有对象共享的,并不需要为每个对象都复是

21、该类所有对象共享的,并不需要为每个对象都复制操作的代码。制操作的代码。21按照子类(或称为派生类)与父类(或称为基类)按照子类(或称为派生类)与父类(或称为基类)的关系,把若干个对象类组成一个层次结构的系统的关系,把若干个对象类组成一个层次结构的系统(也称为类等级)。(也称为类等级)。在这种层次结构中,通常下层的派生类具有和上层在这种层次结构中,通常下层的派生类具有和上层的基类相同的特性(包括数据和方法),这种现象的基类相同的特性(包括数据和方法),这种现象称为继承。称为继承。但是,如果在派生类中对某些特性又做了重新描述,但是,如果在派生类中对某些特性又做了重新描述,则在派生类中的这些特性将以

22、新描述为准,也就是则在派生类中的这些特性将以新描述为准,也就是说,低层的特性将屏蔽高层的同名特性。说,低层的特性将屏蔽高层的同名特性。22对象彼此之间仅能通过传递消息互相联系。对象彼此之间仅能通过传递消息互相联系。对象与传统的数据有本质区别,它不是被动地等待对象与传统的数据有本质区别,它不是被动地等待外界对它施加操作,相反,它是进行处理的主体,外界对它施加操作,相反,它是进行处理的主体,必须发消息请求它执行它的某个操作,处理它的私必须发消息请求它执行它的某个操作,处理它的私有数据,而不能从外界直接对它的私有数据进行操有数据,而不能从外界直接对它的私有数据进行操作。作。一切局部于该对象的私有信息

23、,都被封装在该对象一切局部于该对象的私有信息,都被封装在该对象类的定义中,就好像装在一个黑盒子中一样,在外类的定义中,就好像装在一个黑盒子中一样,在外界是看不见的,更不能直接使用,这就是界是看不见的,更不能直接使用,这就是“封装封装性性”。23 oo = objects classes inheritance communication with messages242 2面向对象方法的主要优点面向对象方法的主要优点(1 1)与人类习惯的思维方法一致)与人类习惯的思维方法一致(2 2)稳定性好)稳定性好(3 3)可重用性好)可重用性好(4 4)可维护性好)可维护性好25两种新途径的结合p两种新

24、途径并不是相互排斥的,相反,它们是相互两种新途径并不是相互排斥的,相反,它们是相互促进相互补充的,很容易把这两种途径结合起来以促进相互补充的,很容易把这两种途径结合起来以获得更好的效果。获得更好的效果。p面向对象方法面向对象方法所带来的稳定性、可重用性和可维护所带来的稳定性、可重用性和可维护性等优点,对于性等优点,对于用快速原型法用快速原型法成功地开发软件来说,成功地开发软件来说,是至关重要的。是至关重要的。26三种软件开发模式的软件特点:三种软件开发模式的软件特点:1 1传统的瀑布模型传统的瀑布模型在开发时期内没有或很少有需求变化;在开发时期内没有或很少有需求变化;对应用领域很熟悉(例如,扩

25、充已存在的系统);对应用领域很熟悉(例如,扩充已存在的系统); 低风险项目(例如,对目标和开发环境很熟悉);低风险项目(例如,对目标和开发环境很熟悉);除了在早期阶段,用户对开发工作参与很少;除了在早期阶段,用户对开发工作参与很少;要求使用面向过程的编程语言。要求使用面向过程的编程语言。272 2螺旋模型螺旋模型在项目开发的早期需求可能有变化;在项目开发的早期需求可能有变化;对应用领域较熟悉;对应用领域较熟悉;中等风险项目(例如,对目标和开发环境较熟悉);中等风险项目(例如,对目标和开发环境较熟悉); 用户不同程度地参与整个项目的开发过程;用户不同程度地参与整个项目的开发过程;使用面向对象语言

26、或第四代语言。使用面向对象语言或第四代语言。283 3渐增模型渐增模型在整个开发过程中采求都可能有变化;在整个开发过程中采求都可能有变化;对应用领域不熟悉;对应用领域不熟悉;高风险项目。高风险项目。 用户完全参与到整个开发过程中;用户完全参与到整个开发过程中;使用面向对象语言或第四代语言。使用面向对象语言或第四代语言。29p结构分析、设计技术本质上是线性的,是建立在软结构分析、设计技术本质上是线性的,是建立在软件生命周期概念的基础之上的,这种技术与瀑布模件生命周期概念的基础之上的,这种技术与瀑布模型紧密地结合在一起。型紧密地结合在一起。p面向对象的软件技术并不是基于某种开发模式的技面向对象的软

27、件技术并不是基于某种开发模式的技术,它既可以用于瀑布模式中也可以用于螺旋模式术,它既可以用于瀑布模式中也可以用于螺旋模式或渐增模式中。或渐增模式中。p使用面向对象方法学开发软件时,可以采用最适用使用面向对象方法学开发软件时,可以采用最适用于所开发软件特点的开发模式。于所开发软件特点的开发模式。30p使用面向对象方法学开发软件时,工作重点是生命使用面向对象方法学开发软件时,工作重点是生命周期中的分析阶段。周期中的分析阶段。p在开发的早期阶段定义了一系列面向问题的对象,在开发的早期阶段定义了一系列面向问题的对象,并且在整个开发过程中不断充实和扩充这些对象。并且在整个开发过程中不断充实和扩充这些对象

28、。p对生命周期各阶段的区分不太重要、不明显。分析对生命周期各阶段的区分不太重要、不明显。分析阶段得到的对象模型也适用于设计阶段和实现阶段。阶段得到的对象模型也适用于设计阶段和实现阶段。p各阶段都使用统一的概念和表示符号,整个开发过各阶段都使用统一的概念和表示符号,整个开发过程都是吻合一致的,程都是吻合一致的,313 3 基本概念基本概念1 1 对象对象p对象是对问题域中某个实体的抽象,设立某个对象对象是对问题域中某个实体的抽象,设立某个对象就反映了软件系统保存有关它的信息并且与它进行就反映了软件系统保存有关它的信息并且与它进行交互的能力。交互的能力。p面向对象方法学中的对象是由描述该对象属性的

29、数面向对象方法学中的对象是由描述该对象属性的数据以及可以对这些数据施加的所有操作封装在一起据以及可以对这些数据施加的所有操作封装在一起构成的统一体。构成的统一体。321 1对象的形象表示对象的形象表示33p实现对象操作的代码和数据是隐藏在对象内部的,实现对象操作的代码和数据是隐藏在对象内部的,一个对象好象是一个黑盒子,表示它内部状态的数一个对象好象是一个黑盒子,表示它内部状态的数据和实现各个操作的代码及局部数据,都被封装在据和实现各个操作的代码及局部数据,都被封装在这个黑盒子内部,在外面是看不见的,更不能从外这个黑盒子内部,在外面是看不见的,更不能从外面去访问或修改这些数据或代码。面去访问或修

30、改这些数据或代码。p使用对象时只需知道它向外界提供的接口形式而无使用对象时只需知道它向外界提供的接口形式而无须知道它的内部实现算法,不仅使得对象的使用变须知道它的内部实现算法,不仅使得对象的使用变得非常简单、方便,而且具有很高的安全性和可靠得非常简单、方便,而且具有很高的安全性和可靠性。性。34 2 2对象的定义对象的定义( (三种定义形式三种定义形式) )(1 1)对象是具有相同状态的一组操作的集合。(面向)对象是具有相同状态的一组操作的集合。(面向对象程序设计的角度)对象程序设计的角度)(2 2)对象是对属性值和操作的封装。(信息模拟的角)对象是对属性值和操作的封装。(信息模拟的角度)度)

31、(3 3)对象:()对象:( idid, msms, dsds, mimi)idid是对象的标识或名字是对象的标识或名字msms是对象中的操作集合是对象中的操作集合 dsds是对象的数据结构是对象的数据结构 m m!是对象受理的消息名集合(即对外接口)!是对象受理的消息名集合(即对外接口)35 3 3对象的特点对象的特点 以数据为中心以数据为中心对象是主动的对象是主动的 实现了数据封装实现了数据封装本质上具有并行性本质上具有并行性模块独立性好模块独立性好362 其他概念1 1类(类(classclass)p“类类”就是对具有相同数据和相同操作的一组相似就是对具有相同数据和相同操作的一组相似对象

32、的定义。对象的定义。p类是对具有相同属性和行为的一个或多个对象的描类是对具有相同属性和行为的一个或多个对象的描述。述。p例如:例如:circlecircle类类372 2实例(实例(instanceinstance)p实例就是由某个特定的类所描述的一个具体的对象。实例就是由某个特定的类所描述的一个具体的对象。p实际上类是建立对象时使用的实际上类是建立对象时使用的“样板样板”,按照这个,按照这个样板所建立的一个个具体的对象,就是类的实际例样板所建立的一个个具体的对象,就是类的实际例子,通常称为实例。子,通常称为实例。38 3 3消息(消息( messagemessage)p 消息是要求某个对象执

33、行在定义它的那个类中所定消息是要求某个对象执行在定义它的那个类中所定义的某个操作的规格说明。义的某个操作的规格说明。p一个消息由三部分组成:一个消息由三部分组成:接收消息的对象;接收消息的对象; 消息选择符(也称为消息名);消息选择符(也称为消息名); 零个或多个变元。零个或多个变元。例如:例如:mycircleshow(green)394 4方法(方法(methodmethod)p方法,就是对象所能执行的操作,也就是类中所定方法,就是对象所能执行的操作,也就是类中所定义的服务。义的服务。p方法描述了对象执行操作的算法,响应消息的方法。方法描述了对象执行操作的算法,响应消息的方法。(在(在 c

34、 c十语言中把方法称为成员函数)十语言中把方法称为成员函数)p例如:例如:circlecircle类中成员函数类中成员函数 showshow(int colorint color)的定义,即这个成员函数的实)的定义,即这个成员函数的实现代码。现代码。40 5 5属性(属性( attributeattribute)p属性,就是类中所定义的数据,它是对客观世界实属性,就是类中所定义的数据,它是对客观世界实体所具有的性质的抽象。类的每个实例都有自己特体所具有的性质的抽象。类的每个实例都有自己特有的属性值。有的属性值。p 在在 c c十语言中把属性称为数据成员十语言中把属性称为数据成员p例如:例如:

35、circlecircle类中定义的代表圆少坐标、半径、颜类中定义的代表圆少坐标、半径、颜色等的数据成员,就是圆的属性。色等的数据成员,就是圆的属性。41 6 6继承(继承(inheritanceinheritance)p继承是指能够直接获得已有的性质和特征,而不必继承是指能够直接获得已有的性质和特征,而不必重复定义它们。重复定义它们。p在面向对象的软件技术中,继承是子类自动地共享在面向对象的软件技术中,继承是子类自动地共享基类中定义的数据和方法的机制。基类中定义的数据和方法的机制。42继承的特性继承的特性p继承具有传递性继承具有传递性p当一个类只允许有一个父类时,也就是说,当类等当一个类只允许

36、有一个父类时,也就是说,当类等级为树形结构时,类的继承是单继承;当允许一个级为树形结构时,类的继承是单继承;当允许一个类有多个父类时,类的继承是多重继承。类有多个父类时,类的继承是多重继承。p继承性使得相似的对象可以共享程序代码和数据结继承性使得相似的对象可以共享程序代码和数据结构,从而大大减少了程序中的冗余信息。构,从而大大减少了程序中的冗余信息。p派生出新的子类的办法,使得对软件的修改变得更派生出新的子类的办法,使得对软件的修改变得更加容易。加容易。437 7多态性(多态性(polymorphismpolymorphism)p多态性是指子类对象可以像父类对象那样使用,同多态性是指子类对象可

37、以像父类对象那样使用,同样的消息既可以发送给父类对象也可以发送给子类样的消息既可以发送给父类对象也可以发送给子类对象。对象。p不同层次中的每个类各自按自己的需要来实现行为。不同层次中的每个类各自按自己的需要来实现行为。当对象接收到发送给它的消息时,根据该对象所属当对象接收到发送给它的消息时,根据该对象所属于的类动态选用在该类中定义的实现算法。于的类动态选用在该类中定义的实现算法。p多态性是通过虚函数来实现的。多态性是通过虚函数来实现的。p显著提高了软件的可重用性和可扩充性。显著提高了软件的可重用性和可扩充性。44 8 8重载(重载(overloadingoverloading)p函数重载是指在

38、同一作用域内的若干个参数特征不函数重载是指在同一作用域内的若干个参数特征不同的函数可以使用相同的函数名字;同的函数可以使用相同的函数名字;p运算符重载是指同一个运算符可以施加于不同类型运算符重载是指同一个运算符可以施加于不同类型的操作数上面。的操作数上面。454 4 面向对象建摸面向对象建摸p模型是为了理解事物而对事物作出的一种抽象,是模型是为了理解事物而对事物作出的一种抽象,是对事物的一种无歧义的书面描述。对事物的一种无歧义的书面描述。p由一组图示符号和组织这些符号的规则组成,利用由一组图示符号和组织这些符号的规则组成,利用它们来定义和描述问题域中的术语和概念。它们来定义和描述问题域中的术语

39、和概念。46建模的必要性建模的必要性p帮助我们思考问题、定义术语、在选择术语时作出帮助我们思考问题、定义术语、在选择术语时作出适当的假设,并且可以帮助我们保持定义和假设的适当的假设,并且可以帮助我们保持定义和假设的一致性。一致性。p建模的目的主要是为了减少系统复杂性。建模的目的主要是为了减少系统复杂性。p模型提供了组织大量信息的一种有效机制。模型提供了组织大量信息的一种有效机制。p由于模型的规范化和系统化,因此比较容易暴露出由于模型的规范化和系统化,因此比较容易暴露出系统分析员对目标系统认识的片面性和不一致性。系统分析员对目标系统认识的片面性和不一致性。p模型经过多次必要的修改,为后续的开发工

40、作奠定模型经过多次必要的修改,为后续的开发工作奠定了坚实基础。了坚实基础。47面向对象方法最基本的原则面向对象方法最基本的原则按照人们习惯的思维方式,用面向对象观点建立按照人们习惯的思维方式,用面向对象观点建立问题域的模型,开发出尽可能自然地表现求解方法问题域的模型,开发出尽可能自然地表现求解方法的软件。的软件。p三种形式的模型三种形式的模型对象模型(描述系统数据结构,最重要、最基本、对象模型(描述系统数据结构,最重要、最基本、最核心)最核心)动态模型(描述系统控制结构)动态模型(描述系统控制结构)功能模型(描述系统功能)功能模型(描述系统功能)485 5 对象模型对象模型p对象模型表示静态的

41、、结构化的系统的对象模型表示静态的、结构化的系统的“数据数据”性性质。质。p它是对模拟客观世界实体的对象以及对象彼此间的它是对模拟客观世界实体的对象以及对象彼此间的关系的映射,描述了系统的静态结构。关系的映射,描述了系统的静态结构。p为建立动态模型和功能模型,提供了实质性的框架。为建立动态模型和功能模型,提供了实质性的框架。p建立对象模型的目标是从客观世界中提炼出对具体建立对象模型的目标是从客观世界中提炼出对具体应用有价值的概念。应用有价值的概念。49p建立对象模型的表示方法包含的符号:建立对象模型的表示方法包含的符号:表示类的符号(应该既能表示属性又能表示服表示类的符号(应该既能表示属性又能

42、表示服务);务); 表示对象(类实例)的符号;表示对象(类实例)的符号; 表示继承关系的符号;表示继承关系的符号; 表示类和(或)对象问其他关系的符号。表示类和(或)对象问其他关系的符号。50表示类-对象的图形符号1.1.类对象类对象: :含义是含义是“一个类及属于该类的对象一个类及属于该类的对象” 类对象 类51 2 2命名命名命名是否恰当对系统的可理解性影响相当大命名是否恰当对系统的可理解性影响相当大应遵守的几条准则:应遵守的几条准则:(1 1)使用标准术语)使用标准术语(2 2)使用具有确切含义的名词)使用具有确切含义的名词(3 3)必要时用名词短语作名字)必要时用名词短语作名字即富于描

43、述性、简洁而且无二义性。即富于描述性、简洁而且无二义性。52表示结构的图形符号表示结构的图形符号p结构表示了问题域中的复杂关系,是对客观世界实结构表示了问题域中的复杂关系,是对客观世界实体相互间关系的抽象。目标系统的任务决定了系统体相互间关系的抽象。目标系统的任务决定了系统的结构。的结构。p类对象间的关系可以概括为归纳关系、组合关系类对象间的关系可以概括为归纳关系、组合关系及关联关系及关联关系。53 1 1归纳关系(归纳关系(“一般一般- -特殊特殊”关系)关系)p反映了一个类与若干个互不相容的子类之间的分反映了一个类与若干个互不相容的子类之间的分类关系。类关系。54 2 2组合关系(组合关系

44、(“整体整体- -部分部分”关系、聚集关系。)关系、聚集关系。)反映了对象之间的构成关系。具有传递性。反映了对象之间的构成关系。具有传递性。55聚集树56 3.3.关联关系关联关系反映对象之间相互依赖、反映对象之间相互依赖、相互作用的关系。相互作用的关系。(1 1)表示符号:用相互依赖、)表示符号:用相互依赖、相互作用的两个对象之间的相互作用的两个对象之间的连线表示连线表示(2 2)阶:是参与关联的对象)阶:是参与关联的对象的个数。阶数用标在连线端的个数。阶数用标在连线端点的单个数字或数值区间表点的单个数字或数值区间表示示57(3 3)链属性:是关联链的性质。)链属性:是关联链的性质。58(4

45、 4)限定)限定一个受限的关联由两个对象及一个限定词组成。可以把限一个受限的关联由两个对象及一个限定词组成。可以把限定词看作是一种特殊的链属性。利用限定词通常能有效地定词看作是一种特殊的链属性。利用限定词通常能有效地减少关联的阶数。减少关联的阶数。59 (5 5)消息连接)消息连接反映了一个对象对另一个对反映了一个对象对另一个对象的处理依赖性。这种关系象的处理依赖性。这种关系表明,一个对象为了完成自表明,一个对象为了完成自己的任务,需要借助于另一己的任务,需要借助于另一个对象提供的服务。个对象提供的服务。60例子 某公司对象模型61案例实践案例实践问题问题1 1 在进行软件设计和选择软件开发工

46、具之在进行软件设计和选择软件开发工具之前,是否进行开发方法学的选择?前,是否进行开发方法学的选择?62p所谓方法学是指组织软件生产过程的一系列方法、所谓方法学是指组织软件生产过程的一系列方法、技术和规范。方法学是软件开发者长年失败和成功技术和规范。方法学是软件开发者长年失败和成功经验的理论性总结,从软件重用的思路来说,方法经验的理论性总结,从软件重用的思路来说,方法学重用的价值远非某些程序组件重用可比。学重用的价值远非某些程序组件重用可比。63p以北京市公路局系统为例以北京市公路局系统为例p首先,在系统调查阶段我们了解到:这个系统要分首先,在系统调查阶段我们了解到:这个系统要分期期 ( (递增

47、式递增式) ) 开发。由于处于机构改革时期,系统开发。由于处于机构改革时期,系统生存期内的用户需求和系统结构变因很多。这表明生存期内的用户需求和系统结构变因很多。这表明目标系统应该具有较强的可维护性,即每期开发成目标系统应该具有较强的可维护性,即每期开发成果应在后续工程中具有较高的可重用率。果应在后续工程中具有较高的可重用率。p其次,一期工程的工作量相当大其次,一期工程的工作量相当大( (最后成果包括最后成果包括 124 124 个模块、个模块、72 72 类报表、类报表、119119个数据库表、个数据库表、439 439 个窗口、个窗口、912 912 个数据窗口个数据窗口) ),而开发者对

48、公路局业务不了解,而开发者对公路局业务不了解,多为经验不足的大学生,理解需求的能力较低。多为经验不足的大学生,理解需求的能力较低。p这表明采用的开发方法学必须能最大限度地减少重这表明采用的开发方法学必须能最大限度地减少重复劳动,实现开发过程中的成果共享和重用;必须复劳动,实现开发过程中的成果共享和重用;必须能支持消除需求理解误差的调整工序,使下游成品能支持消除需求理解误差的调整工序,使下游成品阶段的设计变更比较容易进行。阶段的设计变更比较容易进行。64v参照国外软件开发工作量计算方法,即仅下游参照国外软件开发工作量计算方法,即仅下游120120个模块个模块 ( (含报表含报表) ) 的编码和测

49、试为的编码和测试为4141人月,那么人月,那么公路局系统从上游设计开始近公路局系统从上游设计开始近200200个模块和报表、个模块和报表、100100多个数据库表的开发工作量至少也应在多个数据库表的开发工作量至少也应在120120人月人月以上。以上。v由于采用了面向对象的软件工程方法,尽管开发人由于采用了面向对象的软件工程方法,尽管开发人员大多经验不足,但是第一期工程总工时最终仍控员大多经验不足,但是第一期工程总工时最终仍控制在制在 80 80 人月以内,降低成本人月以内,降低成本1/31/3左右。同时在系统左右。同时在系统可维护性、重用度及其他功能和性能指标上,均超可维护性、重用度及其他功能

50、和性能指标上,均超过了我们以往采用结构化方法开发的系统。过了我们以往采用结构化方法开发的系统。v65v对停留在程序主导级开发的软件开发人员来说,他对停留在程序主导级开发的软件开发人员来说,他们选择们选择 oop oop 的原因也往往是被动的。其实,在程序的原因也往往是被动的。其实,在程序主导开发者的辞典中是找不到主导开发者的辞典中是找不到“方法学方法学”这一词的,这一词的,或者把或者把“方法学方法学”与与“程序算法程序算法”混为一谈。至于混为一谈。至于把把 oop oop 看成是看成是 oose oose 的全部就更不足为怪了。的全部就更不足为怪了。66问题问题2 对象抽象的出发点是现实世界的

51、问题描对象抽象的出发点是现实世界的问题描述,还是可执行的实例对象?述,还是可执行的实例对象?67v 在现实世界早期抽象阶段,面向对象方法与其他方法区别并在现实世界早期抽象阶段,面向对象方法与其他方法区别并不大,都要从现实世界的问题描述出发,即从用户接口、问不大,都要从现实世界的问题描述出发,即从用户接口、问题领域的知识和经验出发,构筑现实世界的问题模型,也就题领域的知识和经验出发,构筑现实世界的问题模型,也就是确定目标系统是是确定目标系统是“做什么的做什么的”。v 面向对象的问题分析模型从面向对象的问题分析模型从3 3个侧面进行描述,即对象模型个侧面进行描述,即对象模型 ( (对象的静态结构对

52、象的静态结构) )、动态模型、动态模型( (对象相互作用的顺序对象相互作用的顺序) )和功能和功能模型模型( (数据变换及功能依存关系数据变换及功能依存关系) )。v 软件工程的抽象原则、层次原则和分割原则同样适用于面向软件工程的抽象原则、层次原则和分割原则同样适用于面向对象方法,即对象抽象与功能抽象原则是一样的,也是从高对象方法,即对象抽象与功能抽象原则是一样的,也是从高级到低级、从逻辑到物理,逐级细分。每一级抽象都重复对级到低级、从逻辑到物理,逐级细分。每一级抽象都重复对象建模象建模 ( (对象识别对象识别)动态建模动态建模( (事件识别事件识别)功能建模功能建模( (操作操作识别识别)

53、)的过程,直到每一个对象实例在物理的过程,直到每一个对象实例在物理( (程序编码程序编码) )上全上全部实现。部实现。68v 对象抽象是从逻辑级还是物理级出发,与开发前是否进对象抽象是从逻辑级还是物理级出发,与开发前是否进行方法学选择一样,也是区分行方法学选择一样,也是区分oose oose 与与 oop oop 的试金石。的试金石。v 由于许多工具或语言由于许多工具或语言( (如如pbpb、c c、motif) motif) 都支持都支持oopoop,使,使一些程序级系统开发人员可以很方便地不经过逻辑抽象就直一些程序级系统开发人员可以很方便地不经过逻辑抽象就直接开发物理对象,在早期阶段意识不

54、到从物理层即实例对象接开发物理对象,在早期阶段意识不到从物理层即实例对象出发进行系统开发的祸患,孰不知正是这种随心所欲的出发进行系统开发的祸患,孰不知正是这种随心所欲的 oop oop 不仅无法发挥面向对象方法应有的优越性,而且还会给开发不仅无法发挥面向对象方法应有的优越性,而且还会给开发后期带来大量返工作业。后期带来大量返工作业。69v 和以往采用结构化方法一样,我们在系统设计阶段也引和以往采用结构化方法一样,我们在系统设计阶段也引入了原型化方法,以便用系统样品即原型与用户对话,求得入了原型化方法,以便用系统样品即原型与用户对话,求得对需求理解的勾通,避免或减少后期返工。对需求理解的勾通,避

55、免或减少后期返工。v 大多大多oopoop工具都为开发原型提供便利,问题在于原型与最终工具都为开发原型提供便利,问题在于原型与最终产品间的关系,即原型是逻辑对象还是物理对象的样品。若产品间的关系,即原型是逻辑对象还是物理对象的样品。若是后者,那就等同于最终产品。是后者,那就等同于最终产品。v 在木已成舟时再让用户评审,若发现问题,要么推倒重来,在木已成舟时再让用户评审,若发现问题,要么推倒重来,要么强迫用户削足适履。事实上,我们为设计评审而基于逻要么强迫用户削足适履。事实上,我们为设计评审而基于逻辑对象开发的原型,相当部分被用户否决。辑对象开发的原型,相当部分被用户否决。v 但由于尚未进行对象

56、实例即物理级开发,而是使用超类对象但由于尚未进行对象实例即物理级开发,而是使用超类对象原型统一模拟对象事件和操作,所以无论是对象模型、动态原型统一模拟对象事件和操作,所以无论是对象模型、动态模型还是功能模型,修改起来都不困难。模型还是功能模型,修改起来都不困难。70问题问题3 设计阶段是否先设计超类,是否在实例设计阶段是否先设计超类,是否在实例对象设计开始之前完成超类对象的实现?对象设计开始之前完成超类对象的实现?71v 面向对象方法开发出的软件具有较强的可重用性,这种重用包括开发项目内部的重用和外部的重用。重用依存于超类设计,没有超类的对象系统好比“把洗衣机当米缸”,不能物尽其用。超类设计的

57、好与不好,首先看其内部重用率的高低,内部重用率高,必然外部重用率也高。v 由于系统开发工期紧、工作量大,而我们的开发队伍年轻,经验和人力都不足,内部重用率高的超类开发无疑是我们的救星。它可以减少重复劳动,易于统一规格,对复杂问题统一攻关、统一解决,便于统一维护。72v 对超类的抽象即实例对象的泛化原则,我们是从下面几个方面考虑的:v (1)寻找大多数实例对象的共同行为。v 例如“打印报表”、“查询静态代码表”、“录入数据库表数据”等。v (2)超类的多态性设计要保证使用超类继承关系可以满足各子类的操作要求。v 例如,继承同一个“数据录入”祖先窗口,可以完成不同结构数据库表的数据录入。v 73v

58、 (3)利于信息的隐蔽性,不会破坏数据的完整性,利于将复杂问题简单化。v 例如,对具有复杂关系、结构及相关存取操作的数据库表集的维护。如果不使用一个泛化类将数据结构及其相关操作封装起来,下层程序员要想操作有关库表就必须对库表设计有深入的了解,并且确保程序算法设计不得破坏数据的相关一致性,这将大大增加程序设计和测试的难度,要求程序员有较丰富的经验。而采用这种泛化类 (公用函数、公用存储过程) 后,程序员所要做的只是发“消息”和取“输出信息”了。v 74v 显然,超类的设计和实现必须在程序员普遍进行实例对象开发之前完成。也就是说,oose 的上游系统设计人员必须文武 (设计与编程) 双全,能够担负

59、起超类对象的程序实现与测试任务,这与结构化方法的上层系统设计人员基本可以不编程有所不同。同时,超类对象在下游开发过程中必须经常吸收特化过程中的反馈(包括来自用户的反馈),进行相应的调整修改。所以oose担任超类对象设计与实现的设计人员很难像结构化方法那样进入编程阶段后就可以稍事轻松,他们往往始终离不开编程现场。v 75v 如果设计阶段不预先设计和开发出超类对象,在同一项目的多数开发者之间没有可以共同继承的祖先对象,甚至在各个开发人员自己的作用范围内都不使用继承关系,那么这不仅不是oose,就连称之为oop都很勉强。76问题问题4 如何处理对象模型面向对象关系数据库如何处理对象模型面向对象关系数

60、据库模式的映射?模式的映射?77v 面向对象的数据库设计方法可以用于各种数据库,如层次型、网络型、关系型,当然也包括面向对象型。oose 中的数据库设计无疑必须采用面向对象的数据库设计方法。v 数据库设计也称数据库模式,基本上由3个层次的模式构成:从特定db应用角度来看待db设计的外部模式;从组织或企业角度出发进行的db设计即概念模式;处理对应特定 dbms 特征与局限性的db设计即内部模式。具体而言,内部模式是数据库的sql定义,逻辑模式是表集合的逻辑定义,外部模式是从特定应用角度看的局部db。外部模式与逻辑模式之间的接口是视图、存储过程或其他驻在服务器端的db处理程序。v 78v 如果在抽

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论