नीचे दिए गए उदाहरण पर विचार करें। ColorChoice enum में कोई भी परिवर्तन सभी IWindowColor उपवर्गों को प्रभावित करता है।
क्या ईर्ष्या भंगुर इंटरफेस का कारण बनती है? क्या अधिक बहुरूपी लचीलेपन की अनुमति देने के लिए किसी एनम से बेहतर कुछ है?
enum class ColorChoice
{
Blue = 0,
Red = 1
};
class IWindowColor
{
public:
ColorChoice getColor() const=0;
void setColor( const ColorChoice value )=0;
};
संपादित करें: मेरे उदाहरण के रूप में रंग का उपयोग करने के लिए खेद है, कि सवाल क्या है के बारे में नहीं है। यहां एक अलग उदाहरण है जो लाल हेरिंग से बचा जाता है और लचीलेपन से मेरा क्या मतलब है, इसके बारे में अधिक जानकारी प्रदान करता है।
enum class CharacterType
{
orc = 0,
elf = 1
};
class ISomethingThatNeedsToKnowWhatTypeOfCharacter
{
public:
CharacterType getCharacterType() const;
void setCharacterType( const CharacterType value );
};
इसके अलावा, कल्पना करें कि उपयुक्त ISomethingThatNeedsToKnowWhatTypeOfCharacter उपवर्ग को संभालती है एक कारखाने के डिजाइन पैटर्न द्वारा सौंपे गए हैं। अब मेरे पास एक एपीआई है जिसे भविष्य में एक अलग आवेदन के लिए विस्तारित नहीं किया जा सकता है जहां स्वीकार्य चरित्र प्रकार {मानव, बौना} हैं।
संपादित करें: मैं जो काम कर रहा हूं, उसके बारे में अधिक ठोस होना। मैं इस ( MusicXML ) विनिर्देश के एक मजबूत बंधन को डिजाइन कर रहा हूं और मैं विनिर्देशन में उन प्रकारों का प्रतिनिधित्व करने के लिए एनम वर्गों का उपयोग कर रहा हूं जो एक्स: एन्यूमरेशन के साथ घोषित किए गए हैं। मैं सोचने की कोशिश कर रहा हूं कि जब अगला संस्करण (4.0) सामने आता है तो क्या होता है। क्या मेरी क्लास लाइब्रेरी 3.0 मोड में और 4.0 मोड में काम कर सकती है? यदि अगला संस्करण 100% पिछड़ा संगत है, तो हो सकता है। लेकिन अगर गणना मूल्यों को विनिर्देश से हटा दिया गया है तो मैं पानी में मर चुका हूं।