C# ile Soyut(Abstract) metod Kullanımı

Bu dersimizde Nesne Yönelimli Programlamanın en önemli konularından Soyut Metodları inceleyeceğiz. İlk önce Araclar isminde bir proje oluşturuyoruz. Ardında Solution Explorer'da (View- Solution Explorer menüsünden) projemizin üzerine sağ tıklayıp Add - Class menüsünden yeni bir Sınıf ekliyoruz ve ismini Arac veriyoruz.  



Arac sınıfı abstract yani soyut bir sınıf. Soyut sınıflardan nesneler türetilemez. Soyut bir sınıf, sadece başka sınıflar için bir şablon oluştururlar. Soyut sınıf içinde soyut metod olur ve gövdesi yazılmaz, sadece soyut metodun geri döndüreceği değer ve parametreleri belirtilir.

Arac sınıfında motorHacmi, modelYili, renk özellikleri ve calis() ve dur() isimli metodlar var. Dikkat edereseniz calis() ve dur() metodlarının yanında abstract yazılmış ve gövdeleri yok.
 

namespace Araclar
{
    public abstract class Arac
    {
       
        public int motorHacmi{get;set;}
        public int modelYili{get; set;}
        public string renk{get; set;} 
 
        public abstract void calis();
        public abstract void dur();
    }

 
Şimdi yukarıda oluşturduğumuz Arac soyut sınıfından Otomobil isimli bir sınıf türetelim. Arac sınıfından miras alan Otomobil sınıfı hatırlayacağınız üzere Arac sınıfının tüm özellik ve metodlarını kullanabiliyordu. Burada miras alınan Soyut sınıf olduğundan, soyut sınıftaki metodların gövdeleri yazılmak zorundadır. Örneğin calis() ve dur() isimli iki metodun da gövdesini Otomobil sınıfında yazıyoruz. 

 
    public class Otomobil: Arac
    {
        public int yolcuKapasitesi{get;set;}
        public string marka{get;set;}
 
        public override void calis()
        {
            MessageBox.Show("Motor çalışıyor...");
        }
        public override void dur(){
             MessageBox.Show("Motor durduruluyor...");
        }
 
        public void otomobilOzellikleri(){
            MessageBox.Show("Marka :" + this.marka + "\n" +
                            "Motor hacmi:" + this.motorHacmi+"\n"+
                            "Yolcu Kapasitesi:" + this.yolcuKapasitesi + "\n" +
                            "Model Yılı:" + this.modelYili+"\n"+
                            "Renk:" + this.renk + "\n"
                );
 
        }
    }
}
 
Yukarıdaki kodlarda Otomobil sınıfına yolcuKapasitesi ve marka özellikleri ekledik. Daha önce tanımlanan calis() ve dur() metodlarının içeriğini de oluşturduk. Ardından otomobilOzellikleri metodu tanımladık ve tüm özellikleri MessageBox.Show ile ekrana yazdık. MessageBox.Show'u kullanmak için System.Windows.Forms namespace'ini en üste ekledik. 

Şimdi de formumuza dönelim ve 4 metin TextBox ve bir ComboBox nesnesi ekleyelim. 

Nesne Adı(Name) Değeri
TextBox txtMarka  
TextBox txtMotorHacmi  
TextBox txtModelYili  
TextBox txtYolcuKapasitesi  
ComboBox cbRenk  
Button btnNesneOlustur Nesne Oluştur
Button btnCalistir Motor Çalıştır
Button btnDurdur Motor Durdur
Button btnMotorOzellikleri Motor Özellikleri

Yukarıdaki bilgiler doğrultusunda aşağıdaki formu hazırlayınız.




Form kodlarının tümü aşağıdaki gibidir. İlgili butonlara teker teker tıklayarak aşağıdaki kod içeriklerini yazınız. Otomobil sınıfından o1 nesnesini formun en başında türettik ki, tüm metodlarda geçerli olsun.  Form sınıfının hemen altında Otomobil o1; koduna dikkat ediniz.


Daha sonra Nesne Oluştur butonuna tıklayıp aşağıdaki kodları yazdık. Burada metin kutularından alınan bilgiler o1 nesnesinin elemanlarına aktarılıyor, yani Otomobil sınıfında tanımlanan ya da miras alınan değişkenlere aktarılıyor. 


             o1 = new Otomobil();
             o1.marka = txtMarka.Text;
             o1.modelYili = int.Parse(txtModelYili.Text);
             o1.yolcuKapasitesi = int.Parse(txtYolcuKapasitesi.Text);
             o1.motorHacmi = int.Parse(txtMotorHacmi.Text);
             o1.renk = (string)cbRenk.Items[cbRenk.SelectedIndex];

Kodun tamamı aşağıdaki gibidir.

Using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
 
namespace Araclar
{
    public partial class Form1 : Form
    {
        Otomobil o1;
 
        public Form1()
        {
            InitializeComponent();
        }
 
        private void btnDurdur_Click(object sender, EventArgs e)
        {
            if (o1 != null) 
                o1.dur();
        }
 
        private void btnCalistir_Click(object sender, EventArgs e)
        {
            if (o1 != null) 
                o1.calis();
        }
 
        private void btnMotorOzellikleri_Click(object sender, EventArgs e)
        {
            if(o1!=null)
                o1.otomobilOzellikleri();
        }
 
        private void btnNesneOlustur_Click(object sender, EventArgs e)
        {
             o1 = new Otomobil();
             o1.marka = txtMarka.Text;
             o1.modelYili = int.Parse(txtModelYili.Text);
             o1.yolcuKapasitesi = int.Parse(txtYolcuKapasitesi.Text);
             o1.motorHacmi = int.Parse(txtMotorHacmi.Text);
             o1.renk = (string)cbRenk.Items[cbRenk.SelectedIndex];
        }
    }
}




Mutlu kodlamalar,
Oğuzhan TAŞ
07.03.2022
 
 
Bookmark and Share