سؤال

يمكن لأي شخص أن يشرح الفروق بين البروتوكولات و فئات في الهدف C ؟ متى يمكنك استخدام واحد على الآخر ؟

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

المحلول

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

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

لتلخيص: بروتوكول يحدد ما هي أساليب فئة سوف تنفذ ، فئة يضيف الأساليب القائمة فئة.

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

نصائح أخرى

ويقول البروتوكول "، وهنا بعض الطرق أود <م> أنت لتنفيذها." وتقول الفئة، "أنا توسيع وظائف من هذه الفئة مع هذه الأساليب إضافية."

والآن، وأظن حيرتك ينبع من استخدام أبل عبارة "البروتوكول الرسمي". وهنا يكمن مفتاح (ومعظم مربكة) نقطة: بروتوكول الرسمي هو في الواقع ليست البروتوكول على الإطلاق. انها في الواقع فئة على NSObject. يستخدم الكاكاو البروتوكولات الرسمية انتشارا لتوفير واجهات للمندوبين. منذ بناء الجملة @protocol لم تسمح أساليب اختياري حتى الهدف-C 2.0، نفذت أبل طرق اختياري لفعل أي شيء (أو إرجاع قيمة وهمية) والأساليب اللازمة لرمي استثناء. لم يكن هناك أي وسيلة لفرض ذلك من خلال مترجم.

والآن، مع الهدف-C 2.0، ويدعم بناء الجملة @protocol الكلمة @optional، بمناسبة بعض الأساليب في بروتوكول واختياري. وهكذا، فإن صفك يتفق مع بروتوكول طالما أنها تنفذ جميع الطرق ضعت @required. المترجم يمكن تحديد ما إذا صفك تنفذ جميع الطرق المطلوبة، أيضا، وهو الوقت المدخر ضخمة. وSDK فون يستخدم حصرا بناء الجملة 2.0 @protocol الهدف-C، وأنا لا يمكن أن نفكر في سبب وجيه لعدم استخدامها في أي تطور جديد (باستثناء لتطبيقات ماك OS X الكاكاو التي تحتاج لتشغيلها على الإصدارات السابقة من نظام التشغيل Mac OS X ).

فئات:

فئة هي طريقة إضافة أساليب جديدة في جميع الحالات القائمة لفئة دون تعديل في الدرجة نفسها.

يمكنك استخدام الفئة عندما كنت ترغب في إضافة وظائف إلى القائمة فئة دون المستمدة من تلك الفئة أو إعادة كتابة الطبقة الأصلية.

دعونا نقول كنت تستخدم NSView الكائنات في الكاكاو, و تجد نفسك متمنيا أن جميع الحالات NSView كانت قادرة على تنفيذ بعض الإجراءات.من الواضح أنك لا تستطيع كتابة NSView فئة ، وحتى إذا كنت تستمد من ذلك ، NSView الكائنات في البرنامج الخاص بك سوف يكون من نوع مشتق.الحل هو إنشاء فئة على NSView, الذي يمكنك استخدامه في البرنامج الخاص بك.طالما كنت #import رأس الملف الذي يحتوي على فئة الإعلان ، وسوف تظهر كما لو كل NSView الكائن ويستجيب الطرق المحددة في catagory الملف المصدر.

البروتوكولات:

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

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

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

ملاحظة جانبية:الهدف-c اللغة لا تدعم الوراثة المتعددة (فئة فقط يمكن أن تستمد من واحد الفائقة) ، ولكن الكثير من نفس الوظائف التي يمكن أن يقدمها بروتوكولات لأن فئة يمكن أن تتفق مع عدة بروتوكولات مختلفة.

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

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

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

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

وفئات توفر القدرة على توسيع كائن الحالي عن طريق إضافة طرق إليها (فئة أو مثيل الأساليب). ومن شأن الاستخدام الجيد لفئة أن يكون توسيع الطبقة NSString لإضافة وظائف لم تكن موجودة من قبل، مثل إضافة وسيلة لإنشاء سلسلة جديدة أن يحول المتلقي في 1337 5P34K.

NSString *test = @"Leet speak";
NSString *leet = [test stringByConvertingToLeet];

التعاريف من S. G. Kochan في "البرمجة Objective-C":

فئات:

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

البروتوكولات:

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

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