面向对象程序设计的实训案例的设计
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
面向对象程序设计的实训案例的设计
一.引言
今天,面向对象编程技能作为应用软件设计人员的基本工作技能在软件业内已经深入人心:任何一个应用软件设计求职者如果敢于声称自己对面向对象编程一无所知,哪怕他其他方面再优秀,也会被公司拒绝;任何一家招聘应用软件设计职位的公司如果在招聘条件中没有列出“熟悉精通面象对象编程”这个条件,该公司一定认为这是默认的条件,没有单独列出的必要。
遗憾的是,应届大学大专毕业生动手能力不强已成为各软件用人单位的另一个共识,而把,等面向对象语言仅仅当作开发网站快速上手的工具的初学者更是大有人在。面对大街上扑天盖地的各类“计算机职业教育广告”,身为一名计算机专业教师,我觉得有必要为提高学生们的面向对象程序设计水平做点什么了。
提高学生的程序设计水平,公认最佳的途径就是多动手实践。在不给学生加负的前提下,精心选择,设计有代表性的实训案例,切实提高实训的效果,就显得尤为重要。
二.案例的评价标准
一个针对初学者的面向对象程序设计的实训案例应由案例的现实原型,案例分析设计和参考代码三个部分组成。其评价标准大致如下:
1.案例的现实原型应是同学们熟悉的题材,规模和复杂度相对较小,初学者容易把握主题。
2.案例的分析应体现出面向对象的思维方式,让同学们感受到“万物皆对象”,用面向对象的方式构建软件是一件自然而然的事情。
3.案例的设计要结构清晰,具备一定的健壮性和扩展性;在不影响结构优雅的前提下,尽可能全面应用到抽象类,接口,继承,多态,重载,覆盖等
面向对象基本特性,体现面向对象编程的特点。
4.案例的参考代码由源码实现,和伪代码相比,初学者对能编译运行的源代码更有好感。
三.案例的现实原型:
根据案例的评价标准,我选择了大家都比较熟悉的餐厅结账作为我们案例的现实原型,其功能要求如下:
1.程序功能:
这是一个餐厅计费的小程序;根据用户提供的消费清单和所应享受的折扣,算出最后用户的账单;根据用户选择,决定是否继续计算;
2.用户界面:
控制台命令行显示输出信息和接受用户输入信息;
3.折扣规定:
餐厅经营普通食品,海鲜,酒水三大类食品,其享受的折扣不同;折扣分为“进餐等待折扣”“折扣”“代金券折扣”三种。
. 进餐等待折扣:普通食品折,酒水折,海鲜不打折;
折扣:菜单总价折;
代金券折扣:总价每消费,可使用代金券,直接从总价中扣除;
补充说明:如果同时满足折扣,折扣,只能享受折扣.
.帐单规定:
显示消费的食品的每条记录和单价;显示总共应付费用;显示享受折扣的名称和
折扣金额;显示用户实际应付费用;
.用户在输入消费清单和享受折扣信息时,如果非法输入能够给以相应提示,同时程序正常执行下去。
四.案例的分析设计:
.程序所要涉及到的实体:
从需求知道,问题的关注点是生成消费的帐单。经验告诉我们,要得到帐单,我们必须知道用户消费食品的份数和单价,以及用户所享受打折的价格。
食品的份数和单价就是个人消费清单,它需要菜单和用户输入来支持;而菜单则由餐厅所提供的食品来决定。用户所享受打折的价格细分一下,可以划分为同用户相关的用户折扣条件和同用户无关的打折规则两个实体。显然,用户的折扣条件由用户输入信息决定,折扣条件依赖于食品。
当个人消费清单和用户所享受的打折价格都知道了,我们还需要一个计算的实体来处理输入数据,最后通过输出实体将帐单打印出来。
那么,程序需要涉及的实体及其功能如下表:
实体功能
计算:根据消费清单和用户折扣条件打印消费帐单;
菜单:打印菜单,供用户点菜时选择;
提供菜单的内容提供输入信息的依据;
个人消费清单:提供消费的食品的种类和和单价;
折扣规则:根据折扣条件,提供不同的折扣的计算方法;
折扣条件:根据用户输入,提供用户享受的折扣信息;
食品:是菜单和折扣规则的的依据,分为普通食品,海鲜,酒水三类。
信息输入:输入食品消费信息;输入享受折扣信息等;
信息输出:输出菜单信息;输出消费帐单;输出提示信息等;
表-
.实体的相互关系:
根据实体的功能和生命周期,我们可以推出实体间的相互关系如下:
1.计算和折扣规则的关系是聚集;
2.计算和折扣条件,个人消费清单的关系是依赖
3.个人消费清单和菜单的关系是聚集;
4.菜单和食品间的关系是依赖;
5.个人消费清单和食品间的关系是间接依赖;
6.个人消费清单,折扣条件和信息输入的关系是聚集;
7.计算,菜单和信息输出的关系是聚集;
.各实体的类的设计
根据实体的功能和相互间的关系,类设计如下:
计算类:
构造时装载“输出”和“折扣规则”,这里将输出定义为接口,为今后将控制台输出改为界面输出留下扩展的空间;同样出于扩展性的考虑,我们将折扣规则设置成抽象类,由具体子类实现。
对外提供方法打印帐单方法,根据消费清单和用户折扣条件打印消费帐单.
个人消费清单:
构造时装载“菜单”和“输入”。这里的输入也是接口。“菜单”把输入的食品代号和具体食品实例的对应起来,内置变量用来存放消费食品的实例,以便提供提供消费的食品的数量,种类和单价
折扣规则:根据折扣条件,提供不同的折扣的计算方法;
考虑到将来业务需要,对相同的折扣条件,不同的时段也许使用不同的折扣率。这里将折扣类设计成一个抽象类,提供计算不同折扣条件的抽象计算方法或者具体计算方法。继承于它的子类通过实现或者覆盖父类的方法,完成具体的折扣计算;
折扣条件:
根据三种折扣类型设置三个私有变量,保存用户输入的折扣信息,并提供相应的变量获取方法;
食品:
食品类的结构影响着“菜单”和“折扣规则”类的结构,是设计的一个重点,