logo
Welcome Guest! To enable all features please Giriş or Kayıt.

Bildirim

Icon
Error

Ayarlar
Son mesaja git Go to first unread
mehmetzekikir  
#1 Gönderildi : 21 Şubat 2015 Cumartesi 09:54:25(UTC)
mehmetzekikir

Sıralama: Administration

Gruplar: Administrators
Katılan: 6.05.2014(UTC)
Mesajlar: 670

19 Kere Teşekkür Etti.
152 Mesajına Toplam 253 Kere Teşekkür Edildi.
Bu makele için Bilgehan YILDIZ' a teşekkürler


1-)Erişim Seviyeleri:

Baktığın zaman genelde bir fonksiyon,bir değişken vs erişim düzeyini belirleyebilirsin

Dört işlem diye bir class oluşturalım ve aşağıdaki fonksiyonları içine tanımlayalım

Kod:

public  class DortIslem
    {

      public int IkiSayiTopla(int a, int b) 
      {

          return a + b;
      }

      private int UcSayiTopla(int a, int b, int c) 
      {

          return a + b+c;
      }

      protected int UcSayiCarp(int a, int b, int c)
      {

          return a * b * c;
      }

    }



Bu fonksiyonları bir formda çağırmak istediğim zaman sadece public olan IkiSayiTopla fonksiyonuna erişebildim.Diğer iki fonksiyonu formdan çağıramadım

UserPostedImage

Aşağıdaki resimde bu erişim belirteçlerinin tam tanımlarını bulabilirsin

Eğer bir şeye her yerden erişilecekse public

Sadece o sınıf veya formadan erişilicekse private kullanıyosun.En çok bu iki belirteç kullanılır

UserPostedImage

2-)Class

Field: Fieldler sınıf içerisinde veri barındıran alanlardır

Kod:

class Person
    {
  public int ID;
        public string Ad;
        public string Soyad;
        public int Yas;
    }



Metotlar: verileri kullanarak belirli işlemler yapan yapılardır

Properties:C# da fieldların encapsulation ile dışarıya açılmasıdır.Nesneye dayalı programlamaya göre fieldslar public olmamalıdır.Ancak propertyler yardımı ile dışarıdan erişilebilmelidir

Encapsulation

Bir nesnenin bazı özellik ve işlevlerini diğerlerinden saklanabilmesi, erişimin sınırlandırılabilmesidir. Yani private tanımladığımız field'ları kullanıcıdan saklamamız anlamına gelir ki zaten kullanıcının bunu kullanmasına gerek yoktur ve hatta kullanmaması gerekmektedir.Örnek olarak sen bilgisayarda sadece klavyenin tuşlarına basarken arkada daha pek çok parça sen dokunamadan çalışmaktadır.

Encapsulation iki önemli amacı vardır

1-)Arka plan kodlarını gizleme

2-)Fieldlara tam erişimi engelleme

Örnek olarak Person isimli sınıfımızı tekrar ele alalım ve yukarıdaki yazdıklarımıza göre tekrar revize edelim

Encapsulation yapılacak fieldları _FieldAdı şeklinde yazmak kullanılan bir notasyon biçimidir

private int _ID;
private string _Ad;
private string _Soyad;
private int _Yas;

Daha sonra aşağıdaki resimdeki gibi Fieldın üstüne gelerek Encapsule edebiliyoruz.


UserPostedImage

Yukarıdaki işlemi yaptıktan sonra propertimiz oluşur.Tabi istersen elle de yazabilirsin

Get ile propertyden değer okuma set ile bu değere yazma işlemi yapılır

Kod:

public int ID
        {
            get { return _ID; }
            set { _ID = value; }
        }



Birazdan işe nesneye dayalı programlamadan bakalım.Bizim person classımızın db de bir tablo karşılığı olsun ve burada ID otomatik artan bir sayı olsun.Bu durumda biz ID mizin sadece okunabilir olmasını istiyoruz,yazılabilir değil.Yapılacak tek şey propertyinin setini silmek olacaktır

Kod:

public int ID
        {
            get { return _ID; }
        }



Küçük bi detay: prop yazıp taba çift tıklayarak property template çıkartabiliyoruz.Benzer mantıktağı foreach falan yazıp taba basarakta kullanabilirsin

UserPostedImage

public static int MyProperty{get; set;}

3-)Static kavramı

Baktığın zaman Esasında hep sınıflardan yeni birer instance üreterek çalışıyoruz.Ancak bazı durumlarda bu tarz türetme istenmez

Yani sen Class1 a=new Class1()

Dediğinde artık Class1 den bir a örneği oluşturarak bunun üstünde çalışıyorsun.Madde birdeki dört işlem classına aşağıdaki gibi static bir fonksiyon ekleyelim

