“面向对象探究问题之本,可信软件编织精彩世界”,软件无时不在、无处不在地渗入了人们的生活,改变着我们的生活方式和思维方式。计算机、软件人才肩负着对未来社会的责任,影响着千家万户的幸福生活。如何设计软件,使其不仅能满足人们当前的需要,还能适应今后发展的需要,《面向对象分析与设计》课程将会介绍一种思维方式及其相应的技能。
课程是软件工程专业重要的专业课。学生在掌握了一定的编程能力、完成了操作系统、计算机网络、数据库系统等课程学习之后,面临着如何去设计软件解决方案这一重要的任务。
课程的核心是讲解用面向对象的思维方式,1)对问题领域进行分析,抽象出领域概念、领域概念之间的关系、各自的特征等,并以领域模型的方式表达出来;2)以软件专家的角度进行需求分析、定义软件职责,定义/设计待开发系统的软件类、软件类之间的关系、软件类的属性,讨论如何在软件类之间分配系统职责;3)参考使用前人已经总结出来的解决某一类问题的方案(设计模式)。同时,课程会讲解一些专业的技术、方法,如名词法、CRC(类-关系-协作)方法、GRASP(通用职责分配软件原则)等,并通过类图、顺序图、状态图等UML工具展示、验证设计方案的可行性、合理性。
软件设计是一门艺术。设计方案的好坏,没有统一的标准,衡量的一般准则是“能否满足客户的需求”。因为,软件行业的一条“公理”是“唯一不变的就是需求始终在变”,软件人员唯一能做的就是“拥抱”变化。设计师的理念、经验、知识、灵感都会映射到设计方案上,在满足当前的目标之外,还要考虑今后的可扩展性、可移植性、可重用性等。课程通过讲解设计模式(Design Pattern)、面向对象设计原则(OOP)等理念,使学生的设计能力、设计意识得到的训练。
希望通过课程的学习,能够有助于同学们在若干年之后成为优秀的软件设计师。
面对一个软件开发项目,学会如何入手去解决问题,从问题领域分析、建模,到形成设计的过程;既要思考实现系统功能这一基本要求,更要考虑如何使设计方案具有扩展性、适应性。掌握常用的设计工具,以便很好地去展示设计思想。
第1周 第一章 面向对象概述
1.1 序言
1.2 课程定义
1.3 面向对象思想的起源
1.4 面向对象的基本概念
1.5 面向对象的思考方式
1.6 面向对象的核心特征(一)
1.7 面向对象的核心特征(二)
第2周 第二章 建模工具
2.1 UML序言
2.2 用例模型
2.3 活动图
2.4 类图
2.5 顺序图
2.6 通信图
2.7 状态图
第3周 第三章 面向对象分析 (一)
3.1 面向对象分析设计概览
3.2 面向对象分析方法(一) 名词法
3.3 面向对象分析方法(一) 名词法案例
3.4 面向对象分析方法(二) 分析模型法
3.5 面向对象设计(初步)
第4周 第四章 面向对象分析 (二)
4.1 标识概念类和对象的注意点
4.2 CRC方法标识概念类
4.3 CRC方法建模的一些规则
4.4 CRC方法建模的案例:ATM取款机软件
第5周 第5章 领域模型
5.1 领域模型定义
5.2 领域模型建模指导
5.3 领域模型案例
5.4 系统顺序图
5.5 其他的需求信息
第6周 第6章 从分析到设计
6.1 准备高质量的用例模型
6.2 高质量的用例描述
6.3 契约式设计
6.4 操作契约
6.5 开始进入设计
6.6 面向对象设计
第7周 第7章 设计原则GRASP(一)
7.1 GRASP原则一:创建者
7.2 GRASP原则二:信息专家
7.3 GRASP原则三:低耦合
7.4 GRASP原则四:控制器
7.5 GRASP原则五:高内聚
第8周 第8章 设计原则GRASP(二)
8.1 GRASP原则六:多态
8.2 GRASP原则七:纯虚构
8.3 GRASP原则八:间接
8.4 GRASP原则九:隔离变化
8.5 其他面向对象设计原则1:开-闭原则
8.6 其他面向对象设计原则2
8.7 其他面向对象设计原则3:依赖倒置原则
第9周 第九章 GOF设计模式(一)
9.1 关于设计模式
9.2 GOF设计模式一:单实例
9.3 GOF设计模式二:适配器
9.4 GOF设计模式三:外观
9.5 GOF设计模式四:观察者模式(一)
9.6 GOF设计模式四:观察者模式(二)
第10周 第十章 GOF设计模式(二)
10.1 策略模式
10.2 修改后的设计方案
10.3 简单工厂模式
10.4 工厂模式
第11周 第十一章 成为好的架构师
11.1 心存志远
11.2 成为一个好的架构师(一)
11.3 成为一个好的架构师(二)
11.4 课程总回顾
C++ 或者Java等面向对象程序设计语言
UML及其工具,如 Enterprise Architect
采取百分制,测验题目围绕视频与PPT,只要认真学习都能够取得好的成绩:
60分-79分可获得合格证书;
80分以上可获得优秀证书。
教材
Applying.UML.and.Patterns,3rd.Edition , Graig Larman
参考书
Object.Oriented.Thought.Process.The.2nd.Edition.
Head.First Object Oriented Analysis and Design (2006.11)
深入浅出面向对象分析与设计,李云华著
【1】为什么要设计、为什么恰当的软件设计是一种过程、它很重要吗?
答:良好的设计,能够使待开发系统更准确地满足客户的需要,同时有更大的可能性满足今后的需求变化,比如 客户业务扩展、技术更新、运行环境的改变等,极大地降低客户运营成本。
软件设计有一定的步骤,它的输入是领域模型、用例模型、前景文档、补充需求说明文档等资料。在此基础上,给出初步的架构设计、模块划分、类图。对一些重要的功能模块,通过设计顺序图可以动态检测 其实现的可行性、对部分模块通过状态图来分析各种状态下处理的各种事件等。如果遇到不合适的地方,需要返回前一阶段进行改进。设计是一个需要不断演化、完善的过程。
设计很重要!
【2】什么是面向对象设计、有没有超越面向对象设计的设计方法?
答:以面向对象的思维方式去研究、分析待开发系统,找出其中的对象、对象的属性、对象之间的关系、为对象分析分配职责,在对象的分工协作过程中完成整个系统的功能,这是面向对象设计。
谈不上“超越面向对象设计”。设计的方式目前看来主要有两大类: 面向功能分析设计、面向对象分析设计。对一个大而复杂的系统,一般先用面向功能的方式,对系统进行分层、或者划分子系统的方式。对某一个具体的子系统,考虑采用面向对象的设计方式。
【3】什么是好的设计、如何区分好的设计与坏的设计?
答:好的设计,有一些质量属性可以作为衡量的标准:如,可扩展性、可移植性、可靠性、可重用性等。符合这些性质的设计方案,一般而言,就是好的设计。
至于如何区分,笼统的标准就是 “满足客户需要的设计”,就是好的设计。理论一点评判,就是满足上述的质量标准。
【4】如何去设计、针对通常的设计问题,有没有现成的“处方”?
有,设计模式(design pattern)。前人为了解决某类问题,给出了很好的解决方案。当前的待开发系统也遇到类似的问题,可以考虑、借鉴前人的这个解决方案,省时、省力、可靠。