Kendime not : OOP Kavramları (Özet Bilgi) - 1.Kısım

Object Orriented Programming temelde iyi bildiğimi düşündüğüm fakat yeni yeni aslında hiç birşey bilmediğimi fark ettiğim bir kavram diyebiliriz.Teoride herşey oldukça basit gözükürken pratikte tüm kavramları ile hayat felsefesi haline getirilmesi gereken bu önemli konu benim için her zaman aklıma oturmamış ve havada kalmış hissettiriyordu.Staj serüvenim sayesinde bildiğimin aslında hiç birşey bilmediğim olduğunu fark ederek bu konuda bir yazı yazma kararı aldım diyebiliriz.Bu yazının esas amacı kesinlikle birilerine bir şeyler öğretmek değildir.Sadece kendi anlayacağım dilden kendime olayı özetlemek gayesiyle bu satırları daktilo ettiğimi belirtmek isterim.Ve tabii ki benim gibi bu konularda kendini eksik hisseden genç neferler adına da faydalı bir kaynak olacaktır diye tahmin ediyorum.

Önce şunu kendime sorarak başlayacağım.”Obje” nedir?Nesneye dayalı dillerin baş aktör olan nesneyi (object) gerçek dünya metaforları ile izah edebiliriz. Bu gayet anlamlı olabilir. Fakat daha iyi kavramak, işin iç yüzünü, daha derinlerde çözümlemekle ancak mümkün olabilir. Derin sorumuz, “Bir program çalışma zamanında (runtime) bellek yönetimini (memory management) nasıl gerçekleştirir.

Nesne yönelimli diller dendiğinde artık “new” anahtar kelimesini duymaya başlamışız demektir.Nerelerde ve Neden kulanıldığını anlamak oldukça uzun zaman alabilecek bir durum diyebiliriz.Neden new anahtar kelimesi kullanıyoruz?Yapıcı metodların (Constructor) geri dönüş tipi neden bulunmaz? İşte bütün bu soruların cevaplarını yazdığımız kodlarda, verilerin saklandığı yer olan RAM’de aramamız gerekir.Programlama dilleri uygulama yürütme süreci esnasında verilerin adresleneceği RAM bellek bölgesini birkaç farklı bölgeye ayırarak kullanırlar. Uygulama çalışma zamanında (runtime) açılacak olan değişken ve nesneleri bu bölgelerde oluşturarak, sahip oldukları verileri adreslerindeki yerlerine yerleştirirler.Peki bu RAM Bellek bölgeleri nelerdir ?

1.Stack Bölgesi
2.Heap Bölgesi
3.Register Bölgesi
4.Static Bölge
5.Sabit Bölge
6.RAM Olmayan Bölge

1.STACK BÖLGESİ

Genel anlamda kullanılan dahili RAM ifadesidir. Stack bögelerine mikroişlemcide(CPU)’de bulunan “Stack Pointer (SP)” vasıtası ile ile doğrudan erişilebilir. SP o anda çalışılan bellek bölgesinin adresini tutar. Tahsis işlemi için önceden ayrılacak bölgenin büyüklüğünü bilmesi gerekir. Buna göre arttırım veya azaltım yaparak veriyi uygun adreste bulur. Bilmesi gereken bu büyüklükler, .NET platformunun altyapısını oluşturan JIT derleyiciler tarafından sabit değerler ile tayin edilir. Örneğin int tipi 32 bitlik olup 4 byte büyüklüğündedir. Bir diğer örnek long tipi 64 bit yani 8 byte, boolen tipi ise 1 bit için 1 byte yer tutar. Program yüklendiğinde okunulan değişken tanımına dair kodlarınızı bu sabit değerler eşliğinde hesaplayarak SP’nin pozisyonlarını doğru konumlandırması için bellek tahsisini yapar. Yapısal programlama dillerinde edinilen tecrübeler, verilerin hepsini stack bölgesinde tutmanın esnekliği azalttığını göstermiştir.

2.HEAP BÖLGESİ

Stack’de olduğu gibi Heap bölgesi RAM’de bulunan hafıza alanıdır. Bütün C# nesneleri Heap bölgesinde oluşurlar. Stack’den farkı heap bölgesinde tahsis edilecek yapılacak nesnenin derleyici tarafından bilinmesine gerek duymaz. Heap bölgesinin kullanılması büyük esneklik kazandırır. Heap bölgesinden yer tahsisatı için “new” anahtarı kullanılır. Çalışma zamanında dinamik
olarak yaratılır. Derleme zamanında yapılmazlar.

