CodeGym /Java Blog /এলোমেলো /জাভাতে এনক্যাপসুলেশন
John Squirrels
লেভেল 41
San Francisco

জাভাতে এনক্যাপসুলেশন

এলোমেলো দলে প্রকাশিত
ওহে! আমরা আজকের পাঠটি জাভাতে এনক্যাপসুলেশনে উত্সর্গ করব এবং গেটের বাইরে উদাহরণ দিয়ে শুরু করব:) এখানে আপনার কাছে একটি সাধারণ সোডা বিতরণ মেশিন রয়েছে । আমি আপনার জন্য একটি প্রশ্ন পেয়েছি: এটি কিভাবে কাজ করে? একটি বিস্তারিত উত্তর দেওয়ার চেষ্টা করুন: সোডা কোথা থেকে আসে? কিভাবে অভ্যন্তরীণ তাপমাত্রা বজায় রাখা হয়? বরফ কোথায় জমা হয়? কোন সিরাপ যোগ করতে হবে তা মেশিন কিভাবে জানে? এই প্রশ্নগুলোর উত্তর সম্ভবত আপনার কাছে নেই। ঠিক আছে, হয়তো সবাই এই মেশিনগুলি ব্যবহার করে না। তারা বর্তমানে তেমন জনপ্রিয় নয়। এর অন্য উদাহরণ চেষ্টা করা যাক. এমন কিছু যা আপনি প্রতিদিন অনেকবার ব্যবহার করেন। ওহ, আমার একটি ধারণা আছে! গুগল সার্চ ইঞ্জিনএনক্যাপসুলেশন নীতি - 2 কেমন হয় বলুনকাজ করে আপনি যে শব্দগুলি লিখছেন তার তথ্যের জন্য এটি ঠিক কীভাবে অনুসন্ধান করে? কেন এই ফলাফল শীর্ষে এবং অন্যদের না? যদিও আপনি প্রতিদিন গুগল ব্যবহার করেন, আপনি সম্ভবত জানেন না। কিন্তু তাতে কিছু যায় আসে না। সর্বোপরি, এটি এমন কিছু নয় যা আপনার জানা দরকার। আপনি একটি সার্চ ইঞ্জিন ব্যবহার করতে পারেন এটি ঠিক কিভাবে কাজ করে সে সম্পর্কে চিন্তা না করে। আপনি কীভাবে এটি তৈরি করেছেন তা না জেনেই একটি মেশিন থেকে সোডা কিনতে পারেন। অভ্যন্তরীণ দহন ইঞ্জিন কীভাবে কাজ করে তা না জেনে এবং এমনকি হাই-স্কুল পদার্থবিদ্যা না জেনেও আপনি গাড়ি চালাতে পারেন। অবজেক্ট-ওরিয়েন্টেড প্রোগ্রামিংয়ের অন্যতম প্রধান নীতির জন্য এটি সম্ভব হয়েছে: এনক্যাপসুলেশন। এই বিষয়ে বিভিন্ন নিবন্ধ পড়ার সময়, আপনি অবশ্যই দুটি বিস্তৃত প্রোগ্রামিং ধারণার সম্মুখীন হয়েছেন: এনক্যাপসুলেশন এবং তথ্য গোপন করা। যেহেতু এটি ঘটে, বিভিন্ন লোক শব্দটি বোঝে ' encapsulation' মানে বিভিন্ন জিনিস। আমরা উভয় পদের পাঠোদ্ধার করব যাতে আপনি সম্পূর্ণভাবে বুঝতে পারেন। প্রোগ্রামিং এর মূল অর্থএনক্যাপসুলেশন একটি প্যাকেজে ("ক্যাপসুল") সেই ডেটার সাথে কাজ করার জন্য ডেটা এবং পদ্ধতিগুলিকে একত্রিত করছিল। জাভাতে, এনক্যাপসুলেটিং প্যাকেজ হল ক্লাস । ক্লাসে ডেটা (ক্ষেত্র) এবং সেই ডেটা নিয়ে কাজ করার পদ্ধতি উভয়ই রয়েছে। এনক্যাপসুলেশন নীতি - 3এটি আপনার কাছে স্পষ্ট মনে হতে পারে, তবে অন্যান্য প্রোগ্রামিং দৃষ্টান্তে সবকিছু আলাদাভাবে সাজানো হয়েছে। উদাহরণস্বরূপ, কার্যকরী প্রোগ্রামিং-এ, ডেটাকে ডেটা অপারেশন থেকে কঠোরভাবে আলাদা করা হয়। অবজেক্ট-ওরিয়েন্টেড প্রোগ্রামিং (OOP), প্রোগ্রামগুলি ক্যাপসুল (ক্লাস) নিয়ে গঠিত যা ডেটার সাথে কাজ করার জন্য ডেটা এবং ফাংশন উভয়ই নিয়ে গঠিত।

