热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

BUAAOO第四单元期末总结

OO第四单元总结第四单元总结13次作业作业要求实现一个UML解析器,使其支持对UML类图的分析,可以通过输入相应的指令来进行相关查询。 架构设计首先要对UML类图有一个深入的了解

OO第四单元总结

第四单元总结


13次作业


作业要求

实现一个 UML 解析器,使其支持对 UML 类图的分析,可以通过输入相应的指令来进行相关查询。

 

架构设计

首先要对UML类图有一个深入的了解,对类、接口、属性、方法等UML图中的元素之间的关系有一个充分的了解,这些元素可以构成一个树状结构,类和接口中包含属性和方法,方法中又包含属性。其次要对UML图中的继承、实现关系有所认识,同时要结合题目中对各种元素的限制仔细分析。

具体来说,我根据自己的需要又写了自己的UMLClass,UMLInterface,UMLOpearate以便于建立起它们之间的树状关系,在每个UMLClass和UMLInterface中维护自己的父类。用一个容器来表示类或接口实现的所有接口。

 


14次作业


作业要求

要求支持顺序图、状态图的分析。


架构设计

和上次类似,这次的作业只需要将状态图和顺序图的参次结构分析准确即可。

对于顺序图,要理清UmlCollaboration、UmlInteraction、UmlLifeline、UmlMessage以及UmlEndPoint之间的关系。

对于状态图,重点是各个state(包括初始状态和终止状态)和UmlTransition以及UmlEvent之间的层次关系。要注意的是,初始状态和终止状态在官方包中不属于UmlState类,需另行判断。

与上次相同,也需要建立自己的相关的类,以方便表示出它们之间的树形结构。


15次作业


作业要求

扩展 UML 解析器,使其支持对 UML 类图、状态图和顺序图的分析,可以通过输入相应的指令来进行相关查询,并能根据 UML 规则进行一定的规范性验证,即判断UML图中的九种不合法行为


架构设计

本次作业的基本架构与上次作业完全相同。

本次作业的关键在于如何判断循环继承、重复继承、重复实现。

根据需要,我在实现中加入了两个图,一个由所有的继承关系构成,另一个由所有的实现关系的构成,前者用来判断来判断循环继承和重复继承,后者用来判断重复实现。循环继承我采用的是dfs的方法,从每个点遍历,并在过程中记录下它们的路径。当起点和终点相同时,则代表有环路。重复继承和重复实现我采用的是bfs进行搜索。

 


自己在四个单元中架构设计及OO方法理解的演进


第一单元--表达式求导

  最开始还没有面向对象的思维,也没有意识到一个好的框架的重要性。所以第一次作业基本上还是上按照给定的架构来完成的,但是在第二、第三单元中,我深刻的意识到了一个好的架构的重要性,它可以支持我们

 


课程的收获



  1. 理解了面向对象编程的封装继承多态的原理及好处。



  2. 理解多线程开发机制,学习了一点编程模式,学会运用SOLID原则。



  3. 学会规格化开发程序



  4. 从元认知角度重新审视面向对象编程,有更加清楚的大局认识。



 



