کلاس ها و اشیا در سی شارپ #C — راهنمای جامع

تصویر شاخص کلاس ها و اشیا در سی شارپ

در این مقاله از سری مقالات آموزشی پی استور به بررسی مفاهیم پایه‌ای کلاس ها و اشیا در سی شارپ «#Class and Objects in C» پرداخته و نحوه‌ی تعریف، استفاده و مدیریت آن‌ها را توضیح می‌دهیم. همچنین، با ارائه مثال‌هایی از نحوه‌ی استفاده از سازنده‌ها و تخریب‌گرها، راهکارهای بهینه‌سازی استفاده از حافظه و عملکرد سیستم را مورد بررسی قرار می دهیم.

مقدمه

در برنامه‌نویسی شیءگرا (Object-Oriented Programming یا OOP)، مفاهیم کلاس‌ها و اشیاء به عنوان مبنای اصلی توسعه نرم‌افزار شناخته می‌شوند. این مفاهیم به توسعه‌دهندگان این امکان را می‌دهند که کدهایی ساختارمند، قابل نگهداری و مقیاس‌پذیر ایجاد کنند. کلاس‌ها به‌عنوان طرح یا پروتوتایپ‌هایی برای ایجاد اشیاء عمل می‌کنند، در حالی‌که اشیاء نمونه‌هایی از این کلاس‌ها هستند که دارای ویژگی‌ها و رفتارهای منحصر به فرد خود می‌باشند.

پیش از یادگیری کلاس‌ها و اشیاء، آشنایی با مفاهیم پایه‌ای برنامه‌نویسی مانند متغیرها، انواع داده‌ها، دستورات شرطی، آرایه‌ها، رشته‌ها و حلقه‌ها ضروری است. همچنین، نصب و راه‌اندازی یک محیط توسعه مثل ویژوال استودیو به شما کمک می‌کند تا کدنویسی را به‌صورت عملی شروع کنید.

کلاس و شیء مفاهیم پایه‌ای برنامه‌نویسی شیءگرا هستند که حول موجودات دنیای واقعی می‌چرخند. یک کلاس یک طرح یا پروتوتایپ «prototype» تعریف شده توسط کاربر است که از آن اشیاء ساخته می‌شوند. اساساً، یک کلاس فیلدها و متدها (توابع عضو که اقدامات را تعریف می‌کنند) را در یک واحد ترکیب می‌کند. در #C، کلاس‌ها از چندشکلی «Polymorphism» و ارث‌بری «Inheritance» پشتیبانی می‌کنند و همچنین مفاهیم کلاس‌های مشتق شده و کلاس‌های پایه را فراهم می‌آورند.

کلاس در سی‌شارپ

برای درک اشیاء ابتدا باید مفهوم کلاس را یاد بگیریم.

کلاس مانند نقشه یا طرحی برای ایجاد اشیاء است. به عبارت دیگر، کلاس، الگویی «Blueprint» است که مشخص می‌کند یک شیء چه ویژگی‌ها و رفتارهایی دارد.

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

همان‌طور که می‌توان تعداد زیادی خانه از یک طرح اولیه ساخت، می‌توان اشیاء متعددی را از یک کلاس ایجاد کرد.

تعریف کلاس در سی شارپ

