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

OOsummaryUnit4&课程总结

Unit4博客&课程总结Unit4作业的架构设计本单元作业的设计我分为了三个模块处理:模型构建+预处理+任务函数,前两部分即为整个图的完整构建,第三部分即为实现题目要求的查询方法。

Unit 4博客&课程总结

Unit 4作业的架构设计

本单元作业的设计我分为了三个模块处理:模型构建 + 预处理 + 任务函数,前两部分即为整个图的完整构建,第三部分即为实现题目要求的查询方法。

最终的文件树如下图所示:

 

 


模型构建

为了便于对于一些属性的查询以及避免与官方包内的数据类混淆,我为题目中遇到的每个UML元素都构建了自定义类,在拷贝过原有的属性后,另外新增了一些过程量表示模型图结点间的关系。以 UmlClass 为例,我构建了 MyClass 类。为了表示类图中的属性、方法以及其他一些中间变量,我构建了相应的容器并配备了查询方法。

除此之外,对于整体图模型的解析与构建,我采用了层次化解析的思路,即从上到下依次解析。例如对于类图元素,先解析图中的结点(类与接口),再搭建类图中的关系、补充结点信息(继承、关联、方法等),以此类推。层次化构建使过程非常清晰,且可扩展性也非常好。

 

 


预处理

因为本单元的任务完全是静态查询,数据在输入后不会发生变化,因此为了减少查询时的时间复杂度,我对一些变量采取了预处理的办法,在执行完模型构建后调用相应的 update() 方法。例如对类的继承深度 depth、类的间接属性、类实现的全部接口(包括直接与间接)等。

 

 


任务函数

任务函数即为预处理后对相关的数据的查询,这部分的具体实现内置在每个自定义类中,不必详细介绍。

三个模块完全依次执行,相互独立,耦合度低,且可扩展性很强。

 


架构设计思维及OO方法理解的演进


架构设计

架构设计是OO课程中不可或缺的一环。以往程序设计的题目只是解决一个小问题,我习惯于拿到题目后直接上手,遇到问题时再去想怎么解决;但是OO课程每一个单元的作业更像一个完整的项目,代码动辄几百上千行,要想避免让代码变为屎山,就要求有一个清晰、可扩展的架构。因此在每个单元作业前,我都会预留思考的时间,仔细想想需求的层次、模块的设计、以及可能的扩展方向,力求在将来的增量开发中有更好的体验

像在第二单元的线程安全的设计中,我反复琢磨可能发生死锁的情况,对执行 wait() 方法的模块反复推敲,取得了良好的效果。

在第四单元的作业中,在拿到题目后,层次化解析UML元素、分层架构的思路就已经浮现在脑海了,我将所有的元素分为5层进行解析,先是类图、接口、顺序图,再是他们中的属性、方法、消息等,很快就完成了作业,足以见得架构设计给我带来的帮助。

 


OO方法

面向对象中封装性至关重要,是面向对象的灵魂。OO将需求拆解为各个模块,通过完善模块内容与处理模块间的交互来完成需求。这样的好处是:



  1. 层次化清晰,每个模块解决自己的活,分工明确,同时也降低代码的耦合度,利于维护与更改;



  2. 增强可扩展性,需求变化后只需更改相应模块的内容即可解决;



  3. 复用性强,模块作为一个整体可被反复调用;



 


测试方面

OO课程中的测试环节我都是按照以下流程进行:



  1. 利用样例代码与自己手动捏的较弱的数据进行测试,保证基础功能的完成;



  2. 针对易错、易超时的方法针对性构造数据强测,如Unit 3中图论的一些方法等;



  3. 与小伙伴对拍,利用大数据覆盖性测试。



在第一单元中,我没有使用测评机,均是采用上述一二步骤进行测验。由于构造测试样例的疏漏,我没有考虑构造输入为0的情况,导致在第二次作业中强测被扣了分。

在第二单元中,针对电梯请求的构造,我利用测评机生成覆盖性数据进行本地强测。但是可能由于测评机不够完善,导致在第二次作业采用共享队列时被hack了。

针对第三单元的JML测试,我用不惯Junit,实际上还是针对方法自己构造测试数据。因此还是采用了针对图论方法构造可能超时的数据进行测验,第三单元强测均满分。

