کپسوله سازی در سی شارپ Encapsulation — نحوه پیاده سازی با مثال

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

در این مقاله، مفهوم کپسوله سازی در سی شارپ «#Encapsulation in C»، نحوه پیاده‌سازی آن در زبان سی‌شارپ و مزایای آن مانند پنهان‌سازی داده، افزایش انعطاف‌پذیری، قابلیت استفاده مجدد و تسهیل فرآیند تست بررسی خواهد شد. با ارائه مثال‌های کاربردی، خواهید دید که چگونه این تکنیک می‌تواند کد شما را ایمن‌تر، خواناتر و قابل نگهداری‌تر کند.

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

کپسوله سازی در سی شارپ

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

چرا کپسوله‌سازی مهم است؟

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

ویژگی های کپسوله سازی در سی شارپ

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

از آنجا که داده‌های یک کلاس از دیگر کلاس‌ها پنهان می‌شوند، کپسوله‌سازی به عنوان پنهان‌سازی داده «Data Hiding» نیز شناخته می‌شود.

برای اعمال کپسوله سازی در سی شارپ، موارد زیر باید رعایت شود:

  • اعلام تمامی متغیرهای کلاس به‌صورت private تا از دسترسی مستقیم جلوگیری شود.
  • استفاده از ویژگی‌های «Properties» سی‌شارپ در کلاس برای تنظیم و دریافت مقادیر متغیرها.

تصویری از مفهوم کپسوله سازی

چگونه در سی‌شارپ از کپسوله‌سازی استفاده کنیم؟

استفاده از سطح دسترسی private: متغیرهای کلاس به‌صورت private تعریف می‌شوند تا فقط از درون کلاس قابل دسترسی باشند.

ایجاد ویژگی‌های «Properties» مخصوص خواندن و نوشتن اطلاعات: برای دسترسی ایمن به متغیرها، از ویژگی‌های get و set استفاده می‌شود. این کار باعث می‌شود داده‌ها طبق شرایط خاصی تغییر کنند.

با استفاده از کپسوله‌سازی، برنامه‌ای منظم‌تر، ایمن‌تر و با قابلیت نگهداری بهتر خواهید داشت.

پیاده سازی Encapsulation در سی شارپ

در ادامه این مقاله از مجموعه آموزشی پی استور مثال‌هایی آورده‌ایم که روش‌های پیاده‌سازی کپسوله سازی در سی‌شارپ را نشان می‌دهد:

مثال

// Demonstration of Encapsulation
using System;

public class DemoEncap 
{
    // private variables declared
    // can accessed by
    // public methods of class
    private String studentName;
    private int studentAge;

    public String Name
    {
        get { return studentName; }

        set { studentName = value; }
    }

    // using accessors to get and
    // set the value of studentAge
    public int Age
    {
        get { return studentAge; }

        set { studentAge = value; }
    }
}

class PStore 
{
    static public void Main()
    {
        DemoEncap obj = new DemoEncap();

        // calls set accessor of the property Name,
        // and pass value
        obj.Name = "sana";

        // calls set accessor of the property Age,
        // and pass "21" as value of the
        // standard field 'value'
        obj.Age = 21;

        // Displaying values
        Console.WriteLine(" Name : " + obj.Name);
        Console.WriteLine(" Age : " + obj.Age);
    }
}

خروجی

Name : sana
Age : 21

در برنامه‌ی بالا، کلاس DemoEncap به‌صورت کپسوله‌شده عمل می‌کند زیرا متغیرها به‌صورت private تعریف شده‌اند. برای دسترسی به این متغیرهای خصوصی، از ویژگی‌های Name و Age استفاده شده است که شامل متدهای get و set برای دریافت و تنظیم مقادیر فیلدهای خصوصی هستند.

ویژگی‌ها (Accessors) به‌صورت public تعریف شده‌اند تا بتوانند توسط کلاس‌های دیگر مورد دسترسی قرار گیرند.

مثال

// Demonstration of Encapsulation
using System;

public class BankAccount 
{
    private decimal balance;

      // Constructor
    public BankAccount(decimal initialBalance)
    {
        balance = initialBalance;
    }

      // Deposit Method
    public void Deposit(decimal amount)
    {
        balance += amount;
    }

      // Withdraw Method
    public void Withdraw(decimal amount)
    {
        if (balance >= amount) {
            balance -= amount;
        }
        else {
            Console.WriteLine("Insufficient funds.");
        }
    }

      // Check the Balance of Account
    public decimal GetBalance() { 
          return balance; 
    }
}

class Program 
{
    static void Main(string[] args)
    {
          // Create new Bank Account
        BankAccount myAccount = new BankAccount(2000);

        myAccount.Deposit(500);
        Console.WriteLine("Balance: " + myAccount.GetBalance());

        myAccount.Withdraw(3000);
        Console.WriteLine("Balance: " + myAccount.GetBalance());
    }
}

