面向对象设计与构造 一流课程

章节 20
实验 58
关注人数 16327
学习人数 6806
使用高校 142

课程介绍

        面向对象设计与构造是北京航空航天大学计算机学院的专业核心课程,共64学时,其中理论授课为32学时、实验为16学时、翻转课堂研讨为16学时。三部分共同围绕课程知识体系,采取问题导向的方式来开展教学,其中问题导向所强调的问题主要来自于同学们应用课程讲授的方法和技术来完成作业项目训练和实验中遇到的难题、摸索的经验和可以延伸讨论的技术点。本课程涉及的知识点多,跨越基础知识、技术设计和应用拓展三个层面,在对知识体系的系统性梳理基础上,通过线上自学和线下课堂相结合来讲授和引导学习。

        理论课教学内容按照单元来组织,四个单元的主题分别聚焦于层次化设计、线程安全设计、规格化设计和模型化设计,每个单元安排3次理论讲解、2次实验、2次翻转课堂研讨和1次单元总结分析。每次理论讲解基本围绕一个知识块展开,安排有针对性的作业训练;在单元总结部分把3次授课的知识块进行串接,并把3次作业、2次实验和2次翻转课堂中讨论关注的问题进行总结分析。

        在翻转课堂讨论环节,本课程同样突出问题导向,即围绕作业训练和实验中遇到的问题和摸索的经验,采取同学们自主安排研讨主题和课程组出题引导相结合的方式来开展。每个报告一般控制在半小时以内,同学上讲台为全班同学讲解和分享,同学们可以提问,老师进行点评。这些研讨分享和积极参与提问等都会纳入最终的课程考核环节。

        除了知识点讲授和学习的线上线下混合,本课程通过部署于云端的在线训练平台来支撑课程的作业训练和实验,使得同学们可以自主安排时间,在线上完成实践训练任务。这种在线训练模式使得课程组可以及时掌握同学们的训练完成情况和完成质量,基于平台所收集的学习行为数据和结果数据,以可控方式来培养同学们的面向对象软件开发能力。综上所述,《面向对象设计与构造》是一门在知识点学习和实践训练方面的线上线下混合课程,突出问题导向的自主线上学习和翻转课堂研讨。

        本课程教学目标定位在从技术构造及应用角度来培养本科生的面向对象软件能力,经过多年的建设已经形成了内容精深、训练富有挑战、研讨活跃和过程严格的风格,多次在全国性的教学研讨会上报告和分享建设经验,并两次获得全国性的教学比赛奖励,还连续两次在教育部新工科联盟组织下进行全国性的暑期师资培训,效果显著。

        在课程建设过程中,我们一直注重和美国MIT的《软件构造》课程(Software Construction,6.031)进行对标分析。本课程注重调研国内外诸多课程,并博采众长。需要指出的是,虽然都在规格化设计方面进行了训练,本课程选择了JML语言进行训练,而MIT课程则仍然选用基于自然语言和形式语言混杂的方式来训练。其差异是,使用JML语言所写的规格可以被自动解析和验证,这使得我们可以把规格化设计的训练贯彻的更加深入。对比而言,本课程在评测方式、评测深度和成绩评定三个方面发展出了我们自己的特色。

共8个章节 9个实验

本专题共包括8次实验,与理论课配套,分别对照四个单元教学内容。

1 实验—-面向对象程序基本练习(接口)

实验一练习本课程必要工具链的使用;接触并学习基本面向对象程序的构造方法

实验1 git常用命令练习
实验目标:学习使用git的命令行操作/gitlab网页操作
实验内容:实验指导中给出了git常用的操作命令和推荐的使用步骤,按照步骤操作后将获得一份后续实验任务需要的源代码。同学们需要完成以下步骤:
step 1 新建仓库
step 2 关联远程仓储
step 3 从远程仓储拉取文件
step 4 忽略不必要的文件
step 5 删除与远程仓储的关联
step 6 关联个人作业仓库,并尝试一次提交
step 7 上传工作目录截图并回答实验报告中的问题

实验2 java接口编程练习
实验目标:实现接口(Interface)完成简单的排序任务
实验内容:本任务提供了一份不完整的源代码(实验数据的poly文件夹中的内容),该源代码欲完成多项式的排序。首先,你需要阅读实验要求,并参照share文件夹中的例程,用接口技术将代码补充完整。其次,你需要按照要求撰写实验报告。最后,请提交代码与报告。

2 实验二-面向对象程序进阶练习(设计模式)