به‌طور کلی، تعریف یا اعلان «Declaring» یک کلاس تنها شامل کلمه کلیدی class است که به دنبال آن شناسایی‌کننده (نام) کلاس قرار می‌گیرد. با این حال، برخی ویژگی‌های اختیاری می‌توانند همراه با اعلان کلاس بر اساس نیاز برنامه استفاده شوند. اعلان کلاس‌ها می‌توانند این اجزا را شامل شوند، به ترتیب:

  • اصلاح‌کننده‌ها «Modifiers»: برای تعریف سطوح دسترسی استفاده می‌شوند و اصلاح‌کننده پیش‌فرض کلاس داخلی است.
  • کلمه کلیدی کلاس «Keyword class»: از کلمه کلیدی class برای اعلان یک کلاس استفاده می‌شود.
  • شناسایی‌کننده کلاس «Class Identifier»: متغیر از نوع کلاس ارائه می‌شود. شناسایی‌کننده (نام کلاس) باید طبق سنت با حرف بزرگ شروع شود.
  • کلاس پایه «Base class» (اختیاری): اگر کلاسی از کلاس والد خود (کلاس فوقانی) ارث‌بری می‌کند، در این صورت با علامت : (دوتا نقطه) شروع می‌شود.
  • رابط‌ها «Interfaces» (اختیاری): فهرستی از رابط‌هایی که کلاس پیاده‌سازی کرده است، در صورت وجود، به صورت جدا شده با کاما و پیش از آن با علامت : (دوتا نقطه) قرار می‌گیرد. یک کلاس می‌تواند بیشتر از یک رابط را پیاده‌سازی کند.
  • بدنه «Body»: بدنه کلاس با { } (براکت‌های منحنی) احاطه شده است و می‌تواند اعضای کلاس مانند ویژگی‌ها، متدها، سازنده‌ها «Constructor»، رویدادها و غیره را شامل شود.

مثال کلاس در سی شارپ

قطعه کد زیر نمونه‌ای ساده از نحوه‌ی استفاده از کلاس‌ها و متدها در زبان برنامه‌نویسی #C است.

// Declaration of class
using System;

// declaring public class
public class PStore
{
    // field variable
    public int a, b;

    // member function or method
    public static void display()
    {
        Console.WriteLine("Class & Objects in C#");
    }

    public static void Main(String[] args)
    {
        display();
    }
}

خروجی

Class & Objects in C#

توضیح: کد بالا یک شیء از کلاس Dog را با ویژگی‌های خاص ایجاد کرده و اطلاعات مربوط به آن را به صورت متنی به کنسول نمایش می‌دهد. از طریق این کد می‌توان مشاهده کرد که چگونه کلاس ها و اشیا در سی شارپ کار می‌کنند و چطور سازنده‌ها و متدهای دسترسی برای مدیریت ویژگی‌های یک شیء استفاده می‌شوند.

اشیاء در سی شارپ

شیء «Object » واحد پایه‌ای برنامه‌نویسی شیءگرا است و نمایانگر موجودات دنیای واقعی است. همچنین می‌تواند به نمونه‌ای از یک کلاس اشاره کند. شیء از آن کلاس ایجاد می‌شود. یک شیء داده‌ها را نگه می‌دارد و می‌تواند به متدها و ویژگی‌های آن‌ها دسترسی داشته باشد. در #C، یک شیء شامل موارد زیر است:

  • وضعیت «State»: این توسط ویژگی‌های یک شیء نمایان می‌شود و خواص شیء را منعکس می‌کند.
  • رفتار «Behaviour»: این توسط متدهای یک شیء نمایان می‌شود و همچنین پاسخ شیء را نسبت به اشیاء دیگر نشان می‌دهد.
  • هویت «Identity»: این به شیء یک نام منحصر به فرد می‌دهد و امکان تعامل یک شیء با دیگر اشیاء را فراهم می‌کند. برای مثال، یک سگ را به عنوان شیء در نظر بگیرید و نمودار زیر را برای هویت، وضعیت و رفتار آن مشاهده کنید.

تصویری از ویژگی‌، هویت و رفتار dog در شی

اشیاء معادل موجودات دنیای واقعی هستند. به عنوان مثال، یک برنامه گرافیکی ممکن است اشیائی مانند دایره، مربع، منو داشته باشد. یک سیستم خرید آنلاین ممکن است اشیائی مانند سبد خرید، مشتری و محصول داشته باشد.

تعریف اشیا در سی شارپ

تعریف یا اعلان «Declaring» اشیاء که به آن نمونه‌سازی کلاس گفته می‌شود.

