面向对象编程技术课程设计之方向2-C++综合编程指导书.pdf

上传人:asd****56 文档编号:70321009 上传时间:2023-01-19 格式:PDF 页数:9 大小:256.94KB
返回 下载 相关 举报
面向对象编程技术课程设计之方向2-C++综合编程指导书.pdf_第1页
第1页 / 共9页
面向对象编程技术课程设计之方向2-C++综合编程指导书.pdf_第2页
第2页 / 共9页
点击查看更多>>
资源描述

《面向对象编程技术课程设计之方向2-C++综合编程指导书.pdf》由会员分享,可在线阅读,更多相关《面向对象编程技术课程设计之方向2-C++综合编程指导书.pdf(9页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。

1、C+课程设计指导书(二)C+课程设计指导书(二)C综合编程与简单设计模式的运用 C综合编程与简单设计模式的运用 汤亚玲编写 2008-5-9 汤亚玲编写 2008-5-9 一、课程设计的目的与意义一、课程设计的目的与意义 学会综合运用 C教材中的基础理论知识,并学习专业编程中广为借鉴的一些经典的编程模式,联系具体事例,解决实际问题,达到深入领会理论,分析解决实际问题,培养一定的编程实践能力的目的。本设计出发点是紧扣教材,灵活运用,加深对教材内容的理解和拓展学习的知识面。注意:注意:本课程题目主要考察学生对课本知识的综合运用能力和基本的本课程题目主要考察学生对课本知识的综合运用能力和基本的 C编

2、程能力,不提供参考源程序。编程能力,不提供参考源程序。二、课程设计基本要求二、课程设计基本要求 1.学习设计模式中创建型模式中的 Factory 模式和 Singleton 模式,总结对这两种模式的理解和认识。(参见附录 1 和附录 2)2.完成具有以下功能的简单模型系统:系统中有一个唯一唯一(Singleton)的水果生产工厂,能生产成品水果产品,如苹果(Apple)、梨子(Pear)、香蕉(Banana)、桃子(Peach)等等,生产工厂能根据用户的选择或要求(用简单文字选择界面实现)生产指定的水果并提供给客户。3.阐述你自己在实现过程中遇到的问题和解决的过程。4.撰写课程设计报告,总结心

3、得体会。三、课程设计技术要点提示:三、课程设计技术要点提示:1.程序中建立水果生产工厂类(参考 Factory 模式),但保证该类只能实例化唯一的一个水果工厂(参考 Singleton 模式)。2.建立与各种水果(苹果、香蕉、梨子等)相对应的类库结果,并设计各种水果的抽象基类(如命名为 Fruit 类),建立抽象水果类的使用接口,在具体的水果派生类中加以实现,并通过多态的方式在主程序中加以使用。3.在主程序中建立简单文字选择界面,提供给客户使用。四、课程设计试验报告基本格式四、课程设计试验报告基本格式 课程设计试验报告的基本内容包括封面、正文、目录、附录四部分。1 1.封面:包括“面向对象编程

4、技术课程设计试验报告”、专业、班级、学号、姓名、设计时间等基本信息。2.目录:课程设计文档的文档目录。3.正文包括:(1)应用程序名称。(2)应用程序的主体、设计目的。(3)应用程序简介:功能介绍、基本内容、主要技术、运行环境。(4)应用程序的总体设计结构图、类层次图、主要运行界面介绍。(5)创新与难点:阐述个人设计主要成功之处,开发中遇到的困难和解决的方法。(6)课程设计过程的心得体会。4.附录:包括源程序和简易使用说明等。5.课程设计报告用计算机打印课程设计报告用计算机打印。2附录附录 1:Factory 模式模式 在面向对象系统设计中经常可以遇到以下的两类问题:为了提高内聚(Cohesi

5、on)和松耦合(Coupling),我们经常会抽象出一些类的公共接口以形成抽象基类或者接口。这样我们可以通过声明一个指向基类的指针来指向实际的子类实现,达到了多态的目的。这里很容易出现的一个问题 n 多的子类继承自抽象基类,我们不得不在每次要用到子类的地方就编写诸如 new;的代码。这里带来两个问题:1)客户程序员必须知道实际子类的名称(当系统复杂后,命名将是一个很不好处理的问题,为了处理可能的名字冲突,有的命名可能并不是具有很好的可读性和可记忆性,就姑且不论不同程序员千奇百怪的个人偏好了),2)程序的扩展性和维护变得越来越困难。2)还有一种情况就是在父类中并不知道具体要实例化哪一个具体的子类

6、。这里的意思为:假设我们在类 A 中要使用到类 B,B 是一个抽象父类,在 A 中并不知道具体要实例化那一个 B 的子类,但是在类 A 的子类 D 中是可以知道的。在 A 中我们没有办法直接使用类似于 new 的语句,因为根本就不知道是什么。以上两个问题也就引出了 Factory 模式的两个最重要的功能:1)定义创建对象的接口,封装了对象的创建;2)使得具体化类的工作延迟到了子类中。模式选择模式选择 通常使用 Factory 模式来解决上面给出的两个问题。在第一个问题中,我们经常就是声明一个创建对象的接口,并封装了对象的创建过程。Factory 这里类似于一个真正意义上的工厂(生产对象)。在第

