Doc Brown'ın cevabı kesinliğe en yakın olan diğer cevaplar ise Açık Kapalı Prensip'in yanlış anlamalarını göstermektedir.
Açıkça yanlış anlamayı ifade etmek için, OCP geriye doğru uyumsuz bir değişiklik yapmaması gerektiğini anlamına geldiğini bir inanç var gibi görünüyor (hatta veya herhangi bu satırlar boyunca değişimler gibi bir şey.) OCP Eğer kalmamak bileşenleri tasarımı bekleniyor ihtiyaç için Bu değişikliklerin geriye dönük olarak uyumlu olup olmadığına bakılmaksızın, işlevlerini genişletmek için bunlarda değişiklikler yapın. İşlevselliği eklemenin yanı sıra, bir bileşende geriye dönük uyumlu (ör. Yeniden düzenleme veya optimizasyon) veya geriye dönük olarak uyumsuz (ör. İşlevselliği kullanımdan kaldırma ve kaldırma) gibi değişiklikler yapmanıza neden olabilecek birçok neden vardır. Bu değişiklikleri yapabileceğiniz, bileşeninizin OCP'yi ihlal ettiği anlamına gelmez (ve kesinlikle sizin OCP'yi ihlal ediyorlar).
Gerçekten, kaynak koduyla ilgili değil. OCP'nin daha soyut ve alakalı bir ifadesi şudur: "bir bileşen, soyutlama sınırlarını ihlal etmeden uzamaya izin vermelidir". Daha ileri gideceğim ve daha modern bir yorumlamanın şöyle olduğunu söyleyeceğim: "bir bileşen soyutlama sınırlarını zorlamalı , ancak uzamayı sağlamalıdır". Bob Martin’in OCP’deki makalesinde bile “kaynak kodunu istilacı” olarak ““ değiştirmeye kapalı ”olarak nitelendirdiği“ makalesinde bile ”, daha sonra kaynak kodunu değiştirmeyle ve soyutlama ile ilgisi olmayan kapsülleme hakkında konuşmaya başlar. sınırları.
Bu nedenle, sorudaki hatalı öncül, OCP'nin bir kod tabanının gelişmesiyle ilgili bir kılavuz olduğu yönündedir. OCP tipik olarak “bir bileşen uzantılara açık ve tüketicilerin değişikliklerine kapalı olmalıdır” şeklinde sloganlaştırılır. Temel olarak, bir bileşenin tüketicisi , bileşene işlevsellik eklemek isterse , eski bileşeni, ek işlevsellik ile yenisine genişletebilmelidir, ancak eski bileşeni değiştirememelidir .
OCP , bir bileşenin yaratıcısı hakkında işlevselliği değiştiren veya kaldıran hiçbir şey söylemez . OCP, bugüne dek hata uyumluluğunu korumayı savunmuyor . Yaratıcı olarak, bir bileşeni değiştirerek veya kaldırarak OCP'yi ihlal etmiyorsunuz. Siz veya daha doğrusu yazdığınız bileşenler OCP'yi ihlal ediyor, eğer tüketicilerin bileşenlerinize işlevsellik ekleyebilmeleri için tek yol mutasyona sokmak, örneğin maymun eklemesi yapmak.veya kaynak koda erişme ve yeniden derleme. Çoğu durumda, bunların hiçbiri tüketici için seçenek değildir; bu, bileşeniniz "uzatma için açık" değilse, şanssız kalmaz. Onlar sadece bileşeninizi ihtiyaçları için kullanamazlar. OCP, kütüphanenizin tüketicilerini en azından tanımlanabilir bir “uzantı sınıfı” ile ilgili olarak bu pozisyona koymadığını savunuyor. Kaynak kodda veya kaynak kodun birincil kopyasında bile değişiklikler yapılabilse bile, bunu yapmanın birçok olası olumsuz sonucu olduğu için, onu değiştiremeyeceğinizi "iddia etmek" en iyisidir.
Yani sorularınızı cevaplamak için: Hayır, bunlar OCP'nin ihlali değildir. Bir yazarın yaptığı hiçbir değişiklik OCP'yi ihlal edemez çünkü OCP bir değişiklik oranı değildir. Değişiklikler, olabilir oluşturmak OCP ihlallerini ve bunlar kod temeli önceki sürümlerinde OCP başarısızlıkları motive edilebilir. OCP, bir kod tabanının evrimsel tarihi değil, belirli bir kod parçasının özelliğidir.
Bunun tersine, geriye dönük uyumluluk bir kod değişikliğinin bir özelliğidir . Bir kod parçasının geriye dönük olarak uyumlu olduğunu veya uyumlu olmadığını söylemenin bir anlamı yoktur. Sadece bazı kodların eski kodlara göre geriye dönük uyumluluğu hakkında konuşmak mantıklıdır . Bu nedenle, bazı kodların geriye doğru uyumlu olup olmadıklarının ilk kesilmesinden bahsetmek hiç mantıklı gelmiyor. İlk kod kesimi, OCP'yi tatmin edebilir veya yerine getiremez veya genel olarak bazı kodların, OCP'yi kodun herhangi bir tarihsel sürümüne atıfta bulunmadan yerine getirip getirmediğini belirleyebiliriz.
Son sorunuza gelince, genellikle genel olarak görüşe dayalı olarak StackExchange'in tartışmaya açık bir konudur, ancak kısaca tanımladığınız olgunun JavaScript yorgunluğu olarak adlandırıldığı teknik ve özellikle JavaScript'e açıktır . ( Bazıları hicivli, başka bakış açılarından bahseden, başka çeşitli makaleler bulmak için google'ı kullanmaktan çekinmeyin .)