خروجی

Balance: 2500
Insufficient funds.
Balance: 2500

در مثال بالا، نمی‌توان مستقیماً به متغیرهای private دسترسی داشت، زیرا آن‌ها پنهان شده‌اند. تنها می‌توان با استفاده از متدهایی مانند ()Withdraw()، GetBalance و غیره عملیات موردنظر را انجام داد.

ما یک شیء به نام Myaccount از کلاس BankAccount با موجودی اولیه‌ی ۱۰۰۰ ایجاد می‌کنیم. سپس متدهای Deposit و Withdraw را برای تغییر موجودی و متد GetBalance را برای دریافت موجودی فعلی فراخوانی می‌کنیم.

نکته:
نمی‌توانیم مستقیماً به فیلد balance دسترسی داشته باشیم و باید از متدهای public ارائه‌شده توسط کلاس برای تعامل با آن استفاده کنیم.

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

  • پنهان‌سازی داده «Data Hiding»: کاربر هیچ ایده‌ای درباره‌ی نحوه‌ی پیاده‌سازی داخلی کلاس ندارد. این که چگونه مقادیر در متغیرهای کلاس ذخیره می‌شوند از دید کاربر مخفی است. کاربر فقط می‌تواند از طریق متدهای دسترسی‌دهنده (Accessors) به پاسخ‌ها دسترسی پیدا کند.
  • افزایش انعطاف‌پذیری: می‌توان متغیرهای کلاس را تنها خواندنی (Read-Only) یا تنها نوشتنی (Write-Only) کرد، بسته به نیاز. برای متغیرهای فقط خواندنی، فقط از Get Accessor استفاده می‌شود.برای متغیرهای فقط نوشتنی، فقط از Set Accessor استفاده می‌شود.
  • قابلیت استفاده مجدد «Reusability»: کپسوله سازی در سی شارپ باعث بهبود قابلیت استفاده مجدد می‌شود و اعمال تغییرات مطابق نیازهای جدید را آسان‌تر می‌کند.
  • آزمایش «Testing»: کد کپسوله‌شده برای آزمایش‌های واحد (Unit Testing) بسیار ساده‌تر است.

نتیجه‌گیری

کپسوله‌سازی «Encapsulation» یکی از اصول کلیدی در برنامه‌نویسی شیءگرا است که نه‌تنها امنیت و پنهان‌سازی داده‌ها را تضمین می‌کند، بلکه باعث سازمان‌دهی بهتر کدها و افزایش خوانایی آن‌ها می‌شود. با استفاده از کپسوله‌سازی، توسعه‌دهندگان می‌توانند از دسترسی مستقیم به داده‌های حساس جلوگیری کرده و با تعریف متدهای عمومی (Public Methods)، کنترل بیشتری بر نحوه دسترسی به داده‌ها داشته باشند.

این ویژگی، انعطاف‌پذیری کد را بالا برده و امکان ایجاد متغیرهای فقط خواندنی یا فقط نوشتنی را فراهم می‌کند. همچنین، قابلیت استفاده مجدد و تست آسان‌تر کد نیز از دیگر مزایای این رویکرد است.

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


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


کپسوله سازی در سی شارپ چیست؟

کپسوله‌سازی (Encapsulation) یکی از اصول برنامه‌نویسی شیءگرا (OOP) است که داده‌ها و توابع مرتبط را در یک کلاس قرار می‌دهد و از دسترسی مستقیم به داده‌ها جلوگیری می‌کند، مگر از طریق متدهای مشخص‌شده (getter و setter).

چرا از کپسوله‌سازی در #C استفاده می‌کنیم؟

افزایش امنیت داده‌ها و جلوگیری از تغییرات ناخواسته. پنهان‌سازی جزئیات پیاده‌سازی. ایجاد یک رابط (interface) مشخص برای تعامل با داده‌ها. افزایش انعطاف‌پذیری و قابلیت نگهداری کد

چگونه می‌توان در سی شارپ کپسوله سازی را پیاده سازی کرد؟

با استفاده از فیلدهای خصوصی (private) و متدهای عمومی (public methods) یا ویژگی‌ها (Properties) برای کنترل دسترسی به داده‌ها.

چه تفاوتی بین فیلدهای خصوصی و ویژگی‌ها (Properties) در #C وجود دارد؟

فیلدهای خصوصی (private fields) فقط داخل کلاس قابل دسترسی هستند. ویژگی‌ها (Properties) امکان کنترل دسترسی به داده‌ها را با استفاده از متدهای get و set فراهم می‌کنند.

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

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

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



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


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