2014-04-01 2 views
1

:계급 관계는 무엇입니까? 조건 중

Motorized Vehicle, 나는 생각했다 Car, Motor, Truck

다음

a Car is a Motorized Vehicle, a Car has a Motor, a Truck has a Motor, a Truck is a Motorized Vehicle

Q1 : 나는 위의 수정 있습니까 처지?

질문 2 : 이제 fan이라는 단어를 말하고 싶습니다. 어떻게 보입니까?

내 시도 : 이 a fan has a motor, a Motorized Vehicle has a motor가, a Car is a Motorized Vehicle는, a Car has a Motora Truck has a Motor는,

a Truck is a Motorized Vehicle 나는이에 대한 몇 가지 설명이 필요 해요, 제발 ....

+0

전동 차량 IMO 모터 있어야 조성물 및 인터페이스 대신 복잡한 클래스 계층 구조를 선호한다. – Tautvydas

+0

관련 http://lostechies.com/derickbailey/files/2011/03/LiskovSubtitutionPrinciple_52BB5162.jpg – PeeHaa

답변

2

이것은 위에서 언급 한 좋은 해결책이 될 수 있습니다. 모터는 자동차에서 새로운 것으로 교체 될 수 있으므로 구성 대신 집계를 유지할 수 있습니다. 아래 이미지를 참조하십시오. solution

+0

이미지를 추가하면 승인을 위해 일부 운영자의주의가 필요하다고 생각합니다. –

+0

팬에게 무슨 일이 일어 났습니까? – PeeHaa

+0

동력 차량과 함께 팬 집약을 사용할 수 있습니다. Lemme도 그걸 덧붙인다 –

0

[자동차, 트럭] [전동 차량 "는 것입니다" ] "가지고있다"[모터, 팬]

+0

은 "needs-a"에 대해 들어 보지 못했지만 방금 검색하고 아무 것도 시도하지 않았습니다 ... – fifamaniac04

+0

내 대답이 수정되었습니다. – cybersam

0

문맥없이 질문에 100 % 정확한 응답이 없다고 생각합니다. 예를 들어

트럭 우리의 맥락에서 자동차을 분리하기 위해, 우리가 말할 definatelly 수 있어야한다, 그 차와 트럭 다르게 동작합니다.

자동차와 트럭이 모두 응용 프로그램에서 정확히 동일한 동작을하는 "이름"과 "질량"(예 :) 및 단순한 컨테이너 인 경우 클래스가 아니라 특정 개체의 관점에서 적절하게 생각합니다. 우리를 구동 할 수있는 단지 "용어"간단한 일이 두 인스턴스

Vehicle car = new Vehicle("Car",1200,someMotor); 
Vehicle truck = new Vehicle("Truck",3400,someMotor); 

와 클래스를 Vehicle (또는 전동 차량)를 구현하지만, 관계의 문제는 문맥도있다합니다. 관계로 나는 연결을 의미합니다. Motorized vehicle에는 Motor이 있지만 (실제로는 그 이상의 문자를 가질 수있는 remebmer) 확신 할 수 있지만, "모터는 자동차를 가지고 있습니다"(소유자로서, 특히 데이터베이스 엔티티의 컨텍스트에서 특히 espacially 우리의 상황은 차량보다 더 집중된 aroud 모터입니다 - 예를 들어 모터 딜러를위한 시스템을 구축 할 때).

모두에게 분명하지 않을 수있는 또 다른 작은 것들이 있습니다. "자동차에는 모터가 있습니다"뿐만 아니라 "트럭에는 모터가 있습니다"하지만 "자동차에는 모터가 있습니다"라는 말처럼 자동차에는 모터가 있습니다. "자동차에는 모터가 있기 때문에"가 아니라 "동력화 된 차량이기 때문에"!

또한, 객체 지향 관점에서, (질문 OOP 태그가로) 세부 사항으로가는 우리는 약 클래스 인터페이스대 생각해야 우리는 (MotorizedVehicle 인터페이스가 더 있다는 결론에 끝낼 수있는 우리) 우리의 환경 (대부분처럼) 다중 상속 허용하지 않는 경우 수업보다 클래스를 얻을 수 있습니다. 이것은 "Obama의 차가 MotorizedVehicleArmoredVehicle이어야하지만 나는 분리 된 클래스 hieries에서 전동/장갑을 꼈다"와 같은 문제에서 우리를 막을 것입니다.

TL; DR 모두는 문맥에 따라, 이름을 제안