This post is also available in: English (الإنجليزية) हिन्दी (الهندية)
منذ إصدار أول لغة برمجة عالية المستوى ، تطورت العديد من لغات البرمجة المختلفة. تتبع كل لغات البرمجة هذه طريقة معينة لكتابة البرامج. هذا غالبا ما يسمى نموذج البرمجة.
نموذج البرمجة هو مفهوم تلتزم به منهجية لغة البرمجة. النماذج مهمة لأنها تحدد لغة البرمجة وكيف تعمل. هناك نماذج أو مناهج برمجة مختلفة ، وتعد البرمجة الموجهة للكائنات (OOPs) واحدة من أكثر النماذج شيوعًا بسبب الميزات الأربع القوية لـ OOPs.
ما هي البرمجة الشيئية؟
كما يوحي الاسم ، تشير البرمجة الشيئية أو OOPs إلى اللغات التي تستخدم الكائنات في البرمجة. تهدف البرمجة الموجهة للكائنات إلى تنفيذ كيانات العالم الحقيقي مثل الوراثة والاختباء وتعدد الأشكال وما إلى ذلك في البرمجة. الهدف الرئيسي من OOP هو ربط البيانات والوظائف التي تعمل عليها معًا بحيث لا يمكن لأي جزء آخر من الكود الوصول إلى هذه البيانات باستثناء تلك الوظيفة.

