التغليف (برمجة الحاسوب)

في أنظمة البرمجيات، يشير التغليف إلى تجميع البيانات مع الآليات أو الأساليب التي تعمل عليها. وقد يشير أيضًا إلى تقييد الوصول المباشر إلى بعض تلك البيانات، مثل مكونات الكائن. [ 1 ] وباختصار، يمنع التغليف الشيفرة الخارجية من الخوض في تفاصيل عمل الكائن الداخلية.

يُمكّن التغليف المطورين من تقديم واجهة متسقة مستقلة عن تفاصيل التنفيذ الداخلية. على سبيل المثال، يُمكن استخدام التغليف لإخفاء قيم أو حالة كائن بيانات مُهيكل داخل فئة . هذا يمنع العملاء من الوصول المباشر إلى هذه المعلومات بطريقة قد تكشف تفاصيل التنفيذ المخفية أو تُخلّ بثبات الحالة الذي تحافظ عليه الدوال.

يشجع التغليف المبرمجين على وضع جميع التعليمات البرمجية المتعلقة بمجموعة بيانات معينة في نفس الفئة، مما يُسهّل فهمها من قِبل المبرمجين الآخرين. التغليف أسلوب يُشجع على فصل المكونات .

تدعم جميع أنظمة البرمجة كائنية التوجه (OOP) التغليف، [ 2 ] [ 3 ] ولكن التغليف ليس حكرًا على البرمجة كائنية التوجه. كما توفر تطبيقات أنواع البيانات المجردة والوحدات والمكتبات التغليف أيضًا . وقد فسّر منظرو لغات البرمجة هذا التشابه من خلال الأنواع الوجودية . [ 4 ]

معنى

في لغات البرمجة الموجهة للكائنات ، والمجالات الأخرى ذات الصلة، يشير التغليف إلى أحد مفهومين مرتبطين ولكن متميزين، وأحيانًا إلى الجمع بينهما: [ 5 ] [ 6 ]

  • آلية لغوية لتقييد الوصول المباشر إلى بعض مكونات الكائن . [ 7 ] [ 8 ]
  • بنية لغوية تُسهّل تجميع البيانات مع الطرق (أو الوظائف الأخرى) التي تعمل على تلك البيانات. [ 1 ] [ 9 ]

يستخدم بعض الباحثين والأكاديميين في لغات البرمجة المعنى الأول وحده أو بالاشتراك مع المعنى الثاني كسمة مميزة للبرمجة الموجهة للكائنات ، بينما تعتبر بعض لغات البرمجة التي توفر الإغلاقات المعجمية التغليف سمة من سمات اللغة المتعامدة مع التوجه الكائني.

يعكس التعريف الثاني حقيقة أن العديد من لغات البرمجة الكائنية التوجه، وغيرها من المجالات ذات الصلة، لا تُخفى المكونات تلقائيًا، ويمكن تجاوز هذا الإخفاء. ولذلك، يُعرّف من يفضلون التعريف الثاني إخفاء المعلومات كمفهوم منفصل.

يتم دعم ميزات التغليف باستخدام الفئات في معظم لغات البرمجة الكائنية، على الرغم من وجود بدائل أخرى أيضًا.

قد يشير التغليف أيضًا إلى احتواء عملية متكررة أو معقدة في وحدة واحدة يتم استدعاؤها. تُسهّل البرمجة كائنية التوجه هذا الأمر على مستوى كل من الأساليب والفئات. وينطبق هذا التعريف أيضًا على البرمجة الإجرائية . [ 10 ]

التغليف والوراثة

يناقش مؤلفو كتاب "أنماط التصميم" بالتفصيل التوتر القائم بين الوراثة والتغليف، ويشيرون إلى أن المصممين، بحسب خبرتهم، يفرطون في استخدام الوراثة. ويزعمون أن الوراثة غالبًا ما تُخلّ بمبدأ التغليف، نظرًا لأنها تُعرّض الفئة الفرعية لتفاصيل تنفيذ الفئة الأصلية. [ 11 ] وكما هو موضح في مسألة اليويو ، فإن الإفراط في استخدام الوراثة، وبالتالي التغليف، قد يُصبح مُعقدًا للغاية ويصعب تصحيح أخطائه.

إخفاء المعلومات

