অ্যাবস্ট্রাক্ট ক্লাস (Abstract Class)
অ্যাবস্ট্রাক্ট ক্লাস নিউ দিয়ে তৈরি করা যায় না ইন্টারফেস এর মত, যা নিয়ে আমরা আগেই কথা বলেছি। এখানে আমরা অ্যাবস্ট্রাক্ট ক্লাসের কিছু বৈশিষ্ট্য দেখব যা নিয়ে আমরা প্রথমে কথা বলিনি।
অ্যাবস্ট্রাক্ট ক্লাস (Abstract Class) এ কি কি থাকতে পারে?
জাভা (Java)
- কনস্ট্রাকটর
- স্ট্যাটিক কনস্টান্ট
- কনস্টান্ট
- মেথড ইমপ্লিমেন্টেশন
- আবস্ট্রাক্ট মেথড
- ম্যাথড ওভাররাইড
- স্ট্যাটিক মেথড
- নেস্টেট টাইপ
সি# (C#)
- স্ট্যাটিক fields
- কনস্টান্ট
- কনস্ট্রাকটর
- আবস্ট্রাক্ট : মেথড (Method), প্রপার্টিজ (Properties), ইনডেক্সার (Indexers), ইএভেন্টস (Events), অপারেটরস
- ইমপ্লিমেন্টেশন : Fields, মেথড (Method), প্রপার্টিজ (Properties), ইনডেক্সার (Indexers), ইএভেন্টস (Events), অপারেটরস
- ওভাররাইড : মেথড (Method), প্রপার্টিজ (Properties), ইনডেক্সার (Indexers), ইভেন্টস (Events)
- স্ট্যাটিক মেথড
- নেস্টেট টাইপ
- যে কোন এক্সেস মডিফায়ার
যেমন, অ্যাবস্ট্রাক্ট ক্লাস কিভাবে:
- মাল্টিপল ইন্টারফেসকে ইমপ্লিমেন্ট করতে পারে
- মেথড ওভার রাইড করতে পারে যা ইন্টারফেস পারেনা
- পার্শিয়াল অ্যাবস্ট্রাকশন থাকতে পারে
- পিওর অ্যাবস্ট্রাক্ট ক্লাসের রুপ দেয়া যায়
অ্যাবস্ট্রাক্ট ক্লাস কিভাবে মাল্টিপল ইন্টারফেসকে ইমপ্লিমেন্ট করতে পারে?
//জাভা (Java) interface Animal { void makeSound(); } interface Movable { void move(); } abstract class Bird implements Animal, Movable { // implement public void makeSound() { System.out.println(“Tweet tweet”); } // keeping as abstract public abstract void move(); } class Sparrow extends Bird { // Implement the move method public void move() { System.out.println(“Sparrow Fly in the sky”); } }
//সি# (C#) interface IAnimal { void MakeSound(); } interface IMovable { void Move(); } abstract class Bird : IMovable, IAnimal { public void MakeSound() { Console.WriteLine(“Tweet tweet”); } // keeping as abstract public abstract void Move(); } class Sparrow : Bird { // Implement the Move method public override void Move() { Console.WriteLine(“Sparrow Fly in the sky”); } }
অ্যাবস্ট্রাক্ট ক্লাস কিভাবে মেথড ওভার রাইড করতে পারে যা ইন্টারফেস পারেনা?
//জাভা (Java) interface Animal { void makeSound(); // Abstract method declaration } // implements Animal abstract class Bird implements Animal { public void makeSound() { // Concrete method implementation System.out.println(“Tweet tweet”); } public abstract void fly(); // Abstract method declaration } // Extends the abstract class + Override class Sparrow extends Bird { public void fly() { // Concrete method implementation System.out.println(“Sparrow Fly in the sky”); } // Override the makeSound method from the Bird abstract class @Override public void makeSound() { // Concrete method implementation System.out.println(“Sparrow Chirp chirp”); } }
//সি# (C#) interface IAnimal { void MakeSound(); } interface IMovable { void Move(); } abstract class Bird : IMovable, IAnimal { public void MakeSound() { Console.WriteLine(“Tweet tweet”); } // keeping as abstract public abstract void Move(); } class Sparrow : Bird { // Implement the Move method public override void Move() { Console.WriteLine(“Sparrow Fly in the sky”); } }
অ্যাবস্ট্রাক্ট ক্লাস কিভাবে মেথড ওভার রাইড করতে পারে যা ইন্টারফেস পারেনা?
//জাভা (Java) interface Animal { void makeSound(); // Abstract method declaration } // implements Animal abstract class Bird implements Animal { public void makeSound() { // Concrete method implementation System.out.println(“Tweet tweet”); } public abstract void fly(); // Abstract method declaration } // Extends the abstract class + Override class Sparrow extends Bird { public void fly() { // Concrete method implementation System.out.println(“Sparrow Fly in the sky”); } // Override the makeSound method from the Bird abstract class @Override public void makeSound() { // Concrete method implementation System.out.println(“Sparrow Chirp chirp”); } }
//সি# (C#) interface IAnimal { void MakeSound(); // Abstract method declaration } // implements Animal abstract class Bird : IAnimal { public void MakeSound() { // Concrete method implementation Console.WriteLine(“Tweet tweet”); } public abstract void Fly(); // Abstract method declaration } // Extends the abstract class + Override class Sparrow : Bird { public override void Fly() { // Concrete method implementation Console.WriteLine(“Sparrow Fly in the sky”); } // Override the MakeSound method from the Bird abstract class public override void MakeSound() { // Concrete method implementation Console.WriteLine(“Sparrow Chirp chirp”); } }
অ্যাবস্ট্রাক্ট ক্লাসে কিভাবে পার্শিয়াল অ্যাবস্ট্রাকশন থাকতে পারে?
//জাভা (Java) abstract class Shape { // Define a field protected String color; // Define a constructor public Shape(String color) { this.color = color; } // abstract method, partial abstraction public abstract double getArea(); // Define a concrete method public void printColor() { System.out.println(“The color is ” + color); } }
//সি# (C#) abstract class Shape { // Define a field protected string color; // Define a constructor public Shape(string color) { this.color = color; } // abstract method, partial abstraction public abstract double GetArea(); // Define a concrete method public void PrintColor() { Console.WriteLine(“The color is ” + color); } }
পিওর অ্যাবস্ট্রাক্ট ক্লাস কি? কিভাবে অ্যাবস্ট্রাক্ট ক্লাস কে পিওর অ্যাবস্ট্রাক্ট ক্লাসের রুপ দেয়া যায়?
একটি অ্যাবস্ট্রাক্ট ক্লাস কোন অ্যাবস্ট্রাক্ট মেথড বা ডেফিনেশন না থাকলেও এতে কোন বিল্ড ইস্যু হবে না।
সাধারণত, একটি পিওর অ্যাবস্ট্রাক্ট ক্লাস হলো এমন একটি ক্লাস, যাতে শুধুমাত্র অ্যাবস্ট্রাক্ট মেথড আর কোনো ডেটা বা কনক্রিট মেথড নেই। একটি অ্যাবস্ট্রাক্ট মেথড হলো এমন একটি মেথড, যার কোনো বডি নেই, এবং এর উপ-ক্লাসেরা (subclasses) ।
//জাভা (Java) using System; abstract class Shape { public abstract double getArea(); public abstract double getPerimeter(); }
//সি# (C#) abstract class Shape { public abstract double GetArea() = 0; public abstract double GetPerimeter() = 0; }