ميزة الكائنات هي أن الإجراءات الخاصة بالكائن يمكنها الوصول إلى حقول البيانات الخاصة به وتعديلها في كثير من الأحيان (الكائنات لديها فكرة عن هذا أو الذات). في OOP ، تم تصميم برامج الكمبيوتر عن طريق إخراجها من الكائنات التي تتفاعل مع بعضها البعض. تتنوع لغات OOP ، لكن أكثرها شيوعًا تعتمد على الفئات ، مما يعني أن الكائنات هي أمثلة للفئات ، والتي تحدد أيضًا أنواعها.
بعض لغات البرمجة الشيئية الأكثر استخدامًا هي Python و Java و Goو Ruby و C.
لماذا مفهوم OOPs مهم؟
تتميز لغات البرمجة الشيئية بميزة على اللغات الإجرائية بسبب الميزات الأربع التالية:
- التجريد
- التغليف
- ميراث
- تعدد الأشكال
دعونا نلقي نظرة على هذه الميزات ونرى ما تعنيه وما الذي يجعلها فريدة من نوعها؟
التجريد
التجريد هو مفهوم لغات البرمجة الشيئية التي “تُظهر” السمات الأساسية فقط و “تخفي” المعلومات غير الضرورية. الغرض الرئيسي من التجريد هو إخفاء التفاصيل غير الضرورية عن المستخدمين. يقوم التجريد بتحديد البيانات من مجموعة أكبر لإظهار التفاصيل ذات الصلة بالكائن فقط للمستخدم. يساعد في تقليل تعقيد البرمجة والجهود. إنه أحد أهم مفاهيم OOPs.
دعونا نفهم مفهوم التجريد من خلال النظر في مثال. لنفترض أنك تريد إنشاء تطبيق مصرفي ومطلوب منك جمع كل المعلومات عن عميلك. هناك احتمالية أن تتوصل إلى المعلومات التالية عن العميل:
- اسم
- عنوان
- رقم الاتصال
- معلومات حول الضرائب
- الطعام المفضل
- كتاب المفضل
- الفيلم المفضل
- الممثل المفضل
ولكن ، ليست كل المعلومات المذكورة أعلاه مطلوبة لإنشاء تطبيق مصرفي.
لذلك ، تحتاج إلى تحديد المعلومات المفيدة فقط لتطبيقك المصرفي من مجموعة المعلومات أعلاه. البيانات مثل الاسم والعنوان ورقم الاتصال والمعلومات الضريبية منطقية لتطبيق مصرفي وهو مثال تجريدي في OOPs.
نظرًا لأننا جلبنا / حددنا معلومات العميل من مجموعة أكبر ، يشار إلى العملية باسم التجريد في OOPs.
ومع ذلك ، يمكن استخدام نفس المعلومات بمجرد استخراجها لمجموعة واسعة من التطبيقات. على سبيل المثال ، يمكنك استخدام نفس البيانات لقاعدة بيانات حكومية أو تطبيق مستشفى وما إلى ذلك ، مع تعديل بسيط أو بدون تعديل. ومن ثم ، تصبح بياناتك الرئيسية. هذه هي ميزة التجريد في OOPs.
كيف يتم التجريد؟
يمكنك تنفيذ التجريد في OOPs باستخدام الفئات. يساعدنا الفصل في تجميع أعضاء البيانات ووظائف الأعضاء باستخدام محددات الوصول المتاحة. يمكن للفصل تحديد عضو البيانات الذي سيكون مرئيًا للعالم الخارجي وأي عضو غير مرئي.
محددات الوصول هي الركائز الأساسية لتنفيذ التجريد في OOPs. يمكنك استخدام محددات الوصول هذه لفرض قيود على أعضاء الفصل الدراسي. يمكن أن تكون محددات الوصول هذه
- عام: يمكن الوصول إلى الأعضاء المُعلن أنهم عامة في الفصل من أي مكان في البرنامج.
- خاص: لا يمكن الوصول إلى الأعضاء المُعلن أنهم خاصون في الفصل إلا من داخل الفصل. لا يُسمح بالوصول إليها من أي جزء من الكود خارج الفصل.
class implementAbstraction
{
private:
int a, b;
public:
// method to set values of
// private members
void set(int x, int y)
{
a = x;
b = y;
}
void display()
{
cout<<"a = " <<a << endl;
cout<<"b = " << b << endl;
}
};
int main()
{
implementAbstraction obj;
obj.set(10, 20);
obj.display();
return 0;
}
يمكنك أن ترى في البرنامج أعلاه أنه لا يُسمح لنا بالوصول إلى المتغيرين a و b مباشرةً ، ومع ذلك ، يمكنك استدعاء مجموعة الوظائف () لتعيين القيم في a و b وعرض الوظيفة () لعرض القيمتين a و b .
مزايا استخراج البيانات
- يساعد المستخدم على تجنب كتابة كود منخفض المستوى.
- يتجنب تكرار الكود ويزيد من قابلية إعادة الاستخدام.
- يمكن تغيير التنفيذ الداخلي للفئة بشكل مستقل دون التأثير على المستخدم.
- يساعد على زيادة أمان تطبيق أو برنامج حيث يتم توفير التفاصيل المهمة فقط للمستخدم.
- يساعد على زيادة أمان تطبيق أو تطبيق أو برنامج حيث يتم توفير التفاصيل المهمة فقط للمستخدم.
التغليف
في لغات برمجة الكمبيوتر الموجهة للكائنات ، يشير مفهوم التغليف إلى تجميع البيانات ، جنبًا إلى جنب مع الطرق التي تعمل على تلك البيانات ، في وحدة واحدة. تستخدم العديد من لغات البرمجة التغليف في كثير من الأحيان في شكل فصول. صف هو قالب رمز برنامج يسمح للمطورين بإنشاء كائن يحتوي على متغيرات (بيانات) وسلوكيات (وظائف أو طرق). الفصل هو مثال على التغليف في علوم الكمبيوتر من حيث أنه يتكون من البيانات والطرق التي تم تجميعها في وحدة واحدة.
قد يشير التغليف أيضًا إلى آلية لتقييد الوصول المباشر إلى بعض مكونات كائن ، بحيث لا يتمكن المستخدمون من الوصول إلى قيم الحالة لجميع متغيرات كائن معين. يمكن استخدام التغليف لإخفاء أعضاء البيانات ووظائف البيانات أو الأساليب المرتبطة بفئة أو كائن تم إنشاؤه.
ما هي الفئات والكائنات في OOPs؟
الفصلفي OOPs هو لبنة البناء التي تؤدي إلى البرمجة الموجهة للكائنات. إنه نوع بيانات محدد من قبل المستخدم ، والذي يحتفظ بأعضاء البيانات ووظائف الأعضاء الخاصة به ، والتي يمكن الوصول إليها واستخدامها عن طريق إنشاء مثيل لتلك الفئة. الطبقة هي بمثابة مخطط لكائن ما.
على سبيل المثال: ضع في اعتبارك فئة السيارات. قد يكون هناك العديد من السيارات بأسماء وعلامات تجارية مختلفة ، لكن جميعها ستشترك في بعض الخصائص المشتركة مثلها جميعًا ذات 4 عجلات ، وحد السرعة ، ونطاق الأميال ، وما إلى ذلك. هنا ، السيارة هي الفئة ، والعجلات وحدود السرعة والمسافة المقطوعة هي خصائصها أو بياناتها.
الفئة عبارة عن نوع بيانات معرّف من قبل المستخدم يحتوي على أعضاء ووظائف أعضاء.
أعضاء البيانات هم متغيرات البيانات ووظائف الأعضاء هي الوظائف المستخدمة لمعالجة هذه المتغيرات ويحدّد أعضاء البيانات ووظائف الأعضاء معًا خصائص وسلوك الكائنات في الفصل.
في المثال أعلاه لفئة السيارات ، سيكون عضو البيانات هو الحد الأقصى للسرعة ، والمسافة المقطوعة ، وما إلى ذلك ، ويمكن لوظائف الأعضاء استخدام الفرامل ، وزيادة السرعة ، وما إلى ذلك.
الكائنهو مثيل للفئة. عندما يتم تعريف فئة ، لا يتم تخصيص ذاكرة ولكن عندما يتم إنشاء مثيل لها (أي يتم إنشاء كائن) يتم تخصيص الذاكرة.
عندما يتم تعريف فئة ، يتم تحديد مواصفات الكائن فقط ؛ لم يتم تخصيص ذاكرة أو تخزين. لاستخدام البيانات ووظائف الوصول المحددة في الفصل ، تحتاج إلى إنشاء كائنات. في التعليمات البرمجية أعلاه ، فإن التطبيقهو فئة و objهو كائن من الفئة ، والبيانات – أ وب والوظائف – تعيين وعرض معا.
مزايا تغليف البيانات
الميزة الرئيسية لاستخدام التغليف هي أمان البيانات. تشمل فوائد التغليف ما يلي:
- يحمي التغليف كائنًا من الوصول غير المرغوب فيه بواسطة العملاء.
- يسمح التغليف بالوصول إلى مستوى دون الكشف عن التفاصيل المعقدة أسفل المستوى.
- يقلل من الأخطاء البشرية.
- يبسط صيانة التطبيق.
- يجعل التطبيق أسهل في الفهم.
للحصول على أفضل تغليف ، يجب أن تقتصر بيانات الكائن دائمًا على الخصوصية أو المحمية. إذا اخترت تعيين مستوى الوصول للجمهور ، فتأكد من فهم تداعيات الاختيار.
ميراث
كما هو الحال مع المبادئ الأخرى لـ OOPs ، تهدف الوراثة إلى تحسين عمل المبرمجين. يتمثل الدور الذي تلعبه الوراثة في هذا التحسين في السماح لمهندسي البرمجيات بإنشاء تسلسلات هرمية للفئات ، حيث ترث الفئات والكائنات الخصائص والسلوكيات من الطبقة الأصلية (أو الفائقة). تسمى الفئة التي ترث من فئة الأصل (pr super) فئة فرعية أو فئة فرعية ، ويشار إلى الكائنات التي تتلقى خصائص من أحد الوالدين من خلال الوراثة على أنها كائنات تابعة. جزء كبير من فائدة الميراث هو إعادة الاستخدام.
الفئة الفرعية: الفئة التي ترث الخصائص من فئة أخرى تسمى الفئة الفرعية أو الفئة المشتقة.
الفئة الممتازة: تسمى الفئة التي توارث خصائصها عن طريق الفئة الفرعية فئة الأساس أو الفئة الرئيسية أو الفئة الممتازة.
لنأخذ مثالا لطبيب وجراح. الجراح هو في الأساس طبيب لديه خبرة في الجراحة. هنا الطبيب هو فئة الوالدين والجراح هو فئة الأطفال. يتمتع جراح الفصل بجميع خصائص طبيب الفصل بالإضافة إلى بعض الخصائص الإضافية.
أنواع الميراث
في OOPs ، يمكن أن يكون هناك أنواع الوراثة التالية:
- الميراث الفردي: في الميراث الفردي ، تمتد فئة واحدة إلى فئة أخرى (فئة واحدة فقط). على سبيل المثال ، يرث class Dog خصائص فئة Animal. هنا الكلب هو فئة الأطفال والحيوان هو فئة الوالدين.
- الميراث المتعدد: في الوراثة المتعددة ، يمتد فصل واحد إلى أكثر من فئة واحدة. على سبيل المثال ، ترث فئة الخفافيش خصائص فئة Mammal و WingedAnimal.
- الوراثة متعددة المستويات:في الوراثة متعددة المستويات ، ترث فئة واحدة من فئة مشتقة. ومن ثم ، تصبح الفئة المشتقة الفئة الأصلية للفئة الجديدة. على سبيل المثال ، ترث فئة Puppy خصائص الفئة Dog التي ترث خصائص الفئة Animal.
- الميراث الهرمي: في الوراثة الهرمية ، توارث العديد من الفئات الفرعية فئة واحدة. على سبيل المثال ، يرث صنف Dog and Cat فئة Animal.
- الوراثة الهجينة: الوراثة الهجينة هي مزيج من الميراث الفردي والمتعدد.

