zoukankan      html  css  js  c++  java
  • 《面向对象程序设计》课程作业四

    OOA(Object Oriented Analysis,面向对象分析): 从客观存在的事务和事务之间的关系,归纳出有关对象(包括对象的属性和行为)以及对象之间的联系,并将具有相同属性和行为的对象用一个类(class)来表示。建立一个能够反映真实情况的需求模型。

    OOD(Object Oriented Design,面向对象设计):将面向对象分析阶段形成的需求模型进一步具体设计。如类的设计(继承、派生、类与类之间的消息协作)、算法的设计等。采取通用的工具,如流程图、类图等来描述。

    在编码前我有手写过一些文字,大概就是要分几个函数,然后各个函数大概的接口长什么样子(不确定,只是初步),负责什么功能。我的前期草稿大概就这样,没有像这次题目要求的这么细致。很多东西都是到了真正编码的过程中遇到了问题or发现了更好的方法才加以改进的。

    我觉得我把我的代码解释一遍就达到作业的要求了!一图胜千言,但发现画出清晰的图并不是很容易的事情。

    类与接口

    对于类,我只设计了一个表达式类。剩下的东西我觉得不足以用“类”去归纳它们。我现在是这么认为的:如果一个“东西”是名词,那么就可以写成类,如果这个东西是“动词”,那我觉得不应该写成类。比方说,这个“东西”是“表达式”,那么就可以写一个表达式类,里面私有成员包括中缀形式的式子、逆波兰形式式子、表达式的正确结果,以及一些方法。但如果这个“东西”是“交换”,“交换”是一个方法,那么我不喜欢把它写成类,而是写成swap函数。

    如果要把swap写成类,那么方法就是对字符swap、对整数swap、…… 我不太赞成,我觉得应该是对一个“名词”写一个类,里面包含一个方法,叫做swap。

    类图如下:

    主函数框架如下(虽然觉得UML的图很高大上,然而还是不会画,所以先用lowb流程图):

    主函数串接了以下模块:语言资源文件模块、输入输出以及输入合法性检测模块、表达式相关以及答案检测的核心模块。主函数为上述模块提供输入,并将结果显示给用户,通过输出到文件或者标准输出的方式。

    类中通信过程以及算法:

    我这里主要想通过流程图介绍自己的思想。在图中我标注③和④的部分是主要的算法所在。但这两个部分的东西可以通过上网查阅资料学习,这里就不做流程图了。

    下图是表达式产生的过程:

    三个私有成员:expression 是显示给用户的中缀表达式,用 reversePolishNotation 来计算value 。用 value 和用户输入的答案比较正确与否

    我的思路:长的表达式是由小part和运算符组成的。part可以是一个数,也可以是一个形如 (a+b) 的式子。part 和 part 之间再用运算符(oper)连接。整个式子的形式是(以式子的part数为3举例):part oper part oper part 通过 part 来实现表达式的生成是我的想法,好处是:容易加入括号、容易实现不同长度且形式随机的表达式、并简化了程序的编写。

    只要 part 内部的运算值合法,且 part 和 part 之间的运算值合法,就可以认为整个式子的运算值一定合法。不合法的例子包括:除以0和除不尽(对于小学生直接抛弃除不尽的除法式子)。可以看出来,都和除法有关。

    解决方案:

    • 单个 part 内,比较容易,part 如果是形如 (a/b) 的式子,让 b 不为 0 即可。

    • part 和 part之间,用 val1 存前一个 part 的值,val2 存后一个 part 的值。当 part 和 part 之间的符号出现了乘除号,是 val1 和 val2 派上用场的时候。具体就看图吧。


    最后说一下感想:我觉得这是栋哥这学期以来布置的最好的一次作业,甚至应该在寒假作业三之前布置这个作业,而不是先布置编码,让大家知道:一个好的工程不只有写代码(当然敲代码也很重要。。。)。先给出大致的框架,然后再修修补补,这样也不至于在编码的时候特别暴力或者无头绪。

    附上学习链接:

  • 相关阅读:
    hdu 5646 DZY Loves Partition
    bzoj 1001 狼抓兔子 平面图最小割
    poj 1815 Friendship 最小割 拆点 输出字典序
    spoj 1693 Coconuts 最小割 二者取其一式
    hdu 5643 King's Game 约瑟夫环变形
    约瑟夫环问题
    hdu 5642 King's Order
    CodeForces 631C Report
    1039: C语言程序设计教程(第三版)课后习题9.4
    1043: C语言程序设计教程(第三版)课后习题10.1
  • 原文地址:https://www.cnblogs.com/ZCplayground/p/6855930.html
Copyright © 2011-2022 走看看