面向对象技术课程报告

上传人:gao****ang 文档编号:147962698 上传时间:2022-09-03 格式:DOC 页数:16 大小:276KB
收藏 版权申诉 举报 下载
面向对象技术课程报告_第1页
第1页 / 共16页
面向对象技术课程报告_第2页
第2页 / 共16页
面向对象技术课程报告_第3页
第3页 / 共16页
资源描述:

《面向对象技术课程报告》由会员分享,可在线阅读,更多相关《面向对象技术课程报告(16页珍藏版)》请在装配图网上搜索。

1、基于面向对象的计算器分析与设计S110101022 冯仁海摘要:面向对象(Object Oriented)作为目前应用最广的开发系统方法,其概念 和应用扩展到了很宽的领域,比如数据库系统、交互式界面、应用平台、 CAD 技术、人工智能等领域。本文将以计算器为案例,采用 MFC 应用平台的设计方 法,对其进行面向对象分析和设计,其中主要以代码的添加为主。最后,给出计 算器的调试结果图。关键字:MFC;面向对象方法;计算器Calculator Based on Object-oriented Analysis and DesignS110101022 Feng RenhaiAbstract: OO

2、 (Object Oriented) is currently most widely used as a development system method, and its concepts and applications are extended to a wide field, such as data base system, interactive interface, application platform, CAD technology, artificial intelligence etc. This article will take the calculator a

3、s an example, using design method of MFC application platform to make object-oriented analysis and design of it, to which adding code is given priority. Finally, adjusting result graph of the calculator is given.Key words: MFC, Object-oriented method, Calculator0 引言面向对象(O bject Oriented)作为目前应用最广的开发系

4、统方法,而它的概 念和应用已超越了程序设计和软件设计,并扩展到了很宽的领域,比如数据库系 统、交互式界面、应用平台、CAD技术、人工智能等领域。1 面向对象简介面向对象方法是按人们通常的思维方式建立问题域的模型,设计尽可能自然 地表现求解方法的软件。为了实现上述基本原则,必须建立直接表现组成问题域 的事物以及这些事物间的相互联系的概念,还必须建立适应人们一般思维方式的 描述范式。在面向对象的设计方法学中,对象(O bject)和传递消息(Message passing)分别是表现事物及事物间相互联系的概念。类(Class)和继承(Inheritance) 是适应人们一般思维方式的描述范式。方法

5、(Method)是允许作用在该类上的 各种操作。这种对象、类、消息和方法的程序设计范式的基本点在于对象的封装 性(Encapsulation )和继承性。通过圭寸装能将对象的顶和对象的实现分开,通过 继承能体现类与类之间的关系,以及由此带来的动态聚束(Dynamic binding)和 实体的多态性(Polymorphism),从而构成了面向对象的基本特征。1.1面向对象的概念对象对象是人们要进行研究的任何事物,从最简单的整数到复杂的飞机等 均可看作对象,它不仅能表示具体的事物,还能表示抽象的规则、计划或 事件。(2)对象的状态和行为对象具有状态,一个对象用数据值来描述它的状态。对象还有操作,

6、用于改变对象的状态,对象及其操作就是对象的行为。对象实现了数据和操作的结合,使数据和操作封装于对象的统一体中 类具有相同特性(数据元素)和行为(功能)的对象的抽象就是类。因 此,对象的抽象是类,类的具体化就是对象,也可以说类的实例是对象, 类实际上就是一种数据类型。类具有属性,它是对象的状态的抽象,用数据结构来描述类的属性。类具有操作,它是对象的行为的抽象,用操作名和实现该操作的方法 来描述。(4)类的结构在客观世界中有若干类,这些类之间有一定的结构关系。通常有两种 主要的结构关系,即一般-具体结构关系,整体-部分结构关系。 一般-具体结构称为分类结构,也可以说是“或”关系,或者是“is a”

7、 关系。 整体-部分结构称为组装结构,它们之间的关系是一种“与”关系,或 者是has a ”关系。(5)消息和方法。对象之间进行通信的结构叫做消息。在对象的操作中,当一个消息发 送给某个对象时,消息包含接收对象去执行某种操作的信息。发送一条消 息至少要包括说明接受消息的对象名、 发送给该对象的消息名(即对象名、 方法名)。一般还要对参数加以说明,参数可以是认识该消息的对象所知 道的变量名,或者是所有对象都知道的全局变量名。类中操作的实现过程叫做方法,一个方法有方法名、返回值、参数、 方法体。1.2面向对象的特征( 1)对象唯一性每个对象都有自身唯一的标识,通过这种标识,可以到相应的对象。在对象

