软件工程第九章面向对象方法学

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
一切局部于该对象的私有信息,都被封装在该对象 类的定义中,就好像装在一个黑盒子中一样,在外 界是看不见的,更不能直接使用,这就是“封装性 ”。
2020/5/4
22
OO = Objects + Classes +
Inheritance + Communication with messages
2020/5/4
2020/5/4
30
3 基本概念
1 对象 对象是对问题域中某个实体的抽象,设立某个对象
就反映了软件系统保存有关它的信息并且与它进行 交互的能力。 面向对象方法学中的对象是由描述该对象属性的数 据以及可以对这些数据施加的所有操作封装在一起 构成的统一体。
2020/5/4
31
1.对象的形象表示
2020/5/4
但是,如果在派生类中对某些特性又做了重新描述 ,则在派生类中的这些特性将以新描述为准,也就 是说,低层的特性将屏蔽高层的同名特性。
2020/5/4
21
➢ 对象彼此之间仅能通过传递消息互相联系。
对象与传统的数据有本质区别,它不是被动地等待 外界对它施加操作,相反,它是进行处理的主体, 必须发消息请求它执行它的某个操作,处理它的私 有数据,而不能从外界直接对它的私有数据进行操 作。
2020/5/4
13
2.快速原型法简介
快速原型法(原型法):从常规的程序设计方法和 僵化的瀑布模型开发(传统的自顶向下的开发)模 式,飞跃到一种快速、灵活、交互式的软件开发。
其核心是,用交互的、快速建立起来的原型取代了 形式的、僵硬的(不允许更改的)大部头的规格说 明,用户通过在计算机上实际运行和试用原型系统 而向开发者提供真实的反馈意见。
2020/5/4
1
2020/5/4
2
1 传统方法学的缺点
传统的生命周期方法学的本质,是在具体的 软件开发工作开始之前,通过需求分析预先 定义软件需求,然后一个阶段接着一个阶段 有条不紊地开发用户所要求的软件,实现预 先定义的软件需求。
但它并不能完全消除软件危机。生命周期方 法学仍然有许多不足之处,对某些类型的软 件开发,这种方法学比较适用,对另一些类 型的软件则可能完全不适用。
2020/5/4
10
2.结构化技术的缺点
用这种技术开发出的软件,其稳定性、可修改性和 可重用性都比较差。
➢围绕实现处理功能的“过程”来构造系统的。然 而用户需求的变化大部分是针对功能的——不稳 定性
➢清楚地定义了目标系统的边界,软件通过界面与 客观世界通信。系统结构依赖于对系统边界的定 义,很难把这样的系统扩展到新的边界——系统 较难修改和扩充
2020/5/4
29
使用面向对象方法学开发软件时,工作重点是生命 周期中的分析阶段。
在开发的早期阶段定义了一系列面向问题的对象, 并且在整个开发过程中不断充实和扩充这些对象。
对生命周期各阶段的区分不太重要、不明显。分析 阶段得到的对象模型也适用于设计阶段和实现阶段 。
各阶段都使用统一的概念和表示符号,整个开发过 程都是吻合一致的,
➢ 认为客观世界是由各种对象组成的,任何事物都 是对象,复杂的对象可以由比较简单的对象以某 种方式组合而成。
面向对象的软件系统是由对象组成的,软件中的 任何元素都是对象,复杂的软件对象由比较简单的 对象组合而成。
2020/5/4
19
➢ 把所有对象都划分成各种对象类(简称为类, Class),每个对象类都定义了一组数据和一组方法 。数据用于表示对象的静态属性,是对象的状态信 息。
使用完之后就把这种原型系统抛弃掉,然后再重 新建立正式的目标系统。
本质上仍属于瀑布模型,建立原型只不过是一种 辅助性的步骤。
2020/5/4
16
(2)演化原型法(高度迭代的动态方法)
在每次迭代过程中,都要再次分析和确定需求,再 次进行设计,再次实现系统,以及再次进行测试和 评价。
基本作法:分析用户需求——〉实现原型系统—— 〉用户试用意见——〉对原型进行修改和扩充—— 〉用户试用……
2020/5/4
14
原型法的基本思想:
首先建立一个能反映用户主要需求的原型系统,让 用户在计算机上运行、试用这个原型系统,通过实 践,了解未来系统的概貌,提出许多修改意见,根 据这些意见,快速修改原型系统,然后用户再次试 用修改后的原型系统…
用户在试用原型系统的过程中,很容易判断它是否 真正满足自己的业务工作需要。
但实践表明,即使是用生命周期方法学开发出的软 件,维护起来仍然相当困难,软件维护成本仍然很 高。
2020/5/4
6
4.软件往往不能真正满足用户需要 用传统方法开发涉及多种不同领域知识的大型软件
系统,或开发需求模糊或需求动态变化的系统时, 所开发出的软件系统往往不能真正满足用户的需要 。 所谓“不能真正满足用户的需要”,主要有以下两 种表现: ➢ 一种是开发人员不能完全获 得或不能彻底理解用 户的需求,以致开发出的软件系统与用户预期的系 统不一致,不能满足用户的需要。 ➢ 另一种表现是,所开发出的系统不能适应用户需求 经常变化的情况,系统的稳定性和可扩充性不能满 足要求。
➢预先定义需求的策略所作的假设,只对某些 软件成立,对于多数软件并不成立。人们为了 充实和细化他们的初步设想,通常需要经过在 某个能运行的系统上的实践过程。
➢项目参与者之间存在通信鸿沟
良好的通信和相互理解对于保证工程成功是至 关重要的。
➢各种文档,本质上是被动、静止的通信工具 2020/5/4 ,通过它们来理解一个动态系统是困难的。 9
2020/5/4
4
2.软件重用程度很低
重用也称为再用或复用,是指同一事物不经修改或 稍加改动就多次重复使用。
软件重用是节约人力,提高软件生产率的重要途径 。
结构分析、结构设计和结构程序设计(简写为 SA- SD-SP)技术,虽然给软件产业带来了巨大进步, 但却没能很好地解决软件 重用问题。
几乎每次开发一个新的软件系统时,都要针对这个 具体的系统作大量重复而又繁琐的工作。
➢ 预先定义的需求可能是过时的
一些类型的软件,用户对它们的需求与外部环境、 公司经营策略或经营内容等密切相关,因此是随时 间变化的,在不同时间用户的需求可能有较大不同 。采用预先定义需求的策略,在一年或数年之前预 先指定对需求随时间变化的软件的需求,显然是不 切实际的。
按照这样预先指定的需求开发软件,当软件开发出 来的时候就已经过时了,不符合那时的用户需要了 。然而按照生命周期方法学,在开发后期修改需求 需付出很高代价,甚至根本不可能修改。
2020/5/4
12
➢ 另一类系统的需求是模糊的或随时间变化的,通常 在系统安装运行之后,还会由用户驱动对需求进行 动态修改——用户驱动的系统。
开发这类系统需要采用一种适于进行反复试探的技 术。这类系统必须具有能够快速、简便地进行调整 的特性,以便在运行使用的过程中,及时根据用户 需求的变化相应地修改系统。
2020/5/4
2020/5/4
7
出现问题的原因
1.僵化的设计模型 瀑布模型意味着在生命周期各阶段间存在着严格的
顺序性和依赖性。生命周期方法学特别强调预先定 义需求的重要性。 要求在着手进行具体的开发工作之前,必须通过需 求分析预先定义并“冻结”软件需求,然后再一步 一步地实现这些需求。
2020/5/4
8
实践表明,在系统建立起来之前,往往很难仅仅 依靠分析就确定出一套完整、准确、一致、有效 的应用需求,这种预先定义需求的方法更不能适 应用户需求不断变化的情况:
2.螺旋模型 ·在项目开发的早期需求可能有变化; ·对应用领域较熟悉; 中等风险项目(例如,对目标和开发环境较熟悉) ; ·用户不同程度地参与整个项目的开发过程; ·使用面向对象语言或第四代语言。
2020/5/4
27
3.渐增模型 ·在整个开发过程中采求都可能有变化; ·对应用领域不熟悉; .高风险项目。 ·用户完全参与到整个开发过程中; ·使用面向对象语言或第四代语言。
2020/5/4
ຫໍສະໝຸດ Baidu28
结构分析、设计技术本质上是线性的,是建立在软 件生命周期概念的基础之上的,这种技术与瀑布模 型紧密地结合在一起。
面向对象的软件技术并不是基于某种开发模式的技 术,它既可以用于瀑布模式中也可以用于螺旋模式 或渐增模式中。
使用面向对象方法学开发软件时,可以采用最适用 于所开发软件特点的开发模式。
软件开发人员首先向用户提供一个“样品”(即原 型系统),用户经过试用向开发人员作出“反馈” 。通过“试用一反馈一修改”的多次反复,最终开 发出真正符合用户需要的应用系统,这就是用原型 法开发软件的优点。
2020/5/4
15
3.用原型法开发软件的过程
(1)抛弃原型法
目的:是评价目标系统的某个(或某些)特性, 以便更准确地确定需求,或者更严格地验证设 计方案。
➢把处理分解成子处理的过程多少带些任意性,并
且把数据和操作作为分离的实体——可重用性差
2020/5/4
11
2 软件工程的新途径
快速原型法 克服传统方法学的致命弱点——所开发出的系统往往
不能真正满足用户的需要 1.区分两类不同的软件系统 ➢ 一类系统的需求比较稳定而且能够预先指定——预
先指定的系统。开发这类系统应该预先进行严格的 形式化的需求分析,制定出很精确的需求规格说明 ,并在严格管理下采用形式化的开发生命周期。
类中定义的方法,是允许施加于该类对象上的操作 ,是该类所有对象共享的,并不需要为每个对象都 复制操作的代码。
2020/5/4
20
➢ 按照子类(或称为派生类)与父类(或称为基类) 的关系,把若干个对象类组成一个层次结构的系统 (也称为类等级)。
在这种层次结构中,通常下层的派生类具有和上层 的基类相同的特性(包括数据和方法),这种现象 称为继承。
2020/5/4
5
3.软件仍然很难维护
传统的生命周期方法学强调文档资料的重要性,规 定最终的软件产品应该由完整、-致的配置成分组 成;在软件开发整个过程中,始终强调软件的可读 性、可修改性和可测试性是软件的重要质量指标。 因此,对这样的软件所进行的维护属于结构化维护 的范畴,可维护性有比较明显的提高,软件从不能 维护变成基本上可以维护。
2020/5/4
3
存在的问题
1.生产率提高的幅度远不能满足需要 生命周期方法学强调需求分析的重要性,强调在每
个阶段结束之前必须进行评审,从而提高了软件开 发的成功率,减少了重大返工的次数; 开发过程中实行严格的质量管理,采用先进的技术 方法(主要是结构分析、设计、编程技术)和软件 工具,也都加快了软件开发的速度。 但开发效率的提高仍然很有限,提高的幅度远远赶 不上对软件产品的需要。 从用户提出要求到他们最终得到所需要的目标系统 ,往往需要经过几年甚至更长的延迟时间。
2020/5/4
17
面向对象方法学
面向对象方法简介 出发点和基本原则:尽可能模拟人类习惯的思维方
式,使开发软件的方法与过程尽可能接近人类认识 世界解决问题的方法与过程,也就是使描述问题的 问题空间(也称为问题域)与实现解法的解空间( 也称为求解域)在结构上尽可能一致。
2020/5/4
18
面向对象方法的四个要点:
32
实现对象操作的代码和数据是隐藏在对象内部的, 一个对象好象是一个黑盒子,表示它内部状态的数 据和实现各个操作的代码及局部数据,都被封装在 这个黑盒子内部,在外面是看不见的,更不能从外 面去访问或修改这些数据或代码。
使用对象时只需知道它向外界提供的接口形式而无 须知道它的内部实现算法,不仅使得对象的使用变 得非常简单、方便,而且具有很高的安全性和可靠 性。
2020/5/4
25
三种软件开发模式的软件特点:
1.传统的瀑布模型 ·在开发时期内没有或很少有需求变化; ·对应用领域很熟悉(例如,扩充已存在的系统) ; ·低风险项目(例如,对目标和开发环境很熟悉) ; ·除了在早期阶段,用户对开发工作参与很少; ·要求使用面向过程的编程语言。
2020/5/4
26
23
2.面向对象方法的主要优点 (1)与人类习惯的思维方法一致 (2)稳定性好 (3)可重用性好 (4)可维护性好
2020/5/4
24
两种新途径的结合
两种新途径并不是相互排斥的,相反,它们是相互 促进相互补充的,很容易把这两种途径结合起来以 获得更好的效果。
面向对象方法所带来的稳定性、可重用性和可维护 性等优点,对于用快速原型法成功地开发软件来说 ,是至关重要的。
相关文档
最新文档