ओओपी ने एनकैप्सुलेशन का आविष्कार नहीं किया और एनकैप्सुलेशन का पर्याय नहीं है। कई ओओपी भाषाओं में सी ++ / जावा शैली का उपयोग संशोधक नहीं है। कई गैर-ओओपी भाषाओं में एनकैप्सुलेशन की पेशकश करने के लिए विभिन्न तकनीकें उपलब्ध हैं।
एन्कैप्सुलेशन के लिए एक क्लासिक दृष्टिकोण क्लोजर है , जैसा कि कार्यात्मक प्रोग्रामिंग में उपयोग किया जाता है । यह 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 इंटरफ़ेस का उपयोग करता है, बिना इसके क्षेत्रों तक पहुँच के, जैसे:
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;
}
मॉड्यूलर प्रोग्रामिंग भाषाओं की श्रेणी भी है , जो मॉड्यूल-स्तरीय इंटरफेस पर केंद्रित है। एमएल भाषा परिवार झुकाव। OCaml में फंक्शंस नामक मॉड्यूल का एक दिलचस्प तरीका शामिल है । OOP ने बड़े पैमाने पर और बड़े पैमाने पर मॉड्यूलर प्रोग्रामिंग को सब्सक्राइब किया, फिर भी OOP के कई कथित फायदे ऑब्जेक्ट ओरिएंटेशन की तुलना में मॉड्यूलरिटी के बारे में अधिक हैं।
ओआरओपी भाषाओं में सी + + या जावा जैसी कक्षाओं का उपयोग अक्सर वस्तुओं के लिए नहीं किया जाता है (संस्थाओं के अर्थ में जो देर से बाध्यकारी / गतिशील प्रेषण के माध्यम से संचालन को हल करते हैं) लेकिन केवल सार डेटा प्रकारों के लिए (जहां हम एक सार्वजनिक इंटरफ़ेस को परिभाषित करते हैं जो छुपाता है आंतरिक कार्यान्वयन विवरण)। डेटा अंडरस्टैंडिंग, रिविजिटेड (कुक, 2009) का पेपर इस अंतर पर अधिक विस्तार से चर्चा करता है।
लेकिन हां, कई भाषाओं में कोई भी एन्कैप्सुलेशन तंत्र नहीं है। इन भाषाओं में, संरचना सदस्यों को सार्वजनिक छोड़ दिया जाता है। अधिक से अधिक, एक नामकरण सम्मेलन हतोत्साहित करने वाला उपयोग होगा। उदाहरण के लिए, मुझे लगता है कि पास्कल के पास कोई उपयोगी एन्कैप्सुलेशन तंत्र नहीं था।