8、 的整个生命期中,它的标识都不改变,不同的对象不能有相同的标识。( 2)抽象性抽象性是指将具有一致的数据结构(属性)和行为(操作)的对象抽象成类。 一个类就是这样一种抽象,它反映了与应用有关的重要性质,而忽略其他一些无 关内容。任何类的划分都是主观的,但必须与具体的应用有关。( 3 )继承性继承性是子类自动共享父类数据结构和方法的机制,这是类之间的一种关系 在定义和实现一个类的时候,可以在一个已经存在的类的基础之上来进行,把这 个已经存在的类所定义的内容作为自己的内容,并加入若干新的内容。在软件开发中,类的继承性使所建立的软件具有开放性、可扩充性,这是信 息组织与分类的行之有效地方法,它简化了

9、对象、类的创建工作量,增加了代码 的可重性。采用继承性,提供了类的规范的等级结构。通过类的继承关系,使公 共的特性能够共享,提高了软件的重用性。(4)多态性多态性是指相同的操作或函数、过程可作用于多种类型的对象上并获得不同 的结果。不同的对象,收到同一消息可以产生不同的结果,这种现象称为多态性。 它允许每个对象以合适自身的方式去响应共同的消息,这增强了软件的灵活性和 重用性。1.3 面向对象的要素(1)抽象抽象是指强调实体的本质、内在的属性。在系统开发中,抽象指的是在决定 如何实现对象之前的对象的意义和行为。使用它可避免过早考虑一些细节。 (2)封装性封装性是保护软件部件具有优良的模块性的基础

10、。面向对象的类是封装良好 的模块,类定义将其说明(用户可见的外部接口)与实现(用户不可见的内部实 现)显式的分开,其内部实现按其具体定义的作用域提供保护,防止了程序相互 依赖性而带来的变动影响。(3)共享性在同一类中的共享,同一类中的对象有着相同数据结构,这些对象之间是结 构、行为特征的共享关系;在同一应用中的共享,存在继承关系的各相似子类中, 存在数据结构和行为的继承,使各相似子类共享共同的结构和行为;在不同应用 中的共享,面向对象不仅允许在同一应用中共享信息,而且为未来目标的可重用 设计准备了条件,通过类库这种机制和结构来实现不同应用中的信息共享。(4)强调对象结构1.4 面向对象应用简介

11、随着20世纪80年代初期面向对象开发的逐步成熟,面向对象分析(OOA) 和面向对象设计(OOD)脱颖而出。到90年代,由于应用的需要,统一建模语 言(UML)逐步形成,它不仅统一了Booch、OMT、OOSE方法的表示方法,而 且对其作了进一步的发展,使UML成为一种定义良好、易于表达、功能强大且 普遍使用的建模语言,用来对软件密集系统进行描述、构造、视化和文档编制。 如今,它已融入了软件工程领域的新思想、新方法和新技术。在使用UML的面 向对象开发中,面向对象分析(00A)和面向对象设计(00D)使用类图、用 例图、序列图和状态图456。对于面向对象的开发,如图1显示了面向对象分析(00A)

12、、面向对象设计 (00D )和面向对象编程(OOP)的关联性。在本文中,将按照面向对象开发的三层设计,三层设计要求在一个面向对象 系统中交互作用的对象的集合被分为3种类-问题域类、GUI类和数据存取类, 其中问题域类对基本的业务实体建模,GUI类提供用于数据输入和显示的用户界 面,数据存取类提供数据存储和数据检索服务。在面向对象分析(OOA)期间, 主要针对问题域类的分析;面向对象设计(OOD)主要涉及到添加与用户交互 作用的GUI类和数据存取类,其中添加数据存取类的目的是使用数据库使对象 持久。2 采用 MFC 的计算器设计2.1 创建对话框创建基于对话框的MFC(EXE)应用程序计算器;在

