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

تیم تحریریه 1403/12/11 0 75
لینک کوتاه https://zoheirsoftware.com/z/4da7ef2a5 |
کپسوله سازی (Encapsulation) در سی شارپ,کپسوله‌سازی چیست؟,کپسوله‌سازی با استفاده از Access Modifier

کپسوله‌سازی (Encapsulation) در سی شارپ

کپسوله‌سازی (Encapsulation) یکی از اصول مهم برنامه‌نویسی شی‌گرا (OOP) در سی‌شارپ است که برای مخفی‌سازی داده‌ها و کنترل دسترسی به اعضای کلاس استفاده می‌شود.

در این روش، فیلدهای کلاس معمولاً به‌صورت private تعریف می‌شوند تا از تغییرات مستقیم خارج از کلاس جلوگیری شود.

سپس، با استفاده از متدهای عمومی (public) یا ویژگی‌ها (properties)، امکان مشاهده یا تغییر داده‌ها به‌صورت کنترل‌شده فراهم می‌شود.

این کار باعث افزایش امنیت، انسجام (cohesion) و کاهش وابستگی (coupling) در برنامه می‌شود.

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

این رویکرد علاوه بر بهبود خوانایی و نگه‌داری کد، باعث می‌شود تغییرات داخلی کلاس بدون تأثیر بر سایر بخش‌های برنامه انجام شود.

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

 

 

 

کپسوله‌سازی (Encapsulation) در سی شارپ

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

کپسوله‌سازی (Encapsulation) یکی از مفاهیم اصلی برنامه‌نویسی شی‌گرا (OOP) است که برای مخفی کردن جزئیات پیاده‌سازی و کنترل دسترسی به داده‌ها در کلاس‌ها استفاده می‌شود.

در این روش، متغیرهای یک کلاس به‌صورت خصوصی (private) تعریف می‌شوند و دسترسی به آن‌ها فقط از طریق متدهای عمومی (public methods) یا ویژگی‌ها (Properties) امکان‌پذیر است.

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

  • افزایش امنیت داده‌ها

    جلوگیری از تغییر مستقیم متغیرها و کنترل دقیق بر داده‌ها.
  • ایجاد یکپارچگی در داده‌ها

    کنترل مقداردهی و اعتبارسنجی داده‌ها قبل از ذخیره‌سازی.
  • کاهش وابستگی کلاس‌ها

    تغییرات داخلی یک کلاس بر سایر کلاس‌ها تأثیر نمی‌گذارد.
  • تسهیل نگهداری و توسعه کد

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

    کاربران کلاس نیازی به دانستن نحوه عملکرد داخلی آن ندارند.

 

 

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

 

کپسوله‌سازی با استفاده از Access Modifier

در سی شارپ، برای پیاده‌سازی کپسوله‌سازی از سطوح دسترسی (Access Modifiers) استفاده می‌شود. مهم‌ترین سطوح دسترسی عبارت‌اند از:

  • private

    فقط درون همان کلاس قابل دسترسی است. 
  • public

    از هر جای برنامه قابل دسترسی است.
  •  protected

    فقط در کلاس پایه و کلاس‌های مشتق‌شده قابل استفاده است.
  • internal

    فقط درون همان اسمبلی (Assembly) قابل دسترسی است.
  •  protected internal

    ترکیبی از protected و internal، فقط در همان اسمبلی یا کلاس‌های مشتق‌شده قابل استفاده است.

 

کپسوله‌سازی با استفاده از Access Modifier

 

مثال کپسوله‌سازی با استفاده از private و public

using System;

class Person
{
    private string name; // متغیر خصوصی (Encapsulated Data)

    public void SetName(string newName)
    {
        if (!string.IsNullOrEmpty(newName))
        {
            name = newName;
        }
        else
        {
            Console.WriteLine("نام نمی‌تواند خالی باشد.");
        }
    }

    public string GetName()
    {
        return name;
    }
}

class Program
{
    static void Main()
    {
        Person person = new Person();
        person.SetName("Ali Rezaei");
        Console.WriteLine("نام شخص: " + person.GetName());
    }
}

نتیجه اجرا

نام شخص: Ali Rezaei

در این مثال، متغیر name به‌صورت private تعریف شده است و دسترسی مستقیم به آن امکان‌پذیر نیست.

مقدار آن فقط از طریق متدهای SetName و GetName قابل تنظیم و خواندن است.

کپسوله‌سازی با استفاده از Properties

ویژگی‌ها (Properties) در سی شارپ یک روش استانداردتر برای کنترل خواندن و نوشتن متغیرهای خصوصی هستند.

ویژگی‌ها به جای استفاده از متدهای Get و Set، از get و set برای کنترل مقدار متغیرهای خصوصی استفاده می‌کنند.

مثال کپسوله‌سازی با Properties

using System;

class Person
{
    private string name;

    public string Name
    {
        get { return name; }
        set
        {
            if (!string.IsNullOrEmpty(value))
                name = value;
            else
                Console.WriteLine("نام نمی‌تواند خالی باشد.");
        }
    }
}

class Program
{
    static void Main()
    {
        Person person = new Person();
        person.Name = "Sara Ahmadi"; // مقداردهی
        Console.WriteLine("نام شخص: " + person.Name); // خواندن مقدار
    }
}

نتیجه اجرا

نام شخص: Sara Ahmadi

در این روش، **ویژگی **Name به‌صورت public تعریف شده، اما مقداردهی آن فقط درصورتی انجام می‌شود که مقدار معتبر باشد.

 

 

 

آیا به دنبال یک فرصت عالی برای یادگیری برنامه‌نویسی هستید؟ 🚀

