اصل انتزاع در برنامه نویسی شی گرا (Abstraction Principle)

Abstraction Principle در برنامه نویسی شیء گرا به «نشان دادن» ویژگی های اساسی یک چیزی و «پنهان کردن» هرگونه اطلاعات پیاده سازی که برای کاربر غیر ضروری است اشاره دارد.

اصل انتزاع در برنامه نویسی شی گرا (Abstraction Principle)

انتزاع (Abstraction)

Abstraction یا انتزاع یک مفهوم کلیدی در برنامه نویسی شیء گرا (OOP) است و همچنین یکی از گیج کننده ترین آنهاست. انتزاع در برنامه نویسی شیء گرا به نشان دادن ویژگی های اساسی یک چیزی و پنهان کردن هرگونه اطلاعات پیاده سازی که برای کاربر غیر ضروری است اشاره دارد. برنامه نویسی شیء گرا منطق پنهان را انتزاع می کند تا کاربر مجبور به درک و یا حتی فکر کردن در مورد آن نباشد.

در برنامه نویسی شیء گرا، انتزاع یکی از مهم ترین مفاهیمی است که به برنامه نویسان اجازه می دهد تا فقط بر روی جنبه های مهم برای سیستم مورد بررسی تمرکز کنند. Abstraction برنامه نویس را قادر می سازد تا تمرکز خود را از جزئیات پیاده سازی عملیات به سمت کلاس ها و متد های موجود شیفت دهد تا برنامه نویسی را ساده تر کند.

انتزاع با استفاده از مثال هایی از وراثت (Inheritance) و کپسوله سازی (Encapsulation) قابل درک است. در ارث بری سلسله مراتبی، کلاس های والد یا کلاس های بالاتر شامل اجرای ساده و کلی هستند، اما کلاس فرزند یا کلاس پایین تر شامل اجرای با جزئیات و دقیق تری از کلاس های بالاتر است. این یک انتزاع است. وقتی یک برنامه نویس جزئیات پیاده سازی یک کلاس را از کلاس های دیگر در کپسوله سازی پنهان می کند، کلاس ساده تر می شود. در ادامه دو مثال دستگاه قهوه ساز و اتومبیل برای درک بیشتر مفهوم انتزاع آورده شده است.

دستگاه قهوه ساز

بیش از 1.4 میلیارد فنجان قهوه در سراسر جهان در روز ریخته می شود و حدود 45 درصد آن از ایالات متحده آمریکا می آید. بنابراین، می توان گفت که قهوه یکی از محبوب ترین نوشیدنی ها در جهان است. قهوه خانه ها با کمک دستگاه قهوه ساز با وارد کردن آب و دانه های قهوه در آن قهوه درست می کنند. آنها دستگاه را روشن می کنند و سپس نوع قهوه مورد نیاز را انتخاب می کنند و پس از آن دستگاه خوشمزه ترین قهوه را برای شما دم می کند. اما آیا تا به حال متوجه شده اید که دستگاه چگونه قهوه را دم می کند؟ دمای ایده آلی که استفاده می کند چقدر است؟ مقدار قهوه ای که در آن ریخته می شود چقدر است؟ بنابراین، دستگاه قهوه ساز عملکرد داخلی خود را انتزاعی می کند و به شما این امکان را می دهد که فنجان قهوه خود را دم کرده و از آن لذت ببرید.

این همان مفهومی است که در زبان های برنامه نویسی شیء گرا مانند C# استفاده می شود. عملکرد داخلی سیستم از برنامه نویس انتزاع می شود تا آنها بتوانند از برنامه نویسی لذت ببرند.

انتزاع در زبان سی شارپ

اتومبیل

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

ویژگی های کلی Abstraction عبارت است از:

1- Abstraction مشکل را در سطح طراحی حل می کند.

2- Abstraction داده های ناخواسته را پنهان می کند و داده های مرتبط را مورد توجه قرار می دهد.

3- Abstraction به شما این امکان را می دهد که به جای اینکه شیء چگونه آن را انجام می دهد، روی آنچه انجام می دهد تمرکز کنید.

در سی شارپ از دو طریق می توانیم به انتزاع دست یابیم - با استفاده از کلاس های انتزاعی (abstract classes) و با استفاده از رابط (interface). در ادامه هر دو مورد توضیح داده می شوند.

 اصل انتزاعی در سی شارپ

کلاس انتزاعی (Abstract Classes)

کلاس انتزاعی کلاسی است که باید حداقل یک متد انتزاعی داشته باشد. متد انتزاعی متدی است که با استفاده از کلمه کلیدی abstract اعلان می شود و بدنه آن خالی است. تعریف آن در subclass ها تعریف شده است.

یک کلاس انتزاعی می تواند شامل هر تعداد متد انتزاعی و غیرانتزاعی باشد، اما باید حداقل یک متد انتزاعی (abstract method) داشته باشد. ما نمی توانیم نمونه هایی (اشیاء) از یک کلاس انتزاعی ایجاد کنیم، اما می توانیم از زیر کلاس های آن تعدادی اشیاء بسازیم (اگر انتزاعی نباشند).

به عنوان مثال فرض کنید شرکتی فقط دو نوع کارمند استخدام می کند - راننده یا توسعه دهنده. اکنون باید نرم افزاری برای ذخیره اطلاعات مربوط به آنها ایجاد کنید. بنابراین، در اینجا یک ایده وجود دارد - نیازی به ساخت اشیاء از کلاس کارمند نیست. ما اشیاء را فقط از راننده یا توسعه دهنده می سازیم. همچنین هر دو باید حقوق داشته باشند. بنابراین، باید یک متد رایج برای اطلاع از حقوق وجود داشته باشد. بنابراین، می توانیم Employee را یک کلاس انتزاعی و Developer and Driver را زیرکلاس های آن قرار دهیم.

کلاس انتزاعی
Abstract Class
خروجی قطعه کد بالا در ادامه نشان داده شده است.
کلاس انتزاعی

کلاس انتزاعی Employee : Employee یک کلاس انتزاعی است که از کلمه کلیدی "abstract" استفاده می کند. از آنجایی که Employee یک کلاس انتزاعی است، بنابراین باید یک متد انتزاعی در آن وجود داشته باشد. این متد در اینجا ()GetSalary است.

()abstract int GetSalary : توجه داشته باشید که body ندارد و بدنه آن باید در زیر کلاس های آن تعریف شود و کلمه کلیدی abstract نیز در اینجا استفاده می شود. در هر دو زیر کلاس متد GetSalary تعریف شده است.

Interfaceوارتباط آن با مفهوم Abstraction

یک Interface شبیه به یک کلاس انتزاعی است اما تمام متدهای آن به طور پیش فرض انتزاعی هستند. یعنی نمی تواند متد های غیرانتزاعی داشته باشد. ما از کلمه کلیدی Interface برای تعریف یک Interface استفاده می کنیم. از آنجایی که تمام متدهای یک Interface به طور پیش فرض انتزاعی هستند، بنابراین ما قبل از اعلان متد از public abstract استفاده نمی کنیم. در مثال زیر، Shape را با استفاده از کلمه کلیدی interface به عنوان یک interface اعلام کرده ایم. هر دو متد داخل آن به طور پیش فرض public و abstract هستند.

آموزش اینترفیس در سی شارپ
خروجی قطعه کد بالا در زیر نمایش داده شده است.
Interface and Abstraction
Interface ها در زبان سی شارپ کلاس انتزاعی Abstract Class

مقالات این دسته بندی