انتزاع (Abstraction)

انتزاع (Abstraction) یکی از اصول برنامهنویسی شیگرا است که در جاوا به این معنی است که جزئیات پیادهسازی مخفی میشوند و تنها ویژگیها و عملکردهای اساسی نمایش داده میشوند. این به برنامهنویسان اجازه میدهد که با استفاده از کلاسهای انتزاعی (abstract classes) یا رابطها (interfaces)، پیادهسازی را از جزئیات مخفی کرده و تنها بر روی عملکرد متمرکز شوند.
۱. کلاسهای انتزاعی (Abstract Classes)
یک کلاس انتزاعی کلاسی است که نمیتوان از آن شیء ایجاد کرد. این کلاس ممکن است شامل متدهای انتزاعی (بدون پیادهسازی) باشد که در کلاسهای فرزند پیادهسازی میشوند. همچنین، ممکن است شامل متدهای غیرانتزاعی (با پیادهسازی) باشد.
مثال:
abstract class Vehicle {
// متد انتزاعی
abstract void start();
// متد غیرانتزاعی
void stop() {
System.out.println(“وسیله نقلیه متوقف شد.”);
}
}
class Car extends Vehicle {
@Override
void start() {
System.out.println(“ماشین روشن شد.”);
}
}
public class Main {
public static void main(String[] args) {
Vehicle myCar = new Car(); // ایجاد شی از کلاس فرزند
myCar.start(); // ماشین روشن شد.
myCar.stop(); // وسیله نقلیه متوقف شد.
}
}
در این مثال، کلاس Vehicle
یک کلاس انتزاعی است که یک متد انتزاعی به نام start()
دارد. کلاس Car
این متد را پیادهسازی کرده است. همچنین متد stop()
در کلاس والد پیادهسازی شده و در کلاس فرزند استفاده میشود.
۲. رابطها (Interfaces)
یک رابط مشابه یک کلاس انتزاعی است، اما تمام متدهای آن به صورت پیشفرض انتزاعی هستند و نمیتوانند پیادهسازی داشته باشند. یک کلاس میتواند چندین رابط را پیادهسازی کند.
مثال:
interface Animal {
void sound(); // متد انتزاعی
}
class Dog implements Animal {
@Override
public void sound() {
System.out.println(“سگ پارس میکند”);
}
}
class Cat implements Animal {
@Override
public void sound() {
System.out.println(“گربه میو میکند”);
}
}
public class Main {
public static void main(String[] args) {
Animal myDog = new Dog();
Animal myCat = new Cat();
myDog.sound(); // سگ پارس میکند
myCat.sound(); // گربه میو میکند
}
}
در اینجا، رابط Animal
فقط متد sound()
را تعریف میکند. کلاسهای Dog
و Cat
این رابط را پیادهسازی کردهاند و هر کدام رفتار خاص خود را دارند.
۳. مزایای انتزاع
- مخفی کردن جزئیات: فقط عملکردهای اساسی نمایش داده میشوند و جزئیات پیادهسازی پنهان میماند.
- سادگی: کد سادهتر و خواناتر میشود چون جزئیات پیچیده در سطح پایین مخفی است.
- مقیاسپذیری و تغییرپذیری: کد به راحتی قابل تغییر و توسعه است چون تغییرات در پیادهسازی در سطح پایین میتواند بدون تأثیر بر روی کدهای بالا انجام شود.
تفاوتهای کلاس انتزاعی و رابط:
- کلاس انتزاعی میتواند شامل متدهایی با پیادهسازی باشد، در حالی که در رابط تمام متدها باید انتزاعی باشند (قبل از Java 8).
- یک کلاس میتواند یک کلاس انتزاعی را ارثبری کند، ولی میتواند چندین رابط را پیادهسازی کند.
انتزاع در جاوا به شما این امکان را میدهد که برنامههای بزرگ و پیچیده را به صورت ساختارمند و سادهتر مدیریت کنید. اگر سوالی دارید، خوشحال میشوم کمک کنم! 😊
دیدگاهتان را بنویسید