با دوره آموزشی سی‌شارپ ما، شما می‌توانید مهارت‌های خود را به سطح جدیدی ارتقا دهید! این دوره به‌طور کامل طراحی شده تا به شما کمک کند تا از مبتدی تا پیشرفته در دنیای برنامه‌نویسی سی‌شارپ پیش بروید.

👨‍🏫 چرا دوره ما را انتخاب کنید؟

  • محتوای جامع و عملی: با پروژه‌های واقعی و تمرینات عملی، یادگیری را به تجربه‌ای جذاب تبدیل کنید.
  • مدرس مجرب: از تجربه و دانش مدرس حرفه‌ای بهره‌مند شوید که شما را در هر مرحله از یادگیری راهنمایی می‌کنند.
  • پشتیبانی ۲۴/۷: هر زمان که سوالی داشتید، ما در کنار شما خواهیم بود تا به شما کمک کنیم.
  • دسترسی مادام‌العمر: به محتوای دوره دسترسی دائمی داشته باشید و هر زمان که خواستید، می‌توانید به آن مراجعه کنید.

💡 فرصت را از دست ندهید!

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

همین امروز به جمع یادگیرندگان ما بپیوندید و اولین قدم را به سوی آینده‌ای روشن‌تر بردارید!

شرکت در دوره آموزش برنامه نویسی سی شارپ

 

کپسوله‌سازی با استفاده از Auto-Implemented Properties

در سی شارپ می‌توان ویژگی‌ها را به‌صورت خودکار (Auto-Implemented Properties) تعریف کرد، که باعث کاهش کدهای اضافی می‌شود:

class Person
{
    public string Name { get; set; } // بدون نیاز به متغیر خصوصی
}

در این حالت، سی شارپ به‌طور خودکار یک متغیر خصوصی برای Name ایجاد می‌کند و get و set را پیاده‌سازی می‌کند.

 

 

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

 در اینجا یک مثال پروژه‌محور از کپسوله‌سازی (Encapsulation) در زبان سی شارپ آورده شده است.

این مثال شامل یک کلاس BankAccount است که اطلاعات حساب بانکی را مدیریت می‌کند.

 ویژگی‌های مثال

  •  استفاده از فیلدهای خصوصی (private) برای پنهان‌سازی داده‌ها
  •  استفاده از متدهای عمومی (public) برای دسترسی ایمن به داده‌ها
  •  جلوگیری از تغییر مستقیم موجودی حساب

کد

using System;

class BankAccount
{
    // فیلدهای خصوصی (Encapsulation)
    private string accountNumber;
    private double balance;

    // سازنده کلاس
    public BankAccount(string accNumber, double initialBalance)
    {
        accountNumber = accNumber;
        balance = initialBalance;
    }

    // متد برای واریز وجه
    public void Deposit(double amount)
    {
        if (amount > 0)
        {
            balance += amount;
            Console.WriteLine($"✅ {amount} تومان به حساب اضافه شد. موجودی فعلی: {balance}");
        }
        else
        {
            Console.WriteLine("❌ مبلغ وارد شده معتبر نیست.");
        }
    }

    // متد برای برداشت وجه
    public void Withdraw(double amount)
    {
        if (amount > 0 && amount <= balance)
        {
            balance -= amount;
            Console.WriteLine($"✅ {amount} تومان از حساب برداشت شد. موجودی فعلی: {balance}");
        }
        else
        {
            Console.WriteLine("❌ مبلغ وارد شده نامعتبر است یا موجودی کافی نیست.");
        }
    }

    // متد برای نمایش موجودی حساب (Read-Only)
    public void ShowBalance()
    {
        Console.WriteLine($"📢 شماره حساب: {accountNumber} | موجودی: {balance} تومان");
    }
}

class Program
{
    static void Main()
    {
        // ایجاد یک حساب جدید
        BankAccount myAccount = new BankAccount("123456789", 100000);

        // نمایش موجودی اولیه
        myAccount.ShowBalance();

        // واریز و برداشت وجه
        myAccount.Deposit(50000);
        myAccount.Withdraw(30000);
        myAccount.Withdraw(200000); // مقدار نامعتبر

        // نمایش موجودی نهایی
        myAccount.ShowBalance();
    }
}

توضیحات کد

  • کپسوله‌سازی: فیلدهای accountNumber و balance خصوصی هستند تا از تغییرات مستقیم خارج از کلاس جلوگیری شود.
  • متدهای عمومی: متدهای Deposit، Withdraw و ShowBalance برای تعامل ایمن با داده‌ها استفاده شده‌اند.
  • کنترل داده‌ها: از شرط‌ها برای اطمینان از معتبر بودن مقدارهای واریز و برداشت استفاده شده است.

خروجی نمونه

📢 شماره حساب: 123456789 | موجودی: 100000 تومان
✅ 50000 تومان به حساب اضافه شد. موجودی فعلی: 150000
✅ 30000 تومان از حساب برداشت شد. موجودی فعلی: 120000
❌ مبلغ وارد شده نامعتبر است یا موجودی کافی نیست.
📢 شماره حساب: 123456789 | موجودی: 120000 تومان
دوره های مرتبط
آموزش برنامه نویسی سی شارپ,آموزش پروژه محور سی شارپ,آموزش مقدماتی تا پیشرفته سی شارپ,طراحی نرم افزار تحت ویندوز

آموزش برنامه نویسی سی شارپ

زبان شی گرایی حرفه ای سی شارپ یک زبان قدرتمند برای طراحی نرم افزار به شمار میرود.

999,000 تومان

2.5k بازدید

ارسال دیدگاه

برای ارسال نظر لطفا ورود یا ثبت نام کنید.