2009-10-21 5 views
15

나는 이것을 짧게하고 싶다. 나는 두 개의 방이있는 HouseA를 만들었습니다. BedRoomStudyRoom은 모두 Room이라는 기본 클래스에서 파생되었습니다. BedRoomStudyRoom의 부모는 House입니다. 또한 집안의 어느 방도 부모를 통해서만 다른 방에 접근 할 수 있습니다. BedRoomStudyRoom의 모든 속성에 액세스해야하는 경우 House (즉, 상위)으로 이동해야하며 그 반대의 경우도 마찬가지입니다. 상속 또는 구성을 사용해야합니까?

HouseA ISA House 
HouseA HAS BedRoom and StudyRoom. 
BedRoom ISA Room 
StudyRoom ISA Room 

이제 문제 : 위의 같은 동일하지만, 하나의 변화가 또 다른 집 (말 HouseB) 구축의가 있다고 가정 해 봅시다. 별도의 두 개의 객실 (예 : BedRoomStudyRoom)이 필요하지 않지만이 두 가지 기능을 모두 갖춘 단일 룸 ( MasterRoom)이 필요합니다. 코드 재사용을 위해서 , 나는 다음과 같은 설계 옵션을 생각할 수 : 여기

Option-1: 
HouseB ISA House 
HouseB HAS MasterRoom 
MasterRoom ISA Room 

내가 BedRoom 내가 HouseA 생성 StudyRoom의 속성을 재사용 할 수있는 능력을 잃게됩니다. 어쨌든 BedRoomStudyRoom의 속성 대부분은 MasterRoom에 다시 구현해야하므로 코드 중복이 발생합니다.

Option-2: 
HouseB ISA House 
HouseB HAS MasterRoom 
MasterRoom ISA Room 
MasterRoom HAS LogicalBedroom 
MasterRoom HAS LogicalStudyRoom 
LogicalBedroom ISA BedRoom 
LogicalStudyRoom ISA StudyRoom 

이 방법, 나는 내 코드의 대부분을 재사용 할 수 있도록 (내가 다시 사용할 수있는 코드의 수천 라인을 가지고),하지만 문제는 BedRoom는 구체적인 클래스라고하고 logicalBedRoom 찾을 수 있습니다 구성을 사용 특정 속성은 적합하지 않으며 메서드를 재정 의하여 강제로 처리 할 수 ​​있습니다. 예 : Bedroom->noOfSides() = 4logicalBedRoom->noOfSides() = ??. 이것은 상속의 좋은 사용인가?

내 실제 디자인은 두 개의 개별 칩 (집 (마더 보드) 및 룸 (칩) 유추 사용)의 기능을 결합한 복잡한 칩 용입니다. Object Oriented Perl에서 코드를 작성했기 때문에 대체 설계 제안을 정말 고맙게 생각합니다. 이를 달성하기 위해 역할을 사용하지 왜

감사

답변

19

: roles를 얻을 수

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 

가장 쉬운 방법은 Moose을 사용하는 것입니다.

+1

역할은 Rubin의 Mixin과 동일합니까? – rpattabi

+1

@ ragu.pattabi, 역할은 mixins와 유사합니다. 가장 큰 차이점은 역할에 적용 할 수있는시기에 대한 제어 기능이 있다는 것입니다. 역할은 소비하는 클래스에서 특정 메서드를 사용할 수 있도록 요구할 수 있습니다. 다른 차이점이 있습니다. 펄 (Perl)이라는 용어의 사용은 OO 연구의 더 큰 세계에서 '특성'에 매핑됩니다. Perl/Moose에서 특성은이 응답의 범위를 벗어나는 메타 오브젝트 프로토콜을 사용하는 메소드에 적용되는 역할입니다. 나는 특성을 기반으로 자원으로 안내 할 때 비 서열 자의 출현을 피할 수 있도록 요점을 제시한다 : http://scg.unibe.ch/research/traits/ – daotoad

+0

즉, 역할은 템플릿 방법과 같은 메커니즘을 제공한다는 것을 의미한다. 상속의 수하물없이 패턴. 그것은 꽤 흥미 롭습니다. – rpattabi

관련 문제