36
OOP’nin Temel İlkeleri Soyutlama(Abstraction) Sarmalama(Encapsulation) Çok-Şekillilik(Polymorphism) Miras Alma/Kalıtım(Inheritance)

Oop’nin temel ilkeleri

Embed Size (px)

Citation preview

Page 1: Oop’nin temel ilkeleri

OOP’nin Temel İlkeleri

•Soyutlama(Abstraction)•Sarmalama(Encapsulation)•Çok-Şekillilik(Polymorphism)•Miras Alma/Kalıtım(Inheritance)

Page 2: Oop’nin temel ilkeleri

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.

Page 3: Oop’nin temel ilkeleri

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.

Page 4: Oop’nin temel ilkeleri

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)

Page 5: Oop’nin temel ilkeleri

privateYerel üyeDışarıdan hatta bu sınıftan

türetilmiş sınıflardan bile erişilemeyeceği anlamına gelir.

Page 6: Oop’nin temel ilkeleri

publicBu üyeye her yerden erişilebilir.

public class Islem{ public string StoreID; private double Total;

public Array GetOrderDetail() { //kod bloğu }

private void CalTotal() { //kod bloğu }}

Page 7: Oop’nin temel ilkeleri

Örnekte GetOrderDetail() fonksiyonu ve StoreId değişkeni publictir, CalTotal() yordamı ve Total değişkeni privatedir.

Ana fonksiyonda Islem objIslem=new Islem(); objIslem.

dediğimizde public üyeler görünür, private üyeler görünmez.

Page 8: Oop’nin temel ilkeleri

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.

Page 9: Oop’nin temel ilkeleri

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.

Page 10: Oop’nin temel ilkeleri

Assembly1.dllpublic class Islem(){ internal string StoreId; //kod blogu}public class Islem2(){ public void SaveOrder() { Islem1 objIslem1=new Islem1(); obIslem1.StoreId=“AF01”; //erişilebilir }}Assembly2.dllpublic class Islem(){ public void SaveOrder() { Islem1 objIslem1=new Islem1(); obIslem1.StoreId=“AG07”; //erişilemez }}

Page 11: Oop’nin temel ilkeleri

protected internal• Bu 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.

Page 12: Oop’nin temel ilkeleri

Ö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(nested class) sınıf protected, protected internal ve private olabilir. İç ice struct protected veya protected internal olamaz.

Arabirimler sınıflar gibi public veya internal olabilir. Arabirim üyeleri her zaman publictir.

Page 13: Oop’nin temel ilkeleri

Blok adı Varsayılan erişilebilirlik

İzin verilen erişilebilirlik

Üyelerin erişilebilirliği

Enum Public public None

Class İnternal İnternalPublicPrivate(nested class)Protected(nested class)

PublicProtectedİnternalPrivateProtected internal

Struct İnternal İnternalPublicPrivate(nested class)

PublicİnternalPrivate

Interface public Public internal None

Page 14: Oop’nin temel ilkeleri

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.

Page 15: Oop’nin temel ilkeleri

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.

Page 16: Oop’nin temel ilkeleri

static void Main(string[] args) { Console.WriteLine("1. versiyon sonucu : {0}", Toplama("Ali")); Console.WriteLine("2. versiyon sonucu : {0}", Toplama(5,6)); Console.WriteLine("3. versiyon sonucu : {0}", Toplama(7,8,4)); Console.ReadLine(); }

static string Toplama(string Deger) { return "Lütfen sayısal değer giriniz"; }

static int Toplama(int X, int Y) { return X + Y; }

static int Toplama(int X, int Y, int Z) { return X + Y + Z; }

Page 17: Oop’nin temel ilkeleri

1. versiyon sonucu : Lütfen sayısal değer giriniz2. versiyon sonucu : 113. versiyon sonucu : 19

Page 18: Oop’nin temel ilkeleri

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.

Page 19: Oop’nin temel ilkeleri

static void Main(string[] args) { //Islem objIslem = new Islem(); //hatalı olacaktır. Islem sınıfının parametre almayan yapılandırıcısı bulunmamaktadır. Islem objIslem1 = new Islem(2011); Islem objIslem2 = new Islem("www.halilsahin.com"); Console.ReadKey(); } public class Islem { public Islem(int Deger) { Console.WriteLine("Nümerik değer gönderildi." + Deger); } public Islem(string Deger) { Console.WriteLine("String değer gönderildi. " + Deger); } }Nümerik değer gönderildi. 2011String değer gönderildi. www.halilsahin.com

Page 20: Oop’nin temel ilkeleri

public int DataAl(byte Id) { return null; } public string DataAl(byte Id) { return null; } //hata verecektir. CLR overload işlemini çözmek için //sadece yordam ismi ve parametre listesini değerlendirmeye //alır

Page 21: Oop’nin temel ilkeleri

static void Main(string[] args) { SqlCommand obj = new SqlCommand(); Islem(obj); byte x = 96; Islem(x); Islem(256); Islem(3.14); Console.ReadKey(); } static void Islem(object Deger) { Console.WriteLine("Nesne gönderildi"); } static void Islem(byte Deger) { Console.WriteLine("Byte gönderildi."); } static void Islem(int Deger) { Console.WriteLine("Integer gönderildi."); } static void Islem(double Deger) { Console.WriteLine("Double gönderildi"); }

Page 22: Oop’nin temel ilkeleri

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.

Page 23: Oop’nin temel ilkeleri

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.

Page 24: Oop’nin temel ilkeleri

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.

Page 25: Oop’nin temel ilkeleri

public interface IArac { string Tekerlek { get; set; } string VitesDegistir(byte X); void Hızlan(); void Yavasla(); } public interface IBoyut { string Genislik { get; set; } string Yukseklik { get; set; } }

Page 26: Oop’nin temel ilkeleri

class Otomobil : IArac, Iboyut { public string Tekerlek { get { return null; } set { /*gerçekleşecek kodlar*/ } } public string VitesDegistir(byte X) { return null; } public void Hızlan() { //gerçekleşecek kodlar } public void Yavasla() { //gerçekleşecek kodlar } public string Genislik { get { return null; } set { /*gerçekleşecek kodlar*/ } } public string Yukseklik { get { return null; } set { /*gerçekleşecek kodlar*/ } } }

Page 27: Oop’nin temel ilkeleri

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.

Page 28: Oop’nin temel ilkeleri

public interface ICanli { void NefesAl(); } public interface IInsan { void NefesAl(); } public class Uye : ICanli, IInsan { void ICanli.NefesAl() { Console.WriteLine("Canli NefesAl"); } void IInsan.NefesAl() { Console.WriteLine("Insan NefesAl"); } }

Page 29: Oop’nin temel ilkeleri

static void Main(string[] args) { Uye objUye = new Uye(); ICanli obj1 = (ICanli)objUye; IInsan obj2 = (IInsan)objUye; obj1.NefesAl(); obj2.NefesAl(); Console.ReadLine(); }

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

Page 30: Oop’nin temel ilkeleri

public interface IArac1 { string Tekerlek { set; } void Hızlan(); }

public interface IArac2 { string VitesDegistir(byte X); void Yavasla(); }

class Otomobil : IArac1 { public string Tekerlek { set { /*işlemler*/ } } public void Hızlan() { } }

Page 31: Oop’nin temel ilkeleri

static void Main(string[] args) { Otomobil objOtomobil = new Otomobil(); IArac1 Tasit1 = (IArac1)objOtomobil; IArac2 Tasit2 = (IArac2)objOtomobil; // bu satır hata verir. Çünkü //otomobil sınıfı IArac2 üzerinde uygulanamaz. if (objOtomobil is IArac2) Console.WriteLine("Otomobil sınıfı IArac2 arayüzünü uygulayabilir."); else Console.WriteLine("Otomobil sınıfı IArac2 arayüzünü uygulayamaz."); Console.ReadKey(); }

Page 32: Oop’nin temel ilkeleri

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.

Page 33: Oop’nin temel ilkeleri

public abstract class Arac { public void FreneBas() { Console.WriteLine("Arac durdu."); } public abstract Decimal Genislik { get; } } public class Araba : Arac { public override decimal Genislik { get { return 2.8M; } } }

Page 34: Oop’nin temel ilkeleri

static void Main(string[] args) { Araba objAraba = new Araba(); objAraba.FreneBas(); Console.WriteLine(objAraba.Genislik.ToString()); Console.ReadKey(); }

Ö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.

Page 35: Oop’nin temel ilkeleri

özellik arabirim Soyut sınıf

Çoklu kalıtım Bir sınıf birden fazla arabirimden miras alabilir. Struct da miras alabilir.

Bir sınıf sadece bir soyut sınıf tarafından miras alınabilir.

İşlem gerçekleştirme İşlem kodu içermez. Sadece tanımlamaları içerir.

İşlem yapacak yordamları ve içeriklerini içerebilir.

Yeni özellik ekleme Yeni bir öğe eklendiğinde arabirimi uygulayan sınıflarda arabirim öğelerini revize edilmek gerekir.

Öğe eklendiğinde diğer kodlarım doğru çalışmaya devam eder.

Soyut üyeler Üyeler soyut üyelerdir. Soyut veya soyut olmayan üye içerebilir.

Erişim niteleyici Öğeler public kabul edilir. E.N kullanılamaz.

Erişim niceleyicilerine sahiptirler.

Statik üye Arayüzlerde üyeler statik olarak tanımlamaz.

Üyeler stataik tanımlanabilir.

Üyeler Üyeler sadece yordam, olay, özellik veya indeksleyici olabilir. Constructer veya decons olamaz.

Tipik bir sınıfın tüm üyeleri olabilir.

Page 36: Oop’nin temel ilkeleri

4. Bölüm KALITIM