এবার আসা যাক তথ্য গোপন করার বিষয়ে

তারা কীভাবে তৈরি করা হয়েছে বা তারা কীভাবে কাজ করে তা না বুঝে আমরা কীভাবে সমস্ত ধরণের জটিল প্রক্রিয়া ব্যবহার করব? এটা সহজ: তাদের নির্মাতারা সহজ এবং সুবিধাজনক ইন্টারফেস প্রদান করেছেন। একটি সোডা মেশিনে, ইন্টারফেস হল সামনের প্যানেলের বোতামগুলি। একটি বোতাম আপনাকে কাপের আকার চয়ন করতে দেয়। আপনি একটি দ্বিতীয় বোতাম দিয়ে সিরাপ নির্বাচন করুন. এক তৃতীয়াংশ বরফ যোগ করার জন্য দায়ী। এবং যে সব আপনি কি করতে হবে. মেশিনটি ভিতরে কেমন দেখাচ্ছে তা বিবেচ্য নয়। গুরুত্বপূর্ণ বিষয় হল এটি এমনভাবে ডিজাইন করা হয়েছে যাতে ব্যবহারকারী তিনটি বোতাম চাপলে সোডা পান। একই জিনিস একটি গাড়ী প্রযোজ্য. ভিতরে কি ঘটছে এটা কোন ব্যাপার না. গুরুত্বপূর্ণ বিষয় হল আপনি ডান প্যাডেল টিপলে গাড়িটি সামনের দিকে চলে যায় এবং বাম প্যাডেল টিপলে গাড়ির গতি কমে যায়। এই তথ্য গোপনের সারাংশ। একটি প্রোগ্রামের সব' s 'innards' ব্যবহারকারীর কাছ থেকে লুকানো হয়. এই ধরনের তথ্য ব্যবহারকারীর জন্য অপ্রয়োজনীয় বা অপ্রয়োজনীয়। ব্যবহারকারীর একটি শেষ ফলাফল প্রয়োজন, একটি অভ্যন্তরীণ প্রক্রিয়া নয়। একটি উদাহরণের জন্য, এর একটি কটাক্ষপাত করা যাকযানবাহনের শ্রেণী:

public class Vehicle {

   public void gas() {

       /* Some complicated things happen inside a car.
       As a result, it moves forward */
   }

   public void brake() {

       /* Some complicated things happen inside a car.
       As a result, it slows down */
   }

   public static void main(String[] args) {

       Vehicle vehicle = new Vehicle();

       // How everything looks to the user

       // Press one pedal, the car moves
       vehicle.gas();

       // Press the other pedal, the car brakes
       vehicle.brake();
   }
}
এইভাবে একটি জাভা প্রোগ্রামে বাস্তবায়ন লুকানো হয়। ঠিক বাস্তব জীবনের মতো: ব্যবহারকারীকে একটি ইন্টারফেস (পদ্ধতি) সরবরাহ করা হয়। একটি প্রোগ্রামে, যদি আপনার একটি ক্রিয়া সম্পাদনের জন্য একটি গাড়ির প্রয়োজন হয়, আপনি কেবল পছন্দসই পদ্ধতিতে কল করুন। এই পদ্ধতিগুলির ভিতরে যা ঘটে তা অপ্রয়োজনীয়। যেটা গুরুত্বপূর্ণ তা হল সবকিছু যেমন উচিত তেমন কাজ করে। এখানে আমরা বাস্তবায়ন লুকানো সম্পর্কে কথা বলা হয়েছে. জাভাতেও ডেটা হাইডিং আছে। আমরা গেটার এবং সেটার্স সম্পর্কে পাঠে এটি সম্পর্কে লিখেছি, কিন্তু একটি অনুস্মারক আঘাত করবে না। উদাহরণস্বরূপ, আমাদের একটি বিড়াল ক্লাস আছে:

public class Cat {

   public String name;
   public int age;
   public int weight;

   public Cat(String name, int age, int weight) {
       this.name = name;
       this.age = age;
       this.weight = weight;
   }

   public Cat() {
   }

   public void sayMeow() {
       System.out.println("Meow!");
   }


}
হয়তো আপনি একটি অতীত পাঠ থেকে মনে রাখবেন এই ক্লাসের সমস্যা কি? যদি না হয়, আসুন স্মরণ করা যাক. সমস্যা হল এর ডেটা (ক্ষেত্র) সবার জন্য উন্মুক্ত। অন্য একটি প্রোগ্রামার সহজেই 0 এবং -1000 বছর বয়সের একটি নামহীন বিড়াল তৈরি করতে পারে:

public static void main(String[] args) {

   Cat cat = new Cat();
   cat.name = "";
   cat.age = -1000;
   cat.weight = 0;

}
এই পরিস্থিতিতে, আপনি সাবধানে ট্র্যাক করতে পারেন আপনার একজন সহকর্মী অবৈধ অবস্থার সাথে বস্তু তৈরি করছে কিনা, তবে এই অবৈধ বস্তুগুলি তৈরি করার সম্ভাবনাও দূর করা আরও ভাল হবে। এনক্যাপসুলেশন নীতি - 4আমরা এর সাহায্যে ডেটা লুকানো অর্জন করি:
  1. অ্যাক্সেস মডিফায়ার ( ব্যক্তিগত, সুরক্ষিত, প্যাকেজ ডিফল্ট );
  2. গেটার এবং সেটার্স
কেউ বিড়ালটিকে নেতিবাচক বয়স দেওয়ার চেষ্টা করছে কিনা তা পরীক্ষা করতে আমরা সেগুলি ব্যবহার করি। যেমনটি আমরা আগেই বলেছি, এনক্যাপসুলেশন সম্পর্কিত বিভিন্ন নিবন্ধের লেখকরা আসলে এনক্যাপসুলেশন (ডেটা এবং পদ্ধতির সংমিশ্রণ) বা তথ্য লুকানো বা উভয়কেই উল্লেখ করছেন। জাভাতে উভয় প্রক্রিয়া রয়েছে (অন্যান্য OOP ভাষায় এটি অপরিহার্য নয়), তাই শেষ বিকল্পটি সবচেয়ে সঠিক।

এনক্যাপসুলেশন আমাদের বেশ কয়েকটি গুরুত্বপূর্ণ সুবিধা দেয়:

  1. সঠিক অবজেক্টের অবস্থা পর্যবেক্ষণ করা। আমরা উপরে এর উদাহরণ দিয়েছি: সেটার এবং ব্যক্তিগত সংশোধককে ধন্যবাদ, আমরা 0 এর ওজন সহ বিড়ালের বিরুদ্ধে আমাদের প্রোগ্রাম সুরক্ষিত করেছি।

  2. ব্যবহারকারী-বান্ধব ইন্টারফেস। আমরা শুধুমাত্র ব্যবহারকারীর কাছে উন্মুক্ত পদ্ধতিগুলি ছেড়ে দিই। ফলাফল পেতে ব্যবহারকারীকে কেবল তাদের কল করতে হবে। এবং তারা কিভাবে কাজ করে তার বিশদ বিবরণে অনুসন্ধান করার কোন প্রয়োজন নেই।

  3. কোড পরিবর্তন ব্যবহারকারীদের প্রভাবিত করে না। আমরা পদ্ধতির ভিতরে সমস্ত পরিবর্তন করি। এটি ব্যবহারকারীদের প্রভাবিত করে না: তারা গ্যাস প্রয়োগ করার জন্য vehicle.gas() লিখেছে এবং এটিই তারা চালিয়ে যাবে। আমরা গ্যাস() পদ্ধতির ভিতরে কিছু পরিবর্তন করেছি তা অদৃশ্য রয়ে গেছে: আগের মতো, তারা কেবল প্রয়োজনীয় ফলাফল পায়।
মন্তব্য
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION