体系化的面向对象课程

知北游手记 知北游手记     2022-09-08     384

关键词:

按:面向对象是绝大多数计算机专业学生的重要课程,北航也不例外。事实上,北航开设OO课程已经有十几年的历史,梳理一下历史发展脉络,基本可以分成三个阶段:第一阶段,面向对象概念与UML表示,那时Java的使用还不是很普遍。这个阶段课程的特点是侧重于介绍UML语言,以及如何使用UML分析和描述一个软件的概要性设计。第二阶段:面向对象概念的程序化表达,由于UML是一个比较抽象的描述性语言,大二学生不易理解和掌握,特别是在应用方面。此阶段课程开始引入Java语言,并在UML与Java之间建立了面向对象概念之间的映射,并结合典型的设计模式介绍UML的表示和相应的Java程序表示。第三阶段,通过大作业量和高强度的训练来掌握面向对象思考方法和设计方法。这个阶段的改革始于2014年,基本是从0开始,完全重构了该课程。后续博客会再来细谈。

这张图是关于OO课程的全部故事,此图产生于午后咖啡馆与高老师的精彩BB。我们的一个基本共识是:北航培养出来的本科生必须能够搞定企业的复杂软件问题,而且我们要成建制的达成这个目标。所谓复杂软件问题,就是设定在贴近企业真实需求的背景下,抓住其复杂的核心特征(功能多、技术要求高、质量要求高),在给定时间内(工程节点要求)开发出满足质量要求(鲁棒性、性能、安全等)的软件(注意不只是程序)。所以这是“昆仑课程”,即面向对象设计与构造主课的目标。经过4年的运行,我们的达成度基本保证在85%水平上。简单来说,主课的目标是1周之内,根据给定的需求和设计要求,使用规格化方法开发出2000行代码规模的有效Java程序,能够撰写相应的自动化测试程序,且能够手工证明程序满足设计要求。这个带有冒险性目标的设定,以及能够成功run下来的基本前提背景是,北航近年来的大力度本科教学改革,强调能力训练和达成度,使得同学们在二下时已经具备了抗下大作业量和高强度训练的心理素质和必要的技术能力。可以说,这是体系设计的结果,而不是哪一门课的作用。

基于2014~2016三年的运行,我们发现,挂科的同学往往在课程前半段就跟不上了,而这些同学因为两地办学和三年级课程紧张等一系列原因,难以真正在重修中达到所要求的目标。上面的图主要是从解决这个问题角度出发得到的解决方案:上昆仑前作必要的训练,昆仑山上才能具备训练的基本条件,实在无法完成训练,带着未完成任务进入补给站。如果补给站还不能通过,则需要第二年再次进入高原进行训练。

对于那些数据结构和C语言尚可,但是不了解Java的同学而言,在昆仑课程的前三次作业基本就丧失了继续战斗的信心。针对这个现实情况,训练营课程的目标是采用现场训练方式,而不是传统的讲授方式,在暑期两周内从Java语言小白变成2天内写出150行左右有效代码的能力,且具备有效的面向对象设计特征。这个课程的特点可以概括为三个:(1)只强调最核心的OO特征,对象化、数据封装、层次抽象;(2)课堂线程训练和现场分析的方式,而不是课堂讲授的方式;(3)强调自主查找类库的使用技巧和方法,并使用类库来解决问题。

补给站课程面对的是未能完成昆仑课程的同学,即无效作业次数达到5次及以上(总共12次编程作业+4次总结作业)。这部分同学基本可以分成两类,一类是前半段被“打趴下了,但后半段逐渐又起来,无奈达到了5次无效作业”,这类同学其实有着还不错的基本编程能力,但是在Java学习使用和面向对象概念掌握方面进度较慢,导致后面无法追赶进度;还有一类则是基本采取了放弃的态度,通常是那些在数据结构和C语言课程本身就困难较大的同学。这类同学基本要进入训练营课程才能解决问题。补给站课程采用“缺什么,补什么”的策略,针对每个同学的无效作业情况,制定计划完成相应作业,并采用答辩的方式来对作业完成效果进行评价。答辩要求必须提供证据表明程序功能满足要求,然后老师会现场提供新的测试用例进行测试,并从设计和代码质量角度来提问。

随着同学们逐渐大四毕业,进入企业实习或继续生造,越来越多的同学反馈说,他们在OO课程上学到和训练的东西真的给了他们很多机会,特别是在企业实习和工作方面的机会。我们希望这样的案例越来越多。

java课程:2.java面向对象

...不同的方法,相当于一条狗赋予了的叫声,摇尾巴等。2.面向对象与面向过程的区别:*面向过程强调的是行为,就是分析出解决问题所需要的步骤,然后用函数把这些步骤一步一步实现,使用的时候一个一个依次调用就可以了。... 查看详情

