spContent=本课程介绍如何将面向对象的理论和技术应用于软件开发实践,引导学生走完从分析设计到编码测试再到发布的软件开发全流程,帮助学生掌握当前主流的面向对象软件开发技术和工具,培养从事软件开发工作所必需的职业技能。
提示:自2019年起,本课程转为由网易云课堂管理人员负责每年创建新学期,每学期持续一年,采用随到随学的模式,仍然免费。
任课教师不再提供教学、作业批改的服务。
本课程除偏理论部分外,所介绍部分技术己经陈旧,任课教师在自己的教学网站上提供更新服务,提供最新的开发技术自学资源,包容.NETCore3.1,Android10,Kotlin等在线课程,访问以下链接了解详情:
=======================================================
计算机专业高年级学生(大三下至大四),基本上已经学完计算机专业的骨干课程,比如《数据结构与算法》、《操作系统》、《面向对象程序设计》、《软件工程》等,这些课程都非常有用,但它们要不偏重于理论,要不偏重于编程语言的语法等细节,学生缺少一门这样的课,这门课能告诉他们:一个有用的软件到底是如何诞生的,我们在学校里学的操作系统、数据结构等专业课程到底在开发中是怎样应用的……
另一方面,高年级本科生以及研究生面临着就业的考验,如果一个学生只是学了一脑子的理论知识,对当前主流的软件开发技术知之甚少,缺少软件开发经验,那么他的就业可能就会比较困难。
出于以上两点考虑,设计并推出了《面向对象软件开发实践》这门计算机专业课程。
这门课所有教学内容围绕着“一个真正有用的软件是怎样开发出来的”这样一个主题而展开,介绍人们在实际软件开发过程中“真正”使用的开发技术、软件系统设计原则和开发流程等。这是一门综合性的实践课程,涉及到多门计算机专业课程所介绍的知识。
在当今时代,开发支持手机、平板和PC的移动互联网应用大行于世,开发这样的让用户能“随时随地共享信息”的软件系统,是对新时代软件开发者的一大挑战。这门课程围绕着“移动互联应用开发”这一中心,有步骤地,循序渐进地介绍了多种相互配合与彼此协作的具体软件开发技术(具体技术列表参见各系列的教学大纲),使用C#、Java和JavaScript三种主流的编程语言,具体来说,是使用C#和Java编写示例介绍面向对象软件开发理论,使用JavaScript开发Web前端页面,使用Java开发Android手机客户端,使用C#开发Web后端。
学习建议:
由于所涉及技术内容众多,整门课程被分为循序渐进的三个系列,请注意,本课程各系列学习内容的安排具有明显的层次与递进关系,后一系列的学习建构于前一系列的基础之上。
(2)对于己有经验的学习者,或者是在职的软件工程师,则可以采用选学的方式,从本课程诸多模块中选择您所需要的进行学习,作业能否完成则不作要求。
对于每一个具体的技术领域,我都精心地进行了选择和安排,能够帮助您高效地把握特定技术领域的要点,并对学习中的难点进行了透彻解析,可以为您打好进一步自行深入探索技术内幕的基础,
以下是各系列的具体介绍
第一系列:基本技能训练主要介绍面向对象开发的基础理论,培养面向对象编程基础技能。这一部分会介绍诸如重构、设计模式、测试驱动开发等重要的面向对象理论、方法与技术,同时也介绍WindowsForms可视化设计,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.《.NET4.0面向对象编程漫谈》基础篇和应用篇金旭亮
2.《重构:改善既有代码的设计》MartinFowler
3.《设计模式:可复用面向对象软件的基础》ErichGamma等
4.《敏捷软件开发(原则模式与实践)》RobertC.Martin
5.《UML和模式应用(第3版)》CraigLarman
有关微软技术的“优劣”,一直是个敏感话题,各程序员大致分为三个集团:软粉、软黑和中间派(其成份复杂,包容骑墙、合稀泥、看热闹等人),时不时地引发激烈口水战。
这个问题给初学者的思想带来了一定的混乱,也引发了一定的疑虑,所以,这里我稍微详细地分析一下这个问题。
(1)最大的疑问:互联网公司很少用微软技术,是因为微软技术不行?
要判定某技术行还是不行,必须针对特定的应用场景,选择多种技术,进行比较全面技术对比分析,才能得到在这个场景下谁行谁不行的结论,没有做这种对比分析,就笼统地说”XXX技术不行“,那你说这结论靠谱吗?
(3)各种技术是相通的,底层原理是通用的。比如在第三系列中,我介绍了使用AngularJS作为前端,使用ASP.NETcoreWebAPI作为后端开发“单页面(SPA)”应用程序,要将后端从ASP.NETcoreWebAPI转为流行的node.js,亦或是用PHP重写后端Web服务,很困难吗?事实上,这门课程介绍了HTTP,JavaScript,REST……,所有需要的知识都介绍了,转为node.js之类其他Web后台框架,只欠临门一脚罢了!
(4)具体软件技术与开发工具都是不断变化的,想“一招鲜,吃遍天“,只是一种美好的想象,干这一行,就得不断地学习,不管是学C#入门,还是学Java入门,亦或是学Python入门,……,其实都不要紧,重要的是你是否入了门。”师傅领进门,修行靠个人“,入门之后,你想学什么就学什么,工作需要什么就学什么,只要你在学习过程中培养出来了自学的能力,这些都还算件事吗?要盯着”能力培养“在这块用劲,而不要纠缠于”VS是全宇宙最强的IDE“,”PHP是最好的编程语言”之类天天打口水战,或者是盲目地追逐潮流,早些年iOS吃香,就去学ObjectiveC,现在前端需求大增,又马上捡起本JavaScript书狂看……
这门课几乎没有什么其他课程常见的单选、多选之类的标准化题型,因为我们的目标是写出真实可用的软件,培养出真正的技能,而不是去记忆一堆的知识点,因此,多数作业都要求学生编程,或者针对某个具体开发场景设计解决方案并进行讨论。
结课时,每个学生都要求写一个功能相对完备的程序,同时配上相应的开发文档。
分数主要是由学生互评确定,必要时由教师进行审核和调整。
面向对象编程语言有多种,本课程主要使用Java/C#,在Web开发技术部分,我们还使用JavaScript。
软件开发环境使用VisualStudio2013/2015和Eclipse4.4,操作系统使用Windows7/8/8.1/10,你应该有一个4.0以上版本的Android手机或平板,以便测试和运行手机应用。
这门课程要求学生具备使用Java/C#/JavaScript三种编程语言写程序的能力。