Dezavantajı Stack bölgesine göre daha fazla işlem ayağı oluşması neticesi performans düşüklüğüdür. Ancak Nesne Yönelimli Programlama’nın temel ayağıdır.

3.REGISTER BOLGESİ

Stack ve Heap bellek tahsis mekanizmalarına göre çok hızlıdır. Sebebi mikroişlemcinin ikincil bellek bölgesinde bulunmasıdır. Mikroişlemcinin kaydedici (register) adını verdiğimiz bu bellek bölgelesine doğrudan erişim hakkımız yoktur. Tamamen altyapıda çalışan JIT (Just in Time) derleyicilerinin kontrolündedir.

4.STATIC BÖLGE

Bellekteki herhangi bir bölgeyi temsil eder. Static alanlarda saklanan veriler programın bütün çalışma sürecinde ayakta kalırlar. Anahtar “static sözcüğüdür.

5.SABIT BÖLGE

Sabit(constant) değerler genellikle program kodlarının içine gömülü şekildedir. Değerleri asla değişmezler. Sadece okuma amaçlıdır.

6.RAM OLMAYAN BÖLGE

Bellek bölgesini temsil etmeyen disk alanlarıdır. Kalıcı olması istenen verilerin saklandığı bölgedir.

Özellikle Stack ve Heap mantıksal alanları dahili RAM hafızada değişken (variable) ve nesnelerimiz için çok daha önemli konumlardadır.Bu iki farklı mantıksal alanın birbirlerinden ayrılma nedeni ise değer tipi değişkenlerin ve referans tipi nesnelerin bu bellek bölgelerini farklı şekilde kullanmalarıdır. Farklılıklarını anlamak için Değer Tipi (Value Type) ve Referans Tipi (Reference Type) kavramlarını incelemek gerekir.

Değişkenlerin değer tipi olarak nitelendirilmesinin nedeni tüm işlemlerin adreslenen RAM hücresine doğrudan erişim yapılması ve sahip oldukları değerlere direkt uygulanmasından kaynaklanmaktadır.

Aşağıda saydıklarım değer tipi davranışında bulunan türlerdir ;

Değişken türleri: “int”, “long”, “float”, “double”, “decimal”, “char”, “bool”, “byte”, “short”

Yapılar : “struct”

Sayılabilir Tipler : “enum”

Referans Tipleri Stack ve Heap bellek alanlarını birlikte kullanılır. Söz konusu nesnenin sahip olduğu değerler Heap bellek alanında korunur. Bu ayrılmış bellek alanının başlangıç adres bilgisini (işaretçisi) ise Stack bellek alanında tutar. Nesneneye dair her türlü erişim işte bu işaretçi(pointer) üzerinden yapılır.

“string”, “object”, “class”, “interface”, “array”, “delegate”, “pointer” referans tipi davranışında bulunan türlerdir.

Peki objeyi ve arka plandaki mantığı anladığımıza göre OOP nedir ? Nesne tabanlı programlama (OOP); yazılım tasarımını işlevler ve mantık yerine, veri veya nesneler etrafında düzenleyen bir programlama dili modelidir.Her işlevin nesnel olarak soyutlandığı bir programlama şeklidir.

Bu açıklamayı daha da örnekleyerek açıklarsak, gerçek hayatta gördüğümüz birçok nesnenin bilgisayar ortamına aktarılma şeklidir. Yani bir nesnenin rengi, durumu, ismi, üretim yılı gibi birçok özelliklerin bilgisayar ortamında gösterilmesi buna örnek olarak verilebilir.

Tarih sevgimi bilirsiniz , 1960’lı yılların sonuna doğru ortaya çıkan bu programlama şekli, o dönemlerde yazılım dünyasının yaşadığı sıkıntının sonucudur.

Yazılımların karışıklığı ve boyutlarının artması, belirli bir nitelik düzeyini korumak için gereken maliyeti, zamanı ve çabayı arttırıyordu. OOP bu soruna karşı çözüm olarak getiren özelliği yazılımdaki birimselliği yüksek oranda benimsemesidir.