oo真经——关于面向对象的哲学体系及科学体系的探讨(下)

真经第六章——运作Moving      “运动是绝对的——牛顿”6.1、导言     在前五章中,我们从世界观的这话题开始,逐步引出了抽象、层次、继承和耦合。这些内容,形成了对象论中关于世... 查看详情

oo真经——关于面向对象的哲学体系及科学体系的探讨(上)

目录 Catelog                      目录Catelog       &n 查看详情

oo真经——关于面向对象的哲学体系及科学体系的探讨(上)

http://www.cnblogs.com/leoo2sk/archive/2009/04/09/1432103.html目录Catelog                     &nb 查看详情

名师课堂java面向对象开发

课程介绍面向对象是Java语言之中最为重要的特征,本课程主要讲解面向对象的核心知识,并且利用大量的代码、数据结构课程深入分析Java面向对象特征。课程目标 掌握Java面向对象开发技术适合人群 Java学习者课时列表... 查看详情

风趣的javascript面向对象入门课程一

...,哈哈,废话不多说,今天就由我带着你们来入JavaScript面向对象这个坑!千万别弃坑!  一、理解对象:创建对象的两种方法:直接声明、Object的实例化直接声明:1Varzhangsan={23Name:“zhangsa 查看详情

面向对象

‘‘‘面向过程:核心是"过程"二字过程的终极奥义就是将程序流程化过程是"流水线",用来分步骤解决问题的面向对象:核心是"对象"二字对象的终极奥义就是将程序"整合"对象是"容器",用来盛放数据与功能的类也是"容器",该... 查看详情

面向对象设计与构造课程总结作业(代码片段)

BUAAOO2021THEFINAL面向对象设计与构造课程总结作业四个单元中的架构设计第一单元架构设计与实现相关总结,传送门在此第二单元架构设计与实现相关总结,传送门在此第三单元架构设计与实现相关总结,传送门在此第四单元架构... 查看详情

web前端技术基础课程详解之javascript面向对象

JavaScript中的面向对象是个老生常谈的话题,但是依然有很多小伙伴处于懵逼状态。面试时候最担心的就是被问到面向对象相关的内容,自己看过无数的资料,依然对面向对象百思不得其解。到底什么是原型?什么是构造函数?... 查看详情

web前端技术基础课程详解之javascript面向对象

JavaScript中的面向对象是个老生常谈的话题,但是依然有很多小伙伴处于懵逼状态。面试时候最担心的就是被问到面向对象相关的内容,自己看过无数的资料,依然对面向对象百思不得其解。到底什么是原型?什么是构造函数?... 查看详情

面向对象的程序设计课程进度

?Java学习进程周次 (阅读?编写)代码行数       发布博客量?博客评论数量          课堂?课余学习时间(小时)  最满意的编程任务第一周   &nbs 查看详情

面向对象课程第三次随笔

...和结构化分析无法满足用户的需求,OOP由此应运而生,即面向对象的程序设计。OOP的诞生是程序设计方法学的一场革命,大大提高了开发效率,减少了软件开 查看详情

朵的面向对象程序设计课程学习进度条

周次(阅读/编写)代码行数发布博客量/博客评论数量课堂/课余学习时间(小时)最满意的编程任务第1周31/161/16/6HelloJava第2周300/1002/16/7输入三位数然后分别输出数字和三位数字和 查看详情

十面向对象与原型

十一、面向对象与原型 ECMAScript有两种开发模式:1.函数式(过程化),2.面向对象(OOP)。面向对象的语言有一个标志,那就是类的概念,而通过类可以创建任意多个具有相同属性和方法的对象。但是,ECMAScript没有类的概念,因... 查看详情

软件设计与体系——面向对象设计的原则(代码片段)

一:前言用一道题熟悉OO设计与编程:给定一个4位数(数字不完全相同),这4个数字可以得到最大4位数和最小4位数,算它们的差,不是6174则重复上述过程,最终会得到6174,验证这个过程。impo... 查看详情

软件设计与体系——面向对象设计的原则(代码片段)

一:前言用一道题熟悉OO设计与编程:给定一个4位数(数字不完全相同),这4个数字可以得到最大4位数和最小4位数,算它们的差,不是6174则重复上述过程,最终会得到6174,验证这个过程。impo... 查看详情

java面向对象编程课程设计——网络版单机斗地主

...提交记录截图四、项目功能架构图、主要功能流程图五、面向对象设计类图1、CardGames类图2、CardGame类图3、Card 查看详情

面向对象课程第二次随笔

多线程的协同与同步控制第五次作业  作为第一次多线程作业,对于多线程的同步和协同机制还不是非常了解。在这次作业中,我将三个电梯作为了三个线程,输入线程和调度器线程进行辅助。输入线程和调度器线程之间采取... 查看详情