abstract چیست؟



visibility  
mode_comment   ۷

در دنیای برنامه نویسی استانداردترین کدها آن هایی هستند که دارای کمترین تکرار کد باشند. اما موقعیت هایی به وجود می آید که ما مجبور می شویم کدهای یکسان را برای انجام کارهای تقریبا یکسان با تغییرات کوچک بارها و بارها بنویسیم. در این وضعیت باید به دنبال راهکارهایی باشیم که این تکرارها را به حداقل ممکن برسانیم. برای مبارزه با این تکرارها از کلاس ها و متدهای abstract یا انتزاعی استفاده می کنیم.

abstract چیست

خط تولید یک کارخانه دونات پزی را در نظر بگیرید. دونات ها با شیوه پخت یکسان پخته می شوند. پس از آن سس روکش مناسب با رنگ ها و طعم های مختلف مثل خامه رنگی، شکلات، قرص های رنگی و ... روی آن ها ریخته می شود. در پایان بسته به نوع سسی که روی آن ها ریخته شده بسته بندی می شوند. می بینید که همه دونات ها با هر طعم و شکلی که باشند شیوه پخت یکسانی دارند. روش نادرست این است که برای هر رنگ دونات یک خط تولید جداگانه ساخته شود. آیا این روش منطقی است؟ روش دیگر این است که خط تولید تا مرحله پخت مشترک باشد. سپس دونات ها در مرحله ریختن سس به خط تولید جداگانه دسته بندی و در پایان بسته بندی شوند. کد زیر خط تولید جداگانه دونات شکلاتی را در کلاس ChocolateDonut نمایش می دهد:

برای تهیه دونات با سس توت فرنگی نیز همین مراحل تکرار می شود:

اما گفتیم که نیازی به تکرار کدهای تهیه دونات نیست. چراکه فرآیند تهیه دونات به جز بخش تزئین، یک فرآیند قراردادی و تکراری است. بنابراین بخش های تکراری کد را از طریق استفاده از abstract به یک قرارداد تبدیل می کنیم:

همانطور که در کد می بینید، یک کلاس abstract کلاسی است که شامل حداقل یک متد abstract باشد. متدهای abstract متدهایی هستند که فاقد پیاده سازی هستند و فقط کلاس های فرزند را وادار می کنند آن متدها را در خود پیاده سازی کنند. در کد بالا با استفاده از کلمه کلیدی extends کلاس فرزند را وادار کرده ایم از کلاس والد abstract تبعیت کند. در صورتی که کلاس ChocolateDonut، متد addDressing را پیاده سازی نکند، برنامه با ارور مواجه می شود.

از این پس برای ساخت دونات های جدید با هر نوع سس تزئینی، کافی است کلاس دونات جدید، کلاس abstract  با نام DonutTemplate را پیاده سازی نماید.

نتیجه گیری

در این مطلب به بررسی abstract و روش استفاده از آن پرداختیم. همانطور که مشاهده کردید، استفاده از این روش خطوط کد را کاهش داده و آن را قانونمند و قابل اعتماد می کند. در کار تیمی، ایجاد قراردادها به سرپرست تیم کمک می کند کدهای یکپارچه دریافت کند. در واقع یکی از کاربرد های اصلی abstract زمانی است که می خواهید توسعه دهندگان تیم خود را مجبور کنید تعدادی متد ایجاد کنند و ترجیح می دهید متدهای آن ها حتما مطابق با ساختارهای تعیین شده از طرف شما باشد. نکته مهم دیگر این است که یک کلاس می تواند چندین interface را پیاده سازی کند ولی فقط از یک کلاس abstract به ارث ببرد. چرا که interface صرفا مجموعه ای از متدهای abstract است. برای آشنایی بیشتر با interface می توانید مقاله ما در مورد interface و کاربرد آن را مطالعه کنید.

7Learn Experts
comment دیدگاه کاربران
وحید صالحی replyپاسخ

و اینگونه هستش که برنامه نویسی شی گرا لذت بخش میشه احسنت.

حامد

👍👍👍

زهرا فرحمند

ممنونم جناب صالحی عزیز 🙂

Alireza Shahsavary replyپاسخ

ممنون بایت مطالب فوق العادتون ، مثال ها واقعا قابل درک و عالی هستن ♥

زهرا فرحمند

ممنونم لطف دارید جناب شهسواری 🙂

محمد محبتی replyپاسخ

خیلی ممنون خوب بود.

مصطفی replyپاسخ

ممنون بابت نکاتی که بیان کردید، اینطور مثال زدن، کار هر کسی نیست. موفق باشید

add_circle ارسال دیدگاه

خوشحال میشیم دیدگاه و یا تجربیات خودتون رو با ما در میون بذارید :