北航面向对象第四单元课程设计总结

杨曜铖22371281 学生 2024-06-13 16:36:31

北航面向对象第四单元课程设计总结

正向设计中的UML建模使用

在本单元中,我的正向设计方法为:

  • 分析需求,画出用例图,确定用例;
  • 初步设计类层次结构,形成简单类图;
  • 为每个用例设计运行原理,画出时序图;
  • 结合所有时序图中的对象和方法,向类图中填写属性和方法并调整架构,完成类图的设计;
  • 类图包含代码的所有细节,看图说话即可完成代码。

架构设计

进行本单元架构设计时,由于经过了长期的训练已经可以较为成熟地形成一个较优化的架构。

img

UML模型与代码始终保持了一一对应,不再赘述。

面向对象设计总结

经过从先导课程到正式课程以及其它一些课程的一系列训练,我在架构设计、测试思维上均有改进心得,总结如下:

架构设计

初入OOPRE时,我学习了一些设计模式、良好架构知识等等;而现在经过了巨大的训练代码量的堆砌,我越来越有这样一种体会:没有长期和代码耳鬓厮磨的过程,没有接触足够的底层代码的细节,是无法对这些顶层的架构原则有深入的理解的,因为这些顶层原则其实都来自对底层细节的提炼总结。借用曾经看过的一本《代码整洁之道》中Bob大叔的话,我们所有的设计其实都是和各种“代码坏味道”作斗争,那些封装、继承、多态以及更多原则所解决的问题,都是实现过程中切切实实会让你眉头一皱,会觉得这段代码如此写很“丑陋”的问题。

这样的感受在这最后一单元的架构设计权衡过程中尤为明显:显然这架构并非唯一,而我当时也在几种可能的设计选择中纠结良久。例如,对上图中类似“书容器”的类,是使用一个接口并让所有人实现,还是使用一个抽象类“书籍容器”并让大家继承自他?最后我选择第二种,并且甚至发现所谓的抽象的“书籍容器”与书架的功能完全一致,他甚至不需要是一个抽象类了。做出这一选择,是由于我先前总结的一点个人原则:当你不确定如何设计某个部分,就让它符合本身事物自然的逻辑,这样往往会多出少量不必要的层次和工作量,但是既不容易出错(因为符合其本身的逻辑),又便于扩展,还容易进行修改优化。

另外,作权衡的过程中,当你看到图中的架构,能自然联想到相应的代码实现,并且该种实现的代码“味道”马上能够冲击你的头脑,那么就比较容易做出合理的选择。我惊喜于这种训练带来的“第六感”在我作设计选择的过程中始终伴随着我,让我敏锐地察觉到每种方案的优劣,并且在此基础上(也基于个人的一些喜好)进行选择。经过良好设计的架构,经过适当的逻辑层次设计,让这三次作业的架构修改基本稳定,均是在原先预留和预计的可扩展位置进行的少量扩展。

测试思维

实际上,由于其他课程的压力以及其他同学的dpo测试器出现,我仅在第一单元写了自己的测试器。然而,经过对测试的理解的发展,我逐渐认识到:测试当然不仅仅包括自动测试这一手段,自动测试也不仅仅包括黑盒测试这一手段;测试思维实际上可以说是一种开发思维,它在我们企图保障自己开发的软件的正确性时,或者是企图寻找一种不容易出错的开发方法和流程的时候,就体现出来了。

就个人而言,我的大部分测试工作,其实在开发阶段无意识地完成了:开发目标被划分为不同的、可以进行测试的阶段和模块,怀着某种功能预期,实现一个模块就测试验证该模块的正确性。这里往往是通过手工测试的方法,但是对每个模块的功能的预期以及实现过程中察觉到的可能出现的问题,都使我在实现期就思考和积累了一些手工测试样例,并且这些样例的功能非常精准。在第二单元的首次作业中,我对这一情况的印象十分深刻:完成整体作业后,我凭借对实现细节和可能出现问题的印象手写了不到十个样例,但是每一个样例都精准命中了至少一个bug,并且不同的样例命中的bug是不同的。也就是说,实现过程中潜意识里积累的薄弱点,以及基于实现细节对薄弱点的猜测,确实是非常精准的。

课程收获

  1. 巨大的代码训练量:感谢OO让我写了这么多代码;
  2. 测试思维和方法:同上;
  3. 并发基础(当然也有OS)和多线程应用程序编程;
  4. JML和UML的使用;
  5. 最后当然是较为全面地掌握了面向对象分析设计方法。

感谢OO!

...全文
68 回复 打赏 收藏 转发到动态 举报
写回复
用AI写文章
回复
切换为时间正序
请发表友善的回复…
发表回复
学员在中科院学习期间独立完成制作ARM开发板、开发触摸屏驱动等36个嵌入式专题实验项目,1-3个大型项目。其他实验项目如:智能机器人等可在结业后完成。 教学周期:10个月,其中第一学期3个月,第二学期5个月,课程实训2个月。 课程编号 教学单元 教学内容 就业岗位 第一学期 教学课时3个月 ZKQ090101 网络原理及linux服务 网络概述;数据通信基础;网络体系结构与协议;局域网;网络互联与TCP/IP协议;Internet及其应用;网络连接设备与技术 •Linux下C开发人员 •面向C嵌入式开发人员 ZKQ090102 Linux安装 正确安装Linux操作系统 ZKQ090103 Linux 开发环境与应用程序设计 Linux C 编程基础,gdb调式器,Makefile文件概述;Linux系统调用原理;基于系统调用的文件I/O操作;文件上锁,程序机制与功能,特殊文件的操作;串口编程,串口通信的实现;Linux多线程编程 ZKQ090104 嵌入式Linux系统基础 Linux的进程管理,特殊进程的操作;Linux进程间的通信(一):管道通信;Linux进程间的通信(二):信号;Linux进程间的通信(三):消息队列与共享内存 ZKQ090105 FPGA1/CPLD EDA技术简介以及CPLD/FPGA 基础知识,QuartusII软件入门;硬件描述语言( VHDL)基本语法和实践;硬件描述语言( Verilog HDL)基本语法和实践;FPGA实验、DSP入门;Altium Designer 6.x电路原理图与PCB设计 ZKQ090106 Linux内核裁剪与移植 嵌入式简介;Linux 基础知识;交叉编译;Linux 内核配置;Linux 内核移植;根文件系统制作;Boot Loader 制作。 第二学期 教学课时5个月 ZKQ090201 基于ARM7开发平台设计 ARM技术简介以及基础知识,ARM应用入门;ARM启动代码分析、链接脚本讲解;μC/OS II V2.85在ARM的移植;μC/OS II内核精讲;ARM经典实验。 •高级嵌入式开发工程师 •Linux设备驱动开发工程师 •嵌入式系统工程师 •嵌入式技术支持工程师 •嵌入式软件开发工程师 •嵌入式硬件开发工程师 •ARM平台嵌入式开发工程师 ZKQ090202 基于ARM9开发平台设计 嵌入式linux开发平台简介及开发流程;嵌入式Linux开发环境的建立;多线程应用程序设计;串行端口程序设计;A/D接口实验;D/A接口实验;简单的嵌入式WEB服务器实验;RS-485通讯实验;直流与步进电机实验;内核驱动设计入门――模块方式驱动实验;内核驱动设计实验――触摸屏驱动;内核驱动设计――网卡驱动移植及实验;内核驱动设计――LCD驱动移植;音频驱动及实应用实验;USB接口试验 ZKQ090203 FPGA2/SOPC 基于NIOSII嵌入式软处理器的SOPC(可编程片上系统)系统的开发基础和设计技巧以及FPGA最小系统设计方法;SOPC实验。 ZKQ090204 Linux网络编程 Socket 套接字(TCP、UDP);原始套接字;多进程、多进程网络编程 ZKQ090205 TCP/IP协议编程 TCP/IP协议分析;构造数据包。 ZKQ090206 C++QT图形编程 Qt开发环境安装与配置;C++面向对象基础;Qt内置组件应用与自定义组件开发;Qt信号与槽机制;Qt模型应用(树、表、栈);Qt多线程与网络;Qt图形开发;Qt内置数据仓库技术(mysql、sqlite);Qt解析XML。 ZKQ090207 嵌入式Linux系统原理 Linux内核简介;进程管理及调度;中断及中断处理程序;下半部和工作队列;内核同步方法;定时器和时间管理;内存管理;进程地址空间;内核调试技术;内核可移植性概述。 ZKQ090208 嵌入式Linux驱动开发 设备驱动及内核模块概述;构造和运行模块;编写字符设备驱动程序I;编写字符设备驱动程序II;高级字符驱动程序;与硬件通信;中断处理;Linux设备模型;内存映射操作;DMA技术及应用;块设备驱动程序;网络设备驱动程序;贞缓冲设备驱动;PCI设备驱动程序;USB驱动程序。 课程实训 实训课时2个月 3-5名学员组成一个项目小组,项目自选,项目小组提交项目报告,经审核同意后拨付项目经费,在项目指导教师指导下项目实施,项目完成应有成型产品,组织召开项目完成报告会,项目小组提交项目完成报告书,项目结束。

301

社区成员

发帖
与我相关
我的任务
社区描述
2023年北航面向对象设计与构造
学习 高校
社区管理员
  • YannaZhang
  • CajZella
  • C_ecelia
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