C# ile Sınıf ve Nesne Kavramları

Administrator tarafından yayınlanmıştır 27. February 2010 05:34

Herkese merhaba  arkadaşlar bu makalemizde C# diliyle Console uygulamalarına devam ediyoruz.Yineyeni bir Console uygulaması açıp,aşağıdaki kodları  yazıyoruz.Bu yaptığımızConsole uygulamasında girdiğimiz aralıktaki asal sayıları bulan ve istediğimiziki sayının ebobunu bulan bir program tasarladık.Ama  bu makalemizde amaç sizleri Class(sınıf) veNesne mantığına alıştırmak ve giriş yapmaktır.Aşağıdaki kodlara geçmeden önceisterseniz  C#’ta  Class nasıl tanımlanır ona bir gözatalım.Arkadaşlar C# ve Java gibi diller %100 Nesne Yönelimli yazılım tekniğinidestekleyen dillerdir.Bu dillerde sınıf yaratmak ve bunları kullanmak dahaverimli ve efektiftir.Zaten bu dillerin yapısı gereği Düz(Prosedürel)programlama tekniğine ihtiyaç duymayacaksınız.İlk bakıldığında ,eğer Class’larayabancı iseniz size pek mantıklı görünmeyebilir ve hatta “ben bunu normalprogramlama yaparkende yapabilirdim,ne gerek vardı şimdi bunlara ”diyebilirsiniz.Fakat yazılım istekleri çoğaldıkça ve karmaşıklaştıkça sizin birmodüler yapı kurmanız kaçınılmaz olur.Bu sebeple Nesne Yönelimli tekniği 80’lergünümüze kurumsal yazılımlar üretmek için en geçerli yöntem olmuştur.Şimdi C#’takiyapısına bakalım:

class Ogrenci

{

    //boş bir classtanımladık. 

}

Evet  görüldüğü  üzere C#’ta Class tanımlamak bu kadar basit bizler için.Bu oluşturduğumuzClass içinde ne bir metod ne de  birdeğişken  barındırıyor.Biz bunun içinekendi yazacağımız  metodlar vedeğişkenlerle dolduracağız.Class’ımızın boyutu kaç byte olacak diye merak eden arkadaşlara şunu diyebilirim ki Class’larınboyutları içinde barındırları değişken ve metod sayısına göre dinamik olarakdeğişir.Yani sizin Classlarınız 200 byte olabilirken,2000 byte da olabilir.Aşağıdakikodu inceleyelim:

class Ogrenci

{

        stringAdi;

        intYasi;

}

Bu kodda görüldüğü üzere iki tane değişkentanımladım.Class’ın içini doldurmaya başladık.Şimdi bu Class’ımızın Adi  ve Yasi adlı değişkenlerine erişebilmek içinönce bir nesne örneği oluşturmamız lazım aşağıdaki gibi;

Ogrenci Ogr=new Ogrenci();

Şimdi nesnemiz hazır,buradan Adi,Yasideğişkenlerine erişmek için nokta ile erişmemiz gerek yalnız burada dikkatinizibaşka bir noktaya çekmenin zamanı geldi.Classlar içindeki değişken vemetodların erişilebilirlik dereceleri belli anahtar kelimelerle belirlenmiştir.Şimdibu ifade karışık geldi farkettim,hemen açıklıyoruz.Classlar içindekideğişkenlere ve netodlara erişmek için  public,private,protected   kelimeleri vardır.

Public: Bu anahtar sözcük eğer class içindebir değişkenin veya metodun başına gelirse bu değişken veya metoda dışardanerişim söz konusudur.Yani şu demek oluyor; ben bu metod veya değişkeni nesneörneği nokta deyip çağırabilirim.

Private:Bu anahtar sözcük ise Class içindeherhangi değişken veya metoda gelirse,sadece Class içinden erişim olduğununanlamına gelir.Yani şu demek oluyor;

Nesne örneği nokta deyip ben değişken veyametoda dışardan erişemiyorum.

Protected:Bu makalede çok üzerindedurmayacağım  ama çok yararlı ve önemlibir anahtar kelime aslında,bu anahtar sözcük sınıflar arası kalıtıma girmişsınıfların değişken ve metodlarını  birbirleri arasında erişime izinverilmesini sağlayan anahtar sözcüktür.Kalıtım konusuna değinmediğim içinşimdilik sadece bilgi olarak kalsın.

O sebeple Class’ımızı şu şekilde düzenlersek;

class asalsayi

    {

        public string Adi;

        public int Yasi;

    }

İçindeki değişkenlere erişme imkanına sahipoluruz.C# dilinde eğer değişken başına herhangi bir anahtar sözcük yazılmazsavarsayılan olarak private kabul edilir.

Ve son olarak basit olan Class’ımıza birtane metod(fonksiyon) ekleyelim.Kodumuz aşağıdaki gibi olacaktır;

class asalsayi

{

        public string Adi;

        public int Yasi;

 

        public void BilgileriAl()

        {

            //boşmetod

        }

}

Şimdide asıl uygulamızı inceleyelim.

using System;

usingSystem.Collections.Generic;

usingSystem.Linq;

usingSystem.Text;

namespaceConsoleApplication5

