关于OO设计的问题。OO设计:使用属性还是重载方法?
假设我有一个基础对象车辆。还有两个后代:卡车和汽车。
此外,假设基础对象具有基部方法:
Procedure FixFlatTire(); abstract;
当卡车和汽车覆盖基对象的,但它们需要来自呼叫者不同的信息。
我在两个子对象我更好超载FixFlatTire是这样的:在每个后代
Procedure Truck.FixFlatTire(OfficePhoneNumber: String;
NumberOfAxles: Integer): Override; Overload;
Procedure Automobile.FixFlatTire(WifesPhoneNumber: String;
AAAMembershipID: String): Override; Overload;
或引入新的属性,然后调用FixFlatTire前设置它们,就像这样:
Truck.OfficePhoneNumber := '555-555-1212';
Truck.NumberOfAxles := 18;
Truck.FixFlatTire();
Automobile.WifesPhoneNumber := '555-555-2323';
Automobile.AAAMembershipID := 'ABC';
Automobile.FixFlatTire();
“你不能正确使用多态性,因为函数采用不同的参数。”啊哈!这就是我意识到的困扰我,我现在意识到你拼写出来了,大卫! (通过点击 -key过早发布此评论。)使用此设计的代码将必须知道它的后代,因此使用属性保留方法的签名没有任何优势。感谢您为我阐述了这一点。 –
RobertFrank
2011-01-05 19:24:39
我不一定认为房产的做法是_correct_,但它为什么没有意义?如果您知道该类将具有执行FixFlatTire操作所需的属性,则每个后代类都可以实现无参数的FixFlatTire()方法。 – 2011-01-05 19:27:31
@Larry @Robert这是没有意义的,因为与两种独立方法的方法相比,没有什么优点和缺点。至少这是我的看法。 – 2011-01-05 19:29:20