OCP - shekoufehrahimi.com

Download Report

Transcript OCP - shekoufehrahimi.com

‫طراحی مولفه های مبتنی بر کالس‬
‫اصول طراحی مبتنی بر مولفه‬
‫طراحی در سطح مولفه ها از اطالعات فراهم شده به عنوان‬
‫بخشی از مدل خواسته ها و اطالعات نمایش داده شده به عنوان‬
‫بخشی از مدل معماری بهره می برد ‪ .‬هنگامی که یک روش‬
‫مهندسی نرم افزار شی گرا انتخاب می شود آن چه در طراحی‬
‫در سطح مولفه ها کانون توجه قرار می گیرد پرداختن به‬
‫جزئیات کالس های ویژه دامنه مساله و تعریف و پاالیش‬
‫کالس های زیر ساختی موجود در مدل خواسته ها ست ‪.‬‬
‫توصیف مشروحی از صفات عملیات ها و واسطه های مورد‬
‫استفاده این کالس ها جزئیات طراحی الزم برای فعالیت ساخت‬
‫شی را فراهم می آورد‪.‬‬
‫اصول پایه طراحی مولفه ها‬
‫‪ ‬در طراحی در سطح مولفه ها از چهار اصل پایه طراحی استفاده می‬
‫شود که هنگام به کارگیری مهندسی نرم افزار شی گرا به طور گسترده‬
‫پذیرفته می شوند ‪ .‬انگیزه اصلی برای به کارگیری این اصول ایجاد‬
‫طراحی هایی است که بیشتر مستعد تغییر باشند و انتشار اثرات جانبی‬
‫ناشی از تغییرات را کاهش دهند ‪.‬‬
‫‪ ‬از این اصول می توانید به عنوان راهنمایی در توسعه هر مولفه ی نرم‬
‫افزار استفاده کنید ‪.‬‬
‫اصل باز –بسته (‪)OCP‬‬
‫یک مولفه باید برای عمل بسط باز و برای عمل اصالح بسته باشد ‪.‬‬
‫این عبارت ممکن است تناقض آمیز به نظر برسد ولی یکی از مهم ترین‬
‫خصوصیات طراحی در سطح مولفه ها را نشان می دهد ‪ .‬به بیان ساده‬
‫باید مولفه را به قسمی مشخص کنید که بتوان آن را بسط داد بدون اینکه‬
‫نیازی به انجام اصالحات داخلی در سطح کد ها و منطق در خود مولفه‬
‫باشد ‪.‬‬
‫برای دستیابی به این هدف انتزاع هایی ایجاد می کنید که میان قابلیت‬
‫عملیاتی که احتماال باید بسط و گسترش داده شود و خود کالس طراحی به‬
‫عنوان میانجی عمل می کند ‪.‬‬
‫برای مثال فرض کنید قابلیت امنیتی منزل در محصول ‪safehome‬از‬
‫کالس ‪detector‬استفاده می کند که باید وضعیت هر نوع حسگر امنیتی‬
‫را چک کند ‪.‬‬
‫این احتمال وجود دارد که با گذر زمان تعداد و انواع حسگر های امنیتی‬
‫رشد پیدا کند ‪ .‬اگر منطق پردازش داخلی به صورت دنباله ای از‬
‫ساختار های ‪if-then-else‬پیاده سازی شود ئ هر کدام به یک نوع‬
‫حسگر متفاوت بپردازد افزودن نوع جدیدی از حسگر مستلزم منطق‬
‫داخلی اضافی خواهد بود ‪.‬‬
‫یک راه دستیابی به اصل ‪ocp‬برای کالس ‪ detector‬در شکل زیر نشان‬
‫داده شده است ‪ .‬واسط ‪ sensor‬نشان گر دیدگاهی سازگار از جسگر ها‬
‫در مولفه ی ‪detector‬است ‪ .‬اگر نوع جدیدی از حسگر افروده شود‬
‫تغییری برای کالس ‪detector‬مورد نیاز نیست ‪ .‬پس ‪ocp‬برقرار‬
‫است ‪.‬‬
‫‪Sensor :‬‬
‫)(‪Read‬‬
‫)( ‪Enable‬‬
‫)(‪Disable‬‬
‫)(‪Test‬‬
‫آشکارساز‬
‫حسگر‬
‫‪co2‬‬
‫حسگر‬
‫گرمایی‬
‫آشکارساز‬
‫حرکت‬
‫حسگر دود‬
‫حسگر‬
‫های‬
‫درها‬
‫‪OCP‬در عمل‬
‫نقش آفرینان ‪:‬‬
‫وینود و شکیرا –اعضای تیم مهندسی نرم افزار ‪safehome‬‬
‫گفتگو ‪:‬‬
‫وینود ‪:‬همین االن مدیرتیم با من تماس گرفت ‪ .‬می گوید بخش بازار یابی می‬
‫خواهد یک حسگر جدید اضافه کند ‪.‬‬
‫شکیرا ‪:‬خدایا دوباره ؟‬
‫وینود ‪:‬بله ‪ ....‬و باورت نمی شود چه چیزی درست کرده اند ‪.‬‬
‫شکیرا ‪:‬دوست دارم بشنوم‬
‫وینود ‪:‬اسمش را گذاشته اند حسگر نگرانی سگی‬
‫شکیرا ‪:‬یعنی چی ؟‬
‫وینود ‪:‬برای آدم هایی که حیوان خانگیشان را در آپارتمان یا خانه هایی می‬
‫گذارند که به خانه ها و آپارتمان های دیگر نزدیک است ‪.‬‬
‫سگ شروع به پارس کردن می کند ‪ .‬همسایه عصبانی می شود و شکایت‬
‫می کند ‪ .‬ولی با این حسگر ها اگر سگ یسشتر از مثال یک دقیقه پارس‬
‫کند حسگر یک حالت هشدار را فعال می کند که به تلفن همراه صاحبخانه‬
‫زنگ می زند ‪.‬‬
‫شکیرا ‪:‬شوخی می کنی ‪.‬نه؟‬
‫وینود ‪:‬نخیر‪.‬مدیر تیم می خواهد بداند چقدر وقت می گیرد تا یک قابلیت‬
‫امنیتی دیگر اضافه کینم ‪:‬‬
‫شکیرا ‪:‬وقت زیادی نمیگیرد ‪ .‬ما کالس های واقعی حسگر را پشت واسط‬
‫‪sensor‬جدا کرده ایم ‪ .‬هر وقت مشخصات مربوط به حسگر سگی را‬
‫داشته باشیم ‪ .‬اضافه کردن آن باید مثل آب خوردن باشد ‪ .‬تنها کاری که‬
‫باید بکنم ایجاد یک مولفه ی مناسب است ‪ .‬یعنی یک کالس مولفه ی‬
‫‪ detector‬به هیچ وجه نباید نغییر کند ‪.‬‬
‫وینود ‪:‬پس به مدیر می گویم که مشکل بزرکی وجود ندارد ‪.‬‬
‫شکیرا ‪:‬با شناختی که از مدیر دارم او از ما می خواهد که به کارمان ادامه‬
‫بدهیم و این حسگر سکی را در الویت بعدی قرار بدهیم ‪.‬‬
‫وینود ‪:‬اگر االن هم بخواهد می توانی ارائه دهی ؟‬
‫شکیرا‪:‬بله طراحی واسط طوری بوده که بدون مسکل خاصی این کار را‬
‫انجام می دهیم ‪.‬‬
‫وینود‪:‬تا حاال از اصل باز و بسته چیزی شنیده ای ؟‬
‫شکیرا ‪:‬نه نشنیدم‬
‫وینود ‪:‬مشکلی نیست ‪.‬‬