Part 11 Abstract Class

Abstract Class Nedir? Neden Kullanıyoruz?

Nesne tabanlı programlamanın önemli kavramlarından ve davranışlarından biri inheritance (kalıtım)’dır. Kalıtım sayesinde sınıflar arasında hiyerarşik ilişkiler oluşturabilir ve nesneler içerisindeki elemanları miras yoluyla birbirlerine aktarabiliriz. Böylece ortak işlevselliklere sahip olan sınıfları kalıtımsal davranışla şekillendirerek tekrar kod yazımını azaltır, okunabilirliği ve yeniden kullanılabilirliği artırabiliriz.

Abstract Class, bu niyetle kullandığımız kalıtımsal davranışı daha farklı manevralarla kullanabilmek için düşünülmüş ve geliştirilmiş olan bir nesnel yapıdır. Abstract Class, özünde kalıtımsal davranış göstererek bir sınıf üzerinde implementasyonlar yapmamızı sağlayan özel bir yapılanmadır.

Burada implementasyondan kastedilenin ne olduğunu yazımızın ilerleyen kısımlarında anlatacağız. Şimdilik odaklanacağımız nokta Abstract Class’ın varlık sebebidir. Abstract Class bize yarı somut bir sınıf sunar. Yarı somut sınıftan kasıt, içerisinde normal member’lar barındırabileceği gibi, kendisini uygulayan sınıflara zorunlu olarak uygulatılacak member’ların imzalarını da barındırabilen bir yapılanmadır.

Burda Shape adında bir abstract class tanımlanıyor ve içerisinde CalculateArea adında abstract bir method ve DisplayInfo adında concrete bir method bulunuyor. Circle sınıfı Shape sınıfını miras alarak CalculateArea methodunu override edip dairenin alanını hesaplıyor. Benzer şekilde, Rectangle sınıfı da Shape sınıfını miras alarak CalculateArea methodunu override edip dikdörtgenin alanını hesaplıyor. Main metodunda Circle ve Rectangle sınıflarından nesneler oluşturuluyor, nesnelerin CalculateArea methodları çağrılarak alanları hesaplanıyor ve DisplayInfo methodu ile nesnelerin türü ekrana yazdırılıyor. abstract classa örnek veriyorum konuya giriş yaparker. İlerleyen bölümlerde detaylara gireceğim.

C#
// Abstract Class tanımlama
public abstract class Shape
{
    // Abstract method (implementation yok)
    public abstract double CalculateArea();

    // Concrete method (implementation var)
    public void DisplayInfo()
    {
        Console.WriteLine("This is a shape.");
    }
}

// Circle sınıfı Shape'i miras alıyor
public class Circle : Shape
{
    public double Radius { get; set; }

    // Abstract metodu override ediyor
    public override double CalculateArea()
    {
        return Math.PI * Radius * Radius;
    }
}

// Rectangle sınıfı Shape'i miras alıyor
public class Rectangle : Shape
{
    public double Width { get; set; }
    public double Height { get; set; }

    // Abstract metodu override ediyor
    public override double CalculateArea()
    {
        return Width * Height;
    }
}

public class Program
{
    public static void Main(string[] args)
    {
        Shape circle = new Circle { Radius = 5 };
        Shape rectangle = new Rectangle { Width = 4, Height = 7 };

        Console.WriteLine("Circle Area: " + circle.CalculateArea());
        Console.WriteLine("Rectangle Area: " + rectangle.CalculateArea());
        
        circle.DisplayInfo(); // Output: This is a shape.
        rectangle.DisplayInfo(); // Output: This is a shape.
    }
}

Yazılım Süreçlerinde Abstract Class Kullanımı

Yazılım süreçlerinde Abstract Class’ları kullanma nedeni belirli bir ihtiyaca dayanmaz; tercihen kullanılan yapılardır. Genellikle Abstract Class’lara doğrudan gereklilik olduğu bir durum pek olmaz. Ancak belirli durumlarda iradeli bir şekilde Abstract Class’lar ile davranışı sergilemeyi tercih edebilir ve varsa sorunlarınızı daha basit hale getirebilirsiniz.