{

    class asalsayi//asalsayi sınıfımız...burada yazdığımız kodlar bizim sınıfımızı oluşturacak.

    {//sınıflargenelde metodları ve değişkenleri kapsayan paket gibidirler.

        public bool veri_al(int x)//veri_al metodu tanımlıyoruz.bu metod kendisine parametre şeklindegelen verinin

        {// for içindemodunu alarak çift sayımı yoksa tek sayımı olduğuna karar veriyor. eğer çiftise

            //false döndürüyor.değilsetrue döndürüyor.

            for(int i = 2; i < x / 2; i++)//for döngüsü niçin gelen sayının yarısına gider diye birsoru

                //işaretiaklınıza gelmiştir.asal sayılar bilindiği üzere kendi yarısından büyük olan sayılaratam bölünmez.

            {

                if((x % i) == 0)

                    returnfalse;

            }

            returntrue;

        }

        public int en_buyuk(intsayi1, int sayi2)//bumetod ise iki sayının en büyük ortak bölen bulunur.

        {

            intdondur = 0;

            intmax, i=0;

            if(veri_al(sayi1) | veri_al(sayi2))

            {

                dondur = 1;

                returndondur;

            }

            max = sayi1 < sayi2 ? sayi1 :sayi2;//iki sayıdan büyük olanı max değişkenineataması yapılıyor.

            for(i = 2; i < max / 2 + 1; i++)//en buyuk ortak bölenibulmak için for a giriliyor.

            {

                if(((sayi1 % i) == 0) && ((sayi2 % i) == 0))//buif te en büyük ortak bölen 2 den büyükse en büyüğü buluncaya kadar değişiyor

                {

                    dondur = i;

                    returndondur;

                }

                dondur = 1;//eğer hiç if e girmezse demekki en büyük ortak bölen 1oluyor.

                returndondur;

            }

            returndondur;

        }

    }

    class Program//C# %100 nesne yönelimlibir programlama dili olduğu için projeyi açar açmaz bir tane varsayılan sınıfıkendisi oluşturur.

    {

        static void Main(string[]args)

        {

            asalsayiasal1 = new asalsayi();// burada asal sayı sınıfından new ile yeni bir nesne örneğioluşturulur.

            //arkadaşlarsınıfları bir kalıp gibi düşünün bir sabun kalıbı gibi,mesela bu sabun kalıbındançıkan ise sınıfın nesnesidir.

            Console.WriteLine("bir sayi araliği giriniz...");

            intsayi = Convert.ToInt32(Console.ReadLine());

            for(int i = 1; i < sayi; i++)

            {

                if(asal1.veri_al(i))//nesne ürettiğimize göre onun içindenherhangi bir metodu veya değişkeni çağırmak için nokta kullanılır.

                    //eğertrue değeri dönerse if in içine girer ve asalsayıdır.

                    Console.WriteLine(i+ "asalsayidir");

                else//else düşerse bu sayı asal sayı değildir.

                    Console.WriteLine(i+ "asalsayi degildir");

            }

            Console.WriteLine("ekoku alinacak sayiyi giriniz...");

            intsayi1 = Convert.ToInt32(Console.ReadLine());

            Console.WriteLine("ekoku alinacak sayiyi giriniz...");

            intsayi2 = Convert.ToInt32(Console.ReadLine());

            Console.WriteLine(sayi1+ "ve" + sayi2 + " 'nin ebobu " + asal1.en_buyuk(sayi1,sayi2));

            //burdadaiki sayının ebobu bulunur.

            Console.ReadLine();

        }

    }

}

Bu makalemizde sizlere Class mantığını ve C#dilinde nasıl tanımlama yapıldığını aktarmaya çalıştım.Umarım yararlı birmakale olmuştur.

Bir sonraki makalemde görüşmek üzere…

(Yazılanmakaleler tarafımdan hazırlanmıştır.Eğer kullanılması takdirinde lütfen atıftabulunmayı etik açısından unutmayınız.)

Batuhan Düzgün

Sakarya Üniversitesi

Bilgisayar Mühendisliği 

Endüstri Mühendisliği

Currently rated 5.0 by 1 people

  • Currently 5/5 Stars.
  • 1
  • 2
  • 3
  • 4
  • 5

Etiketler:

C#

Comments

Add comment


(Will show your Gravatar icon)  

  Country flag

biuquote
  • Comment
  • Preview
Loading





Bu site BlogEngine.NET 1.4.5.0 ile oluşturulmuştur. Türkçe çevirisi BlogEngine TR ekibi tarafından yapılmıştır.

Batuhan Düzgün

Sakarya Üniversitesi 

Bilgisayar Mühendisi

Endüstri Mühendisi

Yeditepe Üniversitesi

Bilgisayar Mühendisliği Yüksek Lisans 

 sahibinden.com

   Kıdemli Uzman Yazılım Mühendisi  

E-Mail 

   batuhan.duzgun@sahibinden.com

   batuhan.duzgun@windowslive.com

  github.com/batux

 

Sayfalar

Calendar

<<  September 2018  >>
MoTuWeThFrSaSu
272829303112
3456789
10111213141516
17181920212223
24252627282930
1234567

Yazıları geniş takvimde göster