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