سؤال

كيف يمكن إخفاء المعلومات على الفصل بين الوحدات التي يتألف منها النظام ؟

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

المحلول

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

ومن الأمثلة على ذلك. نقول لكم لقد نفذت بنية البيانات التي تحمل السلاسل في صفيف. إذا كنت فضح مجموعة، يمكن للمستخدمين من بنية البيانات الخاصة بك فقط استخدام str[7] للحصول على سلسلة في موقف 7.

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

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

ومع ذلك، إذا كنت قد مخفي تماما تنفيذ وقدمت مجرد وظيفة:

String getStringAt (int n);

وكنت مجرد تغيير بنية البيانات <م> و وظيفة للبقاء متوافق.

والعملاء لا استراحة لأن واجهة برمجة التطبيقات (API) لم يتغير.

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

وهذا يعني <م> جميع يمكن للعملاء القيام به هو استدعاء API. لا فضح أساليب غير API أو السماح بالوصول غير المقيد إلى المتغيرات العامة - ينبغي أن يتم كل شيء مع واضعي وحاصل

نصائح أخرى

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

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

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