444
社区成员
正向建模与开发的基本思想是从系统或应用程序的需求出发,通过一系列的步骤和技术,逐步创建系统的各个组件和功能,并最终实现整个系统。在这个过程中,开发者根据需求规约和设计文档,按照一定的设计模式和开发规范,逐步编写代码、构建模块、设计界面等。
简单说,正向有以下几个主要特点:
下面将分别介绍本次作业与以上特点的联系
需求导向:任务中明确了图书馆系统的需求,包括不同类型的管理员的职责和交互方式,图书管理处的职责,自助机器的功能等。这些需求可以作为正向建模开发的基础,开发者可以根据需求明确系统的功能和特性。
逐步迭代:本单元的功能实现由最简单的借还与预约,逐步迭代到多学校,复杂借还关系,进行了迭代开发。
模块化设计:任务中明确了不同的角色和组件,如借还管理员、整理管理员、预定管理员、图书管理处和自助机器等。开发者可以将系统划分为不同的模块和组件,每个模块负责特定的功能,并通过模块化的设计和开发提高系统的可维护性、可扩展性和代码的重用性。 值得一提的是,本单元要求完成状态图等,也帮助了模块化设计的思想落地实现。
遵循标准和规范:本单元对图书馆运作的流程有详细的标准规范,开发过程中需要遵守规范
集成测试:通过流程图状态图,理清结束流程,进行模块化设计,有助于在开发完成后,根据流程中的特殊细节或是流程整体进行集成测试与验证,保证各个部件单独运行正确以及整体功能的正确性。
在开发过程中,利用 UML 图进行系统架构的设计和抽象,以及进行模块化设计和代码实现。同时,根据需求规约和设计文档,逐步构建和开发图书馆模拟系统的各个组件和功能,实现系统的需求。以上的开发过程可以被看做正向建模开发的很好体现。
本单元最后一次作业的架构图如上。
上述架构主要实现了图书馆类,用户类,校际借书通道类,图书与书架类。并将大多数管理员的功能直接实现到了图书馆类,这样做的最主要原因坦白说应该是烤漆时间较少的妥协。
在没学习本课程直到刚开始学习时,我的架构设计思维相对较为简单和线性。我主要关注问题的功能需求,并试图将其转化为代码。在这个阶段,我可能会倾向于编写大而全的类,将所有的功能都放在一个类中处理。这样的设计可能会导致代码的可维护性差,扩展困难,并且缺乏灵活性。
通过学习面向对象设计的概念和原则,我逐渐开始运用面向对象思维来进行架构设计。我开始关注类之间的关系和交互,将系统划分为多个独立的对象,并封装它们的属性和方法。这使得我的设计更加模块化和可扩展。我学会了使用继承和多态等特性,以实现代码的重用和灵活性。
第二单元开始,我开始注重多线程的设计与性能以及线程安全的问题,我学到了生产者消费者模型,学会了锁与死锁等等。但是说实话这一单元比较遗憾的是因为第二次作业经历了一整周的生病,导致最终实现效果并不好。
本单元主要学会了根据规格设计开发代码,并针对每个模块进行功能性测试,我意识到设计模式是解决常见软件设计问题的重要工具。
第四单元最大的收获便是对UML图的认识,以及对于模块化更深的理解,尤其是先有架构,后实现代码的开发模式,因为之前我往往不会完整的设计好架构,而是对架构有了大概的想法便开始写代码。
通过参与实际项目和不断的实践,我逐渐提升了架构设计思维。我学会了在项目中权衡不同的设计选择,根据需求和约束条件做出合理的决策。我也开始学会通过迭代和反馈循环来不断改进设计,从而优化系统的性能和质量。
测试思维的演进应该主要是从整体测试到单元测试,从黑盒测试,到黑盒白盒相结合的转变。并且我认为测试方法设计的合理与否,全面与否很大程度会决定你测试效果的上限,如果没有好的全面的测试方案,即使测试时间长,测试数据大,也很难全面的找到bug。
第三单元我接触到了基于jml规格的测试,这很大程度上是一种牺牲了效率换来极高测试效果的测试。如果jml代码设计的合理,没有漏洞,实现功能也严格按照jml,这样在理论上就会杜绝绝大多数的bug。但是另一方面,这样效率也很低。
最后,我还认识到,好的架构设计,认真完成的代码,可以减少很多bug的出现,减少了测试所需的时间和精力。
首先,面向对象编程(OOP)提供了一种强大的编程范式,它将数据和操作封装在对象中,通过对象之间的交互来完成任务。这种方式使代码更具可读性、可维护性和可扩展性。在课程中,我们学习了如何创建类、定义属性和方法,并理解了继承、多态和封装等概念。这使得我们能够更好地组织和管理代码,提高了开发效率。
其次,课程中重点强调了设计模式的重要性。设计模式是解决常见软件设计问题的经验总结,它们提供了一种通用的解决方案,可以帮助我们编写高质量、可重用的代码。我们学习了一些常用的设计模式,例如单例模式、工厂模式和观察者模式等。通过应用这些设计模式,我们可以遵循最佳实践,提高代码的可靠性和可维护性。
第三,课程还重点关注了设计原则。设计原则是指导我们进行软件设计的基本原则和规范。我们学习了一些重要的设计原则。这些原则帮助我们编写具有高内聚性和低耦合性的代码,提高了系统的灵活性和可维护性。
此外,课程中还注重了实践和项目实践。通过完成一系列编程作业和团队项目,我们能够将所学的理论知识应用到实际中。这有助于巩固我们对面向对象设计和构造的理解,并培养了我们的团队合作和问题解决能力。
我相信这门课程所教授的知识和技能将对我未来的软件开发工作产生深远的影响。我期待将来能够运用所学,设计和构建出更加优雅和高效的软件系统。