※ 引述《andrew43 (Myrmarachne)》之铭言:
: 各位先进早安。
: 小弟从小到大学习接触的全都是面向导向语言。最
: 常用的是 PHP 与 Matlab/GNU Octave。换言之,
: 我从来没有撰写“物件”这东西的经验。
: 最近买了二三本 JAVA 的书来学习,发现书中很多
: 例子使我跟不上作者的脚步。有的例子是“干嘛抽
: 象化得这么仔细?”,有的是“为什么要做这件抽
: 象化?”。追根究底,我对于“物件导向”的思考
: 方式应该是零分吧。
打从一开始就只想着要抽象化是失败的第一步。
当年 UP 之父搞出来的 OOAD 那套,
就有明确的把 OOA 跟 OOD 分离出来,
OOA 主要是在处理 problem domain 的问题,
OOD 才是处理 solution domain 的问题,
所以在 OOA 的阶段是没有必要急着进行抽象化的,
你只要找出一些解决问题用的 class 和它们之间的关系即可,
而找 class 最常见的有 textual analysis (从 use case 来),
也有利用 CRC card 去找,
或 UP 区分的 bondary、control、entity 三类 class 的方式来找;
当你的 analysis model 确实的建立出来以后,
你也比较能专注在抽象化等 OOD 的工作上。
上面讲的东西如果你想轻松学一点皮毛可以看这本 (并非纯 OOAD):
http://tinyurl.com/2l8h2p
想对理论本身了解得更深入一点可以读这本:
http://tinyurl.com/4lu3zk
有资管背景的话也能选这本代替上一本:
http://tinyurl.com/5klkbh
如果你觉得 OOAD 那套古板枯燥乏味,
你也可以选择走 Extreme Programming 的路线来体会,
反正最终还是会跟 OOAD 殊途同归;
不过你还是得读一些跟 refactoring 相关的书籍,
这样你就可以一开始照直觉把程式一口气写出来,
然后利用你学到的 refactoring 知识一步一步渐进的做改善,
改善到一个程度自然就会引进抽象化,
到时候你就会明白为什么要做那些抽象化。
refactoring 可以读的翻译书毫无疑问是这两本:
http://tinyurl.com/62b85u
http://tinyurl.com/5u2aoy
第二本你不熟 pattern 的话可以先不要读,
等你有一天真的对 OOD 十分有感觉看得进 pattern 的书以后再去读它,
台湾的环境其实读过第一本就够你用很久了。
学物件导向当然是要读物件导向本身的书,
只是拿特定语言的书来读,
其实对于精进物件导向概念的帮助不大,
毕竟这类书籍大多着重于展示语言如何支援物件导向,
而不会告诉你实现物件导向的过程和步骤,
方法论的文献和工具的说明书是不能互相取代的。