楼主:
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等属性
谢谢