13、对话框窗体上顺序创建0到9十个数字按钮,有计算的一些按钮(+,-,*,/)实现简易的计算。2.2 程序结构图2.3 设置按钮属性 在对话框窗体上顺序创建 0 到 9 十个数字按钮,并设置其标识符分别为123+C456Sqrt789L/x01IDC_O到IDC_9,其它按钮按下表设置属性:表 1 对话框控件属性表控件属性设置控件属性设置按钮标识符(ID) 标题(Caption)IDC_00按钮标识符(ID) 标题(Caption)IDC_SQRTSqrt按钮标识符(ID) 标题(Caption)IDC_11按钮标识符(ID) 标题(Caption)IDC_RECIPROCAL l/x按钮标识符(

14、ID) 标题(Caption)IDC_22按钮标识符(ID) 标题(Caption)IDC_EQUAL按钮标识符(ID) 标题(Caption)IDC_33按钮标识符(ID) 标题(Caption)IDC_DIVID /按钮标识符(ID) 标题(Caption)IDC_44按钮标识符(ID) 标题(Caption)IDC_MUTIPLY*按钮标识符(ID) 标题(Caption)IDC_55按钮标识符(ID) 标题(Caption)IDC_MINUS按钮标识符(ID) 标题(Caption)IDC_66按钮标识符(ID) 标题(Caption)IDC_ADD+按钮标识符(ID) 标题(Capt

15、ion)IDC_77按钮标识符(ID) 标题(Caption)IDC_POINT按钮标识符(ID) 标题(Caption)IDC_88按钮标识符(ID) 标题(Caption)IDC_SIGN +/-按钮标识符(ID) 标题(Caption)IDC_99按钮标识符(ID) 标题(Style)IDC_DISPLAY 只读(Read only)按钮标识符(ID) 标题(Caption)IDC_CLEARC按钮2.4 按表 2 添加各运算按钮的消息处理函数控件ID消息消息处理函数函数功能IDC ADDBN CLICKEDOnAdd处理单击加号按钮IDC MUTIPLYBN CLICKEDOnMuti

16、ply处理单击乘号按钮IDC MINUSBN CLICKEDOnMinus处理单击减号按钮IDC DIVIDBN CLICKEDOnDivid处理单击除号按钮IDC POINTBN CLICKEDOnPoint处理单击小数点号按钮IDC SIGNBN CLICKEDOnSign处理单击正负符号按钮IDC EQUALBN CLICKEDOnEqual处理单击等号按钮IDC SQRTBN CLICKEDOnSqrt处理单击开方按钮IDC CLEARBN CLICKEDOnClear处理单击清除按钮IDC RECIPROCALBN CLICKEDOnReciprocal处理单击倒数按钮IDC 0BN

17、 CLICKEDOn0处理单击0按钮IDC 1BN CLICKEDOn1处理单击1按钮IDC 2BN CLICKEDOn2处理单击2按钮IDC 3BN CLICKEDOn3处理单击3按钮IDC 4BN CLICKEDOn4处理单击4按钮IDC 5BN CLICKEDOn5处理单击5按钮IDC 6BN CLICKEDOn6处理单击6按钮IDC 7BN CLICKEDOn7处理单击7按钮IDC 8BN CLICKEDOn8处理单击8按钮IDC 9BN CLICKEDOn9处理单击9按钮2.5在头文件VenusDlgh中添加类型、成员变量及成员函数(1) 自定义类型enum Operator OpN

18、one,OpAdd,OpSubtract,OpMultiply,OpDivide;enum CalcError ErrNone,ErrDivideByZero;enum Func FuncSin, FuncTan, FuncCos, FuncSqrt, FuncSqre, FuncLn, FuncLog,FuncN, FuncRec, FuncExp, FuncNone;(2) 成员变量及函数doublem_operand;/存储当前输入的操作数double t m_accum;/存储当前的计算结果BOOLm_bCoff;/标识当前输入是否是小数doublem_coff;/小数输入时的系数Op

19、erator m_operator; /enum 型变量用以标识当前运算符CalcError m_errorState;/enum 型变量用以标识当前运算状态Func m_func;/enum 型变量用以标识当前运算函数类型BOOL m_bOperandAvail;/标识当前输入是否为新输入数字void Calculate();/处理普通计算voidUpdateDisplay(); /处理显示voidRun_Func();/处理函数运算(3)为编辑框添加 CString 变量 m_result / Dialog Data/AFX_DATA(CVenusDlg)enum IDD = IDD_VE

