- 1、本文档共20页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第三章 一个面向对象的C++程序实例 北京信息工程学院 计算机系 牟永敏 第三章 一个面向对象的C++程序实例 从这一章开始我们将进行面向对象程序设计实践,通过一个面向对象的C++ 程序实例,说明怎样分析实际问题建立起对象模型,以及怎样用C++ 语言实现所得到的设计模型。通过本章学习,一方面可以进一步加深对面向对象分析及设计方法的理解,另一方面也能对面向对象的C++ 程序概貌有一个初步了解。 3.1面向对象分析与设计 3.1.1需求陈述 一个简单图形程序的需求: 在显示器荧光屏上圆心坐标为(100,100)的位置上,画一个半径为40的圆,在圆心坐标为(200,300)的位置上,画一个半径为20的圆,在圆心坐标为(400,150)的位置上,画一条弧,弧的起始角度为30,结束角度为120,半径为50。 注意:功能需求必须是可测试的。如:系统速度要快。(要有一个准确的值) 3.1.2 面向对象分析 (1) 面向对象分析就是抽取和整理用户需求并建立问题域精确模型的过程。面向对象分析的关键工作,是分析 确定问题域中的对象及对象间的关系,从而建立起问题域的对象模型。 3.1.2 面向对象分析 (2) 1.确定对象 使用“语法分析 ”方法。在需求陈述中包含的名词或名词短语是对象的候选者,它们有下列一些: 显示器荧光屏,圆心坐标,位置,半径,圆,弧,起始角度,结束角度。 3.1.2 面向对象分析 (3) “显示器荧光屏”是一种输出设备,是运行程序的物质基础(硬件平台),应该从候选对象中删去。“圆心坐标”和“半径”实质上是圆和弧的基本属性,并不需要独立存在,因此也应该从候选者中删去。“位置”实际上是指圆心的位置,也就是圆心坐标,没必要重复列出。“起始角度”和“结束角度”实质上是弧的属性,也应该从候选者中删去。最后得出的对象是,圆(Circle)和弧(Arc),更确切地说,是圆和弧两类对象。 在本问题域中实际上有两个具体的圆和一个具体的弧,换句话说,有圆类的两个实例和弧类的一个实例。 3.1.2 面向对象分析 (4) 2.确定属性 圆的两个基本属性是圆心坐标和半径,弧的基本属性有圆心坐标,半径,起始角度和结束角度。不可能在需求陈述中找到所有属性,还必须借助领域知识和常识,才能分析得出所需要的全部属性。圆和弧都应该再增加一个属性——可见性 3.1.2 面向对象分析 (5) 3.确定服务 在分析阶段可以认为,每个属性都是可以访问的。所谓可以访问是指提供了访问对象属性的对外接口。(由对象主动地向外界提供服务) 分析 这个程序应完成的功能可知,圆和弧都应该提供在荧光屏上“画自己”的服务。相应地也应该提供“隐藏自己”这样一个服务。 圆和弧分别有各自的属性和服务,如图3.1所示。 3.1.2 面向对象分析 (6) 3.1.3面向对象设计(1) 设计就是把通过分析得出的对程序的准确需求转变成实现程序的方案的过程。主要完成下述工作 : 1.建立类等级 面向对象程序的一个突出优点来源于继承性。应该尽量抽取出相似类的公共属性和公共服务,以建立这些相似类的父类,并在类等级的适当层次中正确地定义各个属性和服务。 图3.2所示的对象 模型。为简明起见,图中没有列出读/写属性值的常规服务。 3.1.3面向对象设计(2) 3.1.3面向对象设计(3) 2.定义属性 所谓定义属性就是要确定每个属性的数据类型和数据结构,同时还要确定每个属性的访问权限(通常被定义在保护部分或私有部分)。 3.定义服务 实现“显示”服务的算法概括来说就是,把“可见性”属性设置为true,然后调用相应的库函数用当前的前景颜色画出所要的图形。 3.2 用C++ 语言实现 (1).定义类与派生类 1. 定义类: class Location { ∥以下说明数据成员 ┇ ∥以下说明成员函数 ┇ }; 2 . 在定义派生类的时候,必须明确指出它的父类是谁。做法是,在派生类类名后面加一个冒号“:”,冒号后写上访问权修饰符,然后再写上父类名。 例如,定义从“位置”类派生出的“点”类的框架如下: class Point :public Location { ∥以下说明数据成员 ┇ ∥以下说明成员函数 ┇ }; 3 . 访问权修饰符影响从
文档评论(0)