《HEAD FIRST深入浅出面向对象分析与设计》读书笔记

曾经在园子里给大家推荐了一本《HEAD FIRST深入浅出设计模式》,现在回想,里面的很多东西都忘个精光。知识的学习就是不断重复,加深理解,实践中掌握和更新的循环。由于很久不做项目了,也没怎么用。为了应付笔试,看了C++primer一个多月,终于有种不心虚的感觉。在踏实的心情中,又看了尘封在书桌很久的《HEAD FIRST深入浅出面向对象分析与设计》。因为同为HEAD FIRST系列的书籍,就在读完设计模式后从图书馆借回来了。但感觉自己对OO已经打过很多交道了,就不怎么想看。然而,闲散之中,翻开之后,就一下子爱不释手。不同与设计模式,他里面的东西都是很基础的。但是,我们往往在浮沙之上筑高台,不懂得这些基础的原则和方法,我们在项目过程中就很容易犯错误。现在试着从此书中选出一些珍珠,供大家欣赏。

1.伟大软件的三步骤:

  • 确认你的软件做客户要他做的事。
  • 运用基本的OO原则来增加软件的灵活性。
  • 努力实现可维护,可重用的设计。

2.OO原则:

  • 将变化之物封装起来。
  • 对接口编程,而不是对实现。
  • 应用程序的每一个类只有一个改变的理由。

3.解决大问题

  • 聆听客户,找出他们要你构建什么。
  • 用客户理解的语言组合功能列表。
  • 确认你的功能是客户真正想要的东西。
  • 运用用例图创建系统的蓝图。
  • 将大系统分解为许多小的部分。
  • 将设计模式运用到系统中较小的部分。
  • 运用基本的OOA&D原则为每一个较小的部分设计程序。

4.应用程序中真正重要的事情是架构上重要的事情。应该先把焦点置于其上。当你试图想出某件事是否对架构很重要时,可以试试一下三个问题。(架构三问):

  1. 它是系统本质的一部分吗?(想象系统没有这个功能,如果不能没有,那么这个功能可能是系统本质的一部分。)
  2. 这到底是什么意思?(如果你不确定某项功能的叙述究竟是什么意思,在项目早期把注意力放在该功能上。因为它会话费你很多时间或者对系统的其他部分造成很多问题。)
  3. 我到底该如何做?(对你来说似乎是很难实现的地方,或者是全新的编程任务。比如你必须编写多线程的聊天服务器,而你对线程与网络编程不了解,那就是你不知道该如何做的事。)

5.面对诸多关键功能,不必争论该从哪一个开始。重点是减少风险。你可以从中任选一个,只要你把焦点放在构建你应该构建的东西上。架构的重点是减少风险以及建立次序。

6.开闭原则(OCP,OPEN-CLOSED PRINCIPLE)

  • 类应该允许为扩展而开放,禁止为修改而关闭。下面这几个原则在设计模式中有很好的讲述,这里也讲的很清楚。
  • OCP允许改变,但以不需要改变现有程序代码的方式进行。

7.不自我复制原则(DRY,Don’t  Repeat Yourself)

  • 通过将共同之物抽取出来并置于单一地方来避免重复的程序代码。
  • DRY关系到让系统中每一个信息与行为的片段都保存在单一、合理的地方。

8.Liskov替换原则(LSP,Liskov Substitution Principle)

  • 子类型必须能替换基类型。
  • 委托:将特定工作的责任委派给另一个类或者方法。
  • 使用组合将来自其他多个类的行为集合起来。当你想要使用由接口所定义的行为,并且从该接口的种种实现中进行选择时,组合是最有威力的。
  • 聚合:当一个类被当做另一个类的一部分时,仍然可以存在于该类之外。(组合不能。)
  • 委托,组合,聚合,这三项OO技术让你重用行为而不违反LSP。

9.开发方式

  • 用例驱动开发:在进行应用程序的任何其他事之前,先取出系统的单一用例,并且聚焦,在实现整个用例的程序代码上,包含它所有的场景。
  • 功能驱动开发:在进行应用程序的任何其他事之前,先把焦点放在单一功能上,并且为该功能的所有行为编码。
  • 测试驱动开发:在为功能编码之前,先为功能性片段编写测试场景,接着编写软件以通过所有测试。

良好软件的开发通常在开发周期的不同阶段,结合所有这些开发模型。

10.编程实践

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

以上只是一些知识点的大概要点,由于理解这些是个由浅入深的过程,行家可能觉得不过如此,而初学者或许就不明其意,所以还是强烈建议大家如果深入学习OO的话,此书作为了解一门面向对象语言之后的入门读物,还是不错的。里面对封装,重构,多态,UML,顺序图,状态图,单元测试等都有介绍。需要说明的是,本书的代码是JAVA编写的,但我当时刚看完C++PRIMER,所以练习的时候,用c++改写了。c#和java本身就非常类似,所以,不论你会用哪门面向对象语言,都可以在理解书中例子的基础上改写成自己熟悉语言的代码。这个过程也是十分有趣的。在这个过程中,不仅可以掌握OO 的要点,还可以比较一下OO语言的不同之处,加深理解。

对象村是如此的迷人,请深入进去探索其中的瑰宝吧,相信你会捡到更多珍宝。

转载于:https://www.cnblogs.com/liuyazhou/archive/2010/04/27/1722218.html

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
强烈推荐 “《深入浅出面向对象分析设计》对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、付费专栏及课程。

余额充值