OOP’nin Temel İlkeleriSoyutlama(Abstraction)
Sarmalama(Encapsulation)
Çok-Şekillilik(Polymorphism)
Miras Alma/Kalıtım(Inheritance)1. Bölüm SOYUTLAMABir nesnenin belirli alanlarını dış dünyadan ayrı tutma işlemidir.OOP’nin bu kıstası, programcıyı, nesne ile ilgili anlaşılması güç işlevlerden soyutlamayı amaçlamaktadır.Kaç kişi araba kullanırken, motorun içerisinde olup bitenle ilgilenir.
2. Bölüm SARMALAMABir nesnenin içerisindeki bazı özel üyeleri kullanıcılardan gizleyebilme özelliğidir.Programcıyı ilgilendirmeyen veya belirli arabirimler üzerinden erişilmesi istenen alanları saklamaktır.Verilere dışarıdan gelebilecek bozulmalara, yanlış kullanımlara karşı korumaktır.Nesne içerisindeki yerel alanları, özelliklerle veya erişim belirleyicilerle sarmalarız.
2.1 Erişim Belirleyicilerpublic (Tüm erişimlere açık)private (Sadece üyesi olduğu sınıftan erişilebilir)protected (üyesi olduğu sınıftan ve bu sınıftan türetilmiş sınıflardan ulaşılır)internal (aynı program (assembly) içerisindeki sınıflardan erişilebilir)
privateYerel üyeDışarıdan hatta bu sınıftan türetilmiş sınıflardan bile erişilemeyeceği anlamına gelir.
publicBu üyeye her yerden erişilebilir.
Örnekte GetOrderDetail() fonksiyonu ve StoreId değişkeni publictir, CalTotal() yordamı ve Total değişkeni privatedir.Ana fonksiyonda                               IslemobjIslem=newIslem();            objIslem.                                                                                          dediğimizde public üyeler görünür, private üyeler görünmez.
protectedKendi sınıfının diğer üyeleri tarafından erişilebildiği gibi sınıfından türetilmiş sınıflardan da erişilebilir.Kendi sınıfında private, türetildiği sürece publictir.
internalSadece aynı uygulama içerisinde olan sınıflar tarafından erişilmeyi sağlar.Sözkonusu üye, kendisiyle birlikte derlenmiş kodlar tarafından erişilir.
protectedinternalBu ifade hem aynı projedeki sınıflar hem de aynı projede olmayan, fakat üyenin ait olduğu sınıftan türetilmiş sınıflar tarafından kllanılabilir.Önüne erişim belirleyici konulmayan sınıf üyesi default olarak private muamelesi görür.class ve struct gibi yapılar internal ve public olabilir. Bunlar varsayılan olarak internal özelliğine sahiptir.İç içe sınıflarda(nestedclass) sınıf protected, protectedinternal ve private olabilir. İç icestructprotected veya protectedinternal olamaz.Arabirimler sınıflar gibi public veya internal olabilir. Arabirim üyeleri her zaman publictir.
3. Bölüm ÇOK-ŞEKİLLİLİKAynı isimdeki yordamların  duruma göre farklı işlemler yapmasıdır.Bu biçim değişikliği bazen nesnelere göre bazen yordamlara gönderilen parametreler göre gerçekleştirilir.Bu işlemi iki şekilde sağlayabilir. Arabirim ve kalıtım yoluyla. Bu bölümde arabirime değineceğiz. Kalıtım yoluyla olanı sonraki konuda işlenecek.
3.1 Yeniden yükleme (overloading) Aynı sınıf içerisinde parametre sayısı ve türü farklı olmak koşuluyla aynı isimde birden çok yordam tanımlanabilir.Derleyici hangi yordamı çalıştıracağını signature işlemiyle anlar.Bir yordamın signature bilgisi yordamın adı, parametre türü, parametre sırası ve paremetre erişim niceleyicisidir.Parametre ismi veya yordamın geri dönüş türü signature bilgisini etkilemez.
Yapıcı yordamlar da yeniden yüklenebilir. İlgili sınıftan bir nesne oluşturulmaya çalışılırken, yapıcı yordama ne sayıda veya ne türde parametre gönderildiği önem kazanır.
Son örnekte; overload edilmiş yordamların parametreleri, birbirine dönüştürülebilir ise CLR otomatik olarak en üst tipi seçer.Byte türü integer’e, float türü double türüne dönüştürülmesi gibi.
3.2 ArabirimlerSınıf ve struct gibi türler için oluşturulmuş modele arabirim denir.Arabirimler bir sınıfın temelde hangi üyelerden oluşacağını belirleyen şablonlardır. Bu şablonlar oluşturulacakları sınıflara öncülük eder. İçermeleri gereken üyelerin tanımlamaları için yol gösterir..NET Framework, çoklu kalıtımı sınıflarla değil arabirimlerle destekler.Bir sınıf birden fazla arabirimden farklı ögeler alarak yetenekli hale gelebilir.
Amacı hem sınıflar tanımlanırken daha önce tanımlanmış üyelerin o sınıf için oluşturulmasını garanti etmek hem de farklı sınıflar için aynı şablonları kullanmaktır.Arabirimler üyelerin içeriklerini, yani gerçekleştireceklerini içermeyip sadece tanımlamalarını  boş hallerini içerir.Arabirimler interface sözcüğüyle tanımlanır.
Alanların kodları ve ne yapacakları sınıf içerisinde belirtilmiştir.Yapıcı yordam, yıkıcı yordam ve alanlar arabirimler içerisinde tanımlanamazlar.Arabirimlerin üyeleri private olarak tanımlanamaz, public olarak tanımlandı kabul edilir.Arabirimi uygulayan sınıf, arabirimin tüm üyelerini kullanmak zorundadır. Bununla birlikte sınıf kendine ait üyelere de sahip olabilir.Bir arabirim yapı veya sınıftan türetilemez; ama başka bir arabirimden türetilebilir.
Burada karşımıza şöyle bir sorun çıkabilir. Gerçekten Uye sınıfı Icanlı ve Iboyut arabirimlerine dönüştürülebilecek yeteneğe sahip mi? DurumuBuna izin veriyor mu? Bunu is operatörüyle kontrol edebiliriz
3.3 Soyut SınıfSınıfların örnek alacağı ana sınıf şablonunu temsil eder.Soyut sınıfta, sınıflarda olması gereken öğeler tanımlanıyor ve bundan türeyecek sınıflarda bu öğelerin kullanılmasına imkan veriliyor.Arabirim ile soyut sınıf arasındaki en önemli fark, arabirim, öğelerin sadece tanımlamalarını içerirken soyut sınıf, öğelerin hem tanımlamalarını hem de içeriklerini içerir.abstract sözcüğüyle tanımlanan soyut sınıflar doğrudan kullanılamazlar. Bir sınıfın kendilerinden türetilmelerini beklerler.
Örnekte görüldüğü gibi Arac sınıfı FreneBas() yordamını kendisi gerçekleştirmiş, Ancak Genislik özelliğini kendisini kullanacak sınıf tarafından gerçekleştirmesiniistemiştir. Eğer araba sınıfında Genislik özelliğini düzenlemezsek derleyici hataverir.

