HeadFirst面向对象分析与设计摘要笔记

本文详述了软件开发过程中的关键步骤,包括需求分析、设计与实现,重点介绍了OO原则、用例驱动开发、架构设计等核心概念。同时,提供了解决大问题的方法论,如功能列表、用例图、领域分析、模块划分和设计模式的应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

伟大软件的三步骤
1.确认你的软件做客户想要它做的事
2、运用基本的OO原则来增加软件的灵活性---OO原则是什么?
3、努力实现可维护、可重用的设计--什么是可重用?

需求
1.好的需求确保你的系统如预期那样运作
2.确认你的需求涵盖所有用例
3.运用用例找出客户忘记的事
4.你的用例将揭露任何不完整遗漏的需求,你可能需新的需求加进你的系统中
5.你的需求总是随着时间成长

分析与设计
1.设计良好的软件容易改变与扩展
2.使用像封装与继承这样的基本OO原则来确保你的软件具有灵活性
3.如果设计没有灵活性,就改变它!别与环设计拖鞋,几时那是你自己的设计,要改就是要改。
4.确认你的每一个类都具有内聚性:没一个雷都应该巨剑在把一件事情做得很好上。
内聚性:每个类确保这件事发生的理由只有一个,类的改变不会一起其他类的改变
5.随着软件的设计生命周期的展开,要持续努力提高内聚力

OO原则
1.讲变化之物封装起来

2.对接口编码,而不是对实现

3.应用程序的每一个类只有一个改变的理由。(内聚性)

4.类是关于行为与功能的

5.OCP(open-closed principle)开闭原则
  对扩展开放,对修改关闭
  扩展有效程序代码,而不是改变当中的程序代码
  简单的实现方式为继承

6.(DRY)do not repaeat yourself不自我重复原则
   通过将共同之物抽取出来并置于单一地方来避免重复的程序代码
   确保你对应用程序中每一个功能与需求只实现一次
   特定片段与信息具有单一来源,该单一来源必须合理

7.SRP(single responsibility principle)单一职责原则
  每一个对象聚焦在一个职责上
  当你得每一个对象都只有一个改变的理由时,你已经正确地实现单一职责原则。
  确保单一职责的方法
  the 类型 方法名 itself 是否合理

8.LSP(liskov subsititution principle)替换原则
  子类型必须能够替换其基类型
  LSP完全关系到设计良好的继承。当你从一个基类继承下来时,你必须需能用你的子类替换该基类且不会把事情弄糟,
  否则,你就错误地使用了继承
  继承必须确保父类型所拥有的特质(属性与方法),对子类型仍然成立(有意义)

假如发现程序代码违反LSP,考虑利用委托,组合或聚合来使用来自其他类的行为而无需使用继承
(子类不恩能够替换它的基类时可能使用)
9.委托
  委托是将特定工作的责任委派给另一个类或方法
  最好在你想要使用另一个类的功能性时使用
  假如你需要使用另一个类的功能性,但不行改变该功能性,考虑以委托代替继承

(子类不恩能够替换它的基类时可能使用)
10.使用组合将来自其他多个类()的行为集合起来
   当引用一整群的行为时,使用组合
   组合让你使用来自一组其他类的行为,并且可以在运行时切换该行为
   若对象有其他对象组成,当拥有对象被销毁时,被拥有对象(组合的一部分)也跟着消失
   在组合中,由其他行为所组成的对象用于那些行为。当对象被摧毁时,其所有行为也被摧毁。组合中的行为不存于组合本身以外。

11.聚合:组合,但没有突然的结束
(子类不恩能够替换它的基类时可能使用)
   聚合时当一个类被用作另一个类的一部分时,但仍然可以存在于该类之外

12.除了继承,有几种方式可以重用来自其他类的行为
   委托:当你不想改变其行为,而实现该行为不是此对象本身的责任时,就将行为委托给另一个类
   组合:使用组合,你可以重用来自一个或多个类的行为,特别是来自一个族群的类的行为。你得主要对象完全用于被组合对象
         ,而且被组合对象不存在主要对象之外
   聚合:当你想要组合的所有好处,但是也想要在主要对象之外使用被组合对象的行为时,就使用聚合

假如你喜欢委托、组合、聚合胜过继承,你的软件通常会更灵活,更易维护,扩展与重用。 
 

