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
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.
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.
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.
{
}
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
Yorum Gönder