第七章 面向对象方法学-导论
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
• 实现原型法有两种途径: • 抛弃原型法 建立这种原型系统的目的是评价目标系统的 某个(或某些)特性,以便更准确地确定需求,或者更严 格地验证设计方案。原型使用后就被抛弃掉,开发人员可 根据已经确定的用户需求重新构造目标系统。这种途径本 质上仍属于瀑布模型,建立原型只不过是为了确定用户需 求的一个步骤。 • 演化原型法 演化原型法是高度迭代的动态方法。在每次 迭代过程中,都要再次分析和确定需求,再次进行设计, 再次实现系统,以及再次进行测试和评价,直到用户感到 完全满意为止。。因此,早期所犯的错误其后果并不严重。 此外,系统的初始版本很早就交付用户试用。
• 用下列等式识别面向对象方法:
面向对象 = 对象(Object) 十 分类(Classification) 十 继承(inheritance) 十 通过消息的通信(Communication with messages)
• 可以说,采用这四个概念开发的软件系统 是面向对象的。
面向对象的软件过程
–例如,书是一个对象,它的属性可以有书名、 作者、出版社、出版年份、定价等属性,其中 书名、出版年份、定价是数据,作者和出版社 可以是对象,他们还可以有自己的属性
• 每个对象都有它自己的属性值,表示该对
象的状态。对象中的属性只能通过该对象
所提供的操作来存取或修改。
• 操作也称为方法或服务,它规定了对象的
• 用户需求可能是模糊的; • 项目参与者之间存在通信鸿沟(领域专家不懂计算 机技术,系统分析员不熟悉领域知识,他们之间很 难通信,而文档只是一种静态的通信工具,不能反 映动态的变化要求); • 用户需求是变化发展的(开发周期长,开发初期的 需求在开发结束时已有很大的改变,甚至是互相矛 盾);
• 2.结构化技术有其自身固定的缺点
第七章 面向对象方法学导论
• 思考题 • 软件开发中为什么要使用面向对象方法? • 面向对象分析方法与结构化分析方法有哪些相 似之处?有何区别? • 面向对象方法是对过去的一个完全突破,还是 “换汤不换药”?
• 本章的内容提纲:
– 简要介绍面向对象方法学 – 着重讲述面向对象的基本概念 – 介绍用面向对象方法学开发软件的过程中,建 立的三种模型-对象模型、动态模型、概念模 型
void ComupteDataDlg::OnBnClickedSjsjjs() { // TODO: Add your control notification handler code here CCaculate caculate; 一个 实例 。。。。。。。。 m_Ck=atof(strCk);//atof把字符串转换成浮点数 m_cpj=atof(strcpj); 对象的一个属性 caculate.m_Ck = m_Ck; caculate.m_cpj=m_cpj; CSjsjjsReadListIter iterRead = m_readList.begin(); if (m_readList.size() > 0) { CSjsjjsStructure* Temp =new CSjsjjsStructure(0,0,0,0,0,0,0,0,0,0,0,0,0); CSjsjjsStructure* Next; 。。。。。。。。。。。。。。 } }
面向对象方法学
• 面向对象方法学的出发点和基本原则是:尽
可能模拟人类习惯的思维方式,使开发软件的方 法与过程尽可能接近人类认识世界解决问题的方 法与过程,也就是使描述问题的问题空间(也称 为问题域)与实现解法的解空间(也称为求解域) 在结构上尽可能一致。
• 面向对象方法具有以下4个要点:
要点1.认为客观世界是由各种对象组成的,任何
–面向对象方法基于构造问题领域的对象模型, 以对象为中心构造系统。用对象模拟问题领域 的实体,以对象间的联系刻画实体间的联系。 需求改变时,不会引起软件结构的整体变化。
• 优点3.可重用性好
–面向对象方法学中的继承机制使得子类不仅可 以重用父类的数据和方法,也可以在父类代码 的基础上方便的修改和扩充。
–不稳定的:
围绕实现处理功能的“过程”来构造系统 用户的需求变化大部分是针对功能的
用户需求的变化往往造成系统结构的较大变化
–难修改和扩充:
清楚地定义了目标系统的边界 用结构分析、设计技术开发出的系统结构依赖于对 系统边界的定义 很难把这样的系统扩展到新的边界
–可重用性较差:
不同的开发人员开发相同的系统时,可能经分解而 得出不同的软件结构 把数据和操作作为分离的实体
行开发。
•快速原型法思想
原型法的基本思想是:首先建立一个能反映用户主 要需求的原型系统,让用户在计算机上试用该原 型系统,通过实践了解用户的未来系统的概貌, 以便用户判断系统提供的功能是否能满足用户的 需求。用户通过实际试用原型系统,可以归纳出 对系统的修改意见,开发人员可根据这些意见快 速修改原型系统,然后用户再次试用修改后的原 型系统,通过再提意见和再修改的多次循环,最 终建立起符合用户需要的新系统。这是用原型法 开发软件的优点之一。
7.1传统方法学的缺点
• 存在的问题
• 出现问题的原因
存在的问题
•
•
软件生产率低下,不能满足软件发展的需求
软件可重用程度低
•
•
软件仍然很难维护
用户需求的不断变化导致软件很难满足用户 需求
出现问题的原因
• 1. 僵化的瀑布模型
–瀑布模型意味着在生命周期各阶段间存在着严格的顺
序性和依赖性。生命周期方法学特别强调预先定义需 求的重要性。这种预先定义需求的方法也不适应用户 需求的不断变化。这是因为:
• 用这种技术开发出的软件,其稳定性、可
修改性和可重用性都比较差。
7.2软件工程的新途径
• 快速原型法
• 面向对象的方法学
快速原型法
• 区分两类不同的软件系统
–
对软件需求可以预先确定的软件系统(控制系统、
操作系统等),可采用传统的生命周期方法进行开发; –对系统的需求模糊或随时间变化的系统(如MIS,决策 支持系统等)可采用快速原型法或面向对象的方法进
} 。。。。。。。。。。。。。。。。
属性
• 是类中定义的数据。类的每个实例都有自 己特有的属性值。
封装
• 对象具有封装性的条件: – 有一个清晰的边界。所有私有数据和实现操作的代码 都被封装在边界内,从外面不能直接访问。 – 有确定的接口。这些接口就是对象可以接受的消息, 只能通过向对象发送消息来使用它。 – 受保护的内部实现。私有的数据和代码不能够在定义 该对象的类之外进行访问。
• 优点4.较易开发大型软件产品
–每个对象有自己的数据、操作、功能、用途 –大型系统分界为一系列对象 –降低开发的技术难度 –容易管理开发工作
• 优点5.可维护性好
–使得面向对象方法开发的软件的可维护性好的 原因:
• 面向对象的软件稳定性较好; • 面向对象的软件比较容易修改; • 面向对象的软件比较容易理解; • 易于测试和调试。
C2.m_SAZC=18; 。 。 。
对象的定义
• 定义1.对象是具有相同状态的一组操作的集合。
• 定义2.对象是对问题域中某个东西的抽象,这种抽 象反映了相同保存有关这个东西的信息或与它交互 的能力。对象是对属性值和操作的封装。 • 定义3.对象::=<ID,MS,DS,MI>,其中ID是对象的名 字,MS是对象中的操作集合,DS是对象的数据结 构,MI是对象受理的消息名集合。
事务都是对象,复杂的对象可以由比较简单的
对象以某种方式组合而成。
• 面向对象方法用对象分解取代了传统方法的功能分 解。
• 要点2.把所有对象都划分成各种对象类,每个对
象类都定义了一组数据和一源自文库方法。
• 要点3.按照子类与父类的关系,把若干个对象类
组成一个层次结构,即类等级。
• 要点4.对象彼此之间仅能够传递消息互相联系。
两种新途径的结合
• 两种软件开发的途径相互促进、相互补充。
• 面向对象方法所带来的稳定性、可重用性和可维 护性等优点,对于用快速原型法成功地开发软件 来说,是至关重要的。 • 不论采用何种技术方法开发软件,都必须完成的 工作要素包括:确定“做什么”,确定“怎样 做”,“实现”和“完善”。
7.4面向对象基本概念
行为,表示对象所能提供的服务。
• 封装是一种信息隐蔽技术,用户只能看见 对象封装界面上的信息,对象的内部实现 对用户是隐蔽的。
• 封装的目的是使对象的使用者和生产者分 离,使对象的定义和实现分开。 • 一个对象通常可由对象名、属性和操作三 部分组成。
class CCaculate : public CWnd { 操作 public: int sgn(double x); void fwjzl(double o0,double o1,double &dO); void qlbjf(double L0,double ao,double o0,double L1,double a1,double o1,double &dN,double &dE,double &dH,double &dS,double &k,double &ka,double &ko,double &dL,double &da,double &dO,double &R,double &r); 对象 void sjsjjs(); 属性 CSjsjjsPointList m_pointList; CSjsjjsStructure* m_pRead; CCaculate C1; CSjsjjsStructure* m_sjsjjs; double m_SAZC;//方位角° CCaculate C2; double m_SINC;//井斜角° CCaculate C3; 属性 double m_SJCS;//垂深m C1.m_SAZC=90; 值 double m_SJJS; //井深m protected: DECLARE_MESSAGE_MAP() public: afx_msg void OnDestroy(); };
对象的特点
• 以数据为中心;
• 对象是主动的;
• 实现了数据封装;
• 本质上具有数据封装性;
• 模块独立性好。
类
• 类是一组具有相同属性和相同操作的对象 的集合。 • 一个类中的每个对象都是这个类的一个实 例(instance)。
• • • • • • • • • • • • • • • • •
• 例如:MyCirle.Show(GREEN);
接收消息 的对象 消息 名
参数
方法
• 是对象所能够执行的操作,也就是类中定 义的服务。
#include "Caculate.h“ 。。。。。。。。。 int CCaculate::sgn(double x) {
在类中给出成员函数的定 义。
if (x>0) return(1); //返回出口1:如果键盘输入正数,则返回1 if (x<0) return(-1);//返回出口2:如果键盘输入负数,则返回-1 return(0); //返回出口3:如果键盘输入0, 则返回0
• • • • • • 对象 类 实例 消息 继承 多态性
对象
• 对象是指一组属性以及这组属性上的专用 操作的封装体。 • 在应用领域中有意义的、与所要解决的问 题有关系的任何事务都可以作为对象,它
既可以是具体的物理实体的抽象,也可以 是人为的概念,或者是任何有明确边界和 意义的东西。
• 属性可以是一些数据,也可以是另一个对象。
一个 实例
• 当使用“对象”术语时,既可以指一个具
体的对象,也可以泛指一般的对象。
• 当使用“实例”术语时,必然是指一个具
体的对象。
消息
• 消息传递是对象间通信的手段,一个对象 通过向另一对象发送消息来请求其服务。 • 一个消息通常包括接收对象名、调用的操 作名和适当的参数(如有必要)。 • 消息只告诉接收对象需要完成什么操作, 但并不指示接收者怎样完成操作。消息完 全由接收者解释,接收者独立决定采用什 么方法来完成所需的操作。
• 不论采样什么方法学开发软件,都必须完
成的工作:确定“做什么”、确定“怎样 做”、“实现”和“完善”。
7.3面向对象方法的主要优点
• 优点1.与人类习惯的思维方法一致.
–结构化方法把数据和代码分离,以算法为核心。
–面向对象的软件技术以对象为核心,开发出的
系统由对象组成。
• 优点2.稳定性好
–结构化软件开发过程基于功能分析和功能分解。 当需求改变时,软件的系统结构需要改变。