هارپ چیست و اهداف این پروژه چه می باشد؟
دی ۴, ۱۳۹۶UX یا طراحی تجربه کاربری چیست وچه مفاهیمی را در بر میگیرد؟
دی ۴, ۱۳۹۶در علوم رایانه، فریم ورک یا چارچوب نرم افزاری (Software Framework) ، یک بستر انتزاعی است که از طریق آن، قابلیتهای عمومی یک نرم افزار می توانند با افزودن کدهای نوشته شده توسط کاربر، به صورت انتخابی تغییر داده شده و در نتیجه، یک نرم افزار با کاربرد خاص ایجاد شود.
چارچوب نرم افزاری، یک مسیر استاندارد برای ساخت و توسعه برنامه های کاربردی را فراهم می سازد. چارچوب نرم افزاری، یک محیط نرم افزاری جامع و قابل استفاده مجدد است که عملیات خاصی را به عنوان بخشی از یک بستر نرم افزاری بزرگتر به منظور تسهیل در توسعه برنامه های کاربردی، محصولات و راهکارهای نرم افزاری بر عهده دارد. چارچوب های نرم افزاری می توانند شامل برنامه های پشتیبانی، کامپایلر ها، کتابخانه ها، ابزار و رابط های برنامه نویسی کاربردی (APIs) باشد که با قرار دادن تمام اجزای مختلف نرم افزار در کنار هم، توسعه یک پروژه یا سیستم را امکانپذیر می سازند.
فریم ورک ها دارای ویژگی های کلیدی متمایز زیر هستند که آنها را از کتابخانه های عادی مجزا می سازد:
- معکوس کردن کنترل : در یک چارچوب نرم افزاری بر خلاف کتابخانه ها یا برنامه های کاربردی استاندارد، جریان کنترل کل برنامه توسط برنامه فراخوان، دیکته نمی شود، بلکه این کار توسط چارچوب انجام می گیرد.
- توسعه پذیری : معمولاً یک کاربر می تواند با بدست گرفتن کنترل چارچوب نرم افزاری، آن را گسترش دهد؛ یا برنامه نویسان می توانند یک کد تخصصی را برای ایجاد قابلیت های ویژه به آن اضافه کنند.
- کد چارچوب غیر قابل تغییر : در حالت کلی علیرغم پذیرش توسعه پذیری چارچوب توسط کاربر، انتظار نمی رود که کد چارچوب، اصلاح شود. به عبارت دیگر، کاربران مجاز به گسترش چارچوب نرم افزاری هستند، اما نباید کد آن را تغییر دهند.
مبانی
هدف طراحان فریم ورک های نرم افزاری تسهیل در توسعه نرم افزار با اجازه دادن به طراحان و برنامه نویسان برای صرف زمان خود جهت بررسی نیازهای نرم افزاری به جای پرداختن به جزئیات سطح پایین متعارف در یک سیستم کاری و در نتیجه کاهش مدت زمان کلی توسعه نرم افزار می باشد. به عنوان مثال، یک تیم که از یک چارچوب وب برای ایجاد یک وب سایت بانکداری استفاده می کند می تواند به جای رسیدگی به درخواستها و مدیریت وضعیت، بر نوشتن کد خاص مربوط به بانکداری تمرکز کند.
فریم ورک ها غالبا حجم برنامه ها را افزایش می دهند که پدیده ” نفوذ کد” نام دارد. توجه به نیاز برنامه هایی که طبق تقاضای مشتریان نوشته می شوند هر دو چارچوب رقابتی و تکمیلی گاهی اوقات در یک محصول قرار می گیرند. به علاوه، با توجه به پیچیدگی API آنها کاهش مد نظر در زمان توسعه کلی ممکن است به دلیل زمان اضافی که صرف یادگیری نحوه استفاده از چارچوب می شود محقق نشود؛ این مشکل، زمانی که یک چارچوب ویژه یا جدید برای اولین بار توسط تیم کاری توسعه داده می شود وجود دارد. اگر چنین چارچوبی در برنامه های بعدی مورد استفاده قرار نگیرد، ارزش وقتی که صرف یادگیری چارچوب شده است می تواند بیشتر از کد نوشته شده توسط تیم پروژه باشد؛ بسیاری از برنامه نویسان، برای رفع نیازهای مشترک، نسخه هایی از کدهای تکراری تهیه می کنند.
البته هنگامی که فریم ورک یاد گرفته شود، پروژه های آتی می توانند سریع تر و آسان تر انجام شوند؛ مفهوم چارچوب نرم افزاری، ایجاد یک مجموعه راهکار جامع برای انواع مشکلات است و توسعه کد آن باید دلیل منطقی داشته باشد. البته چنین ادعاهایی نه در مورد حجم کد نهایی محصول خروجی وجود دارد و نه در مورد فشردگی و کارایی نسبی آن.
استفاده از یک راهکار کتابخانه ای، افزودن ویژگی های اضافه و نامربوط را اجتنابناپذیر می سازد، مگر آنکه نرم افزار، یک ارتباط دهنده شیء به کامپایلر باشد که یک ماژول اجرایی فشرده، (کوچک، کاملاً کنترل شده و مشخص) را ایجاد می کند.
این مشکل کماکان ادامه دارد، اما تجربه بیش از یک دهه از صنعت نشان داده است که مؤثرترین چارچوب ها آنهایی هستند که به جای آنکه از اشخاص ثالث برای توسعه یک چارچوب جامع استفاده کنند، با بازسازی کدهای مشترک تجاری، توسعه داده شوند. یک مثال از این دست می تواند نحوه توسعه رابط کاربری در یک بسته نرم افزاری همچون مجموعه آفیس جهت ارتقاء ویژگی های معمول ظاهری، احساسی و به اشتراک گذاری داده ها باشد، درحالی که توسعه برنامه های پیش از آن به شکل یک بسته نرم افزاری یکپارچه فشرده تر و کوچکتر بود؛ مجموعه جدیدتر یا تکامل یافته می تواند محصولی باشد که ابزارهای یکپارچه و رابطهای کاربری را به اشتراک بگذارد.
این اختلاف نظر، یک مشکل مهم را در مورد چارچوب ها مطرح کرده است. ایجاد یک چارچوب ظریف، در مقابل چارچوبی که صرفا یک مشکل را حل می کند، هنوز یک هنر بشمار می رود نه یک علم. “ظرافت نرم افزاری” بیانگر وضوح، اختصار و کم بودن اتلاف (عملکردهای اضافی یا نامربوط که بیشتر آنها توسط کاربر تعریف شده اند) است. بطور مثال، برای چارچوب هایی که تولید کد انجام می دهند، “ظرافت” به معنای ایجاد یک کد تمیز و قابل درک برای یک برنامه نویس منطقی و زیرک (و لذا به آسانی قابل تغییر است) می باشد، نه فقط چارچوبی که صرفاً کد درست تولید کند.
به دلیل مشکل ظرافت است که تعداد کمی از چارچوب های نرم افزاری، در آزمون زمان قبول شده اند: بهترین چارچوب ها قادر بوده اند همزان با پیشرفت تکنولوژی زیر بنایی خود، به زیبایی رشد کنند. در بسیاری از این بسته های نرم افزاری حتی پس از تکامل، روش های قدیمی همچنان در کنار روش های جدیدتر حفظ شده اند و لذا قابلیت های قبلی خود را حفظ می کنند که منجر به افزایش حجم نرم افزار خواهد شد.
مثال:
اگرچه چارچوب های نرم افزاری عموماً شامل حجم قابل توجهی از کدهای آماده سازی و برنامه های کاربردی برای کمک به برنامه های خود راه انداز هستند، اما بطور کلی بر حوزه های خاصی مانند موارد زیر نیز تمرکز دارند:
- نقاشی هنری، آهنگ سازی و CAD مکانیک
- برنامه های مدل سازی مالی
- برنامه های مدلسازی سیستم زمین
- سیستم های پشتیبانی تصمیم گیری
- پخش و انتشار رسانه
- فریم ورک Ajax / JavaScript
- فریم ورک وب
- میان افزار
- فریم ورک کاکتوس – محاسبات علمی با کارایی بالا
- فریم ورک کاربردی – برنامه های عمومی GUI
- فریم ورک معماری تجاری
- فریم ورک توسعه برنامه اوراکل
معماری فریم ورک
طبق نظر پری، فریم ورک های نرم افزاری شامل نواحی منجمد و نقاط داغ هستند. نواحی منجمد، معماری کلی یک سیستم نرم افزاری یعنی اجزای اساسی آن و روابط بین آنها را تعریف می کنند. این نواحی در تمام نمونه های چارچوب برنامه، بدون تغییر (یخ زده) باقی می مانند. نواحی داغ نشان دهنده بخش هایی هستند که برنامه نویسان استفاده کننده از چارچوب، کد خود را اضافه می کنند تا قابلیت های خاصی را به پروژه خود بیافزایند.
در یک محیط شیء گرا، چارچوب متشکل از کلاس های انتزاعی و کلاس های به هم پیوسته است . نمونه سازی چنین چارچوبی شامل اتصال کلاس های موجود و دسته بندی آن ها می شود.
هنگام ایجاد یک سیستم نرم افزاری پیوسته توسط یک چارچوب نرم افزاری، توسعه دهندگان از نواحی داغ با توجه به نیازهای خاص و الزامات سیستم استفاده می کنند. چارچوب نرم افزار مبتنی بر اصل هالیوود است: “با ما تماس نگیرید، ما با شما تماس خواهیم گرفت.” این بدان معنی است که کلاسهای تعریف شده توسط کاربر (همچون زیر کلاسهای جدید) پیامها را از کلاسهای چارچوب که از قبل تعریف شده اند دریافت می کنند. توسعه دهندگان معمولاً این کار را با اجرای ابرکلاس های انتزاعی انجام می دهند.