第四单元细节繁多,的测试主要以和小伙伴对拍为主。先用超大数据进行强测,而后生成对应的针对性数据找bug,效果不错。

 


课程收获



  1. 学会一门新语言——OO课程帮助我了解了java,不仅包括基础的java语言,还包括UML类图、JML规格等。通过第一到第四单元的作业,我已经能够熟练使用java编程,并轻松地debug;



  2. 一帮好友——OO课程作业设计十分巧妙,有许多值得推敲的点,上到架构的设计、模块的构建,小到具体算法是实现,都是值得讨论的地方。在于他人交流的过程中,我感受着思维的碰撞,与同学们相互交流,也让我结实到了许多优秀的同志;



  3. 对于层次化架构的理解——设计层次化的架构是面向对象编程必不可少的环节,简约、清晰、易扩展的架构能节约很多时间。在拿到需求后设计模块、理清楚逻辑关系是首要环节,否则很有可能在后期的迭代开发中面临要么重构,要么堆屎山代码的选择。层次化架构的分析不仅是OO的一种思想,也是一种人生哲理啊!这告诉我们切勿想着一口气吃个胖子,要做好规划。



 


改进建议



  1. 我认为寒假的预习板块可以改进一下。可以看出该部分是为了承接第一单元表达式计算的作业而设计的,花费了很多篇幅去讲解正则表达式的格式以及UML类图的设计,但是花费一个单元共5讲的内容来介绍正则表达式有些冗长。我认为可以将第三弹的内容进行压缩,达到熟悉正则的目的即可,并相应地增加一个预习第四弹,可以介绍一些常见的设计模式(如工厂模式、单例模式等)。OO课程的目的最终还是培养面向对象的思想、架构设计能力,这样也可以契合培养方案。



  2. 我认为对于讨论区以及微信群的交流与答疑方式可以改进。据实际体验而言,微信内的答疑效率非常低下,许多人不翻消息记录,会有大量的重复提问;讨论区的相关板块十分杂乱,没有索引结构,助教老师回答采用 “引用原话+回复” 的方式不够清晰,导致在“针对指导书提问”这一个栏目给人观感十分臃肿、不清晰。我认为可以将一些针对指导书内容的提问局限在讨论区,微信群仅用于其他交流,再为规范讨论区的结构,建立清晰的索引结构,提高同学们提问、查找的效率



  3. 研讨课上一些内向或摆烂的同学不积极发言,全程混讨论,没有自己的观点,享受他人思维碰撞的果实,这是不公平的。我认为可以对研讨课环节分数的评定进行一些细化,如会议纪要中写出每个组员贡献的思想并以此评议每个人的分数,再根据小组代表发言的内容进行小组加分,细化为个人与团体分,可能大家积极性会高一些。





