OOP এনক্যাপসুলেশন আবিষ্কার করেনি এবং এনক্যাপসুলেশনের সমার্থক নয়। অনেক ওওপি ভাষায় সি ++ / জাভা শৈলীর অ্যাক্সেস সংশোধক নেই। অনেকগুলি অ-ওওপি ভাষার এনক্যাপসুলেশন সরবরাহ করার জন্য বিভিন্ন কৌশল উপলব্ধ।
এনক্যাপসুলেশনের জন্য একটি ক্লাসিক পদ্ধতি হ'ল ক্লোজার , যেমন ফাংশনাল প্রোগ্রামিংয়ে ব্যবহৃত হয় । এটি ওওপির চেয়ে উল্লেখযোগ্যভাবে পুরানো তবে এটি একরকম সমতুল্য। উদাহরণস্বরূপ জাভাস্ক্রিপ্টে আমরা এটির মতো একটি বিষয় তৈরি করতে পারি:
function Adder(x) {
this.add = function add(y) {
return x + y;
}
}
var plus2 = new Adder(2);
plus2.add(7); //=> 9
উপরের plus2
অবজেক্টটির এমন কোনও সদস্য নেই যা এতে সরাসরি অ্যাক্সেসের অনুমতি দেবে x
- এটি সম্পূর্ণরূপে আবদ্ধ থাকে। add()
পদ্ধতি উপর একটি অবসান হয় x
পরিবর্তনশীল।
সি ভাষা তার মাধ্যমে এনক্যাপস্যুলেশন কিছু ধরণের সমর্থন হেডার ফাইল প্রক্রিয়া, বিশেষ করে অস্বচ্ছ পয়েন্টার টেকনিক। সি-তে, এর সদস্যদের সংজ্ঞা না দিয়ে কোনও কাঠামোর নাম ঘোষণা করা সম্ভব। সেই সময়ে সেই স্ট্রাক্টের ধরণের কোনও ভেরিয়েবল ব্যবহার করা যায় না, তবে আমরা সেই কাঠামোর জন্য পয়েন্টারগুলি অবাধে ব্যবহার করতে পারি (কারণ স্ট্রাক পয়েন্টারের আকার সংকলনের সময় জানা যায়)। উদাহরণস্বরূপ, এই শিরোলেখ ফাইলটি বিবেচনা করুন:
#ifndef ADDER_H
#define ADDER_H
typedef struct AdderImpl *Adder;
Adder Adder_new(int x);
void Adder_free(Adder self);
int Adder_add(Adder self, int y);
#endif
আমরা এখন এমন কোড লিখতে পারি যা এই অ্যাডার ইন্টারফেসটি ব্যবহার করে, এর ক্ষেত্রগুলিতে অ্যাক্সেস ছাড়াই, যেমন:
Adder plus2 = Adder_new(2);
if (!plus2) abort();
printf("%d\n", Adder_add(plus2, 7)); /* => 9 */
Adder_free(plus2);
এবং এখানে সম্পূর্ণ ক্যাপসুলেটেড বাস্তবায়ন বিবরণ হবে:
#include "adder.h"
struct AdderImpl { int x; };
Adder Adder_new(int x) {
Adder self = malloc(sizeof *self);
if (!self) return NULL;
self->x = x;
return self;
}
void Adder_free(Adder self) {
free(self);
}
int Adder_add(Adder self, int y) {
return self->x + y;
}
এখানে মডিউলার প্রোগ্রামিং ভাষার ক্লাসও রয়েছে , যা মডিউল স্তরের ইন্টারফেসগুলিতে ফোকাস করে। এমএল ভাষা পরিবার সহ। ওসিএএমএলে ফ্যান্টেক্টর নামক মডিউলগুলির একটি আকর্ষণীয় পদ্ধতির অন্তর্ভুক্ত । ওওপি ওভারশ্যাড এবং মূলত গ্রাহকযুক্ত মডিউলার প্রোগ্রামিং, তবুও ওওপির অনেকগুলি পূর্বনির্ধারিত সুবিধা অবজেক্ট অরিয়েন্টেশনের চেয়ে মডুলারিটি সম্পর্কে বেশি।
আরও পর্যবেক্ষণ রয়েছে যে OOP ভাষায় C ++ বা জাভা জাতীয় ক্লাসগুলি প্রায়শই বস্তুর জন্য ব্যবহার করা হয় না (সত্তা অর্থে যেগুলি দেরীতে বাইন্ডিং / গতিশীল প্রেরণের মাধ্যমে ক্রিয়াকলাপ সমাধান করে) তবে কেবল বিমূর্ত ডেটা প্রকারের জন্য (যেখানে আমরা একটি সর্বজনীন ইন্টারফেস সংক্ষিপ্ত করে যা আড়াল করে অভ্যন্তরীণ বাস্তবায়ন বিশদ)। কাগজ উপর বোঝাপড়া ডেটা বিমূর্ততা, Revisited (কুক 2009) আরো বিস্তারিত এই পার্থক্য আলোচনা করা হয়েছে।
তবে হ্যাঁ, অনেকগুলি ভাষায় যেকোনও এনক্যাপসুলেশন ব্যবস্থা নেই। এই ভাষাগুলিতে কাঠামোর সদস্যরা সর্বজনীন হয়ে থাকে। বেশিরভাগ ক্ষেত্রে, নামকরণের সম্মেলনটি নিরুৎসাহিত করার ব্যবস্থা থাকবে। উদাহরণস্বরূপ আমি মনে করি পাস্কালের কোনও কার্যকর এনক্যাপসুলেশন ব্যবস্থা ছিল না।