OOP - Abstract Classes(Soyut Sınıflar) Nedir?

Abstract Class'lar

Bir sınıfın abstract olması, o sınıfın base(ana) class olması demektir. Bu sınıftan instance alınamaz, nesne türetilemez.Fakat başka sınıflara miras verebilir.

Abstract Metotlar

Bu metodlar sadece abstract classlar içerisinde tanımlanır. Abstract Class'tan miras alan sınıflar bu metodu override etmek zorundadır. Virtual metodlara göre override etme konusunda daha katıdır.
Eğer geliştiriciye bu metodu kullanma zorunluluğu veriyorsak, o metodu abstract metod yapmak, virtual metod yapmaya göre daha uygundur. 

Abstract metodlar sadece tanımlanır, gövdesi yoktur. Bu yüzden içerisinde işlem yapılmazlar. Override edildikleri sınıflarda kodlanarak içeriği doldurulur.

Örnek olarak çevre ve alan hesaplaması yapabileceğimiz bir uygulama yapalım.

    public abstract class Hesaplamalar
    {
        public double sonuc = 0;

 public abstract double Cevre(int k);

        public abstract double Alan(int k);
     }
Hesaplamalar adında abstract - base class yarattık ve bu sınıf sonuc field'i ve Cevre ve Alan adında iki adet abstract metod yarattık.Bu metodlar, bu sınıftan türetilen diğer classlar tarafından ezilecekler.

    public class Cember:Hesaplamalar
    {
        public override double Alan(int k)
        {
            sonuc = Math.PI * k * k;
            return sonuc;
        }
        public override double Cevre(int k)
        {
            sonuc = Math.PI * 2 * k;
            return sonuc;
        }
    }
Hesaplamalar sınıfından miras alan Çember sınıfımıza özgü çevre ve alan hesaplaması

    public class Kare:Hesaplamalar
    {
        public override double Alan(int k)
        {
            sonuc = Math.Pow(k, 2);
            return sonuc;
        }
        public override double Cevre(int k)
        {
            sonuc = 4 * k;
            return sonuc;
        }
    }
Hesaplamalar sınıfından miras alan Kare sınıfımıza özgü çevre ve alan hesaplaması

    public partial class Form1 : Form
    {
        void Yenile()
        {
            pnlKontrol.Visible = true;
            textBox1.Text = "";                   
        }

        public Form1()
        {
            InitializeComponent();
        }

        Kare k = new Kare();
        Cember c = new Cember();  

        private void comboBox1_SelectedIndexChanged(object sender, EventArgs e)
        {
            if (comboBox1.SelectedItem=="Kare")
            {
                Yenile();
                label1.Text = "Karenin Kenarı";              
            }
            else if (comboBox1.SelectedItem=="Çember")
            {
                Yenile();
                label1.Text="Çemberin Yarıçapı";
            }         
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            pnlKontrol.Visible = false;
        }

        private void btnHesapla_Click(object sender, EventArgs e)
        {
            if (comboBox1.SelectedItem == "Kare")
            {              
                double KareAlan = k.Alan(int.Parse(textBox1.Text));
                double KareCevre = k.Cevre(int.Parse(textBox1.Text));
                MessageBox.Show("Alan:" + KareAlan + " Çevre:" + KareCevre);
            }
            else if (comboBox1.SelectedItem == "Çember")
            {
                double CemberAlan = c.Alan(int.Parse(textBox1.Text));
                double CemberCevre = c.Cevre(int.Parse(textBox1.Text));
                MessageBox.Show("Alan:" + CemberAlan + " Çevre:" + CemberCevre);
            }       
        }
    }
Yenile() metodu ile Combobox'tan seçilen şekle göre Panel(pnlKontrol) görünüp,Textbox ise temizlenecek.

Panel'de ise Label,Textbox ve Hesaplama yapacak Butonumuz vardır ve Form yüklenirken pnlKontrol'ün visible özelliği false olarak ayarlandı.

Combobox'tan seçilen şekle göre panel doldurulacaktır. TextBox'a yazdığımız değere göre kare ve çemberin çevre ve alan MessageBox'ta gösterilecektir.

Uygulama görselleri


Yorumlar