এনক্যাপসুলেশনের ব্যবহার :
C# এনক্যাপসুলেশনের ব্যবহার :
C# এ কয়েক ভাবে এনক্যাপসুলেশন করা হয়ে থাকে যেমন –
মেথড এর ব্যবহার করে (২০০৭ এর পূর্বে):
মেথড ব্যবহার করে প্রাইভেট ফিল্ড একসেস ও মোডিফাই করতে পারেন যা আপনার ফিল্ডের এক্সেস নিয়ন্ত্রণ করতে এবং প্রয়োজনীয় বিসনেস লজিক ও ভ্যালিডেশন প্রয়োগে অনুমতি প্রদান করে।
Link : https://dotnetfiddle.net/A8JSes
using System; public class Program { public class Customer { private string name; public string GetName() { return name; } public void SetName(string value) { name = value; } } public static void Main() { // Can access Name through the GetName Method Customer customer = new Customer(); customer.SetName(“Azad”); Console.WriteLine(customer.GetName()); } }
সাধারণত ওওপি (OOP) প্রোগ্রামিং ল্যাঙ্গুয়েজে getter/setter এভাবেই ব্যবহার করা হয়।
সাধারণত গেটার (getter) সেটার (setter) তৈরি করার জন্য
- Getter : গেট (Get) দিয়ে ফিল্ডের নাম (GetFieldName) , E.g. GetName
- Setter: সেটার তৈরি জন্য সেট দিয়ে ফিল্ডের নাম (SetFieldName), E.g. SetName
২০০৭ এর আগে সাধারণত এভাবেই গেটার (getter) / সেটার (setter) তৈরি করা হত । কিন্তু এর পরে C# এ প্রপার্টি নামে একটি ফিচার এড করা হয় এই প্রপার্টি ফিচারটা নিয়ে আমরা নিচে কথা বলব। এই প্রপার্টি ফিচারটা সাধারণত এই গেটার (getter) / সেটার (setter) মেথডকে একটু সংক্ষিপ্ত করে এবং সহজ করে।
প্রপার্টিস এর ব্যবহার করে:
যার মধ্যমে ফিল্ড এর এক্সেস কন্ট্রোল করার অনুমতি দিবে ও আপনি এর ভ্যালুতে সহজ এবং সুবিধাজনক ভাবে এক্সেস করতে পারবেন
Link : https://dotnetfiddle.net/3M6Dln
using System; public class Program { public class Customer { private string name; // field / backing field // C# property public string Name { get { return name; } set { // Check if the name is empty or null if (string.IsNullOrEmpty(value)) { // Throw an exception with a message throw new ArgumentNullException(“Name cannot be empty or null”); } name = value; } } // C# Auto property, doesn’t require, backing field public string DateOfBirth { get; set; } } public static void Main() { // Can access Name through the name property Customer customer = new Customer(); customer.Name = “Azad”; Console.WriteLine(customer.Name); customer.Name = string.Empty; // it will throw exception with stacktrace, example in the output } }
Azad Run-time exception (line 22): Value cannot be null. Parameter name: Name cannot be empty or null Stack Trace: [System.ArgumentNullException: Value cannot be null. Parameter name: Name cannot be empty or null] at Program.Customer.set_Name(String value) :line 22 at Program.Main() :line 39
JAVA এনক্যাপসুলেশনের ব্যবহার:
মেথড এর ব্যবহার করে:
Link: http://tpcg.io/_I28ITR
public class Program { public static void main(String[] args) { Customer customer = new Customer(); customer.setName(“Azad”); System.out.println(customer.getName()); } public class Customer { private String name; public String getName() { return name; } public void setName(String value) { name = value; } } }
এনক্যাপসুলেশন মূলত আমাদের সুবিধাগুলো দেয় সেটাকে আমরা একটি ফিগারের মাধ্যমে বোঝার চেষ্টা করি।
- Data Hiding (Encapsulation is not directing information hiding but encapsulating fields)
- Restrict
- Data Validation