تعدد الأشكال في جافا: المفاهيم والأنواع والخصائص والأمثلة
نشرت: 2022-04-18تعد Javascript واحدة من أكثر لغات البرمجة الموجهة للكائنات شيوعًا والمستخدمة على نطاق واسع ، إلى جانب C # و PHP و Python و C ++ وما إلى ذلك ، فهي تمكن المستخدمين من عرض مفاهيم الحياة الواقعية ومعالجتها من خلال البرمجة حيث يتم تمثيل كل شيء ككائن. توفر ميزات Java كلغة برمجة عدة طرق لتبسيط تطوير البرامج من خلال جعل الرموز أكثر ديناميكية وتسهيل الصيانة.
في هذه المقالة ، سوف نستكشف Java كلغة برمجة كائنية التوجه ونفهم مفاهيم الوراثة والتجريد وتعدد الأشكال وتغليف البيانات. سننظر أيضًا في أنواع تعدد الأشكال في Java ومزاياها وعيوبها.
نظرة عامة على البرمجة الشيئية
تشير لغات البرمجة الموجهة للكائنات (OOP) إلى لغات الكمبيوتر التي تستخدم مفهوم "الكائنات" في الوقت الفعلي في الترميز. يهدف إلى تنفيذ كيانات دنيوية مثل الوراثة ، وتعدد الأشكال ، والحلقات ، وتجريد البيانات ، وما إلى ذلك ، من خلال البرمجة.
هناك بعض المفاهيم الأساسية للبرمجة الشيئية التي يحتاج المبرمجون إلى التعرف عليها. هذه المصطلحات المفاهيمية ضرورية للتعرف على الميزات الخاصة والفريدة من نوعها لـ OOP مثل التغليف وتعدد الأشكال وما إلى ذلك.
1. الطبقة
تمثل "الفئة" مجموعة من الخصائص والطرق التي تنطبق على جميع "الكائنات" المحددة داخل الفصل. يمكن أن تكون الكائنات من أنواع مختلفة مثل عدد صحيح أو مصفوفة أو سلسلة ، إلخ. الفئة تشبه النموذج الأولي الذي يحدده المستخدم ، باستخدام أي "كائنات" مختلفة يمكن إنشاؤها.
2. الكائن
الكائن هو الوحدة الأساسية للغات OOP ، ويمثل بيانات حقيقية في الحياة الواقعية. الكائنات تحمل خصائص الفئة (الفئات) التي تم استدعاؤها فيها.
3. الطريقة
الطريقة هي مجموعة من العبارات التي تتضمن وظائف مختلفة يتم تجميعها معًا لأداء مهمة محددة. تقوم بإرجاع الإخراج بعد إكمال التعليمات كما حددها المستخدم. يمكنه أيضًا تنفيذ المهام التي لا تقدم أي مخرجات. تسمح الأساليب للمبرمجين بإعادة استخدام الرموز دون إعادة كتابتها. تتطلب Java أن تنتمي جميع الطرق إلى فئة ، على عكس لغات مثل C ++ أو C أو Python.
مفاهيم OOP
هناك أربعة مبادئ أساسية للبرمجة الموجهة للكائنات - تعرض Java كل هذه الخصائص:
1. التجريد
تجريد البيانات هي خاصية للغات OOP تعرض التفاصيل الضرورية مع الحفاظ على التفاصيل الأخرى غير ذات الصلة للكائن من الرؤية للمستخدم ، مثل كود التنفيذ. يتم عرض التفاصيل الأساسية وذات الصلة فقط بواسطة هذه الميزة ، مما يساعد المطورين على إجراء التغييرات المناسبة بسرعة على وظائف الفصل.
2. التغليف
يشير تغليف البيانات إلى التفاف البيانات داخل الوحدات. تحمي خاصية لغات OOP هذه البيانات المغلفة من الوظائف والطرق الأخرى. إنه يربط الكود والطرق المحددة معًا لإجراء العمليات في وحدات مفردة ، وبالتالي يمنع التلاعب بها أو الوصول إليها بطرق خارجية. يُعرف هذا أيضًا بإخفاء البيانات.
3. الميراث
الوراثة هي ميزة مهمة أخرى للغات OOP والتي تسمح للفصل أن يرث الخصائص من الفئات الأخرى. إنه يعمل على مفهوم إعادة استخدام الرموز ، وبالتالي تقليل الحاجة إلى إعادة كتابة ميزات الفئة بشكل متكرر. تُعرف الفئة التي ترث من فئة أخرى باسم الفئة الفرعية ، وتُعرف الفئة التي يتم توريثها باسم الطبقة الفائقة.
4. تعدد الأشكال
يسمح تعدد الأشكال للكائن بأخذ العديد من الأشكال وأداء مهام مماثلة أو إظهار سلوكيات متشابهة بطرق مختلفة.
تعدد الأشكال في جافا
يسمح تعدد الأشكال بأداء مهمة واحدة بطرق مختلفة. إنها خاصية تساعد في التعرف والتمييز بين كيانات الكود المتشابهة ، وبالتالي تعزيز كفاءة لغات OOP.
في جافا ، يتم عرض تعدد الأشكال من خلال إعلان الكائنات ككيانات منفصلة. بهذه الطريقة ، يمكن تنفيذ نفس الإجراء بعدة طرق. يتم تنشيط تعدد الأشكال جنبًا إلى جنب مع الوراثة ، مما يمكّن الكائنات من تنفيذ مهام مختلفة باستخدام الخصائص الموروثة للفئات المختلفة. الاختلافات في تسمية الأساليب أو الأشياء تميز كيانين.
تعلم دورات تطوير البرمجيات عبر الإنترنت من أفضل الجامعات في العالم. اربح برامج PG التنفيذية أو برامج الشهادات المتقدمة أو برامج الماجستير لتتبع حياتك المهنية بشكل سريع.
خصائص تعدد الأشكال
1. الإكراه
يعتبر التحويل الضمني لأنواع البيانات لمنع أخطاء الكتابة أثناء وقت التجميع هو الإكراه. لا يتضمن تحويلات نوع البيانات الصريحة ولكنه يتبع فقط التسلسل الهرمي للتحويل الذي تسمح به Java. على سبيل المثال ، إذا كان المعامل واقفا على قدميه وكان العامل عددًا صحيحًا ، فسيكون الناتج عائمًا.
2. متغيرات / متغيرات متعددة الأشكال
يُعرف الكائن أو المتغير الذي يمكنه الاحتفاظ بقيم من أنواع مختلفة أثناء وقت التنفيذ باسم متغير أو معلمة متعددة الأشكال. إنه يفرض أنه أثناء الإعلان عن فئة ، يمكن أن تحتوي أسماء المتغيرات نفسها على أنواع بيانات مختلفة ، ويمكن أن تحتوي أسماء الطرق نفسها على معلمات وأنواع إرجاع مختلفة.
3. الحمل الزائد على المشغل الداخلي
يستخدم الحمل الزائد على المشغل رمز المشغل كما هو مطلوب من قبل المستخدم. تدعم Java التحميل الزائد للمشغل الداخلي. إنه أيضًا مثال على تعدد الأشكال الثابت.
أنواع تعدد الأشكال في جافا
في Java ، يمكن استدعاء تعدد الأشكال باستخدام:
1. طريقة التحميل الزائد
طريقة التحميل الزائد هي عملية إنشاء كائنات أو طرق متعددة تحمل نفس الاسم وتنتمي إلى نفس الفئة. يعمل داخل الفصل.
2. أسلوب التجاوز
تجاوز الطريقة هو كيف تشكل الفئة الفرعية نفس الطرق المعلنة في الطبقة العليا. يعمل عبر الفصول. إذا كانت الفئة الفرعية تحتوي على نفس الطرق الموجودة بالفعل في الفئة الفائقة ، فسيتم تجاوز الوظيفة الموجودة في الفئة الفرعية.
النوع الفرعي تعدد الأشكال في جافا
يعتمد تعدد الأشكال الفرعي على التنبيه والترابط المتأخر.
- Upcasting هي عملية يمكن من خلالها لكائن أو طريقة تعزيز نوع بيانات (عدد صحيح ، عدد صحيح ، إلخ) من نوع فرعي إلى نوع فائق عن طريق تحريكه لأعلى في التسلسل الهرمي للميراث.
- يتم استخدام الربط المتأخر لاستدعاء الطرق غير النهائية.
لا يوجد عامل متورط في هذا لأن النوع الفرعي نفسه عضو في النوع الفائق. على سبيل المثال ، إذا تم تسمية فئة بألوان ، فيمكن أن تكون الأنواع الفرعية لها أحمر ، أزرق ، برتقالي ، أخضر ، إلخ. يتضمن تعدد الأشكال الفرعي الأنواع الفرعية لعرض خصائص النوع الفائق. ومع ذلك ، يتم فقدان الوصول إلى الخصائص الفردية لكل نوع فرعي.
تعدد الأشكال وقت التشغيل في جافا
في Java ، يُعرف تعدد أشكال وقت التشغيل أيضًا باسم إرسال الطريقة الديناميكية أو الربط الديناميكي. يتم تحقيق ذلك من خلال تجاوز الطريقة - استدعاء طريقة تم تجاوزها لتوفير حل ديناميكي في وقت التشغيل. يمكن تحقيقه من خلال الوظائف وليس الأشياء.
فيما يلي مثال على تعدد أشكال وقت التشغيل في Java:
فئة سيارة {
تشغيل باطل () {System.out.println ("قيادة") ؛}
}
فئة فولكس فاجن تمد السيارة {
void run () {System.out.println ("القيادة بأمان لمسافة 90 كم) ؛}
العامة الثابتة الفراغ الرئيسي (سلاسل سلسلة []) {
السيارة c = new Volkswagen () ؛ // upcasting
b.run () ؛
}
}
الإخراج :
القيادة بأمان مع 90 كم
ترجمة تعدد الأشكال الزمني في جافا
يتم تحقيق تعدد الأشكال في وقت التجميع عن طريق التحميل الزائد للطريقة. إنها العملية التي يتم فيها تنفيذ استدعاء طريقة التحميل الزائد وحلها أثناء وقت الترجمة. يُعرف أيضًا باسم تعدد الأشكال الثابت. تعد Java مرنة بما يكفي للسماح للمستخدم باستخدام أساليب أو كائنات لها نفس الأسماء طالما ظلت إعلاناتها وخصائص التوقيع مختلفة.
فيما يلي مثال على تعدد أشكال وقت الترجمة في Java:
فئة SimpleCalc
{
int add (int x، int y)
{
إرجاع x + y ؛
}
int add (int x، int y، int z)
{
إرجاع x + y + z ؛
}
}
فئة عامة تجريبي
{
الرئيسية العامة الثابتة الفراغ (سلاسل سلسلة [])
{
SimpleCalc obj = new SimpleCalc () ،
System.out.println (obj.add (20 ، 30)) ؛
System.out.println (obj.add (40، 30، 20)) ؛
}
}
الإخراج :
50
90
أهمية تعدد الأشكال
يتيح تعدد الأشكال كتابة الأساليب التي يمكن أن تشكل أنواعًا مختلفة من الكيانات التي تحمل الاسم نفسه. تعد تعدد الأشكال أمرًا ضروريًا في Java نظرًا لفوائدها المتنوعة في الاستخدام والنطاق الذي توفره لجعل الكود ديناميكيًا:
- يسمح بإعادة استخدام الرموز - لا يلزم كتابة نفس الرموز عدة مرات.
- يسمح لمتغير واحد بعرض سلوكيات متعددة - يحمل نفس الاسم ولكن خصائص مختلفة يمكن أن يفتح المجال للحفاظ على الاتساق في الرموز.
- تقليل عدد الرموز المجمعة - يساعد في تصحيح الأخطاء مع تقصير وقت الترجمة ، مما يوفر ذاكرة المستخدم والطاقة والوقت.
المشاكل المحتملة في تنفيذ تعدد الأشكال
يمكن أن يكون تعدد الأشكال مربكًا للاستخدام والتنفيذ. إنه يقلل من قابلية قراءة الرموز ، وبالتالي يشكل تهديدات بأخطاء وأخطاء متعددة. كما أنه يخلق مشاكل في أداء الوظائف كما هو مطلوب.
هناك مشكلة كلاسيكية يجب البحث عنها: مشكلة الفئة الأساسية الهشة. يشير إلى التجميع والترميز غير الصحيح لفئة موروثة ينتج عنها طرق تظهر نتائج غير متوقعة.
الاستنتاجات
يمكن أن تؤدي الطبيعة الهشة للوراثة إلى رموز غير فعالة ومكسورة على الرغم من أن جميع المعايير الأخرى تظل مستوفاة. تعتبر هذه المسألة المعمارية الأساسية مشكلة الفئة الأساسية الهشة. تعرف على المزيد حول كيفية عرض Java لمفاهيم OOP من خلال الانضمام إلى برنامج upGrad Executive PG في تطوير البرمجيات - التخصص في تطوير Full Stack . احصل على الإرشاد من قبل خبراء الصناعة وابني المعرفة العملية من خلال الانخراط في مشاريع تعاونية عملية مع أقرانهم.
احجز مقعدك اليوم!
ما هو الربط الثابت والديناميكي؟
تُعرف الكائنات التي تم تحديدها في وقت التجميع باسم الربط الثابت. من ناحية أخرى ، يتم تحديد أنواع الربط الديناميكي للكائنات في وقت التشغيل. يتم استخدام الأول أثناء التحميل الزائد للطريقة والأخير أثناء تجاوز الطريقة.
ما الفرقان الأساسيان بين تجاوز الطريقة والحمل الزائد للطريقة؟
في Java ، لا يتجاوز تجاوز الطريقة الطرق الثابتة والخاصة والنهائية ، بينما يؤدي التحميل الزائد للطريقة إلى زيادة التحميل على الطرق الثابتة والخاصة والنهائية في Java. أيضًا ، تجاوز طرق الموضوعات للربط الديناميكي ، ومن ناحية أخرى ، تمر الطرق المثقلة بالارتباط الثابت.
ما هي الاختلافات بين تعدد الأشكال والوراثة في جافا؟
في جافا ، هناك عدة نقاط اختلاف بين تعدد الأشكال والوراثة:
1. الميراث هو تمثيل للعلاقة بين الوالدين والطفل في العالم الحقيقي في الترميز. لكن تعدد الأشكال هو عامل مساعد يستخدم هذه العلاقة لجعل البرنامج أكثر ديناميكية.
2. الميراث يسمح بإعادة استخدام الرموز من فئة الطفل من خلال وراثة نفس الشيء من الفئة الأم. في المقابل ، يسمح تعدد الأشكال للفئة الفرعية بإعادة تعريف سلوكها الحالي مرة أخرى داخل الفصل الأصلي.