অ্যাবস্ট্রাকশন হল অবজেক্ট-ওরিয়েন্টেড প্রোগ্রামিং-এ জটিলতা লুকিয়ে শুধু প্রাসঙ্গিক তথ্য প্রদর্শনের কৌশল। 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 Class | Interface |
|---|---|---|
| ইনস্ট্যান্সিয়েশন | না | না |
| স্টেট (ফিল্ড) | হ্যাঁ | না (C# 8.0 পূর্বে) |
| কনস্ট্রাক্টর | হ্যাঁ | না |
| এক্সেস মডিফায়ার | যেকোনো | পাবলিক (ডিফল্ট) |
| মাল্টিপল ইমপ্লিমেন্টেশন | না | হ্যাঁ |