khaled0mohammed نشر 10 يناير 2022 أرسل تقرير نشر 10 يناير 2022 خلال دراستي للواجهات تداخلت علي الامور فما الفرق بينها وبين الكلاس المجرد. 2 اقتباس
0 qusayabomal3aqa نشر 10 يناير 2022 أرسل تقرير نشر 10 يناير 2022 الفرق الرئيسي: تعتبر الواجهة أو البروتوكول طريقة شائعة تسمح للكائنات غير المرتبطة بالتواصل مع بعضها البعض. وهو يمثل سلوكًا متفقًا يسهل التفاعل بين الجسمين. فئة مجردة هي فئة من الكائنات التي لا يمكن إنشاء مثيل أو إعداد مثيل لكائن. قد لا يكون لهذه الفئة أي تطبيق أو يمكن أن يكون لها تنفيذ غير مكتمل. هي طريقة خاصة: لها تصريح فقط ، ولكن لا يوجد تنفيذ ملموس. مثال: الكلاس المجرد يحتوي على دوال مجردة ودوال غير مجردة public abstract class ClassName { abstract void fun(); // دالة مجردة void close() { //.... دالة غير مجردة، لها محتوى } } أما المواجهة تشير عمومًا إلى طرق أو وظائف يمكن للآخرين الاتصال بها. وتحتوي فقط على دوال مجردة public interface InterfaceName { // تكون كل الدوال فيها مجردة public abstract void open(); public abstract void close(); } اقتباس
0 Ali Haidar Ahmad نشر 10 يناير 2022 أرسل تقرير نشر 10 يناير 2022 مقالات ذات صلة: المزيد من الجافا.. التجريد Abstract: هناك حالات نحتاج فيها أن نعرف صف يمثل فكرة مجردة بدون تعريف كامل لطرائق هذا الصف، مثلاً قد يطلب منا تعريف صفوف تمثل مركبات متعددة مثل سيارات أو طائرات أو شاحنات أو دراجات نارية. في هذه الحالة يكون الحل الأمثل هو تعريف صف يمثل فكرة مجردة وهذه الفكرة هنا هي "المركبة" فكل المركبات تشترك بأنها تتحرك ولكن حركة الطائرة تختلف عن حركة القطار مثلاً. إذاً نقوم بتعريف الصف المجرد الذي يمثل المركبة ونعرف ضمنه طريقة مجردة تعبر عن حركة المركبة، وبعدها نستطيع وراثة مركبات متعددة من هذا الصف، فمثلاً يمكننا وراثة صف يمثل قارب ونقوم بتعريف طريقة الحركة فيه على أنها حركة في الماء ونستطيع تعريف صف يمثل طائرة تكون طريقة الحركة فيه هي الحركة في السماء وهكذا.. نعرف الصف المجرد بالشكل: abstract class class_name{...} كما يجب أن تعلم أن الصفوف المجردة يمكن أن تحوي داخلها طرائق مجردة ويمكن أن لاتحوي أي طريقة مجردة، حيث أننا نقوم عن طريقة ما أنها طريقة مجردة إذا كانت بدون جسم (أي بدون كتلة تحقيق) أي لاتملك أي تعريف Implementation: abstract public void function(); #abstract لاحظ أنها بلا جسم+نضع بدايتها الكلمة أيضاً يجب أن تعلم أنه في حال كان الصف يحوي طريقة مجردة فيتوجب أن يكون هذا الصف مجرد أيضاً. والصف المجرد لايمكن أخذ كائنات منه، حيث يمكننا فقط وراثته، وعند وراثته يجب أن نقوم بتحقيق كل الطرق الموجودة فيه Implementation. abstract class vehicle{ abstract void motion(); } # نقوم بوراثته class car extends vehicle{ void motion(){ System.out.print("The car uses wheels to walk on the roads"); } } # class plane extends vehicle{ void motion(){ System.out.print("fly in the sky"); } } وأخيراً، يمكننا أن نعرف ضمن الصف المجرد باني لكن كما نعلم أن الباني لايمكن وراثته وإنما يمكننا فقط استدعاؤه من خلال الصفوف الأبناء. كما أنه لايمكن أن يكون الباني مجرداً لأنه بالأصل لاتتم وراثته. أيضاً يتوجب على الصف الذي يرث الصف المجرد (مثلاً car) أن يحقق كل الطرق المجردة في الصف المجرد (vehicle) وإلا سيكون هو مجرد أيضاً (صف مجرد يرث صف مجرد). الواجهات Interfaces : هي بنية شبيهة بالصف وشبيها جداً بال Astract Class. ويمكن أن تحتوي على ثوابت وطرق مجردة فقط. يمكن تشبيه الواجهة بصف مجرد كل طرقه مجردة. ولتعريفها: interface Interface_name{ ... } لايمكننا أخذ كائن من الواجهة، وإنما يتم تحقيق طرائقها من خلال صف يقوم بتحقيقها من خلال الكلمة المحجوزة implements عوضاً عن الكلمة extends التي تعبر عن الوراثة. (الانترفيس يتم تحيقها وليس وراثتها). interface Face{...} class A imlements Face{...} الآن الصف A يحقق الواجهة Face وبالتالي يجب أن نعرف كل طرائق الواجهة Face في الصف A. كما يمكن للصف أن يحقق أكثر من واجهة. interface i1 { } interface i2 { } class A implements i1, i2 { } يستطيع الإنترفيس أن يرث من إنترفيس أو أكثر. أي يستطيع الإنترفيس أن يفعل extends لإنترفيس أو أكثر. interface i1 { } interface i2 { } interface i3 extends i1, i2 { } يمكن للصف أن يرث صف ويحقق واجهة أو أكثر: interface i { } class A { } class B extends A implements i { } Nested Interfaces: interface i1 { interface i2 { interface i3 { } } } class A implements i1 { } //i1 يحقق الواجهة A الكلاس class B implements i1.i2 { } //i2 هنا يحقق الواجهة class C implements i1.i2.i3 { } // i3 يمكن أن تحتوي الواجهة على مايلي: دوال لا تملك body, أي Abstract Method. متغيرات مع إعطائهم قيمة بشكل مباشرةً عند تعريفهم. لأن أي متغير تقوم بتعرفه بداخل الإنترفيس يعتبر معرف كـ public final static بشكل تلقائي. Nested Classes, أي كلاس نوعه static بداخل كلاس نوعه static كما يمكن أن يحوي على Nested Interfaces أي إنترفيس بداخل إنترفيس. والإنترفيس يعتبر دوماً public. -نقاط مهمة حول الـ Abstract Class: 1. الكلاس العادي لا يمكنه أن يحتوي على دوال نوعها abstract. 2. الـ Abstract Class يمكنه أن يحتوي على دوال عادية, و يمكنه أن يحتوي على دوال نوعها abstract. 3. إذا قمت بتعريف الكلاس كـ abstract, فهذا يعني أن هذا الكلاس لا يمكن إنشاء كائنات منه. 4. بما أنه لا يمكن إنشاء كائنات من Abstract Class, فهذا يعني أنه للإستفادة من هذا الكلاس, يجب وراثته. 5. الكلاس الذي يرث من كلاس نوعه abstract, يجب أن يفعل Override لجميع الدوال المعرفة كـ abstract. -نقاط مهمة حول الـ Abstract Method: 1. إذا وضعت الكلمة abstract قبل إسم الدالة, فهذا يعني أنها دالة من النوع abstract. 2. الدالة التي نوعها abstract هي دالة لها إسم و نوع محدد, لكنها لا تحتوي على body (جسم), أي لا تملك أقواس بداية و نهاية { }. 3. الدالة العادية تحتوي على أقواس البداية و النهاية { }. 4. الـ Abstract Method يجب وضع فاصلة منقوطة ; في آخرها بدل أقواس البداية و النهاية. 5. الكلاس الذي يرث من كلاس نوعه abstract, يجب أن يقوم بإعادة تعريف (Override) لجميع الدوال التي نوعها abstract, أي يجب أن يكتب الـ body لهذه الدوال. - ملاحظات حول الواجهات: 1. لا نستخدم أي Access Modifer عند تعريف الواجهة. 2. لا نستخدم أي Access Modifer عند تعريف دالة بداخل الواجهة. 3. بداخل الواجهة جميع الدوال يجب أن لا تملك body, و يمكن جعل الدالة ترمي إستثناء. 4. لا يمكن للواجهة أن تملك دالة بانية 5. لا يمكن إنشاء كائن من واجهة. 6. لا يستطيع الكلاس أن يرث (extends) من واجهة بل يُمكنه تنفيذ (implements) واجهة أو أكثر 7. الكلاس الذي يُنفذ واجهة ما عليه إعادة تعريف جميع دوال تلك الواجهة. 8. يُمكن لواجهة أن ترث (extends) من واجهة أو أكثر. اقتباس
السؤال
khaled0mohammed
خلال دراستي للواجهات تداخلت علي الامور فما الفرق بينها وبين الكلاس المجرد.
2 أجوبة على هذا السؤال
Recommended Posts
انضم إلى النقاش
يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.