JavaRush /مدونة جافا /Random-AR /10 فئات وواجهات مجردة أسئلة مقابلة جافا

10 فئات وواجهات مجردة أسئلة مقابلة جافا

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

1. هل يمكن للفصل المجرد أن يحتوي على مُنشئين في Java؟

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

2. هل يمكن للفئات المجردة في Java تنفيذ الواجهات؟ هل يتعين عليهم تنفيذ كافة الأساليب؟

نعم، يمكن للفئات المجردة تنفيذ واجهات باستخدام ملحق implements. نظرًا لأنها مجردة، فليس مطلوبًا منها تنفيذ جميع الأساليب. يعد وجود فئة أساسية مجردة وواجهة للإعلان عن النوع ممارسة موصى بها. مثال على ذلك هو الواجهة java.util.Listوالفئة المجردة المقابلة java.util.AbstractList. نظرًا لأنه AbstractListينفذ جميع الطرق الشائعة، فإن عمليات التنفيذ المحددة (مثل LinkedListو ArrayList) لا تحتاج إلى تنفيذ جميع الطرق، كما هو الحال إذا نفذت الواجهة Listمباشرة. يجمع هذا الحل بين فائدة استخدام واجهة للإعلان عن نوع ما مع مرونة فئة مجردة لتنفيذ جميع السلوكيات الشائعة في مكان واحد. في كتاب جوشوا بلوخ "Java. "البرمجة الفعالة" تحتوي على فصل ممتاز حول موضوع استخدام الواجهات والفئات المجردة في Java، ومن أجل فهم أفضل فمن المنطقي دراستها.

3. هل يمكن أن يكون الفصل المجرد نهائيًا؟

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

4. هل يمكن للفصل المجرد في Java أن يكون له طرق ثابتة؟

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

5. هل من الممكن إنشاء فئة مجردة؟

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

6. هل من الضروري أن يكون لدى الفصل المجرد أساليب مجردة؟

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

7. ما هي الاختلافات بين الفئة المجردة والواجهة في Java؟

هذا هو أحد أهم أسئلة مقابلة Java وأكثرها كلاسيكية. لا يمكنني حساب عدد المرات التي رأيت فيها هذا السؤال في مقابلات جافا على جميع المستويات. وما يجعل هذا السؤال مثيرًا للاهتمام، على وجه الخصوص، هو إتاحة الفرصة لمقدم الطلب لتقديم مثال. من السهل الإجابة على أسئلة حول أساسيات البرمجة كائنية التوجه، مثل التجريد والتغليف وتعدد الأشكال والميراث، ولكن عندما يتعلق الأمر بمثل هذه الفروق الدقيقة، غالبًا ما يرتبك المتقدمون للوظائف ويقولون أول ما يتبادر إلى ذهنهم. الجواب على هذا السؤال يستحق مقالا منفصلا (خاصة بعد التغييرات في Java 8)، ولكن باختصار:
  • تصف الواجهة فقط سلوك (أساليب) الكائن، ولكنها لا تحتوي على حالات (حقول) (باستثناء public static final)، بينما يمكن أن تحتوي عليها فئة مجردة.

  • يتم توريث فئة مجردة (تمتد)، ويتم تنفيذ الواجهة (التطبيقات). يمكننا أن نرث فئة واحدة فقط، ولكننا ننفذ العديد من الواجهات التي نريدها. يمكن للواجهة توسيع (توسيع) واجهة/واجهات أخرى.

  • يتم استخدام الفئات المجردة عندما تكون هناك علاقة "is-a"، أي أن الفئة الفرعية توسع الفئة المجردة الأساسية، ويمكن تنفيذ الواجهات بواسطة فئات مختلفة لا ترتبط ببعضها البعض على الإطلاق.

8. متى يكون من المنطقي تفضيل فئة مجردة على الواجهة والعكس صحيح؟

هذا استمرار للأسئلة السابقة حول الفئات والواجهات المجردة. إذا كنت تعرف ما هي الاختلافات النحوية بينهما، فإن الإجابة على هذا السؤال لن تسبب لك مشاكل، لأنها العامل الحاسم في اتخاذ القرار. نظرًا لأنه يكاد يكون من المستحيل إضافة طريقة جديدة إلى الواجهة المنشورة، فمن الأفضل استخدام فئة مجردة في حالة الحاجة المحتملة لمزيد من التطوير. يعد تطوير الفئات المجردة في Java أسهل من تطوير الواجهات. وبالمثل، إذا كانت الواجهة تحتوي على العديد من الأساليب وأصبح تنفيذها جميعًا بمثابة صداع حقيقي، فمن الأفضل إنشاء فئة مجردة للتنفيذ الافتراضي. يتم اتباع هذا النمط في حزمة مجموعات Java، AbstractListوتوفر الفئة المجردة التنفيذ الافتراضي لـ List. استخدم الفئات المجردة إذا:
  • تريد مشاركة التعليمات البرمجية بين عدة فئات وثيقة الصلة.

  • قد تتوقع أن تحتوي الفئات التي تعمل على توسيع فئتك المجردة على العديد من الأساليب أو الحقول المشتركة، أو أن تتطلب معدِّلات وصول بخلاف public(على سبيل المثال، protectedو private).

  • تريد أن تعلن غير ثابت أو не-finalالحقول. يتيح لك هذا تحديد الأساليب التي يمكنها الوصول إلى حالة الكائن الذي تنتمي إليه وتغييرها.
استخدم الواجهات إذا:
  • تتوقع أن تقوم الفئات غير ذات الصلة بتنفيذ الواجهة الخاصة بك. على سبيل المثال، يتم تنفيذ الواجهات Comparableبواسطة Cloneableالعديد من الفئات غير ذات الصلة.

  • تريد تحديد سلوك نوع بيانات معين، لكن لا يهمك من ينفذه.

  • تريد استخدام وراثة الأنواع المتعددة.

9. ما هي الطريقة المجردة في جافا؟

الطريقة المجردة هي طريقة بدون جسم. يمكنك ببساطة الإعلان عن طريقة دون تعريفها، وذلك باستخدام كلمة أساسية abstractفي إعلان الطريقة. جميع الطرق المعلنة داخل الواجهة في لغة Java تكون مجردة بشكل افتراضي. فيما يلي مثال للطريقة المجردة في Java:
public void abstract printVersion();
الآن، لتنفيذ هذه الطريقة، تحتاج إلى توسيع فئة مجردة وتجاوز هذه الطريقة.

10. هل يمكن أن تحتوي فئة مجردة في Java على طريقة main؟

نعم، يمكن للفئة المجردة في Java أن تحتوي على طريقة main، لأنها مجرد طريقة ثابتة أخرى، ويمكن تنفيذ فئة مجردة باستخدام الطريقة main، طالما لم تقم بإنشاء مثيل لها. هذا كل ما أردت أن أخبرك به. وتذكر: تعد الفئات والواجهات المجردة قرارات تصميم رئيسية في عملية التحليل والتصميم الموجهة للكائنات، ويجب استخدامها بحذر، بالطبع، إذا كنت ترغب في إنشاء نظام مرن.
تعليقات
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION