زندگی خود را با اختراع دوباره چرخ بیهوده هدر ندهید
در توسعه نرمافزارها اصل ثابتی وجود دارد که میگوید هر زمان نرمافزارها یا پروژهها به تغییر نیاز داشتند، این تغییر را اعمال کنید. تغییرات زمانی اعمال میشوند که نیازها دستخوش تحول میشوند، سامانهها رشد پیدا میکنند و بزرگتر میشوند، قابلیتهای جدیدی باید اضافه شوند و درنهایت نیاز است عملکرد بهبود و ارتقا پیدا کند. مواردی که به آنها اشاره شد، ضرورت اعمال تغییرات را دوچندان میکنند. پرسشی که اکنون مطرح میشود این است که چگونه میتوانیم یک نرمافزار را بهشکلی طراحی و تولید کنیم که به تغییرات حداقلی نیاز داشته باشد؟ بدون شک همه برنامهنویسان به این حقیقت اذعان دارند که سختترین جنبه توسعه نرمافزارها درک کدهای موجود و ویرایش این کدها بهمنظور برطرف کردن نقصهای جدید یا پیامدهای ناخواسته است. پیامدهایی که ممکن است عملکرد سامانهها را کاهش دهد یا مشکلات امنیتی به وجود آورد. در این بین، یک برنامهنویس ممکن است مجبور شود کدهایی که از سوی دیگر برنامهنویسان نوشته شده است را بازبینی و همین عملیات را روی آن کدها اعمال کند. با این توصیف چگونه میتوانیم چنین نرمافزاری را تولید کنیم؟ در پاسخ باید بگوییم هیچ راهکار جادویی وجود ندارد، اما در مقابل تکنیکهایی وجود دارد که شما از طریق بهکارگیری آنها میتوانید طراحی شیءگرایی خود را در مقابل تغییرات انعطافپذیرتر کنید. تکنیکهایی که در طول سالهای مختلف از سوی متخصصان برجسته آن هم در موقعیتهای سخت کاری ابداع شده و در ادامه در اختیار عموم مردم قرار گرفته است. این تکنیکها بهنام الگوهای طراحی شهرت دارند و در واقع طرحها و قالبهای از پیش ساختهای را ارائه میکنند که بهمنظور برطرف کردن مشکلات رایج مورد استفاده قرار میگیرند. الگوهای طراحی، کتابخانه یا ماژولها نیستند، الگوهای طراحی دستورالعملها و خطمشیهای مرتبط با طراحی هستند که با هسته طرحها ادغام میشوند و فرآیند ساخت سامانههای شیءگرا با قابلیت انعطافپذیری و نگهداری بالا را ساده میکنند. پس زمانی که این شانس را دارید تا از تجربه بهترین طراحان شیءگرا در این زمینه استفاده کنید، چه لزومی دارد تا دو مرتبه چرخ را اختراع کنید؟
مهارتهای شیءگرایی خود را ارتقا دهید
افرادی که برنامهنویسی را بهشکل درست و اصولی یاد گرفتهاند، بهخوبی از این موضوع اطلاع دارند که برنامهنویسی شیءگرایی در تعامل با چهار مفهوم کپسوله کردن (encapsulation)، پلیمورفیسم (polymorphism)، وراثت (inheritance) و انتزاعی بودن (abstraction) است. درست است که چهار مفهوم فوق جزء اصول بنیادین هستند، اما طراحی سامانههای شیءگرا محدود به این چهار اصل نمیشود. در واقع اگر بهشکل عادی از این اصول در طراحی خود استفاده کنید،
در عمل مشاهده خواهید کرد که با مشکلات عدیدهای همچون تکرار کدها، طراحی ضعیف و استفاده بیش از اندازه از کلاسها روبهرو خواهید شد. در زمان کار با الگوهای طراحی شما با مجموعه دیگری از اصول طراحی آشنا میشوید که بهمراتب فراتر از مبانی اولیه شیءگرایی هستند. این اصول طراحی را میتوان به هنگام ایجاد و آمادهسازی کلاسها و اشیا در زمان طراحی به کار برد. اصولی که به شرح زیر هستند:
• هر مفهوم قابل تغییری را کپسوله کنید.
• کلاسها برای توسعه دادن باید بسته باشند، اما در مقابل ویرایش باز باشند.
با آگاهی و شناخت درست این اصول و چگونگی نحوه ترکیب آنها در الگوهای طراحی به یک طراح و معمار بهتر در زمینه شیءگرایی تبدیل میشوید.
سعی کنید الگوهای موجود در کتابخانهها و زبانها را تشخیص دهید
الگوهای طراحی راهکارهای عمومی برای حل مشکلات رایجی هستند که پیرامون طراحی شیءگرایی قرار دارد. بهعبارت دقیقتر الگوها راه حلهایی را پیش روی شما قرار میدهند تا از طریق آنها مشکلات طراحی نرمافزارهای خود را حل کنید. نکتهای که لازم است به آن توجه داشته باشید این است که نمیتوانید یک ماژول الگوی طراحی را دانلود و در ادامه آن را در طراحی خود نصب کنید، بلکه باید این الگوی طراحی را درون سیستم خود پیادهسازی کنید. شما در اغلب موارد با الگوهایی که در کتابخانهها، بستهها و ماژولهایی که استفاده میکنید سروکار دارید. پکیج مربوط به ورودی/ خروجی فایل در جاوا یکی از این موارد است. زبان برنامهنویسی جاوا از الگوی Decorator استفاده میکند که به شما اجازه میدهد تا یک شیء ورودی/ خروجی را از فایل اصلی دریافت کرده و در ادامه این شی را با قابلیتهای جدیدی که مد نظر دارید ترکیب کنید. این رویکردی عالی برای طراحی یک سامانه ورودی/ خروجی فایل است. اگر از قبل با چنین الگوهای طراحی آشنا شده و به طور خاص با الگوی Decorator آشنا باشید، بهراحتی چگونگی طراحی این شیء و روش کار آن را متوجه خواهید شد. در نتیجه مهم نیست از File Object جاوا (Decorator Pattern)، Event Object جاوااسکریپت (Observer Pattern) یا NSUserDefaults object شرکت کوکا (Singleton) یا الگوی Model-View-Controller در هر پکیج رابط کاربری استفاده کنید، موضوع مهم این است که باید از قبل با الگوهای بیشتری آشنا شده باشید تا در ادامه بتوانید بهسرعت کتابخانههای جدید را درک کنید.
سعی کنید از زبان مشترک با سایر توسعهدهندگان استفاده کنید
همان گونه که در پاراگراف 3 به آن اشاره کردیم، یکی از مزایای یادگیری الگوهای طراحی آشنایی با الگوهای رایج است. اگر بهدنبال آن هستید تا خود و گروهتان بهسرعت کارها را انجام دهد، باید بهدنبال یادگیری الگوها باشید. این تکنیک به شما کمک میکند بهراحتی بتوانید با طرحهای دیگران ارتباط برقرار و طرحهای خود را بهدرستی برای آنها تعریف کنید. به طور مثال، فرض کنید به همگروهی خود میگویید درباره بخش جدیدی از طرح خود توضیحاتی ارائه کند. او به یکی از این دو روش میتواند توضیح مورد نظر را ارائه کند.
روش اول: «من این کلاس برودکیت را ایجاد کردم. این کلاس بهمنظور ردیابی وضعیت همه اشیا و ارسال پیام برای دریافتکنندههایی است که با این کلاس ارتباط دارند. هر زمان قطعه جدیدی از دادهها وارد میشود، این کلاس پیامی را برای گیرندههای مربوط ارسال میکند. نکته جالبی که وجود دارد این است که گیرندهها این توانایی را دارند تا در هر زمان به کلاس برودکست متصل شوند یا خودشان را حذف کنند. این روش کاملاً پویا و آزاد است!»
یا
روش دوم: «من این کلاس برودکست را بر مبنای الگوی Observer ایجاد کردهام.»
در روش اول، شما باید مدت زمان زیادی را به تفکر بپردازید تا بهدرستی متوجه شوید کلاس برودکست دقیقاً چه کاری انجام میدهد، اما در روش دوم، بهدرستی میدانید که این کلاس قرار است چه کاری را انجام دهد، بهواسطه آنکه میدانید الگوی Observer چیست. این همان قدرتی است که شما از طریق کلیدواژههای مشترک در الگوهای طراحی به دست میآورید. اگر سعی کنید به زبان الگوها با سایر توسعهدهندگان ارتباط برقرار کنید، سایرین بهسرعت متوجه میشوند شما چه طرحی را ایجاد کردهاید و جزئیات آن را بهدرستی درک خواهند کرد.
بهدنبال زیبایی و حقیقت باشید
درست است که خودتان میتوانید سامانههای شیءگرا را ایجاد یا ترکیب کنید و به این شکل نکات بسیاری را بیاموزید، اما فراموش نکنید که میتوانید از طریق مطالعه و بهکارگیری الگوهای طراحی، شناخت و بینش دقیقتری به دست آورید. همان گونه که پیش از این به آن اشاره داشتیم، الگوهای طراحی راهکار نیستند که به یک باره ابداع یا فراگرفته شوند. آنها بر مبنای یک کار سخت و تجربه ژرف ساخت سامانههای مختلف پدید آمدهاند. همان گونه که الگوهای طراحی را یاد میگیرید، ممکن است بتوانید دیدگاه و بینش یک معمار مجرب نرمافزاری را نیز به دست آورید. رویکردی که درنهایت شما را در مسیر طراحی نرمافزارهای بهتر با قابلیت ماندگاری طولانیتر هدایت خواهد کرد.
از همین امروز به فکر یادگیری الگوهای طراحی باشید
نزدیک به ده سال قبل انتشارات O’Reilly کتابی در رابطه با الگوهای طراحی شیءگرایی منتشر کرد. این کتاب که Head First Design Patterns نام دارد، موفق شد جایزه Jolt را از آن خود کند و به پرفروشترین کتاب این انتشارات تبدیل شود. این کتاب به شما هر آنچه برای درک بهتر الگوهای اولیه شیءگرایی به آن نیاز دارید آموزش میدهد. پیشنهاد ما این است این کتاب ارزشمند را حتماً مطالعه کنید. همچنین، برای شروع یادگیری میتوانید از سایت GeeksforGeeks به نشانی:
https://www.geeksforgeeks.org/software-design-patterns/
و سایت dofactory به نشانی:
http://www.dofactory.com/net/design-patterns
استفاده کنید.
ماهنامه شبکه را از کجا تهیه کنیم؟
ماهنامه شبکه را میتوانید از کتابخانههای عمومی سراسر کشور و نیز از دکههای روزنامهفروشی تهیه نمائید.
ثبت اشتراک نسخه کاغذی ماهنامه شبکه
ثبت اشتراک نسخه آنلاین
کتاب الکترونیک +Network راهنمای شبکهها
- برای دانلود تنها کتاب کامل ترجمه فارسی +Network اینجا کلیک کنید.
کتاب الکترونیک دوره مقدماتی آموزش پایتون
- اگر قصد یادگیری برنامهنویسی را دارید ولی هیچ پیشزمینهای ندارید اینجا کلیک کنید.
نظر شما چیست؟