Bir Abstract Class ile kalıtımsal olarak aktarmak istediğiniz davranışlarla birlikte zorunlu olarak uygulatmak istediğiniz davranışları tasarlayabilirsiniz. Bu tasarımı istediğiniz sınıflara uygulatarak hem kalıtımsal aktarımda bulunabilir hem de o sınıflar içerisinde zorunlu olarak ilgili davranışları tanımlatabilirsiniz.

Abstract Class’ın yapısal özellikleri nelerdir?

Abstract Class’ın Temel Özellikleri:

Abstract Class her ne kadar abstract olsa da özünde bir class’tır. Yani referans türünde bir yapılanmadır. Dolayısıyla Abstract Class türünden belleğin stack bölgesinde bir referans noktası edinilebilir ve bu referansla heap’teki uygun nesneler işaretlenebilir.

    C#
    // Abstract Class tanımlama
    public abstract class Shape
    {
        // Abstract method (implementation yok)
        public abstract double CalculateArea();
    
        // Concrete method (implementation var)
        public void DisplayInfo()
        {
            Console.WriteLine("This is a shape.");
        }
    }
    

    Abstract Class ile Nesne Arasındaki İlişki:

    Abstract Class’lar soyut yapılanmalar oldukları için yapısal olarak iradeli bir şekilde (new operatörü ile) nesne üretilemez.

      C#
      Shape shape = new Shape(); // Bu satır derleme hatası verir!

      Abstract Class’tan doğrudan nesne oluşturulamaz, ancak bu sınıfı implement eden (uygulayan) sınıflar üzerinden nesne oluşturulabilir.

        C#
        // Circle sınıfı Shape'i miras alıyor
        public class Circle : Shape
        {
            public double Radius { get; set; }
        
            // Abstract metodu override ediyor
            public override double CalculateArea()
            {
                return Math.PI * Radius * Radius;
            }
        }
        
        // Rectangle sınıfı Shape'i miras alıyor
        public class Rectangle : Shape
        {
            public double Width { get; set; }
            public double Height { get; set; }
        
            // Abstract metodu override ediyor
            public override double CalculateArea()
            {
                return Width * Height;
            }
        }
        
        public class Program
        {
            public static void Main(string[] args)
            {
                Shape circle = new Circle { Radius = 5 };
                Shape rectangle = new Rectangle { Width = 4, Height = 7 };
        
                Console.WriteLine("Circle Area: " + circle.CalculateArea());
                Console.WriteLine("Rectangle Area: " + rectangle.CalculateArea());
            }
        }
        

        Abstract Class Tanımlama ve İnşa Etme Kuralları:

        Bir Abstract Class tanımlamak için abstract class anahtar kelimesi kullanılır.

          C#
          public abstract class Animal
          {
              public abstract void MakeSound();
          }

          Bir Abstract Class içerisinde member’lar bilinen kurallara göre eklenebilir: normal metotlar ve property’ler eklenebilir.

            C#
            public abstract class Animal
            {
                public string Name { get; set; }
            
                public abstract void MakeSound();
            
                public void Sleep()
                {
                    Console.WriteLine("Sleeping...");
                }
            }

            Bu Abstract Class’ı implement edecek olan sınıflarda zorunlu tanımlanmasını isteyebileceğimiz member imzaları eklenebilir. Bu imzalar, ilgili alt sınıflara bırakılacak şekilde abstract anahtar kelimesi ile işaretlenmelidir. Tabi abstract anahtar kelimesi ile işaretlenmiş olan member’lar, kendilerini uygulayan sınıflar tarafından erişileceği için zorunlu olarak public olmalıdır.

              C#
              public abstract class Animal
              {
                  public abstract void MakeSound();
              }
              
              public class Dog : Animal
              {
                  public override void MakeSound()
                  {
                      Console.WriteLine("Woof!");
                  }
              }

              Bir Abstract Class’ı uygulayan sınıf içerisinde normal member’lar direkt miras yoluyla aktarılırken, abstract ile işaretlenmiş olan member’lar ise ilgili sınıf içerisinde override edilmek zorundadır.

                C#
                public abstract class Animal
                {
                    public abstract void MakeSound();
                    public void Sleep()
                    {
                        Console.WriteLine("Sleeping...");
                    }
                }
                
                public class Cat : Animal
                {
                    public override void MakeSound()
                    {
                        Console.WriteLine("Meow!");
                    }
                }
                
                public class Program
                {
                    public static void Main(string[] args)
                    {
                        Cat cat = new Cat();
                        cat.MakeSound(); // Output: Meow!
                        cat.Sleep(); // Output: Sleeping...
                    }
                }

                Virtual ile Abstract Arasındaki Fark:

                Eğer bir member virtual ile işaretlenmişse, alt sınıfta değiştirmek zorunda değilsiniz; olduğu gibi kullanılabilir. Ancak abstract ile işaretlenmişse, alt sınıfta içeriği tanımlamak zorundasınız.

                  C#
                  public class BaseClass
                  {
                      public virtual void ShowMessage()
                      {
                          Console.WriteLine("Message from BaseClass.");
                      }
                  }
                  
                  public class DerivedClass : BaseClass
                  {
                      // Virtual metodu override etmek zorunda değilsiniz
                  }
                  
                  public class AnotherDerivedClass : BaseClass
                  {
                      // Virtual metodu override ediyor
                      public override void ShowMessage()
                      {
                          Console.WriteLine("Message from AnotherDerivedClass.");
                      }
                  }
                  
                  public class Program
                  {
                      public static void Main(string[] args)
                      {
                          BaseClass baseObj = new BaseClass();
                          BaseClass derivedObj = new DerivedClass();
                          BaseClass anotherDerivedObj = new AnotherDerivedClass();
                  
                          baseObj.ShowMessage(); // Output: Message from BaseClass.
                          derivedObj.ShowMessage(); // Output: Message from BaseClass.
                          anotherDerivedObj.ShowMessage(); // Output: Message from AnotherDerivedClass.
                      }
                  }

                  Abstract Class’ı Uygulamaktan Kastettiğimiz Nedir?

                  Abstract Class’ın söz konusu olduğu durumlarda implementasyon yani uygulama fiiliyatı mevzubahistir. Bu durum, sonraki derste göreceğimiz interface’ler için de geçerlidir. Implementasyon, Abstract Class’ın bir sınıfa katma vermesidir. Yani bir başka deyişle kalıtımsal bir ilişkide eğer base class bir Abstract Class ise biz bu durumu implementasyon olarak nitelendiririz.

                  Abstract Class’ın Abstract Class’tan Türemesi

                  Abstract Class başka bir Abstract Class’tan miras alabilir.

                  C#
                  // Temel Soyut Sınıf
                  public abstract class Hayvan
                  {
                      // Soyut metod (uygulama yok)
                      public abstract void SesCikar();
                  
                      // Somut metod (uygulama var)
                      public void Uyu()
                      {
                          Console.WriteLine("Uyuyor...");
                      }
                  }
                  
                  // Türetilmiş Soyut Sınıf
                  public abstract class Kus : Hayvan
                  {
                      // Soyut metod (uygulama yok)
                      public abstract void Uc();
                  }
                  
                  // Somut Sınıf
                  public class Serce : Kus
                  {
                      // Soyut metodları geçersiz kılıyor (override)
                      public override void SesCikar()
                      {
                          Console.WriteLine("Cik Cik");
                      }
                  
                      public override void Uc()
                      {
                          Console.WriteLine("Serçe uçuyor.");
                      }
                  }
                  
                  public class Program
                  {
                      public static void Main(string[] args)
                      {
                          Serce serce = new Serce();
                          serce.SesCikar(); // Çıktı: Cik Cik
                          serce.Uc();       // Çıktı: Serçe uçuyor.
                          serce.Uyu();      // Çıktı: Uyuyor...
                      }
                  }
                  

                  Özetle

                  bir sınıfın uyması gereken temel yapıyı tanımlamak için Abstract Class yapısını kullanabilir ve gerekli modellemeyi gerçekleştirebilirsiniz. Abstract Class’lar bir çeşit abstraction yapılanmasıdır. Davranışların var olduğunu garanti eder, ancak davranışın implementasyonunu interface’ler gibi zorunlu kılmaz. Abstract Class’lar, interface’ler ile concrete/normal class’lar arasında bir yapıdır. Abstract Class’lar, birçok senaryo için geçerli olabilecek genel davranışlar sağlayabileceği gibi, bazı senaryolar için ise özel davranışlar da barındırabilir. Abstract Class, doğrudan inheritance ve polymorphism ile bağlantılı bir kavramdır. Özellikle inheritance olmaksızın Abstract Class kullanılmaz. Keza inheritance amaçlı kullanılan yapı Abstract Class ise o zaman oradaki ifadeye implementasyon denir. Abstract Class’lar (interface’ler de aynı şekilde) loose coupling’i destekler.

                  Yorum Yap

                  Bir yanıt yazın

                  E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

                  Deneme Bonusu Veren Siteler 2025 - Yüksek Deneme Bonusu(New)

                  Deneme Bonusu Veren Siteler 2025

                  Deneme bonusu veren siteler 2025 yılına damga vuruyor! Kullanıcılar artık sadece oyun değil, aynı zamanda yatırım yapmadan kazanma fırsatları arıyor. İşte bu noktada, yatırım şartsız ve çevrimsiz bonus sunan güvenilir bahis siteleri ön plana çıkıyor.

                  Slotin, Betci, Casival, Betmaks, Dedebet ve Casinobell gibi öne çıkan platformlar, kullanıcılarına yüksek oranlı ve çevrimsiz deneme bonusları sunarak 2025’te bahis severlerin gözdesi hâline geliyor. Elbette bunlarla sınırlı değil; toplamda +99 bahis sitesi listemizde, her zevke ve ihtiyaca uygun onlarca farklı seçenek yer alıyor.

                  Hem yeni başlayanlar hem de tecrübeli bahisçiler için hazırladığımız bu liste, sektördeki en güncel ve en avantajlı platformları içeriyor. NetEnt, Microgaming, Pragmatic Play gibi dev sağlayıcılarla çalışan bu siteler, yüksek RTP oranları, hızlı ödeme yöntemleri ve mobil uyumlu arayüzleriyle öne çıkıyor.

                  Bahis siteleri, 2025 yılında sundukları yeniliklerle dikkat çekiyor. Spor bahislerinden canlı casino oyunlarına, e-sporlardan slot makinelerine kadar geniş bir içerik sunan bu platformlar, her türden oyuncuya hitap ediyor.

                  Özellikle mobil uyumlu bahis siteleri, kullanıcıların her yerden kolay erişim sağlamasını mümkün kılıyor. Modern arayüzleri, hızlı ödeme sistemleri ve cazip promosyonlarıyla kullanıcı deneyimini zirveye taşıyorlar. Kullanıcılar, yatırım yapmadan önce bu sitelerde sunulan yatırımsız deneme bonusları ile hem eğlenip hem de kazanma şansını değerlendirebiliyor.

                  2025 itibarıyla güvenilir bahis siteleri, lisanslı yapıları ve yüksek güvenlik protokolleri sayesinde sektörde ön plana çıkıyor. Hem yeni başlayanlar hem de deneyimli oyuncular için ideal koşullar sunan bu siteler, heyecan dolu ve kazançlı bir deneyim arayanlar için biçilmiş kaftan.

                  Bu nedenle bahis severler, sadece bonus miktarına değil, aynı zamanda sitenin lisansına, ödeme geçmişine ve kullanıcı yorumlarına da dikkat etmelidir. 2025'te en iyi deneme bonusu veren siteler arasından seçim yaparak, risksiz ve keyifli bir başlangıç yapabilirsiniz.

                  Deneme bonusu veren siteler şu şekildedir:

                  Deneme bonusu veren siteler

                  En Güncel Yatırımsız Deneme Bonusu Sunan Siteler 2025

                  2025’te bahis dünyasında yatırımsız deneme bonusu arayan kullanıcıların karşısına birbirinden cazip seçenekler çıkıyor. Özellikle Slotbon, Atlantisbahis, Bahix, Betmore, Betmatik, Parobet ve Twinplay gibi yeni casino siteleri, yatırım şartsız sundukları kayıt bonuslarıyla dikkat çekiyor. Hızlı kayıt süreci, bedava spin kampanyaları ve çevrimsiz çekim avantajları sayesinde bu siteler, hem yeni başlayanlar hem de deneyimli bahisçiler için ideal durak hâline geliyor.

                  Bu platformların sağladığı lisanslı altyapı, hızlı ödeme yöntemleri, geniş oyun yelpazesi ve kullanıcı dostu arayüzler, 2025’in rekabetçi bahis pazarında onları bir adım öne taşıyor. Ancak unutma; doğru siteyi seçerken sadece bonus miktarına değil, ödeme hızı, müşteri desteği ve genel güvenilirlik gibi kriterlere de mutlaka dikkat etmek gerekiyor. Sen de bu güncel fırsatları değerlendirerek, yatırımlı ya da yatırımsız en iyi bonuslara ulaşabilirsin!

                  Yatırımsız deneme bonusu sunan siteler, özellikle yeni kullanıcıları cezbetmek için en çok tercih edilen yöntemlerden biridir. Bu sistemde kullanıcılar, hiçbir ödeme yapmadan doğrudan bahis oyunlarına katılım sağlayabilirler. Üyelik adımlarını tamamlayan herkes, anında promosyondan yararlanabilir ve sunulan oyun seçeneklerini deneyimleyebilir.

                  Yatırımsız bonus veren siteler, kullanıcılara sıfır risk ile başlangıç yapma fırsatı tanır. Bu da oyuncuların hem güvenini artırır hem de oyunlara karşı ilgilerini yükseltir. İlk adımda yatırımı zorunlu kılmayan bu siteler, denemeye açık kullanıcılar için cazip bir seçenektir.

                  Yatırımsız deneme bonusu, bahis piyasasına giriş yapmak isteyenler için mükemmel bir fırsattır. Oyuncular bu bonuslar sayesinde kendi sermayelerini kullanmadan, istedikleri oyunları deneyip strateji geliştirme imkanı bulurlar. Aynı zamanda siteyi tanımak ve en uygun içerikleri keşfetmek açısından da avantaj sağlar.

                  Çevrimsiz Deneme Bonusu Veren Siteler

                  Çevrimsiz deneme bonusu, çevrimiçi bahis ve casino sitelerinde yeni üyelere sunulan en cazip promosyonlardan biridir. Kayıt işlemi tamamlandıktan sonra genellikle otomatik olarak tanımlanan bu fırsatlar, kullanıcıya gerçek bakiye harcamadan oyun oynama imkânı tanır. Özellikle siteyi tanımak, oyunları test etmek ve platformun sunduğu avantajları değerlendirmek için idealdir.

                  Bahis siteleri için çevrimsiz bonus, müşteri memnuniyetini artıran ve sadık kullanıcı kitlesi oluşturmada etkili bir araçtır. 2025 yılında bu promosyonların daha yaygın hale gelmesi beklenmektedir. Böylece hem yeni üyeler siteye çekilecek hem de var olan kullanıcılar sadık kalmaya devam edecektir.

                  İşte Çevrimsiz Deneme Bonusu Veren Bahis Siteleri:

                  Deneme bonusu

                  Sıkça Sorulan Sorular (FAQ)

                  ✅ Deneme bonusu nedir?

                  Deneme bonusu, bahis veya casino sitelerinin yeni kullanıcılara sunduğu, para yatırmadan önce oyunları deneme imkanı sağlayan promosyondur. Genellikle slot oyunlarında veya belirli casino içeriklerinde geçerlidir.

                  ✅ Yatırımsız bonus nasıl alınır?

                  Yatırımsız bonus almak için güvenilir bir siteye üye olup e-posta veya telefon doğrulaması yapmanız yeterlidir. Çoğu zaman bonuslar otomatik tanımlanır; bazen canlı destekten de talep edebilirsiniz.

                  ✅ Hangi siteler en yüksek deneme bonusunu veriyor?

                  Slotin, Betci, Casival ve Betmaks gibi siteler 2025 yılında en yüksek deneme bonusu veren güvenilir platformlar arasında yer alıyor. Ancak her siteye kaydolmadan önce bonus şartlarını mutlaka incelemelisiniz.

                  ✅ Deneme bonusu çevrimsiz mi?

                  Her deneme bonusu çevrimsiz değildir. Bazı siteler çevrim şartı koyarken, bazıları doğrudan çekilebilir çevrimsiz bonus sunar. Çevrim şartlarına dikkat etmek önemlidir.