软件工程第七讲教案 下载本文

教案首页

周次 日期 课时序 课 题 教学目的 要 求 重 点 难 点 教学过程 设 计 及 时间分配 面向对象的分析与设计方法 了解面向对象相关概念;理解面向对象的分析与设计方法 面向对象的分析 面向对象的分析 第七章 面向对象的分析与设计方法(2*45‘) 第一节 面向对象方法的基本概念与特征(45‘) 第二节 面向对象的分析(45‘) 教学场所 或教学方法 作 业 使用 教具 课 后 记 授课教师 1

第七章 面向对象的分析与设计方法

在软件开发与设计中,对一个系统的认识是一个渐进过程,是在继承了以往的有关知识的基础上、多次迭代往复并逐步深化而形成的。在这种认识的深化过程中,既包括了从一般到特殊的演绎,也包括了从特殊到一般的归纳。而目前用于分析、设计和实现一个系统的过程和方法大部分是瀑布型的,即后一步是实现前一步所提出的需求,或者是进一步发展前一步所得出的结果。因此,当越接近系统设计或实现的后期时,对系统设计或实现的前期的结果作修改就越困难。同时也只有在系统设计的后期才能发现在前期所形成的一些差错。而且当这个系统越大、问题越复杂时,由于这种对系统的认识过程和对系统的设计或实现过程不一致所引起的困扰也就越大。

为了解决上述这个问题,就应使分析、设计和实现一个系统的方法尽可能地接近认识一个系统的方法,换言之,就是应使描述问题的问题空间和解决问题的方法空间在结构上尽可能地—致,也就是使分析、设计和实现系统的方法学原理与认识客观世界的过程尽可能地一致。这就是面向对象方法学的出发点和所追求的基本原则。 7.1 面向对象方法的基本概念和特征

面向对象方法已经深入到计算机科学技术的许多领域,由于它所涉及的领域非常广泛,很难确切而清晰地界定它的作用范围、严格而准确地对它进行定义。在 20世纪80年代初期以前人们认为:面向对象是一种新兴的程序设计方法,或者说它是一种新的程序设计范型,其基本思想是使用对象、类、继承、封装、消息等基本概念来进行程序设计。自80年代以来,面向对象方法已深入到计算机软件领域的几乎所有分支,远远超出了程序设计语言和编程技术的范畴。同时,面向对象方法也深入到计算机软件以外的一些领域。因而,说它是一种软件开发方法也不够全面。不过从目前看,面向对象方法最主要的应用范围仍是软件开发,对软件生命周期的各个阶段(包括分析、设计、编程、测试与维护),以及它所涉及的各个领域(如人机界面、数据库、软件复用、形式化方法、CASE工具等等),都已形成或正在形成面向对象的理论与技术体系。 7.1.1 面向对象方法概述

面向对象不仅是一些具体的软件开发技术与策略,而且是一整套关于如何看待软件系统与现实世界的关系,以什么观点来研究问题并进行求解,以及如何进行系统构造的软件方法学。而面向对象方法是一种运用对象、类、继承、封装、聚合、消息传送、多态性等概念来构造系统的软件开发方法。 面向对象方法的基本思想是从现实世界中客观存在的事物出发来构造软件系统,并在系统构造中尽可能运用人类的自然思维方式。开发一个软件是为了解决某些问题,这些问题所涉及的业务范围称作该软件的问题域。面向对象

2

方法强调直接以问题域(现实世界)中的事物为中心来思考问题、认识问题,并根据这些事物的本质特征,把它们抽象地表示为系统中的对象,作为系统的基本构成单位 ,而不是用一些与现实世界中的事物相差较远,并且没有对应关系的其它概念来构造系统。可以使系统直接地映射问题域,保持问题域中事物及其相互关系的本来面貌。另外,软件开发方法应该是与人类在长期进化过程中形成的各种行之有效的思想方法相适应的思想理论体系。但是,在某些历史阶段出现的软件开发方法没有从人类的思想宝库中吸取较多的营养,只是建立在自身独有的概念、符号、规则、策略的基础之上,这说明当时的软件技术尚处于比较幼稚的时期。