Nesne kavramını kısaca tekrar özetleyecek olursak içinde veri saklayan ve bu veriler üzerinde işlem yapacak olan metodlar bulunduran bileşenlerdir. Nesneler her uygulamada tekrar kullanılabilir. Nesne oluşturduğumuzda hafızada yer kaplar.

Peki bir diğer önemli kavram olan Sınıf(Class) kavramı nedir?

Sınıf, nesne yönelimli programlama dillerinde nesnelerin özelliklerini, davranışlarını ve başlangıç durumlarını tanımlamak için kullanılan şablonlara verilen addır. Bir sınıftan türetilmiş bir nesne ise o sınıfın örneği olarak tanımlanır. Sınıflar genelde şahıs, yer ya da bir nesnenin ismini temsil ederler. Sınıflar metotları ile nesnelerin davranışlarını, değişkenleri ile ise nesnelerin durumlarını kapsül ederler. Sınıflar hem veri yapısına hem de bir ara yüze sahiptirler. Sınıflar ile nasıl etkileşime girileceği bu ara yüzler sayesinde sağlanır.

Gerçek dünyadaki nesnelerin özellikleri ve davranışları sınıflara aktarılır. Bu durumların sınıflara aktarılması metodlar yardımıyla olur. Sınıfta tanımlanan metot ve değişkenlere sınıfın üyeleri denir. Değişkenler isim, soyisim, yaş gibi kullanacağımız bilgileri saklamaktadır. Metotlar ise, kullanıcı kaydı, iki sayısının toplamı gibi bir görevi yerine getiren alt programlardır. Sınıf soyut bir kavramdır doğrudan kullanılamaz nesne oluşturup kullanabiliriz.

Sınıf Türleri

1.Abstract Classlar(Sanal Sınıf)

Abstract Class, ortak özellikli olan Class’lara base class olma rolünü üstlenir. Mesela bir class’ınız var ve bu class da pek çok ortak yön olarak özellikleriniz var. Aynı özellikleride içinde tutan başka bir classs’ınız daha var. Tekrardan aynı özellerini yazmak yerine base (yani abstract) class tanımlayıp buradan türetilmiş sınıflara kodumuzun daha efektif olmasını sağlıyoruz.

Aynı özellikleri başka sınıflara da base alarak oluşturmak istediğimiz için bu class’lara abstract class adını veriyoruz. Bu nedenle abstract class’dan nesne türetilmez. Abstract class’lar abstract anahtar kelimesini kullanılarak oluşturulur.

Abstract class’lar private, protected, private internal ile tanımlanamazlar. Abstract methodlar tanımlanabilir ama static methodlar tanımlanamazlar. Abstract class’lar tanımlanırken sealed anahtar sözcüğünü kullanamayız. Sealed abstract ile ters mantıktadır ve classların miras bırakmaması için kullanılır.
Abstract Class’larda kullanılan diğer önemli nokta ise Abstract Methodlardır. Bu methodlar sadece abstract class’lar içinde tanımlanır ve override edilmek zorundadır. Abstract methodlar private tanımlanamazlar.

Abstract aslında bir yandan da virtual demektir, virtualda override zorunluğu yok iken abstract için bu zorunluluk vardır, aralarındaki fark budur.

Son olarak Abstract Class’lar new anahtar kelimesini kullanamazlar. Bir sınıf sadece bir abstract class kullanabilir. Abstract sınıfta method ve değişkenler tanımlanabilir.

2.Sealed Classlar(Mühürlü Sınıf)

Nesneye dayalı programlama yaklaşımında kalıtım (inheritence) özelliği sayesinde bir sınıftan başka sınıflar türetilebilir ve bu sınıflara yeni özellikler eklenerek daha zengin ve kullanışlı sınıflar yaratılabilir. Ancak bazı durumlarda sınıflardan türetme yapılması istenmez. Bu durumda sınıf tanımlamasının başına mühürlü (sealed) kelimesi getirilir. Bu sayede sabit özellikler ve metotlara sahip bir sınıf elde edilir. Mühürlü sınıf (sealed class) hiçbir sınıfın kendisinden türetilemeyeceğini ifade eder.

