《面向对象编程技术课程设计之方向2-C++综合编程指导书.docx》由会员分享,可在线阅读,更多相关《面向对象编程技术课程设计之方向2-C++综合编程指导书.docx(10页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、面向对象编程技术课程设计之方向2-C+综合编程指导书 C+课程设计指导书(二) C综合编程与简单设计模式的运用 汤亚玲编写 2022-5-9 一、课程设计的目的与意义 学会综合运用C教材中的基础理论知识,并学习专业编程中广为借鉴的一些经典的编程模式,联系具体事例,解决实际问题,达到深入领会理论,分析解决实际问题,培养一定的编程实践能力的目的。 本设计出发点是紧扣教材,灵活运用,加深对教材内容的理解和拓展学习的知识面。 注意:本课程题目主要考察学生对课本知识的综合运用能力和基本的C编程能力,不提供参考源程序。 二、课程设计基本要求 1.学习设计模式中创建型模式中的Factory模式和Single
2、ton模式,总结对这两种模式的理 解和认识。(参见附录1和附录2) 2.完成具有以下功能的简单模型系统:系统中有一个唯一(Singleton)的水果生产工厂,能 生产成品水果产品,如苹果(Apple)、梨子(Pear)、香蕉(Banana)、桃子(Peach)等等,生产工厂能根据用户的选择或要求(用简单文字选择界面实现)生产指定的水果并提供给客户。 3.阐述你自己在实现过程中遇到的问题和解决的过程。 4.撰写课程设计报告,总结心得体会。 三、课程设计技术要点提示: 1.程序中建立水果生产工厂类(参考Factory模式),但保证该类只能实例化唯一的一个水 果工厂(参考Singleton模式)。
3、2.建立与各种水果(苹果、香蕉、梨子等)相对应的类库结果,并设计各种水果的抽象 基类(如命名为Fruit类),建立抽象水果类的使用接口,在具体的水果派生类中加以实现,并通过多态的方式在主程序中加以使用。 3.在主程序中建立简单文字选择界面,提供给客户使用。 四、课程设计试验报告基本格式 课程设计试验报告的基本内容包括封面、正文、目录、附录四部分。 1.封面:包括“面向对象编程技术课程设计试验报告”、专业、班级、学号、姓名、设 计时间等基本信息。 2.目录:课程设计文档的文档目录。 3.正文包括: (1)应用程序名称。 (2)应用程序的主体、设计目的。 (3)应用程序简介:功能介绍、基本内容、主
4、要技术、运行环境。 (4)应用程序的总体设计结构图、类层次图、主要运行界面介绍。 (5)创新与难点:阐述个人设计主要成功之处,开发中遇到的困难和解决的方法。 (6)课程设计过程的心得体会。 4.附录:包括源程序和简易使用说明等。 5.课程设计报告用计算机打印。 附录1: Factory模式 在面向对象系统设计中经常可以遇到以下的两类问题: 为了提高内聚(Cohesion)和松耦合(Coupling),我们经常会抽象出一些类的公共接口以形成抽象基类或者接口。这样我们可以通过声明一个指向基类的指针来指向实际的子类实现,达到了多态的目的。这里很容易出现的一个问题n多的子类继承自抽象基类,我们不得不在
5、每次要用到子类的地方就编写诸如new ;的代码。这里带来两个问题: 1)客户程序员必须知道实际子类的名称(当系统复杂后,命名将是一个很不好处理的问题,为了处理可能的名字冲突,有的命名可能并不是具有很好的可读性和可记忆性,就姑且不论不同程序员千奇百怪的个人偏好了),2)程序的扩展性和维护变得越来越困难。 2)还有一种情况就是在父类中并不知道具体要实例化哪一个具体的子类。这里的意思为:假设我们在类A中要使用到类B,B是一个抽象父类,在A中并不知道具体要实例化那一个B的子类,但是在类A的子类D中是可以知道的。在A中我们没有办法直接使用类似于new 的语句,因为根本就不知道是什么。 以上两个问题也就引
6、出了Factory模式的两个最重要的功能: 1)定义创建对象的接口,封装了对象的创建; 2)使得具体化类的工作延迟到了子类中。 模式选择 通常使用Factory模式来解决上面给出的两个问题。在第一个问题中,我们经常就是声明一个创建对象的接口,并封装了对象的创建过程。Factory这里类似于一个真正意义上的工厂(生产对象)。在第二个问题中,我们需要提供一个对象创建对象的接口,并在子类中提供其具体实现(因为只有在子类中可以决定到底实例化哪一个类)。 第一中情况的Factory的结构示意图为: 图1:Factory模式结构示意图1 图1所以的Factory模式经常在系统开发中用到,但是这并不是Fac
7、tory模式的最大威力所在(因为这可以通过其他方式解决这个问题)。Factory模式不单是提供了创建对象的接口,其最重要的是延迟了子类的实例化(第二个问题),以下是这种情况的一个Factory的结构示意图: 图2:Factory模式结构示意图1 图2中关键中Factory模式的应用并不是只是为了封装对象的创建,而是要把对象的创建放到子类中实现:Factory中只是提供了对象创建的接口,其实现将放在Factory的子类ConcreteFactory中进行。这是图2和图1的区别所在。 实现: 完整代码示例(code): (代码采用C+实现,并在VC 6.0下测试运行通过) 代码片断1:Produc
8、t.h /Product.h #ifndef _PRODUCT_H_ #define _PRODUCT_H_ class Product public: virtual Product() = 0; protected: Product(); private: ; class ConcreteProduct:public Product public: ConcreteProduct(); ConcreteProduct(); protected: private: ; #endif /_PRODUCT_H_ 代码片断2:Product.cpp /Product.cpp #include Pr
9、oduct.h #include using namespace std; Product:Product() Product:Product() ConcreteProduct:ConcreteProduct() coutCreateProduct(); return 0; 代码说明: 示例代码中给出的是Factory模式解决父类中并不知道具体要实例化哪一个具体的子类的问题,至于为创建对象提供接口问题,可以由Factory中附加相应的创建操作例如Create*Product()即可。 Factory模式在实际开发中应用非常广泛,面向对象的系统经常面临着对象创建问题:要创建的类实在是太多了。而
10、Factory提供的创建对象的接口封装(第一个功能),以及其将类的实例化推迟到子类(第二个功能)都部分地解决了实际问题。 采用Factory模式后系统可读性性和维护都变得elegant许多。 附录2: Singleton模式 Singleton模式解决问题十分常见,怎样去创建一个唯一的变量(对象)?在基于对象的设计中我们可以通过创建一个全局变量(对象)来实现,在面向对象和面向过程结合的设计范式(如C+中)中,我们也还是可以通过一个全局变量实现这一点。但是当我们遇到了纯粹的面向对象范式中,这一点可能就只能是通过Singleton模式来实现了,可能这也正是很多公司在招聘开发人员时候经常考察Sing
11、leton模式的缘故吧。 模式选择 Singleton模式典型的结构图为: 图2-1:Singleton Pattern结构图 在Singleton模式的结构图中可以看到,我们通过维护一个static的成员变量来记录这个唯一的对象实例。通过提供一个staitc的接口instance来获得这个唯一的实例。 实现 完整代码示例(code,见下页) Singleton模式的实很简单,以下给出实现它的所有代码,采用C+实现,并在VC 6.0下运行通过。 代码片断1:Singleton.h /Singleton.h #ifndef _SINGLETON_H_ #define _SINGLETON_H_
12、#include using namespace std; class Singleton public: static Singleton* Instance(); protected: Singleton(); private: static Singleton* _instance; ; #endif /_SINGLETON_H_ 代码片断2:Singleton.cpp /Singleton.cpp #include Singleton.h #include using namespace std; Singleton* Singleton:_instance = 0; Singleto
13、n: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 argc,char* argv) Singleton* sgn = Singleton:Instance(); return 0; 说明: Singleton模式的实现无须补充解释,需要说明的是,Singleton不可以被实例化,因此我们将其构造函数声明为protected或者直接声明为private(对比抽象类)。 Singleton模式在开发中经常用到,且不说我们开发过程中一些变量必须是唯一的,比如说打印机的实例等等。 Singleton模式经常和Factory模式在一起使用,因为系统中工厂对象一般来说只要一个,这里的工厂对象实现就是同时是一个Singleton模式的实例,因为系统我们就只要一个工厂来创建对象就可以了。
限制150内