DMCA.com Protection Status Abstract Class(Soyut Sınıf) - Bilişim Eğitim Merkezi
Anasayfa / Yazılım 360 Eğitimleri / Abstract Class(Soyut Sınıf)

Abstract Class(Soyut Sınıf)

Soyut sınıflar, tek başlarına bir şey ifade etmezler. Kendisini miras alacak alt sınıflar için ortak olan genel özellik yada metotların tanımlandığı sınıflardır. Kendisi bir base class olur, miras alacak sınıf ya da sınıflar ise alt class olur.

Soyut sınıfların içerisinde yazılacak soyut metotların sadece tanımlamaları(defination) bulunur, gövdeleri(body) bulunmaz.

Soyut sınıflar private yada protected ya da protected internal olarak tanımlanamazlar.

Bir sınıf sadece bir tane soyut sınıf miras alabilir.

Normal sınıflarda soyut metotlar bulundurulamaz. Soyut metotlar sadece soyut sınıflarda tanımlanır.

Soyut sınıflarda hem somut hem de somut olmayan metotlar tanımlanabilir. Soyut olmayan metotlarda hem tanımlama hem de gövde kısmı bulunabilir.

Abstract ile tanımlanan metotlar, bu soyut sınıfı miras alacak sınıflarda metodun gövdelerini  “override” ile uygulamak(implementation) zorundadır.(interface ‘de olduğu gibi)

New keyword ile bir örnek(instance) alınamazlar.yani

Yemek yemeksınıfı= new Yemek()

Gibi bir kopya yapılamazlar.

