1 – Kapsülleme (Encapsulation)

İşlemlerin ve verilerin gizlenmesine veya bir grup içerisinde toplanmasına kapsülleme denir. Kapsülleme sayesinde, sınıfımız içinde kullandığımız alanların dışarıdan herhangi bir etki ile doğrudan değiştirilmelerini engellemiş oluyoruz. Bu durum bizim isteğimiz dışında oluşabilecek atamların önüne geçmemize ve ille de bu alanların değerleri değişecekse bizim belirlediğimiz bir çizgide olmasına neden oluyor. Bu da programcılıkta ve özellikle nesne tabanlı programlamada çok büyük bir yere sahip olan kontrolün elimizde olmasını sağlıyor.

nesne-tabanli-programlama-kapsulleme

Yukarıdaki resimde gördüğünüz saat içinde çok karmaşık mekanizmalar bulunmaktadır. Ama bu karmaşık mekanizma saatin kullanıcısını ilgilendiren bir olay değildir. Kullanıcı için önemli olan saatin düzgün çalışmasıdır.

2 – Kalıtım (Inheritance)

Normalde bu kavramı gerçek hayattan biliyoruz. En basit anlamda, örneğin “Be, annemin gözlerini almışım.” dediğimizde, tıp uzmanlarının buna getirdikleri yorum “siz annenizden kalıtımsal olarak şu özellikleri almışsınız.” oluyor. Programlama dillerinde de kalıtımın rolünün aynı olduğunu söyleyebiliriz. Zaten nesne tabanlı programlama dillerini tasarlayan uzmanlar, gerçek hayat problemlerini, bilgisayar ortamına taşıyabilmek amacıyla en etkili modelleri geliştirmişler, bu model içerisinde kalıtımı da katarak çok önemli bir özelliğin kullanılabilmesini sağlamışlardır.

kalitim-nedir

Kalıtım kavramının programlama dilleri içerisinde bir tanımını yapmak lazım. En genel tanımı ile kalıtım, “Bir sınıftan yeni sınıflar türetmektir.” Her şeyden önce kalıtım yolu ile bir sınıftan yeni sınıflar türetmenin, türetilen sınıflara etkisi nedir? Bu sorunun cevabı kalıtımın da özünü oluşturmaktadır. Türetilen her bir sınıf, türediği sınıfın özelliklerini de devralır. Buradan, türetilmiş bir sınıf içerisinden, türediği sınıfa ait üyelere erişebileceği sonucunu çıkartabiliriz. Elbette bu erişimin de bazı kuralları vardır. Örneğin erişim belirleyicilerinin etkisi veya aynı üyelerin kullanılışı gibi durumlar.

Neden bir sınıftan başka sınıflar türetiriz? Bunun cevabı şudur: Tüm sınıflarda ortak olan özellikleri tek bir sınıf içerisinde toparlamak. Bu modellerimizi geliştirirken, her sınıf için ortak olan üyelerin tekrar yazılmasını engellemekle kalmayacak, sınıflar arasında düzenli bir hiyerarşi yapısının oluşmasını da sağlayacaktır.

nesne-tabanli-kalitim

Şimdi güzel bir örnek verelim. Gerçek hayat modelleri bu iş için biçilmiş kaftandır. Örneğin, otomobilleri bir temel sınıf olarak düşünebiliriz.

Yukarıdaki örnek resme yorum yaparak, bu sınıftan otomobillere ait değişik kategorileri türetebiliriz. Buradaki tüm sınıfların ortak bir takım özellikleri var. Bir motorlarının olması, tekerleklerinin olması, viteslerinin olması vb. ama aynı zamanda her ayrı sınıfn kendine has özellikleri de vardır. Örneğin ralli araçları için güvenlik bariyerlerinin olması, pilotlar için kaskların kullanılması gibi. Bu tabloyu inceleyince “Her ralli aracı bir otomobildir.” diyebiliriz. Bu ralli araçlarının otomobil sınıfından türediğini gösterir. Diğer yandan “Her WRC bir ralli aracıdır.” da diyebiliriz. Bu ise, WRC araçlarının ralli araçlarının birtakım ortak özelliklerine sahip olduğunu ayrıca otomobillerin de bir takım ortak özelliklerine sahip olduğunu gösterir.

 

İlk aşamada ralli, ticari, özel ve spor sınıflarının otomobil sınıfından türediğini söyleyebiliriz. Bununla birlikte WRC ve GrupN sınıflarıda otomobil sınıfından türeyen ralli sınıfından türemiştir. Yani burada şunu söylemek mümkündür. WRC sınıfı hem ralli sınıfının hem de otomobil sınıfının özelliklerine kalıtımsal olarak sahiptir.

3 – Çok Biçimlilik (Polymorphism)

Bir metodun farklı nesnelerde veya farklı ortamlarda farklı sonuçlar üretmesidir. Mesela “konuşmak” insan sınıfına ait bir metottur.

cok-bicimlilik-polymorphism

Ancak bu metot ait olduğu insan sınıfının örneğine göre farklı sonuçlar üretir. Arkadaşımızla konuşurken farklı bir tonda, patronumuzla konuşurken farklı bir tonda konuşuruz, diğer bir ifadeyle bu metodun birden fazla biçimi vardır.

Bir Cevap Yazın