Aşağıdaki örneği düşünün. ColorChoice enum öğesinde yapılan tüm değişiklikler tüm IWindowColor alt sınıflarını etkiler.
Numaralamalar kırılgan arayüzlere neden olma eğiliminde mi? Daha polimorfik esnekliğe izin vermek için bir numaradan daha iyi bir şey var mı?
enum class ColorChoice
{
Blue = 0,
Red = 1
};
class IWindowColor
{
public:
ColorChoice getColor() const=0;
void setColor( const ColorChoice value )=0;
};
Düzenleme: Örneğim olarak rengi kullandığım için üzgünüm, sorunun konusu bu değil. İşte kırmızı ringadan kaçınan ve esneklikle kastettiğim hakkında daha fazla bilgi sağlayan farklı bir örnek.
enum class CharacterType
{
orc = 0,
elf = 1
};
class ISomethingThatNeedsToKnowWhatTypeOfCharacter
{
public:
CharacterType getCharacterType() const;
void setCharacterType( const CharacterType value );
};
Ayrıca, uygun ISomethingThatNeedsToKnowWhatTypeOfCharacter alt sınıfındaki tanıtıcıların bir fabrika tasarım deseni tarafından verildiğini düşünün. Şimdi, izin verilen karakter türlerinin {human, cüce} olduğu farklı bir uygulama için gelecekte genişletilemeyen bir API var.
Edit: Sadece üzerinde çalıştığım şey hakkında daha somut olmak. Bu ( MusicXML ) belirtimine güçlü bir bağ tasarlıyorum ve xs: enumeration ile belirtilen belirtimdeki türleri temsil etmek için enum sınıflarını kullanıyorum. Bir sonraki sürüm (4.0) çıktığında ne olacağını düşünmeye çalışıyorum. Sınıf kütüphanem 3.0 modunda ve 4.0 modunda çalışabilir mi? Bir sonraki sürüm% 100 geriye dönük uyumluysa, belki de. Ancak numaralandırma değerleri spesifikasyondan çıkarıldıysa suda öldüm.