版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、第七章第七章 面向对象方法学导论面向对象方法学导论思考题思考题 软件开发中为什么要使用面向对象方法?软件开发中为什么要使用面向对象方法? 面向对象分析方法与结构化分析方法有哪些面向对象分析方法与结构化分析方法有哪些相似之处?有何区别?相似之处?有何区别? 面向对象方法是对过去的一个完全突破,还面向对象方法是对过去的一个完全突破,还是是“换汤不换药换汤不换药”? 本章的内容提纲: 简要介绍面向对象方法学 着重讲述面向对象的基本概念 介绍用面向对象方法学开发软件的过程中,建立的三种模型对象模型、动态模型、概念模型7.1传统方法学的缺点 存在的问题 出现问题的原因存在的问题软件生产率低下,不能满足软
2、件发展的需求软件可重用程度低软件仍然很难维护用户需求的不断变化导致软件很难满足用户需求出现问题的原因 1. 僵化的瀑布模型瀑布模型意味着在生命周期各阶段间存在着严格的顺瀑布模型意味着在生命周期各阶段间存在着严格的顺序性和依赖性。生命周期方法学特别强调预先定义需序性和依赖性。生命周期方法学特别强调预先定义需求的重要性求的重要性。这种预先定义需求的方法也不适应用户这种预先定义需求的方法也不适应用户需求的不断变化。需求的不断变化。这是因为: 用户需求可能是模糊的; 项目参与者之间存在通信鸿沟(领域专家不懂计算机技术,系统分析员不熟悉领域知识,他们之间很难通信,而文档只是一种静态的通信工具,不能反映动
3、态的变化要求); 用户需求是变化发展的(开发周期长,开发初期的需求在开发结束时已有很大的改变,甚至是互相矛盾); 2.结构化技术有其自身固定的缺点不稳定的:不稳定的:l围绕实现处理功能的“过程”来构造系统l用户的需求变化大部分是针对功能的l用户需求的变化往往造成系统结构的较大变化难修改和扩充:难修改和扩充:l清楚地定义了目标系统的边界l用结构分析、设计技术开发出的系统结构依赖于对系统边界的定义l很难把这样的系统扩展到新的边界 可重用性较差:可重用性较差:l不同的开发人员开发相同的系统时,可能经分解而得出不同的软件结构l把数据和操作作为分离的实体 用这种技术开发出的软件,其稳定性、可用这种技术开
4、发出的软件,其稳定性、可修改性和可重用性都比较差。修改性和可重用性都比较差。 7.2软件工程的新途径 快速原型法 面向对象的方法学 快速原型法快速原型法 区分两类不同的软件系统 对软件需求可以预先确定的软件系统对软件需求可以预先确定的软件系统(控制系统、操作系统等),可采用传统的生命周期方法进行开发;对系统的需求模糊或随时间变化的系统对系统的需求模糊或随时间变化的系统(如MIS,决策支持系统等)可采用快速原型法或面向对象的方法进行开发。 原型法的基本思想是:原型法的基本思想是:首先建立一个能反映用户主要需求的原型系统,让用户在计算机上试用该原型系统,通过实践了解用户的未来系统的概貌,以便用户判
5、断系统提供的功能是否能满足用户的需求。用户通过实际试用原型系统,可以归纳出对系统的修改意见,开发人员可根据这些意见快速修改原型系统,然后用户再次试用修改后的原型系统,通过再提意见和再修改的多次循环,最终建立起符合用户需要的新系统。这是用原型法开发软件的优点之一。 快速原型法思想 实现原型法有两种途径:实现原型法有两种途径: 抛弃原型法抛弃原型法 建立这种原型系统的目的是评价目标系统的某个(或某些)特性,以便更准确地确定需求,或者更严格地验证设计方案。原型使用后就被抛弃掉,开发人员可根据已经确定的用户需求重新构造目标系统。这种途径本质上仍属于瀑布模型,建立原型只不过是为了确定用户需求的一个步骤。
6、 演化原型法演化原型法 演化原型法是高度迭代的动态方法。在每次迭代过程中,都要再次分析和确定需求,再次进行设计,再次实现系统,以及再次进行测试和评价,直到用户感到完全满意为止。因此,早期所犯的错误其后果并不严重。此外,系统的初始版本很早就交付用户试用。 面向对象方法学面向对象方法学 面向对象方法学的出发点和基本原则是:尽可能模拟人类习惯的思维方式,使开发软件的方法与过程尽可能接近人类认识世界解决问题的方法与过程,也就是使描述问题的问题空间(也称为问题域)与实现解法的解空间(也称为求解域)在结构上尽可能一致。 面向对象方法具有以下4个要点:要点1.认为客观世界是由各种对象组成的,任何事务都是对象
7、,复杂的对象可以由比较简单的对象以某种方式组合而成。 面向对象方法用对象分解对象分解取代了传统方法的功能分解。 要点2.把所有对象都划分成各种对象类,每个对象类都定义了一组数据和一组方法。 要点3.按照子类与父类的关系,把若干个对象类组成一个层次结构,即类等级。 要点4.对象彼此之间仅能够传递消息互相联系。 用下列等式识别面向对象方法:面向对象 对象(Object)十 分类(Classification)十 继承(inheritance)十 通过消息的通信(Communication with messages) 可以说,采用这四个概念开发的软件系统是面向对象的。 面向对象的软件过程 不论采样
8、什么方法学开发软件,都必须完成的工作:确定确定“做什么做什么”、确定确定“怎样怎样做做”、“实现实现”和“完善完善”。7.3面向对象方法的主要优点 优点1.与人类习惯的思维方法一致. 结构化方法把数据和代码分离数据和代码分离,以算法算法为核心。 面向对象的软件技术以对象对象为核心,开发出的系统由对象组成。 优点2.稳定性好 结构化软件开发过程基于功能分析和功能分解。当需求改变时,软件的系统结构需要改变。 面向对象方法基于构造问题领域的对象模型,以对象为中心构造系统。用对象模拟问题领域的实体,以对象间的联系刻画实体间的联系。需求改变时,不会引起软件结构的整体变化。 优点3.可重用性好 面向对象方
9、法学中的继承机制使得子类不仅可以重用父类的数据和方法,也可以在父类代码的基础上方便的修改和扩充。 优点4.较易开发大型软件产品 每个对象有自己的数据、操作、功能、用途 大型系统分界为一系列对象 降低开发的技术难度 容易管理开发工作 优点5.可维护性好 使得面向对象方法开发的软件的可维护性好的原因: 面向对象的软件稳定性较好; 面向对象的软件比较容易修改; 面向对象的软件比较容易理解; 易于测试和调试。两种新途径的结合两种新途径的结合 两种软件开发的途径相互促进、相互补充。 面向对象方法所带来的稳定性、可重用性和可维护性等优点,对于用快速原型法成功地开发软件来说,是至关重要的。 不论采用何种技术
10、方法开发软件,都必须完成的工作要素包括:确定确定“做什么做什么”,确定,确定“怎样怎样做做”,“实现实现”和和“完善完善”。 7.4面向对象基本概念 对象 类 实例 消息 继承 多态性 对象是指一组属性属性以及这组属性上的专用专用操作操作的封装体封装体。 在应用领域中有意义的、与所要解决的问题有关系的任何事务都可以作为对象,它它既可以是具体的物理实体的抽象,也可以既可以是具体的物理实体的抽象,也可以是人为的概念,或者是任何有明确边界和是人为的概念,或者是任何有明确边界和意义的东西。意义的东西。对象属性属性可以是一些数据,也可以是另一个对象。 例如,书是一个对象,它的属性可以有书名、作者、出版社
11、、出版年份、定价等属性,其中书名、出版年份、定价是数据,作者和出版社可以是对象,他们还可以有自己的属性 每个对象都有它自己的属性值,表示该对象的状态。对象中的属性只能通过该对象所提供的操作来存取或修改。操作操作也称为方法或服务,它规定了对象的行为,表示对象所能提供的服务。封装封装是一种信息隐蔽技术,用户只能看见对象封装界面上的信息,对象的内部实现对用户是隐蔽的。 封装的目的是使对象的使用者和生产者分离,使对象的定义和实现分开。 一个对象通常可由对象名、属性和操作三部分组成。class CCaculate : public CWndpublic:int sgn(double x);void fw
12、jzl(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_
13、pRead;CSjsjjsStructure* m_sjsjjs;double m_SAZC;/方位角方位角double m_SINC;/井斜角井斜角double m_SJCS;/垂深垂深mdouble m_SJJS; /井深井深mprotected:DECLARE_MESSAGE_MAP()public:afx_msg void OnDestroy();CCaculate C1;CCaculate C2;CCaculate C3;C1.m_SAZC=90;C2.m_SAZC=18;。属性值操作对象属性对象的定义 定义定义1 1.对象是具有相同状态的一组操作的集合。 定义定义2 2.对象是对问
14、题域中某个东西的抽象,这种抽象反映了相同保存有关这个东西的信息或与它交互的能力。对象是对属性值和操作的封装。 定义定义3 3.对象:=,其中ID是对象的名字,MS是对象中的操作集合,DS是对象的数据结构,MI是对象受理的消息名集合。对象的特点 以数据为中心; 对象是主动的; 实现了数据封装; 本质上具有数据封装性; 模块独立性好。类 类是一组具有相同属性和相同操作的对象的集合。 一个类中的每个对象都是这个类的一个实例(instance)。 void ComupteDataDlg:OnBnClickedSjsjjs()/ TODO: Add your control notification h
15、andler code hereCCaculate 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;。
16、一个实例一个实例对象的一个属性 当使用“对象”术语时,既可以指一个具体的对象,也可以泛指一般的对象。 当使用“实例”术语时,必然是指一个具体的对象。消息消息 消息传递是对象间通信的手段,一个对象通过向另一对象发送消息来请求其服务。 一个消息通常包括接收对象名接收对象名、调用的操调用的操作名作名和适当的参数适当的参数(如有必要)。 消息只告诉接收对象需要完成什么操作,但并不指示接收者怎样完成操作。消息完全由接收者解释,接收者独立决定采用什么方法来完成所需的操作。 例如:MyCirle.Show(GREEN);接收消息的对象消息名参数方法 是对象所能够执行的操作,也就是类中定义的服务。#inclu
17、de Caculate.h“。int CCaculate:sgn(double x)if (x0) return(1); /返回出口1:如果键盘输入正数,则返回1if (x0) return(-1);/返回出口2:如果键盘输入负数,则返回-1return(0); /返回出口3:如果键盘输入0, 则返回0。在类中给出成员函数的定义。属性 是类中定义的数据。类的每个实例都有自己特有的属性值。封装 对象具有封装性的条件: 有一个清晰的边界。所有私有数据和实现操作的代码都被封装在边界内,从外面不能直接访问。 有确定的接口。这些接口就是对象可以接受的消息,只能通过向对象发送消息来使用它。 受保护的内部实
18、现。私有的数据和代码不能够在定义该对象的类之外进行访问。/图层管理器class CJwtLayerManagerpublic:CJwtLayerManager(CView* pView = NULL);CJwtLayerManager();void AddObject(CJwtObject* pJwtObject); /添加对象void AddLayer(CJwtLayer* pLayer); /添加图层void DeleteLayer(CString layerName); /删除图层void MoveLayerToFront(CJwtLayer* pLayer);/ 移到最前void Mo
19、veLayerToBack(CJwtLayer* pLayer);/ 移到最后void MoveLayerForward(CString name);/ 前移void MoveLayerBackward(CString name);/ 后移void SwitchLayers(CJwtLayer* pLayerA,CJwtLayer* pLayerB); / 交换图层CJwtLayer* GetLayer(CString name); /获得给定名称的图层int GetLayersCount();/ 获得层的数量CJwtLayerList m_jwtLayerList; /图层列表int m_L
20、ayerOrder; /图层顺序private:CJwtLayer* m_pCurLayer;/当前图层CView* m_pView;/视图指针public:void Clear(void);/清理内存;继承继承 继承是类间的一种基本关系,是在某个类的层次关联中不同的类共享属性和操作的一种机制。 图1给出了一个类、对象、继承的例子。图1类、对象、继承class CDrawBasic:public CObjectDECLARE_SERIAL(CDrawBasic)public:CDrawBasic(void);CDrawBasic(void);CDrawBasic(CPoint point);v
21、irtual void Serialize(CArchive& ar);/序列化virtual void Draw(CDC* pDC, float m_fDrawScale, CView* pView = NULL); /进行自身绘制virtual void DrawTracker(CDC* pDC, float m_fDrawScale); /进行角点绘制virtual BOOL HitTest(CPoint& point);/判断给定点是否在内部void MoveTo(CRect rect);/移动public:CRect m_Pos;/所在位置BOOL m_bSelected;/是否选中
22、BOOL m_bConnected;/是否连井BOOL m_bProjectionConnected;/是否投影连井CPoint point;/图形中心点int nIndex;/序号CString m_WellID;/井号double m_verDepth;/垂深float well_purpose_size;/目的层尺寸UINT m_nLineWidth; /画笔宽度COLORREF m_cPenColor; /画笔颜色int m_nPenStyle; /画笔的类型;函数重载class CDrawCircle : public CDrawBasic/目的层public:CDrawCircle
23、();CDrawCircle(CPoint point);CDrawCircle();void Draw(CDC* pDC, float m_fDrawScale, CView* pView = NULL);void DrawTracker(CDC* pDC, float m_fDrawScale); /进行角点绘制BOOL HitTest(CPoint& point);/判断给定点是否在内部CString a;void DrawJingBie(CDC* pDC,int n,CPoint point_jingbie);class CDrawRect : public CDrawBasic/井口
24、public:CDrawRect();CDrawRect(CPoint point);CDrawRect();void Draw(CDC* pDC, float m_fDrawScale, CView* pView = NULL);class CDrawTriangle : public CDrawBasic/井底public:CDrawTriangle();CDrawTriangle(CPoint point);CDrawTriangle();void Draw(CDC* pDC, float m_fDrawScale, CView* pView = NULL);多态性多态性 多态性是指同一
25、个操作作用于不同的对象上可以有不同的解释,并产生不同的执行结果。 相同操作的消息发送给不同的对象时,每个对象将根据自己所属类中定义的这个操作去执行,从而产生不同的结果。 类等级的不同层次中可以共享一个相同的名字,然而不同层次中的每个类却各自按自己的需要来实现这个行为。 在C+中,多态性通过虚函数来实现的。 #include class Pointpublic:Point(double i, double j)x=i;y=j;virtual double Area() const return 0.0;private: double x,y;class Rectangle:public Poin
26、tpublic:Rectangle(double i, double j, double k, double l);virtual double Area() const return w*h;private: double w,h;Rectangle:Rectangle(double i,double j, double k, double l):Point(i,j)w=k; h=l;void fun(Point &s)couts.Area ()endl;void main()Rectangle rec(3.0,5.2,15.0,25.0);fun(rec);Fun()函数的引用对象参数s被
27、动态联编。调用时实参是Rectangle类的对象rec,所以被束定到Rectangle 类的Area()重载 函数重载:指在同一作用域的若干个参数特征不同的函数可以使用相同的函数名字。 运算符重载:指同一个运算符可以施加于不同类型的操作数上面。#include class complexpublic:complex()real=imag=0;complex(double r)real=0;imag=r;complex(double r, double i)real=r;imag=i;complex operator +(const complex &c);complex operator -(
28、const complex &c);complex operator *(const complex &c);complex operator /(const complex &c);friend void print(const complex &c);private: double real, imag;inline complex complex:operator +(const complex &c)return complex(real+c.real ,imag+c.imag );。void main()complex c1(2.0,3.0),c2(4.0,-2.0),c3;c3=c
29、1+c2;coutnc1+c2=;print(c3);c3=c1/c2;coutnc1/c2=;print(c3);7.5面向对象建模 对象建模技术(object modeling technique,OMT)是由JRumbaugh等人提出的。 OMT定义了三种模型,它们是对象模型、动态模型和功能模型,OMT用这三种模型来描述系统。 OMT方法有四个步骤:分析、系统设计、对象设计和实现。 OMT方法的每一步都使用这三种模型,通过每一步对三种模型不断地精化和扩充。 对象模型对象模型动态模型动态模型功能模型功能模型基本模型:三个三个模型模型分别从不同角度分析系统分别从不同角度分析系统分析模型分析模
30、型对象模型对象模型: : 描述静态结构描述静态结构, , 定义做定义做事情的实体事情的实体功能模型功能模型: : 描述处理描述处理( (数据变换数据变换), ), 指明系统应指明系统应“做做什么什么”动态模型动态模型: : 描述交互过程描述交互过程, , 规定什么规定什么时候做时候做 7.6对象模型对象模型 对象模型描述系统中对象的静态结构静态结构、对象之间的关系对象之间的关系、对象的属性对象的属性、对象的操作对象的操作。 对象模型表示静态的、结构上的、系统的“数据”特征。 对象模型为动态模型和功能模型提供了基本的框架。 对象模型用包含对象和类的对象图来表示。 用UML中的类图类图来建立对象模
31、型。图7.1 对象的符号表示 图7.2 类的符号表示(类名)属性值类名可见性 属性名:类型缺省值可见性 操作名(参数:类型,):结果类型表示类的符号 类是具有相同属性、操作、关系的对象集合的总称。通常在UML中类被画成矩形。 表示关系的符号 类&对象间的关系可以概括为归纳、组合、关联关系归纳(泛化)关系 泛化是一个类与它的一个或多个细化种类之间的关系,即一般与特殊的关系。被细化的称为父类,每个细化的种类称为子类,子类可以继承父类的性质。 组合(聚合 )关系 聚合是一种整体与部分的关系,在这种关系中表示整体的对象与表示部分的对象关联。 有聚合关系的关联指出,某个类是另外某个类的一部分。 组合关系
32、是聚合关系的另一种形式,但是子类实例的生命周期依赖于父类实例的生命周期。 关联 链表示实例对象间的物理或概念上的连接。例如,Joe Doe为SimPlex公司工作,工资2000元。 关联描述具有公共结构和公共语义的一组链,例如,关联works-for描述了一组某人为某公司工作的链。实际上链是关联的一个实例。链可以有属性,称为链属性,链属性表示关联中链的性质。 有一些修饰可以应用于关联。1. 名字:可以给关系取名字 2. 角色:关系的两端代表不同的两种角色 3. 重数:表示有多少对象通过一个关系的实例相连 关联类关联类在关联建模中,存在一些情况下,你需要包括其它类,因为它包含了关于关联的有价值的
33、信息。对于这种情况,你会使用 关联类关联类 来绑定你的基本关联。关联类和一般类一样表示。不同的是,主类和关联类之间用一条相交的点线连接。 类也可以使用反射关联与它本身相关联。 教师教师 指导论文指导论文0.m 1学生学生教师为学生教师为学生指导论文:指导论文:教师教师 教学教学0.m 0.n 学生学生教师为学生教师为学生授课:授课:题目题目答辩时间答辩时间成绩成绩 教师教师学生学生 指导论文指导论文0.m 1SalesSalesLineItemLineItemquantityquantitySaleSaledatedatetimetimePaymentPaymentamoutamoutItem
34、ItemquantityquantityStoreStoreAddressAddressnamenamePOSPOSRecords-sale-ofRecords-sale-of0.10.11 11.1.* *1 11 11 11.1.* *1 11 1* *1 1Captured-onCaptured-on1 1Paid-byPaid-byContainedContainedStocked-inStocked-inHousesHouses属性属性关联关联概念概念( (类类) )7.7动态模型动态模型 动态模型描述与时间和操作顺序有关的系统特征激发事件、事件序列、确定事件先后关系的状态以及事件和状态的组织。 动态模型表示瞬时的、行为上的、系统的“控制”特征。它关心的是系统的控制,操作的执行顺序;它从对象的事件和状态的角度出发,表现了对象的相互行为。 动态模型用状态图状态图来表示。每张状态图显示了系统中一个类的所有对象所允许的
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年古籍数字化科研合作模式
- 人工智能在保险教育领域的应用
- 保险AI安全性能优化策略
- 2026年湖北省单招职业技能考试题库附参考答案详解(黄金题型)
- 2026年函谷丝路职业学院单招综合素质考试模拟试卷及答案详解(考点梳理)
- 2027年河南西华职业学院高职单招职业适应性测试考试模拟试卷(各地真题)附答案详解
- 2026年四川阿坝马尔康职业学院高职单招职业技能考试模拟试卷附完整答案详解(全优)
- 2026年安阳殷墟文旅职业学院高职单招职业技能考试题库及答案详解【新】
- 2025年平顶山职业技术学院单招综合素质考试模拟试卷附完整答案详解【历年真题】
- 2026年电影摄影机技术创新与应用展望报告
- 2025年茶艺师(乌龙茶冲泡技艺)试题及答案
- 2026年老旧小区水表改造外勤自来水公司招聘考试笔试试题(含答案)
- 北京市东城区2025-2026学年高一下学期期末考试物理试卷(含答案)
- 《中医》考试题库-2026年山东医师定期考核
- 2026年内蒙古执业药师继续教育参考答案
- SYT 6108-2025《气藏开发动态分析技术要求》
- 2026年广东省中考英语试卷(含答案)
- 生产经营单位安全生产事故应急预案编制导则
- 2026国家消防招录面试题及答案
- 公立医院行政管理岗招聘考试核心考点笔记:公立医院绩效考核与等级评审
- 2026年6月证券从业资格考试《证券市场基础知识》考试真题及答案详解
评论
0/150
提交评论