কম্পিউটার টিউটোরিয়াল

C#-এ অ্যাবস্ট্রাকশন (Abstraction): অ্যাবস্ট্রাক্ট ক্লাস ও মেথড

অ্যাবস্ট্রাকশন হল অবজেক্ট-ওরিয়েন্টেড প্রোগ্রামিং-এ জটিলতা লুকিয়ে শুধু প্রাসঙ্গিক তথ্য প্রদর্শনের কৌশল। C#-এ এটি abstract class এবং abstract method দিয়ে বাস্তবায়ন করা হয়।

মূল ধারণা

  • abstract class — ইনস্ট্যান্সিয়েট করা যায় না, শুধু বেস ক্লাস হিসেবে কাজ করে।
  • abstract method — বডি নেই, ডিরাইভড ক্লাসে override করতে হয়।
  • এনক্যাপসুলেশন + অ্যাবস্ট্রাকশন = পূর্ণ OOP ডিজাইন।

নियमাবলী

  • অ্যাবস্ট্রাক্ট ক্লাসে অ্যাবস্ট্রাক্ট এবং নন-অ্যাবস্ট্রাক্ট উভয় মেথড থাকতে পারে।
  • অ্যাবস্ট্রাক্ট মেথড শুধু অ্যাবস্ট্রাক্ট ক্লাসে ডিক্লেয়ার করা যায়।
  • sealed ক্লাস অ্যাবস্ট্রাক্ট হয় না (ইনহেরিট不可)।
  • একটি ক্লাস শুধু এক বেস ক্লাস থেকে ইনহেরিট করতে পারে (সিঙ্গল ইনহেরিটেন্স)।

সম্পূর্ণ উদাহরণ: Shape হায়ারার্কি


using System;

namespace AbstractionDemo
{
    // অ্যাবস্ট্রাক্ট বেস ক্লাস
    public abstract class Shape
    {
        public abstract double Area(); // অ্যাবস্ট্রাক্ট মেথড
        
        // নন-অ্যাবস্ট্রাক্ট মেথড (শেয়ার্ড লজিক)
        public void PrintArea()
        {
            Console.WriteLine($"Area: {Area():F2}");
        }
    }
    
    // ডিরাইভড ক্লাস
    public class Rectangle : Shape
    {
        public double Width { get; set; }
        public double Height { get; set; }
        
        public Rectangle(double w, double h)
        {
            Width = w; Height = h;
        }
        
        public override double Area() => Width * Height;
    }
    
    public class Circle : Shape
    {
        public double Radius { get; set; }
        public Circle(double r) => Radius = r;
        public override double Area() => Math.PI * Radius * Radius;
    }
    
    class Program
    {
        static void Main()
        {
            Shape rect = new Rectangle(20, 15);
            Shape circ = new Circle(10);
            
            rect.PrintArea(); // Area: 300.00
            circ.PrintArea(); // Area: 314.16
            
            // পলিমরফিজম: Shape[] অ্যারে-এ সব শেপ রাখা যায়
            Shape[] shapes = { rect, circ, new Rectangle(5, 5) };
            foreach (var s in shapes) s.PrintArea();
        }
    }
}

আউটপুট


Area: 300.00
Area: 314.16
Area: 300.00
Area: 314.16
Area: 25.00

অ্যাবস্ট্রাক্ট ক্লাস vs ইন্টারফেস

ফিচারAbstract ClassInterface
ইনস্ট্যান্সিয়েশননানা
স্টেট (ফিল্ড)হ্যাঁনা (C# 8.0 পূর্বে)
কনস্ট্রাক্টরহ্যাঁনা
এক্সেস মডিফায়ারযেকোনোপাবলিক (ডিফল্ট)
মাল্টিপল ইমপ্লিমেন্টেশননাহ্যাঁ
  1. C#-এ Array ক্লাস কী?

  2. C#-এ রান টাইম পলিমরফিজম (Run Time Polymorphism) কী?

  3. C#-এ অ্যাবস্ট্র্যাক্ট ক্লাস

  4. জাভাতে অ্যাবস্ট্রাক্ট ক্লাস