انتزاع (Abstraction)
انتزاع یعنی پنهان کردن جزئیات اضافی و نشان دادن چیزهای مهم. مثلاً در بازی فقط دکمه «حرکت» را می بینی، نه کدهای پشتش! در برنامه نویسی C# با کلاس ها و متدهای abstract این کار انجام می شود.
کلاس و متد انتزاعی چیست؟
کلمه کلیدی abstract برای ساخت کلاس یا متدی به کار می رود که هنوز کامل نیست. مثل نقشه ای که فقط طرح اصلی دارد و بقیه را بعداً کامل می کنیم.
- کلاس انتزاعی (Abstract Class): نمی توان از آن شیء ساخت؛ باید از آن ارث بری شود.
- متد انتزاعی (Abstract Method): بدنه ندارد و کلاس فرزند باید آن را بنویسد.
نمونه ای از کلاس انتزاعی
abstract class Animal
{
public abstract void animalSound();
public void sleep()
{
Console.WriteLine("Zzz");
}
}
نکته: از این کلاس نمی توان مستقیماً شیء ساخت. باید کلاسی از آن ارث ببرد تا از متدهایش استفاده کنیم.
وراثت از کلاس انتزاعی
بیایید کلاس Animal را به صورت انتزاعی بسازیم و کلاس Pig را از آن ارث بدهیم.
// کلاس انتزاعی
abstract class Animal
{
public abstract void animalSound();
public void sleep()
{
Console.WriteLine("Zzz");
}
}
// کلاس فرزند
class Pig : Animal
{
public override void animalSound()
{
Console.WriteLine("The pig says: wee wee");
}
}
class Program
{
static void Main(string[] args)
{
Pig myPig = new Pig();
myPig.animalSound();
myPig.sleep();
}
}
در این مثال، متد animalSound() در کلاس Animal فقط تعریف شده، اما در Pig اجرا (پیاده سازی) شده است.
چرا از انتزاع استفاده کنیم؟
- امنیت بیشتر: جزئیات بی اهمیت را پنهان می کند.
- کد تمیزتر: فقط رفتار اصلی نمایش داده می شود.
- انعطاف بیشتر: هر کلاس می تواند جزئیات خودش را بسازد.
نکته: می توانی همین کار را با رابط ها (Interfaces) هم انجام دهی.
جمع بندی سریع
- انتزاع یعنی پنهان سازی جزئیات.
- کلاس های
abstractکامل نیستند. - نمی توان از کلاس انتزاعی شیء ساخت.
- کلاس های فرزند باید متدهای انتزاعی را بنویسند.
- برای نظم و امنیت در برنامه نویسی عالی است.
برای درک بهتر، بخش چندریختی را نیز بخوان؛ چون معمولاً با انتزاع همراه است.