집계 및 구성의 다양한 측면을 이해하려고하는 책을 읽었습니다. 집계가 느슨한 결합을 향상시킬 수 있지만 캡슐화를 손상시킬 수 있다고 생각했던 지점을 발견했습니다.집계가 캡슐화를 깨기
느슨한 커플 링을 향상시킵니다. 엔진 클래스의 구현 위에서
public class Car{
private Engine engine;
Car(Engine e){
this.engine=e;
}
}
생성과 창조의 시간에 자동차 객체에 기선을 제압 당했지만, 엔진 인스턴스가 차없이 살 수 있기 때문에 그것은 통합의 완벽한 예입니다 수 있습니다. (이 예제는 위대한 현실 세계의 예가 아닐지도 모른다. 그러나 내 생각에 나는 내 생각을했다.)
이제 클라이언트 코드는 Engine 객체에 대한 완전한 제어권을 가지므로 엔진 객체의 몇 가지 상태를 Car로 전달할 수있다 , Car의 구현은 객체 또는 상태 (엔진)가 더 이상 자동차에 올바른 무결성을 가지고 있지 않기 때문에 캡슐화를 중단합니다.
내 이해가 맞습니까?
그것은 종류의 캡슐화에 따라 당신이 원하는 해달라고을 깰 수 혹시 객체를 조작하기보다는 객체의 상태를 변경하십시오. engine.setOn (boolean) 대신 엔진을 사용하면 engine.turnOn()을 사용할 수 있습니다. 자동차를 엔진에서 작동 할 수있게하려면 생성자는 객체를 복제하여 액세스를 제한합니다. this.engine = (Engine) e.clone(); 자동차의 다른 작업은 removeEngine 일 수 있습니다. 그러면 엔진에 액세스 할 수 있지만 차에는 더 이상 액세스 할 수 없습니다 .. – BevynQ
IMO, I 클라이언트가 Engine 객체를 제어 할 수 있다고 생각하지 마십시오. 더 높은 수준의 클래스가 있다고 생각합니다. 정확한 Engine 객체를 만들고이를 특정 Car 객체의 엔진으로 설정하는 Manufacturer를 호출했습니다. –
그가 말하는 것은 자동차를 만드는 과정에서 엔진에 대한 참조가 있어야한다는 것입니다. – BevynQ