Nesne Yönelimli Programlama (OOP) Temel Kavramlar Detaylı Anlatım Bölümü

Hiç yorum yok
Merhaba Arkadaşlar ,

Sınavlrın bitmesiyle birlikte yeniden blog üzerinde makale ,video ,proje ,uygulama vs. işlemlerini zaman bulabildikçe anlatmaya devam ediyor olacağım.Daha fazla lafı uzatmadan OOP hakkında daha önceden yapmış olduğumuz uygulamada eksik kalan bölümler ,kavramlar ve bunların bir uygulamaya dökülmesi noktasında bu makale üzerinden devam ediyor olacağım.

Nesne yönelimli programlamada (OOP) içersinde temel kavramlar ,temel kurallar olarak devam edelim.Ve sırası geldikçe bu kavramları ve kuralları ele alıp açıklamaya çalışalım.İlk aşamada bu işlemleri gerçekleştirirken makalenin sonunda ise paylaşılan örnek uygulamayı incelemenizi tavsiye ederim.OOP'u anlatırken basit manada belirli temel kavramları anlamtmak amacıyla başlamış olduğum bu makalede yeni başlayanlar için birçok özellik ve bir çok kural varmış gibi gözüksede kavramların matığını anlayarak ilerlemek ve yapmış olduğum yada internet ortamından  yapılan detaylı örneklerle OOP'u anlamak ilerde yapılacak detaylı projelerde yada kendi projelerinizde hayat kurtarabilir.

 OOP'u Anlamak

OOP için 5 Temel Öğe
        
         1)Class:Sınıf soyut bir veri tipidir.Nesne ise onun somutlaşan bir cismidir.Ram'in heap bölünde tututlur.Referans tiplidir (reference types ).Sınıf kavramı detaylı bir bölüm olduğu için örnek uygulamamızdan anlatmaya devam ediyor olacağım.Son olarak   class içinde tanımlanabilecek temel anlamda kullanılan öğeler
         1)fields(değişkenler)
         2)Methodlar(constructor gibi yada Kullanıcı tanımlı methodlar)
         3)Eventler
          ===Abstract Class==   
         1-a)Abstract Class Nedir?Ve özelliklerine nelerdir.
         * Absctract classlar kendinden türeyen classlara base class olmak amacıyla yazılır
         * Abstract classlar Absctract methodlar içerebilirler
         * Abstract class içindeki abstract methodların gövdeleri yazılmaz.Abstract classdan türeyen sınıflar içinde implemente edilerek(zorunlu override işlemi) kullanılırlar.
         * Abstract methodlar default olarak public access modifersina sahiptirler
         * Abstract classlardan instance alınamaz
       
         ====Sealed Class======
         1)Sealed Class:Mühürlenmiş anlamına gelir ve classın son halidir.Bu classdan miras alınamaz. 
         2)Interface:davranışların sınırlanması için yazılır.Amacı Kullanılacak classa rehberlik etmektir.Son olarak bir class en fazla bir class dan türetilebilirken(base class ve drived class mantığı) birden fazla interface'den türetilebinilir

       ========Basit Anlamda İnterfaceözellikleri=======  
    
         2-a) Interface ler yukarda bahsettiğim gibi Rehber görevi görürler. Yani içerisine herhangi bir kod parçası ekleyemeyiz. Sadece tnaımlama yaparız.
         2-b)Bir Interface in tüm üyeleri Public kabul edilir. Private, Protected, Static gibi tanımlanamazlar.
         2-c)Üyeleri public olarak ta tanımlayamayız, çünkü zaten hepsi public olarak tanımlanmış kabul edilir. Aksi halde hata alırız.
        
         2-d)Bir arayüzü, başka bir arayüzden türetebiliriz, fakat bir Class tan yada Struct dan türetemeyiz.
         2-e)Interface leri miras alan sınıflar, içerisinde tanımlanan tüm metodları Implemente etmek zorundadır.
         2-f)interface tanımlarken interface verilen allianz isme I eklenerek Tanimlanir Örneğin IDepo gibi;
         3)Struct:Aynı classlar gibi kullanılabilirler.Yani Sınıflardan farkı belleğin heap bölgesinde değil stack’te tutulmasıdır.bu yüzden classlara göre daha hızlıdırlar.İçlerinde Constructor,properties,field tanımlanabilinir.Kalıtım alamazlar.16byte yer kaplar
        
         4)Enum:Sabit tanımlamalar için kullanılırlar.Ram'in stack bölgesinde bulunur.yani deger tiplidir.Default olarak int tipindedir.4 byte yer kaplar
        
         5)Delegate:Delegate en basit anlamıyla metod referansıdır. Yani delegate metod referansını tutar.Örneğin mouse move,mouse up vs gibi Delegate tanımlanırken metodun geri dönüş değeri ve parametreleri belirlenir. Geri dönüş değerini void ve parametresiz tanımlamak da mümkündür. Kullanılacak metod, tanımlanmış olan delegate geri dönüş ve parametrelerine uygun olmalıdır.

 OOP Kurallari
         Encapsulation:Basit manada Class içindeki fieldsların dışardan erişimini engellemek için acces modifersleri private olarak işaretlerinip aynı fieldslar için oluşturulan propertieslere public access modifersleri verilerek kullanılır(Blog içersinde detaylı olarak video anlatım bulunmaktadır)
        
         Inheritance:Kalıtım bir sınıfın tüm özellikleri ve methodlarının miras olarak alınmasıdır. (paylaşılan proje içindeki örneği inceleyiniz).
       
         Polymorphizm:Biribirinden türeyen classların içindeki methodların isimleri aynı olması durumunda base classdaki method'un virtual anahtar kelimesi ile imzalanıp base classlardan türeyen drived classlarda basedeki methodun farklı davranması sağlanır.Bu işleme  Polymorphizm(Çok Biçimlilik) denir
          Constructor: C#'te herşey bir nesnedir. Nesne kavramını duyduğumuzda aklımıza gelen ilk şey Constructor(yapıcı) metottur. Çünkü bir nesnenin örneklenip Ram'e çıkabilmesi için constructor metot çağrısı yapılması gerekir.Constructor kullanım amacımız nesneye ilk değerini atayabilmek,Nesne kullanıcısını belirli bir değer vermeye zorlamak (method overload ile),Nesne oluşturulurken yapılacak işlemleri gerçekleştirebilmek
         ===============Constructor Özellikleri================
       1-Geriye değer döndürmez.

       2-İsmi,tiple aynı olmak zorundadır.

       3-istenildiği bir anda çağrısı yapılamaz. Özel bir çağrılma biçimi vardır.

       4-Nesne üretmek için çağırılan metottur. Constructor metot çağırılmadan heap'te nesne üretilemez.
        
        AccessModifers

        private :Sadece sınıf içinde kullanılabilinir.Amaç sınıfın içindeki fieldslara dışardan erişimi engellemektir
        public:Proje içinde genel anlamda heryerden erişebilecek nesneler için Kullanılır
        protected:Miras alınan sınıflarda kullanılabilinir.Amac basede ki classın özelliklerini sağlamak ve korumalı bir biçimde bu işlemi gerçekleştirmektir.
        internal:Projedki nesnelerin kullanılabileceği ve  başka projelerin kullanılmasına izin vermez.Örnek olarak namespace uzağı dır diyebiliriz
        protected internal:Hem Proje içinde heryerde hemde miras alan heryerde kullanılabilinir

