انتزاع یا Abstraction:
پس از آشنایی با کپسولهسازی، حالا میخوام درباره دومین رکن مهم برنامهنویسی شیءگرا، یعنی انتزاع یا Abstraction صحبت کنم.
انتزاع به معنی سادهسازی و نمایش ویژگیهای اصلی یک شیء و پنهان کردن جزئیات غیرضروریه. فکر کنید به یک ریموت تلویزیون. شما فقط با دکمههای روی ریموت کار دارید و نیازی نیست بدونید داخلش چه اتفاقی میفته. یا وقتی ماشین میرونید، فقط با فرمون، پدالها و دنده سر و کار دارید و نیازی نیست بدونید موتور چطور کار میکنه.
هدف Abstraction در سیشارپ اینه که پیچیدگیهای غیرضروری رو پنهان کنه و فقط اطلاعات مهم و مرتبط رو نمایش بده. این کار باعث میشه کد سادهتر، قابل فهمتر و راحتتر برای استفاده بشه.
انتزاع به ما کمک میکنه تا:
چه مواقعی از انتزاع استفاده کنیم؟
انتزاع رو چطور در پروژهمون پیاده کنیم؟
در سیشارپ، میتونیم از
کلاسهای
abstract، interface ها، و متدهای virtual استفاده کنیم. این ابزارها به ما اجازه میدن تا
یک قالب کلی رو تعریف کنیم بدون اینکه جزئیات پیادهسازی رو مشخص کنیم.
مثال عملی: وسایل نقلیه
فرض کنید میخوایم یه
سیستم برای مدیریت انواع وسایل نقلیه بسازیم. میتونیم از انتزاع استفاده کنیم تا
یه رابط کلی برای همه وسایل نقلیه تعریف کنیم:
public abstract class Vehicle
{
public abstract void Start();
public abstract void Stop();
public virtual void Refuel()
{
Console.WriteLine("سوختگیری انجام شد");
}
}
public class Car : Vehicle
{
public override void Start()
{
Console.WriteLine("ماشین روشن شد");
}
public override void Stop()
{
Console.WriteLine("ماشین خاموش شد");
}
}
public class ElectricBike : Vehicle
{
public override void Start()
{
Console.WriteLine("دوچرخه برقی روشن شد");
}
public override void Stop()
{
Console.WriteLine("دوچرخه برقی خاموش شد");
}
public override void Refuel()
{
Console.WriteLine("باتری شارژ شد");
}
}
در این مثال، کلاس Vehicle یک قالب کلی برای همه وسایل نقلیه تعریف میکنه. کلاسهای Car و ElectricBike این قالب رو پیادهسازی میکنن. ما جزئیات داخلی هر وسیله نقلیه رو پنهان کردیم و فقط عملیاتهای اصلی رو نمایش دادیم.
انتزاع به ما کمک میکنه تا سیستمهای پیچیده رو سادهتر مدیریت کنیم و کد قابل فهمتر و انعطافپذیرتری بنویسیم.
از آنجایی که دو مفهوم انتزاع و ارثبری همیشه در مثالهایی که آورده می شود با همدیگر بکار می روند توضیحاتی در زیر اضافه می کنم تا این دو مفهوم از هم تفکیک داده شوند .
انتزاع (Abstraction) و ارثبری (Inheritance) دو مفهوم مرتبط اما متمایز در برنامهنویسی شیءگرا هستند.
بیایید این دو مفهوم را از هم تفکیک کنیم:
انتزاع (Abstraction)
انتزاع به معنای سادهسازی و پنهان کردن پیچیدگیهای غیرضروری است:
ارثبری (Inheritance)
ارثبری مکانیزمی برای استفاده مجدد از کد و ایجاد سلسله مراتب بین کلاسهاست:
تفکیک انتزاع و ارثبری
انتزاع میتواند بدون ارثبری وجود داشته باشد:
ارثبری میتواند بدون انتزاع وجود داشته باشد:
انتزاع و ارثبری اغلب با هم استفاده میشوند، اما هر یک مفهوم مستقلی دارند. انتزاع بر سادهسازی و پنهانسازی تمرکز دارد، در حالی که ارثبری بر به اشتراکگذاری و سازماندهی کد تأکید میکند.