课程概况
讲述内容
本课程从软件开发方法学的角度,讲述面向对象的理论、方法与技术体系,主要内容包括:
基础知识
介绍软件开发方法学概述, 讲述面向对象方法的基本概念及主要特点, 分析比较各种建模方法, 简要介绍 UML及本课程的 OO 方法概貌
面向对象的分析 OOA
介绍如何通过研究问题域和用户需求, 发现问题域中与系统责任有关的对象、对象的特征和互关系,建立一个直接映射问题域、符合用户需求的 OOA 模型。
面向对象的设计 OOD
首先在 OOA 基础上, 介绍如何运用面向对象的概念与原则, 按照具体的实现条件进行系统设计, 产生一个可实现的 OOD 模型。
进而介绍如何将模型优化,得到易于演化和实现的设计,主要介绍设计模式。
专题研讨
课程进行中,会就新型软件开发技术、程序设计范型、编程语言等专题进行报告研讨。
鼓励同学们报名做技术专题报告, 和大家分享知识,共同研讨。
技术报告主题范围(不限于):
- 软件开发方面的新方法, 新技术, 新语言等介绍
- 软件开发技术发展趋势, 综述分析
- 优秀的软件开发样例(体现软件开发方法学的应用)
- 国际学术会议如 OOPSLA, ECOOP, ASPLOS, POPL, ICSE 等的热点介绍
建模实践
主要用面向对象方法完成一个小型系统的分析、设计与实现验证。该系统在系统原型完成后可能会有需求变更,因此要针对该变更调整设计与实现。总结报告需要涵盖如下内容:
- 需求描述与需求模型
- 系统分析模型
- 系统设计模型
- 原型系统
- 系统新需求 (+)
- 调整后的设计与实现 (+)
- 分析总结
时间安排:
序号 | 时间 | 内容 |
---|---|---|
1 | 公开募集题目和需求设计 | W5 |
2 | 小组自由组队(2-3人),确定题目 | W6 |
3 | 完成系统开发和部署 | W7-11 |
4 | 甲方初次验收并提出需求变动 | W12 |
5 | 进一轮开发 | W13-15 |
6 | 甲方再次验收并提交验收报告 | W16 |
公开募集题目和需求设计
有兴趣当甲方的同学提交题目和详细的需求设计。系统功能不需要太复杂,要体现面向对象的方法并考虑未来的需求变动。甲方不需要进行项目开发,承担项目管理的角色。乙方需要用面向对象技术进行项目开发。
题目发布与组队选题
任务1提交后, 我们会选取几位同学作为甲方,他们的需求设计将成为大作业的题目。其他同学选择感兴趣的题目,成为乙方。
甲方的任务是学习如何管理软件项目的研发,进行过程管理。需和乙方沟通,根据 乙方的进度和自己的实际需求,管理需求变更。
需求变更
甲方对乙方的研发任务初次验收后,发布变更的需求(需求变更是软件开发过程中常见的情况),良好的面向对象设计应能较好地适应需求变更,以较低的成本取得较高的开发质量。
再次验收
乙方根据变动的需求再次开发完成后,提交所有设计文档和代码。甲方进行验收并评估,提交验收报告,对自己的题目和需求变更的合理性、乙方完成程度进行分析。
考核要求
-
读书报告: 40分
-
每人两次读书报告, 每次20分
-
平时作业: 40分
-
作业提交到自己的Github库中
-
课堂表现: 10分
-
期末总结: 10分
教材与参考书
教材:
- 邵维忠, 杨芙清, 面向对象的分析与设计, 清华大学出版社, 2013 年 1 月, ISBN: 978-7-302-30120-2
参考书:
-
谭云杰, 大象 -- Thinking in UML(第二版), 中国水利水电出版社, 2012 年 3 月, ISBN: 978-7-5084-9234-6
-
Eric Freeman, Elisabeth Robson, Bert Bates, Kathy Sierra. Head First Design Patterns. O’Reilly Media. Oct 2004
参考资料
转发一个设计分析
- 一个游戏玩家对一个游戏的事件驱动设计的分析
设计模式
- Erich Gamma, Richard Helm, Ralph Johnson, John Vlissides. Design Patterns: Elements of Reusable Object-oriented Software. Addison Wesley Longman. 1995
- Eric Freeman, Elisabeth Robson, Bert Bates, Kathy Sierra. Head First Design Patterns. O’Reilly Media. Oct 2004
软件体系结构风格, 数据库
- What is the difference between a process and a thread
- Parallel programming model
- Architectural pattern
- List of software architecture styles and patterns
- Object database
- NoSQL database
UML工具
- UML的版本历史,每个版本的特点,各种建模示例均可在此找到,具有重要的参考价值
- UML 绘图工具大全,其中有一些较为小巧的如 yED, UMLet 等可做漂亮的工作
- 目前UML工具中比较流行的是在线画图工具,如开源的draw.io, draw.io 也提供离线版本, 在Chrome浏览器中运行
- 一些建模工具使用文本(如Markdown格式)描述图形,然后将文本编译生成图形。典型的是 PlantUML, yUML, Mermaid,等
- SDL(Specification and Description Language)是一个广泛应用于电信领域,可对分布式系统和反应式系统进行精确建模的语言
消息, 消息中间件, 并发编程
- Concurrency at Wikipedia
- Messaging Pattern at Wikipedia
- AllanKay on Messaging , AlanKay的一封信,他表示OO的要点不在Object, 而在于Message -- The big idea is "messaging" - that is what the kernal of Smalltalk/Squeak is all about (and it's something that was never quite completed in our Xerox PARC phase).
- 这篇博文介绍了Rails设计中的对象和消息, 也引用了AlanKay关于Message的观点 -- To Kay, what's important is the relationships between objects, and that the real abstraction is in the messages, not the objects.
- Erlang 是一个支持Actor模型的编程语言. Wikipedia上也有关于Erlang的介绍: Concurrency and distribution orientation of Erlang at Wikipedia
- Akka是一个开源的并发编程框架, 支持Actor模型
- 流行消息框架或消息中间件: ActiveMQ, RabbitMQ, ØMQ, Kafka
继承 vs 组装
- Interface
- Inheritance(OOP)
- Subtyping
- Polymorphism
- Duck Typing
- Mixin
- Liskov substitution principle
- Composition over inheritance
- OOSC-2: HOW TO FIND THE CLASSES, taken from chapter 22 of the book Object-Oriented Software Construction, second edition, Prentice Hall, 1997
- OBJECT-ORIENTED ANALYSIS, KEY CONCEPTS, BENEFITS AND CRITICISMS, by Prof. Vicki Sauter, November 29, 1999
- Interface vs Base class, a discussion at stackoverflow
- Choosing Between Classes and Interfaces, MSDN的技术文档,建议多用 Abstract Class: While both abstract classes and interfaces support separating contract from implementation, interfaces cannot specify new members in later versions while abstract classes can add members as needed to support additional functionality.
需求分析
- Requirement and Requirement Engineering
- Requirement elicitation
- Requirement analysis
- Systems modeling
- Verification and validation
- Wikipedia Use case, Scenario (computing)
- 谭云杰, 大象:Thinking in UML(第2版), 中国水利水电出版社, 2012. 第8-10章
软件开发技术
- David Parnas 关于modular design中模块应该 high cohesion 和 loose coupling 的思想, 以及 Information Hiding, 见于论文 On the Criteria To Be Used in Decomposing Systems into Modules
- Frederick P. Brooks的No Silver Bullet, 后来成为 The Mythical Man-Month的一个章节
- Eric S. Raymond 的经典著作 The Art of Unix Programming,中文版 Unix编程艺术
- Toronto University CS 课程 Software Architecture & Design 的 Structured Design
关于面向对象
- Wikipedia Progrmming Paradigm, various programming paradigms overviews graph
- Wikipedia Object-oriented programming
- Wikipedia Object--orientation
- 维特根斯坦的逻辑哲学论,没有证据表明OO和逻辑哲学论有直接关联,但这本书的思想和风格有可能对你看待程序设计和软件开发有所启发
其他声音
- Lawrence krubner 批判 OOP 的一篇长文 Object Oriented Programming is an expensive disaster which must end(真的非常长,但值得仔细阅读)
- Arguments Against Oop , Summary of Criticisms Against OO
- Oop Arguments Debates And Discussion