Türeyen sınıfın anlamsız olmasının engellenmesi, bazı üyelerin güvenliğinin sağlanması ya da üyeleri statik olan sınıfların korunması amacıyla türetilme yapılmaması için sealed (mühürlü) anahtar kelimesi kullanılarak mühürlü sınıflar (sealed class) oluşturulur.

.Net içerisinde sealed (mühürlü) olarak tanımlanmış çok sayıda sınıf vardır. Bu sınıflara örnek olarak String ve Stringbuilder sınıfları gösterilebilir.

3.Static Classlar (Statik Sınıf)

İçinde buluduğu sınıftan nesne oluşturulmadan veya hiç bir nesneye referans olmadan kullanılabilen üyeler static olarak nitelendirilir. Metotlar ve alanlar static olarak tanımlanabilir.

Static olma durumunun en bilinen örneği Main() metodudur. Main(), herhangi bir nesne oluşturulmadan önce çağırılması gerektiği için static olarak tanımlanmıştır. Başka bir deyişle de bir nesne metodun üreteceği sonucu etkilemeyecek ise o metot static olarak tanımlanır. Static olarak tanımlanan bir metoda program çalıştığı sürece erişilir, böylece sadece bir metot ile birden çok nesne çağırılır.

Bir sınıf içerisinde bulunan alanlarda static olarak tanımlanabilir. Eğerstatic kavramı yok ise sınıftan nesne oluşturulması gerekir. Bir değişken static ise sınıfın tamamıyla ilgilidir ve buna “sınıf alanı” adı verilir; static değil ise bir nesneyle ilgilidir, buna da “nesne alanı” adı verilir. Sınıf alanları, nesneye değil sınıfa ait bilgiler içerir. Ayrıca, sınıf alanlarından oluşturulan her nesne için bellekte bir tane sınıf alanı vardır ve her şekilde ona erişilir.

4.Partial Classlar(Kısmi Sınıf)

Büyük projelerde oluşturduğumuz class’ lar zamanla okunması zor hale gelebilecek kod satırları ile dolabilmektedir. Partial class ise bir class’ ı birden fazla class olarak bölmemize olanak sağlar. Fiziksel olarak birden fazla parça ile oluşan partial class’ lar, Çalıştığı zaman tek bir class olarak görev yapar.
Partial class ile fiziksel olarak parça class’ların birleşmesi için class isimlerinin aynı olması gerekmektedir.Büyük bir projeyi C# da partial anahtar kelimesiyle parçalara bölebiliriz.

Sınıfların Temel Yapısı

Sınıflar ve yapılar, verilerini ve davranışlarını temsil eden üyelere sahiptir. Bir sınıfın üyeleri, sınıfta bildirilen tüm üyeleri ve miras hiyerarşisindeki tüm sınıflarda bildirilen tüm üyeleri (kurucular ve yıkıcılar hariç) içerir. Temel sınıflardaki özel üyeler miras alınır ancak türetilmiş sınıflardan erişilemez.

Bu üyeleri kısaca listelemek istersek;

1.Fields,

2.Constants,

3.Properties,

4.Methods,

5.Events,

6.Indexers,

7.Constructors,

8.Finalizers,

9.Nested Types

Kavramlara giriş yapmadan önce her biri için çok önemli olan erişim belirteçlerinden bahsetmek gerekir.

♦ Access Modifiers(Erişim Belirteçleri)

Sınıflar ve sınıf üyelerine erişim kısıtlanabilir yada belli düzeylerde erişime izin verilebilir.Üyelere erişimi kısıylatan yada yetki veren anahtar sözcüklere erişim belirteçleri denir.

Temel 4 erişim belirteci bulunmaktadır.Bir tanede birleşim belirteç bulunmaktadır.

Public : Erişim kısıtı yoktur ve her yerden erişilebilir.

Protected: Ait olduğu sınıftan ve o sınıftan miras alan sınıflardan erişilebilir.

Internal : Etkin projeye ait sınıflardan (yani aynı namespace altındaki sınıflardan)erişilebilir.Bunun dışından erişilemez.

Private: Yalnızca bulunduğu sınıf tarafından erişilebilir.Dışardan erişilemez.

  • * Protected Internal : Etkin projeye ait sınıflardan ve onlardan miras alarak türeyen sınıflardan erişilebilir.

Bazı kurallar ise şöyledir:

Bir öğe ,protected internal hariç , öteki erişim belirteçlerinden sadece birini alabilir.

