Nesne yönelimli programlamada (Obejct Oriented Programming) esas olan gerçek hayatta var olan şeyleri gözlemleyip programlama ortamına aktarılmasını sağlamaktır. Bu programlama türü hem karmaşıklığı hem de artan boyutları azaltmak için yaratılmıştır. Bu sayede kısa sürede ve oldukça kolay bir şekilde yazılımlarımızı geliştirebiliriz. Ayrıca tüm programlama dilleri tarafından desteklenir. Yazılım geliştirmede üç temel aşama vardır.
- Tasarlama
- Geliştirme
- Test Etme
Tasarlama aşaması başarılı geçerse diğer aşamalarda oldukça başarılı geçer. Yani tasarım aşamasını hallettikmi gerisi çorap söküğü gibi gelir.
OOP’den önce kullanılan programlama dili ise prosedürel olarak adlandırılır. Bu programlama dilinin çalışma şekli ise normal ilerleyen kodlara aynı işleri gören ortak fonksiyonlar çağırması ile ilerler, bunu yapmasının nedeni ise iş yükünü hafifletmektir. Bu programlama dili uzun süre kullanıldı fakat OOP kadar pratik değildi. Çünkü bu uygulama bir bir bütün halindeydi ve bu bütünü bozmamak için bütün kodlara hakim olmak gerekiyordu. Uygulama bittikten sonra program üzerinde değişiklik yapınca; o programın bütünlüğünü bozulduğu için büyük sorunlarla karşı karşıya kalınabiliyordu. Ayrıca talep arttığı, teknoloji gittikçe gelişmeye başladığı için boyutlarda büyüdü, yapılan işlerde büyüdü; bu durumda kodlarda fazlalaştı. Bu durumda bütünlüğü korumak zorlaştığı için daha basit bir çözüm yolu OOP’ye geçildi.
OOP’de her parçanın bir sınıfı olmalıdır ve bu sınıflar birbirleri ile iletişim halinde olmalıdır. OOP’de mantık, prosedürel mantığın tam tersi gibi işliyor. Yani ilk olarak programı parçalar halinde oluşturup bir bütün haline getiriyoruz, prosedürel yapıda ise sadece bir bütün halinde yapabiliyorduk. OOP’de yapacağınız sınıflar prosedürel yapının tersine gelişime daha açıktır. Sonradan değişikler yaparak programı daha iyi hale getirmenizi sağlar ve bu hiçbir soruna yol açmaz. OOP, kod tekrarınında önüne geçer buda tercih edilme sebeplerinden biridir. OOP, prosedürel yapıya göre daha az maliyetli bir dildir çünkü prosedürel yapıda kod fazlalığı ve bir bütün halinde çalışmak zorunda olduğundan işçi fazlalığı vardır. OOP’de iş yükü azalıp daha basit bir dil gelince hem işin kalitesi arttı hemde işçi sayısı azaldı bu durumda maliyette azaldı.
Sınıf
Nesne yönelimli programlamada en önemli ve işin mantığını anlamamızı sağlayan özellik sınıf ve nesnelerdir. Çünkü nesne yönelimli programlama nesneler ve onlar arasındaki ilişkisi üzerine kuruludur. Bundan dolayı sınıf mantığının iyi anlaşılması gerekiyor. Nesneler sınıflardan türetilir ve nesnelerin özellikleri sınıflarla belirtilir.
public class galatasaray{
galatasaray sneijder = new galatasaray();
}
Bu örnekte bir sınıftan bir nesne oluşturuldu. Bu kodla beraber sınıf belleğe taşınmış oluyor. New ile ise Galatasaray sınfının bir kopyasını almış oluyoruz ve bellek adresini sneijder değişkeninde saklamış oluyoruz. Bu yazdığım kod sayesinde nesnenin kendisini değil nesnenin yerini gösteren bir kod yazmış oluyoruz. C# değer tipleri ikiye ayrılır değer ve referans tipleri olarak bu kodda tanımladıklarımız ise referans değişkeni oluyor. Ayrıca sınıf ve nesneler referans türünden oldukları için başka bir değişkene kopyalandıkları zaman bir daha yeni bir kopya oluşturulamaz.
Kapsülleme
Nesne yönelimli programlamada en önemli aşamalardan birisidir. Bu özellik kullanılan dilin kullanıcı tarafından gereksiz bulunan kısımlarını saklar. Kapsüllemenin bir diğer önemli işi ise veri korumasıdır. Sınıf altındaki kodları private erişim belirleyicisi sayesinde koruma altına alır. Bu sayede başkaları bunları kullanmak isterse ulaşamayacak ya da sizden izin almak zorunda kalacaktır. Public erişim belirleyicisi ise dış dünyaya açık olduğu için sınıf içindeki mantıkları algılama sorunu yaşar bundan dolayı sınıf içindeki değerlerin uygun olup olmadığı anlaşılamaz. Yani düzgün ve güvenli bir iş yapmak istiyorsak public erişim sağlayıcısı yerine private erişim sağlayıcısı kullanmak hem veri güvenliği hem de iş açısından daha mantıklı olur.
Kalıtım
Kalıtım bu işin en önemli aşamalarından biridir. Kalıtım sınıfların üzerine yeni sınıflar tanımalamak ve bunlara izin verme yetkisi olarak ifade edebiliriz. Kalıtım daha çok sınıfın özelliklerini bir alt sınıftan alarak sanki kendi sınıfıymış gibi kullanmasıda denebilir. Kısaca, varolan bir sınıfa yeni özellikler eklemek için birde alt sınıftan özellik almak için kalıtım kullanılır. C#’da bir sınıf sadece tek temel sınıfa sahip olabilir ama C#’da istenilen sayıda kalıtım uygulanabilir bunada çoklu kalıtım denir.
Çok Biçimlilik
Çok biçimcilik farklı nesnelerin aynı olaya farklı farklı şekillerde yanıt vermesidir. Çok biçimcilik sınıfta olan bir nesnenin özelliklerini sınıf tarafından nasıl değiştirebileceğimizi gösterir. Çok biçimcilik kullanmak için özellikle virtual ve override bi anahtar kelimelerin iyi anlaşılması gerekiyor. Sınıf içindeki nesnenin kendisi tarafından türeyen sınıflar tarafından değiştirilmesini istiyorsa bu virtual ile yapılmalıdır. Ama illa böyle bir değişiklik için virtual kullanılması gerekmez bunu kendi mantığıylada çözebilir. Sınıfın başına override gelirse yeniden kodlanması ve değişik yapması mümkündür. Override ile kod içerisinde itselin sınıfta yer alan bir yeri çağırabilirsiniz. Yani kısaca çok biçimcilik gereksiz uygulamaları kullanıcıdan saklar ve en temel işlevi ise veri korumaktır.