OOP ไม่ได้คิดค้นการห่อหุ้มและไม่ได้มีความหมายเหมือนกันกับการห่อหุ้ม ภาษา OOP หลายภาษาไม่มีตัวดัดแปลงการเข้าถึงสไตล์ C ++ / Java ภาษาที่ไม่ใช่ OOP ส่วนใหญ่มีเทคนิคต่าง ๆ ที่พร้อมใช้งานเพื่อเสนอการห่อหุ้ม
วิธีการหนึ่งที่คลาสสิกสำหรับการห่อหุ้มเป็นปิดที่ใช้ในการเขียนโปรแกรมการทำงาน สิ่งนี้เก่ากว่า OOP อย่างมีนัยสำคัญ แต่มีวิธีที่เทียบเท่า เช่นใน JavaScript เราอาจสร้างวัตถุเช่นนี้
function Adder(x) {
this.add = function add(y) {
return x + y;
}
}
var plus2 = new Adder(2);
plus2.add(7); //=> 9
plus2
วัตถุข้างต้นไม่มีสมาชิกที่จะอนุญาตการเข้าถึงโดยตรงx
- มันถูกห่อหุ้มทั้งหมด add()
วิธีคือการปิดเหนือx
ตัวแปร
Cภาษาสนับสนุนบางชนิด encapsulation ผ่านไฟล์ส่วนหัวกลไกโดยเฉพาะอย่างยิ่งตัวชี้ทึบแสงเทคนิค ใน C เป็นไปได้ที่จะประกาศชื่อ struct โดยไม่ต้องกำหนดสมาชิก ณ จุดนั้นไม่มีตัวแปรชนิดของ struct นั้นสามารถใช้ได้ แต่เราสามารถใช้พอยน์เตอร์กับ struct นั้นได้อย่างอิสระ (เนื่องจากขนาดของตัวชี้ struct นั้นเป็นที่รู้จักในเวลารวบรวม) ตัวอย่างเช่นพิจารณาไฟล์ส่วนหัวนี้:
#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;
}
นอกจากนี้ยังมีคลาสของภาษาการเขียนโปรแกรมแบบแยกส่วนซึ่งเน้นไปที่อินเทอร์เฟซระดับโมดูล ตระกูล ML ภาษารวม OCaml รวมถึงวิธีการที่น่าสนใจที่จะเรียกว่าโมดูลfunctors OOP มีการบดบังและการเขียนโปรแกรมแบบโมดูลย่อยส่วนใหญ่ แต่ข้อได้เปรียบที่ได้รับจาก OOP นั้นมีความหลากหลายมากกว่าการวางแนววัตถุ
นอกจากนี้ยังมีข้อสังเกตว่าคลาสในภาษา OOP เช่น C ++ หรือ Java มักจะไม่ใช้สำหรับวัตถุ (ในแง่ของเอนทิตีที่แก้ไขการดำเนินงานผ่านการเชื่อมโยงล่าช้า / การจัดส่งแบบไดนามิก) แต่สำหรับประเภทข้อมูลนามธรรม (ที่เรากำหนดอินเทอร์เฟซสาธารณะ รายละเอียดการใช้งานภายใน) กระดาษในการทำความเข้าใจข้อมูลที่เป็นนามธรรม, Revisited (Cook, 2009) กล่าวถึงความแตกต่างในรายละเอียดเพิ่มเติมนี้
แต่ใช่หลายภาษาไม่มีกลไกการห่อหุ้ม แต่อย่างใด ในภาษาเหล่านี้สมาชิกโครงสร้างจะถูกปล่อยให้เป็นสาธารณะ อย่างน้อยที่สุดก็จะมีการตั้งชื่อการใช้งานท้อใจ เช่นฉันคิดว่า Pascal ไม่มีกลไกการห่อหุ้มที่เป็นประโยชน์