Namespaceler erişim belirteci almaz.Daima publictir.

Sınıflar public yada internal olarak nitelendirilebilir.Protected veya private olamaz.

Enum erişim belirteci almaz.Daima publictir.

Interfaceler default olarak publictir.Erişim belirteci almaz.

  1. Fields(Alanlar)

C#’ta alanlar, bir sınıf ya da bir sınıf örneği ile ilişkilendirilmiş değişkenlerdir. Static değiştiricisi ile tanımlanmış alanlar static field olarak tanımlanır. Static field’lar, tam olarak bir bellek yeri tanımlarlar. Kaç tane sınıf örneği oluşturulursa oluşturulsun, static field’ın sadece bir tane kopyası vardır.

Daha anlaşılır hale getirelim : Bir class yada struct içinde tanımlanan her tipten değişkendir. Fieldlar onları içeren tiplerin üyeleridir. Fieldlar, birden fazla metodun erişim sağlaması gereken verileri saklarlar ve bu verinin saklanma zamanı herhangi bir metodun yaşam zamanından uzun olmalıdır.Fieldlar, önce erişim seviyesi sonra tipi ve daha sonra adı şeklinde class bloğunun içinde tanımlanırlar.

2.Constants(Sabitler)

Bir değişkenin değerinin program boyunca sabit olarak tutulması istendiğinde const (sabit) ifadesinden yararlanılır. Tanımlandığı satırda değeri atanmalıdır. Pi sayısı, ışık hızı gibi belirli değerlere sahip veriler kullanılarak bir program yazılacaksa, const yapısını kullanmak kolaylık sağlar.

const anahtar kelimesininin bazı özellikleri aşağıdaki gibidir:

const şeklinde tanımlanan veri tipleri sayesinde bellekte daha az alan kullanılmış olur.

Kodların okunmasını kolaylaştırır.

const ile belirlenmiş değerler, programın diğer aşamalarında doğrudan ya da dolaylı olarak (fonksiyonlar kullanılarak) değiştirilemez.

const veri tipinde kullanılacak olan değişkene değeri atanırken, bu değer daha önce belirlenmiş olsa da, const ile tanımlanmamışsa hata alınır.

const ile tanımlanacak olan bir değişkene değeri atanırken bir başka veriden yararlanmak istenilirse, yararlanılacak olan verinin de const ile tanımlanmış olması gerekir.

3.Properties(Özellikler)

C# da özellikleri, metotların ve sınıfların görünürlüklerini yönetmek için kullanırız. Kısaca örneklemek gerekirse bir sınıf içerisinden farklı bir sınıf içerisinde ki nesneye ulaşmak istiyorsak özellik metotlarını kullanmalıyız. Özellik metotları GET ve SET anahtar kelimesinden oluşan iki kod bloğundan oluşurlar. GET metodu veri okunduğu zaman, SET metodu ise veri yazıldığı zaman (yani değer ataması yapıldığı zaman) yürütülür. Özellik olarak bu iki anahtar kelimeyi aynı anda kullanabildiğimiz gibi, tek anahtar kelime ile de oluşturabiliriz. Örneğin sadece GET metodu ile oluşturduğumuz özellik sadece okunabilir, SET metodu ile oluşturduğumuz özellik ise sadece yazılabilir bir hal alır. Her iki anahtar kelimeyle oluşturduğumuz özellik ise hem okunabilir hem de yazılabilir özelliğe dönüşür.

Kısaca özetlemek gerekirse, Bir Class içerisinde bulunan bazı alanlara her zaman ulaşmak gerekmez. Çünkü bir nesneyi sürekli ulaşılabilir hale getirmek bilinçsiz kullanım, veri kaybı ve güvenliği gibi sorunları ortaya çıkartır. Zaten nesneleri tanımlarken varsayılan değer olarak “Private” erişim belirleyicisi olarak tanımlanması da bu tip gerekçelerden kaynaklanır. “Public” erişim belirleyicisi ise tamamen açık hale getirir. İşte tam bu noktada nesnelerimizin erişimini yönetmek için “Property” kavramı devreye girer. “Property” yani Özellik metotları nesnelerimiz üzerinde kontrollü kullanım sağlar.

4.Metotlar

Yazılım dillerinin en önemli bileşenlerinden biri olan metotlar, belirli bir amaca göre tasarlanmış kod bloklarından oluşmaktadır.

Metotlar belirli bir kural çerçevesinde tanımlanır var uygulama içinde çağrılar.

Metotlar mümkün olduğu kadar spesifik bir görevi yerine getirmek için tasarlanmalıdır böylelikle, kaynak kodun hem okunurluğu hem de metodun farklı yerlerde kullanımı açısından önemlidir.

Metotlar yerine getireceği işlev açısında, parametrik olabilirler. Parametrik fonksiyonlar ile genel amaca hizmet eden kod blokları geliştirmek mümkündür.

Metotlar tanımlanırken bir takım kurallar mevcuttur.

Metotların bir ismi vardır. Değişken tanımlarında olan kurallar geçerlidir.

Metotların bir erişim seviyesi vardır.

Metotları dönüş değeri olabilir, eğer bir dönüş değeri yoksa void anahtar kelimesi kullanılmalıdır.

Metotlar parametre alabilirler, eğer birden fazla parametre varsa virgül (,) ile parametreler ayrılır.

Metotlar yapılan işlemler sonucunda bir sonuç döndürebilir veya herhangi bir sonuç dönüşü yapmayan void türündeki fonksiyonlarda yazmak mümkündür.

C# programlama dilinde metotlar bir sınıf (class) veya yapı (struct) içerisinde yazılabilir, bunun dışındaki alanlarda metot yazmak mümkün değildir.

Her program bir başlangıç noktasına ihtiyaç duyar, C# programlarında başlangıç noktası Main fonksiyonudur.Eğer bir metotudu Main fonksiyonu içerisinde direk çağırmak istiyorsa, statik olan bir metottan başka bir metotu çağırmak için ilgili metotudun statik olması gerekiyor.

Metotlar herhangi bir parametre almadan ve dönüş türü almadanda tanımlanabilirler.

Metot tanımlarındaki parametreleri aksi belirtilmediği takdirde zorunludur. C# programlama dilinde opsiyonel parametrelerde tanımlamak mümkündür. Opsionyel parametrelerin varsayılan değerleri olmalıdır. Eğer bir metot tanımında hem opsiyonel hem de zorunlu parametreler içeriyorsa, zorunlu parametreler önce tanımlanmalı, opsionyel parametreler zorunlulardan sonra gelmelidir.

Metotları çağırırken dikkat edilmesi gereken bazı husular mevcuttur. Bunların başında metotlar imzalarına uygun bir şekilde çağrılmaktadır. Metot parametreleri çağrılmak istenen fonksiyonya gönderilirken, metot imzasındaki uygun değişken türleri ile gönderilmesi gerekmektedir aksi takdirde hataya sebep olacaktır.

C# dilinde referans türündeki değişkenler, metotlara parametre olarak geçerken ref anahtar kelimesine gerek kalmadan, referans türünde geçmektedir. String türü buna istisnai bir durumdur, referans türünde olmasına rağmen fonksiyonlara değer türünde atanmaktadır.

C# dili değer ve referans türünde değişkenler içermektedir, metotlara gönderilen değişken türüne göre farklı durumlar söz konusudur. Değer türünde gönderilen parametreler metotada bir kopyası gönderilir. Fakat, referans türündeki bir değişken metotada gönderilirken değişkenin referansı gönderildiği için, metot içerisindeki parametre olarak geçilen değişken üzerindeki değişiklikler orijinal değişkende gerçekleşmektedir.

Bir metot kendi içinde tekrar kendisini çağırıyorsa bu tür metotlara özyinelemeli (recursive) metotlar denilmektedir. Daha karmaşık durumları daha kısa kod parçaları yazarak gerçekleştirmek amacıyla yazılan fonksiyonlardır.

5.Events(Olaylar)

Temsilci (Delegate) Kavramı

C# dilinde temsilciler ileri seviye bir konudur. Ama her seviyeden program geliştiricisi kullanabilir. Programlar temsilciler olmadan da yazılabilir, fakat temsilcilerin işlevselliğinden ve sağladığı kolaylıklardan yararlanılamaz.

