Документація для об'єктно-орієнтованих класів часто передбачає компроміс між наданням керівникам класу гнучкості змінити його дизайн, а також дозволяти споживачам класу повною мірою використовувати його потенціал. Якщо непорушний клас матиме ряд властивостей , які будуть мати певні точно відносини один з одним (наприклад 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, або дати зрозуміти , які властивості уточнюються і які змінюються (наприклад MoveRightEdgeToSetWidth, ChangeWidthToSetLeftEdgeчи MoveShapeToSetRightEdge) .
Іноді може бути корисним клас, який відстежує, які значення властивостей були визначені та які були обчислені з інших. Наприклад, клас "момент у часі" може включати абсолютний час, місцевий час та зміщення часового поясу. Як і для багатьох таких типів, з урахуванням будь-яких двох відомостей, один може обчислити третій. Знаючи якийІнформація, яка була обчислена, однак, іноді може бути важливою. Наприклад, припустимо, що подія записана як така, що сталася в "17:00 UTC, часовий пояс -5, місцевий час 12:00 вечора", а одна пізніше виявляє, що часовий пояс повинен був бути -6. Якщо відомо, що UTC був записаний із сервера, запис слід виправити на "18:00 UTC, часовий пояс -6, місцевий час 12:00 вечора"; якщо хтось ввімкнув місцевий час поза годинником, він повинен бути "17:00 UTC, часовий пояс -6, місцевий час 11:00". Не знаючи, чи слід глобальний чи локальний час вважати "більш правдоподібним", однак неможливо знати, яку корекцію слід застосувати. Якщо, однак, записаний запис, який час був визначений, зміни часового поясу могли залишити цей один у спокої, змінивши інший.