روش انتزاعی یک ویژگی منحصر به فرد در زبان های برنامه نویسی شی گرا مانند جاوا، پایتون و C# است. این متدها در یک کلاس انتزاعی اعلان شدهاند اما شامل هیچ جزئیات پیادهسازی نیستند. هدف این است که یک طرح اولیه برای کلاس های دیگر برای تعریف رفتار متدها ارائه شود.
خاستگاه تاریخی و اولین ذکرها
روشهای انتزاعی و به طور کلی کلاسهای انتزاعی، ریشه در مفهوم انواع دادههای انتزاعی، عنصر اصلی برنامهنویسی شیگرا دارند. این ایده برای اولین بار در زبان برنامه نویسی سیمولا در دهه 1960 معرفی شد. با این حال، کاربرد کامل روشهای انتزاعی در زبانهای سطح بالا بعدی مانند C++، جاوا، C# و Python که کاملاً از اصول برنامهنویسی شیگرا پشتیبانی میکنند، آشکار شد.
نگاهی عمیق به روشهای انتزاعی
متدهای انتزاعی در یک کلاس انتزاعی تعریف می شوند و شامل بدنه نیستند. به عبارت دیگر هیچ کد اجرایی ندارند. آنها معمولاً به عنوان متغیرهایی برای متدهایی استفاده می شوند که باید در هر کلاس فرزند غیرانتزاعی ایجاد شوند. این ساختاری را برای کلاسهای خاص آینده فراهم میکند و در عین حال چندشکلی را تسهیل میکند.
یک روش انتزاعی را می توان به عنوان یک تعهد قراردادی برای هر زیر کلاس مشخص (یعنی غیرانتزاعی) در نظر گرفت. این الزام می کند که هر زیر کلاس بتن باید جزئیات پیاده سازی این روش ها را ارائه دهد.
ساختار داخلی و مکانیزم کاری
ساختار داخلی یک متد انتزاعی شامل اعلان آن در یک کلاس انتزاعی بدون هیچ کد پیاده سازی همراه است. نحو برای تعریف یک روش انتزاعی در بین زبان های برنامه نویسی مختلف متفاوت است. به عنوان مثال، در جاوا، شما باید از abstract
کلمه کلیدی:
جاواabstract void myAbstractMethod();
هنگامی که یک کلاس مشخص کلاس انتزاعی را گسترش می دهد، باید یک پیاده سازی برای همه روش های انتزاعی ارائه دهد. عدم انجام این کار منجر به خطای زمان کامپایل می شود.
جاواclass ConcreteClass extends AbstractClass {
void myAbstractMethod() {
// Implementation code goes here
}
}
ویژگی های کلیدی روش های انتزاعی
- تعریف در کلاس های انتزاعی: متدهای انتزاعی را فقط می توان در کلاس های انتزاعی تعریف کرد.
- عدم اجرا: آنها بدنه ندارند، یعنی کد اجرایی ندارند.
- اجرا را اعمال می کند: هر کلاس انضمامی که کلاس انتزاعی را گسترش می دهد باید یک پیاده سازی برای روش انتزاعی ارائه دهد.
- پشتیبانی از پلی مورفیسم: روشهای انتزاعی یک جزء حیاتی در پیادهسازی چندشکلی در برنامهنویسی شی گرا هستند.
انواع روش های چکیده
به طور کلی، هیچ «نوع» متمایزی از روشهای انتزاعی وجود ندارد زیرا ویژگی اصلی آنها عدم پیادهسازی است. با این حال، روشهای انتزاعی را میتوان بر اساس پارامترها، نوع بازگشتی و استثناهایی که میتوانند ایجاد کنند، مانند روشهای معمولی متمایز کرد.
استفاده از روش های چکیده و مسائل مرتبط
روش های انتزاعی زمانی استفاده می شوند که یک برنامه نویس بخواهد رفتارهای خاصی را در زیر کلاس ها اعمال کند. به عنوان مثال، در یک نرم افزار شبیه سازی باغ وحش، یک کلاس انتزاعی Animal
ممکن است یک روش انتزاعی داشته باشد makeSound()
. هر کلاس حیوانات بتن (مانند Lion
, Elephant
و غیره) باید این روش را اجرا کند و اطمینان حاصل کند که هر حیوانی می تواند صدا تولید کند، اگرچه صدای واقعی برای هر حیوان متفاوت است.
مسائل مربوط به استفاده از روش های انتزاعی اغلب به دلیل درک نادرست هدف آنها است. برای مثال، برنامه نویسان ممکن است به اشتباه سعی در نمونه سازی یک کلاس انتزاعی داشته باشند یا از اجرای یک روش انتزاعی در یک زیر کلاس مشخص غفلت کنند.
مقایسه با مفاهیم مشابه
ویژگی | روش های چکیده | روش های رابط (جاوا) | توابع مجازی خالص (C++) |
---|---|---|---|
تعریف | در یک کلاس انتزاعی تعریف شده است | در یک رابط تعریف شده است | در یک کلاس تعریف شده و به عنوان علامت گذاری شده است = 0 |
پیاده سازی | هیچ پیاده سازی در کلاسی که در آن تعریف شده اند وجود ندارد | هیچ پیاده سازی در رابطی که در آن تعریف شده اند وجود ندارد | هیچ پیاده سازی در کلاسی که در آن تعریف شده اند وجود ندارد |
زیر کلاس ها / کلاس های پیاده سازی | باید روش انتزاعی را پیاده سازی کرد | باید روش رابط را پیاده سازی کرد | باید تابع مجازی خالص را پیاده سازی کند |
ارث چندگانه | جاوا از وراثت چندگانه برای کلاس ها پشتیبانی نمی کند | از رابط ها می توان برای شبیه سازی وراثت چندگانه استفاده کرد | C++ از وراثت چندگانه پشتیبانی می کند |
چشم اندازها و فناوری های آینده
روشهای انتزاعی همچنان بخش مهمی از برنامهنویسی شی گرا هستند و نقش مهمی در طراحی نرمافزارهای انعطافپذیر و قابل نگهداری خواهند داشت. آنها در فناوریهای آینده مانند برنامهنویسی هوش مصنوعی یکپارچه خواهند بود، جایی که تعریف رفتارهای انتزاعی که میتوانند بعداً با پیادهسازیهای خاص پر شوند، بسیار مهم است.
سرورهای پروکسی و روش های چکیده
در زمینه سرورهای پروکسی می توان از روش های انتزاعی برای تعریف عملیات عمومی مانند ارسال یا دریافت داده استفاده کرد. به عنوان مثال، الف ProxyServer
کلاس abstract ممکن است یک متد انتزاعی داشته باشد handleRequest()
. کلاس های بتنی مانند HTTPProxyServer
و SocksProxyServer
پیادهسازیهای خاصی از این روش را فراهم میکند، که امکان رسیدگی به درخواستها را برای پروتکل خاص فراهم میکند.