结构化方法采用了许多符合人类思维习惯的原则与策略(如自顶向下、逐步求精)。面向对象方法更加强调运用人类在日常的逻辑思维中经常采用的思想方法与原则,例如抽象、分类、继承、聚合、封装等等,这就使得软件开发者能更有效地思考问题,并以其他人也能看得懂的方式把自己的认识表达出来。

( 1)面向对象方法有如下一些主要特点:

·从问题域中客观存在的事物出发来构造软件系统,用对象作为对这些事物的抽象表示,并以此作为系统的基本构成单位。

·事物的静态特征(即可以用一些数据来表达的特征)用对象的属性表示,事物的动态特征(即事物的行为)用对象的服务(或操作)表示。 ·对象的属性与服务结合为一个独立的实体,对外屏蔽其内部细节 ,称作封装。

·把具有相同属性和相同服务的对象归为一类,类是这些对象的抽象描述,每个对象是它的类的一个实例。

·通过在不同程度上运用抽象的原则,可以得到较一般的类和较特殊的类。特殊类继承一般类的属性与服务,面向对象方法支持对这种继承关系的描述与实现,从而简化系统的构造过程及其文档。

·复杂的对象可以用简单的对象作为其构成部分 ,称作聚合。 ·对象之间通过消息进行通信,以实现对象之间的动态联系。 ·通过关联表达对象之间的静态关系。

总结以上几点可以看出,在用面向对象方法开发的系统中,以类的形式进行描述并通过对类的引用而创建的对象是系统的基本构成单位。这些对象对应着问题域中的各个事物,它们属性与服务刻画了事物的静态特征和动态特征。对象类之间的继承关系、聚合关系、消息和关联如实地表达了问题域中事物之间实际存在的各种关系。因此,无论是系统的构成成分,还是通过这些成分之间的关系而体现的系统结构,都可直接地映射成问题域。 ( 2)对于面向对象的定义如下:

3

?一种使用对象(它将属性与操作封装为一体)、消息传送、类、继承、多态和动态绑定来开发问题域模型之解的范型。 ?一种基于对象、类、实例和继承等概念的技术。 ?用对象作为建模的原子。

7.1.2 面向对象的软件工程( OOSE ) 1 .采用软件工程学的必要

随着编程语言由低级向高级的发展,它与自然语言之间的鸿沟在逐渐变窄。开发人员从对问题域产生正确的认识,到用一种编程语言把这些认识描述出来所付出的劳动 ,由机器代替人完成的工作则增多,如图7-1所示。

图 7-1计算机语言发展趋势

在图 7-1中,编程语言到计算机之间的深色阴影表示这部分工作是由机器自动完成的,基本不需要开发人员花费精力。自然语言和编程语言中间的空白区域表示语言的鸿沟,它表明从人们借助自然语言对问题域有一个正确认识,到用一种编程语言正确地表达出来,其间所存在的差距。开发人员需要在这区域做大量的工作,并且容易发生错误。而面向对象的语言使这条鸿沟变窄,但仍有一些距离。自然语言与问题域之间的浅色阴影表明:虽然人们借助自然语言来认识和理解问题域属于人类的日常思维活动,不存在语言的鸿沟,但是不能说这一区域已经不存在问题。问题主要表现在:(1)虽然几乎人人都会运用自然语言,但不一定都能正确地认识客观世界,因为需要具有正确的思维方法。(2)在软件开发过程中,要求人们对问题域的理解,比人们日常生活中对它的理解更深刻、更准确,这需要许多以软件专业知识为背景的思维方法。这些问题正是软件工程学所要解决的。

软件开发是对问题域的认识和描述,软件工程学的作用从认识事物方面看,它在分析阶段提供了一些对问题域的分析、认识方法。从描述事物方面看,它在分析和设计阶段提供了一些从问题域逐步过渡到编程语言的描述手段。这如同在语言的鸿沟上铺设了一些平坦的路段。但是在传统的软件工程方法中,并没有完全填平语言之间的鸿沟 ,见图7-2。而在面向对象的软件工程方法中,从面向对象的分析到面向对象的设计,再到面向对象的编程、面向对象的测试都是紧密衔接的,填平了语言之间的鸿沟,如图7-3所示。

4