객체 지향 클래스에 대한 문서화는 클래스 관리자에게 클래스 유연성을 부여하여 클래스의 소비자가 잠재력을 최대한 활용할 수있게하는 것 사이의 트레이드 오프와 관련이 있습니다. 불변의 클래스는 어떤 것 곳의 호텔이 경우 정확한 (서로의 관계를 예를 들면 Left
, Right
및Width
정수 좌표 격자 정렬 된 사각형의 속성)의 경우 두 속성의 조합을 저장하도록 클래스를 설계하고 세 번째 속성을 계산하거나 세 가지를 모두 저장하도록 설계 할 수 있습니다. 인터페이스에 대해 어떤 속성이 저장되어 있는지 명확하지 않으면 클래스의 프로그래머가 어떤 이유로 도움이 될 경우 디자인을 변경할 수 있습니다. 반대로, 예를 들어 두 속성이 final
필드 로 노출되고 세 번째 속성이 필드 로 노출 되지 않으면 클래스의 향후 버전에서는 항상 "기본"과 동일한 두 속성을 사용해야합니다.
(그들은이기 때문에 예를 들어 속성 정확한 관계가없는 경우 float
또는 double
이 아닌 int
), 다음 속성이 클래스의 값을 "정의"문서에 필요할 수 있습니다. 예를 들어, Left
더하기 Width
가 같 더라도 Right
부동 소수점 수학은 정확하지 않은 경우가 많습니다. 예를 들어, 가정 Rectangle
유형을 사용하는이 Float
수용 Left
및 Width
생성자 파라미터로하여 구성된다 Left
으로 주어 1234567f
와 Width
같이 1.1f
. float
합계 의 최상의 표현은 1234568.125입니다 [1234568.13으로 표시 될 수 있음]. 다음으로 작은 float
것은 1234568.0입니다. 클래스가 실제로 저장 Left
하고Width
지정된대로 너비 값을보고 할 수 있습니다. 그러나, 생성자는 계산 된 경우 Right
인 - 통과를 기반으로 Left
하고 Width
이상 및 계산 Width
에 근거 Left
하고 Right
, 그것으로 폭을보고하는 것 1.25f
보다는 건네로 1.1f
.
변경 가능한 클래스를 사용하면 상호 관련 값 중 하나를 변경하면 적어도 서로 변경되는 것을 의미하기 때문에 상황이 훨씬 더 흥미로울 수 있지만 항상 어느 것이 분명하지는 않습니다. 어떤 경우에는 같은있는 "설정"하나의 속성 방법을 피하기 위해 가장 좋은, 대신 중 예에 방법이있을 수 있습니다 SetLeftAndWidth
또는 SetLeftAndRight
속성이 지정되고 있으며, 변화하는 것, 또는 다른 make가 취소를 (예를 들어 MoveRightEdgeToSetWidth
, ChangeWidthToSetLeftEdge
또는 MoveShapeToSetRightEdge
) .
때로는 어떤 속성 값이 지정되었고 다른 속성에서 계산되었는지 추적하는 클래스를 갖는 것이 유용 할 수 있습니다. 예를 들어 "시간 순간"클래스에는 절대 시간, 현지 시간 및 시간대 오프셋이 포함될 수 있습니다. 많은 이러한 유형과 마찬가지로, 두 가지 정보가 주어지면 세 번째 정보를 계산할 수 있습니다. 어느 것을 알고그러나 일부 정보는 계산되었을 때 때때로 중요 할 수 있습니다. 예를 들어, 이벤트가 "17:00 UTC, 시간대 -5, 현지 시간 12:00 pm"에 발생한 것으로 기록되고 나중에 시간대가 -6이어야 함을 발견했다고 가정하십시오. UTC가 서버에서 기록되었다는 것을 알고 있으면 레코드는 "18:00 UTC, 시간대 -6, 현지 시간 12:00 pm"으로 수정해야합니다. 누군가 시계에서 현지 시간을 입력 한 경우 "17:00 UTC, 시간대 -6, 현지 시간 오전 11시"여야합니다. 그러나 전 세계 또는 현지 시간을 "보다 믿을만한"것으로 간주해야하는지 여부를 알지 못하면 어떤 수정을 적용해야하는지 알 수 없습니다. 그러나 레코드가 지정된 시간을 추적 한 경우 시간대를 변경하면 다른 시간대를 변경하는 동안 시간대를 변경할 수 있습니다.