推荐阅读
  • 本文介绍了Python爬虫技术基础篇面向对象高级编程(中)中的多重继承概念。通过继承,子类可以扩展父类的功能。文章以动物类层次的设计为例,讨论了按照不同分类方式设计类层次的复杂性和多重继承的优势。最后给出了哺乳动物和鸟类的设计示例,以及能跑、能飞、宠物类和非宠物类的增加对类数量的影响。 ... [详细]
  • 本文分享了一个关于在C#中使用异步代码的问题,作者在控制台中运行时代码正常工作,但在Windows窗体中却无法正常工作。作者尝试搜索局域网上的主机,但在窗体中计数器没有减少。文章提供了相关的代码和解决思路。 ... [详细]
  • 本文介绍了Hyperledger Fabric外部链码构建与运行的相关知识,包括在Hyperledger Fabric 2.0版本之前链码构建和运行的困难性,外部构建模式的实现原理以及外部构建和运行API的使用方法。通过本文的介绍,读者可以了解到如何利用外部构建和运行的方式来实现链码的构建和运行,并且不再受限于特定的语言和部署环境。 ... [详细]
  • 本文详细介绍了Java中vector的使用方法和相关知识,包括vector类的功能、构造方法和使用注意事项。通过使用vector类,可以方便地实现动态数组的功能,并且可以随意插入不同类型的对象,进行查找、插入和删除操作。这篇文章对于需要频繁进行查找、插入和删除操作的情况下,使用vector类是一个很好的选择。 ... [详细]
  • 本文介绍了Java的集合及其实现类,包括数据结构、抽象类和具体实现类的关系,详细介绍了List接口及其实现类ArrayList的基本操作和特点。文章通过提供相关参考文档和链接,帮助读者更好地理解和使用Java的集合类。 ... [详细]
  • 本文讨论了clone的fork与pthread_create创建线程的不同之处。进程是一个指令执行流及其执行环境,其执行环境是一个系统资源的集合。在调用系统调用fork创建一个进程时,子进程只是完全复制父进程的资源,这样得到的子进程独立于父进程,具有良好的并发性。但是二者之间的通讯需要通过专门的通讯机制,另外通过fork创建子进程系统开销很大。因此,在某些情况下,使用clone或pthread_create创建线程可能更加高效。 ... [详细]
  • 预备知识可参考我整理的博客Windows编程之线程:https:www.cnblogs.comZhuSenlinp16662075.htmlWindows编程之线程同步:https ... [详细]
  • Spring常用注解(绝对经典),全靠这份Java知识点PDF大全
    本文介绍了Spring常用注解和注入bean的注解,包括@Bean、@Autowired、@Inject等,同时提供了一个Java知识点PDF大全的资源链接。其中详细介绍了ColorFactoryBean的使用,以及@Autowired和@Inject的区别和用法。此外,还提到了@Required属性的配置和使用。 ... [详细]
  • Java和JavaScript是什么关系?java跟javaScript都是编程语言,只是java跟javaScript没有什么太大关系,一个是脚本语言(前端语言),一个是面向对象 ... [详细]
  • 篇首语:本文由编程笔记#小编为大家整理,主要介绍了软件测试知识点之数据库压力测试方法小结相关的知识,希望对你有一定的参考价值。 ... [详细]
  • C++语言入门:数组的基本知识和应用领域
    本文介绍了C++语言的基本知识和应用领域,包括C++语言与Python语言的区别、C++语言的结构化特点、关键字和控制语句的使用、运算符的种类和表达式的灵活性、各种数据类型的运算以及指针概念的引入。同时,还探讨了C++语言在代码效率方面的优势和与汇编语言的比较。对于想要学习C++语言的初学者来说,本文提供了一个简洁而全面的入门指南。 ... [详细]
  • HashMap的相关问题及其底层数据结构和操作流程
    本文介绍了关于HashMap的相关问题,包括其底层数据结构、JDK1.7和JDK1.8的差异、红黑树的使用、扩容和树化的条件、退化为链表的情况、索引的计算方法、hashcode和hash()方法的作用、数组容量的选择、Put方法的流程以及并发问题下的操作。文章还提到了扩容死链和数据错乱的问题,并探讨了key的设计要求。对于对Java面试中的HashMap问题感兴趣的读者,本文将为您提供一些有用的技术和经验。 ... [详细]
  • 深入解析Linux下的I/O多路转接epoll技术
    本文深入解析了Linux下的I/O多路转接epoll技术,介绍了select和poll函数的问题,以及epoll函数的设计和优点。同时讲解了epoll函数的使用方法,包括epoll_create和epoll_ctl两个系统调用。 ... [详细]
  • 深入理解Java虚拟机的并发编程与性能优化
    本文主要介绍了Java内存模型与线程的相关概念,探讨了并发编程在服务端应用中的重要性。同时,介绍了Java语言和虚拟机提供的工具,帮助开发人员处理并发方面的问题,提高程序的并发能力和性能优化。文章指出,充分利用计算机处理器的能力和协调线程之间的并发操作是提高服务端程序性能的关键。 ... [详细]
  • Java编程思想一书中第21章并发中关于线程间协作的一节中有个关于汽车打蜡与抛光的小例子(原书的704页)。这个例子主要展示的是两个线程如何通过wait ... [详细]
author-avatar
jrs2078148
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有