Tài liệu cho các lớp hướng đối tượng thường liên quan đến sự đánh đổi giữa việc cho những người duy trì tính linh hoạt của lớp thay đổi thiết kế của nó, so với việc cho phép người tiêu dùng của lớp sử dụng toàn bộ tiềm năng của nó. Nếu một lớp không thay đổi sẽ có một số thuộc tính mà sẽ có một số chính xác mối quan hệ với nhau (ví dụ như Left, Right, vàWidthcác thuộc tính của một hình chữ nhật lưới tọa độ nguyên), người ta có thể thiết kế lớp để lưu trữ bất kỳ sự kết hợp nào của hai thuộc tính và tính toán thứ ba, hoặc người ta có thể thiết kế nó để lưu trữ cả ba. Nếu không có gì về giao diện làm rõ các thuộc tính nào được lưu trữ, lập trình viên của lớp có thể thay đổi thiết kế trong trường hợp làm như vậy sẽ chứng minh hữu ích vì một số lý do. Ngược lại, nếu ví dụ hai trong số các thuộc tính được hiển thị dưới dạng finalcác trường và thứ ba thì không, thì các phiên bản tương lai của lớp sẽ luôn phải sử dụng hai thuộc tính giống như là "cơ sở".
Nếu các thuộc tính không có mối quan hệ chính xác (ví dụ vì chúng floathoặc doublehơn thế int), thì có thể cần phải ghi lại các thuộc tính nào "xác định" giá trị của một lớp. Ví dụ, mặc dù Leftcộng Widthđược cho là bằng nhau Right, toán học dấu phẩy động thường không chính xác. Ví dụ, giả sử a Rectanglesử dụng kiểu Floatchấp nhận Leftvà Widthlàm tham số hàm tạo được xây dựng với giá Lefttrị as 1234567fvà Widthas 1.1f. floatĐại diện tốt nhất của tổng là 1234568.125 [có thể hiển thị là 1234568.13]; cái nhỏ hơn tiếp theo floatsẽ là 1234568.0. Nếu lớp thực sự lưu trữ LeftvàWidth, nó có thể báo cáo giá trị chiều rộng như được chỉ định. Tuy nhiên, nếu các nhà xây dựng tính toán Rightdựa trên các thông qua trong Leftvà Width, và sau đó tính toán Widthdựa trên Leftvà Right, nó sẽ báo cáo chiều rộng như 1.25fchứ không phải là thông qua trong 1.1f.
Với các lớp có thể thay đổi, mọi thứ thậm chí còn thú vị hơn, vì một thay đổi đối với một trong các giá trị liên quan đến nhau sẽ ngụ ý thay đổi ít nhất một giá trị khác, nhưng có thể không phải lúc nào cũng rõ ràng. Trong một số trường hợp, nó có thể là tốt nhất để tránh việc các phương pháp mà "set" một tài sản duy nhất như vậy, nhưng thay vào đó hoặc có phương pháp để ví dụ SetLeftAndWidthhoặc SetLeftAndRight, nếu không làm rõ những gì thuộc tính đang được xác định và được thay đổi (ví dụ MoveRightEdgeToSetWidth, ChangeWidthToSetLeftEdgehay MoveShapeToSetRightEdge) .
Đôi khi có thể hữu ích khi có một lớp theo dõi các giá trị thuộc tính nào đã được chỉ định và được tính toán từ các lớp khác. Ví dụ: lớp "khoảnh khắc trong thời gian" có thể bao gồm thời gian tuyệt đối, giờ địa phương và độ lệch múi giờ. Cũng như nhiều loại như vậy, với hai thông tin bất kỳ, người ta có thể tính toán thứ ba. Biết cái nàophần thông tin đã được tính toán, tuy nhiên, đôi khi có thể quan trọng. Ví dụ: giả sử rằng một sự kiện được ghi lại là đã xảy ra vào "17:00 UTC, múi giờ -5, giờ địa phương 12:00 chiều" và một lần sau đó phát hiện ra rằng múi giờ phải là -6. Nếu ai đó biết rằng UTC đã được ghi lại trên máy chủ, thì bản ghi sẽ được sửa thành "18:00 UTC, múi giờ -6, giờ địa phương 12:00 chiều"; nếu ai đó bấm giờ trong giờ địa phương thì đồng hồ sẽ là "17:00 UTC, múi giờ -6, giờ địa phương 11:00 sáng". Tuy nhiên, không biết thời gian toàn cầu hay địa phương nên được coi là "đáng tin hơn", tuy nhiên, không thể biết nên áp dụng chỉnh sửa nào. Tuy nhiên, nếu bản ghi theo dõi thời gian được chỉ định, các thay đổi về múi giờ có thể để lại một mình trong khi thay đổi thời gian khác.