موصى به, 2021

اختيار المحرر

الفرق بين الواجهة والفئة Abstract في Java & C #

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

رسم بياني للمقارنة

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

تعريف الواجهة

لا تسمح Java بالوراثة المتعددة. بمعنى ، لا يمكن لطبقة واحدة أن ترث أكثر من فصل دراسي واحد في كل مرة. ويمكن تفسير السبب وراء هذا مع مثال. لنفترض أن لدينا فئتين رئيسيتين هما A و B و فئة مشتقة C. يرث الفئة C المشتقة لكل من الفئتين A و B. والآن ، يكون لكل من الفئتين A و B مجموعة () ، ثم سيكون السؤال للفئة C التي يجب أن ترثها طريقة set (). الحل لهذه المشكلة هو "الواجهة".

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

 access_specifier interface interface_name {return-type method-name1 (parameter-list)؛ return-type method-name2 (قائمة المعلمات) ؛ type final-varname1 = value؛ type final-varname2 = value؛ // ... return-type method-nameN (parameter-list)؛ type final-varnameN = value؛ } 

يتم تعريف محدد الوصول للجمهور لأن الفئات تحتاج إلى تنفيذ الواجهة.

ليس لدينا مفهوم "الواجهة" في C ++. ولكن ، تعريف Java و C # بشكل جيد للغاية.

واجهة في جاوا:

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

الشكل العام لتنفيذ واجهة في جافا:

 class class_name بتنفيذ Interface_name {// class-body} 

لتوريث واجهة ، تستخدم فئة "كلمة رئيسية" كلمة رئيسية ، ويقوم الفصل بتنفيذ كل الطريقة التي تم تعريفها بواسطة واجهة موروثة.

واجهة في C #:

تشبه الواجهة في C # تقريبًا الواجهة في Java باستثناء:

  • لا تعبر الواجهة في C # عن المتغيرات.
  • يكون اسم الواجهة مسبوقًا برأس مال I ويتم توريثه بنقطتين (:).

الشكل العام لتنفيذ واجهة في C #:

 class class_name: interface_name {// class-body} 

تعريف الطبقة الملخص

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

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

 class abstract class_name {abstract method_name1 ()؛ مجردة method_name2 ()؛ : return_type method_name3 (parameter_list) {/ concrete method} return_type method_name4 (parameter_list) {/ concrete method}}؛ 

يتشابه مفهوم الطبقة المجردة في كل من Java و C #. فئة مجردة مختلفة قليلا في C ++.

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

الاختلافات الأساسية بين الواجهة و Class Abstract في Java & C #

  1. عندما تكون لديك معرفة بـ "ما هو مطلوب" ولكن ليس "كيفية تنفيذه" ، يجب استخدام الواجهة. من ناحية أخرى ، إذا كنت تعرف ما هو مطلوب وتعرف جزئيًا كيفية تنفيذه ، استخدم فئة الملخص.
  2. واجهة لديها كل أساليبها مجردة ولكن ، فئة مجردة لديها بعض الأساليب المجردة وبعض الطرق الملموسة.
  3. الطرق داخل الواجهة عامة ومجردة ، وتسمى أيضًا كطبقة تجريدية خالصة. من ناحية أخرى ، لا تقتصر الطرق داخل الملخص على أن تكون عامة ومجردة فقط.
  4. لا يمكن أبداً أن تكون طريقة الواجهة خاصة أو محمية أو نهائية أو ثابتة أو متزامنة أو محلية أو strictfp. من ناحية أخرى ، لا توجد قيود على أساليب الطبقة المجردة.
  5. تكون المتغيرات في الواجهة عامة ونهائية فيما إذا كنا نعلنها أم لا ، في حين أنه لا يوجد مثل هذا التقييد لمتغيرات فئة الملخص لتكون علنية ونهائية فقط.
  6. لا يمكن أن تكون المتغيرات في الواجهة محمية بشكل خاص عابرة أو متقلبة ، في حين لا توجد قيود على المتغيرات في فئة مجردة.
  7. يجب تهيئة متغير الواجهة أثناء التعريف. من ناحية أخرى ، يمكن تهيئة المتغيرات في فئة مجردة في أي وقت.
  8. داخل الواجهة ، لا يمكن الإعلان عن مثيل أو كتلة ثابتة ، ولكن يمكنك الإعلان عن مثيل أو كتلة ثابتة داخل فئة مجردة.
  9. لا يمكنك تعريف منشئ داخل واجهة بينما يمكنك تعريف منشئ داخل فئة مجردة.

استنتاج:

عندما تحتاج إلى إنشاء فئة أساسية تحتوي على شكل عام من الأساليب التي يمكن تنفيذها بواسطة الفئات المشتقة وفقًا لحاجتها ، يساعد مفهوم الواجهة والفئة المجردة في القيام بذلك.

Top