Skill Development

ইন্টারফেস এবং এনক্যাপসুলেশন

সি শার্পে (C#) ইন্টারফেস এবং এনক্যাপসুলেশন হলো অবজেক্ট-ওরিয়েন্টেড প্রোগ্রামিং (OOP) এর দুটি গুরুত্বপূর্ণ ধারণা। ইন্টারফেসের মাধ্যমে ক্লাসের মধ্যে নির্দিষ্ট ফাংশনালিটি নিশ্চিত করা হয়, আর এনক্যাপসুলেশন ডেটা এবং মেথডগুলিকে একত্রিত করে ডেটার নিরাপত্তা নিশ্চিত করে।

ইন্টারফেস (Interface)

ইন্টারফেস হলো এমন একটি কাঠামো যা শুধুমাত্র মেথডের সিগনেচার বা ডেফিনিশন দেয়, কিন্তু কোনো মেথডের বাস্তবায়ন দেয় না। ক্লাসগুলো এই ইন্টারফেস ইমপ্লিমেন্ট করে সেই মেথডগুলো বাস্তবায়ন করে। C# এ ইন্টারফেস তৈরি করতে interface কীওয়ার্ড ব্যবহার করা হয় এবং ইন্টারফেসের নাম সাধারণত "I" দিয়ে শুরু হয়।

ইন্টারফেসের বৈশিষ্ট্য

  • ইন্টারফেসে শুধুমাত্র মেথড, প্রোপার্টি, ইভেন্ট, এবং ইনডেক্সার থাকে।
  • ইন্টারফেসে কোনো কনস্ট্রাক্টর থাকে না।
  • একাধিক ইন্টারফেস ইমপ্লিমেন্ট করা যায়, যা C# এ মাল্টিপল ইনহেরিটেন্স সমর্থন করে।

ইন্টারফেসের গঠন

public interface IAnimal
{
    void MakeSound(); // Method signature
}

উদাহরণ: ইন্টারফেস ব্যবহার

// ইন্টারফেস
public interface IAnimal
{
    void MakeSound();
}

// ক্লাস যা ইন্টারফেস ইমপ্লিমেন্ট করছে
public class Dog : IAnimal
{
    public void MakeSound()
    {
        Console.WriteLine("Dog barks");
    }
}

public class Cat : IAnimal
{
    public void MakeSound()
    {
        Console.WriteLine("Cat meows");
    }
}

ইন্টারফেস ব্যবহার করার উদাহরণ প্রোগ্রাম

class Program
{
    static void Main(string[] args)
    {
        IAnimal dog = new Dog();
        dog.MakeSound(); // Output: Dog barks

        IAnimal cat = new Cat();
        cat.MakeSound(); // Output: Cat meows
    }
}

এনক্যাপসুলেশন (Encapsulation)

এনক্যাপসুলেশন হলো এমন একটি ধারণা যা ডেটা এবং মেথডগুলিকে একটি ক্লাসে গোষ্ঠীবদ্ধ করে এবং বাইরের থেকে ডেটার সরাসরি অ্যাক্সেস সীমাবদ্ধ করে। এটি ডেটার নিরাপত্তা নিশ্চিত করে এবং ক্লাসের বাইরে থেকে ডেটাকে পরিবর্তন করতে বাধা দেয়। C# এ এনক্যাপসুলেশন সাধারণত প্রাইভেট ফিল্ড এবং পাবলিক প্রোপার্টি ব্যবহার করে প্রয়োগ করা হয়।

এনক্যাপসুলেশনের বৈশিষ্ট্য

  • ডেটাকে প্রাইভেট ফিল্ডে সংরক্ষণ করা হয়, যাতে বাইরে থেকে সরাসরি অ্যাক্সেস করা না যায়।
  • প্রোপার্টির মাধ্যমে ডেটার সঠিক অ্যাক্সেস এবং পরিবর্তন নিশ্চিত করা হয়।
  • এনক্যাপসুলেশন ডেটার নিরাপত্তা এবং কোডের মডুলারিটি বাড়ায়।

উদাহরণ: এনক্যাপসুলেশন ব্যবহার

public class Person
{
    // প্রাইভেট ফিল্ড
    private string name;
    private int age;

    // পাবলিক প্রোপার্টি
    public string Name
    {
        get { return name; }
        set { name = value; }
    }

    public int Age
    {
        get { return age; }
        set
        {
            if (value >= 0) // Validation check
            {
                age = value;
            }
            else
            {
                Console.WriteLine("Age cannot be negative.");
            }
        }
    }
}

এনক্যাপসুলেশন ব্যবহার করার উদাহরণ প্রোগ্রাম

class Program
{
    static void Main(string[] args)
    {
        Person person = new Person();
        person.Name = "Alice";   // Setting the name
        person.Age = 25;         // Setting the age
        Console.WriteLine("Name: " + person.Name);
        Console.WriteLine("Age: " + person.Age);

        person.Age = -5;         // Invalid age, will display an error
    }
}

আউটপুট:

Name: Alice
Age: 25
Age cannot be negative.

ইন্টারফেস এবং এনক্যাপসুলেশনের তুলনা

বৈশিষ্ট্যইন্টারফেসএনক্যাপসুলেশন
ভূমিকাশুধুমাত্র মেথডের সিগনেচার প্রদান করেডেটা এবং মেথডকে একত্রিত করে
ডেটার অ্যাক্সেসমেথড এবং প্রোপার্টি অ্যাক্সেসযোগ্য থাকেডেটা প্রাইভেট রাখা হয়, প্রোপার্টি দিয়ে অ্যাক্সেসযোগ্য
কনট্রোলফাংশনালিটির জন্য ক্লাসে ইমপ্লিমেন্ট করতে হয়বাইরের থেকে ডেটা সুরক্ষিত রাখে
কোডের পুনরায় ব্যবহারযোগ্যতাএকাধিক ক্লাসে ইমপ্লিমেন্ট করে ফাংশনালিটি ব্যবহারডেটা এবং ফাংশন একত্রিত করে কোড মডুলার রাখে

সারসংক্ষেপ

সি শার্পে ইন্টারফেস এবং এনক্যাপসুলেশন অবজেক্ট-ওরিয়েন্টেড প্রোগ্রামিংয়ের দুটি গুরুত্বপূর্ণ উপাদান। ইন্টারফেস ক্লাসের মধ্যে নির্দিষ্ট ফাংশনালিটি সংজ্ঞায়িত করে এবং একাধিক ক্লাসে একই ফাংশনালিটি ইমপ্লিমেন্ট করতে সহায়ক। অন্যদিকে, এনক্যাপসুলেশন ডেটা এবং মেথডগুলিকে একত্রিত করে বাইরের থেকে ডেটার সরাসরি অ্যাক্সেস সীমাবদ্ধ করে ডেটার সুরক্ষা নিশ্চিত করে। এই দুই বৈশিষ্ট্য একসঙ্গে প্রোগ্রামের নিরাপত্তা, মডুলারিটি, এবং পুনঃব্যবহারযোগ্যতা বাড়ায়।

Content added By

ইন্টারফেস কী এবং এর প্রয়োজনীয়তা

সি শার্পে (C#) ইন্টারফেস (Interface) হলো একটি বিশেষ ধরনের কাঠামো, যা শুধুমাত্র মেথড, প্রোপার্টি এবং ইভেন্টের ডিক্লেয়ারেশন ধারণ করে, কিন্তু কোনো বাস্তবায়ন (implementation) দেয় না। ইন্টারফেসের মাধ্যমে আমরা এমন একটি কনট্রাক্ট বা চুক্তি তৈরি করি, যা নির্দিষ্ট মেথড এবং প্রোপার্টি ধারণ করবে, তবে তাদের বাস্তবায়ন করবে না। যে ক্লাস ইন্টারফেসকে ইমপ্লিমেন্ট করবে, সেটি নিজস্বভাবে এই মেথড এবং প্রোপার্টিগুলোর বাস্তবায়ন দেবে।

ইন্টারফেসের গঠন

ইন্টারফেস ডিফাইন করতে interface কীওয়ার্ড ব্যবহার করা হয়, এবং সাধারণত ইন্টারফেসের নাম I অক্ষর দিয়ে শুরু হয় (যেমন, IShape, IDisplayable)।

public interface IShape
{
    double GetArea();
    void Display();
}

উপরের উদাহরণে, IShape নামের একটি ইন্টারফেসে দুটি মেথড (GetArea() এবং Display()) ডিক্লেয়ার করা হয়েছে। এখানে মেথডগুলোর কোনো বাস্তবায়ন নেই।

ইন্টারফেস ইমপ্লিমেন্ট করা

কোনো ক্লাস যখন একটি ইন্টারফেসকে ইমপ্লিমেন্ট করে, তখন সেই ক্লাসে ইন্টারফেসের সব মেথড এবং প্রোপার্টির বাস্তবায়ন প্রদান করতে হবে। একাধিক ইন্টারফেস ইমপ্লিমেন্ট করা সম্ভব।

public class Circle : IShape
{
    private double radius;

    public Circle(double radius)
    {
        this.radius = radius;
    }

    public double GetArea()
    {
        return Math.PI * radius * radius;
    }

    public void Display()
    {
        Console.WriteLine("This is a circle with area: " + GetArea());
    }
}

এখানে Circle ক্লাস IShape ইন্টারফেসকে ইমপ্লিমেন্ট করেছে এবং GetArea() এবং Display() মেথডের বাস্তবায়ন প্রদান করেছে।

ইন্টারফেসের প্রয়োজনীয়তা

ইন্টারফেস ব্যবহার করে কোডের নমনীয়তা এবং পুনঃব্যবহারযোগ্যতা বাড়ানো যায়। ইন্টারফেস ব্যবহারের কিছু প্রধান কারণ হলো:

একাধিক ইনহেরিটেন্স সমর্থন: সি শার্প একাধিক ক্লাস থেকে ইনহেরিট করতে দেয় না, তবে একাধিক ইন্টারফেস ইমপ্লিমেন্ট করা সম্ভব। ফলে একই ক্লাসে একাধিক ইন্টারফেস থেকে নির্দিষ্ট ফাংশনালিটি পাওয়া যায়।

কোডের নমনীয়তা: ইন্টারফেসের মাধ্যমে বিভিন্ন ক্লাসে একই ফাংশনালিটি তৈরি করা যায়। উদাহরণস্বরূপ, একটি IDisplayable ইন্টারফেস ব্যবহার করে বিভিন্ন ক্লাসে Display() মেথড ইমপ্লিমেন্ট করা সম্ভব।

ডিপেন্ডেন্সি ইনভার্শন প্রিন্সিপল (Dependency Inversion Principle): ইন্টারফেসের মাধ্যমে কোডের বিভিন্ন অংশের মধ্যে ডিপেন্ডেন্সি কমানো যায়, যা কোডকে আরও ভালভাবে মেইনটেইন করা যায়।

কোডের একঘেয়েমি কমানো: ইন্টারফেসের কারণে বিভিন্ন ক্লাসে নির্দিষ্ট কনট্রাক্ট তৈরি করা যায়, যা কোডের গঠন ও কার্যকারিতা উন্নত করে।

ইউনিট টেস্টিং সহজ করে: ইন্টারফেস ব্যবহার করলে প্রোগ্রামের বিভিন্ন অংশকে আলাদাভাবে টেস্ট করা সহজ হয়। ইন্টারফেসের মাধ্যমে মক অবজেক্ট তৈরি করে নির্দিষ্ট অংশের কার্যকারিতা যাচাই করা যায়।

উদাহরণ: ইন্টারফেস ব্যবহার

নিচে IShape ইন্টারফেস এবং দুটি ক্লাস Circle এবং Rectangle দেখানো হলো, যা উভয়েই IShape ইন্টারফেসকে ইমপ্লিমেন্ট করেছে।

public interface IShape
{
    double GetArea();
    void Display();
}

public class Circle : IShape
{
    private double radius;

    public Circle(double radius)
    {
        this.radius = radius;
    }

    public double GetArea()
    {
        return Math.PI * radius * radius;
    }

    public void Display()
    {
        Console.WriteLine("This is a circle with area: " + GetArea());
    }
}

public class Rectangle : IShape
{
    private double width;
    private double height;

    public Rectangle(double width, double height)
    {
        this.width = width;
        this.height = height;
    }

    public double GetArea()
    {
        return width * height;
    }

    public void Display()
    {
        Console.WriteLine("This is a rectangle with area: " + GetArea());
    }
}

উদাহরণ প্রোগ্রাম: ইন্টারফেস ব্যবহার করে প্রোগ্রাম তৈরি

class Program
{
    static void Main(string[] args)
    {
        IShape circle = new Circle(5);
        IShape rectangle = new Rectangle(4, 6);

        circle.Display();     // Output: This is a circle with area: 78.54
        rectangle.Display();  // Output: This is a rectangle with area: 24
    }
}

আউটপুট

This is a circle with area: 78.54
This is a rectangle with area: 24

ইন্টারফেস বনাম অ্যাবস্ট্রাক্ট ক্লাস

বৈশিষ্ট্যইন্টারফেসঅ্যাবস্ট্রাক্ট ক্লাস
মেম্বার ডিক্লেয়ারেশনশুধুমাত্র মেথড, প্রোপার্টির ডিক্লেয়ারেশনআংশিক বা সম্পূর্ণ মেথড এবং ফিল্ড ডিক্লেয়ারেশন
মাল্টিপল ইনহেরিটেন্সএকাধিক ইন্টারফেস ইমপ্লিমেন্ট করা যায়একাধিক অ্যাবস্ট্রাক্ট ক্লাস ইনহেরিট করা যায় না
অ্যাক্সেস মডিফায়ারসব মেম্বার publicবিভিন্ন অ্যাক্সেস মডিফায়ার ব্যবহার করা যায়
ইনস্ট্যান্স তৈরিসরাসরি ইনস্ট্যান্স তৈরি করা যায় নাসরাসরি ইনস্ট্যান্স তৈরি করা যায় না

সারসংক্ষেপ

সি শার্পে ইন্টারফেস হলো এমন একটি কাঠামো, যা কোনো ক্লাসের কার্যক্রমের জন্য একটি কনট্রাক্ট তৈরি করে। ইন্টারফেসের মাধ্যমে একাধিক ইনহেরিটেন্স সমর্থন, কোডের নমনীয়তা, এবং ইউনিট টেস্টিং সহজ হয়। এটি প্রোগ্রামে একটি স্ট্যান্ডার্ড তৈরি করে এবং নির্দিষ্ট নিয়ম অনুসারে বিভিন্ন ক্লাসে কাজ করতে সহায়ক। ইন্টারফেসের সঠিক ব্যবহার প্রোগ্রামিংয়ে শক্তিশালী এবং সহজে রক্ষণাবেক্ষণযোগ্য কোড লিখতে সহায়ক।

Content added By

ইন্টারফেস এবং ইমপ্লিমেন্টেশন

সি শার্পে (C#) ইন্টারফেস এবং ইমপ্লিমেন্টেশন অবজেক্ট-ওরিয়েন্টেড প্রোগ্রামিং (OOP) এর মূল ধারণা। ইন্টারফেস হলো মেথড, প্রোপার্টি, ইভেন্ট, এবং ইনডেক্সারের সংজ্ঞা প্রদানকারী একটি কাঠামো, যা কোনো বাস্তবায়ন ছাড়াই থাকে। অন্যদিকে, ইমপ্লিমেন্টেশন হলো সেই ইন্টারফেসের মেথড বা প্রোপার্টিগুলোর বাস্তবায়ন, যা একটি ক্লাসে ইন্টারফেস ইমপ্লিমেন্ট করে করা হয়।

ইন্টারফেস (Interface)

ইন্টারফেস হলো একটি রূপরেখা বা ব্লুপ্রিন্ট যা মেথড, প্রোপার্টি, ইভেন্ট, এবং ইনডেক্সারের শুধু সিগনেচার প্রদান করে, কিন্তু এর কোনো বাস্তবায়ন থাকে না। একটি ক্লাসে ইন্টারফেস ইমপ্লিমেন্ট করার সময় এই মেথডগুলোকে পূর্ণ বাস্তবায়ন করতে হয়।

ইন্টারফেসের বৈশিষ্ট্য

  • ইন্টারফেসে কোনো মেম্বার (মেথড, প্রোপার্টি ইত্যাদি) বাস্তবায়ন ছাড়াই থাকে।
  • C# এ ইন্টারফেসের নাম সাধারণত "I" দিয়ে শুরু হয়।
  • একাধিক ইন্টারফেস একই ক্লাসে ইমপ্লিমেন্ট করা যায়।

ইন্টারফেসের গঠন

public interface IAnimal
{
    void MakeSound(); // মেথড সিগনেচার
}

ইমপ্লিমেন্টেশন (Implementation)

একটি ক্লাস যখন কোনো ইন্টারফেস ইমপ্লিমেন্ট করে, তখন তাকে ইন্টারফেসের সব মেথড, প্রোপার্টি, ইত্যাদির সুনির্দিষ্ট বাস্তবায়ন প্রদান করতে হয়। ইমপ্লিমেন্টেশন নিশ্চিত করে যে ক্লাসটি নির্দিষ্ট ফাংশনালিটি ধারণ করবে।

ইমপ্লিমেন্টেশনের গঠন

public class Dog : IAnimal
{
    public void MakeSound()
    {
        Console.WriteLine("Dog barks");
    }
}

উপরে Dog ক্লাস IAnimal ইন্টারফেস ইমপ্লিমেন্ট করেছে এবং MakeSound() মেথডের বাস্তবায়ন প্রদান করেছে।

উদাহরণ: ইন্টারফেস এবং ইমপ্লিমেন্টেশন

নিচে একটি উদাহরণ দেয়া হলো যেখানে একটি IAnimal ইন্টারফেস এবং দুটি ক্লাস (Dog এবং Cat) সেই ইন্টারফেস ইমপ্লিমেন্ট করেছে।

// ইন্টারফেস সংজ্ঞা
public interface IAnimal
{
    void MakeSound();
}

// Dog ক্লাস যা IAnimal ইন্টারফেস ইমপ্লিমেন্ট করছে
public class Dog : IAnimal
{
    public void MakeSound()
    {
        Console.WriteLine("Dog barks");
    }
}

// Cat ক্লাস যা IAnimal ইন্টারফেস ইমপ্লিমেন্ট করছে
public class Cat : IAnimal
{
    public void MakeSound()
    {
        Console.WriteLine("Cat meows");
    }
}

ইন্টারফেস এবং ইমপ্লিমেন্টেশন ব্যবহার করার উদাহরণ প্রোগ্রাম

class Program
{
    static void Main(string[] args)
    {
        IAnimal dog = new Dog();
        dog.MakeSound(); // Output: Dog barks

        IAnimal cat = new Cat();
        cat.MakeSound(); // Output: Cat meows
    }
}

ইন্টারফেসের মাধ্যমে পলিমরফিজম (Polymorphism)

ইন্টারফেস ব্যবহারের মাধ্যমে পলিমরফিজম প্রয়োগ করা যায়। ইন্টারফেস টাইপের একটি ভেরিয়েবল বা রেফারেন্সের মাধ্যমে বিভিন্ন ক্লাসের মেথড কল করা যায়, যা পলিমরফিজমকে সম্ভব করে।

উদাহরণ: পলিমরফিজমের মাধ্যমে ইন্টারফেস ব্যবহার

public interface IShape
{
    double GetArea();
}

public class Circle : IShape
{
    public double Radius { get; set; }

    public Circle(double radius)
    {
        Radius = radius;
    }

    public double GetArea()
    {
        return Math.PI * Radius * Radius;
    }
}

public class Rectangle : IShape
{
    public double Width { get; set; }
    public double Height { get; set; }

    public Rectangle(double width, double height)
    {
        Width = width;
        Height = height;
    }

    public double GetArea()
    {
        return Width * Height;
    }
}

উপরের উদাহরণে, IShape ইন্টারফেসে GetArea() মেথডের সিগনেচার আছে। Circle এবং Rectangle ক্লাসগুলো IShape ইন্টারফেস ইমপ্লিমেন্ট করেছে এবং নিজেদের মতো GetArea() মেথডের বাস্তবায়ন করেছে।

উদাহরণ প্রোগ্রাম: ইন্টারফেসের মাধ্যমে পলিমরফিজম

class Program
{
    static void Main(string[] args)
    {
        IShape circle = new Circle(5.0);
        IShape rectangle = new Rectangle(4.0, 6.0);

        Console.WriteLine("Circle Area: " + circle.GetArea());      // Output: Circle Area: 78.5398
        Console.WriteLine("Rectangle Area: " + rectangle.GetArea()); // Output: Rectangle Area: 24
    }
}

ইন্টারফেস এবং ইমপ্লিমেন্টেশনের সুবিধা

  1. কোডের পুনঃব্যবহারযোগ্যতা: ইন্টারফেস ব্যবহার করে একাধিক ক্লাসে একই ফাংশনালিটি ইমপ্লিমেন্ট করা যায়।
  2. পলিমরফিজম: ইন্টারফেসের মাধ্যমে পলিমরফিজম সম্ভব, যা একক রেফারেন্সের মাধ্যমে ভিন্ন ভিন্ন ক্লাসের মেথড কল করতে দেয়।
  3. কোডের মানোন্নয়ন: ইন্টারফেস নির্দিষ্ট ফাংশনালিটি প্রয়োগে বাধ্য করে, যা কোডের মান এবং নিয়মানুবর্তিতা বাড়ায়।
  4. ডিপেনডেন্সি ইঞ্জেকশন: ইন্টারফেসের মাধ্যমে ডিপেনডেন্সি ইঞ্জেকশন প্রয়োগ করা সহজ হয়, যা কোডের মডুলারিটি এবং টেস্টিং সুবিধা বাড়ায়।

সারসংক্ষেপ

সি শার্পে ইন্টারফেস হলো একটি রূপরেখা যা ক্লাসগুলো ইমপ্লিমেন্ট করে নির্দিষ্ট ফাংশনালিটি প্রদান করতে বাধ্য হয়। ইন্টারফেস কেবল মেথড বা প্রোপার্টির সিগনেচার প্রদান করে, এবং ক্লাসগুলোর মাধ্যমে তাদের সুনির্দিষ্ট বাস্তবায়ন নির্ধারণ করা হয়, যা ইমপ্লিমেন্টেশন নামে পরিচিত। ইন্টারফেস এবং ইমপ্লিমেন্টেশন কোডের পুনঃব্যবহারযোগ্যতা, পলিমরফিজম, এবং ফাংশনালিটি নিয়ন্ত্রণে সহায়ক।

Content added By

এনক্যাপসুলেশন এবং ডেটা হাইডিং

এনক্যাপসুলেশন এবং ডেটা হাইডিং সি শার্প (C#) এ অবজেক্ট-ওরিয়েন্টেড প্রোগ্রামিং (OOP) এর দুটি গুরুত্বপূর্ণ বৈশিষ্ট্য। এই বৈশিষ্ট্যগুলোর মাধ্যমে প্রোগ্রামের ডেটাকে নিরাপদ রাখা এবং নির্দিষ্ট নিয়ম অনুসারে অ্যাক্সেস নিয়ন্ত্রণ করা সম্ভব হয়।

এনক্যাপসুলেশন (Encapsulation)

এনক্যাপসুলেশন হলো একটি প্রক্রিয়া, যার মাধ্যমে ডেটা এবং মেথডকে একটি ক্লাসের মধ্যে বাঁধা হয়। এটি ডেটা এবং কার্যকলাপকে একটি সত্তা হিসেবে রাখে এবং বাইরের অংশ থেকে সরাসরি অ্যাক্সেস রোধ করে। ফলে ডেটা অ্যাক্সেস এবং আপডেট করার জন্য নির্দিষ্ট মেথড বা প্রোপার্টি ব্যবহারের প্রয়োজন হয়।

এনক্যাপসুলেশনের মাধ্যমে প্রাইভেট মেম্বারগুলোকে প্রাইভেট রাখা হয় এবং পাবলিক মেথড বা প্রোপার্টির মাধ্যমে ডেটা অ্যাক্সেস করা হয়।

উদাহরণ: এনক্যাপসুলেশন

public class Account
{
    private double balance; // প্রাইভেট ভেরিয়েবল, সরাসরি অ্যাক্সেসযোগ্য নয়

    // ব্যালেন্স চেক করার জন্য একটি পাবলিক মেথড
    public double GetBalance()
    {
        return balance;
    }

    // ব্যালেন্স সেট করার জন্য একটি পাবলিক মেথড
    public void Deposit(double amount)
    {
        if (amount > 0)
        {
            balance += amount;
        }
    }

    public void Withdraw(double amount)
    {
        if (amount > 0 && amount <= balance)
        {
            balance -= amount;
        }
    }
}

উপরের উদাহরণে balance ভেরিয়েবলটি প্রাইভেট রাখা হয়েছে, তাই সরাসরি বাইরের অংশ থেকে সেটি পরিবর্তন করা সম্ভব নয়। Deposit এবং Withdraw মেথডের মাধ্যমে balance এর মান নিয়ন্ত্রিতভাবে পরিবর্তন করা হয়।

এনক্যাপসুলেশনের সুবিধা

  1. ডেটার সুরক্ষা: প্রাইভেট ভেরিয়েবলের মাধ্যমে ডেটা সরাসরি পরিবর্তনের সুযোগ কমে যায়।
  2. রক্ষণাবেক্ষণ সহজ: ডেটা অ্যাক্সেসের জন্য নির্দিষ্ট মেথড ব্যবহার করায় কোডের নিয়ন্ত্রণ থাকে।
  3. কোডের গঠন এবং সংগঠন: মেম্বারদের অ্যাক্সেস নিয়ন্ত্রণ করা যায়, যা কোডের গঠন সহজ করে।

ডেটা হাইডিং (Data Hiding)

ডেটা হাইডিং হলো এমন একটি পদ্ধতি, যার মাধ্যমে প্রাইভেট ডেটা বা প্রোপার্টিকে বাইরের অংশ থেকে লুকিয়ে রাখা হয়। ডেটা হাইডিং এনক্যাপসুলেশনের মাধ্যমে নিশ্চিত করা হয়। প্রাইভেট ডেটা সরাসরি অ্যাক্সেসযোগ্য না হওয়ার কারণে ডেটার নিরাপত্তা নিশ্চিত হয়।

উদাহরণ: ডেটা হাইডিং

public class Employee
{
    private double salary; // প্রাইভেট প্রোপার্টি, বাইরের অংশ থেকে সরাসরি অ্যাক্সেসযোগ্য নয়

    // প্রাইভেট ডেটা অ্যাক্সেসের জন্য পাবলিক প্রোপার্টি
    public double Salary
    {
        get { return salary; }
        set 
        {
            if (value > 0)
            {
                salary = value;
            }
        }
    }
}

এখানে salary প্রাইভেট প্রোপার্টি হিসেবে সংজ্ঞায়িত করা হয়েছে। বাইরের অংশ থেকে সরাসরি salary অ্যাক্সেসযোগ্য নয়; বরং পাবলিক Salary প্রোপার্টির মাধ্যমে এই ডেটা নিয়ন্ত্রিতভাবে সেট বা রিটার্ন করা যায়।

ডেটা হাইডিং এর প্রয়োজনীয়তা

  1. নিরাপত্তা: প্রাইভেট ভেরিয়েবল বা প্রোপার্টি ব্যবহারের মাধ্যমে ডেটার উপর সরাসরি অ্যাক্সেস নিয়ন্ত্রণ করে, যা ডেটাকে নিরাপদ রাখে।
  2. ডেটার বৈধতা: বাইরের অংশ থেকে ডেটার অপ্রত্যাশিত পরিবর্তন রোধ করে।
  3. কোডের নিয়ন্ত্রণ: ডেটা অ্যাক্সেসের জন্য নির্দিষ্ট নিয়ম অনুসরণ করতে বাধ্য করে।

উদাহরণ প্রোগ্রাম: এনক্যাপসুলেশন এবং ডেটা হাইডিং একসাথে ব্যবহার

using System;

namespace EncapsulationAndDataHidingExample
{
    public class Student
    {
        private string name;   // প্রাইভেট ভেরিয়েবল, সরাসরি অ্যাক্সেসযোগ্য নয়
        private int age;

        // প্রাইভেট ভেরিয়েবলের জন্য পাবলিক প্রোপার্টি
        public string Name
        {
            get { return name; }
            set { name = value; }
        }

        public int Age
        {
            get { return age; }
            set 
            {
                if (value >= 0) // ডেটা যাচাই
                {
                    age = value;
                }
            }
        }

        public void DisplayInfo()
        {
            Console.WriteLine("Name: " + Name);
            Console.WriteLine("Age: " + Age);
        }
    }

    class Program
    {
        static void Main(string[] args)
        {
            Student student = new Student();

            // প্রাইভেট ভেরিয়েবল অ্যাক্সেস না করেই ডেটা সেট
            student.Name = "Alice";
            student.Age = 20;

            student.DisplayInfo();
        }
    }
}

আউটপুট

Name: Alice
Age: 20

এনক্যাপসুলেশন এবং ডেটা হাইডিং এর পার্থক্য

বৈশিষ্ট্যএনক্যাপসুলেশনডেটা হাইডিং
উদ্দেশ্যডেটা এবং মেথডকে একত্রে বাঁধাডেটাকে বাইরের অংশ থেকে লুকিয়ে রাখা
অ্যাক্সেস নিয়ন্ত্রণপ্রাইভেট এবং পাবলিক মেম্বার ব্যবহারশুধুমাত্র প্রাইভেট মেম্বার ব্যবহার
উদাহরণপ্রাইভেট ভেরিয়েবল ও পাবলিক মেথডপ্রাইভেট প্রোপার্টি বা ভেরিয়েবল

সারসংক্ষেপ

সি শার্পে এনক্যাপসুলেশন এবং ডেটা হাইডিং প্রোগ্রামের ডেটাকে নিরাপদ রাখতে এবং নিয়ন্ত্রিত অ্যাক্সেস নিশ্চিত করতে সহায়ক। এনক্যাপসুলেশনের মাধ্যমে প্রোগ্রামে ডেটা ও মেথড একত্রে রাখা হয়, আর ডেটা হাইডিং এর মাধ্যমে প্রাইভেট ডেটাকে বাইরের অংশ থেকে লুকিয়ে রাখা যায়। এই ধারণাগুলো প্রোগ্রামিংয়ে নিরাপত্তা এবং কোডের গঠনশীলতা নিশ্চিত করে।

Content added By

আরও দেখুন...

Promotion