Façade_ar

  • Uploaded by: Majed Jemmieh
  • 0
  • 0
  • June 2020
  • PDF

This document was uploaded by user and they confirmed that they have the permission to share it. If you are author or own the copyright of this book, please report to us by using this DMCA report form. Report DMCA


Overview

Download & View Façade_ar as PDF for free.

More details

  • Words: 1,593
  • Pages: 7
‫‪Façade Pattern‬‬ ‫الهدف ‪:‬‬ ‫يؤمن واجهة موحدة لمجموعة من الواجهات في نظام جزئي ‪ .‬إنه يعّرف واجهة عالية – المستوى‬ ‫تجعل النظام الجزئي أسهل للستخدام ‪.‬‬ ‫الدراسة ‪:‬‬ ‫إن تجزيء النظام إلى أنظمة جزيئة يساعد على تقليل التعقيد‪ .‬إن هدف التصميم العام هو تصغير‬ ‫التصال والعتماديات بين النظمة الجزئية إلى أقل قدر ممكن ‪ .‬وإحدى الطرق لتحقيق هذا‬ ‫الهدف هي تقديم الغرض ‪ façade‬الذي يؤمن واجهة وحيدة ‪ ،‬مبسطة تجعل النظام الجزئي‬ ‫أسهل عموما ً ‪.‬‬

‫افترض كمثال بيئة برمجية التي تتيح الوصول إلى التطبيقات إلى نظام الـ ‪ Compiler‬الخاص بها )‬ ‫الذي يعتر هنا نظام جزئي ‪ subsystem‬من البيئة ( ‪ .‬هذا النظام الجزئي يحوي صفوف مثل ‪:‬‬ ‫‪ scanner ، Parser ، ProgramNode ، BytecodeStream ، ProgramNodeBuilder‬الذي‬ ‫يحقق الـ ‪. Compiler‬‬ ‫بعض التطبيقات المخصصة قد تحتاجج إلى الولوج إلى تلك الصفوف مباشرة ‪ .‬ولكن معظم زبائن‬ ‫الـ ‪ compiler‬عموما ل يهتمون تفاصيل مثل تحليل وتوليد ‪ ، code‬بل يريدون ترجمة بعض‬ ‫‪ .code‬بالنسبة لهم ‪ ،‬والمستوى المنخفض قوية ولكن واجهات في النظام الـ ‪ compiler‬الجزئي‬ ‫ال الى تعقيد مهمتها‪.‬‬ ‫لكي تؤمن واجهة عالية المستوى تستطيع حجب الزبائن عن هذه الصفوف ‪ ،‬فإن نظام الـ‬ ‫‪ Compiler‬الجزئي يتضمن أيضا ً صف ‪ . Compiler‬هذا الصف يعرف واجهة موحدة لوظيفة الـ‬ ‫‪.Compiler‬‬ ‫ان صف ‪ Compiler‬يعرف بالـ ‪ : façade‬يوفر للزبائن واجهة بسيطة ‪ ،‬وحيدة لنظام الـ‬ ‫‪ compiler‬الجزئي ‪ .‬لدمج الصفوف التي تحقق وظيفية الـ ‪ compiler‬مع بعضها بدون أن يخفيها‬ ‫تماما ً ‪.‬‬ ‫ان الـ ‪ compiler façade‬يجعل الحياة أسهل لمعظم المبرمجين بدون اخفاء الوظيفية ذات‬ ‫المستوى الخفض التي قد يحتاجون إليها قليل ً ‪.‬‬

‫‪1‬‬

‫‪Façade Pattern‬‬

‫التطبيق ‪ :‬استخدام الـ ‪ façade pattern‬عندما ‪:‬‬ ‫•تريد أن تؤمن واجهة بسيطة لنظام جزئي معقد ‪ .‬بعض النظمة الجزئية غالبا ً تأخذ تعقيد‬ ‫أكثر وقت انشائها ‪ .‬معظم الـ ‪ ، patterns‬عند تطبيقها ‪ ،‬تولد صفوف أكثر وأصغر ‪ .‬هذا‬ ‫يجعل النظام الجزئي أكثر قابلية لعادة الستخدام وأسهل للتخصيص ‪ ،‬ولكن يصبح أيضا ً‬ ‫أصعب للستخدام من قبل الزبائن الذين ل يحتاجون إلى تخصيصه ‪ .‬يستطيع ‪façade‬‬ ‫تأمين منظر افتراضي بسيط للنظام الجزئي جيد كفاية لمعظم الزبائن ‪ .‬فقط الزبائن‬ ‫المحتاجين لخصوصية أكثر سيحتاجون للنظر خلف الـ ‪. façade‬‬ ‫•هناك العديد من العتماديات بين الزبائن وصفوف تحقيق التجريد ‪ .‬استخدام الـ ‪façade‬‬ ‫التي تفصل النظام الجزئي عن الزبائن والنظمة الجزئية الخرى ‪ ،‬إنذلك يعزز استقللية‬ ‫وناقلية النظام الجزئي ‪.‬‬ ‫•عندما تريد أن تجعل نظامك الجزئي من طبقات ‪ .‬استخدم الـ ‪ façade‬لتعّرف نقطة‬ ‫دخول لكل مستوى من مستويات النظام الجزئي‪ .‬إذا كانت النظمة الجزئية معتمدة على‬ ‫بعضها‪ ،‬فعند ذلك تستطيع أن تبسط العتماديات بينها بجعلها تتصل فيمابينها ببطء عبر الـ‬ ‫‪ façade‬الخاصة بكل منها‪.‬‬ ‫البنية ‪:‬‬

‫‪2‬‬

‫‪Façade Pattern‬‬ ‫القسام ‪:‬‬ ‫•‪: ( Façade ( compiler‬‬ ‫‪-1‬يعرف أي من صفوف النظام الجزئي ستكوةن مسؤولة عن الطلب ‪.‬‬ ‫وض طلبات الزبون إلى أغراض النظام الجزئي المناسبة‪.‬‬ ‫‪-2‬يف ّ‬ ‫•‪: (.subsystem classes (Scanner, Parser, ProgramNode, etc‬‬ ‫‪-1‬تحقق وظيفية النظام الجزئي‪.‬‬ ‫‪-2‬تعالج العمل المخصص لها من قبل الغرض ‪. façade‬‬ ‫‪-3‬ل تملك أي معرفة بالـ ‪ ، façade‬بما معناه ‪ :‬ل تبقي أي مؤشرات إليه ‪.‬‬ ‫أسلوب العمل ‪:‬‬ ‫•الربائن يتصلون بالنظام الجزئي عن طريق إرسال الطلبات إلى الـ ‪ ، façade‬الذي بدوره‬ ‫يرسلهم إلى غرض )أغراض (النظام الجزئي المناسب ‪ .‬بالرغم من أن أغراض النظام‬ ‫الجزئي تحقق العمل الفعلي ‪ ،‬فقد يضطر الـ ‪ façade‬إلى إنجاز العمل للنظام الجزئي‬ ‫الخاص به لكي يترجم واجهته إلى واجهات النظام الجزئي ‪.‬‬ ‫•الربائن الذي يستخدمون الـ ‪ façade‬ل يحتاجون إلى الولوج لغراض نظامه الجزئي‬ ‫مباشرة ‪.‬‬ ‫النتائج ‪:‬‬ ‫دم الـ ‪ façade pattern‬المنافع التالية ‪:‬‬ ‫يق ّ‬ ‫‪-1‬إنه يحجب الزبائن عن مكونات النظام الجزئي ‪ ،‬هذا يعني تقليل عدد الغراض التي يتعامل‬ ‫الزبائن معها وجعل النظام الجزئي أسهل للستخدام ‪.‬‬ ‫ً‬ ‫‪-2‬انه يعزز الرتباط الضعيف بين النظام الجزئي و زبائنه ‪ .‬غالبا فإن مكونات النظام الجزئي‬ ‫تكون مرتبطه بقوة ‪ .‬الرتباط الضعيف يدعك تغير مكونات النظام الجزئي بدون التأثير‬ ‫على زبائنه ‪ .‬الـ ‪ façade‬تساعد على عمل العتماديات بين الغراض والنظام كطبقات ‪.‬‬ ‫انها تستطيع التخلص من العتماديات المعقدة أو الدورية ‪ .‬إن ذلك يمكن أن يكون نتيجة‬ ‫هامة عندما تكون الزبائن و النظام الجزئي محققة بشكل منفصل ‪.‬‬ ‫‪-3‬تقليل اعتماديات الترجمة يعتبر أساسيات في أنظمة الـ ‪ software‬الضخمة ‪ .‬أنت تريد‬ ‫حفظ الوقت بتقليل إعادة الترجمة بأكبر قدر ممكن عندما تتغير صفوف النظام الجزئي ‪.‬‬ ‫إن تقليل اعتماديات الترجمة باستخدام ‪ façade‬يستطيع حد إعادة الترجمة المطلوة من‬ ‫أجل تغير صغير في نظام جزئي هام ‪ .‬ستطيع الـ ‪ façade‬أيضا ً بتبسيط أنظمة النفوذ إلى‬ ‫منصات عمل أخرى ‪ ،‬لنه لسوء الحظ فإن بناء نظام جزئي واحد يتطلب بناء كل النظمة‬ ‫الجزئية الخرى ‪.‬‬ ‫‪-4‬إنه ل يمنع التطبيقات من استخدام صفوف النظام الجزئي إذا احتاجت لها ‪ .‬وبالتالي‬ ‫يمكنك أن تختار بين سهولة الستخدام والتعميم ‪.‬‬ ‫التحقيق ‪:‬‬ ‫يجب النتباه غلى القضايا التالية عن تطبيق الـ ‪: façade‬‬ ‫‪-1‬تقليل الرتباط ‪: client – subsystem‬‬ ‫الرتباط بين الزبائن و النظام الجزئي يمكن أن يقلل بجعل الـ ‪ façade‬كـ ‪abstract‬‬ ‫‪ class‬مع صفوف جزئية محددة من أجل التطبيقات للنظام الجزئي ‪ .‬عندئذ يستطيع‬ ‫الزبائن التصال مع النظام الجزئي عبر واجهة صف ‪ façade‬المجرد ‪ .‬هذا الرتباط‬ ‫‪3‬‬

‫‪Façade Pattern‬‬ ‫المجرد يجعل الزبائن ليعلمون أي تطبيق للنظام الجزئي تم استخدامة ‪ .‬وهو إحدى‬ ‫الحلول ‪.‬‬ ‫كبديل عن الصفوف الجزئية يمكن اعداد الغرض الـ ‪ façade‬مع أغراض مختلفة من‬ ‫النظام الجزئي ‪ .‬كي تخصص الـ ‪ ، façade‬استبدال ببساطة واحد أو أكثر من أغراض‬ ‫نظامه الجزئي‪.‬‬ ‫‪-2‬الموازنة بين صفوف النظام الجزئي الـ ‪: private & public‬‬ ‫النظام الجزئي هو تمثل لصف هذا الصف يملك واجهات و يغلف شيئا ً ما – الصف يغلف "‬ ‫حالة وعمليات "بينما النظام الجزئي يغلف صفوف ‪ .‬وتماما كما أنه من المفيد أن نفكر‬ ‫بواجهة ‪ public‬و ‪ private‬لصف ‪ ،‬نستطيع أن نفكر بواجهة ‪ public‬و ‪ private‬للظام‬ ‫الجزئي‬ ‫الواجهة الـ ‪ public‬للنظام الجزئي تتألف من صفوف تستطيع كل الزبائن ولوجها ‪.‬‬ ‫أما الواجهة الـ ‪ private‬فهي فقط من أجل الربائن الذين يتوسعون باستخدام النظام‬ ‫الجزئي ‪.‬‬ ‫الصف ‪ façade‬هو جز من الواجهة الـ ‪ public‬بالطبع ‪ ،‬ولكنه ليس الجزء الوحيد ‪.‬‬ ‫صفوف النظام الجزئي الخرى هي أيضا ً ‪ . public‬كمثال ‪ :‬الصفوف ‪Scanner, Parser‬‬ ‫في نظام الـ ‪ compiler‬الجزئي يعتبر أن جزء من الواجهة الـ ‪. public‬‬ ‫–ان جعل صفوف النظام الجزئي ‪ private‬سيكون نافعا ً ‪ ،‬ولكن القليل من اللغات‬ ‫الغرضية التوجة تدعم تلك الصفوف ‪ .‬كل من الـ ‪ ++C‬والـ ‪ smalltalk‬تقليديا ً امتلكتا‬ ‫فضاء تسمية ‪ global‬من أجل الصفوف ‪.‬‬ ‫‪: Sample code‬‬ ‫دعنا نلقي نظرة قريبة عن كيفية اضافة ‪ façade‬إلى نظام الـ ‪ compiler‬الجزئي ‪:‬‬ ‫–انت نظام الـ ‪ Compiler‬الجزئي يعرف صف )‪ ( BytecodeStream‬يحقق مجرى‬ ‫من أغراض ‪ . Bytecode‬الغرض ‪ Bytecode‬يغلف ‪ bytecode‬الذي يستطيع تحديد‬ ‫تعليمات اللة ‪.‬‬ ‫ً‬ ‫–النظام الجزئي يعرف أيضا الصف ‪ Token‬من أجل الغراض التي تغلف الـ ‪token‬‬ ‫في لغة البرمجة‬ ‫–الصف ‪Scanner‬يأخذ مجرى من المحارف ويولد مجرى من الـ ‪tokens ،token‬‬ ‫واحدة بالثانية ‪.‬‬ ‫{ ‪class Scanner‬‬ ‫‪public:‬‬ ‫;)&‪Scanner(istream‬‬ ‫;)(‪virtual ~Scanner‬‬ ‫;)(‪virtual Token& Scan‬‬ ‫‪private:‬‬ ‫;‪istream& _inputStream‬‬ ‫;}‬

‫الصف ‪ parser‬يستخدم ‪ ProgramNodeBuilder‬ليبني شجرة ‪ parse‬من الـ ‪Scanner's‬‬ ‫‪tokens‬‬

‫{ ‪class Parser‬‬ ‫‪public:‬‬ ‫;)(‪Parser‬‬ ‫;)(‪virtual ~Parser‬‬

‫‪4‬‬

Façade Pattern

};

virtual void Parse(Scanner&, ProgramNodeBuilder&);

‫ بتزايد‬parse ‫ ليبني شجرة‬ProgramNodeBuilder ‫ من جديد‬parser ‫يستدعي‬ the Builder pattern ‫هذه الصفوف تخضع للـ‬ class ProgramNodeBuilder { public: ProgramNodeBuilder(); virtual ProgramNode* NewVariable( const char* variableName ) const; virtual ProgramNode* NewAssignment( ProgramNode* variable, ProgramNode* expression ) const; virtual ProgramNode* NewReturnStatement( ProgramNode* value ) const; virtual ProgramNode* NewCondition( ProgramNode* condition, ProgramNode* truePart, ProgramNode* falsePart ) const; // ...

: ‫ مثل‬StatementNode, ExpressionNode ‫ من مثائل من‬parse tree ‫تم صنع الـ‬ Composite pattern : ‫ هي مثال عن‬ProgramNode ‫ إن هرمية‬. ‫ الخ‬... ProgramNode class ProgramNode { public: // program node manipulation virtual void GetSourcePosition(int& line, int& index); // ... // child manipulation virtual void Add(ProgramNode*); virtual void Remove(ProgramNode*); // ... virtual void Traverse(CodeGenerator&); protected: ProgramNode(); };

ProgramNode subclasses ‫ الـ‬، CodeGenerator ‫ تأخذ غرض‬Traverse operation ‫الـ‬ BytecodeStream ‫ على الـ‬Bytecode ‫تستخدم ذلك الغرض لتوليد كود آلة بصيغة أغراض‬ visitor ‫ هو‬CodeGenerator ‫الصف‬ class CodeGenerator { public: virtual void Visit(StatementNode*); virtual void Visit(ExpressionNode*); // ...

5

Façade Pattern protected: CodeGenerator(BytecodeStream&); protected: BytecodeStream& _output; };

void ExpressionNode::Traverse (CodeGenerator& cg) { cg.Visit(this); ListIterator i(_children); for (i.First(); !i.IsDone(); i.Next()) { i.CurrentItem()->Traverse(cg); } }

‫ سنقدم الصف‬،‫ ال‬. Subsystem compiler ‫الصفوف التي ناقشناها حتى الن تصنع الـ‬ . ‫ الذي يجمع كل تلك القطع مع بعضها‬Façade ‫ أي‬Compiler class Compiler { public: Compiler(); };

virtual void Compile(istream&, BytecodeStream&);

void Compiler::Compile ( istream& input, BytecodeStream& output ) { Scanner scanner(input); ProgramNodeBuilder builder; Parser parser; parser.Parse(scanner, builder);

}

RISCCodeGenerator generator(output); ProgramNode* parseTree = builder.GetRootNode(); parseTree->Traverse(generator);

. ‫مز نوع مولد الكود ليستخدم بحيث ل يتم طلب مبرمجين ليحددوا البينية الهدف‬ ّ ‫هذا التحقيق ير‬ ‫ عند ذلك قد يزيد‬، ‫ إذا لم يكن كذلك‬. ‫قد يكون ذلك ممقول ً إذا كان هناك فقط بينية هدف واحدة‬ ‫ عند ذلك يستطيع المبرمجون تحديد‬CodeGenerator ‫ ليأخذ البرامتير‬Compiler ‫تغيير باني الـ‬ Compiler ‫المولد ليتم استخدامه عندما يجهزون الـ‬ ‫ و‬scanner ‫ إضافة مشاركين أخر بين مثل‬compiler façade ‫يستطيع الـ‬ façade ‫ ولكنه أيضا ً سيقلل من مهمة الـ‬، ‫ الذي يضيف المرونة‬، programNodeBuilder . ‫ التي تتمثل بتبسيط الواجهة من أجل الحالة العامة‬pattern ‫العلقة‬ 6

‫‪Façade Pattern‬‬ ‫‪Abstract Factory.1‬‬ ‫يمكن أن يستخدم مع ‪ façade‬ليؤمن واجهة لعمل أغراض النظام الجزئي في طريقة‬ ‫‪ subsystem-independent‬ويمكن أن يستخدم أيضا ً كبديل عن الـ ‪ façade‬لخفاء‬ ‫الصفوف المخصصة لمنصة العمل ‪.‬‬ ‫‪Mediator.2‬‬ ‫يشابه الـ ‪ façade‬من حيث أنه يجرد وظيفية الصفوف الموجودة‬ ‫تجريد التصال التحكمي بين الغراض المتراصفة وتكون عادة الوظيفية المركزية لتنتمي‬ ‫لي من هذه الغراض هذه الغراض تتصل بالـ ‪ mediator‬بدل ً من اتصالها ببعضها البعض‬ ‫مباشرة‪.‬‬

‫بشكل عام يجرد الـ ‪ façade‬الواجهة لغراض النظام الجزئي لجعلهم أسهل للستخدام ‪ ،‬انه ل‬ ‫يعرف وظيفة جديدة ‪ ،‬وصفوف النظام الجزئي ل تعلم شيئا ً عنها ‪.‬‬ ‫عادة ‪ ،‬يطلب فقط غرض ‪ façade‬واحد فإن الـ ‪ façade object‬تكون عادة ‪singletons‬‬

‫‪7‬‬

More Documents from "Majed Jemmieh"

June 2020 5
Aaaaaaaaaecg
April 2020 5