Kalıtım , Sınıf Asli Ergün
Nesneye Yönelik Programlama (NYP) ilgili terimler Bilgi gizleme (information hiding), Veri soyutlama (data abstraction), Çok şekillilik (polymorphism) Kalıtım-miras (inheritance)
Neden Nesneye Yönelik Programlama ? Gerçek hayat problemleri sınıf şablonları kullanılarak bilgisayar ortamına daha kolay ve anlaşılabilir bir biçimde aktarılabilir. Sınıflar ile kodlar düzenli bir biçimde saklanarak zaman kaybı yaşanmaz. Nesne yönelimli programlamada herhangi bir projede kullanılmak üzere yaratılan bir sınıf başka projelerde tekrar kullanılabilir.
Sınıf (Class) Nesnelerin özelliklerini, davranışlarını ve başlangıç durumlarını tanımlamak için kullanılan şablonlara sınıf denilir. Örneğin X marka Y model bir otomobil (nesne), her otomobilde olması gereken temel özelliklere (motor, tekerlek, direksiyon, vs.) sahiptir ve o otomobil için tasarlanmış olan bir prototipten (sınıf) yola çıkarak üretilmiştir.
Özellik (Property) ve Yöntem (Method) Nesnelerin özelliklerini saklamak için sınıf içinde tanımlanmış olan değişkenler özellik olarak isimlendirilir. Bir otomobil sınıfının içinde tanımlanan int maks_hız, string renk, gibi özellikler o sınıfa ait her nesnede var olacak, içerdikleri değerler farklı olabilecektir. Nesnelerin davranışlarını belirlemek için kullanılan sınıf içinde tanımlanmış olan fonksiyonlara yöntem adı verilir. Örneğin: gaz pedalına basma bir yöntem ise otomobilin hızlanması geri döndürdüğü değerdir. Yöntemlerin içinde tanımlanan lokal değişkenler özellik değildir.
Örnek: Dikdörtgen Sınıfı class Dikdortgen { public int boy, en; public int Cevre() { return boy*2+en*2; } public int Alan() { return boy*en; Özellikler Yöntemler Bir yöntem ya da özelliğe bulunduğu sınıfın dışından da erişilebilmesini istiyorsak public sözcüğü kullanılır
Sınıflar arası iletişim class Program { static void Main(string[] args) Dikdortgen D = new Dikdortgen(); Console.Write("Dikdörtgenin boyu : "); D.boy = Convert.ToInt32(Console.ReadLine()); Console.Write("Dikdörtgenin eni : "); D.en = Convert.ToInt32(Console.ReadLine()); Console.WriteLine("Çevresi = " + D.Cevre()); Console.WriteLine("Alanı = " + D.Alan()); } Dikdortgen sınıfından D adında bir nesne yaratıldı Dikdortgen sınıfının boy ve en özellikleri public olduğu için Program sınıfından bu özelliklere değer atayabiliyoruz. Benzer şekilde Cevre ve Alan fonksiyonları public olmasa idi buradan erişemezdik.
new Eğer bir nesne yaratıldığında aynı sınıftan başka bir nesneye eşitlenirse, iki nesne aslında aynı hafıza bölgesini kullanan eş nesneler olur: Dikdortgen D = new Dikdortgen(); Dikdortgen E = D; new komutu ile hafızadan (RAM) yeni bir yer tahsisi yapıldığını dizileri incelerken de görmüştük. Aslında tanımladığımız her dizi Array sınıfı türünden bir nesnedir. Örneğin Array sınıfına ait Length özelliği ile dizinin eleman sayısını elde edebiliriz. E.boy = D.boy & E.en = D.en
Ek Bilgi ! Bir sınıf tanımı içinde yer alan özelliklere ilk değer atamak mümkündür. Örneğimizdeki boy ve en özelliklerine tanımlandıkları anda değer atansaydı o sınıftan üretilen bir dikdörtgen ilk anda o değerlere sahip olurdu. public (genel) deyimi kullanılmadan tanımlanan yöntem ve özellikler private (özel) kabul edilir. Yani sadece o sınıf içinde kullanılabilir. static olarak belirlenen bir özellik o sınıftan üretilen tüm nesneler için aynıdır (aynı hafıza bölgesini kullanır).
Yapıcı ve Yıkıcı Yöntemler Bir sınıfın içinde sınıf ile aynı isimde bir yöntem yazılırsa o sınıftan bir nesne yaratıldığı anda o yöntem çağrılacaktır. Buna yapıcı yöntem denir. Farklı sayıda veya farklı veri türlerini parametre olarak alan çok sayıda yapıcı yöntem aynı sınıf içinde tanımlanabilir (o sınıfa ait bir nesne yaratılırken hangi parametreler kullanıldıysa, ilgili yapıcı yöntem çağrılacaktır). Sınıf ile aynı isimde olan ve parametre almayan yöntem isminin başında ~ işareti varsa nesne yok edilirken çağrılır. Bunlara da yıkıcı yöntem denir.
Yapıcı , Yıkıcı Metodlar Public int alan(int en, int boy) { İnt sonuc; sonuc = en * boy; return sonuc; } Public ~Dikdortgen() { Public class Dikdortgen { Public int en, boy; Public Dikdortgen() { } Public Dikdortgen(inten,int boy) en = 2 * en; boy = 2 * boy; Public int cevre (int en, int boy) {int sonuc; sonuc = 2*en+2*boy; returnsonuc;
Kalıtım Bir sınıfın yöntem ve özelliklerinin tümünü yada birkaçını başka bir sınıfa geçirmek için kalıtım mekanizmasını kullanabiliriz. Örneğin Kare adında bir sınıf oluştururken; class Kare : Dikdortgen şeklinde yazdığımızda, Kare sınıfı Dikdortgen sınıfındaki public veya protected olarak tanımlanmış olan özellik ve yöntemleri miras olarak alır.
class Dikdortgen { public int boy, en; public int Cevre() { return boy*2+en*2; } public int Alan() { return boy*en; class Kare : Dikdortgen { public int kenar; public void Kenar(){ en = kenar; boy = kenar; } class Program static void Main(string[] args) Kare A = new Kare(); A.kenar = 5; A.Kenar(); Console.WriteLine("Karenin Çevresi : " + A.Cevre()); Console.WriteLine("Karenin Alanı : " + A.Alan()); public yerine; protected yazılırsa Kare sınıfı bu değişkenleri kullanabilir ama Program sınıfı kullanamaz, private yazılırsa ikisi de kullanamaz. kenar değişkeninin değeri Kenar() fonksiyonu ile Dikdortgen’den miras alınan en ve boy değişkenlerine atanıyor Cevre ve Alan fonksiyonları Kare sınıfında tanımlı değil, Dikdortgen sınıfından miras alındı