Ana içeriğe atla

Kalıtımı Engellemek - SEALED Anahtar Sözcüğü

C# Logo
Programlama nesne yönelimli programlamayla yani Object Oriented mantığıyla sanata dönüşür. Nesne yönelimli programlamanın temel konularından bir tanesi de inheritance yani kalıtımdır. Kalıtımı kullanmak yada kullanmamak tamamen sizin program tasarımınıza kalmış. Ama bazı durumlarda yazdığınız sınıfın kalıtımını engellemek veya bir fonksiyon, property'nin(özelliğin) override edilmesini engellemek isteyebilirsiniz. İşte bu işlemleri C# programlama dilinde yapmanın yolu sealed anahtar kelimesini kullanmaktır. Bu makelemin de temel amacı C# programlama dilinde sealed anahtar sözcüğünü tanıtmak, kullanım alanlarını ve kullanım mantığını açıklamaktır.
Konuyu geçmeden önce belirtmem gerekiyor ki bu konuyu anlayabilmek için nesne yönelimli programlama mantığını ve kalıtım konusunu çok iyi anlamanız gerekir. Burada anlatılan konular C# programlama dili kullanılarak örneklense de kullandığınız programlama dilinde büyük ihtimal sadece kullanılan sözcükler değişecektir. Yani önemli olan konu burada mantığı anlamak olmalıdır.

Kısa tanıtımdan sonra artık konuya giriş yapabiliriz. C# programlama dili için sealed anahtar kelimesi kalıtımı önlemek veya engellemekle alakalı bir durumdur. Yani bu kelimeyi kullanıp kullanmamak sizin yazdığınız programın akışını veya çalışma mantığını etkilemeyecek ve herhangi bir değişiklik yaratmayacaktır. Yani sealed anahtar kelimesi tamamen bir güvenlik önlemdir. Haklı olarak sorabilirsiniz. Eğer bu yazdığımı programın iş akışını etkilemiyorsa o zaman neden yazayım ve bu konuyu neden öğreneyim? Aslında bu sorunun cevabı makaleye giriş yaparken kullandığım cümlede saklı. Özellikle günümüz dünyasında bir yazılımcı grubunun birlikte çalıştığından ve bu kişilerin de aynı proje üzerinde çalıştığını dikkate almanız gerekir. Öyleyse nesne yönelimli programlamanın inceliklerini kullanmak hem sizin daha profesyonel iş yapmanız için önemli, aynı zamanda projenin geliştirilme aşamasında sizin yazdığınız kodlar için bir güvenlik önlemidir. Eminim ki konuyu örneklerle açıklayınca siz de anlatmaya çalıştığım güvenlik önleminin ne olduğunu anlayabileceksiniz.
Yukarıdaki açıklamalarla kısa da olsa sealed kelimesini ve kalıtımı önleme mantığını açıklamaya çalıştım. Ama bu konunun sizin için de aydınlatıcı olabilmesi için örneklere açıklamak istiyorum. Çünkü örnekler üzerinden gördüğümüz zaman konunun mantığını daha iyi anlayabileceksiniz ve bu yapının nerelerde kullanıldığı ile kendiniz karar verebileceksiniz. Çünkü nesne yönelimli programlama mantığındaki konular zorlama konular değil. Hatta bunları kullanmadan da programlarınız bir sonuç üretecek durumda olur. Ama yazdığınız programı herkesin anlaması ve güzel programlama denmesi ortak dil nesne yönelimli programlamayı ne kadar etkin ve doğru kullanmanıza bağlı. Yukarıda anlattığım konulara göre kalıtımı önlemek ve engellemek konusu anlayabildiğinizi umuyorum. Eğer anlamadıysanız da eminim ki konunun devamındaki örnekler anlamınzda size yardımcı olacaktır. Bu yüzden de konunun C# programlama dilinde uygulanabilmesi için seçilmiş sealed anahtar sözcüğünün uygulamasına geçiyorum.
Sealed anahtar kelimesi sınıflara(class), özelliklere(property) ve fonksiyonlara uygulanabilir. Sınıflarla birlikte kullanıldığında kalıtımı önlerken, fonksiyonlarla birlikte kullanıldığında ise override etmeyi engeller. Vurgulamak istiyorum sealed anahtar kelimesi fonksiyonlar için doğal desteği olduğu halde yani yazılmadan da kalıtım yapılmaz ama sınıflar için kalıtımı önlemek için mutlaka sealed kelimesinin kullanılması gerekir. sealed anahtar kelimesini türkçeye çevirecek olucarsak mühürlü, belirlenmiş, kapalı veya gizli gibi çevirebiliriz.
Örnek için aşağıdaki gibi 3 tane sınıfımımız olsun.