解决大问题
1.收集功能列表
2.设计用例图,必须涵盖系统的功能列表
  参与者:与系统交互的部分,不总是系统的使用者
3.领域分析:用客户所用的语言检查你得设计
4.为系统设计模块,将大问题分解成小的功能片段
5.运用设计模式帮助我们解决小的问题

架构
定义:架构是你的设计结构,强调应用程序中最重要的部件以及那些部件之间的关系
从功能入手,找出最重要的功能,可能由多个组成

架构三问:
1.他是系统本质的一部分吗?(你能想象系统没有这个功能吗?)
2.这到底是什么意思?假如你部确定某项功能的叙述究竟是什么意思,把注意力放在改功能上可能就很重要
3.我“到底"该如何做?假如你不知道如何处理某特定问题,最好花点时间去正视该功能

从哪个最重要的功能开始?关键是减少风险

架构拼图与构建场景

开发方式:
1.用例驱动开发
2.功能驱动开发
3.测试驱动开发

编程实践
1.契约式编程为你与软件用户同意遵守的软件行为建立一个共同的协议
2.防御性编程不信任其他软件,进行广泛的错误及数据检查以确保其他软件不会给你不良的或不安全的信息

面向对象分析设计项目的生命周期
1.功能列表:从高层次找出应用程序应该做什么
 客户访谈
 关键功能列表
 

2.用例图:确认应用程序要执行的大流程,以及任何牵涉到的外部力量
 外部启动器

3.分解问题:将应用程序分解成功能性模块,接着决定以什么样的次序处理每个模块
 架构
 分析
 共同性
 委托
 变化性

4.需求:为每个功能模块想出各自的需求,并且确定他们复合整体轮廓
 外部启动器
 场景
 替换路径
 迭代
 需求列表

5.领域分析:想出你的用例如何对应到应用程序理的对象,确认你课客户跟你又相同的认识
 文本分析

6.初步设计:加入关于对象的细节,定义对象之间的关系,并且运用原则与设计模式
 封装
 设计模式
 设计原则
 类图
 迭代

7.实现:编写程序代码,进行测试,确认它有效运作。为每个行为,每个功能,每个用例,每个问题,做这些事,直达你完成.
 OO原则
 封装
 测试驱动
 功能驱动
 用例驱动
 测试场景

8.交付

 

强烈推荐 “《深入浅出面向对象分析设计》对OOA&D这个主题的探讨令人耳目一新。 本书众不同之处在于它将焦点摆在学习上,本书的诸位作者让从业人员对OOA&D的内涵不再感到遥不可及,而且它在实际工作中确实有用。”               ——Iva Jacobson Ivar Jacobson Consulting UML之父 “隐匿在诙谐图片逗趣文字背后的是对OOA&D这个主题认真、睿智且极具匠心的阐述。阅读本书,感觉就像站在专家的肩膀上环顾四方,聆听他一步步、细心倾诉那些重要的议题,并且告诉我为什么。”             ——Edward Sciore 波士顿学院计算机科学系副教授 “刚读完这本书,我就深深地爱上它了!我最喜欢的一件事就是本书把焦 点放在我们实践OOA&D的原因上一写出伟大的软件!”                         ——Kyle Brown IBM杰出工程师你是否早已对市面上那些只有在成为专家以后读起来才有感觉的OOA&D书籍感到厌倦?你可能早就听说过OOA&D书籍能帮助你写出伟大的软件一让老板高兴、客户满意的软件。 《深入浅出面向对象分析设计》将告诉你如何分析、设计以及撰写真正面向对象的软件:容易重利用、好维护、可扩展的软件;不再使你心碎的软件;让你增添新功能而不会破坏旧机制的软件。在本书中,你将学到:   使用诸如封装(encapsulation)委派(delegation)的OO原则建立灵活的应用程序。   使用开闭原则(Open—C10 sed Principle)单一责任原则(Single—Responsibility Principle)提升程序的重利用性。   学习如何将OO原则、设计模式及各种开发方法通通整合到OOA&D项目的生命周期里。   运用UML、用例及用例图来确保所有利害关系人都能清楚地进行沟通,协助你交付正确的软件,达到每个人的要求。   通过一连串的脑力开发,《深入浅出面向对象分析设计》压缩了学习获取复杂信息所需的时间。可以预料,这将是一段充满乐趣的学习之旅。相信在读完本书之时,你肯定能够写出伟大的软件。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值