مزايا الميراث
- الميزة الرئيسية للوراثة هي أنها تساعد في إعادة استخدام الكود. يتم تحديد الرموز مرة واحدة فقط ويتم استخدامها عدة مرات.
- من خلال الوراثة يتم توفير الكثير من الوقت والجهود.
- يحسن هيكل البرنامج الذي يمكن قراءته.
- هيكل البرنامج قصير وموجز وهو أكثر موثوقية.
- الرموز سهلة التصحيح. الوراثة تسمح للبرنامج بالتقاط الخلل بسهولة.
- الوراثة تجعل كود التطبيق أكثر مرونة للتغيير.
- يؤدي الوراثة إلى تنظيم أفضل للرموز إلى وحدات تجميع أصغر وأبسط وأبسط.
تعدد الأشكال
تعدد الأشكال هو إمكانية معالجة أي بيانات في أكثر من شكل. تشير الكلمة نفسها إلى المعنى حيث أن بوليتعني العديدوأن التشكليعني أنواعًا. يعد تعدد الأشكال أحد أهم مفاهيم لغة البرمجة الشيئية. يحدث الاستخدام الأكثر شيوعًا لتعدد الأشكال في OOPs عندما يتم استخدام مرجع فئة أصل للإشارة إلى كائن فئة فرعية.
أمثلة واقعية لتعدد الأشكال ، يمكن للشخص في نفس الوقت أن يلعب أدوارًا مختلفة في الحياة. مثل المرأة في نفس الوقت أم وزوجة وموظفة وابنة. لذلك يجب أن يتمتع نفس الشخص بالعديد من الميزات ولكن يجب أن ينفذ كل منها حسب الحالة والحالة. يعتبر تعدد الأشكال أحد السمات المهمة لـ OOPs.
تعدد الأشكال هو الأسلوب في OOPs الذي يؤدي أشياء مختلفة وفقًا لفئة الكائن ، التي تسميها. مع تعدد الأشكال ، يتم إرسال رسالة إلى كائنات فئة متعددة ، ويستجيب كل كائن بشكل مناسب وفقًا لخصائص الفصل.
لنفترض الآن أن لدينا فئتين فرعيتين من فئة Animal – الحصان والقط التي توسع فئة Animal (من خلال الميراث). يمكننا توفير تنفيذ نفس الطريقة كما يلي:
public class Horse extends Animal{
...
@Override
public void sound(){
System.out.println("Neigh");
}
}
و
public class Cat extends Animal{
...
@Override
public void sound(){
System.out.println("Meow");
}
}
هنا يمكنك أن ترى أنه على الرغم من أن لدينا الإجراء المشترك لجميع الأصوات الفرعية () ، إلا أن هناك طرقًا مختلفة للقيام بنفس الإجراء. هذا مثال ممتاز على تعدد الأشكال (الميزة التي تسمح لنا بأداء عمل واحد بطرق مختلفة). لن يكون من المنطقي استدعاء طريقة الصوت العام () لأن كل حيوان له صوت مختلف. وبالتالي يمكننا القول أن الإجراء الذي تؤديه هذه الطريقة يعتمد على نوع الكائن.
مزايا تعدد الأشكال
- يمكن إعادة استخدام كود المبرمجين عبر تعدد الأشكال.
- يدعم اسم متغير واحد لأنواع بيانات متعددة.
- يقلل الاقتران بين الوظائف المختلفة.