Temsilciler c# programlama dilinde bir ve ya birden çok metodu gösteren referans türünden nesnelerdir. Metodlarla aynı şekilde tanımlanırlar. Bir temsilci tanımlandıktan sonra bir veya birden çok metod temsilciye atanarak kullanılır. Temsilciler genelde çok sayıda metoda atanarak kullanılır ki, sağladığı avantajlar da burada ortaya çıkar.

Olay (Event) Kavramı

Olaylar, nesne yönelimli programlama ortamlarında devamlı olarak kullanılırlar. Burada en çok bilinen örnek, Button (düğme) sınıfına ait olan bir nesne için Click (tıklama) isimli eventdir. Click eventinde fareyle button nesnesinin üzerine tıklandığında ortama bir olay fırlatılır. Ayrıca, olaylar veritabanındakiTrigger(tetikleyici)‘lar gibi düşünülebilir. Olaylar program içinde gerekli şartlar sağlandığında kendiliğinden gerçekleşirler. Çağırılmalarına gerek yoktur. Metodlardan bu noktada farklıdırlar.

Olaylar kullanılacağı zaman bunu gerçekleştirmek için temsilcilere başvurulur. Olaylar temsilci türünden yaratılarak ortama fırlatılabilir

6.Indexers

Indexer özel tanımlı bir property’dir ve sadece class içerisinde tanımlanabilir. Tanımlandığı class’a indexlenebilir özelliği kazandırır. Array işlemlerinde kullandığımız [ ] operatörünü tanımlamış olduğumuz bir class’ı diziymiş gibi işlemler yapabilmek içinde kullanabiliriz.

7.Yapıcı(Constructor)

Bir sınıfa ait yeni bir nesne oluşturulmak istenildiğinde, ilgili sınıfın yapıcısı (constructor) çağrılır ve yeni nesne bu yapıcıya göre üretilir. Yapıcılar, nesne oluşturmak için tasarlanmış özel metotlardır diyebiliriz.

Yapıcılar parametre içerebildiği gibi, herhangi bir parametrede almayabilirler. Oluşturulacak olan nesnenin varsayılan değerlerinin atanmasına veya başka kontrollerin yapılması olanak sağlar.

Yapıcılar sınıf ile aynı isme sahiptir ve herhangi bir dönüş değeri içermezler.

8.Finalizers (Eski ismi ile Yıkıcılar(Destructor))

Nesneye Yönelik Programlamada yapıcıların yaptığı işlevin tersini icra etmek üzere yıkıcı (destructor) yapıları geliştirilmiştir. Oluşturduğumuz bir nesne yaşam döngüsünü tamamladığında ve aktif bir referansı kalmadığında Çöp Toplayıcı (GC) Sistem devreye girerek nesneyi temizler. Bu sayede gereksiz kaynak kullanımının önüne geçer. Bu temizle işleminde işlemi başlamadan önce gerekli sonlandırma işlemlerini yıkıcı metotlarında icra edilir.

Yıkıcılar tanımları bazı kurallar çerçevesinde gerçekleşir. Bu kurallar:

Yıkıcılar sadece sınıf (class) içerisinde tanımlanabilir. Yapılarda (struct) kullanılmazlar.

Bir sınıf sadece bir yıkıcıya sahip olabilir.

Yıkıcılar metot çağrılarında olduğu gibi icra edilmezler, otomatik olarak sistem tarafından çağrılırlar.

Yıkıcılar parametre almazlar ve herhangi bir bilgi döndürmezler.

Yıkıcılar tanımlanırken sınıf ismini alırlar ve isimlerinin başında ~ bulunur.

9.Nested Types

Bu kısaca iç içe tanımlamalar için kullanılan bir terimdir.

Object Orriented Programming in temel prensiplerine giriş yapmadan önce bilinmesi gereken temel bilgiler kısaca özetlemek gerekirse böyledir. Bir sonraki kısımda OOP nin temel prensipleri ve bunlara yardımcı kavramlar incelenecektir.(Ekranlarınızın başından ayrılmayınız, birazdan…) :) Bir sonraki yazıda buluşmak üzere hoşçakalın.

Şeniz fullmoonborn of the House Akbulut, first of her name.The Princess of Her Father, Diva Queen of her mother , breaker of hearth , mother of Fadıls.

Şeniz fullmoonborn of the House Akbulut, first of her name.The Princess of Her Father, Diva Queen of her mother , breaker of hearth , mother of Fadıls.