ऑब्जेक्ट-ओरिएंटेड क्लासेस के लिए दस्तावेज़ीकरण में अक्सर अपनी डिज़ाइन को बदलने के लिए वर्ग के लचीलेपन को बनाए रखने के बीच व्यापार का समावेश होता है, या वर्ग के उपभोक्ताओं को इसकी क्षमता का पूरा उपयोग करने की अनुमति देता है। अपरिवर्तनीय वर्ग जो एक निश्चित होगा गुणों का एक नंबर होगा, तो सही एक दूसरे के साथ संबंध (जैसे 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" होना चाहिए। यह जानने के बिना कि क्या वैश्विक या स्थानीय समय को "अधिक विश्वसनीय" माना जाना चाहिए, हालांकि, यह जानना संभव नहीं है कि कौन सा सुधार लागू होना चाहिए। यदि, हालांकि, रिकॉर्ड रखा गया था कि किस समय को निर्दिष्ट किया गया था, समय क्षेत्र में परिवर्तन दूसरे को बदलते समय उस अकेले को छोड़ सकता है।