BUAA-OO-UML
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的更多相关文章
- 「BUAA OO Unit 2 HW8」第二单元总结
「BUAA OO Unit 2 HW8」第二单元总结 目录 「BUAA OO Unit 2 HW8」第二单元总结 Part 0 前言 Part 1 第五次作业 1.1 作业要求 1.2 架构设计 1. ...
- 「BUAA OO Unit 4 HW16」第四单元总结与课程回顾
「BUAA OO Unit 4 HW16」第四单元总结与课程回顾 目录 「BUAA OO Unit 4 HW16」第四单元总结与课程回顾 Part 0 第四单元作业架构设计 架构设计概要 AppRun ...
- 「BUAA OO Pre」Git生成多个ssh key并连接GitLab仓库
「BUAA OO Pre」Git生成多个ssh key并连接GitLab仓库 Part 0 前言 写作背景 笔者在配置学校GitLab的ssh key时遇到一些问题,原因应为曾经配置过GitHub的s ...
- 「BUAA OO Pre」 Pre 2总结回顾概览
「BUAA OO Pre」 Pre 2总结回顾概览 目录 「BUAA OO Pre」 Pre 2总结回顾概览 Part 0 前言 写作背景 定位 您可以在这里期望获得 您在这里无法期望获得 对读者前置 ...
- 「BUAA OO Unit 1 HW1」面向测试小白的简易评测机
「BUAA OO Unit 1 HW1」面向测试小白的简易评测机 声明:本评测机所使用数据生成来自郭鸿宇同学,这对本评测机非常重要 目录 「BUAA OO Unit 1 HW1」面向测试小白的简易评测 ...
- UML结构与解析——BUAA OO第四单元作业总结
UML与解析架构 UML是什么 统一建模语言(英语:Unified Modeling Language,缩写 UML)是非专利的第三代建模和规约语言.UML是一种开放的方法,用于说明.可视化.构建和编 ...
- BUAA OO 2019 第一单元作业总结
目录 总 架构 Controller Model 输入处理 代码静态分析 行数 方法复杂度 UML 类图 优点 缺点 坑 输入 非法的空白字符 输入的简并处理 运算 浅拷贝 可变类型与不可变类型 ...
- [BUAA OO]第四次博客作业
一. 测试与正确性论证的区别 在最后一个单元的OO作业中,我们主要进行了代码的测试与正确性论证工作.这俩者在作业中的体现分别是junit单元测试以及jsf论述语言.这两者在java代码开 ...
- BUAA OO 2019 第二单元作业总结
目录 总 架构 controller model view 优化算法 Look 算法 多种算法取优 预测未来 多线程 第五次作业 第六次作业 第七次作业 代码静态分析 UML 类图 类复杂度 类总代码 ...
- OO——UML解析
目录 第四单元博客作业 一.前两次作业架构设计 1. 第一次作业 2. 第二次作业 二.架构设计以及对OO方法理解的演进 1. 表达式求导 2. 多线程电梯 3. 地铁线路查询 4. UML图的解析 ...
随机推荐
- springcloud3(五) spring cloud gateway动态路由的四类实现方式
写这篇博客主要是为了汇总下动态路由的多种实现方式,没有好坏之分,任何的方案都是依赖业务场景需求的,现在网上实现方式主要有: 基于Nacos, 基于数据库(PosgreSQL/Redis), 基于Mem ...
- java版gRPC实战之二:服务发布和调用
欢迎访问我的GitHub https://github.com/zq2599/blog_demos 内容:所有原创文章分类汇总及配套源码,涉及Java.Docker.Kubernetes.DevOPS ...
- 【第九篇】- Git 标签之Spring Cloud直播商城 b2b2c电子商务技术总结
Git 标签 如果你达到一个重要的阶段,并希望永远记住那个特别的提交快照,你可以使用 git tag 给它打上标签. 比如说,我们想为我们的 xxx 项目发布一个"1.0"版本. ...
- WPF 过渡效果
http://blog.csdn.net/lhx527099095/article/details/8005095 先上张效果图看看 如果不如您的法眼 可以移步了 或者有更好的效果 可以留言给我 废话 ...
- Excel中怎么快速选中区域
连续的表格选定 一张表格中会有不同的部分,若想选择某一个区域的数据的时候我们可以使用快捷键Ctrl+A,这是需要先选中第一个单元格,接着点击Ctrl+A即可选中连续的单元格. 汇总后需要汇 ...
- 聊聊ReentrantLock基于AQS的公平锁和非公平锁的实现区别
ReentrantLock锁的实现是基于AQS实现的,所以先简单说下AQS: AQS是AbstractQueuedSynchronizer缩写,顾名思义:抽象的队列同步器,它是JUC里面许多同步工具类 ...
- POJ1426——Find The Multiple
POJ1426--Find The Multiple Description Given a positive integer n, write a program to find out a non ...
- Markdown公式用法大全
目录 基本语法 两种代码引用方式 插入链接并描述 插入图片 有序列表 无序列表 分割线 表格 如何插入公式 如何输入上下标 如何输入括号和分隔符 如何输入分数 如何输入开方 如何输入省略号 如何输入矢 ...
- 在PHP中操作临时文件
关于文件相关的操作,想必大家已经非常了解了,在将来我们刷到手册中相关的文件操作函数时也会进行详细的讲解.今天,我们先来了解一下在 PHP 中关于临时文件相关的一些内容. 获取 PHP 的默认临时创建文 ...
- flex 简单设置
/*弹性盒子 start*/ /* ============================================================ flex:定义布局为盒模型 flex-v: ...