推荐阅读
  • 图解redis的持久化存储机制RDB和AOF的原理和优缺点
    本文通过图解的方式介绍了redis的持久化存储机制RDB和AOF的原理和优缺点。RDB是将redis内存中的数据保存为快照文件,恢复速度较快但不支持拉链式快照。AOF是将操作日志保存到磁盘,实时存储数据但恢复速度较慢。文章详细分析了两种机制的优缺点,帮助读者更好地理解redis的持久化存储策略。 ... [详细]
  • Go语言实现堆排序的详细教程
    本文主要介绍了Go语言实现堆排序的详细教程,包括大根堆的定义和完全二叉树的概念。通过图解和算法描述,详细介绍了堆排序的实现过程。堆排序是一种效率很高的排序算法,时间复杂度为O(nlgn)。阅读本文大约需要15分钟。 ... [详细]
  • 本文介绍了前端人员必须知道的三个问题,即前端都做哪些事、前端都需要哪些技术,以及前端的发展阶段。初级阶段包括HTML、CSS、JavaScript和jQuery的基础知识。进阶阶段涵盖了面向对象编程、响应式设计、Ajax、HTML5等新兴技术。高级阶段包括架构基础、模块化开发、预编译和前沿规范等内容。此外,还介绍了一些后端服务,如Node.js。 ... [详细]
  • macOS Big Sur全新设计大版本更新,10+个值得关注的新功能
    本文介绍了Apple发布的新一代操作系统macOS Big Sur,该系统采用全新的界面设计,包括图标、应用界面、程序坞和菜单栏等方面的变化。新系统还增加了通知中心、桌面小组件、强化的Safari浏览器以及隐私保护等多项功能。文章指出,macOS Big Sur的设计与iPadOS越来越接近,结合了去年iPadOS对鼠标的完善等功能。 ... [详细]
  • 本文介绍了H5游戏性能优化和调试技巧,包括从问题表象出发进行优化、排除外部问题导致的卡顿、帧率设定、减少drawcall的方法、UI优化和图集渲染等八个理念。对于游戏程序员来说,解决游戏性能问题是一个关键的任务,本文提供了一些有用的参考价值。摘要长度为183字。 ... [详细]
  • 面试经验分享:华为面试四轮电话面试、一轮笔试、一轮主管视频面试、一轮hr视频面试
    最近有朋友去华为面试,面试经历包括四轮电话面试、一轮笔试、一轮主管视频面试、一轮hr视频面试。80%的人都在第一轮电话面试中失败,因为缺乏基础知识。面试问题涉及 ... [详细]
  • Java工程师书单(初级,中级,高级)
    简介怎样学习才能从一名Java初级程序员成长为一名合格的架构师,或者说一名合格的架构师应该有怎样的技术知识体系,这是不仅一个刚刚踏入职场的初级程序员也是工作一两年之后开始迷茫的程序 ... [详细]
  • 软件测试工程师,需要达到什么水平才能顺利拿到 20k+ 无压力?
    前言最近看到很多应届生晒offer,稍有名气点的公司给出的价格都是一年30多W或者月薪20几k,相比之下工作几年的自己薪资确实很寒酸.根据我自己找工作经历,二线城市一般小公司招聘 ... [详细]
  • 出现_史上最大漏洞出现,你的安卓iPhone电脑都不安全了!
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了史上最大漏洞出现,你的安卓iPhone电脑都不安全了!相关的知识,希望对你有一定的参考价值。 ... [详细]
  • 如何实现织梦DedeCms全站伪静态
    本文介绍了如何通过修改织梦DedeCms源代码来实现全站伪静态,以提高管理和SEO效果。全站伪静态可以避免重复URL的问题,同时通过使用mod_rewrite伪静态模块和.htaccess正则表达式,可以更好地适应搜索引擎的需求。文章还提到了一些相关的技术和工具,如Ubuntu、qt编程、tomcat端口、爬虫、php request根目录等。 ... [详细]
  • Oracle优化新常态的五大禁止及其性能隐患
    本文介绍了Oracle优化新常态中的五大禁止措施,包括禁止外键、禁止视图、禁止触发器、禁止存储过程和禁止JOB,并分析了这些禁止措施可能带来的性能隐患。文章还讨论了这些禁止措施在C/S架构和B/S架构中的不同应用情况,并提出了解决方案。 ... [详细]
  • 从高级程序员到CTO的4次能力跃迁!如何选择适合的技术负责人?
    本文讲解了从高级程序员到CTO的4次能力跃迁,以及如何选择适合的技术负责人。在初创期、发展期、成熟期的每个阶段,创业公司需要不同级别的技术负责人来实现复杂功能、解决技术难题、提高交付效率和质量。高级程序员的职责是实现复杂功能、编写核心代码、处理线上bug、解决技术难题。而技术经理则需要提高交付效率和质量。 ... [详细]
  • 微信答题小程序的设计与实现详解
    本文详细介绍了如何设计和实现一个微信答题小程序,包括题库的设计和题目的呈现。通过抽取题目编号和使用全局变量记录当前题目的信息,实现了题目的刷新和显示。同时,还介绍了题目的展示方式和容器的创建。本文适合零基础的小白学习微信答题小程序的开发。 ... [详细]
  • 第四单元和课程总结:简单的架构设计意识
    一、第四单元架构设计总结第一次作业由于需要按名查找类图模型,于是建立"Class"类进行管理由于方法具有参数导致类中存在二级结构 ... [详细]
  • OpenEdge已经更名为Baetyl。OpenEdge是百度云发布的国内首个开源边缘计算产品,可将云计算能力拓展至用户现场,提供临时离线、低延时的计算 ... [详细]
author-avatar
Jerrefy是不会游泳的鱼_177
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有