خانه / دانستنیها / اندر احوالات الگوهای طراحی

اندر احوالات الگوهای طراحی

سال گذشته که مدت محدودی به کار توسعه‌ی اپلیکیشن‌های سیستم‌عامل محبوب گوگل، اندروید، مشغول بودم، روزی رو به همکارم کردم و گفتم: رفیق، این قطعه کد از کلاس String را ببین. زیبایی و آراستگی را میبینی؟ حس می‌کنی چقدر با سبک کدنویسی ما توفیر دارد؟ لحظه‌ای به فکر فرو رفت و با تکان‌دادن سر حرفم را تایید کرد. اندکی بعد پرسید: خوب، چرا نمی‌توانیم این‌گونه کد بزنیم؟

درست است که خاطره‌ی فوق ارتباط آن‌چنانی با مبحث الگوهای طراحی ندارد و نیک می‌دانیم در زمان انتشار نسخه‌های اولیه‌ی جاوا هنوز این موضوعات در دنیای برنامه‌نویسی به این عنوان طرح نشده بود، اما به نظرم این پرسش به غایت کلیشه‌ای که “چگونه کد خوب بنویسیم” هیچ پاسخی به جز آشنایی با استانداردهای پذیرفته‌شده‌ی امروزی برنامه‌نویسی، خواه الگوهای طراحی باشد یا سرفصل‌های دیگر، ندارد. بی‌شک در پیاده‌سازی کلاس‌های پایه‌ای کتاب‌خانه‌های جاوا یا اندروید، حداقل در نسخه‌های امروزی، از الگوهای طراحی استفاده شده است. به عنوان مثال توجه شما را به این لینک در این رابطه جلب می‌کنم.

قصد ندارم بگویم این مبحث دشوار نیست و تسلط بر آن صرفاً با خواندن یک کتاب و مقاله میسر است. من نیز تا چندی پیش که در کلاس آموزشی یکی از دوستان حاضر نشده بودم آشنایی با این چیزها نداشتم. هدف از طرح موضوع، معرفی منابعی برای شروع است. این نوشته در یک کلام جرقه‌ای است برای شروع.

اما این حرف‌ها به کنار باید گفت الگوهای طراحی زاییده‌ی کتابی است با نام Design Patterns: Elements of Reusable Object-Oriented Software که چهار متخصص علوم کامپیوتر آن را نوشته‌اند. این چهار نفر به Gang of Four یا به اختصار GoF مشهور هستند. کلاسیک‌ترین کتابی که می‌توان در مورد این مبحث پیدا کرد همین کتاب ۳۹۵ صفحه‌ای است که در سال ۱۹۹۴ چاپ شده است. (لینک)

ضمناً نویسندگان کتاب این تعریف از الگوهای طراحی را در کتاب خویش ارائه داده‌اند:

The design patterns in this book are descriptions of communicating objects and classes that are customized to solve a general design problem in a particular context.

اما به نظر می‌رسد برای مخاطبی که برنامه‌نویس جاوا باشد یک عیب در مورد این کتاب وجود دارد. البته شاید عیب باشد، نمی‌دانم. تمام مثال‌های کتاب با زبان ++C پیاده‌سازی شده‌اند. درست است که مباحث شی‌گرایی و سینتکس ++C و جاوا شباهت‌های زیادی دارند، اما تفاوت‌ها نیز اندک نیست.

اخیراً چند روزی که فرصت کافی داشتم، به یافتن منابع مناسب جهت شروع این مبحث پرداختم. سرانجام، حاصل جستجو به یک کتاب و یک مجموعه‌ی آموزش ویدیویی ختم شد. تلاش می‌کنم شرح مختصری از این یافته‌ها را بیان کنم.

۱) کتاب  Head First Design Patterns:

این کتابی بود که بیشترین توصیه را در فروم‌ها و انجمن‌های برنامه‌نویسی برای برنامه‌نویسان جاوا داشت. کتاب دارای ۶۹۴ صفحه می‌باشد و در سال ۲۰۰۴ چاپ شده است. کتاب Head First Design Patterns از سری کتاب‌های مجموعه‌ی Head First است. مجموعه‌ای که تلاش می‌کند برنامه‌نویسی را از شیوه‌ی مرسوم آکادمیک خود خارج کند و آن را گاهاً با مطالب جذاب، طنز و تلفیقی از تصاویر کلاسیک همراه سازد. این کتاب با همه‌ی تعریف و تمجیدهایی که به همراه دارد به نظر من شاید یک ایراد کوچک داشته باشد. بسیار شلوغ است! صفحات کتاب پر از تصاویر و متن‌های تکه‌تکه است که برای دنبال‌کردن و حفظ انسجام موضوع نیازمند است که به‌شدت تمرکز کنید. چه‌بسا یکی از همین تصاویر یا داستان‌های حاشیه‌ای شما را به طور کلی از موضوع اصلی دور کند. اما در کل کتاب خوب و جالبی است. نکته‌ی دیگر این‌که اخیراً یک نفر کدهای کتاب را طبق ساختار جاوا ۸ به‌روز کرده و آن‌ها را در GitHub در این لینک قرار داده است.

۲) مجموعه‌ی آموزش ویدیویی آقای Derek Banas:

در این کانال یوتیوب، ۲۷ ویدیو وجود دارد. مدت زمان هر کدام به طور متوسط ۱۵ دقیقه است. در این مجموعه اکثر الگوهای طراحی مهم در جاوا بررسی می‌شوند. اما دو مسئله در رابطه با مخاطبین ایرانی این ویدیوها درخور توجه است. اولین مسئله در دسترس نبودن یا شاید سختی دسترسی به سایت یوتیوب برای کاربران ایرانی است. دومین مسئله این است که جناب آقای Derek Banas در این ویدیوها بسیار بسیار تند و غلیظ صحبت می‌کنند. حتی شاید بد نباشد دوستانی که قصد دارند خود را برای آزمون‌های آکادمیک زبان آماده کنند، سطح مهارت شنیداری خویش را با این ویدیوها بسنجند! کافی است یکی از ویدیوها را امتحان کنید. 🙂 اما از مزاح گذشته در پلیر یوتیوب می‌توان با فعال‌کردن گزینه‌ی نمایش زیرنویس، متن صحبت‌ها را در کنار آن داشت. به گمانم این زیرنویس‌ها به همراه خود فایل‌های ویدیویی از طریق سایت‌های دانلود قابل دریافت باشند.

در انتها امیدوارم این تجربه برای مخاطبین مفید باشد. اگر شما هم منبع یا تجربه‌ای در این زمینه دارید به اشتراک بگذارید.

 


درباره محمد تقی زاده

همچنین بررسی کنید

Spring MVC واقعا چگونه کار می‌کند؟

در این مطلب، ما نگاهی خواهیم داشت به این که چگونه ویژگی‌های موجود در Spring …

پاسخ دهید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *