فهرست سرفصل‌های #C
خانه (HOME) مقدمه (Intro) شروع کار (Get Started) سینتکس (Syntax) خروجی (Output) کامنت ها (Comments) متغیرها (Variables) ثابت ها (Constants) نمایش متغیرها (Display Variables) متغیرهای متعدد (Multiple Variables) شناسه ها (Identifiers) انواع داده (Data Types) تبدیل نوع (Type Casting) ورودی کاربر (User Input) عملگرها (Operators) انتساب (Assignment) مقایسه (Comparison) منطقی (Logical) ریاضی (Math) رشته ها (Strings) اتصال رشته ها (Concatenation) درون گذاری رشته (Interpolation) دسترسی به رشته ها (Access Strings) کاراکترهای ویژه (Special Characters) بولی ها (Booleans) if (If...Else) else (If...Else) else if (If...Else) شکل کوتاه if..else (Short hand if..else) سوئیچ (Switch) حلقه while (While Loop) حلقه for (For Loop) حلقه foreach (Foreach loop) شکستن/ادامه (Break/Continue) آرایه ها (Arrays) حلقه روی آرایه (Loop through an array) مرتب سازی آرایه ها (Sort arrays) آرایه های چندبعدی (Multidimensional arrays) متدها (Methods) پارامترها (Parameters) پارامتر پیش فرض (Default Parameter) مقادیر بازگشتی (Return Values) آرگومان های نام دار (Named Arguments) بارگذاری متد (Method Overloading) شیء گرایی (OOP) کلاس ها/اشیا (Classes/Objects) چند شیء (Multiple Objects) اعضای کلاس (Class Members) سازنده ها (Constructors) قیدهای دسترسی (Access Modifiers) ویژگی ها (Properties) وراثت (Inheritance) چندریختی (Polymorphism) انتزاع (Abstraction) اینترفیس (Interface) چند اینترفیس (Multiple Interfaces) شمارش ها (Enums) فایل ها (Files) استثناها (Exceptions) افزودن دو عدد (Add Two Numbers) نمونه ها (Examples)
#C

#C — انتزاع (Abstraction)

آخرین بروزرسانی: 1404/08/05

انتزاع (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 کامل نیستند.
  • نمی توان از کلاس انتزاعی شیء ساخت.
  • کلاس های فرزند باید متدهای انتزاعی را بنویسند.
  • برای نظم و امنیت در برنامه نویسی عالی است.

برای درک بهتر، بخش چندریختی را نیز بخوان؛ چون معمولاً با انتزاع همراه است.