بالنسبة للبرمجة الموجهة للكائنات ، يعد التجريد أحد ميزاته الرئيسية. في Java ، يمكن أن ينعكس تجريد OOP في شكلين: واجهات وفئات مجردة. هناك الكثير من أوجه التشابه والعديد من الاختلافات بين الاثنين. يعتقد الكثير من الناس أنه يمكن استخدامهم بالتبادل عندما يكونون مبتدئين ، لكنهم في الواقع ليسوا كذلك. اليوم سوف نتعرف على الواجهات والفصول المجردة في جافا. هنا هو الخطوط العريضة لهذا المقال:
1. الفئة التجريدية
2. واجهة
3. الفرق بين الطبقات التجريدية والواجهات
1. الفئة التجريدية
قبل فهم الفصول المجردة ، دعونا أولاً نفهم الأساليب التجريدية. الطريقة المجردة هي طريقة خاصة: لديها فقط إعلانات ، ولكن لا يوجد تنفيذ ملموس. تنسيق الإعلان للطريقة المجردة هو:
مجردة الفراغ المرح () ؛
يجب تعديل الطرق التجريدية مع الكلمة الرئيسية المجردة. إذا كان الفصل يحتوي على أساليب مجردة ، فإن هذا الفصل يسمى فئة مجردة. يجب تعديل الفئة التجريدية مع الكلمة الرئيسية المجردة قبل الفصل. نظرًا لأن الفئات التجريدية تحتوي على طرق بدون تطبيقات ملموسة ، لا يمكن إنشاء الكائنات باستخدام فئات مجردة.
تجدر الإشارة إلى إحدى المشكلات أدناه: في كتاب "الفكر في برمجة Java" ، يتم تعريف الفصول المجردة على أنها "فصول تحتوي على طرق مجردة" ، ولكن فيما بعد تبين أنه إذا لم يحتوي الفصل على طرق مجردة ويتم تعديلها مع الملخص ، فهي أيضًا فئة مجردة. بمعنى آخر ، لا يتعين بالضرورة احتواء الفصول التجريدية على أساليب مجردة. أنا شخصياً أعتقد أن هذا سؤال عنيد ، لأنه إذا لم يكن هناك فئة مجردة لا تحتوي على أي أساليب مجردة ، فلماذا يجب أن يتم تصميمها كطبقة مجردة؟ لذا تذكر هذا المفهوم في الوقت الحالي ، وليس هناك حاجة للحفر في السبب.
[Public] مجردة ClassName {Abstract void fun () ؛}من هذا يمكننا أن نرى أن الطبقات التجريدية موجودة للميراث. إذا حددت فئة مجردة ولكنك لا ترثها ، فهذا يعادل إنشاء هذه الفئة المجردة دون جدوى ، لأنه لا يمكنك استخدامه لفعل أي شيء. بالنسبة إلى فئة الوالدين ، إذا تم تنفيذ إحدى طرقها في الفئة الأصل ، فلا معنى له ويجب تنفيذه بشكل مختلف وفقًا للاحتياجات الفعلية للفئة الفرعية ، فيمكن إعلان هذه الطريقة كطريقة مجردة ، ويصبح هذا الفئة فئة مجردة.
تسمى الفصول التي تحتوي على أساليب مجردة فصول مجردة ، لكنها لا تعني أنه لا يمكن العثور على طرق تجريدية إلا في فصول مجردة. مثل الفصول العادية ، يمكن أن يكون لديهم أيضًا متغيرات الأعضاء وأساليب الأعضاء العادية. لاحظ أن هناك ثلاثة اختلافات رئيسية بين الفصول التجريدية والفصول العادية:
1) يجب أن تكون الطريقة المجردة عامة أو محمية (لأنه إذا كانت خاصة ، فلا يمكن أن تراوحتها بواسطة الفئة الفرعية ، ولا يمكن للفئة الفرعية تنفيذ الطريقة). بشكل افتراضي ، إنه عام.
2) لا يمكن استخدام الفئات التجريدية لإنشاء كائنات ؛
3) إذا ورث الفصل من فئة مجردة ، فيجب على الفئة الفرعية تنفيذ الطريقة المجردة لفئة الأصل. إذا لم تنفذ الفئة الفرعية الطريقة المجردة للفئة الأصل ، فيجب أيضًا تعريف الفئة الفرعية على أنها فئة مجردة.
في جوانب أخرى ، لا يوجد فرق بين الطبقات التجريدية والفصول العادية.
2. واجهة
تشير الواجهة ، التي تسمى الواجهة باللغة الإنجليزية ، في هندسة البرمجيات ، بشكل عام إلى الأساليب أو الوظائف التي يتصل بها الآخرون. من هذا ، يمكننا أن نفهم النية الأصلية لمصممي لغة جافا ، وهو عبارة عن تجريد من السلوك. في جافا ، شكل واجهة كما يلي:
[عام] واجهة interfacename {}
يمكن أن تحتوي الواجهات على متغيرات وطرق. ومع ذلك ، تجدر الإشارة إلى أن المتغيرات في الواجهة سيتم تحديدها ضمنيًا كمتغيرات نهائية ثابتة عامة (ويمكن أن تكون متغيرات نهائية ثابتة فقط ، وسيقوم تعديل القطاع الخاص بالإبلاغ عن خطأ في التجميع) ، في حين أن الأساليب سيتم تحديدها بشكل ضمني ، لا يمكن تحديدها ضمنيًا ، وتبادلها في التضمين. التطبيقات ، أي الأساليب في الواجهة يجب أن تكون أساليب مجردة. من هنا ، يمكننا أن نرى بشكل غامض الفرق بين الواجهة وفئة مجردة. الواجهة هي نوع مجردة للغاية. إنه "مجردة" أكثر من فئة مجردة ولا يحدد المتغيرات بشكل عام في واجهة.
لجعل الفصل يتبع مجموعة محددة من الواجهات ، تحتاج إلى استخدام الكلمة الرئيسية للأدوات ، التنسيق المحدد هو كما يلي:
اسم classname يطبق الواجهة 1 ، الواجهة 2 ، [....] {}
يمكن ملاحظة أنه يُسمح للصف باتباع واجهات محددة متعددة. إذا اتبعت فئة غير مجردة واجهة ، فيجب تنفيذ جميع الطرق في تلك الواجهة. بالنسبة للفئات المجردة التي تتبع واجهة ، قد لا يتم تنفيذ طرق مجردة في تلك الواجهة.
3. الفرق بين الطبقات التجريدية والواجهات
1. الاختلافات على المستوى النحوي
1) يمكن أن توفر الفصول التجريدية تفاصيل التنفيذ لأساليب الأعضاء ، في حين يمكن أن توجد أساليب مجردة عامة فقط في الواجهة ؛
2) يمكن أن تكون متغيرات الأعضاء في الفئات التجريدية من أنواع مختلفة ، في حين أن متغيرات الأعضاء في الواجهة يمكن أن تكون فقط من النوع النهائي الثابت العام ؛
3) لا يمكن أن تحتوي الواجهة على كتل رمز ثابت وطرق ثابتة ، في حين أن الفئات المجردة يمكن أن تحتوي على كتل رمز ثابت وطرق ثابتة ؛
4) يمكن للفصل أن يرث فئة مجردة واحدة فقط ، بينما يمكن للفصل تنفيذ واجهات متعددة.
2. الاختلافات على مستوى التصميم
1) الفصول التجريدية هي تجريدات للأشياء ، أي تجريدات الفصول ، في حين أن الواجهات هي تجريدات للسلوك. تجريد فئة مجردة الفصل بأكمله ، بما في ذلك الخصائص والسلوكيات ، ولكن واجهة تجريد جزء الفصل (السلوك). لإعطاء مثال بسيط ، فإن الطائرات والطيور هي أشياء مختلفة ، لكن لديها جميعًا شيء واحد مشترك ، أي أنها تطير جميعًا. ثم عند التصميم ، يمكن تصميم الطائرة كطائرة وشخصية تشبه الطيور ، ولكن لا يمكن تصميم خاصية الرحلة كفصل. لذلك ، إنها مجرد خاصية سلوكية ، وليس وصفًا تجريديًا لنوع الشيء. في هذا الوقت ، يمكن تصميم Flight كطيران واجهة ، بما في ذلك Method Fly () ، ثم يقوم الطائرات والطيور بتنفيذ واجهة الطيران وفقًا لاحتياجاتهم الخاصة. ثم بالنسبة لأنواع مختلفة من الطائرات ، مثل الطائرات المقاتلة ، الطائرات المدنية ، وما إلى ذلك ، يمكن أن ترث الطائرة مباشرة. كما أنه يشبه الطيور. أنواع مختلفة من الطيور يمكن أن ترث فئة الطيور مباشرة. من هنا ، يمكننا أن نرى أن الميراث عبارة عن علاقة "نعم أم لا" ، في حين أن تنفيذ الواجهة هو علاقة "نعم أم لا". إذا ورث الفئة فئة مجردة ، فيجب أن تكون الفئة الفرعية نوعًا من الفئة التجريدية ، وتنفيذ الواجهة هو علاقة غير موجودة ، مثل ما إذا كان الطائر يمكنه الطيران (أو ما إذا كان لديه خصائص الطيران). إذا كان بإمكانه الطيران ، يمكن أن يدرك هذه الواجهة. إذا لم تتمكن من الطيران ، فلن يدرك هذه الواجهة.
2) مستويات التصميم المختلفة ، فئة مجردة هي تصميم قالب ، مثل الفئة الأم للعديد من الفئات الفرعية. والواجهة هي رمز للسلوك ، وهو تصميم إشعاعي. ما هو تصميم القالب؟ أبسط مثال هو أن كل شخص استخدم القوالب في PPT. إذا كنت تستخدم القالب A لتصميم PPT B و PPT C ، فإن الجزء المشترك من PPT B و PPT C هو القالب A. إذا كان من الضروري تغيير جزءهم العام ، فأنت بحاجة فقط إلى تغيير القالب A ، ولا توجد حاجة إلى إعادة تغيير PPT B و PPT C. وهذا يعني ، بالنسبة للفئات المجردة ، إذا كنت بحاجة إلى إضافة طرق جديدة ، يمكنك إضافة تطبيقات محددة مباشرة إلى الفئة المجردة ، ولا يمكن تغيير الفئات الفرعية ؛ ولكن بالنسبة للواجهات ، هذا غير ممكن. إذا تم تغيير الواجهة ، فيجب تغيير جميع الفئات التي تنفذ هذه الواجهة وفقًا لذلك.
دعونا نرى المثال الأكثر تعميمًا على الإنترنت: أمثلة على الأبواب والإنذارات: الأبواب لها إجراءان: Open () و Close (). في هذا الوقت ، يمكننا تحديد هذا المفهوم التجريدي من خلال الفصول والواجهات المجردة:
DORM CLASS DOOR {public Abstract void open () ؛ إغلاق الفراغ التجريدي العام () ؛}أو:
interface door {public Abstract void open () ؛ إغلاق الفراغ التجريدي العام () ؛}ولكن الآن إذا كنا بحاجة إلى أن يكون للباب وظيفة المنبه () ثم كيفية تنفيذها؟ يتم توفير الفكرتين التاليتين:
1) وضع جميع الوظائف الثلاث في الفئة التجريدية ، ولكن بهذه الطريقة ، فإن جميع الفئات الفرعية الموروثة من هذه الفئة المجردة لها وظائف إنذار ، لكن بعض الأبواب لا تحتوي بالضرورة على وظائف إنذار ؛
2) ضع كل هذه الوظائف الثلاث في الواجهة. تحتاج الفئات التي تحتاج إلى استخدام وظائف الإنذار إلى تنفيذ Open () وإغلاق () في هذه الواجهة. ربما لا تحتوي هذه الفئة على وظيفتين لـ Open () و Close () على الإطلاق ، مثل إنذارات الحريق.
من هنا ، يمكننا أن نرى هذا الباب مفتوحًا () ، و Close () و erarm () ببساطة ينتمي إلى سلوكين في فئات مختلفة. Open () و Close () ينتمي إلى خصائص السلوك المتأصل للبوابة نفسها ، في حين أن الإنذار () ينتمي إلى سلوكيات إضافية ممتدة. لذلك ، فإن الحل الأفضل هو تصميم الإنذار كواجهة ، بما في ذلك سلوك المنبه () ، والباب كطبقة مجردة منفصلة ، بما في ذلك السلوكيات المفتوحة والخدعة. تم تصميم بوابة إنذار أخرى لروث فئة الباب وتنفيذ واجهة الإنذار.
interface alram {void Alarm () ؛} Abstract Class Door {void open () ؛ void close () ؛} class Alarmdoor يمتد Door Door Early {void oepn () {// ..} void close () {// ..} void arias () {// ...}}ما سبق هو تجميع واجهات Java والفصول التجريدية. آمل أن تساعد الأصدقاء الذين يتعلمون برمجة Java.