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. 为何GRE可以封装组播报文而IPSEC却不行?

    Author       : Email         : vip_13031075266@163.com Date          : 2021.01.24 Copyright : 未经同意不得 ...

  2. 【PHP数据结构】二叉树的遍历及逻辑操作

    上篇文章我们讲了许多理论方面的知识,虽说很枯燥,但那些都是我们今天学习的前提,一会看代码的时候你就会发现这些理论知识是多么地重要了.首先,我们还是要说明一下,我们学习的主要内容是二叉树,因为二叉树是最 ...

  3. symfony的几个请求变量和方法

    请求变量 // 全部变量 $request->query->all(); // 指定变量 $request->query->get('abc'); 请求方式 $request- ...

  4. TP5 windows中执行定时任务

    1 首先先写个自定义命令文件 比如 Test 2 在网站根目录下建立文件 crond.bat ,内容:(把你在cmd上操作流程写一遍) D: cd workspace\wamp\tp5 D:\PHPW ...

  5. sonar-scanner的使用

    在服务器搭建sonarqube后,本地的windows个人电脑如何使用sonar-scanner? 在服务器搭建sonarqube后,每个人都可以在本地使用sonar-scanner扫描代码. son ...

  6. docker挂载目录问题:touch: cannot touch '/var/jenkins_home/copy_reference_file.log': Permission denied

    docker 运行后, 执行docker logs -f myjenkins时报错:touch: cannot touch '/var/jenkins_home/copy_reference_file ...

  7. php设计模式--生成器模式

    生成器模式 require "D:\\xxx\bild.php"; require "D:\\xxx\cx_bild.php"; require "D ...

  8. postman 插件安装

    本文只是基于 Chrome 浏览器的扩展插件来进行的安装,并非单独应用程序. 首先,你要台电脑,其次,安装有 Chrome 浏览器,那你接着往下看吧. 1. 官网安装(别看) 打开官网,https:/ ...

  9. linux,apache,php,mysql常用的查看版本信息的方法

    1. 查看linux的内核版本,系统信息,常用的有三种办法:   uname -a:   more /etc/issue;    cat /proc/version; 2. 查看apache的版本信息 ...

  10. python学习笔记(六)-集合

    集合是一个无序不重复元素的集.基本功能包括关系测试和消除重复元素.集合对象还支持union(联合),intersection(交),difference(差)和sysmmetric differenc ...