Hemen uygulamamıza geçelim. Yemek adında bir abstract class oluşturalım. Alt class’larda bulunacak ortak özellikleri tanımlayalım. yemekFiyat özelliğini kendisini miras alacak sınıflarda yada onlarında alt sınıflarında her yemeğin fiyatı kendine göre farklı olacağından “abstract” ön ekini ekleyelim. Bu şekilde pırasa yemeği ile tavuk şiş yemeğinin fiyatları farklı olacaktır. Aynı şekilde bir de sunumSekli metodunun da “abstract“ olarak tanımlanıp her yemeğin sunum şeklinin farklı olup kendine göre “override” edilmesini sağlayalım aynı şekilde bu farklılık olayını “virtual” kelimesi ile de yapabilirdik fakat alt sınıflarda biz bu özellik ya da metotların uygulanmasını zorunlu kıldık.(abstract ile tanımlanan property ya da metotlar override edilmek zorundadır. Virtual da ise böyle bir zorunluluk yoktur.

abstract class yemek

{

public int yemekNo { get; set; }

public string yemekAd { get; set; }

public abstract decimal yemekFiyat { get; }

public int adet { get; set; }

 

public abstract string sunumSekli();

 

}

Daha sonra sebzeli yemekler, etli yemekler ve içecekler altı sınıflarını oluşturup yemek soyut sınıfını bu alt sınıflara miras verelim. İçecekler sınıfına yemek soyut sınıfını miras verdiğimizde aşağıdaki gibi altını kırmızı ile çizip bizden soyut yemek sınıfındaki abstract ile tanımlanan yemekFiyat özelliğini zoraki bir şekilde uygulanmasını istemektedir. Şekilde gibi implement abstract class diyerekten yolumuza devam edelim.

class icecekler:yemek

{

public override decimal yemekFiyat

{

get

{

throw new NotImplementedException();

}

}

 

public override string sunumSekli()

{

return “şişe içerisinde sunum yapılır”;

}

}

 

class sebzeliyemek:yemek

{

public override decimal yemekFiyat

{

get

{

throw new NotImplementedException();

}

}

public override string sunumSekli()

{

return “yanında yoğurt”;

}

}

class etliyemek:yemek

{

public override decimal yemekFiyat

{

get

{

throw new NotImplementedException();

}

}

 

public override string sunumSekli()

{

return “haydari tabağıyla sunum”;

}

}

 

Evert şimdi de tanımladığımız bu alt sınıflarında altında hizmet verecek alt sınıflar oluşturalım.

class ayran:icecekler

{

decimal fiyat = 3.50m;

public override decimal yemekFiyat { get => fiyat; }

public override string sunumSekli()

{

return “Açık bardak içerisinde sunulur”;

}

}

class cola:icecekler

{

decimal fiyat = 4.0m;

public override decimal yemekFiyat { get => fiyat; }

public override string sunumSekli()

{

// bu sınıfın base olarak icecekler sınıfır. içecekelr sınıfın sunum şeklini al demiş oluyoruz.

return base.sunumSekli();

}

}

class su:icecekler

{

decimal fiyat =2.0m;

public override decimal yemekFiyat

{

get

{

return fiyat;

}

}

}

Şimdi de sebzeli yemeklere ait alt sınıflar oluşturalım.

class pırasa:sebzeliyemek

{

decimal fiyat = 8.50m;

public override decimal yemekFiyat {

get

{

return fiyat;

}

}

}

class ıspanak:sebzeliyemek

{

decimal fiyat = 9;

public override decimal yemekFiyat { get => fiyat; }

}

class musakka:sebzeliyemek

{

decimal fiyat = 10.50m;

public override decimal yemekFiyat { get => fiyat; }

}

Şimdi et yemeklerine ait alt sınıfları oluşturalım.

class beyti:etliyemek

{

decimal fiyat = 23.50m;

public override decimal yemekFiyat { get => fiyat; }

public override string sunumSekli()

{

return base.sunumSekli();

}

}

class tavuksis:etliyemek

{

decimal fiyat = 21.50m;

public override decimal yemekFiyat

{

get

{

return fiyat;

}

}

public override string sunumSekli()

{

return “yanında Piriç pilavı ve çoban salata”;

}

}

class kebap:etliyemek

{

decimal fiyat = 22.50m;

public override decimal yemekFiyat { get => fiyat; }

public override string sunumSekli()

{

return ” yanında az bulgur pilav, turşu”;

}

}

Evet şimdi yemeklere ait olan alt alt alt sınıfları oluşturduk. Şimdi bir sipariş sınıfı oluşturalım.

class siparis

{

// bir yemek listesi oluşturulur.

List<yemek> yemekListesi = new List<yemek>();

// ekle metodu oluşturacağım

public void ekle(yemek _yemek)

{

yemekListesi.Add(_yemek);

}

// liste metodu oluşturacağım. Yemek listesini göndersin.

 

public List<yemek> liste()

{

return yemekListesi;

}

 

// yemek listesinin içinde olabilecek tüm yemek ve içeceklerin toplam tutarını bulmak için oluşturduğumuz metot.

 

public decimal toplamTutar()

{

decimal toplam = 0;

foreach (var item in yemekListesi)

{

toplam += item.yemekFiyat * item.adet;

}

return toplam;

}

}

 

Daha sonra bir form tasarımı yapalım.

Form üzerine;

 

Sipariş ve sipariş Listesi iki ayrı GroupBox,

Sipariş GroupBox içine;

Ana yemek ve alt yemekler comboBox,

Yemek no yemek adı  textBox,

ve yemek fiyatı textbox ve readOnly özelliği true.

Adet numericUpDown

Sipariş listesi GroupBox içine;

dataGridView

En aşağıdaki Toplam Tutar ve 0 yazan Label

Şimdi kodlamaya başlayabiliriz. Form 1.cs içeriği.

public partial class Form1 : Form

{

public Form1()

{

InitializeComponent();

}

// Yeni bir adisyon adında bir sipariş oluşturuyorum.

 

siparis adisyon = new siparis();

// formun açılışında ana yemekleri comboboxa yüklüyorum.

 

private void Form1_Load(object sender, EventArgs e)

{

cYemek.Items.Add(“Sebzeli Yemekler”);

cYemek.Items.Add(“Etli Yemekler”);

cYemek.Items.Add(“İçecekler”);

yemekNo++;

tYemekNo.Text = yemekNo.ToString();

 

// datagridview ayarı. datagridView için başlıklar oluşturuyorum

dataGridView1.Columns.Add(“YemekNo”, “Yemek No”);

dataGridView1.Columns.Add(“YemekAd”, “Yemek Ad”);

dataGridView1.Columns.Add(“YemekAdet”, “Adet”);

dataGridView1.Columns.Add(“YemekFiyat”, “Fiyat”);

dataGridView1.Columns.Add(“Tutar”, “Tutar”);

dataGridView1.Columns.Add(“Sunum”, “Sunum Şekli”);

}

// Yemek listesini çağırıp tüm elemanlarını DatagridView içine yazdırıyorum.

 

public void yemekListele()

{

dataGridView1.Rows.Clear();

foreach (var item in adisyon.liste())

{

dataGridView1.Rows.Add(item.yemekNo,item.yemekAd,

item.adet,item.yemekFiyat,item.adet*item.yemekFiyat,

item.sunumSekli());

}

}

// Ana yemek seçiminde alt yemekleri dolduruyorum.

 

private void cYemek_SelectedIndexChanged(object sender, EventArgs e)

{

// sebzeli seçilmişse

if(cYemek.SelectedItem==cYemek.Items[0])

{

c_altYemek.Items.Clear();

c_altYemek.Items.Add(“Pırasa”);

c_altYemek.Items.Add(“Ispanak”);

c_altYemek.Items.Add(“Musakka”);

}

// etli yemekler seçilişse

if (cYemek.SelectedItem == cYemek.Items[1])

{

c_altYemek.Items.Clear();

c_altYemek.Items.Add(“Kebap”);

c_altYemek.Items.Add(“Tavuk Şiş”);

c_altYemek.Items.Add(“Beyti”);

}

//içecekler seçilmişse

if (cYemek.SelectedItem == cYemek.Items[2])

{

c_altYemek.Items.Clear();

c_altYemek.Items.Add(“Ayran”);

c_altYemek.Items.Add(“Cola”);

c_altYemek.Items.Add(“Su”);

}

}

int yemekNo = 0;

private void bSiparis_Click(object sender, EventArgs e)

{

 

 

//sebzeli yemekler içerisinde Pırasa seçilmişse Yeni bir pırasa oluştur özelliklerini gir ve adisyona ekle.

if (c_altYemek.SelectedItem.ToString() == “Pırasa”)

{

pırasa yeniPırasa = new pırasa();

yeniPırasa.yemekAd = tYemekAdı.Text;

yeniPırasa.yemekNo = Int32.Parse(tYemekNo.Text);

yeniPırasa.adet = Int32.Parse(tAdet.Text);

adisyon.ekle(yeniPırasa);

}

if (c_altYemek.SelectedItem.ToString() == “Ispanak”)

{

ıspanak yeniIspanak = new ıspanak();

yeniIspanak.yemekAd = tYemekAdı.Text;

yeniIspanak.yemekNo = Int32.Parse(tYemekNo.Text);

yeniIspanak.adet = Int32.Parse(tAdet.Text);

adisyon.ekle(yeniIspanak);

}

if (c_altYemek.SelectedItem.ToString() == “Musakka”)

{

musakka yeniMusakka = new musakka();

yeniMusakka.yemekAd = tYemekAdı.Text;

yeniMusakka.yemekNo = Int32.Parse(tYemekNo.Text);

yeniMusakka.adet = Int32.Parse(tAdet.Text);

adisyon.ekle(yeniMusakka);

}

// etli yemekler

if (c_altYemek.SelectedItem.ToString() == “Kebap”)

{

kebap yeniKebap = new kebap();

yeniKebap.yemekAd = tYemekAdı.Text;

yeniKebap.yemekNo = Int32.Parse(tYemekNo.Text);

yeniKebap.adet = Int32.Parse(tAdet.Text);

adisyon.ekle(yeniKebap);

}

if (c_altYemek.SelectedItem.ToString() == “Tavuk Şiş”)

{

tavuksis yeniTavukSis = new tavuksis();

yeniTavukSis.yemekAd = tYemekAdı.Text;

yeniTavukSis.yemekNo = Int32.Parse(tYemekNo.Text);

yeniTavukSis.adet = Int32.Parse(tAdet.Text);

adisyon.ekle(yeniTavukSis);

}

if (c_altYemek.SelectedItem.ToString() == “Beyti”)

{

beyti yeniBeyti = new beyti();

yeniBeyti.yemekAd = tYemekAdı.Text;

yeniBeyti.yemekNo = Int32.Parse(tYemekNo.Text);

yeniBeyti.adet = Int32.Parse(tAdet.Text);

adisyon.ekle(yeniBeyti);

}

// içecekler

if (c_altYemek.SelectedItem.ToString() == “Cola”)

{

cola yeniCola = new cola();

yeniCola.yemekAd = tYemekAdı.Text;

yeniCola.yemekNo = Int32.Parse(tYemekNo.Text);

yeniCola.adet = Int32.Parse(tAdet.Text);

adisyon.ekle(yeniCola);

}

if (c_altYemek.SelectedItem.ToString() == “Ayran”)

{

ayran yeniAyran = new ayran();

yeniAyran.yemekAd = tYemekAdı.Text;

yeniAyran.yemekNo = Int32.Parse(tYemekNo.Text);

yeniAyran.adet = Int32.Parse(tAdet.Text);

adisyon.ekle(yeniAyran);

}

if (c_altYemek.SelectedItem.ToString() == “Su”)

{

su yeniSu = new su();

yeniSu.yemekAd = tYemekAdı.Text;

yeniSu.yemekNo = Int32.Parse(tYemekNo.Text);

yeniSu.adet = Int32.Parse(tAdet.Text);

adisyon.ekle(yeniSu);

}

yemekNo++;

tYemekNo.Text = yemekNo.ToString();

yemekListele();

// label

Tutar.Text = adisyon.toplamTutar().ToString()+” TL”;

}

 

private void c_altYemek_SelectedIndexChanged(object sender, EventArgs e)

{

tYemekAdı.Text = c_altYemek.SelectedItem.ToString();

 

}

}

 

Hakkında bilisimegitim

Ayrıca Kontrol Edin

C# Sınıf Erişim Yöntemleri

Nesne tabanlı programlama dillerinde bir class(sınıf), property, field yada metotlara erişmek için belli başlı kullandığımız …

Bir cevap yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

Eğitimler İçin Arayın!