20、NUS_DIALOG ;CString m_result;/AFX_DATA(4)在 CVenusDlg.cpp 添加处理显示信息的代码 void CVenusDlg:DoDataExchange(CDataExchange* pDX)CDialog:DoDataExchange(pDX);/AFX_DATA_MAP(CVenusDlg)DDX_Text(pDX, IDC_EDIT1, m_result);/AFX_DATA_MAP2.6 在 VenusDlg.cpp 中添加部分变量的初始化CVenusDlg:CVenusDlg(CWnd* pParent /*=NULL*/): CDialo

21、g(CVenusDlg:IDD, pParent) /AFX_DATA_INIT(CVenusDlg) m_result = _T();/AFX_DATA_INIT/ Note that LoadIcon does not require a subsequent DestroyIcon in Win32 m_hIcon = AfxGetApp()-LoadIcon(IDR_MAINFRAME);m_coff=0.1;m_bCoff=0;m_errorState = ErrNone; m_bOperandAvail=FALSE; m_operator=OpNone; 在文件 VenusDlg.

22、cpp 中添加#include math.h2.7 VenusDlg.cpp 添加各功能代码(1) 数字输入消息处理函数 void CVenusDlg:On0()/ TODO: Add your control notification handler code here if(m_errorState!=ErrNone) return;if(!m_bOperandAvail) m_operand=0;if(!m_bCoff) m_operand=m_operand*10+0;elsem_operand=m_operand+0*m_coff;m_coff*=0.1;m_bOperandAvai

23、l=TRUE;UpdateDisplay();void CVenusDlg:On1()/ TODO: Add your control notification handler code here if(m_errorState!=ErrNone)return;if(!m_bOperandAvail)m_operand=0;if(!m_bCoff)m_operand=m_operand*10+1;elsem_operand=m_operand+1*m_coff;m_coff*=0.1;m_bOperandAvail=TRUE;UpdateDisplay();void CVenusDlg:On2

24、()/ TODO: Add your control notification handler code here if(m_errorState!=ErrNone)return;if(!m_bOperandAvail)m_operand=0;if(!m_bCoff)m_operand=m_operand*10+2;elsem_operand=m_operand+2*m_coff;m_coff*=0.1;m_bOperandAvail=TRUE;UpdateDisplay();void CVenusDlg:On3()/ TODO: Add your control notification h

25、andler code hereif(m_errorState!=ErrNone)return;if(!m_bOperandAvail) m_operand=0;if(!m_bCoff)m_operand=m_operand*10+3;elsem_coff*=0.1; m_bOperandAvail=TRUE; UpdateDisplay();void CVenusDlg:On4() / TODO: Add your control notification handler code here if(m_errorState!=ErrNone)return;if(!m_bOperandAvai

26、l)m_operand=0;if(!m_bCoff)m_operand=m_operand*10+4;elsem_coff*=0.1; m_bOperandAvail=TRUE; UpdateDisplay();void CVenusDlg:On5() / TODO: Add your control notification handler code here if(m_errorState!=ErrNone)return;if(!m_bOperandAvail) m_operand=0;if(!m_bCoff)m_operand=m_operand*10+5;elsem_coff*=0.1

27、0000000;m_bOperandAvail=TRUE;UpdateDisplay();void CVenusDlg:On6()/ TODO: Add your control notification handler code here if(m_errorState!=ErrNone)return;if(!m_bOperandAvail)m_operand=0;if(!m_bCoff)m_operand=m_operand*10+6;elsem_operand=m_operand+6*m_coff;m_coff*=0.10000000;m_bOperandAvail=TRUE;Updat

28、eDisplay();void CVenusDlg:On7()/ TODO: Add your control notification handler code here if(m_errorState!=ErrNone)return;if(!m_bOperandAvail)m_operand=0;if(!m_bCoff)m_operand=m_operand*10+7;elsem_operand=m_operand+7*m_coff;m_coff*=0.1;m_bOperandAvail=TRUE;UpdateDisplay();/ TODO: Add your control notif

29、ication handler code here if(m_errorState!=ErrNone)return;if(!m_bOperandAvail)m_operand=0;if(!m_bCoff)m_operand=m_operand*10+8; elsem_operand=m_operand+8*m_coff;m_coff*=0.1;m_bOperandAvail=TRUE;UpdateDisplay();void CVenusDlg:On9()/ TODO: Add your control notification handler code here if(m_errorStat

30、e!=ErrNone)return;if(!m_bOperandAvail)m_operand=0;if(!m_bCoff)m_operand=m_operand*10+9;else m_operand=m_operand+9*m_coff; m_coff*=0.1; m_bOperandAvail=TRUE; UpdateDisplay(); (2)运算符消息处理函数 void CVenusDlg:OnAdd() /加/ TODO: Add your control notification handler code here Calculate();m_operator=OpAdd;/ T