Oop’nin temel ilkeleri

  • 1.
  • 2.
  • 3.
  • 4.
    Miras Alma/Kalıtım(Inheritance)1. BölümSOYUTLAMABir nesnenin belirli alanlarını dış dünyadan ayrı tutma işlemidir.OOP’nin bu kıstası, programcıyı, nesne ile ilgili anlaşılması güç işlevlerden soyutlamayı amaçlamaktadır.Kaç kişi araba kullanırken, motorun içerisinde olup bitenle ilgilenir.
  • 5.
    2. Bölüm SARMALAMABirnesnenin içerisindeki bazı özel üyeleri kullanıcılardan gizleyebilme özelliğidir.Programcıyı ilgilendirmeyen veya belirli arabirimler üzerinden erişilmesi istenen alanları saklamaktır.Verilere dışarıdan gelebilecek bozulmalara, yanlış kullanımlara karşı korumaktır.Nesne içerisindeki yerel alanları, özelliklerle veya erişim belirleyicilerle sarmalarız.
  • 6.
    2.1 Erişim Belirleyicilerpublic(Tüm erişimlere açık)private (Sadece üyesi olduğu sınıftan erişilebilir)protected (üyesi olduğu sınıftan ve bu sınıftan türetilmiş sınıflardan ulaşılır)internal (aynı program (assembly) içerisindeki sınıflardan erişilebilir)
  • 7.
    privateYerel üyeDışarıdan hattabu sınıftan türetilmiş sınıflardan bile erişilemeyeceği anlamına gelir.
  • 8.
    publicBu üyeye heryerden erişilebilir.
  • 9.
    Örnekte GetOrderDetail() fonksiyonuve StoreId değişkeni publictir, CalTotal() yordamı ve Total değişkeni privatedir.Ana fonksiyonda IslemobjIslem=newIslem(); objIslem. dediğimizde public üyeler görünür, private üyeler görünmez.
  • 10.
    protectedKendi sınıfının diğerüyeleri tarafından erişilebildiği gibi sınıfından türetilmiş sınıflardan da erişilebilir.Kendi sınıfında private, türetildiği sürece publictir.
  • 11.
    internalSadece aynı uygulamaiçerisinde olan sınıflar tarafından erişilmeyi sağlar.Sözkonusu üye, kendisiyle birlikte derlenmiş kodlar tarafından erişilir.
  • 13.
    protectedinternalBu ifade hemaynı projedeki sınıflar hem de aynı projede olmayan, fakat üyenin ait olduğu sınıftan türetilmiş sınıflar tarafından kllanılabilir.Önüne erişim belirleyici konulmayan sınıf üyesi default olarak private muamelesi görür.class ve struct gibi yapılar internal ve public olabilir. Bunlar varsayılan olarak internal özelliğine sahiptir.İç içe sınıflarda(nestedclass) sınıf protected, protectedinternal ve private olabilir. İç icestructprotected veya protectedinternal olamaz.Arabirimler sınıflar gibi public veya internal olabilir. Arabirim üyeleri her zaman publictir.
  • 15.
    3. Bölüm ÇOK-ŞEKİLLİLİKAynıisimdeki yordamların duruma göre farklı işlemler yapmasıdır.Bu biçim değişikliği bazen nesnelere göre bazen yordamlara gönderilen parametreler göre gerçekleştirilir.Bu işlemi iki şekilde sağlayabilir. Arabirim ve kalıtım yoluyla. Bu bölümde arabirime değineceğiz. Kalıtım yoluyla olanı sonraki konuda işlenecek.
  • 16.
    3.1 Yeniden yükleme(overloading) Aynı sınıf içerisinde parametre sayısı ve türü farklı olmak koşuluyla aynı isimde birden çok yordam tanımlanabilir.Derleyici hangi yordamı çalıştıracağını signature işlemiyle anlar.Bir yordamın signature bilgisi yordamın adı, parametre türü, parametre sırası ve paremetre erişim niceleyicisidir.Parametre ismi veya yordamın geri dönüş türü signature bilgisini etkilemez.
  • 19.
    Yapıcı yordamlar dayeniden yüklenebilir. İlgili sınıftan bir nesne oluşturulmaya çalışılırken, yapıcı yordama ne sayıda veya ne türde parametre gönderildiği önem kazanır.
  • 23.
    Son örnekte; overloadedilmiş yordamların parametreleri, birbirine dönüştürülebilir ise CLR otomatik olarak en üst tipi seçer.Byte türü integer’e, float türü double türüne dönüştürülmesi gibi.
  • 24.
    3.2 ArabirimlerSınıf vestruct gibi türler için oluşturulmuş modele arabirim denir.Arabirimler bir sınıfın temelde hangi üyelerden oluşacağını belirleyen şablonlardır. Bu şablonlar oluşturulacakları sınıflara öncülük eder. İçermeleri gereken üyelerin tanımlamaları için yol gösterir..NET Framework, çoklu kalıtımı sınıflarla değil arabirimlerle destekler.Bir sınıf birden fazla arabirimden farklı ögeler alarak yetenekli hale gelebilir.
  • 25.
    Amacı hem sınıflartanımlanırken daha önce tanımlanmış üyelerin o sınıf için oluşturulmasını garanti etmek hem de farklı sınıflar için aynı şablonları kullanmaktır.Arabirimler üyelerin içeriklerini, yani gerçekleştireceklerini içermeyip sadece tanımlamalarını boş hallerini içerir.Arabirimler interface sözcüğüyle tanımlanır.
  • 28.
    Alanların kodları vene yapacakları sınıf içerisinde belirtilmiştir.Yapıcı yordam, yıkıcı yordam ve alanlar arabirimler içerisinde tanımlanamazlar.Arabirimlerin üyeleri private olarak tanımlanamaz, public olarak tanımlandı kabul edilir.Arabirimi uygulayan sınıf, arabirimin tüm üyelerini kullanmak zorundadır. Bununla birlikte sınıf kendine ait üyelere de sahip olabilir.Bir arabirim yapı veya sınıftan türetilemez; ama başka bir arabirimden türetilebilir.
  • 30.
    Burada karşımıza şöylebir sorun çıkabilir. Gerçekten Uye sınıfı Icanlı ve Iboyut arabirimlerine dönüştürülebilecek yeteneğe sahip mi? DurumuBuna izin veriyor mu? Bunu is operatörüyle kontrol edebiliriz
  • 33.
    3.3 Soyut SınıfSınıflarınörnek alacağı ana sınıf şablonunu temsil eder.Soyut sınıfta, sınıflarda olması gereken öğeler tanımlanıyor ve bundan türeyecek sınıflarda bu öğelerin kullanılmasına imkan veriliyor.Arabirim ile soyut sınıf arasındaki en önemli fark, arabirim, öğelerin sadece tanımlamalarını içerirken soyut sınıf, öğelerin hem tanımlamalarını hem de içeriklerini içerir.abstract sözcüğüyle tanımlanan soyut sınıflar doğrudan kullanılamazlar. Bir sınıfın kendilerinden türetilmelerini beklerler.
  • 35.
    Örnekte görüldüğü gibiArac sınıfı FreneBas() yordamını kendisi gerçekleştirmiş, Ancak Genislik özelliğini kendisini kullanacak sınıf tarafından gerçekleştirmesiniistemiştir. Eğer araba sınıfında Genislik özelliğini düzenlemezsek derleyici hataverir.