7、二个问题中,我们需要提供一个对象创建对象的接口,并在子类中提供其具体实现(因为只有在子类中可以决定到底实例化哪一个类)。第一中情况的 Factory 的结构示意图为:图 1:Factory 模式结构示意图 1 图 1 所以的 Factory 模式经常在系统开发中用到,但是这并不是 Factory 模式的最大威力所在(因为这可以通过其他方式解决这个问题)。Factory 模式不单是提供了创建对象的接口,其最重要的是延迟了子类的实例化(第二个问题),以下是这种情况的一个 Factory 的结构示意图:3 图 2:Factory 模式结构示意图 1 图 2 中关键中 Factory 模式的应用并不是

8、只是为了封装对象的创建,而是要把对象的创建放到子类中实现:Factory 中只是提供了对象创建的接口,其实现将放在 Factory 的子类ConcreteFactory 中进行。这是图 2 和图 1 的区别所在。实现:完整代码示例(code):(代码采用 C+实现,并在 VC 6.0 下测试运行通过)代码片断 1:Product.h/Product.h#ifndef _PRODUCT_H_#define _PRODUCT_H_ class Product public:virtual Product()=0;protected:Product();private:;class Concrete

9、Product:public Product public:ConcreteProduct();ConcreteProduct();protected:private:;#endif/_PRODUCT_H_ 代码片断 2:Product.cpp/Product.cpp#include Product.h#include using namespace std;Product:Product()Product:Product()ConcreteProduct:ConcreteProduct()coutConcreteProduct.endl;ConcreteProduct:ConcretePro

10、duct()4代码片断 3:Factory.h/Factory.h#ifndef _FACTORY_H_#define _FACTORY_H_ class Product;class Factory public:virtual Factory()=0;virtual Product*CreateProduct()=0;protected:Factory();private:;class ConcreteFactory:public Factory public:ConcreteFactory();ConcreteFactory();Product*CreateProduct();protec

11、ted:private:;#endif/_FACTORY_H_ 代码片断 4:Factory.cpp/Factory.cpp#include Factory.h#include Product.h#include using namespace std;Factory:Factory()Factory:Factory()ConcreteFactory:ConcreteFactory()coutConcreteFactory.endl;ConcreteFactory:ConcreteFactory()Product*ConcreteFactory:CreateProduct()return ne

12、w ConcreteProduct();代码片断 5:main.cpp/main.cpp#include Factory.h#include Product.h#include using namespace std;int main(int argc,char*argv)Factory*fac=new ConcreteFactory();Product*p=fac-CreateProduct();return 0;5 代码说明:代码说明:示例代码中给出的是 Factory 模式解决父类中并不知道具体要实例化哪一个具体的子类的问题,至于为创建对象提供接口问题,可以由 Factory 中附加相应

13、的创建操作例如Create*Product()即可。Factory 模式在实际开发中应用非常广泛,面向对象的系统经常面临着对象创建问题:要创建的类实在是太多了。而 Factory 提供的创建对象的接口封装(第一个功能),以及其将类的实例化推迟到子类(第二个功能)都部分地解决了实际问题。采用 Factory 模式后系统可读性性和维护都变得 elegant 许多。6附录附录 2:Singleton 模式模式 Singleton 模式解决问题十分常见,怎样去创建一个唯一的变量(对象)?在基于对象的设计中我们可以通过创建一个全局变量(对象)来实现,在面向对象和面向过程结合的设计范式(如 C+中)中,我

14、们也还是可以通过一个全局变量实现这一点。但是当我们遇到了纯粹的面向对象范式中,这一点可能就只能是通过 Singleton 模式来实现了,可能这也正是很多公司在招聘开发人员时候经常考察 Singleton 模式的缘故吧。模式选择模式选择 Singleton 模式典型的结构图为:图 2-1:Singleton Pattern 结构图 在 Singleton 模式的结构图中可以看到,我们通过维护一个 static 的成员变量来记录这 个唯一的对象实例。通过提供一个 staitc 的接口 instance 来获得这个唯一的实例。实现实现 完整代码示例(code,见下页)Singleton 模式的实很简

15、单,以下给出实现它的所有代码,采用 C+实现,并在 VC 6.0下运行通过。7代码片断 1:Singleton.h/Singleton.h#ifndef _SINGLETON_H_#define _SINGLETON_H_#include using namespace std;class Singleton public:static Singleton*Instance();protected:Singleton();private:static Singleton*_instance;#endif/_SINGLETON_H_ 代码片断 2:Singleton.cpp /Singleton

16、.cpp#include Singleton.h#include using namespace std;Singleton*Singleton:_instance=0;Singleton:Singleton()coutSingleton.endl;Singleton*Singleton:Instance()if(_instance=0)_instance=new Singleton();return _instance;代码片断 3:main.cpp/main.cpp#include Singleton.h#include using namespace std;int main(int a

17、rgc,char*argv)Singleton*sgn=Singleton:Instance();return 0;8说明:说明:Singleton 模式的实现无须补充解释,需要说明的是,Singleton 不可以被实例化,因此我们将其构造函数声明为 protected 或者直接声明为 private(对比抽象类)。Singleton 模式在开发中经常用到,且不说我们开发过程中一些变量必须是唯一的,比如说打印机的实例等等。Singleton 模式经常和 Factory 模式在一起使用,因为系统中工厂对象一般来说只要一个,这里的工厂对象实现就是同时是一个 Singleton 模式的实例,因为系统我们就只要一个工厂来创建对象就可以了。9

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 技术资料 > 其他杂项

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

工信部备案号:黑ICP备15003705号© 2020-2023 www.taowenge.com 淘文阁