raj*_*han 15 oop perl inheritance composition
我想简短一点.我建有两间HouseA,说BedRoom
和StudyRoom
,从所谓的基类派生两者Room
.
BedRoom
并且StudyRoom
有一个同一个父母叫House
.此外,房屋内的任何房间只能通过父母进入任何其他房间.如果BedRoom
必须访问任何属性StudyRoom
,它必须只通过House
(即父),反之亦然.
HouseA ISA House
HouseA HAS BedRoom and StudyRoom.
BedRoom ISA Room
StudyRoom ISA Room
Run Code Online (Sandbox Code Playgroud)
现在的问题:让我们说,我建造另一个家(比方说HouseB
),这与上面完全相同,但只有一个改变.我不想要两个单独的房间(即BedRoom
和StudyRoom
),而是一个房间(MasterRoom
),这两个房间都有这些设施.为了代码可重用性,我可以想到以下设计选项:
Option-1:
HouseB ISA House
HouseB HAS MasterRoom
MasterRoom ISA Room
Run Code Online (Sandbox Code Playgroud)
在这里,我失去了再利用的属性的能力BedRoom
和StudyRoom
我的创造HouseA
.请注意,大多数的属性BedRoom
,并StudyRoom
需要重新实现MasterRoom
无论如何,从而导致代码重复.
Option-2:
HouseB ISA House
HouseB HAS MasterRoom
MasterRoom ISA Room
MasterRoom HAS LogicalBedroom
MasterRoom HAS LogicalStudyRoom
LogicalBedroom ISA BedRoom
LogicalStudyRoom ISA StudyRoom
Run Code Online (Sandbox Code Playgroud)
这样,我使用组合,以便我可以重用我的大部分代码(我有几千行代码,我可以重用),但问题是这BedRoom
是一个具体的类,logicalBedRoom
可能会发现某些属性不合适,可能被迫覆盖方法,使它们什么也不做.例如,Bedroom->noOfSides() = 4
和logicalBedRoom->noOfSides() = ??
.这是继承的好用吗?
我的实际设计是针对一个复杂的芯片,它结合了两个单独芯片的功能(我使用House(主板)和Room(芯片)类比).我在Object Oriented Perl中编码,我真的很感激任何替代设计建议.
谢谢
dao*_*oad 19
为什么不使用角色来实现这个目标:
House A has a Bedroom
Bedroom does SleepingArea
House has a Studyroom
Studyroom does ComfyArea
House B has a MasterRoom
MasterRoom does SleepingArea and ComfyArea
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
1498 次 |
最近记录: |