UML与OO总结
在面向对象(OO)程序设计中,UML(统一建模语言)是一种标准化的建模语言,用于可视化、规范、构建和记录软件系统的构件。正向建模与开发是软件工程中一个重要的过程,它通过先建立模型再进行代码编写,从而提高软件开发的效率和质量。
正向建模与开发
正向建模与开发的过程
- 需求分析:
- 首先,需要与客户和相关利益方进行沟通,了解系统需求。通过需求分析,确定系统的功能、性能和约束条件。
- 生成需求文档,作为后续建模和开发的依据。
- 系统建模:
- 使用UML图对系统进行建模,主要包括用例图、类图、对象图、顺序图、协作图、状态图、活动图、构件图和部署图。
- 用例图:展示系统的功能及其与外部实体(如用户、外部系统)的交互。
- 类图:展示系统中的类及其关系,类的属性和方法。
- 顺序图:展示对象之间的交互顺序。
- 状态图:展示对象的状态变化。
- 活动图:展示系统活动的流程。
- 使用UML图对系统进行建模,主要包括用例图、类图、对象图、顺序图、协作图、状态图、活动图、构件图和部署图。
- 模型验证:
- 对UML模型进行验证,确保其正确性和完整性。验证模型是否满足需求,是否存在逻辑错误或遗漏。
- 详细设计:
- 细化UML模型中的类图和顺序图,补充详细的类方法、属性和交互细节。
- 确定类的具体实现方式,如数据结构、算法和设计模式的应用。
- 代码生成:
- 根据详细设计的UML模型编写代码。在这一阶段,模型作为指导,开发人员根据模型中的类和交互关系进行代码实现。
- 现代的开发工具(如IDE)可以将UML模型转换为初步的代码框架,减少手工编码的工作量。
- 测试与验证:
- 编写测试用例,对生成的代码进行单元测试、集成测试和系统测试,确保其功能和性能符合需求。
- 根据测试结果,进行代码的调试和优化。
正向建模与开发的优点
-
提高系统的可维护性:
- 通过详细的模型描述,系统的结构和功能一目了然,便于后期维护和升级。
-
增强团队协作:
- UML模型作为统一的沟通工具,帮助团队成员更好地理解和协作,减少沟通障碍和误解。
-
降低开发风险:
- 通过前期详细的建模和设计,发现并解决潜在的问题,降低后期开发过程中出现重大问题的风险。
-
提高开发效率:
- 通过自动生成代码框架和指导代码编写,提高开发效率,减少手工编码的工作量。
第四作业的架构设计
架构设计
- 在第13次作业设计中,实现了图书馆借书、还书、查询、预约和预约取书功能,能够实现开馆和闭馆整理图书
- 设计了
CirculationDesk
类,用来实现借书、还书的功能 - 设计了
Order
类,该类是预约订单类,统一管理学生的预约请求 - 设计了
ReservationDesk
类,实现预约功能 - 设计了
User
类————学生 - 在
Library
类中管理学生和各类书籍,实现查询功能;同时管理借还处和预约处
- 设计了
- 在第14次作业设计中,新实现了续借和图书漂流的功能;新增了图书借阅期限限制
- 新增了
Book
类来管理被学生借走的书籍,在其中实现了对图书借阅时间的管理 - 新增了
DriftCounter
来实现图书漂流的功能 - 当续借时,更新
Book
中借阅截止时间
- 新增了
- 在第15次作业设计中引入用户信用分系统
- 在
User
类中新增credit
属性,以及增减信用分的一系列方法 - 在对应的操作中新增对
credit
的判断以及对应的增减行为
- 在
代码与UML模型设计的追踪关系
在软件开发过程中,保持最终代码设计与UML模型设计的一致性和可追踪性是确保系统质量的重要手段。以下是对比分析最终代码设计和UML模型设计之间追踪关系的几个关键方面:
1. 设计一致性
1.1 UML模型设计
UML模型是系统设计的蓝图,包含了系统的用例图、类图、顺序图、活动图等,描述了系统的结构和行为。
1.2 最终代码设计
最终代码是实际系统的实现,必须与UML模型保持一致,确保系统按照设计预期运行。
追踪关系:
- 通过模型驱动开发(MDD),从UML模型生成初始代码框架,确保设计意图在代码中得到体现。
- 使用代码注释和文档化手段,在代码中明确标识与UML模型的对应关系。
2. 需求变更管理
2.1 UML模型设计
当需求发生变更时,UML模型需要及时更新,以反映最新的需求和设计。
2.2 最终代码设计
代码需要根据更新后的UML模型进行相应修改,确保实现与设计的一致性。
追踪关系:
- 使用需求跟踪矩阵(RTM)记录需求、设计和实现之间的关系,确保每个需求的变更在设计和实现中得到反映。
- 通过工具支持(如版本控制系统和追踪工具),实现对需求变更的自动追踪和同步更新。
3. 双向工程
3.1 UML模型设计
设计过程中可能需要从代码中反向生成UML模型,以便分析和优化现有设计。
3.2 最终代码设计
从UML模型生成代码框架,或从代码生成UML模型,以保持设计与实现的一致性。
追踪关系:
- 使用支持双向工程的工具(如Enterprise Architect、Visual Paradigm、IBM Rational Software Architect),实现UML模型与代码的同步更新。
- 定期进行模型与代码的一致性检查,确保模型和代码相互匹配。
4. 代码与模型的文档化
4.1 UML模型设计
UML模型作为系统设计的文档,需要详细记录设计意图、结构和行为。
4.2 最终代码设计
代码中需要包含与UML模型对应的注释和文档,帮助开发人员理解设计意图和实现细节。
追踪关系:
- 在代码注释中明确标识与UML模型的对应关系(如类、方法对应的UML元素)。
- 生成详细的设计文档,包含UML模型和代码的对应关系,方便查阅和维护。
5. 自动化测试与验证
5.1 UML模型设计
在设计阶段定义测试用例,确保模型设计满足需求。
5.2 最终代码设计
实现阶段编写自动化测试代码,验证系统功能和性能。
追踪关系:
- 从UML模型中的测试用例生成对应的自动化测试代码,确保测试覆盖所有设计需求。
- 通过测试结果的反馈,验证代码实现与模型设计的一致性,并进行相应的调整和优化。
架构设计思维的演进
第一单元:鲁棒性设计和层次化设计
内容:
- 鲁棒性设计:确保系统在各种异常情况下仍能正确运行。
- 层次化设计:通过划分层次来实现模块化设计,简化系统复杂性。
演进:
鲁棒性设计的原则让我意识到,设计系统时不仅要考虑正常运行情况,还要考虑系统在异常和极端情况下的表现。通过这一单元的学习,我的设计思维从单纯的功能实现扩展到关注系统的健壮性和模块化。
第二单元:层次化设计和线程安全设计
内容:
- 层次化设计:进一步深化层次化设计的原则。
- 线程安全设计:确保多线程环境下系统的正确性,避免竞态条件和死锁。
演进:
在这一单元,我开始深入理解并发编程和线程安全的挑战。层次化设计在并发环境中的应用,使我能够设计出更为稳定和可靠的系统。通过学习线程安全设计,我的架构设计思维从关注单线程的正常运行扩展到考虑多线程环境下的同步和互斥问题。
第三单元:层次化设计和规格化设计
内容:
- 层次化设计:持续应用和深化层次化设计的原则。
- 规格化设计:通过定义明确的接口和契约,确保模块之间的交互一致性。
演进:
规格化设计的应用使得系统更加清晰和易于维护。我的设计思维从关注系统的整体结构扩展到关注模块间的接口和交互细节,通过契约确保系统的可靠性和可扩展性。
第四单元:层次化设计和模型化设计
内容:
- 层次化设计:巩固和应用层次化设计原则。
- 模型化设计:使用模型来抽象和描述系统,帮助分析和设计复杂系统。
演进:
模型化设计使我能够从全局视角分析和描述系统,增强了对系统复杂性的管理能力。我的设计思维从注重具体实现细节扩展到关注系统的抽象描述和模型化设计,通过模型确保系统的一致性和可理解性。
测试思维的演进
第一单元:输入结构导向的测试设计和程序架构导向的测试设计
内容:
- 输入结构导向的测试设计:基于输入数据结构设计测试用例,确保系统在各种输入情况下的正确性。
- 程序架构导向的测试设计:基于系统架构设计测试用例,验证系统的整体架构和模块间的协作。
演进:
在这一单元,我开始认识到测试不仅是验证功能实现的手段,还可以通过输入结构和架构层次的测试确保系统的稳健性。测试思维从简单的功能测试扩展到考虑系统的输入处理和整体架构的正确性。
第二单元:线程并发导向的测试设计和交互场景导向的测试设计
内容:
- 线程并发导向的测试设计:设计并发测试用例,验证系统在多线程环境下的正确性。
- 交互场景导向的测试设计:基于系统各部分交互的测试设计,确保复杂交互场景下的系统稳定性。
演进:
在这一单元,我学会了如何设计并发测试用例来验证系统在多线程环境下的正确性。通过交互场景导向的测试设计,我能够更好地模拟和测试系统在复杂交互场景下的行为。测试思维从关注单线程的功能测试扩展到并发和交互场景的综合测试。
第三单元:单一契约导向的测试设计和层次契约导向的测试设计
内容:
- 单一契约导向的测试设计:基于单一模块的契约(接口)设计测试用例,确保模块的独立正确性。
- 层次契约导向的测试设计:基于层次间的契约设计测试用例,确保模块集成时的正确性。
演进:
在这一单元,我学会了如何通过契约导向的测试设计来验证模块和层次之间的交互。单一契约导向的测试确保了每个模块的独立正确性,而层次契约导向的测试确保了模块集成时的正确性。测试思维从单个模块的测试扩展到层次之间的契约测试。
第四单元:模型结构导向的测试设计和模型语义导向的测试设计
内容:
- 模型结构导向的测试设计:基于模型结构设计测试用例,确保系统结构的正确性。
- 模型语义导向的测试设计:基于模型语义设计测试用例,确保系统行为的正确性。
演进:
在这一单元,我学会了如何通过模型结构和模型语义导向的测试设计来验证系统的结构和行为。模型结构导向的测试确保系统结构符合设计模型,而模型语义导向的测试确保系统行为符合设计模型的语义。测试思维从具体实现的测试扩展到模型层次的验证和验证系统的抽象描述。
课程收获
模型结构设计测试用例,确保系统结构的正确性。
- 模型语义导向的测试设计:基于模型语义设计测试用例,确保系统行为的正确性。
演进:
在这一单元,我学会了如何通过模型结构和模型语义导向的测试设计来验证系统的结构和行为。模型结构导向的测试确保系统结构符合设计模型,而模型语义导向的测试确保系统行为符合设计模型的语义。测试思维从具体实现的测试扩展到模型层次的验证和验证系统的抽象描述。
课程收获
总而言之,从 OO 课中学到了很多,自己的编程能力和架构设计能力也有了较大提升。美中不足的是课程的容量以及任务量与学分不匹配,3学分学到了6学分的内容,血赚?血赚!