[概念] 物件導向學習

作者: hsnucsc (hsnugo)   2010-01-18 17:10:05
學習程式4年了, 一直很想學會一個好的OODesign
之前買了很多人推的"深入淺出 物件導向分析與設計"
但是總因為看到一半有很多疑問而打住
想問一下
1.訂定Use case和requirement非常重要嗎?
我知道寫程式前應該要先規劃好, 但是這本書花了很多的篇幅
在思考, 修改它的Use case和requirement
在很多地方, 都會讓我覺得很抽象
2.要怎麼知道該設計哪些class
一個很多人建議的方法 => "名詞"
在Usecase裡的名詞就是一個class, 他擁有的東西就是variable, 他的動作就是method
但是有的時候, class A該不該有class B的物件, 也是令人難決定
ex: 在書中有個範例
要設計一個狗門, 可以用遙控器控制開關, 或因狗的聲音辨識器辨識到的聲音而開關
這聽起來是三個分開的class, 甚至我會覺得Recognizer應該是DogDoor所擁有的
但是實際上, remote需要控制DogDoor, 所以必須擁有一份DogDoor的reference
Recognizer需要控制DogDoor, 也必須擁有一份DogDoor的reference
所以可以說, 一個class擁有哪些variable, 應該是那些東西它需要access嗎
3.物件化程度
在同個例子中, 狗叫聲Bark, 有兩種作法
一是String bark;
二是Bark bark; (後面還有barkList, 不過先簡化一點問題)
如果用二, 就可以將吠聲比較交給Bark, 後面即使修改Bark的比較方法
也只要不需動到聲音辨識器或其他用到Bark的class
但是這是一個我困擾很久的問題
我怎麼知道以後會不會修改?
如果我99%確定不會再修改, 那我直接用String bark, 程式的效率不是比較好
也直接可以看出他比較時做了的事情
如果連這樣都要物件化, 那不是有很多variable都要設計成物件
那像本書的第一個例子:
guitar擁有的builder, model, type等屬性, 不如也都改成物件
以後就可以擁有很高的彈性, 看是要怎麼比較builder, model等屬性
謝謝

Links booklink

Contact Us: admin [ a t ] ucptt.com