متى يجب أن أستخدم/أمثلة من الفصول المتداخلة؟

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

  •  20-09-2019
  •  | 
  •  

سؤال

يرجى إعادة رد هذا السؤال لتضمين اللغات التي تكون ذات صلة بها

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

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

المحلول

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

يحتوي موقع Java Developer على برنامج تعليمي متداخل مع مثال واحد:http://java.sun.com/docs/books/tutorial/java/javaoo/nted.html

زوجان من الأمثلة على الاستخدام:

  • إخفاء تنفيذ ملموسة لواجهة:

(التفكير في جلسة قاعدة بيانات لأداة مثل Hibernate): لنفترض أن لديك واجهة جلسة ، وجلسة SessionFactory التي تُرجع مثيلًا للجلسة. يمكن أن تكون فئة SessionImpl Concrete التي تنفذ واجهة الجلسة فئة Innner من المصنع الذي يعرف كيفية إنشاءه وتهيئته.

  • معلومات العرض عن طريق تنفيذ واجهة:

في إطار الويب الخاص بـ Wicket ، يحتوي كل مكون GUI على "نموذج" مرتبط ، وتتمثل مهمته في توصيل البيانات إلى المكون. الواجهة تبدو مثل:

public interface IModel extends IDetachable {
 public Object getObject();
 public Object setObject();
}

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

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

نصائح أخرى

كان استخدام الحياة الحقيقية التي أمتلكها مع فصول متداخلة ، في كائن إعدادات عالمية.

كانت فئة الوالدين مفردة ، مع فصول متداخلة كفئات إعدادات.

  • إعدادات
    • إعدادات الملف
    • إعدادات الطباعة
    • إلخ.

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

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

   public partial class Network
    {
            partial void initFDLF()
            {
                fdlf=new FDLF(this);
            }

        public FDLF fdlf;
        public class FDLF
        {
            internal bool changed=true;
            internal bool pvchange=true;
            public double epsilon = 0.001;
            public bool fdlfOk=false;
            public void init(){...}
            public void run(){...}
            ...
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top