============Static Kavramı=====
   Static :Yazmış olduğumuz projelerde tanımlanacak değişkenlere bazen projenin heryerinden erişmek isteyebiliriz.Bunu OOP'da static olarak tanımlanacak değişkenler ile yapabileceğimiz gibi farklı yöntemlerlede bu işlem gerçekleştirilebilinir.Fakat ele aldığımız bölüm static(durağan) olma kavramı olduğu için örneklendirerek devam edelim.Proje içinde classlardan birinde static olarak işaretlenen  değişken o classdan instance almadan direk değer atama yöntemi ile gerçekleşebilinir.Paylaşılan projede detaylı inceleme yapabilirsiniz.

Method Overload :Method overload'ı açıklarken en güzel örnek class içindeki constructor'dır.Örneğin bir class oluşturduğunuzda default olarak varsayılan constructor boş olarak atanır. Ve Method Overload (Aşırı Yükleme) class içinde constructor method overload yapılacaksa (default) boş constructor tanımlanmalı ve classdan instance alınırken bu sefer new lediğinizde iki farklı kullanım gerçekleşicektir.tek şartı methodun imzasının değişmesidir(imza değişmeden kasıt alınan parametredir)
 
public class Urun
    {
              public Urun()
        {

        }

        public Urun(string adi,decimal fiyat)
        {

        }
}

C# Garbage Collector :Aslında başlı başına bir makale konusu olan garbage collector yapısına çok kısa manada değinmek için paylaşıyorum.Bir proje üzerinde alınan instancelerin işleri bittiğinde ramin heap bölümünden silinmesi amaçıyla kullanılırlar.Basit manada bellek yönetimi içindir.  IDisposable  arayüzünü kullanan yıkıcı bir methoda sahip olan nesneden faydalanılır.Daha Detaylı bilgi için tıklayınız. Garbage Collector 

 Aşağıdaki  linkten oop'a yönelik anlatımı gerçekleştirdiğim uygulamaya erişebilirsiniz.İçindeki yorum satırları umarım açıklayıcı olmuştur.yukarda bahsi geçen tüm kavramların nasıl kullanıldığına yönelik hatta farklı kullanımlarıda aynı anda görebilmeniz için yorum satırları ekledim.Umarım faydalı olur .İndirmek için Tıklayınız
 

Hiç yorum yok :

Yorum Gönder

Soru Görüş önerileriniz için gmail plus üzerinden + layın müsait olduğumda mutlaka yanıt dönüyor olacağım.