BUAA-OO-Unit4
一、正向建模与开发
本单元的正向建模体现在利用 UML 图进行程序设计,主要包括类图、顺序图、状态图。
类图:
- 类图描述了系统中对象的类型以及它们之间存在的各种静态关系。用来表示类、接口以及它们之间的静态结构和关系。
顺序图:
- 顺序图根据时间序列展示对象如何进行协作。它展示了在用例的特定场景中,对象如何与其他对象交互。通过描述对象之间发送消息的时间顺序显示多个对象之间的动态协作。
状态图:
- 状态机图对一个单独对象的行为建模,指明对象在它的整个生命周期里,响应不同事件时,执行相关事件的顺序。用来表示指定对象,在整个生命周期,响应不同事件的不同状态。
二、架构设计
本单元 UML 类图如下:

实现的各个类是对图书馆中的各个部分的实现。包括:
- 最大的
Library 类,用于处理各个请求。 Student 类,为一名用户,包括其拥有的书。Bookshelf 类,存储书架中的书。BrOffice 类,存放借还处的书籍,并记录非正式书籍正常借还次数。Appointment 类,存放预约处的书籍。DriftCorner 类,存放图书漂流角处的书籍。
除了 Main 与 Library 的类主要负责存储信息,Main 类用于输入,Library 类处理输入。
三、四个单元架构设计思维的演进
从先导课的冒险者系统,到多项式化简,再到电梯调度、 JML 、图书管理系统,我的设计思维如下:
- 冒险者系统主要在学语言,同时对面向对象思想有了一定的了解;
- 多项式化简主要体会到高内聚低耦合对于整体设计、
debug的好处; - 电梯调度学习到各种设计模式,主要运用的如 “生产者-消费者” 模式;
JML 主要在学习对于设计时各个模块功能的明确,学会在规格约束下进行编程;- 图书管理系统则是学习了正向建模代码实现,学习了事先规划,理清设计思路。
四、 四个单元测试思维的演进
测试的方法多种多样,在课程中,设计思维学到的有:
- 先导课中,主要在于
Junit 单元测试,但追求的是覆盖率。 - 在多项式化简中,还有余力进行白箱测试,可以去分析代码逻辑,找出逻辑问题。
- 在电梯调度中,测试多线程时用了更多的工具,去监视各个线程的状态。
- 在
JML 中是根据 “规格” 编写 Junit 单元测试,对于单元的测试更加细致。 - 图书管理系统中,主要在实现黑箱测试,从结果中查看问题所在。
五、总课程收获
OO 课程最终结束,我在这门课上学到的最多的是面向对象的思想:
- 掌握了面向对象编程的基本概念,如类、对象、继承、多态、封装和抽象。
- 了解并能够应用常见的设计模式,如单例模式、工厂模式、观察者模式、装饰器模式等。
- 通过面向对象的设计,能够创建高内聚、低耦合的模块,使代码更加易于重用和维护。
- 学到SOLID原则(单一职责原则、开放-封闭原则、里氏替换原则、接口隔离原则和依赖倒置原则)。
- 学会了使用统一建模语言(UML)来创建类图、序列图等设计文档,这些文档可以帮助更好地沟通和理解系统设计。
感想:
- 系统性思维对于复杂问题处理十分有利,要求设计者从整体出发,考虑系统各部分的交互和整体结构。这一点主要体会在先导课中,这种数次的迭代对于练习系统性编程有着很大的益处。
- 我们需要在设计和实现之间找到平衡。过度设计会增加复杂性和开发成本,而欠缺设计会导致代码难以维护和扩展。如二单元中调度算法太复杂导致编程困难,先导课中缺乏设计导致多次重构。
总之,OO 对我的代码能力、程序设计能力的提升是显而易见的,其中坎坷不断,但收获是无法忽视的。