Kod:

    public static int  Bolme(int a,int b)
      
      {     
      return a/b;
      }



Dikkat etceğin gibi static kullanmadan oluşturduğum fonksiyonları new ile Classın instance üretek kullanırken,static olarak tanımladığın fonksiyonu Direkt Classtan sonra nokta diyip kullanıyorum


UserPostedImage

4-)Inheritance(Kalıtım):Kalıtım object oriented programın en önemli özelliklerinden biridir.Kalıtım ile nesneler birbirinden türetilir.Türetilen sınıf türediği sınıfın tüm özelliklerini alır.

2 örnekte bir person Classı yaratmıştık.Şimdi ben istiyorum ki bir öğrenci Classı olsun bunun içindede ÖğrenciNo,HangiOkuldanGeldiği gibi özellikler olsun.Kalıtım işlemi aşağıdaki gibi : kullanılarak yapılır

Kod:

class Ogrenci:Person

class Ogrenci:Person
    {

        private string _OgrenciNo;

        public string OgrenciNo
        {
            get { return _OgrenciNo; }
            set { _OgrenciNo = value; }
        }
        private string _HangiOkuldanGeldi;

        public string HangiOkuldanGeldi
        {
            get { return _HangiOkuldanGeldi; }
            set { _HangiOkuldanGeldi = value; }
        }
    }



Artık bir öğrenci nesnesi türettiğimde artık Person Classta olan özellikleride kendinde barındırıyor

UserPostedImage

Peki bunların hepsini tek sınıfta yapsaydık olur muydu?Evet olurdu ancak şimdi bide öğretmen sınıfımızın oldunu düşünelim.Öğretmendede SicilNo,MedeniDurum vs.. gibi bilgiler olsun

Kod:

class Ogretmen:Person
    {
        private string _SicilNo;

        public string SicilNo
        {
            get { return _SicilNo; }
            set { _SicilNo = value; }
        }
        private string _MedeniDurum;

        public string MedeniDurum
        {
            get { return _MedeniDurum; }
            set { _MedeniDurum = value; }
        }

    }



UserPostedImage

Burdada gördüğün gibi öğretmende person özelliklerini aldı ve üstünede kendi özellikleri geldi

Ben burda nesneye dayalı mantığında şunu yapmış oldum.Bir temel sınıfta öğrencide olsa öğretmende olsa sonucta Adı,Soyadı ,Yası olacak sonucta insan ama SicilNo sadece öğretmende,öğrenci no sadece öğrencide.Bu şekilde hem daha az kod yazmış oldum,hemde nesne tabanlı bir model oluşturmuş oldum.

5-)Polimorfizm: oluşturduğumuz nesnelerin gerektiğinde başka bir nesneymiş gibi davranabilmesine polimorfizm denilmektedir.Yani aşağıdaki gibi Person nesnesi ile başladığımız p yi öğretmen olarak oluşturuyoruz.Ama p de öğretmene aşt Sicilno gibi özellikler gelmiyor.


Person p = new Ogretmen();

UserPostedImage

6-)Override ve Virtual

Bir class ta yazdığımız bir fonksiyon gerekirse türediği sınıfta geliştirilerek kullanabilmeliyiz.Bunun için ana sınıfta metodun başına virtual anahtar kelimesi gelirken bir üst sınıfta bu metod override anahtar sözcüğü ile değiştirebilir

Mesela DortIslem Classımıza aşağıdaki şekilde bir virtual fonksiyon tanımlayalım

public virtual int Toplama(int a, int b)
{
return a + b;
}

Daha sonra DortIslemden tureyen HesapMakinası isimli yeni bir sınıf yapalım.Override anahtar sözcüğünü kullandığımızda bir alt sınıfta virtual olarak verilen metodlar listelenir

UserPostedImage

UserPostedImage

Daha sonra form arkasında aşağıdaki gibi hesap makinasını oluşturup metodu çağırırsak bize çıktı olarak 9 verecektir.
HesapMakinasi hp = new HesapMakinasi();
int a=hp.Toplama(3, 5);
MessageBox.Show(a.ToString());

Sql Server 2016 Eğitimiz 19 Mayıs tarihinde başlayacaktır. 32 Saat Olup Ücret 1450 TL + KDV'dir. Kayıt ve ayrıntılar için tıklayınız

twitter.com/dbakademi
Dua ve teşekkür en büyük servetlere bedel...


Bu konudaki kullanıcılar
Guest
Forumu Atla  
Bu foruma yeni konular postalayamazsınız.
Bu forumda ki konulara yeni posta gönderemezsiniz.
Bu forumdaki postalarınızı silemezsiniz.
Bu forumdaki postalarınızı düzenleyemezsiniz.
Bu forumda anketler yaratamazsınız.
Bu forumdaki anketlere oy veremezsiniz.