کلاسهای انتزاعی (PHP Abstract Classes)
کلاسهایِ انتزاعی: نقشههایِ ناتمام 📐🌫️
کلاسِ انتزاعی (Abstract) کلاسی است که مستقیماً نمیتوان از رویِ آن شیء ساخت. این کلاس فقط به عنوانِ یک "الگو" برایِ فرزندانش عمل میکند.
متدِ انتزاعی چیست؟
متدی است که فقط نام و پارامترهایش تعریف شده اما هیچ کدی (بدنه) ندارد. فرزندان مجبور هستند این متد را تکمیل کنند.
{code_block('abstract class Car {\n abstract public function intro();\n}')}قوانینِ بازی:
- اگر کلاسی حتی یک متدِ
abstractداشته باشد، کلِ کلاس بایدabstractتعریف شود. - کلاسِ فرزند باید تمامِ متدهایِ انتزاعیِ والد را با همان سطحِ دسترسی یا آزادتر پیادهسازی کند.
drive دارند، اما هر کدام به روشِ خودشان حرکت میکنند.
قدرتِ طراحی:
کلاسِ انتزاعی میتواند متدهایِ عادی (با کد) هم داشته باشد، برخلافِ اینترفیسها که کاملاً توخالی هستند.
بخش تخصصی: معماریِ پیشرفته و مهندسیِ اشیاء 🐘💎
برنامهنویسیِ شیءگرا در PHP پس از نسخهیِ ۷ و ۸ تغییراتِ بنیادینی داشته و به ابزاری بسیار قدرتمند برایِ ساختِ سیستمهایِ پیچیده تبدیل شده است.
۱. ساختارِ حافظه و Object Handles
در PHP، متغیرهایی که حاویِ یک شیء هستند، خودِ شیء را ذخیره نمیکنند؛ بلکه یک Identifier یا دستگیره (Handle) را نگه میدارند که به جدولِ اشیاءِ درونیِ موتورِ Zend Engine اشاره میکند. به همین دلیل است که وقتی یک شیء را به تابعی پاس میدهید، تغییرات در همان شیءِ اصلی اعمال میشود (شبهارجاع).
۲. رعایتِ اصولِ SOLID
در طراحیِ کلاسها، همیشه به اصلِ Single Responsibility پایبند باشید. یک کلاس باید فقط یک دلیل برایِ تغییر داشته باشد. استفاده از Interfaces به شما اجازه میدهد وابستگیهایِ کدتان را به حداقل برسانید (Dependency Inversion).
۳. کدهایِ JIT-Friendly
موتورِ JIT در PHP 8 کدها را به زبانِ ماشین تبدیل میکند. نوشتنِ کدهایِ شیءگرا با ساختارِ مشخص و استفاده از Property Typing به JIT کمک میکند تا کدهایِ شما را بسیار بهینهتر اجرا کند.
تمرینهای عملی
برای تثبیت یادگیری این درس تمرینهای زیر را حل کنید
یک کلاسِ انتزاعی به نام Shape تعریف کنید که یک متدِ انتزاعی به نام getArea داشته باشد.
<?php
abstract class Shape {
abstract public function getArea();
}
?>
آماده رفتن به درس بعدی هستید؟
این درس را به پایان رساندید و میتوانید به درس بعدی بروید.