public class Hayvan

{
   public int Yas { get; set; }
}
public class Kedi : Hayvan
{
}
public class Ragdoll : Kedi
{
}


Bu sınıfları şöyle anlayabilirsiniz. Kedi bir hayvan türüdür ve Ragdoll da bir kedi türüdür. Öyleyse Ragdoll sınıfı bizim için buradan kalıtılm yapılmasını engellemek istediğimiz bir sınıf olabilir. Yani Ragdoll kedi türüyse bizim örnek için bir daha bu sınıfın özelliklerini başka bir sınıfın almasını engellemek için sınıfı sealed olarak yazabiliriz. Yani sınıf tanımlamamız aşağıdaki gibi olacak.

public sealed class Ragdoll : Kedi
{
}


Ragdoll sınıfını sealed olarak tanımladıktan sonra kalıtımı engellemiş olduk. Yani bu sınıftan inheritance yapılamaz. Peki yukarıda bahsettiğimiz bu sadece bir güvenlik önlemidir derken ne kastettiğimizi açıklayalım. Örneğin bir diğer keti türümüz Maine Coon olsun. Bu sınıfı normalde Kedi türünden türetmemiz lazım. Ama Ragdoll'un da bir kedi türü olduğunu düşünüp burdan türetirsek o zaman hata yapmış oluruz. Belki bu konuyu tam anlatmayan bir örnek de olabilir ama sonuç olarak yanlış sınıftan inheritance almanın sonucunu anlatmak için açıklayıcı. Sonuç olarak Maine Coon sınıfı için Ragdoll sınıfından kalıtım almaya çalışalım.

public class MaineCoon: Ragdoll
{
}


Visual Studio bu durum karşısında MaineCoon sınıfının altını çizecek ve "MaineCoon": cannot derrive from sealed type "Ragdoll" gibi bir hata alacaksınız. İşte güvenlik önlemi diye de buna denir bence. Sizin veya ekibiniz hata yapmasını engellemek. Önemli olan nokta da burasıdır. Sealed anahtar sözcüğü sınıflardan yanlış kalıtımı engellemek için kullanılır ve kalıtımı olmayacak sınıflar üretmenize yardım eder.
Sealed anahtar sözcüğü ile diğer önemli olan konu fonksiyonlarda override etmeyi engellemek için kullanılmasıdır. Bilindiği gibi virtual anahtar kelimesi fonksiyonlar için override etmek için kullanılan bir kelimedir. Şunu de belitmemiz lazım ki fonksiyonlara virtual anahtar kelimesi eklenmezse doğal olarak sealed gibi davranır, yani override edilemez. Sealed kelimesi yazmak burada sadece o sınıfın override edilemediğini belirtmek için ve kodları daha sonra okurken açıklayıcı olması açısından önemlidir. Örnek olabilmesi Kedi sınıfı için Yuru metodunu sealed olarak tasarlayabiliriz.

public class Kedi : Hayvan
{
   public sealed void Yuru() { }
}
public sealed class Ragdoll : Kedi
{
}


Görüldüğü gib public override yazarsak sınıflar arasında Yuru metodunu göremeyiz. Bunun nedeni de Yuru metodunun sealed olarak tasarlanmasıdır.
Son olarak konuyu özetleyecek olursak C# programlama dilinde sealed anahtar kelimesi sınıflar, özellikler ve fonksiyonlarla birlikte kullanılır. Sınıflarda kalıtımı önlemek, fonksiyonlarda ise override edilmesini engeller. Sealed anahtar kelimesinin kullanımı program akışını etkilemez ama kodunuzun güvenliğini sağlamak amacıyla kullanılan nesne yönelimli programlama stratejilerinden bir tanesidir.

Umut ediyorum ki makalenin tamamını okuduysanız konuyu anlayabilmişsinizdir. Konuyla alakalı sorularınız olursa sorabilirsiniz. Fırsat buldukça cevap yazmaya çalışacağım.

Yorumlar

Bu blogdaki popüler yayınlar