هنگامی که یک شیء از یک کلاس ایجاد می‌شود، گفته می‌شود که کلاس نمونه‌سازی شده است. تمام نمونه‌ها ویژگی‌ها و رفتارهای کلاس را به اشتراک می‌گذارند. اما مقادیر آن ویژگی‌ها، یعنی وضعیت، برای هر شیء منحصر به فرد است. یک کلاس واحد می‌تواند هر تعداد نمونه داشته باشد.

مثال

تصویری از کلاس dog

همانطور که متغیرها را به صورت (type name) اعلام می‌کنیم. این به کامپایلر اطلاع می‌دهد که از نام برای ارجاع به داده‌هایی با نوع مشخص استفاده خواهیم کرد. با یک متغیر ابتدایی، این اعلام همچنین میزان صحیحی از حافظه را برای متغیر رزرو می‌کند. بنابراین، برای متغیرهای ارجاعی، نوع باید دقیقاً نام یک کلاس مشخص باشد.

Dog Buddy;

اگر یک متغیر ارجاعی (Buddy) را به این صورت اعلام کنیم، مقدار آن تا زمانی که یک شیء واقعی ایجاد شده و به آن اختصاص داده نشود، نامشخص (null) خواهد بود. صرفاً اعلام یک متغیر ارجاعی، شیء‌ای ایجاد نمی‌کند.

مقداردهی اولیه شیء در سی شارپ

کلمه کلیدی new یک کلاس را با تخصیص حافظه برای یک شیء جدید نمونه‌سازی کرده و یک ارجاع به آن حافظه برمی‌گرداند. عملگر new همچنین سازنده کلاس را فراخوانی می‌کند.

مثال

// Initialization of an object
using System;

// Class Declaration
public class Dog
{

    // Instance Variables
    String name;
    String breed;
    int age;
    String color;

    // Constructor Declaration of Class
    // same name as class
    public Dog(String name, String breed,
                int age, String color)
    {
        this.name = name;
        this.breed = breed;
        this.age = age;
        this.color = color;
    }

    public String GetName()
    {
        return name;
    }

    public String GetBreed()
    {
        return breed;
    }

    public int GetAge()
    {
        return age;
    }

    public String GetColor()
    {
        return color;
    }

    public override String ToString()
    {
        return "my name is: " + name +
               "\nmy breed is: " + breed +
               "\nmy age is: " + age;
    }

    public static void Main(String[] args)
    {
        // Creating object
        Dog Buddy = new Dog("Buddy", "Golden Retriever", 3, "Golden");
        Console.WriteLine(Buddy.ToString());
    }
}

خروجی

my name is: Buddy
my breed is: Golden Retriever
my age is: 3

کد بالا یک شیء از کلاس Dog را با ویژگی‌های خاص ایجاد کرده و اطلاعات مربوط به آن را به صورت متنی به کنسول نمایش می‌دهد. از طریق این کد می‌توان مشاهده کرد که چگونه کلاس‌ها و اشیاء در #C کار می‌کنند و چطور سازنده‌ها و متدهای دسترسی برای مدیریت ویژگی‌های یک شیء استفاده می‌شوند.

وقتی که یک شیء از کلاس Dog ایجاد می‌کنیم و پارامترها را به سازنده می‌دهیم، حافظه برای این اشیاء مختلف تخصیص داده می‌شود و آدرس آن‌ها به شیء کلاس اشاره می‌کند، همانطور که در تصویر نشان داده شده است:

تصویری برای حافظه کلاس ها و اشیا در سی شارپ