بحسب تعريف التغليف الذي "يُمكن استخدامه لإخفاء عناصر البيانات ووظائف الأعضاء"، فإن التمثيل الداخلي للكائن يكون مخفيًا عمومًا خارج تعريف الكائن. عادةً، لا يمكن فحص حقول الكائن أو معالجتها مباشرةً إلا من خلال أساليب الكائن نفسه. يحمي إخفاء العناصر الداخلية للكائن سلامته بمنع المستخدمين من تغيير حالة البيانات الداخلية للمكون إلى حالة غير صالحة أو غير متسقة. من الفوائد المفترضة للتغليف أنه يُقلل من تعقيد النظام، وبالتالي يزيد من متانته ، وذلك بالسماح للمطور بالحد من الترابط بين مكونات البرنامج.

تسمح بعض لغات البرمجة، مثل Smalltalk و Ruby، بالوصول إلى البيانات عبر توابع الكائنات فقط، بينما تتيح معظم اللغات الأخرى (مثل C++ و C# و Delphi و Java [ 12 ] ) للمبرمج بعض التحكم في البيانات المخفية، عادةً عبر كلمات مفتاحية مثل `<input>` publicو`< input>` private. [ 8 ] يشير معيار ISO C++ إلى protected` <input>` privateو` <input>` publicعلى أنها " محددات وصول "، ويؤكد أنها لا "تخفي أي معلومات". يتم إخفاء المعلومات من خلال توفير نسخة مُجمّعة من شفرة المصدر يتم الوصول إليها عبر ملف رأس.

في أغلب الأحيان، توجد طريقة لتجاوز هذا النوع من الحماية ، عادةً عبر واجهة برمجة تطبيقات الانعكاس (Ruby، Java، C#، إلخ)، وأحيانًا عبر آليات مثل تغيير أسماء المتغيرات ( Python )، أو استخدام كلمات مفتاحية خاصة كما في C++. أما الأنظمة التي توفر أمانًا قائمًا على إمكانياتfriend الكائنات (متوافقة مع نموذج إمكانيات الكائنات ) فهي استثناء، وتضمن تغليفًا قويًا.

أمثلة

تقييد حقول البيانات

توفر لغات مثل C ++ و C# و Java و PHP و Swift و Delphi طرقًا لتقييد الوصول إلى حقول البيانات .

فيما يلي مثال بلغة C# يوضح كيفية تقييد الوصول إلى حقل بيانات باستخدام privateكلمة مفتاحية:

class Program { public class Account { private decimal _accountBalance = 500.00m ;public decimal CheckBalance () { return _accountBalance ; } }static void Main () { Account myAccount = new (); decimal myBalance = myAccount . CheckBalance ();/* يمكن لهذه الدالة الرئيسية التحقق من الرصيد عبر الدالة العامة  * "CheckBalance" التي توفرها فئة "Account"  * ولكن لا يمكنها التلاعب بقيمة "accountBalance" */ } }

فيما يلي مثال بلغة جافا :

public class Employee { private BigDecimal salary = new BigDecimal ( 50000.00 ); public BigDecimal getSalary () { return this . salary ; }public static void main () { Employee e = new Employee (); BigDecimal sal = e . getSalary (); } }

يُمكن تطبيق التغليف أيضًا في اللغات غير الكائنية التوجه. ففي لغة C ، على سبيل المثال، يُمكن تعريف بنية في واجهة برمجة التطبيقات العامة (API) عبر ملف رأس لمجموعة من الدوال التي تعمل على عنصر بيانات يحتوي على أعضاء بيانات غير قابلة للوصول لعملاء واجهة برمجة التطبيقات باستخدام الكلمة externالمفتاحية. [ 13 ]

// ملف الرأس "api.h" #pragma oncetypedef struct Entity Entity ; // بنية معتمة ذات أعضاء مخفية// دوال واجهة برمجة التطبيقات التي تعمل على كائنات "Entity" Entity * openEntity ( int id ); int processEntity ( Entity * e ); void closeEntity ( Entity * e );

يستدعي العملاء وظائف واجهة برمجة التطبيقات (API) لتخصيص كائنات من نوع بيانات مبهم ، والتعامل معها، وإلغاء تخصيصها . لا يمكن الوصول إلى محتويات هذا النوع إلا من قِبل تطبيق وظائف واجهة برمجة التطبيقات؛ ولا يمكن للعملاء الوصول إليها مباشرةً. يحدد الكود المصدري لهذه الوظائف المحتويات الفعلية للبنية.

// ملف التنفيذ "api.c"#include "api.h"typedef struct Entity { int ent_id ; // رقم التعريف char ent_name [ 20 ]; // الاسم ... وأعضاء آخرون ... } Entity ;// تنفيذ وظائف واجهة برمجة التطبيقات Entity * openEntity ( int id ) { // ... }int processEntity ( Entity * e ) { // ... }void closeEntity ( Entity * e ) { // ... }

تشويه الأسماء

فيما يلي مثال بلغة بايثون ، التي لا تدعم قيود الوصول إلى المتغيرات. ومع ذلك، فإن المتعارف عليه هو أن المتغير الذي يبدأ اسمه بشرطة سفلية يُعتبر خاصًا. [ 14 ]

class Car : def __init__ ( self ) -> None : self . _maxspeed = 200def drive ( self ) -> None : print ( f "السرعة القصوى هي { self . _maxspeed } ." )redcar : Car = Car () redcar . drive () # سيتم طباعة "السرعة القصوى هي 200."redcar._maxspeed = 10 redcar.drive () # سيطبع هذا 'السرعة القصوى هي 10 ' .

انظر أيضاً

الاقتباسات

  1. 1 2 روجرز، ويليام بول (18 مايو 2001). "التغليف ليس إخفاءً للمعلومات" . جافا وورلد . تم الاسترجاع في 20 يوليو 2020 .
  2. "ما هي البرمجة الكائنية التوجه (OOP)؟" . هندسة التطبيقات . تم الاسترجاع في 2024-03-02 .
  3. "التغليف في البرمجة الكائنية التوجه (OOP)" . www.enjoyalgorithms.com . تم الاطلاع عليه بتاريخ 2024-03-02 .
  4. بيرس 2002 ، § 24.2 تجريد البيانات باستخدام الوجوديات
  5. سكوت، مايكل لي (2006). براغماتية لغات البرمجة ( الطبعة الثانية). مورغان كوفمان. ص 481. ISBN   978-0-12-633951-2تُمكّن آليات التغليف المبرمج من تجميع البيانات والإجراءات الفرعية التي تعمل عليها معًا في مكان واحد، وإخفاء التفاصيل غير ذات الصلة عن مستخدمي التجريد.
  6. ديل، نيل ب.؛ ويمز، تشيب (2007). البرمجة وحل المشكلات باستخدام جافا ( الطبعة الثانية). جونز وبارتليت. ص 396. ISBN   978-0-7637-3402-2.
  7. ميتشل، جون سي. (2003). مفاهيم في لغات البرمجة . مطبعة جامعة كامبريدج. ص 522. ISBN  978-0-521-78098-8.
  8. 1 2 بيرس، بنجامين (2002). الأنواع ولغات البرمجة . مطبعة معهد ماساتشوستس للتكنولوجيا. ص 266. ISBN  978-0-262-16209-8.
  9. كونولي، توماس م.؛ بيج، كارولين إي. (2005). "الفصل 25: مقدمة إلى أنظمة إدارة قواعد البيانات الكائنية § مفاهيم البرمجة الكائنية". أنظمة قواعد البيانات: منهج عملي للتصميم والتنفيذ والإدارة ( الطبعة الرابعة). بيرسون للتعليم. ص 814. ISBN   978-0-321-21025-8.
  10. ماكدونو، جيمس إي. (2017). "التغليف". التصميم الموجه للكائنات باستخدام ABAP: منهج عملي . Apress . doi : 10.1007/978-1-4842-2838-8 . ISBN 978-1-4842-2837-1 عبر أورايلي .
  11. غاما، إريك؛ هيلم، ريتشارد؛ جونسون، رالف؛ فليسيدس، جون (1994). أنماط التصميم . أديسون-ويسلي. ISBN 978-0-201-63361-0.
  12. 1 2 بلوخ 2018 ، ص 73-77 ، الفصل §4 البند 15 تقليل إمكانية الوصول إلى الفصول والأعضاء.
  13. كينغ، ك. ن. (2008). برمجة لغة سي: منهج حديث ( الطبعة الثانية). دبليو دبليو نورتون وشركاه. ص 464. ISBN   978-0393979503.
  14. بادر، دان. "معنى الشرطات السفلية في بايثون" . حسّن مهاراتك في بايثون . تم الاطلاع عليه في 1 نوفمبر 2019 .

مراجع

  • بلوخ، جوشوا (2018). "جافا الفعّالة: دليل لغة البرمجة" (  الطبعة الثالثة). أديسون-ويسلي. ISBN 978-0134685991.