本次实验练习面向对象编程的核心概念,继承、多态,熟悉基本设计模式

实验1 工厂模式-编程实践练习
实验目标:掌握Java语言中封闭及继承的设计与实现
实验内容:根据给出的参考资料,学习工厂模式及其优点,对已有的代码进行改写和重构,理解并根据新的需求补充代码,完成任务。现在需要你设计一个交通设备厂商,目前可以生产的设备是小汽车Car,挖掘机Tractor,洒水车Sprinkler。section 3~4描述了当前可以生产的各种设备,及其之间的继承逻辑关系。section 5提出了新的设备生产需求,所有section 3~4描述的代码可以在仓库中下载(实验数据中也已提供)。

3 实验三-多线程面向对象程序设计

本次实验练习java多线程编程基础知识,包括多线程相关库文件的使用,多线程程序的基本实现框架

实验1 java多线程基础知识及编程练习
实验目标:(1)了解线程的基本原理和相关概念;(2)掌握线程创建、同步、交互的方法,并用其来解决生产者-消费者问题
实验内容:
(1)根据理论课内容完成填空选择题、程序补全题
(2)用多线程编程实现“生产者-消费者模式”

4 实验四-线程安全的面向对象程序设计

本次实验学习如何设计线程安全的java程序,理解死锁的概念,学习使用线程同步的基本方法。

实验1 线程安全的java程序设计
实验目标:(1)学习多线程设计模式中的观察者模式及Worker-Thread模式,会应用到实际场景中(2)在多线程编程中关注线程安全问题,学习常用的协调、控制方法;(3)培养快速阅读并理解代码的能力
实验内容:
任务一:观察者模式的应用
任务二:Worker Thread模式的应用

5 实验五-规格化程序设计基础

本次实验学习并练习JML基本语法,学习方法的规格化。

实验1 规格化程序设计基础练习
实验目的:(1)学习并掌握JML的核心语言特征 (feature);(2)能够根据代码理解其设计并用JML表达其规格;(3)能够根据JML规格完善补充代码实现。
实验内容:
本次实验提供的代码完成了一个路径的容器(见提供的实验数据),请你依据JML语言手册,阅读分析 Path.java、PathContainer.java 两个类中的代码和相关的方法规格描述。本次实验由填空题组成,需要你对JML规格和代码实现的空缺部分进行填空并使其满足预期要求。

6 实验六-规格化程序设计进阶

本次实验学习数据规格的设计,练习规格和程序代码的双向转化。

实验1 规格化程序设计进阶练习
实验目标:(1)进一步训练根据JML完善补充代码的能力;(2)学习使用JUnit进行单元测试
实验任务:本次实验我们将模拟一个简单的JVM分代垃圾回收机制,也会设置eden区,survivor区和tenured区。仓库中给出的代码大体已经实现,未完成的代码部分使用 /* Your Code Here */ 进行标注,需要同学们根据所给的JML规格和背景知识自行添加。
同时,已完成的代码中也有错误的地方,且错误不少于5处,需要同学们使用JUnit进行单元测试找出错误并修改,并在错误修改处使用注释标明错误原因和发现途径,并将JUnit测试代码一同提交。

7 实验七-模型化设计基础

本次实验练习UML模型的基本元素使用,学习如何利用UML图表示代码设计逻辑。

实验1 模型化设计基础练习
实验目标:(1)学习UML类图的表示方式并能用类图来描述应用场景;(2)学习适配器模式并进行应用
实验任务:
根据实验任务所给的问题背景和mdj文件,在starUML中打开并修改、调整,使得UML图符合相应的规范和要求并且满足任务中的含义。(问题仅在于所下发的mdj文件本身,题面中除UML以外的描述没有错误之处)。特别地,对修改中的自行新增的方法、参数等不做命名要求。

8 实验八-模型化设计进阶

本次实验学习并练习UML模型的一致性检查,学习如何检查并解决面向对象程序设计构造的冲突及不一致问题。

实验1 模型化设计进阶练习
实验目标:(1)学习UML顺序图和状态图的基本知识;(2)训练理解UML顺序图和状态图的能力;(3)学习根据UML模型的一致性检查规则对UML模型进行整体分析
实验任务:
针对实验指导书给出的模型实例(包括类图、顺序图和状态图),指出该实例中的不一致。将发现的不一致之处逐条总结,填写改错问卷并按照指定的格式进行提交。

学校logo
授课团队
  • ...
    吴际
    北京航空航天大学
  • ...
    荣文戈
    北京航空航天大学
  • ...
    孙青
    北京航空航天大学