نکات مهم کلاس ها و اشیا در سی شارپ

  • کلاس‌ها و اشیاء مفاهیم بنیادی OOP هستند و با استفاده از آن‌ها می‌توانیم جنبه‌های مختلفی مانند ارث‌بری «Inheritance»، کپسوله‌سازی «Encapsulation»، انتزاع «Abstraction» و غیره را به دست آوریم.
  • برای مقداردهی به مقادیر می‌توانیم از سازنده «Constructor» استفاده کنیم که این فرآیند را به صورت فشرده‌تر انجام می‌دهد، همانطور که در مثال بالا نشان داده شده است.
  • هنگامی که یک شیء ایجاد می‌شود، حافظه برای ذخیره داده‌های آن تخصیص داده می‌شود و آدرس شیء به متغیر اختصاص داده می‌شود.
  • برای استفاده بهینه از حافظه، می‌توانیم از نابودکننده‌ها «Destructor» برای از بین بردن نمونه استفاده کنیم. اگر کار آن تمام شده باشد، نیازی به ادامه آن نیست.

نتیجه‌گیری

در نهایت، کلاس‌ها و اشیاء مفاهیم اساسی در برنامه‌نویسی شیءگرا هستند که به توسعه‌دهندگان این امکان را می‌دهند تا نرم‌افزارهایی منظم و مقیاس‌پذیر ایجاد کنند. در زبان C#، استفاده از کلمه کلیدی new برای نمونه‌سازی کلاس‌ها، تخصیص حافظه و فراخوانی سازنده‌ها، فرآیند ایجاد اشیاء را ساده و کارآمد می‌سازد. همچنین، با استفاده از نابودکننده‌ها، می‌توان به بهینه‌سازی مصرف حافظه و مدیریت منابع پرداخته و از به هدر رفتن آن‌ها جلوگیری کرد. در مجموع، درک صحیح از نحوه‌ی استفاده از کلاس‌ها و اشیاء در برنامه‌نویسی C#، یکی از ارکان اصلی برای توسعه برنامه‌های شیءگرا و دستیابی به کدهای با کیفیت و قابل نگهداری است.


سوالات متداول


تفاوت بین کلاس و شیء چیست؟

کلاس: یک قالب یا طرح است که ویژگی‌ها و رفتارهای اشیاء را تعریف می‌کند. شیء: نمونه‌ای از کلاس است که در زمان اجرا ایجاد شده و می‌تواند از اعضای کلاس استفاده کند.

آیا می‌توان از یک کلاس چند شیء ایجاد کرد؟

بله، می‌توان تعداد نامحدودی شیء از یک کلاس ایجاد کرد. هر شیء حافظه مخصوص به خود را برای فیلدها دارد اما رفتارها (متدها) مشترک هستند.

آیا می‌توان فیلدها و متدهای خصوصی یک کلاس را از طریق شیء دسترسی داشت؟

خیر، اعضای خصوصی (Private) یک کلاس تنها از درون همان کلاس قابل دسترسی هستند و نمی‌توان مستقیماً از طریق شیء به آن‌ها دسترسی داشت.

تفاوت بین فیلد و متد چیست؟

فیلد: متغیری در کلاس است که داده‌ها را ذخیره می‌کند. متد: تابعی در کلاس است که وظیفه خاصی را انجام می‌دهد.

آیا می‌توان اعضای کلاس را پس از ایجاد شیء تغییر داد؟

بله، اگر اعضای کلاس عمومی (Public) باشند یا از طریق متدهای مشخص در دسترس قرار گیرند، می‌توان آن‌ها را تغییر داد.

چه زمانی باید از کلاس و شیء استفاده کرد؟

هر زمان که نیاز به تعریف موجودیت‌های دنیای واقعی (مانند کاربر، محصول، خودرو و ...) و مدیریت رفتارها و ویژگی‌های آن‌ها داشته باشید، استفاده از کلاس و شیء بهترین رویکرد است.

میزان رضایتمندی
لطفاً میزان رضایت خودتان را از این مطلب با دادن امتیاز اعلام کنید.
[ امتیاز میانگین 5 از 9 نفر ]
اگر بازخوردی درباره این مطلب دارید یا پرسشی دارید که بدون پاسخ مانده است، آن را از طریق بخش نظرات مطرح کنید.
منابع و مراجع:
programiz مجله پی استور geeksforgeeks

دیدگاه‌ خود را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *



برچسب‌ها:
سی شارپ


پیمایش به بالا