Altbilgi içeriğine atla
Iron Academy Logo
C# öğrenin
C# öğrenin

Diğer Kategoriler

C# Soyut Sınıfı Anlamak

[[academy-video-youtube({"vid": "jRkmPRk5j2E", "start_time": "0", "title": "C# Soyut Sınıfı Anlamak", "creator": "Tim Corey", "length": "19m 59s"})]]

C#'ta soyut sınıflar, genellikle geliştiriciler arasında sorulara neden olan temel bir kavramdır. Tim Corey'in videosunda, "C# Soyut Sınıflar - Onlar Nedir, Nasıl Kullanılırlar ve En İyi Uygulamalar" Tim Corey soyut sınıfların ne olduğunu, nasıl kullanılacağını ve en iyi uygulamalarını ele alıyor. Bu makale, videosunun önemli noktalarını zaman damgalarını referans olarak kullanarak özetlemektedir.

Giriş

Tim (0:00) soyut sınıfların amaçları, işlevselliği ve önemi açısından genellikle sorgulandığını açıklar. Soyut bir sınıfı, işlevsellik açısından tam bir temel sınıf ile bir arayüz arasında yer alan bir karışım olarak tanımlar.

Demo Uygulama Gezintisi

(0:59'da), Tim soyut sınıfları göstermek için bir demo uygulaması sunar. Uygulama, bir konsol uygulaması ve veritabanı işlemlerini simüle eden iki veri erişim sınıfı içeren bir sınıf kütüphanesinden oluşur. Bu sınıfların, soyut sınıflar, temel sınıflar ve arayüzler arasındaki benzerlikleri ve farkları göstermek için Tim tarafından kullanılan veri yükleme ve saklama için yöntemleri vardır.

İşte temel sınıf ve türeyen sınıflar için başlangıç kodu:

// Base Class Definition
public class DataAccess
{
    // Method to load the connection string
    public string LoadConnectionString()
    {
        Console.WriteLine("Loading the connection string...");
        return "Test Connection String";
    }

    // Method to load data
    public void LoadData()
    {
        Console.WriteLine("Loading data...");
    }

    // Method to save data
    public void SaveData()
    {
        Console.WriteLine("Saving data...");
    }
}

// Derived class that inherits from DataAccess
public class SQLDataAccess : DataAccess
{
    // Overriding LoadData method to specify SQL data loading
    public new void LoadData()
    {
        Console.WriteLine("Loading SQL data...");
    }

    // Overriding SaveData method to specify SQL data saving
    public new void SaveData()
    {
        Console.WriteLine("Saving SQL data...");
    }
}

// Derived class that inherits from DataAccess
public class SQLiteDataAccess : DataAccess
{
    // Overriding LoadData method to specify SQLite data loading
    public new void LoadData()
    {
        Console.WriteLine("Loading SQLite data...");
    }

    // Overriding SaveData method to specify SQLite data saving
    public new void SaveData()
    {
        Console.WriteLine("Saving SQLite data...");
    }
}
// Base Class Definition
public class DataAccess
{
    // Method to load the connection string
    public string LoadConnectionString()
    {
        Console.WriteLine("Loading the connection string...");
        return "Test Connection String";
    }

    // Method to load data
    public void LoadData()
    {
        Console.WriteLine("Loading data...");
    }

    // Method to save data
    public void SaveData()
    {
        Console.WriteLine("Saving data...");
    }
}

// Derived class that inherits from DataAccess
public class SQLDataAccess : DataAccess
{
    // Overriding LoadData method to specify SQL data loading
    public new void LoadData()
    {
        Console.WriteLine("Loading SQL data...");
    }

    // Overriding SaveData method to specify SQL data saving
    public new void SaveData()
    {
        Console.WriteLine("Saving SQL data...");
    }
}

// Derived class that inherits from DataAccess
public class SQLiteDataAccess : DataAccess
{
    // Overriding LoadData method to specify SQLite data loading
    public new void LoadData()
    {
        Console.WriteLine("Loading SQLite data...");
    }

    // Overriding SaveData method to specify SQLite data saving
    public new void SaveData()
    {
        Console.WriteLine("Saving SQLite data...");
    }
}

Bir Temel Sınıf Oluşturma

Tim, (3:21'de) bir temel sınıf nasıl oluşturulur açıklıyor. Ortalanmış metodlari, LoadConnectionString gibi, DataAccess adlı bir temel sınıfa taşımak için kodu yeniden düzenler. Bu temel sınıftan türeyen, SQLDataAccess ve SQLiteDataAccess gibi diğer sınıflar, kod yinelenmesini azaltarak bu ortak yöntemlere erişim kazanır.

Temel Sınıfı Soyut Hale Getirme

(5:56'da) Tim temel sınıfı bir soyut sınıf haline getiriyor ve farklılıkları göstermek için. DataAccess'yi soyut bir sınıfa dönüştürerek, doğrudan örneklenmesini engeller. Bunun yerine, yalnızca SQLiteDataAccess ve SQLDataAccess gibi bu soyut sınıfı miras alan sınıflar, yöntemlerini uygulayabilir ve paylaşılan işlevselliğini kullanabilir.

İşte DataAccess soyut bir sınıfa dönüştüğünde kodda nasıl değişiklikler olur:

// Abstract Base Class Definition
public abstract class AbstractDataAccess
{
    // Shared method to load connection string
    public string LoadConnectionString()
    {
        Console.WriteLine("Loading the connection string...");
        return "Test Connection String";
    }

    // Abstract methods that must be implemented by derived classes
    public abstract void LoadData();
    public abstract void SaveData();
}
// Abstract Base Class Definition
public abstract class AbstractDataAccess
{
    // Shared method to load connection string
    public string LoadConnectionString()
    {
        Console.WriteLine("Loading the connection string...");
        return "Test Connection String";
    }

    // Abstract methods that must be implemented by derived classes
    public abstract void LoadData();
    public abstract void SaveData();
}

Soyut Sınıfta Arayüz Bölümü

Tim, (8:34'te) soyut sınıfların arayüzler ve temel sınıfların özelliklerini nasıl harmanladığını açıklar. public abstract void LoadData(); ve public abstract void SaveData(); gibi soyut yöntemleri, soyut sınıfta implemente etmeden beyan eder. Bu, herhangi bir türeyen sınıfın bu yöntemleri uygulamasını zorunlu kılar, arayüzlerin çalışma şekline benzer.

Soyut Sınıflarda Yöntemlerin Üzerini Yazma

Tim, (12:56'da) bir soyut sınıfta yöntemlerin nasıl üzerine yazılacağını tartışıyor. Ana sınıfta bir metodu virtual olarak beyan edebileceğinizi, türetilen sınıfların onu geçersiz kılmasına olanak tanıdığını gösterir. Bu yaklaşım, yöntemlerin türetilmiş sınıflarda nasıl uygulandığı ve genişletildiği konusunda esneklik sağlar.

İşte yöntem üzerine yazmalarını gösteren türetilmiş sınıf kodu:

// Derived class from abstract base class
public class SQLDataAccessWithAbstract : AbstractDataAccess
{
    // Implementing the abstract LoadData method
    public override void LoadData()
    {
        Console.WriteLine("Loading SQL data...");
    }

    // Implementing the abstract SaveData method
    public override void SaveData()
    {
        Console.WriteLine("Saving SQL data...");
    }
}
// Derived class from abstract base class
public class SQLDataAccessWithAbstract : AbstractDataAccess
{
    // Implementing the abstract LoadData method
    public override void LoadData()
    {
        Console.WriteLine("Loading SQL data...");
    }

    // Implementing the abstract SaveData method
    public override void SaveData()
    {
        Console.WriteLine("Saving SQL data...");
    }
}

Soyut Sınıflar Ne Zaman Kullanılır

Tim, (16:01'de) soyut sınıfların her gün kullanılmaması gerektiğini ancak belirli senaryolarda değerli olduklarını tavsiye eder. İki sınıf benzer koda sahip olduğu için soyut sınıfların kullanılmaması konusunda uyarıda bulunur. Bunun yerine, 'is a' ilişkisinin sürdürülmesini vurguluyor ve uygun olduğunda ortak kodlar için yardımcı yöntemler veya sınıflar düşünülmesini öneriyor.

İşte kullanımını gösteren ana program kodu:

// Main Program
class Program
{
    static void Main(string[] args)
    {
        // Using Base Class
        SQLDataAccess sqlData = new SQLDataAccess();
        Console.WriteLine(sqlData.LoadConnectionString());
        sqlData.LoadData();
        sqlData.SaveData();

        Console.WriteLine("--------------------------");

        // Using Derived Class from Abstract Base Class
        SQLDataAccessWithAbstract sqlDataAbstract = new SQLDataAccessWithAbstract();
        Console.WriteLine(sqlDataAbstract.LoadConnectionString());
        sqlDataAbstract.LoadData();
        sqlDataAbstract.SaveData();

        Console.WriteLine("--------------------------");

        // You can't instantiate Abstract Base Class directly
        // AbstractDataAccess abstractData = new AbstractDataAccess(); 
        // Error: Cannot create an instance of the abstract class
    }
}
// Main Program
class Program
{
    static void Main(string[] args)
    {
        // Using Base Class
        SQLDataAccess sqlData = new SQLDataAccess();
        Console.WriteLine(sqlData.LoadConnectionString());
        sqlData.LoadData();
        sqlData.SaveData();

        Console.WriteLine("--------------------------");

        // Using Derived Class from Abstract Base Class
        SQLDataAccessWithAbstract sqlDataAbstract = new SQLDataAccessWithAbstract();
        Console.WriteLine(sqlDataAbstract.LoadConnectionString());
        sqlDataAbstract.LoadData();
        sqlDataAbstract.SaveData();

        Console.WriteLine("--------------------------");

        // You can't instantiate Abstract Base Class directly
        // AbstractDataAccess abstractData = new AbstractDataAccess(); 
        // Error: Cannot create an instance of the abstract class
    }
}

Sonuç

Tim Corey'nin C# soyut sınıflar konusundaki derinlemesine incelemesi, onların amacı, işlevselliği ve gerçek dünyadaki uygulamaları hakkında net ve pratik bir anlayış sunuyor. Demo uygulaması aracılığıyla, soyut sınıfların temel sınıflar ve arayüzler arasındaki boşluğu nasıl doldurduğunu gösteriyor, geliştiricilerin esnek ve sürdürülebilir kod yapıları oluşturmalarını sağlıyor.

Soyut sınıfların doğru senaryolarda kullanımı ve aşırı kullanımından kaçınma gibi en iyi uygulamalar vurgulanarak, Tim, geliştiricilere bilinçli tasarım seçimleri yapmaları için araçlar sunuyor. Bu kavramlara sağlam bir şekilde hakim olan geliştiriciler, nesneye yönelik programlama becerilerini geliştirebilir ve sağlam C# uygulamaları oluşturabilirler.

Hero Worlddot related to C# Soyut Sınıfı Anlamak
Hero Affiliate related to C# Soyut Sınıfı Anlamak

Sevdiğiniz Şeyleri Paylaşarak Daha Fazla Kazanın

.NET, C#, Java, Python veya Node.js ile çalışan geliştiriciler için içerik oluşturuyor musunuz? Uzmanlığınızı ek gelire dönüştürün!

Iron Destek Ekibi

Haftada 5 gün, 24 saat çevrimiçiyiz.
Sohbet
E-posta
Beni Ara