• 2017《面向对象程序设计》课程作业四


    作业要求:

    • 本次作业不要求编码实现。发布一篇博客,图文并茂。
    • 请设计四则运算的各个类的类图。并对图加以描述。
    • 有编码实现的同学附加10分。
    • 作图软件推荐ProcessOn,也可以提供手工画图的照片。

    类图

    流程图

    具体问题

    1. 采取面向对象的方法,四则运算自动出题软件,根据需求可以划分为几个类?每个类具有什么属性?每个类具有什么行为?
    • 可以分为四个类:表达式,运算器,计数器,交互窗口。属性以及行为如类图所示。
    1. 类与类之间是如何进行协作的?谁给谁发送消息?谁持有谁的引用?
    • 类与类之间通过消息来协作,交互窗口告诉表达式题目数量,表达式告诉运算器表达式,运算器告诉计数器正确题数。具体如类图所示。
    1. 该自动出题软件采取何种算法或者是如何实现的?可以采用流程图描述的方法。
    • 如流程图所示。

    代码

    代码github地址
    代码分为三个部分:main函数,头文件(包括用到的头文件,符号常量,类),成员函数的定义。

    • 代码结构:

    运行示例

    完成体会

    • 这次作业,我把原来用C语言写的四则运算程序用c++改写了一下,从面向对象的角度重新审视这个程序(也许做的结果并不是正宗的面向对象)。由于思考的角度变了,所以这次代码几乎是一次“翻工”,所有的函数都得重新写,得重新定义结构。
    • 联想到上课讲的晚会的例子,我从一个晚会举行的过程来思考,到晚会举行需要什么对象,对象有什么性质,需要什么功能,和四则运算作类比,抽象出四则运算器的四个对象:交互窗口、表达式、二元运算器和计数器。然后给他们加上属性,想它们需要什么功能,再给他们添上函数。
    • 我在作出类图以后,才开始重新编写代码。写的过程中,把功能不断细化,想尽量把对象封装得“牢”一些,连一些简单获取数据,赋值也用函数完成。感觉这个过程虽然繁琐了一些,但是程序更加独立、清晰。写代码的时候,只要思考如何把这个对象写好,不需要过多去思考运行的过程,和整个面向过程的方式相比,这样做可以很大程度上简化思维量,有一种把大问题分解成小问题、小问题逐个击破的感觉。用了类以后,也不需要编出很多不同名字的变量,方便了许多。
    • 这次表达式,使用了栈的知识,因为涉及到把数字转化成字符的问题,所以对每个数字都逐一使用了sprintf()来转化,虽然实现了表达式的生成,但是觉得略显繁琐,并不是十分令人满意,有些强行用栈的感觉。但是在这个过程中,至少对栈的原理、后进先出特点更加熟悉,用得更加熟练。
    • 清除了所有的全局变量,都使用传参的方式完成。
    • 编码以后才发现,写的类图还是有一些不够完善的地方,比如在一开始并没有想到交互窗口这个类,写完交互窗口以后,就让所有零散的函数都“各得其所”了。要是没有编码,就有些纸上谈兵的感觉,写的类图未必能真正实现。编码以后,收获还是很大的。
  • 相关阅读:
    MQTT Retained消息和LWT和Keep Alive(转)
    ant design 1.x中走马灯记录
    通过Array构造指定长度的数组
    Unicode编码与中文的相互转换
    在谷歌控制台调试代码如何换行
    辅助工具
    vue中扩展函数,除了原有的事件中传的参数增加自己传的参数
    使用allparis正交法,生成测试用例
    vue 字写的tab切换两个列表,在IOS上出现列表数据错乱的问题。
    Redis中的原子操作(2)redis中使用Lua脚本保证命令原子性
  • 原文地址:https://www.cnblogs.com/vancasola/p/6850693.html
Copyright © 2020-2023  润新知