La documentazione per le classi orientate agli oggetti comporta spesso un compromesso tra la flessibilità dei gestori della classe e la possibilità di modificarne il design, anziché consentire ai consumatori della classe di sfruttare appieno il proprio potenziale. Se una classe immutabile avrà un numero di proprietà che avrà una certa esatta relazione tra loro (ad esempio la Left, RighteWidthproprietà di un rettangolo allineato alla griglia con coordinate intere), si potrebbe progettare la classe per memorizzare qualsiasi combinazione di due proprietà e calcolare la terza, oppure si potrebbe progettare per memorizzare tutte e tre. Se nulla sull'interfaccia chiarisce quali proprietà sono memorizzate, il programmatore della classe potrebbe essere in grado di cambiare il design nel caso in cui ciò risultasse utile per qualche motivo. Al contrario, se ad esempio due delle proprietà sono esposte come finalcampi e la terza no, le versioni future della classe dovranno sempre utilizzare le stesse due proprietà della "base".
Se le proprietà non hanno una relazione esatta (ad esempio perché sono floato doublepiuttosto che int), potrebbe essere necessario documentare quali proprietà "definiscono" il valore di una classe. Ad esempio, anche se si suppone che il Leftplus Widthsia uguale Right, la matematica in virgola mobile è spesso inesatta. Ad esempio, supponiamo Rectangleche un tipo che usa type Floataccetti Lefte Widthche i parametri del costruttore siano costruiti con Leftdato come 1234567fe Widthcome 1.1f. La migliore floatrappresentazione della somma è 1234568.125 [che può essere visualizzata come 1234568.13]; il prossimo più piccolo floatsarebbe 1234568.0. Se la classe effettivamente memorizza LefteWidth, potrebbe riportare il valore della larghezza così come è stato specificato. Se, tuttavia, il costruttore calcolasse in Rightbase al pass-in Lefte Width, e successivamente calcolato in Widthbase a Lefte Right, segnalerebbe la larghezza 1.25fanziché il pass-in 1.1f.
Con le classi mutabili, le cose possono essere ancora più interessanti, dal momento che una modifica a uno dei valori interconnessi implica una modifica ad almeno un'altra, ma potrebbe non essere sempre chiaro quale. In alcuni casi, può essere meglio per evitare di avere metodi che "set" una singola proprietà in quanto tale, ma invece hanno o metodi per es SetLeftAndWidtho SetLeftAndRight, altrimenti chiaramente quali sono stati specificati e che cambiano (ad esempio MoveRightEdgeToSetWidth, ChangeWidthToSetLeftEdgeo MoveShapeToSetRightEdge) .
A volte può essere utile avere una classe che tenga traccia di quali valori delle proprietà sono stati specificati e quali sono stati calcolati da altri. Ad esempio, una classe "moment in time" potrebbe includere un orario assoluto, un orario locale e un offset del fuso orario. Come con molti di questi tipi, date due informazioni qualsiasi, si può calcolare il terzo. Sapendo qualel'informazione è stata calcolata, tuttavia, a volte può essere importante. Ad esempio, supponiamo che un evento venga registrato come accaduto alle "17:00 UTC, fuso orario -5, ora locale 12:00 pm", e uno in seguito scopre che il fuso orario avrebbe dovuto essere -6. Se si sa che l'UTC è stato registrato da un server, il record deve essere corretto in "18:00 UTC, fuso orario -6, ora locale 12:00 pm"; se qualcuno digita l'ora locale senza orologio, dovrebbe essere "17:00 UTC, fuso orario -6, ora locale 11:00". Senza sapere se l'ora globale o locale dovrebbe essere considerata "più credibile", tuttavia, non è possibile sapere quale correzione applicare. Se, tuttavia, il record tenesse traccia dell'ora specificata, le modifiche al fuso orario potrebbero lasciarlo solo mentre si cambia l'altro.