北京理工大学

面向对象软件开发实践之基本技能训练

所属微专业:

图片
课程概述

当今时代,面向对象己经成为主流的软件开发技术,绝大多数与人们日常生活息息相关的软件系统,都是采用面向对象技术构建出来的。因此,掌握面向对象的软件系统分析与设计方法,精通数种面向对象编程语言,深入把握特定的面向对象软件运行平台,掌握面向对象软件开发的各种技术及工具,己经成为这一时代软件开发者所必须拥有的职业技能。

计算机专业高年级学生(大三下至大四),基本上已经学完计算机专业的骨干课程,比如《数据结构与算法》、《操作系统》、《面向对象程序设计》、《软件工程》等,这些课程都非常有用,但它们要不偏重于理论,要不偏重于编程语言的语法等细节,学生缺少一门这样的课,这门课能告诉他们:一个有用的软件到底是如何诞生的我们在学校里学的操作系统、数据结构等专业课程到底在开发中是怎样应用的……

另一方面,高年级本科生以及研究生面临着就业的考验,如果一个学生只是学了一脑子的理论知识,对当前主流的软件开发技术知之甚少,缺少软件开发经验,那么他的就业可能就会比较困难。

出于以上两点考虑,设计并推出了《面向对象软件开发实践》这门计算机专业课程。

从我在北京理工大学近十年讲授此课程的经验,那些认真花时间学习了这门课程的学生都反映收获不小,不仅了解了许多当前业界所使用的主流开发工具和软件技术,还切实地把自己的开发技能提升了一个台阶,并且能对就业有直接的帮助。一些研究生还反馈他们能将在此课程上所学到的技术、思想和方法应用于各自领域的科研实践中,助力不少。

这门课所有教学内容围绕着“一个真正有用的软件是怎样开发出来的”这样一个主题而展开,介绍人们在实际软件开发过程中 “真正”使用的开发技术、软件系统设计原则和开发流程等。这是一门综合性的实践课程,涉及到多门计算机专业课程所介绍的知识。

在当今时代,开发支持手机、平板和PC的移动互联网应用大行于世,开发这样的让用户能“随时随地共享信息”的软件系统,是对新时代软件开发者的一大挑战。这门课程围绕着“移动互联应用开发这一中心,有步骤地,循序渐进地介绍了多种相互配合与彼此协作的具体软件开发技术(具体技术列表参见各系列的教学大纲),使用C#、Java和JavaScript三种主流的编程语言,具体来说,是使用C#和Java编写示例介绍面向对象软件开发理论,使用JavaScript开发Web前端页面,使用Java开发Android手机客户端,使用C#开发Web后端。

学习建议:

由于所涉及技术内容众多,整门课程被分为循序渐进的三个系列,请注意,本课程各系列学习内容的安排具有明显的层次与递进关系,后一系列的学习建构于前一系列的基础之上

(1)对于在校学生,或没有太多开发经验的学习者,建议从第一系列开始循序渐进地跟学,并认真地完成作业,方才有较满意的学习效果,提醒一下:这需要花费较多的时间与精力

(2)对于己有经验的学习者,或者是在职的软件工程师,则可以采用选学的方式,从本课程诸多模块中选择您所需要的进行学习,作业能否完成则不作要求。

对于每一个具体的技术领域,我都精心地进行了选择和安排,能够帮助您高效地把握特定技术领域的要点,并对学习中的难点进行了透彻解析,可以为您打好进一步自行深入探索技术内幕的基础,


以下是各系列的具体介绍

第一系列:基本技能训练
     主要介绍面向对象开发的基础理论,培养面向对象编程基础技能。这一部分会介绍诸如重构、设计模式、测试驱动开发等重要的面向对象理论、方法与技术,同时也介绍Windows Forms可视化设计,Android组件化开发,Socket编程等等用技术。

这一系列课程属于起步”与“打基础阶段。

第二系列:专业技能训练
     这一系列的学习重点是掌握业界使用的部分主流技术的技术内幕与开发要点,培养能胜任软件开发工作所需的职业技能。具体内容包容:异步调用与并行计算,Windows和Andorid数据存取技术,JavaScript前端开发基础及AngularJS等常用框架。这些技术,将在第三系列中被组合起来开发移动互联应用。

这一系列学习任务与难度,与第一系列相比,可以说是倍增,属于爬坡”与“攻坚阶段。

第三系列:实战技能训练

这一系列的课程,偏重于系统分析与设计,介绍软件系统的典型架构,培养软件系统的分析与设计能力。具体来说,我们将把前两系列(特别是第二系列)所介绍的各种技术组合起来,在面向对象分析与设计(OOAD)理论的指导下,针对具体的开发场景,完成从分析、设计再到实现的全过程,开发出可以使用手机、平板和PC“随时随地共享信息”的“移动互联软件应用系统”。

这一系列的课程,可以看成是冲刺”与“实践阶段。

期望这三个系列的课程,能帮助您掌握当前主流的软件开发技术,提升您的软件开发技能,为您成长为一名优秀的软件工程师,助一臂之力!

证书要求

证书规则将在开课前发布。

预备知识

必须学过:《C#/Java面向对象程序设计》、《操作系统原理》、《数据结构》

如果还学过以下课程则更好:《软件工程》、《数据库基础》、《计算机网络》

授课大纲

《面向对象软件开发实践》之“基本技能训练”


一、千里之行,始于足下
1.1 欲谋其事,先正其意——课程概述与学习指南
1.2 工欲善其事,必先利其器——搭建学习与开发环境
1.3 温故而知新——重新认识面向对象
【选修】使用C#开发桌面应用——WinForm入门

二、练武不练功,到老一场空
2.1 万丈高楼平地起——把握面向对象开发基础技能
2.2 面向对象真实软件技术剖析——.NET 委托与事件揭秘
2.3 面向对象思想助推技术学习——聊聊Android开发中的Activity

三、拳不离手,曲不离口
3.1 重温儿时搭积木的乐趣——组件化开发
3.2 大牛 vs 菜鸟——重构与代码质量
3.3 好钢是如何炼出来的——单元测试与测试驱动开发
【选修】Android组件化开发技术基础

四、不识庐山真面目,只缘身在此山中
4.1 快点,再快点——多线程开发技术基础
4.2 无网不胜——网络开发技术基础
【选修】举一反三——掌握Android多线程开发基础技术
【选修】请遵守交通规则——线程同步
【选修】这里的世界很精彩——Socket网络开发技术进阶

五、山重水复疑无路,柳暗花明又一村
5.1 软件开发之道,简单易懂——聊聊面向对象软件设计基本原则
5.2 万丈高台,起于垒土——类设计指南
5.3 软件开发之内功心法——SOLID设计原则
5.4 软件开发之九阴真经——设计模式及应用选讲

5.5 从OOP到CBD再到互联网—— 一个计算器软件的演化过程

