يجب استخدام الطبقات المتداخلة في هذه الحالة ؟

StackOverflow https://stackoverflow.com/questions/330

  •  08-06-2019
  •  | 
  •  

سؤال

أنا أعمل على مجموعة من الفئات المستخدمة في تسجيل الفيديو.أنا واحد الرئيسي الصف الذي يعمل بمثابة الواجهة العمومية ، مع أساليب مثل play(), stop(), pause(), record() الخ...ثم لدي العمود الفقري الطبقات التي لا الفيديو فك ترميز الفيديو.

أنا فقط علمت عن وجود الطبقات المتداخلة في C++ و أنا الغريب لمعرفة ما المبرمجين يفكرون في استخدامها.أنا قلقة قليلا و لست متأكدا حقا ما مزايا/عيوب ، ولكن يبدو أنها (وفقا للكتاب أنا أقرأ) التي تستخدم في حالات مثل الألغام.

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

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

المحلول

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

فلسفتي سيكون على المضي قدما وجعل كل الهياكل الوصول إلى العميل في مصقول ، على افتراض أنها سوف تستخدم جنبا إلى جنب.

أود الإشارة ما يشبه QTextDocument في كيو تي.توفر لك واجهة مباشرة إلى المعدن معالجة البيانات ، ولكن تمرير السلطة على طول إلى كائن مثل QTextEdit للقيام التلاعب.

نصائح أخرى

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

في هذه الحالة, العيب الرئيسي من الطبقات المتداخلة هو أن هذا يجعل من الصعب إعادة استخدامها.ربما كنت ترغب في استخدام الخاص بك VideoDecoder الدرجة في مشروع آخر.إذا كنت تجعل من فئة متداخلة من VideoPlayer, لا يمكنك فعل هذا بطريقة أنيقة.

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

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

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

يبدو أن حالة حيث يمكن استخدام نمط استراتيجية

في بعض الأحيان أنه من المناسب لإخفاء تنفيذ دروس من المستخدم-في هذه الحالات فإنه من الأفضل وضعها في foo_internal.ح من داخل الطبقة العامة التعريف.بهذه الطريقة, القراء من فو.ح لن ترى ماذا كنت تفضل أنها لا تكون مضطربة مع, ولكن لا يزال بإمكانك كتابة الاختبارات ضد كل من الخرسانة تطبيقات واجهة الخاص بك.

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

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

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

وهنا مزيد من المعلومات حول PIMPL نمط (القسم 3.1.1).

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

برنامج التشفير/فك الطبقة يبدو أفضل يناسب نمط استراتيجية

سبب واحد لتجنب الطبقات المتداخلة إذا كنت من أي وقت مضى تنوي التفاف التعليمات البرمجية مع جرعة كبيرة (http://www.swig.org) للاستخدام مع اللغات الأخرى.جرعة كبيرة حاليا مشاكل مع الطبقات المتداخلة ، حتى التواصل مع المكتبات التي تعرض أي الطبقات المتداخلة يصبح الألم الحقيقي.

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

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