کار مشترکی از متخصصان صنعت نرم افزار در کانادا:شریف یزدیان، هومن علاوه زاده، آرش گودرزی، مهدی شکوهی، محمد نادی، محمد امین فرد با اجرای طلیعه دوانی
با اپیزود ۲۶ رادیو بیدار با شما هستیم
همچنین از طرف رادیو بیدار روز جهانی زن را به همه بانوان سرزمینم تبریک میگیم
با آرزوی فردایی بهتر
تا امروز چه تعریفی از دیزاین پترن در ذهنتون داشتید؟
از دیزاین پترن چه زمانی استفاده میشه؟
در طول زمان برنامه نویس ها برای توسعه نرم افزار ها با مشکلات مختلفی مواجه می شدند و بسیاری از این مشکلات مشابه هم و مستقل از زبانهای برنامهنویسی بودند بنابراین برای حل این مشکلات راه حل های مختلفی ارائه شد که به بهترین روش رفع این مشکلات الگوهای طراحی یا دیزاین پترن میگویند
دیزاین پترن ها به سه نوع کلی خلاقانه، ساختاری و رفتاری دستهبندی می شوند
شناخت الگوهای طراحی برای همه برنامه نویس ها یک ضرورته چون با به کارگیری آنها قادر هستیم این نرم افزار های انعطاف پذیر قابل توسعه و مقیاس پذیر ایجاد کنیم که به صورت اصولی طراحی شده اند.
آیا تاکنون از الگوهای طراحی استفاده کردین؟
به نظر شما مهمترین مزیت استفاده از الگوهای طراحی در کد نویسی شی گرا چیه ؟
در این اپیزود اصول الگوهای طراحی توسط مهندس شریف یزدیان ارائه شد.
دوستانی که در این اپیزود شرکت کردند هومن علاوه زاده، مهدی شکوهی، آرش گودرزی،محمدنادی و محمد امین فرد بودند
سلام خدمت همه
قسمت 26 رادیو بیدار در خدمتتون هستیم
مهمانان برنامه آقا هومن، محمد ، امین، مهدی و آرش هستند و من هم شریف هستم.
موضوع این جلسه می خواهیم در مورد دیزاین پترن ها صحبت کنیم.
مقدمه شروع کنیم که در ادامه صحبت کنیم
طراحی الگوهای نرم افزاری یا دیزاین پترن یک تعریف کلاسیک داره ، خیلی جالبه وقتی به صورت سنتی برنامه نویسی می کنیم به دیزاین پترن بر نمی خوریم ولی موقعی که حرفه ای در بخش های مختلف برنامه نویسی نگاه می کنیم میبینیم که چقدر کاربردی هست.
ویکی پدیا در مورد طراحی الگوی نرمافزار نوشته که راهحل عمومی قابل تکرار برای مشکلات متداول در زمینه طراحی نرمافزار الگوی طراحی یک طراحی تمام شده نیست که به صورت مستقیم به توان تبدیل به دور خود یا کد ماشین بشه، یه جور توضیحه یا یه قالب برای حل مسئله در شرایط مختلف بهترین روش ممکن به برنامه نویس ارائه بده، موقع طراحی یک برنامه وقتی برای حل مشکلات کار میکنیم میبینیم که این دیزاین پترن چقدر به درد میخوره الگوی طراحی نرم افزار معمولاً شی گرا هستند که نشاندهنده رابطه و تعامل بین کلاسها و شی ها هستند و بدون کلاس یا اشیا نهایی برنامه را مشخص کنند میتوانند که کاربردی باشد این الگوها میتونه که وضعیت تغییر پذیر داشته باشد استفاده از بعضی از الگو برای حل مسئله مشابه می توان لازم نباشه به همین ترتیب الگوهای طراحی شی گرا ممکنه برای بعضی از زبانهای غیر شی گرا مناسب نباشد انواع مختلفی از الگوهای طراحی داریم که در بخش بعدی عنوان هاش رو میگم و اینکه چه فرقی با هم دارند.
شریف:
ما اگر بخواهیم ببینیم چه چیزی را می تونیم بگیم چند ویژگی دارد یکی اینکه خیلی ها و هیچ راهحلی نوشته شده ولی به صورت خیلی عام که نکته مهم اینکه این فاینال سولوشن نیست و شما این را باید کاستومایز شکنی که مطابق مشکل شما بشه در عین حال همیشه قرار نیست که مشکلات شما را در این الگو جواب بده نکته مشترک همه اینکه یه اسمی این الگو رو پیدا کردن برنامه نویس ها و یک اسم مشخصی را روش گذاشتن اسم مثلاً دیزان پترن فکتوری مثلاً نال اکسپشن هندلینگ
چون دیگه خیلی این دیگه تکرار شده دیگه دو تا برنامه نویس که با هم صحبت می کنند تا اسمشو بیاری در مورد کدوم دیزان پترن صحبت می کنند و نکته خیلی مهم تر که آخرین مورد اینکه:
دیزاین پترن الگوریتم نیست و قرار نیست که فقط یک الگو است
در مورد تاریخچه دیزاین پترن:
سال ۱۹۷۷ آقایی به نام کریستوفر الکساندر که معمار بود این آقای یک کتابی می نویسه به نام a pattern language towns buildings construction برای معماری طرح های معماری را که ارائه میداده میبینه که در ویژگی های یک خونه یا بنای خوب برای طراحی یک سری ویژگی های مشترک داره و خونه ها الزاما مثل هم نیستند دو تا خونه یا دو تا بنا صددرصد کپی هم نیستند ولی ویژگی های خوبی که توی خونه اولی بود و خونه دومی، وقتی طراحی می کرده میبینه اگرالگوها رو اگه تکرار کنه خیلی راحت میتونه الگوهای بهینه شده هستند و بهترین حالت هستند
یک مثال ساده که بزنیم مثلا بحث معماری رومی تو ایران هست
این بنایی که مثلث بالاست و ستون های عمودی هستند مثل لوگوی یونسکو
این طرحی که ستون ها باشه و بعد یک سقف مثلثی از بیرون نمای بیرونی باشه، این ابهت و جلوه دوران روم رو یادآور میشه
این شد یک الگو، بعد از این اگر ساختمانی بسازیم مثلا شبیه ساختمان کنگره آمریکا جلوشون نگاه کنید تقریبا شبیه اینه
ولی در دوران ساخته شده آیا نیاز به نیازهای این با نیازهای ساختمانی که الان هست یکی بوده اما تکرار کرد
تا اینکه در سال ۱۹۸۷ آقای Ward Cunningham در کنفرانس uppsala مبحث پترن های برنامه نویسی را مطرح کرد که دیگه نهایت این قضیه سال ۹۴ بود کتاب مشهور design patterns elements of reusable object-oriented software این چهار نویسنده این کتاب را نوشتند Erich, Gamma, Helm Richard, Johnson Ralph, Vlissides John, Grady Booch که مشهورترین کتاب دیزاین پترن تا الان هست رو این آقایون معرفی کردند
نکته ای که هست، دیزاین پترن هایی که اینها معرفی کردند سال ۹۴ دیگه برنامه نویسی به بلوغ رسیده بود اما دیزان پترن های اونها کافی نبود و بعد از آن هم کماکان دیزاین پترن های جدیدتری هم به اونها اضافه شد
چند تا از مشهور ترین دیزاین پترن ها:
Abstract Factory Pattern
Builder Pattern
Factory Method Pattern
Prototype Pattern
Singleton Pattern
دیدند که دیزاین پترن اینقدر خوبه که فقط مختص به برنامه نویسی و طراحی الگوریتم و طراحی سیستمهای نرمافزاری نشد دیگه بعد ازین ما دیزان پترن هایی داریم برای SQL یا برای concurrency یا Security یا Distributed systems برای معماری نرم افزارها سرویسها برای خودشون های دیزاین پترن های مختلفی دارند مثل saga
از مشهورترین کتاب های دیزاین پترن کتاب Head First Design Patterns
Authors : Bert Bates, Kathy Sierra, Eric Freeman, Elisabeth Robson
Publisher : O’Reilly
این کتاب هد فرست بسیار کمدی و به صورت جوک و شیرین بحث دیزاین پترن ها رو مطرح می کنه
چطور در ذهن برنامه نویسان می نشینند
مراحل:
1- نادیده گرفتن
2- اطلاع داشتن از طراحی الگو
3- زیادی استفاده کردن از طراحی الگو
4- متعادل شدن
proxy
dofactory.com
کریستوفر اخروی
chirtopher okhravi
از سال 94 تا الان 25 تا دیزاین پترن های برنامه نویسی ساخته شده
در معماری نرم افزار دیزاین پترن های مخصوص دارد
در امنیت دیزاین پترن های جداگانه داریم
میکرو سرویی ها خودش دیزاین پترن هستند
داخل دیزاین پترن ها خودش دیزاین پترن
– دیزاین پترن ها در حوزه سخت افزار هم می توانند پیاده سازی شوند
در مصاحبه ها می پرسند singleton چیست
نقطه مقابل singlethon چیست
https://www.dofactory.com/net/design-patterns
https://refactoring.guru/design-patterns
Design Patterns & Refactoring (sourcemaking.com)
https://youtube.com/playlist?list=PLrhzvIcii6GNjpARdnO4ueTUAVR9eMBpc
https://www.youtube.com/c/ChristopherOkhravi
Introduction to Design Pattern – sharif