مرور چند مورد از مفاهیم پیش نیاز معماری نرم افزار

این مطلب برای تکلیف معماری نرم افزار دانشگاه شهید بهشتی میباشد.Object-Oriented-Programming conceptsPolymorphismواژه ی Polymorphism متشکل از دو واژه ی poly به معنای "بسیاری" و morph به معنای "اشکال" است. و به طور کلی معنای کلمه ی Polymorphism چندریختی میباشد.چند شکلی در برنامه نویسی شی گرا یک مفاهیم مهم و کارآمد در برنامه نویسی شی گرا است که به اشیاء کلاس های مختلف اجازه می دهد تا به عنوان اشیاء یک ابر کلاس مشترک در نظر گرفته شوند.به طورکلی دونوع polymorphism در برنامه نویسی شی گرا وجود دارد :چندریختی زمان اجرا (Run-Time Polymorphism) :این نوع polymorphism در ارث بری کاربرد دارد و با Override کردن توابع میتوانیم چند تابع با نام یکسان در کلاس های مختلف داشته باشیم.چند ریختی زمان کامپایل (Compile-Time Polymorphism) :در این نوع polymorphism از مفهوم Overloading استفاده میشود و برخلاف نوع قبل که توابع با نام یکسان در کلاس های مختلف داشتیم در اینجا توابع با نام های یکسان در یک کلاس داریم که تفاوت این توابع در تعداد پارامتر های ورودی است.در نتیجه Polymorphism نگهداری کد را ساده می کند و قابلیت استفاده مجدد از کد را با اجازه دادن به ما برای نوشتن کدی که بر روی اشیاء به روشی عمومی عمل می کند، تسهیل می کند و گسترش برنامه های خود را با کلاس ها و رفتارهای جدید آسان تر می کند. این یک اصل اساسی برنامه نویسی شی گرا است و به توسعه سیستم های نرم افزاری سازگارتر و مقیاس پذیرتر کمک می کند.interfaceاز آنجا که در توسعه کد به صورت گروهی نیاز میشود که هر فردی نوع خاصی از کلاس را پیاده سازی کند و برای اینکار هر برنامه نویس برای نامگذاری کلاس و متغیر خود از معیار های خودش استفاده میکند اینکار باعث ناخوانایی کد میشود و برای جلوگیری از این مشکل از مفهومی به نام interface در برنامه نویسی شی گرا استفاده میشود که ناخوانایی کد را کاهش دهد.یک interface درست مانند یک کلاس است و رفتاری را که یک کلاس باید اجرا کند را مشخص می کند و امکان تعریف طرح های اولیه برای کلاس ها را فراهم می کنند و راهی برای اعلام مجموعه ای از متدها ارائه می دهند که باید توسط هر کلاسی که به interface مربوط است پیاده سازی شود. interface ها نقش مهمی در دستیابی به انتزاع، قابلیت استفاده مجدد کد در کلاس های مختلف دارند. کلاسی که یک اینترفیس را پیاده سازی می کند باید پیاده سازی های مشخصی را برای تمام روش های تعریف شده در رابط ارائه دهد. این تضمین می‌کند که کلاس‌هایی که رابط را پیاده‌سازی می‌کنند، بدون در نظر گرفتن اینکه این رفتارها واقعاً چگونه پیاده‌سازی می‌شوند، مجموعه‌ای از رفتارها دارند.به طور خلاصه، یک رابط در برنامه نویسی شی گرا ساختاری است که مجموعه‌ای از روش‌ها را تعریف می‌کند که کلاس‌ها باید پیاده‌سازی کنند، در نتیجه ثبات و قابلیت همکاری بین بخش‌های مختلف کد را تضمین می‌کند.Fundamentals of software engineering concepts methodologyمفهوم methodology به فرآیندهای ساختار یافته درگیر هنگام کار بر روی یک پروژه اشاره دارد همچنین توسعه نرم‌افزار بستری را برای توسعه‌دهندگان فراهم می‌کند تا به‌عنوان یک تیم کارآمدتر با هم کار کنند. ارتباطات را رسمی می کند و نحوه اشتراک گذاری اطلاعات در تیم را تعیین می کند و متدولوژی ها چارچوبی برای برنامه ریزی، ساختاردهی و کنترل فرآیند توسعه یک سیستم اطلاعاتی فراهم می کنند.چندین متدولوژی توسعه نرم افزار محبوب وجود دارد که هر کدام مجموعه ای از اصول و شیوه های خاص خود را دارند. برخی از متدولوژی های رایج عبارتند از:Waterfall Modelاین متدولوژی یک رویکرد خطی و متوالی است که در آن هر مرحله باید قبل از شروع مرحله بعدی تکمیل شود. مدیریت آن آسان است، اما اگر بعد از شروع پروژه تغییراتی ایجاد شود، کمتر انعطاف پذیر است.Agileرویکرد Agile یک رویکرد تکراری و افزایشی برای توسعه نرم افزار است و هم چنین همکاری، انعطاف پذیری، بازخورد مشتری و بهبود مستمر را ترویج می کند. متدولوژی‌های Agile، مانند اسکرام ، بر ارائه قطعات کوچک و کارآمد نرم‌افزار در چرخه‌های کوتاه تکرار تمرکز دارند.RAD (Rapid Application Development)رویکرد RAD بر توسعه و تکرار سریع، با استفاده از حداقل برنامه ریزی و نمونه سازی ممکن تاکید دارد و به ویژه برای پروژه های کوچک تا متوسط با نیازهای کاملاً مشخص مفید است.DevOpsرویکرد DevOps بیشتر یک مجموعه ای از اقدامات است که توسعه نرم افزار (Dev) و عملیات فناوری اطلاعات (Ops) را با هم ترکیب می کند. هدف آن کوتاه کردن چرخه عمر توسعه و ارائه نرم افزار با کیفیت بالا با ارتقای همکاری و ارتباط بین این دو حوزه کاربردی است.جمع بندی : انتخاب رویکرد متدولوژی به نیازهای پروژه خاص، تخصص تیم و ماهیت نرم افزار در حال توسعه بستگی دارد. بسیاری از تیم‌های توسعه نرم‌افزار مدرن نیز رویکردهای ترکیبی را اتخاذ می‌کنند و عناصری از متدولوژی‌های مختلف را ترکیب می‌کنند تا به بهترین نحو با نیازهای خود مطابقت داشته باشند.Software Analysis/Designتجزیه و تحلیل و طراحی نرم افزار شامل تمام فعالیت هایی است که به تبدیل مشخصات نیاز به پیاده سازی کمک می کند. مشخصات مورد نیاز تمام انتظارات کاربردی و غیر کاربردی از نرم افزار را مشخص می کند. این مشخصات مورد نیاز به شکل اسناد قابل خواندن و قابل فهم توسط انسان است که کامپیوتر هیچ ارتباطی با آنها ندارد.تجزیه و تحلیل و طراحی نرم افزار مرحله میانی است که به نیازهای قابل خواندن برای انسان کمک می کند تا به کد واقعی تبدیل شوند.در ادامه به معرفی چند ابزار برای تجزیه و تحلیل و طراحی نرم افزار میپردازیم :Data Flow Diagramنمودار جریان داده، نمایش گرافیکی جریان داده در یک سیستم اطلاعاتی است. این می تواند جریان داده های ورودی، جریان داده های خروجی و داده های ذخیره شده را به تصویر بکشد. DFD هیچ چیزی در مورد نحوه جریان داده از طریق سیستم ذکر نکرده است.تفاوت برجسته ای بین DFD و Flowchart وجود دارد. فلوچارت جریان کنترل را در ماژول های برنامه نشان می دهد. DFD ها جریان داده ها را در سیستم در سطوح مختلف به تصویر می کشند و DFD حاوی هیچ عنصر کنترل یا شاخه ای نیست.Structure Chartsنمودار ساختار نموداری است که از نمودار جریان داده به دست آمده است. این سیستم را با جزئیات بیشتری نسبت به DFD نشان می دهد. کل سیستم را به پایین‌ترین ماژول‌های کاربردی تقسیم می‌کند و توابع و عملکردهای فرعی هر ماژول سیستم را با جزئیات بیشتری نسبت به DFD توصیف می‌کند.نمودار ساختار ، ساختار سلسله مراتبی ماژول ها را نشان می دهد. در هر لایه یک کار خاص انجام می شود.HIPO Diagramنمودار HIPO (Hierarchical Input Process Output) ترکیبی از دو روش سازماندهی شده برای تجزیه و تحلیل سیستم و ارائه ابزار مستندسازی است. مدل HIPO توسط IBM در سال 1970 توسعه یافت.نمودار HIPO نشان دهنده سلسله مراتب ماژول ها در سیستم نرم افزاری است. تحلیلگر از نمودار HIPO برای به دست آوردن نمای سطح بالا از عملکردهای سیستم استفاده می کند. توابع را به صورت سلسله مراتبی به توابع فرعی تجزیه می کند. این توابع انجام شده توسط سیستم را نشان می دهد.نمودارهای HIPO برای اهداف مستندسازی خوب هستند. نمایش گرافیکی آنها، دستیابی به ایده تصویری از ساختار سیستم را برای طراحان و مدیران آسان تر می کند.Pseudo-Codeشبه کد ها بیشتر نزدیک به زبان برنامه نویسی نوشته می شوند. ممکن است به عنوان زبان برنامه نویسی تقویت شده، پر از نظرات و توضیحات در نظر گرفته شود.کدهای کاذب از اعلان متغیر اجتناب می کنند اما آنها با استفاده از ساختارهای واقعی زبان برنامه نویسی مانند C، Fortran، Pascal و غیره نوشته می شوند.شبه کد حاوی جزئیات برنامه نویسی بیشتری نسبت به انگلیسی ساختاریافته است. این روشی را برای انجام کار ارائه می دهد، گویی یک کامپیوتر در حال اجرای کد است.Decision Tablesیک جدول تصمیم شرایط و اقدامات مربوطه را که باید برای رسیدگی به آنها انجام شود، در قالب جدولی ساختاریافته نشان می دهد.همچنین یک ابزار قدرتمند برای رفع اشکال و جلوگیری از خطا است. این به گروه بندی اطلاعات مشابه در یک جدول کمک می کند و سپس با ترکیب جداول تصمیم گیری آسان و راحت را ارائه می دهد.UML notationمفهوم UML یا Unified Modeling Language یک زبان مدلسازی استاندارد در زمینه مهندسی نرم افزار است. راهی برای تجسم طراحی سیستم، درک اجزای آن و برقراری ارتباط با ذینفعان فراهم می کند. UML از انواع مختلفی از نمودارها برای نمایش جنبه های مختلف یک سیستم استفاده می کند. در ادامه برخی از نمودارهای UML رایج در مهندسی نرم افزار را به اختصار توضیح میدهیم :Class Diagramsنمودارهای کلاس ساختار یک سیستم را با نشان دادن کلاس های موجود در سیستم، ویژگی ها، روش ها و روابط بین آنها به تصویر می کشند.Object Diagramsمفهوم Object Diagrams نمونه هایی از کلاس ها و روابط آنها را در یک نقطه خاص از زمان نشان می دهند و یک عکس از سیستم ارائه می دهند.Use Case Diagrams مفهوم Use Case Diagrams عملکرد یک سیستم را از دیدگاه یک کاربر خارجی نشان می دهد. آنها موارد مختلف استفاده و ذینفعان (کاربران یا سیستم های خارجی) و نحوه تعامل آنها را نشان می دهند.Sequence Diagramsنمودار Sequence Diagrams تعامل بین اشیا یا اجزای یک سیستم را در طول زمان نشان می دهد. آنها ترتیب رد و بدل شدن پیام ها را نشان می دهند و به تجسم جریان فرآیندها کمک می کنند.Activity Diagramsنمودار Activity Diagrams جنبه های پویا یک سیستم را با مدل سازی جریان فعالیت ها توصیف می کند. آنها برای نمایش فرآیندهای تجاری یا گردش کار در سیستم مفید هستند.Component Diagramsنمودار Component Diagrams سازماندهی و وابستگی بین اجزای یک سیستم را نشان می دهد. کامپوننت ها می توانند فیزیکی مانند فایل ها یا فایل های اجرایی یا منطقی مانند ماژول های نرم افزاری باشند.در نتیجه نمودارهای UML به عنوان یک زبان مشترک برای توسعه دهندگان، تحلیلگران، طراحان و سایر ذینفعان درگیر در توسعه نرم افزار عمل می کنند. آنها ارتباطات را بهبود می بخشند، درک را بهبود می بخشند و طراحی، تجزیه و تحلیل و مستندسازی سیستم های نرم افزاری را تسهیل می کنند. Basics/Fundamentals of Design Patternsدر مهندسی نرم‌افزار، الگوی طراحی نرم‌افزار یک راه‌حل کلی و قابل استفاده مجدد برای چگونگی حل یک مشکل رایج هنگام طراحی یک برنامه یا سیستم است. بر خلاف یک کتابخانه یا چارچوب، که می‌تواند فوراً درج و استفاده شود، یک الگوی طراحی بیشتر یک الگو برای نزدیک شدن به مشکل در دست است.استفاده از این الگوها عمل خوبی در نظر گرفته می شود، زیرا طراحی راه حل کاملاً آزمایش شده و آزمایش شده است که منجر به خوانایی بیشتر کد نهایی می شود. الگوهای طراحی اغلب برای زبان های OOP مانند جاوا ایجاد شده و مورد استفاده قرار می گیرند.همچنین الگوهای طراحی مختص یک مشکل یا زمینه خاص نیستند بلکه می توانند با موقعیت های مختلف سازگار شوند.در ادامه 3 مورد از الگوها را بررسی میکنیم :Singleton Patternاطمینان حاصل می کند که یک کلاس فقط یک نمونه دارد و یک نقطه دسترسی گلوبال به آن نمونه را فراهم می کند. این زمانی مفید است که دقیقاً یک شیء برای هماهنگ کردن اقدامات در سراسر سیستم مورد نیاز باشد.Factory Method Patternیک رابط (interface) برای ایجاد یک شی تعریف می کند، اما به زیر کلاس ها اجازه می دهد نوع اشیایی که ایجاد می شوند را تغییر دهند. هم چنین به یک کلاس اجازه می دهد تا مسئولیت نمونه سازی اشیاء خود را به زیر کلاس های خود محول کند.Abstract Factory Patternیک رابط (interface) برای ایجاد خانواده های اشیاء مرتبط یا وابسته بدون مشخص کردن کلاس های مشخص آنها ارائه می دهد. اغلب زمانی استفاده می شود که یک سیستم باید مستقل از نحوه ایجاد، ترکیب و نمایش اشیاء آن باشد.Web development and enterprise software developmentوب سایت سازمانی گروهی از صفحات وب با یک نام دامنه است که نشان دهنده شرکت است. این وب سایت به ما امکان می دهد حضور آنلاین داشته باشیم و دامنه مخاطبان خود را افزایش دهیم.چیزی که وب سایت های سازمانی را از وب سایت های معمولی متمایز می کند این است که برای ساخت به ویژگی ها و ابزارهای مختلفی نیاز دارد و دارای یک سیستم مدیریت محتوای منحصر به فرد است که معمولاً به عنوان مدیریت محتوای سازمانی (ECM) شناخته می شود.برنامه های کاربردی وب سازمانی برنامه های کاربردی مبتنی بر وب هستند که به ما امکان می دهند نیازها و عملیات داخلی و خارجی شرکت خود را مدیریت کنیم. یک برنامه وب ما را به سمت تحول دیجیتالی هدایت می کند و به رفع نیازهای مدرن تجارت در این دنیای دیجیتال کمک می کند. توسعه نرم‌افزار سازمانی زمانی وارد عمل می‌شود که فقط به یک نرم‌افزار یا برنامه کاربردی برای استفاده داخلی نیاز داریم. معمولاً نرم‌افزار سازمانی روبه‌روی مصرف‌کننده نیست و به فعالیت‌های روزانه یک شرکت مانند مدیریت سوابق، حسابداری، اتوماسیون، مدیریت پروژه و سایر عملکردها کمک می‌کند.در حال حاضر، اندازه یک نرم افزار سازمانی به اندازه یک شرکت و نیازهایی که باید ارائه کند بستگی دارد. می‌توان نرم‌افزار خاصی داشت که فقط یک ابزار اتوماسیون فرآیند است یا یک نرم‌افزار بزرگ که به هر چیزی که کسب‌وکار نیاز دارد نگاه می‌کند. تفاوت بین وب سایت سازمانی، برنامه وب و نرم افزاریک وب سایت سازمانی متشکل از صفحات وب است که به شرکت اجازه می دهد قابلیت مشاهده و دسترسی آنلاین را حفظ کند. برنامه وب یک برنامه کاربردی کامل است که عملیات داخلی و خارجی را انجام می دهد. از طرف دیگر یک نرم افزار عمدتاً به فرآیندهای داخلی یک سازمان نگاه می کند.از آنجایی که برنامه‌ها و نرم‌افزارهای وب شباهت‌هایی پیدا می‌کنند و فرآیند توسعه مشابهی دارند، بسته به ویژگی‌هایی که ارائه می‌دهند، ممکن است تحت یک عنوان نامیده شوند. با این حال، یک وب سایت چیز دیگری است.