Medyan (Ortanca) Nedir? Nasıl Hesaplanır? Nerelerde Kullanılır?

Medyan işlemi olasılık hesaplamalarında sıkça kullanılan bir sayı dizisinin ortalamasını hesaplamak için alternatif yöntemlerden bir tanesidir. Ortanca medyan işleminin diğer adıdır. Matematiksel olarak medyan işlemi bir sayı dizisi küçükten büyüğe sıralayarak ortada kalan elemanı medyan değeri olarak belirleme işlemidir. Örnek verecek olursak: 2, 1, 5, 4, 5, 1, 2, 3, 5 serisi sıralanırsa 1, 1, 2, 2, 3, 4, 5, 5, 5 serisi elde edilir. Bu seri 9 elemanlı olduğundan ortadaki, yani 5. eleman (medyan) olacaktır. 5. eleman 3 sayısıdır. Yani ortanca değeri 3'dür Eleman sayısı tek sayı olan bir seride medyan değerin sırasının hesaplaması şu şekilde formüle edilir. Medyanın Sırası = (Eleman Sayısı + 1) / 2 Bu formülü yukarıdaki örneği uygulayacak olursak; Medyanın Sırası = (9 + 1) / 2 = 5 Veri serisi eleman sayısı bir çift sayı ise bu durumda serinin 2 medyanı olacaktır. Örneğin 2, 1, 5, 4, 5, 1, 2, 3, 5, 4 serisi sıralandığında 1, 1, 2, 2, 3, 4, 4, 5, 5, 5 s

Ağaçlar Kireçle veya Badana İle Neden Boyanır?

Ağaçlar kireçle boyanmasının veya badana yapılmasının hem çevreye hem de doğaya, ağaçlara faydası var. Bu makalede bu geleneği enine boyuna tartışmaya çalıştık. Ağaca zarar veren mikrop ve bakterileri öldürür. Ağacı çok aşarı soğuk havalarda ve çok aşırı sıcak havalarda korur. Ağacın çürümesini ve kurtlanmasını önler. Ağacın gövdesinin alabileceği zararları en az düzeyde düşürmeyi sağlar. Hoş, güzel, hijyenik, temiz pırıl pırıl bir görüntü oluşturur. Ayrıca çok sıcak havalarda da ağacı yanmaya karşı korumak. En büyük etkisi soğuk havalarda ağacı don vurmalarına karşı korumak . Küresel ısınma göz önüne alındığında mevsim değişiklikleri ani don, ani ısı artışları ve azalışları sonucunun doğuracağı etkenler için yararlı etkin bir yöntem. Gövdeden obur dalların çıkmasını azaltmak için sürülür. Kireçleme ağaçları güneş yanığından korumak için yapılıyor. Ağaçlar da güneşten yanabiliyorlar. Bu arada odun dokudaki gözenekleri doldurarak kapattığı için, zararlıların yuv

Azərbaycan Dilində Vurğu Qəbul Etmeyen Şekilçiler

Sözlərdə hecalardan birinin digərlərinə nisbətən daha qüvvətli deyilməsinə heca vurğusu deyilir. Üzərinə vurğu düşən hecaya isə vurğulu heca deyilir. Azərbaycan dilində vurğu adətən söz sonuna düşür. Söz şəkilçi qəbul ederkən vurğu adətən şəkilçinin üzərinə keçir. Məsələn: çiç ə k - çiçəkl ə r - çiçəklərd ə n məkt ə b - məktəbl i - məktəblil ə r - məktəblilərd ə n Buna baxmayaraq dilimizdə bir sıra şəkilçilər var ki onlar vurğu qebul etmirlər. Bu məqalədə Azərbaycan dilində vurğu qebul etməyən şəkilçilər incələnəcək ve bu şekilçilərin hansı hallarda vurğu qebul edib hansı hallarda vurğu qebul etmediyi araşdırılacaqdır. Eyni zamanda bildirmək istəyirəm ki vurğu ilə bağlı daha geniş və ətraflı məlumat üçün Azərbaycan Dilində Vurğunun Praktik Məsələləri adlı məqaləyə də nəzər yetirə bilərsiniz.  1. İsimlərdəki şəxs(xəbərlik) şəkilçiləri Məsələn: müəli'məm müəli'msən müəli'mdir müəli'mik müəli'msiniz müəli'mdirlər Qeyd: -dır4