31、ODO: Add your control notification handler code here m_operator = OpNone;m_operand = 0;m_accum = 0;m_bOperandAvail = FALSE;m_errorState = ErrNone; m_coff=0.1;m_bCoff=0; UpdateDisplay();void CVenusDlg:OnDivid() /除/ TODO: Add your control notification handler code here Calculate();m_operator=OpDivide;

32、void CVenusDlg:OnEqual() /处理等号/ TODO: Add your control notification handler code here Calculate();m_operator=OpNone;void CVenusDlg:OnMinus() /减法/ TODO: Add your control notification handler code here Calculate();m_operator=OpSubtract;void CVenusDlg:OnMutiply() /乘法/ TODO: Add your control notificatio

33、n handler code here Calculate();m_operator=OpMultiply;void CVenusDlg:OnPoint() /处理小数点/ TODO: Add your control notification handler code here m_bCoff=1;UpdateDisplay();void CVenusDlg:OnReciprocal() /求倒数/ TODO: Add your control notification handler code here m_func=FuncRec;Run_Func();void CVenusDlg:On

34、Sign() /处理正负号/ TODO: Add your control notification handler code here m_operand*=-1;UpdateDisplay();void CVenusDlg:OnSqrt() /出来开方/ TODO: Add your control notification handler code here m_func=FuncSqrt;Run_Func();void CVenusDlg:Calculate() /处理计算 if(m_errorState!=ErrNone) return;if(m_bOperandAvail) if(

35、m_operator=OpNone) m_accum=m_operand;else if(m_operator=OpMultiply) m_accum*=m_operand;else if(m_operator=OpDivide) if(m_operand=0) m_errorState=ErrDivideByZero; elsem_accum/=m_operand;else if(m_operator=OpAdd)m_accum+=m_operand;else if(m_operator=OpSubtract) m_accum-=m_operand;m_bOperandAvail=FALSE

36、;m_bCoff=0;m_coff=0.1;UpdateDisplay();void CVenusDlg:UpdateDisplay() /显示if(GetSafeHwnd()=NULL)return;if(m_errorState!=ErrNone)m_result=除数不能为零;elsedouble lval=(m_bOperandAvail)?m_operand:m_accum;m_result.Format(_T(%f),lval);int i=m_result.GetLength();while(m_result.GetAt(i-1)=0)m_result.Delete(i-1,1)

37、;i-=1;UpdateData(FALSE);void CVenusDlg:Run_Func()/处理求根和求倒if (m_errorState != ErrNone)return;if (m_bOperandAvail)if(m_func=FuncSqrt) m_operand=sqrt(m_operand),UpdateDisplay(); if(m_func=FuncRec)if (m_operand=0)m_result=分母不能为零;UpdateData(FALSE);elsem_operand=1/m_operand,UpdateDisplay();3 调试结果3.1 加减乘除调

38、试结果Sl VenusX101. &图 1 使用小数点时的结果Sl VenusX除數不能対零图 2 当使用除法时,分母为零报错3.2 特殊功能调试结果座,VenusX19.10473图 3 365 开方的结果& VenusX0.014286图 4 1/70 的结果Sl VenusX另母不能対零123+C456SqrtT59+j 1A j -| Illi Illi Illi-0+/-/图 5 当 x=0 时报错4 结语以上只是简单地采用对话框分析了面向对象设计方法,而实际过程非常,还 涉及单文档和多文档的设计。本文主要采用 MFC 对话框来设计计算器,利用消 息映射函数才调用按钮的功能,同时编辑功能函数来实现各个按钮的功能,最终 实现计算器的各个功能。本文的功能非常简单,还可以设计一些常用函数,如 sin、cos 等三角函数等。参考文献:陈富赞面向对象模型管理方法的研究及应用J.系统工程理论与实践,1999,11 (6):10-13.2 E.Reed Dokejohn W.Satzinger,Susan Rebstock Williams 著,李万红等译.Java 面 向对象应用程序开发J.北京:清华大学出版社,2003.3 Joseph Schuler著,李虎等译.UML基础、案例与应用M .北京:人民邮电出版 社,2003.

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

copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!