سؤال

هل العقد على الواجهة هو كائن بالنسبة للفئة؟

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

هل كانت مفيدة؟

المحلول

وليس حقا. هناك أربعة شروط هنا، لذلك سأذهب على كل منها:

واجهة

واجهة هي فئة مجردة (في لغات مثل جافا حيث لا يوجد وراثة متعددة، وأحيانا هناك قيود أخرى، مثل نوع بيانات منفصلة) التي تهدف لاستخدامها كقاعدة مشتركة للوصول إلى عدد مماثل كائنات -behaving. من الناحية النظرية، لا يوجد أي شرط لالتجريد، ولكن عادة، سوف يكون واجهة الأسلوب التجريدي واحد على الأقل. واجهة هي طريقة لبرنامجك على التواصل مع عدد من الطبقات مماثلة، ولكل منها دلالات مختلفة ولكن نفس الغرض العام.

عقد

والعقد هو اتفاق ضمني جعل لكم بين المستخدمين ومنفذي فئة أو واجهة. على سبيل المثال، شروط مسبقة وpostconditions (الثوابت وعادة ما تكون العقد في إطار تنفيذ الفئة '- عموما، أشياء مثل العلاقة بين أعضاء داخليين لا تحتاج إلى أن يتعرض لها). يمكن أيضا أن تكون مواصفات لقيمة الإرجاع أو حجة جزءا من العقد. وهو يمثل أساسا كيفية استخدام وظيفة / فئة / واجهة، وليس بشكل عام للتمثيل بشكل كامل في أي لغة (بعض اللغات، مثل ايفل، تسمح لك لوضع العقود واضحة في، ولكن حتى هذه لا يمكن دائما اللحم بشكل كامل متطلبات ). عند تطبيق واجهة أو تستمد من فئة، كنت تواجه دائما لتلبية متطلبات واجهة، أو، عندما تجاوز فئة غير مجردة، أن تتصرف مماثل يكفي أن المشاهد الخارجية لا يلاحظ الفرق (وهذا هو Liskov تبديل المبدأ، يجب أن تكون كائن اشتقاق قادرة على استبدال قاعدة مع أي اختلاف في السلوك من منظور خارجي)

الدرجة

وهناك فئة لا تحتاج إلى الكثير من الذهاب قد انتهت، منذ كنت قد استخدمت بشكل واضح من قبل. وهناك فئة هو نوع البيانات، وفي بعض اللغات هي مجموعة شاملة من واجهات (التي ليس لها تعريف رسمي، كما هو الحال في C ++)، وفي حالات أخرى مستقلة (مثل في جاوة).

كائن

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

نصائح أخرى

لا، ليس فعلا. وهناك فئة هي القالب الذي قمت بتحديده. كل كائن أن instantiates تلك الفئة يتبع القالب. انهم ليسوا حيث زائدة حقا، لأن الأمرين ليست متطابقة. يمكنك التفكير في فئة كنوع البيانات المعرفة من قبل المستخدم. الفئات والكائنات تختلف عن بعضها البعض في نفس الطريقة بالضبط التي البدائية نوع البيانات int يختلف عن قيمة حرفية 3.

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

وحسنا أعتقد ... إذا تحدد واجهة عقد من تحدد فئة ل(أو متعددة) مثلا (ق) من كائن معين.

والمصطلحات أقل أهمية من التطبيق بالرغم من ذلك.

والواقع، واجهة هي عقد، عندما يكون الهدف من ذلك هو مثيل فئة - فهي أشياء مختلفة التي ليس لديها الكثير من القواسم المشتركة

واجهة يوفر مجرد واجهة للكائنات، أو ضمان لمدة المتصل أن الكائن يمكن القيام ببعض العمليات، حتى دون أن يعرفوا ذلك من التنفيذ.

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

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

وعلى الأقل هذا سيكون بوف في NET.

لإكمال الإجابات السابقة كلمة عن الواجهات:

إذا كانت الفئة أكثر من مجرد قالب لكائن ما (بسبب خصائصها العامة المستقلة عن أي مثيلات)، فيمكن أيضًا وصف الواجهة بأنها وجهة نظر

فئة تنفذ واجهة متعددة:

  • إكمال العقد الذي يحتاج إلى احترامه
  • السماح للمستخدم برؤية أي مثيلات لتلك الفئة من ملف وجهة نظر من تلك التي تمثلها الواجهة المنفذة.

"وجهة النظر" تعني أنه يمكنك استخدام كائن ما من خلال التركيز فقط على العقد الذي تحدده تلك الواجهة.

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

يمثل "الفئة" و"الكائن" شيئين مختلفين؛إنهما مرتبطان ببعضهما البعض، لكن ما يمثلانه مختلف بقوة.

أفضل طريقة لوصف ذلك هي النظر إلى Static.يمكن أن تحتوي الفئة على أعضاء ثابتين، منفصلين تمامًا عن أي مثيل لتلك الفئة.كائنات تلك الفئة قد تستخدم أو لا تستخدم تلك الأعضاء الثابتة؛لكن مثيل كائن تلك الفئة منفصل تمامًا عن أي استخدامات ثابتة لتلك الفئة (أو يجب أن يكون كذلك على الأقل).

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

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

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top