در این مستند قصد بر آن است تا الگوها و پادالگوها در مهندسی نرم ­افزار و آموزش جاوا شرح داده شود. پیش از هر چیز نیاز داریم بدانیم الگو و پادالگو چیست؟

الگو

الگو راه­ حلی است تکرارشونده برای یک مسئله در حوزه ه­ای خاص، که در عمل موفق بوده­ است. الگو یک سه­ تایی متشکل از «مسئله – راه حل – حوزه» است. الگوها برای استفاده مجدد در مهندسی نرم­ افزار، از سیستم­های موجود کشف می­ شوند.

پادالگو

پادالگو راه­ حلی است تکرارشونده برای یک مسئله در حوزه ه­ای خاص، که در عمل موفق نبوده است. پادالگوها در مهندسی نرم­ افزار برای تکرار نکردن اشتباهات گذشتگان کشف می­ شوند. اگر یک الگو در حوزه مورد نظر اعمال نشود ممکن است به پادالگو تبدیل شود.
هر الگو برای یک حوزه (Context) خاص کاربرد دارد. منظور از حوزه دو مورد زیر است:
1-     یک سیستم و یا مجموعه سیستم­ها، مثلاً سیستم­های داده­ محور مبتنی بر وب، یا سیستم­های خبره
2-     یک فاز از فرایند ایجاد نرم­­ افزار مانند تحلیل، طراحی، برنامه ­نویسی، طراحی معماری و … . به عنوان مثال الگو برای طراحی وجود دارد و الگو برای معماری نیز وجود دارد و نمی­توان الگوهای طراحی را برای معماری به کار برد چون حوزه آنها طراحی است و ممکن است در معماری به پادالگو تبدیل شوند.
رخ دادن پادالگوها یا ناشی از عدم آگاهی است و یا در اثر به کار بردن یک الگوی مناسب در محیطی اشتباه.

چرا الگوها و پادالگوها را مطالعه کنیم؟

در زمان­های دور که اولین نرم­ افزارها نوشته می­ شد افراد همه چیز را از صفر (From Scratch) می­ ساختند، چون تجارب نرم­ افزاری وجود نداشت و مجبور بودند ایده­ های جدید برای ایجاد نرم­ افزار تولید کنند. پس از چند سال از قوت گرفتن شرکت­ های نرم­ افزاری در اواخر دهه 1980 کم ­کم مهندسین نرم­ افزار به این فکر افتادند که به جای «اختراع دوباره چرخ[1]»، از تجارب قبلی خود استفاده کنند.
همانگونه که در برنامه­ نویسی کتابخانه­ هایی از کلاس­ها، ماژول­ها و مؤلفه­ ها ایجاد شدند تا چرخ دوباره اختراع نشود، الگوها نیز از دل تجارب قبلی بیرون کشیده شدند تا همانند «کتابخانه ­ای از تجارب مفید» در دسترس همگان باشند و افراد آنها را نخواهند دوباره آنها را کشف کنند. پادالگوها نیز مانند «کتابخانه­ ای از تجارب غیرمفید» ثبت می­ شوند تا همه بدانند که نباید این تجارب را دوباره تکرار کنند.
امروزه در اکثر دانشگاه­های مطرح دنیا، الگوهای طراحی را در درس برنامه­  نویسی پیشرفته می­گویند تا ذهنیت الگو را در برنامه­ نویسی از همان ترم­های ابتدایی دانشگاه جا بیاندازند. در بسیاری از دانشگاه­های دنیا انواع الگوها در حوزه مهندسی نرم­ افزار تدریس می­شوند تا دید الگوشناسی به افراد داده شود. پس از اینکه افراد این دید را پیدا کنند در برخورد با چند مسئله خاص در یک حوزه، سعی می­ کنند آن­ها را عمومی کنند[2] و به یک الگو تبدیل کنند.

آنچه در این مستند می­ یابید

در بخش­های مختلف این مستند، انواع الگوها و پادالگوهای فرایند، تحلیل، طراحی، اصلاح[3] کد، معماری و … شرح داده می­شوند. در نسخه فعلی، الگوها و پادالگوهای «فرایند» ایجاد نرم­ افزار شرح داده شده­ اند. توجه داشته باشید که این مستند در حال تکمیل است.

«این مستند یک مستند در حال رشد است و به مرور بخش­های جدید به آن اضافه خواهد شد»

[1] Reinvent the Weel که یک پادالگو است.

[2] Generalizing

[3] Refactoring