`
参考资料

本课程所涉及到的主要参考书如下:

1.《.NET 4.0面向对象编程漫谈》基础篇和应用篇 金旭亮

2.《重构:改善既有代码的设计 》Martin Fowler

3.《设计模式:可复用面向对象软件的基础》Erich Gamma等

4.《敏捷软件开发(原则模式与实践)》Robert C. Martin

5.《UML和模式应用(第3版)》Craig Larman


有些与本课程相关的一些学习资料(比如教师针对某个技术点展开写一系列博客文章,或者是一些外部资源链接及下载等等),可能不适合放到网易云课堂,它们将在教师个人网站:http://www.jinxuliang.com 上提供。有些示例的数据需要从教师网站上实时下载,有些实例本身就直接部署在教师网站上,学生可以通过浏览器直接运行之。

常见问题
  • 这门课围绕着“移动互联应用”而展开,介绍了不少微软技术,而现在互联网公司很少用微软技术,为什么呢?

有关微软技术的“优劣”,一直是个敏感话题,各程序员大致分为三个集团:软粉、软黑和中间派(其成份复杂,包容骑墙、合稀泥、看热闹等人),时不时地引发激烈口水战。

这个问题给初学者的思想带来了一定的混乱,也引发了一定的疑虑,所以,这里我稍微详细地分析一下这个问题。

(1)最大的疑问:互联网公司很少用微软技术,是因为微软技术不行?

要判定某技术行还是不行,必须针对特定的应用场景,选择多种技术,进行比较全面技术对比分析,才能得到在这个场景下谁行谁不行的结论,没有做这种对比分析,就笼统地说”XXX技术不行“,那你说这结论靠谱吗?

依我看互联网公司之所以青睐开源技术而不用或少用微软技术,微软技术本身的优劣这个问题根本就不是主要因素,更多是出于一种商业上的考虑所作出的决策。现在是市场经济,互联网公司基于商业利益,权衡各种利弊,做出技术选型决定是无可厚非的,但对于学习者而言,学习还是要少一些功利性为好,举个例子,高等数学似乎在开发中不能直接用到,那高校开设这么多学时的高等数学课程就是在浪费大家的时间,真的是这样的吗?

(2)这门课程讲授的是“面向对象”,面向对象理论本身是独立于语言和平台的。其实这门课程之所以介绍微软技术的原因很简单,一是因为C#本身是一个优秀的主流面向对象编程语言,对初学者比较友好,用它学习面向对象很合适;另一个原因是授课教师(我)本人长期使用C#开发,大量的示例都是C#写的,转为其他语言似乎并无必要。当然,在我有这个时间与精力时,也许会把这门课程发展为多个平台的版本。

(3)各种技术是相通的,底层原理是通用的。比如在第三系列中,我介绍了使用AngularJS作为前端,使用ASP.NET core Web API作为后端开发“单页面(SPA)”应用程序,要将后端从ASP.NET core Web API转为流行的node.js,亦或是用PHP重写后端Web服务,很困难吗?事实上,这门课程介绍了HTTP,JavaScript,REST……,所有需要的知识都介绍了,转为node.js之类其他Web后台框架,只欠临门一脚罢了!

(4)具体软件技术与开发工具都是不断变化的,想“一招鲜,吃遍天“,只是一种美好的想象,干这一行,就得不断地学习,不管是学C#入门,还是学Java入门,亦或是学Python入门,……,其实都不要紧,重要的是你是否入了门。”师傅领进门,修行靠个人“,入门之后,你想学什么就学什么,工作需要什么就学什么,只要你在学习过程中培养出来了自学的能力,这些都还算件事吗?要盯着”能力培养“在这块用劲,而不要纠缠于”VS是全宇宙最强的IDE“,”PHP是最好的编程语言”之类天天打口水战,或者是盲目地追逐潮流,早些年iOS吃香,就去学ObjectiveC,现在前端需求大增,又马上捡起本JavaScript书狂看……


  • 这门课怎么写作业,怎么考核?

这门课几乎没有什么其他课程常见的单选、多选之类的标准化题型,因为我们的目标是写出真实可用的软件,培养出真正的技能,而不是去记忆一堆的知识点,因此,多数作业都要求学生编程,或者针对某个具体开发场景设计解决方案并进行讨论。

结课时,每个学生都要求写一个功能相对完备的程序,同时配上相应的开发文档。

分数主要是由学生互评确定,必要时由教师进行审核和调整。


  • 这门课程使用哪种编程语言,有哪些软硬件要求?

面向对象编程语言有多种,本课程主要使用Java/C#,在Web开发技术部分,我们还使用JavaScript。

软件开发环境使用Visual Studio 2013/2015和Eclipse 4.4,操作系统使用Windows 7/8/8.1/10,你应该有一个4.0以上版本的Android手机或平板,以便测试和运行手机应用。


  • 我需要做哪些准备

这门课程要求学生具备使用Java/C#/JavaScript三种编程语言写程序的能力。

如果你不会Java,则在学习之前就需要先学学Java了,你可以通过学习Java书籍,观看教学视频等方式掌握Java,另外,你也可以访问授课教师的个人在线教育网站http://www.jinxuliang.com,直接使用北京理工大学计算机学院的Java课件及实例进行学习,这门课程的授课教师与本课程是同一位。

对于C#,我在个人教学网站上录制了《我的第一门编程课(C#版)》,包容约120个短视频,循序渐进地系统地介绍了C#编程与.NET Framework技术基础,足以帮助你成长为一名C#软件开发者,对于己有经验的开发者,可以使用这个网上课程快速地把握C#编程技术。

最后一个是JavaScript,作为全世界使用者最多的编程语言,网上有数之不尽的技术资源可供学习。本课程第二系列中有一个单元向你介绍JavaScript编程精要,进而介绍当前最流行的Web前端开发框架,AngularJS,然后在第三系列中你将使用AngularJS开发移动互联应用前端。虽然由于课时有限,本课程不能系统地全面地介绍JavaScript,但所讲授的内容都是精选的,能为你学习与掌握JavaScript和AngularJS提供强大的助力。

授课老师
金旭亮

金旭亮

讲师

所属微专业

所属系列课程

分享