Nesne yönelimli sınıflar için dökümantasyon genellikle sınıfın kullanıcılarına tasarımını değiştirebilme esnekliği vermek yerine sınıfın tüketicilerinin potansiyelini tam olarak kullanmalarını sağlamak arasında değişmezlik içerir. Sabit bir sınıfı, belirli bir olacaktır özellikleri bir dizi olacaksa tesisinin (birbirleriyle ilişki, örneğin Left
, Right
veWidth
Bir tamsayı koordinat ızgarası hizalanmış dikdörtgenin özellikleri), biri sınıfı iki öğenin herhangi bir birleşimini saklamak ve üçünü hesaplamak için tasarlayabilir veya biri üçünü de saklamak için tasarlayabilir. Arabirim hakkında hiçbir şey hangi özelliklerin saklandığını netleştirmezse, sınıfın programcısı bir nedenden ötürü yardımcı olacağını ispat etmesi durumunda tasarımı değiştirebilir. Buna karşılık, örneğin özelliklerin ikisi final
alan olarak gösteriliyorsa ve üçüncü değilse, sınıfın gelecekteki sürümleri her zaman "temel" olarak aynı iki özelliği kullanmak zorunda kalacak.
(Onlar çünkü örneğin özellikleri kesin bir ilişki yoksa float
veya double
yerine int
), o zaman özelliklerini bir sınıf değerini "define" belgesine gerekli olabilir. Örneğin, Left
artı Width
değerinin eşit olması gerekmesine rağmen Right
, kayan nokta matematiği genellikle yanlış. Örneğin, Rectangle
hangisinin kullandığını Float
kabul edelim Left
ve Width
yapıcı parametreleri Left
olarak 1234567f
ve Width
olarak verilen ile oluşturulduğunu varsayalım 1.1f
. float
Toplamın en iyi gösterimi 1234568.125 [1234568.13 olarak gösterilebilir]; bir sonraki küçük float
1234568.0 olacaktır. Sınıf gerçekten depolarsa Left
veWidth
genişlik değerini belirtildiği gibi bildirebilir. Ancak yapıcı olarak hesaplanır Eğer Right
içinde geçti dayalı Left
ve Width
daha sonra, ve bilgisayarlı Width
dayalı Left
ve Right
bu şekilde genişliğini rapor verecek 1.25f
ziyade geçti-deki gibi 1.1f
.
Değişken sınıflarda, birbiriyle ilişkili değerlerden birindeki değişiklik, en az bir diğerinde değişiklik anlamına geleceği için işler daha da ilginç olabilir, ancak hangisinin olduğu her zaman net olmayabilir. Bazı durumlarda, bu gibi hangi "set", tek bir özellik yöntemleri zorunda kalmamak için iyi olmaması, onun yerine ya ör yöntemleri olabilir SetLeftAndWidth
veya SetLeftAndRight
özellikleri belirtilmiş olan ve değişen onlarda hangi, ya da başka marka temizleyin (örn MoveRightEdgeToSetWidth
, ChangeWidthToSetLeftEdge
ya MoveShapeToSetRightEdge
) .
Bazen hangi özelliklerin değerlerinin belirlendiğini ve diğerlerinden hesaplanan bir sınıfın olması yararlı olabilir. Örneğin, "zamandaki bir an" sınıfı, mutlak bir zaman, yerel bir zaman ve bir zaman dilimi uzaklığı içerebilir. Bu tür pek çok tipte olduğu gibi, herhangi iki bilgi parçası verildiğinde, biri üçüncü bilgiyi hesaplayabilir. Hangisini bilmekAncak, bilgi parçası hesaplandı, ancak bazen önemli olabilir. Örneğin, bir etkinliğin "17:00 UTC, saat dilimi -5, yerel saat 12:00" de kaydedildiğini ve bir saatin saat diliminin -6 olması gerektiğini keşfettiğini varsayalım. Birisi UTC'nin bir sunucudan kaydedildiğini biliyorsa, kayıt "18:00 UTC, saat dilimi -6, yerel saat 12:00"; Birisi bir saat yerel saatte anahtarlanmışsa "17:00 UTC, saat dilimi -6, yerel saat 11:00" olmalıdır. Küresel veya yerel zamanın “daha inanılır” olarak değerlendirilmesinin gerekip gerekmediğini bilmeden, hangi düzeltmenin uygulanması gerektiğini bilmek mümkün değildir. Bununla birlikte, kayıt hangi zamanın belirtildiğini takip ettiğinde, zaman diliminde yapılan değişiklikler diğerini değiştirirken onu yalnız bırakabilir.