《软件设计模式与重构》本学期线上教学资源引进于华东师范大学姜宁康、陈小红老师主讲的《面向对象分析与设计》课程。教学大纲上有所差别,内容上两门课程各有侧重,但都主要讨论面向对象方法与思维。
优秀的软件需要精心的设计!如何设计软件,使其不仅能满足当前的需要,还能适应今后变化的需要,这是IT企业迫切需要的技能。
《软件设计模式与重构》(《面向对象分析与设计》)是软件工程专业重要的专业基础课,适合具备了一定的面向对象程序设计语言(如Java、C++等)编程能力的同学进一步深造,以便能在实际的软件项目开发时,给出良好的设计方案。课程讲解的核心:
-面向对象思维与方法;
-面向对象方法五大特征、七大原则以及常用设计模式。
-如何对问题领域进行分析,抽象出领域概念、关系等,并设计领域模型;如何定义待开发系统的软件类、软件类的属性,如何依据职责分配原则GRASP对软件类实施系统职责分配、如何定义软件类之间的关系。课程会讲解一些专业的技术、方法,如名词法、CRC(类-关系-协作)方法等;同时,通过UML工具,如类图、顺序图、状态图等,展示、验证设计方案的可行性、合理性。
软件设计是一门艺术,设计师的理念、经验、知识、灵感都会映射到设计方案上。通过课程的学习,帮助同学们在设计理念、设计能力等方面得到提升,为若干年之后成为优秀的软件设计师打下基础。
(1)通过学习常用软件设计模式结构、实现方法和适用场景。针对软件中存在的强耦合等问题,可应用合适的设计模式进行设计重构解耦。进一步理解面向对象方法基本特征、核心原则与基本方法。
(2)面对一个软件开发项目,学会如何入手去解决问题,从问题领域分析、建模,到形成设计的过程;既要思考实现系统功能这一基本要求,更要考虑如何使设计方案具有扩展性、适应性。掌握常用的设计工具,以便很好地去展示设计思想理。
采取百分制,主要由以下几部分构成:
(1)测验题目围绕视频与PPT,只要认真学习都能够取得好的成绩:
(2)线下课程实践;
(3)线下课程考查或考试;
C++ /Java/Python等面向对象程序设计语言
UML及其工具,如Astah, Visual Paradigm, Enterprise Architect
教材
实用软件设计模式教程,徐宏喆,董丽丽,侯迪,清华大学出版社,2017年2月第2版,ISBN:9787302435976
参考书
Applying.UML.and.Patterns,3rd.Edition , Graig Larman
Object.Oriented.Thought.Process.The.2nd.Edition.
Head.First Object Oriented Analysis and Design (2006.11)
深入浅出面向对象分析与设计,李云华著
面向对象UML系统分析建模,刘鹏远,温珏,桂超等著,清华大学出版社,2013年9月第1版,ISBN:9787302335962
深入浅出面向对象系统分析与设计,Breet D.McLaughlin等著,中国电力出版社,2009年2月第1版,ISBN:9787508353937
Head First 设计模式(中文版)Eric Freeman等著 ,中国电力出版社,2007年9月,ISBN: 9787508353937
面向对象分析与设计,Grady Booch等著,王海鹏,潘加宇 译,电子工业出版社,2016年5月第3版,ISBN:9787121286667
重构:改善既有代码的设计,Martin Fowler著,熊节 译,人民邮电出版社,2019年5月第2版,ISBN:9787115508652
设计模式,Erich Gamma等著,李英军等译,机械工业出版社,20019年6月,ISBN:9787111618331
设计模式之禅,秦小波著,机械工业出版社,2014年1月第2版,ISBN:9787111437871
【1】为什么要设计、为什么恰当的软件设计是一种过程、它很重要吗?
答:良好的设计,能够使待开发系统更准确地满足客户的需要,同时有更大的可能性满足今后的需求变化,比如 客户业务扩展、技术更新、运行环境的改变等,极大地降低客户运营成本。
软件设计有一定的步骤,它的输入是领域模型、用例模型、前景文档、补充需求说明文档等资料。在此基础上,给出初步的架构设计、模块划分、类图。对一些重要的功能模块,通过设计顺序图可以动态检测 其实现的可行性、对部分模块通过状态图来分析各种状态下处理的各种事件等。如果遇到不合适的地方,需要返回前一阶段进行改进。设计是一个需要不断演化、完善的过程。
设计很重要!
【2】什么是面向对象设计、有没有超越面向对象设计的设计方法?
答:以面向对象的思维方式去研究、分析待开发系统,找出其中的对象、对象的属性、对象之间的关系、为对象分析分配职责,在对象的分工协作过程中完成整个系统的功能,这是面向对象设计。
谈不上“超越面向对象设计”。设计的方式目前看来主要有两大类: 面向功能分析设计、面向对象分析设计。对一个大而复杂的系统,一般先用面向功能的方式,对系统进行分层、或者划分子系统的方式。对某一个具体的子系统,考虑采用面向对象的设计方式。
【3】什么是好的设计、如何区分好的设计与坏的设计?
答:好的设计,有一些质量属性可以作为衡量的标准:如,可扩展性、可移植性、可靠性、可重用性等。符合这些性质的设计方案,一般而言,就是好的设计。
至于如何区分,笼统的标准就是 “满足客户需要的设计”,就是好的设计。理论一点评判,就是满足上述的质量标准。
【4】如何去设计、针对通常的设计问题,有没有现成的“处方”?
有,设计模式(design pattern)。前人为了解决某类问题,给出了很好的解决方案。当前的待开发系统也遇到类似的问题,可以考虑、借鉴前人的这个解决方案,省时、省力、可靠。