التغليف (Encapsulation)
المفهوم الثاني في البرمجة الكائنية..
التغليف (Encapsulation): وقاية حال الكائن بمنع الوصول إليها مباشرةً أو تعيينها إلا من طرق محددة.
فهذا يتحقق من جهتين:
- طرائق الوصول (getters) هي الإجراءات التي يتم بها حال الكائن.
- طرائق التعيين (setters) هي الإجراءات التي يتم بها حال الكائن.
طرائق الوصول (getters)
نمثل لذلك بحالات الماء الفيزيائيَّة:
- الغازية
- الصلبة
- المائعة

نعرّف الحالات الثلاث في WaterState بهذه القطعة البرمجية:
ثم عند تعريف الماء صِنفًا من خواصه درجة الحرارة، يتم تعريف خاصيَّة state كدالة تعطينا الحالة بحسب درجة الحرارة؛ بحيث لا تخرج الحالة عما تم تعريفه مسبقًا، كما هو موضح:
وبهذا نكون قد منعنا من تغيير حال الماء state وأبقينا temperature بلا قيود.
ثم ننشئ منه كائنًا ونجرب (لاحظ عدم وجود قوسي الاستدعاء عند state؛ لأنَّها @property):
نجرب تغيير درجة الحرارة لنرى كيف ينعكس ذلك على الحال:
طرائق التعيين (setters)
لاحظ أننا غيرنا درجة الحرارة مباشرة في المثال السابق. أما في هذا المثال سنضع طريقة خاصَّة لتغيير درجة الحرارة. لمراعاة الظروف الفيزيائية بحسب معادلة رياضية.
إذا كان لديك أنبوبة مصمتة فيها غاز. وصغطت هذه الأنبوبة فسيجتمع الغاز ويصبح أكثر كثافة؛ لأن الحجم قل. فزيادة الضغط تؤدي لقلة الحجم.
فالمعادلة بالنسبة للحجم:
حيث ثابت. سنختار أن يكون 100 في هذا المثال.
في الداخل الحجم المحفوظ، وحوله الخاصيّتان اللتان نتعامل بهما مع الكائن: volume للقراءة والتعيين، وpressure لقراءة الضغط المحسوب.
نجرّب ضغط الغاز بتقليل حجمه إلى النصف:
أما محاولة تعيين حجم غير صالح، فتُظهر سبب الرفض وتُبقي الحجم السابق:
مكبسان من الصنف نفسه
الصنف Piston يعرّف كيفية عمل المكبس، ويمكننا إنشاء كائنات كثيرة منه. ننشئ مكبسين، لكل منهما حجمه: