느슨한 결합 은 본질적으로 모듈이 어떻게 진화 할 수 있는지에 대한 간접적 인 종속성입니다.
일반적으로 밀접하게 결합 된 시스템이있는 경우 서로 다른 모듈 / 객체는 주변 객체의 행동을 가정하는 매우 특정한 행동을 갖습니다. 이러한 객체는 다른 모듈 비헤이비어에 연결 / 연결되어 있으며 단독으로 또는 다른 상황에서 재사용 할 수 없습니다.
개별 기능을 담당하지만 이러한 모듈은 독립적으로 발전 할 수 없거나 발전 할 수 없습니다
예를 들면 :
3 개의 객체 Shape
(모델 객체)와 Canvas
(UI 요소) 가 있다고 가정 해 봅시다
. 지금
메소드 shape.draw(Canvas)
가 캔버스의 평면에서 제공하는 평면에 객체를 그릴 것이라고 가정합니다 .
이제는 때때로 창문이 부분적으로 덮히 고 크기가 조정됩니다. 이러한 경우 위의 방법은 이와 같은 작업을 수행 할 수 있습니다.
shape::draw(Canvas) {
Rect.WindowLeft = Canvas.GetWindowRect.getLeftOffset();
Rect.LeftPixel = Canvas.GetWindowRect.pixels() + Rect.WindowLeft;
.... // like this get all co-ordinates.
draw_instance(Rect); // This will draw the actual shape.
}
기본적으로, draw 함수는 사물을 그릴 필요가있는 사각형을 선택합니다. 이것은 이해하기 쉽다 (사람들은이 간단한 코드 라고 부를 수있다 ). 그러나 이것은 매우 결합 된 코드입니다.
상황을 상상해보십시오.
- 캔버스를 유지하는 캔버스의 메커니즘이 더 이상 사각형이 아닌 경우 어떻게해야합니까?
- 추가 오프셋은 캔버스 인 유지하는 것이 무엇인지가있는 경우 개인 ?
- 다른 응용 프로그램이 같은 모양을 원하지만 더 이상 GUI 창이없는 경우 (예 : 이미지를 만들고 파일로 저장하는 경우) 어떻게해야합니까?
문제의 근본 원인은 객체 shape
가를 알고 있으므로 밀접하게 연결 되어 있기 때문 입니다 Canvas
.
픽셀 세트는 그것이 기록되는 곳의 형상에 제공되는 것이 바람직하다; 는 shape
픽셀이 실제로 기록 된 위치에 대한 (심지어 암시 적) 지식이없는 것이다.