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

曾经在园子里给大家推荐了一本《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语言的不同之处,加深理解。

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


常用链接

我参与的团队

{zx1}评论

  • @步碎酒散花醉 恩。很感谢你的分析。弄明白了。
  • --newhi
  • [quote]步碎酒散花醉: @newhi sizeof(byte)=4是因为你的struct中的数据类型的{zd0}长度是4 就是int的长度 虽然总共申明的长度只有1byte但是仍然占4个byte空间 ...
  • --依落の守候
  • 调试一下就一清二楚了
  • --磬石
  • @newhi sizeof(byte)=4是因为你的struct中的数据类型的{zd0}长度是4 就是int的长度 虽然总共申明的长度只有1byte但是仍然占4个byte空间 编译器使然 这块可以详细了解下...
  • --步碎酒散花醉
  • @步碎酒散花醉 为什么a1=1,a7=1,而其他几个都为0呢?而且sizeof(byte)为4.这是为什么呢?
  • --newhi

阅读排行榜

评论排行榜

郑重声明:资讯 【《HEAD FIRST深入浅出面向对象分析与设计》读书笔记- faster,higher ...】由 发布,版权归原作者及其所在单位,其原创性以及文中陈述文字和内容未经(企业库qiyeku.com)证实,请读者仅作参考,并请自行核实相关内容。若本文有侵犯到您的版权, 请你提供相关证明及申请并与我们联系(qiyeku # qq.com)或【在线投诉】,我们审核后将会尽快处理。
—— 相关资讯 ——