الگوها ,افزار ,·        ,استفاده ,الگو ,الگوهای ,·        الگوهای ,دنبال خواهد ,زبان الگو ,وجود دارد ,خواهد داشت

الگوها برای اولین بار توسط Christopher Alexander معرفی شدند. او که استاد بازنشته دانشگاه کالیفرنیا در رشته معماری است، در سال 1977 کتاب خود با عنوان The Timeless Way of Building مفهوم زبان الگو را اینگونه معرفی می کند : "فرآیند ساخت همه بنا های زیبا یکسان است. برای آشکار کردن آن می بایست دو کار انجام داد. ابتدا باید هر سازه را به کوچکترین جزء سازنده آن تجزیه کرد و سپس فرایندی برای کنار هم گذاشتن این اجزا تعریف کرد." او این اجزاء را الگو و فرایند کنار هم قرار دادن آنها را زبان الگو می نامد. (تاثیر این دیدگاه را به وضوح در کتاب pattern oriented software architecture v.5 مشاهده کرد.) در نگاه Alexander الگوها منشا زیبایی هستند و زیبایی را نه با ابداع بلکه با ترکیب الگوها به وسیله یک زبان الگو ایجاد کرد که حاصل این ترکیب پدیده ای است که Alexander آن را Quality without a name می نامد. در سال 1987 Kent Beck در مقاله ای به منظور استفاده از ایده Alexander در نرم افزار، پنج الگو را در زبان Smalltalk پیاده سازی کرد. Eric Gamma در رساله دکترای خود در سال 1991 به کاربرد الگوها در طراحی نرم افزار اشاره کرد. اما نقطه عطف استفاده از الگوها در نرم افزار بدون تردید چاپ کتاب Design Patterns Elements Of Reusable Software Development است.

در مهندسی نرم افزار تعاریف مختلفی برای الگوها وجود دارد :

·        پاسخی برای یک مشکل تکرار شونده در یک حوزه خاص است  (Eric Gamma)

·        انتزاعی از یک شکل محسوس که در یک زمینه خاص به صورت مکرر اتفاق می افتد  (Dirk Riehle)

·        قطعه ای از دانش که ماهیت یک خانواده از پاسخ ها به مشکلات تکرار شونده در یک دامنه خاص را در بر می گیرد  (Brad Appleton)

با نگاه مجرد به این تعاریف، می توان یک تعریف ساده و فراگیر برای الگوها ارایه کرد. در این تعریف هر الگو از سه قسمت تشکیل شده است، وضعیت بد، وضعیت خوب و مجموعه ای از الزامات. در واقع الگوها راهکاری برای تبدیل وضعیت بد (bad smell) به وضعیت خوب  (good smell) تحت الزماتی (force) مشخص است. الگوها در سطوح مختلفی از نظر ریزدانگی granularity وجود دارند.

·        الگوهای فرایند

·        الگوهای مهندسی مجدد

·        الگوهای معماری

·        الگوهای طراحی

·        الگوهای پیاده سازی

یکی از مشکلات اصلی در زمینه الگوها مربوط به مستند سازی آنها است. الگوها در متون مختلف با قالب های مختلف مستند شده اند که این کار جمع آوری و ترکیب آنها را مشکل می کند.

اما یک سوال مهم. اصولا فایده استفاده از الگوها در مهندسی نرم افزار چیست؟ در مرحله طراحی نرم افزار تصمیمات مهمی راجع به نرم افزار اتخاذ می شود که کیفیت نرم افزار نهایی به شدت به صحت و سقم این تصمیمات وابسته است.  با توجه به اینکه این تصمیم ها در سطح کلان مطرح می شوند، بالطبع اتخاذ تصمیم ها نادرست، هزینه های سنگینی به دنبال خواهد داشت. چرا که نتیجه این تصمیمات زمانی مشخص می شود که نرم افزار تولید شده است. برای اطمینان از صحت تصمیمات اتخاذ شده دو راه کار وجود دارد :

·        آزمودن تصمیم های مطرح شده :  با استفاده از رویکرد تکراری افزایشی (iterative-incremental) و نمونه سازی اولیه

·        اتخاذ تصمیم های آزموده شده : استفاده مجدد (reuse) روش دیگر جهت رسیدن به این هدف است.

رویکرد اول در واقع همان رویکرد متدولوژی های چابک _agile_ است که صحبت در مورد آن موضوع کتاب ها مختلف است. اما در مورد رویکرد دوم باید گفت، استفاده مجدد در سطح پایین انتزاع (استفاده از مولفه) مشکلاتی به دنبال خواهد داشت. از طرفی یافتن مولفه ای که تمامی نیازها را برآورده کند به ندرت عملی می شود و از طرف دیگر تغییر دادن مولفه در صورت امکان هم، خطراتی برای جامعیت مولفه به دنبال خواهد داشت. در واقع استفاده از الگوها، استفاده مجدد در سطح طراحی (سطحی مجرد تر از پیاده سازی) را فراهم می کنند.

برای یک مهندس نرم افزار شناخت الگوها امری ضروری است (در واقع الگوها مرز بین برنامه نویس و مهندس نرم افزار است) اما چگونگی استفاده از آنها در تولید نرم افزار چالشی جذاب تر است. به طور کلی برای این منظور دو راهکار بی نظم و نظامند وجود دارد.

نکته که نباید از آن غافل شد اصالت الگوهاست (راه حل جدید الگو نیست) چرا که همانطور که اشاره شد، الگوها راه حل های شناخته شده هستند.


 private void BuySnack(string positionString)
        {
            int position = int.Parse(positionString);
            string error = _snackMachine.CanBuySnack(position);
            if (error != string.Empty)
            {
                NotifyClient(error);
                return;
            }
            _snackMachine.BuySnack(position);
            _repository.Save(_snackMachine);
            NotifyClient("You have bought a snack");
        }

منبع اصلی مطلب : تولید نرم افزار با الگو
برچسب ها : الگوها ,افزار ,·        ,استفاده ,الگو ,الگوهای ,·        الگوهای ,دنبال خواهد ,زبان الگو ,وجود دارد ,خواهد داشت
اشتراک گذاری: این صفحه را به اشتراک بگذارید

آینا گروه : الگوها در مهندسی نرم افزار