BUAA-OO-UML

作业架构设计分析

第一次作业

类图如下:

这个架构十分简明,就是在底层数据和调用者之间建立起一层隔离层。但其实可以将转换过程延迟到调用阶段。

第二次作业

类图如下:

架构基本同上。

心得体会

为什么要 OOP

最早的 OOP 语言是 Simula,意为“模拟系统”。当需要模拟系统时,我们可以这样考虑:对于系统中的每个对象,都构造一个与之对应的计算对象;对于系统中的每种活动,都定义一个与之对应的计算过程;整个系统分成可以相互协作的几个部分,每个部分继续细分成多个小部分,依次类推;每个部分都具有其独立性,不同的部分不应该互相干涉。为了实现以上几点,我们有了抽象、有了消息传递、有了继承和多态、有了闭包,封装和隔离等等一系列的名词。这就是 OOP 所要表达的思想。

遵循 OOP 思想开发的软件,应是模块化的且各模块是具有内聚力的,否则将无法很好地去模拟一个系统。而正是这样的要求,使得其实易于维护的:需要扩充新对象或新活动时,或是需要进行修正时,只需在某个小局部进行修改就可以完成。因为它天然地模块化、天然地存在着抽象屏障。

OOP 是好东西。

OOP 是必要的吗

虽然 OOP 是好,但并不适合所有场景。写 GUI、OS,这当然是十分适合的,但如果是表达式解析这种数据和操作不是捆绑在一起的场景,就很难受了。

而且 OOP 并不是那么容易就能实现的。总的来说,两点,抽象和封装。前者要使得某个“类”的所有子类都能被一视同仁地对待,后者要使得某个“类”的外延尽可能地小的同时满足所有可能的要求。并不是用了支持 OOP 表达的语言就是 OOP,该恶心的还是恶心。

归根到底,我们的目标都是使得软件易于开发、易于维护,也就是降低软件开发复杂度,是否采取 OOP 与目标的实现并无相悖之处。解决问题才是关键,唯 OOP 论只会显得可笑。

建议

  • 这门课可以考虑写一个逐步开发的 OS
  • 可以考虑换教学语言,譬如 Erlang, Scheme 之类的
  • 引入 JML 非常好,但是工具链不齐全,隔壁的 C++20 都有语言标准层面上的 Contract 了。如果还想继续使用 JML,至少得弄一套完整可用的工具链供学生使用,或者增加限制减少语言特性以免工具链不支持

BUAA-OO-UML的更多相关文章

  1. 「BUAA OO Unit 2 HW8」第二单元总结

    「BUAA OO Unit 2 HW8」第二单元总结 目录 「BUAA OO Unit 2 HW8」第二单元总结 Part 0 前言 Part 1 第五次作业 1.1 作业要求 1.2 架构设计 1. ...

  2. 「BUAA OO Unit 4 HW16」第四单元总结与课程回顾

    「BUAA OO Unit 4 HW16」第四单元总结与课程回顾 目录 「BUAA OO Unit 4 HW16」第四单元总结与课程回顾 Part 0 第四单元作业架构设计 架构设计概要 AppRun ...

  3. 「BUAA OO Pre」Git生成多个ssh key并连接GitLab仓库

    「BUAA OO Pre」Git生成多个ssh key并连接GitLab仓库 Part 0 前言 写作背景 笔者在配置学校GitLab的ssh key时遇到一些问题,原因应为曾经配置过GitHub的s ...

  4. 「BUAA OO Pre」 Pre 2总结回顾概览

    「BUAA OO Pre」 Pre 2总结回顾概览 目录 「BUAA OO Pre」 Pre 2总结回顾概览 Part 0 前言 写作背景 定位 您可以在这里期望获得 您在这里无法期望获得 对读者前置 ...

  5. 「BUAA OO Unit 1 HW1」面向测试小白的简易评测机

    「BUAA OO Unit 1 HW1」面向测试小白的简易评测机 声明:本评测机所使用数据生成来自郭鸿宇同学,这对本评测机非常重要 目录 「BUAA OO Unit 1 HW1」面向测试小白的简易评测 ...

  6. UML结构与解析——BUAA OO第四单元作业总结

    UML与解析架构 UML是什么 统一建模语言(英语:Unified Modeling Language,缩写 UML)是非专利的第三代建模和规约语言.UML是一种开放的方法,用于说明.可视化.构建和编 ...

  7. BUAA OO 2019 第一单元作业总结

    目录 总 架构 Controller​ Model​ 输入处理 代码静态分析 行数 方法复杂度 UML​ 类图 优点 缺点 坑 输入 非法的空白字符 输入的简并处理 运算 浅拷贝 可变类型与不可变类型 ...

  8. [BUAA OO]第四次博客作业

      一.      测试与正确性论证的区别 在最后一个单元的OO作业中,我们主要进行了代码的测试与正确性论证工作.这俩者在作业中的体现分别是junit单元测试以及jsf论述语言.这两者在java代码开 ...

  9. BUAA OO 2019 第二单元作业总结

    目录 总 架构 controller model view 优化算法 Look 算法 多种算法取优 预测未来 多线程 第五次作业 第六次作业 第七次作业 代码静态分析 UML 类图 类复杂度 类总代码 ...

  10. OO——UML解析

    目录 第四单元博客作业 一.前两次作业架构设计 1. 第一次作业 2. 第二次作业 二.架构设计以及对OO方法理解的演进 1. 表达式求导 2. 多线程电梯 3. 地铁线路查询 4. UML图的解析 ...

随机推荐

  1. uniapp 获取用户手机号

    参考资料: 微信小程序官方文档 uniapp开发微信小程序获取用户手机号 页面增加一个按钮 <button open-type="getPhoneNumber" @getph ...

  2. Hash值和位运算

    一.Hash 1.md5是hash算法,不可逆,还原的是暴力穷举的方式解析的:加盐之后穷举也不能还原: 2.压缩映射会有重复,即哈希冲突: 二.ConcurrentHashMap 1.putIfAbs ...

  3. git各种操作:基本操作 and 多人协作 and 冲突解决

    git基本操作 git 上次文件到远程仓库(参考:https://blog.csdn.net/beiqiaofeng123/article/details/104859326) 如果第一次上传,配置一 ...

  4. 每日学习——iframe标签伪造ajax

    刚开始学习ajax,好难,看不懂啊看不懂. 伪造ajax加载网页 <!DOCTYPE html> <html> <head lang="en"> ...

  5. PHP设计模式之访问者模式

    访问者,就像我们去别人家访问,或者别人来我们家看望我们一样.我们每个人都像是一个实体,而来访的人都会一一的和我们打招呼.毕竟,我们中华民族是非常讲究礼数和好客的民族.访问者是GoF23个设计模式中最复 ...

  6. Shell系列(11)- 位置参数变量(4)

    作用 往shell脚本里面传递参数 位置参数变量 作用 $n n 为数字,$0 代表命令本身,$1-$9 代表第一到第九个参数,十以上的参数需要用大括号包含,如 ${10} $* 这个变量代表命令行中 ...

  7. Centos7安装配置Gitlab-CE

    GitLab介绍 GitLab:是一个基于Git实现的在线代码仓库托管软件,你可以用gitlab自己搭建一个类似于Github一样的系统,一般用于在企业.学校等内部网络搭建git私服. 功能:Gitl ...

  8. Qt中的ui文件转换为py文件

    将pyuic5 -o demo.py demo.ui写入ui-py.bat文件(自定义文件),将ui文件与ui-py.bat文件放在同一文件夹,双击.bat文件即可生成.py文件

  9. 鸿蒙内核源码分析(调度队列篇) | 内核有多少个调度队列 | 百篇博客分析OpenHarmony源码 | v6.05

    百篇博客系列篇.本篇为: v06.xx 鸿蒙内核源码分析(调度队列篇) | 内核有多少个调度队列 | 51.c.h .o 任务管理相关篇为: v03.xx 鸿蒙内核源码分析(时钟任务篇) | 触发调度 ...

  10. mac上通过git推送时忽略node_modules文件夹

    node_modules出现改动一般不需要通过git推送,如果不忽略node_modules每次安装新的包会出现几千条新变动,并没有必要推送 1.通过终端进入项目根目录 创建 .gitignore 文 ...