Meyer'ın Nesneye Dayalı Yazılım Yapımında (1988) açık / kapalı prensibini şu şekilde tanımlar :
- Bir modül hala uzatma için mevcutsa açık olacaktır. Örneğin, içerdiği veri yapılarına alan veya gerçekleştirdiği işlevler kümesine yeni öğeler eklemek mümkün olmalıdır.
- Bir modülün başka modüller tarafından kullanılabilmesi için kapalı olduğu söylenecektir. Bu, modüle iyi tanımlanmış, kararlı bir açıklama verildiğini varsayar (bilgi gizleme anlamında arayüz).
Söylemeye devam ediyor:
Bir modülü yeniden açarsanız, eski sürüme bağlı oldukları için tüm istemcilerini güncellemek için yeniden açmanız gerekir. … [Bu sorun] bir modülün yeni bir işlev veya veri elemanı tarafından her genişletilmesi gerektiğinde, doğrudan ve dolaylı istemcilerdeki değişiklikleri tetikler. ... Tasarım ve programlamaya klasik yaklaşımlarla, hem açık hem de kapalı modüller yazmanın bir yolu yoktur.
Meyer'ın bu ikileme çözümü: asla mevcut sınıfları değiştirerek kütüphane modülünü genişletmeyin; bunun yerine, varolan sınıfların alt sınıflarını oluşturan yeni bir modül yazın ve yeni istemcilerin bu yeni modüle bağlı olmasını sağlayın.
1988'de Turbo Pascal ve Blankenship Basic'te oyuncak (prosedürel) programlar yazıyordum ve 21. yüzyıl mesleki deneyimim JVM, CLR ve dinamik dillerde, bu yüzden Meyer'ın ne anlama geldiğini bilmiyorum "tasarım ve programlamaya klasik yaklaşımlar".
Meyer'ın, istemci modüllerinin neden yeniden açılması gerektiğine dair somut bir örnek ( şimdi daha fazla üyesi olan, daha fazla dava gerektiren bir numaralandırma hakkındaki bir anahtar ifadesi) yeterince makul görünüyor, ancak bir kütüphaneye her işlev eklediğinizde bu iddiayı neredeyse haklı çıkarmıyor. modülü, tüm istemcilerini güncellemeniz gerekir .
Bu iddianın 1988'de aşikâr görünmesinin tarihsel bir nedeni var mı? Diyelim ki, C statik kitaplığına işlevler veya veri yapıları eklemek düzeni geriye dönük uyumlu API'larda bile istemcilerin yeniden derlenmesi gerektiği şekilde değiştirdi mi? Yoksa Meyer gerçekten sadece API geriye dönük uyumluluğunu uygulamak için bir mekanizma hakkında mı konuşuyor?