چارچوب نرم‌افزاری

از ویکی‌پدیا، دانشنامهٔ آزاد

چارچوب نرم‌افزار (به انگلیسی: Software framework) یک طراحی قابل استفاده برای سیستم یا زیرسیستم‌های نرم‌افزاری است.

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

چارچوب های نرم افزاری امکانات کلیدی متمایز کننده ای دارند که آنها را از کتابخانه های معمولی کد متمایز میکند:

  • وارونگی کنترل : در یک چارچوب نرم افزاری ، برخلاف یک کتابخانه کد کنترل جریان سراسر یک برنامه توسط صدا زننده صدا زده نمیشود بلکه توسط یک چارچوب نرم افزاری مدیریت میشود. این ویژگی با استفاده از روش الگویی (Template Method Pattern)  در برنامه نویسی شی گرا به دست می آید.
  • رفتار پیش فرض : رفتار پیش فرض را می توان با روشهای ثابت الگویی در یک کلاس انتزاعی ارائه داد که توسط چارچوب ارائه شده است.
  • توسعه پذیری : چارچوب نرم افزاری میتواند توسط کاربر توسعه داده شود - معمولا با بازنویسی انتخابی در برنامه نویسی شی گرا - یا برنامه نویسان میتوانند یک کد اختصاصی را برای فراهم کردن عملکرد های خاص به چارچوب اضافه کنند. این کار نیز با یک روش به دام انداختن یک کلاس فرزند که یک نمونه را در کلاس های والدین بازنویسی میکند انجام میشود.(ارث بری در برنامه نویسی شی گرا).
  • کد چارچوب غیر قابل اصلاح : کد یک چارچوب به طور کلی غیر قابل تغییر است در حالی که پیوست های پیاده سازی شده توسط کاربر میتواند باعث توسعه آن شود ، اما کد آن تغییر نمیکند.

بنیاد و پایه

طراح های چارچوب های نرم افزاری با هدف آسان کردن توسعه نرم افزاری به برنامه نویسان و طراحان نرم افزاری اجازه میدهند تا وقت خود را برای تامین نیاز های نرم افزاری خود اختصاص داده و به جزئیات استاندارد سطح پایین تر ارائه سیستم کاری نپردازند ، که نتیجه آن کاهش زمان کلی توسعه و برنامه سازی است. به عنوان مثال ، تیمی که از یک چارچوب وب برای ساخت یک وبسایت بانکی استفاده میکند میتواند تمرکز بیشتری بر روی نوشتن کد های مخصوص بانکی داشته باشد تا مکانیک های درخواست پاسخ وبسایت و یا state management.

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

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

این موضوع همچنان ادامه دارد ، اما یک دهه تجربه صنعت نشان داده است که موثرترین چارچوب ها بجای استفاده از یک چارچوب عمومی " یک حجم متناسب برای همه " که توسط یک شخص ثالث برای اهداف عمومی نوشته شده است ،چارچوب هایی هستند که از فاکتورگیری مجدد کد های مشترک یک شرکت تکاملی تشکیل شده اند.

این روند جنجالی مسئله مهمی را در مورد چارچوب ها نتیجه میدهد .ساختن یک چارچوب ظریف در مقابل چارچوبی که صرفا مشکلی را حل میکند هنوز یک مهارت است تا یک علم . "ظرافت نرم افزاری " به معنی نظم و ترتیب ، وضوح و دقت به همراه ضعف اندک (عملکرد های اضافی که بیشتر آنها توسط کاربر تعریف میشوند) است. به عنوان مثال برای چارچوب هایی که کد تولید میکنند ، ظرافت به معنای ایجاد کدی است که واضح و قابل درک برای یک برنامه نویس ( و به راحتی قابل اصلاح ) باشد ، در مقابل کدی که صرفا تصحیح میکند. مسئله ظرافت این است که چرا تعداد نسبتا کمی از چارچوب های نرم افزاری در آزمایش زمان متوقف شده اند : بهترین چارچوب ها توانسته اند به عنوان پیشرفته ترین فناوری که بر اساس آن ساخته شده اند پیشرفت کنند و تکامل بیابند ، در حین تکامل یافتن ، بسیاری از آنها قابلیت های قدیمیشان را حفظ کرده اند.

مثال ها

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

معماری

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

در یک محیط شی گرا یک چارچوب از کلاس های انتزاعی و انضمامی تشکیل شده است . مراحل ایجاد چنین چارچوبی ترکیب و طبقه بندی کلاس های موجود است (به صورت ارث بری برنامه نویسی شی گرا ). [۷]

عملکردهای لازم را میتوان با استفاده از روش الگویی پیاده سازی کرد که در آن ، نقاط منجمد به عنوان متد ثابت و نقاط داغ به عنوان متد های متغیر شناخته می شوند. متد های ثابت در کلاس های والدین رفتار پیش فرض را ارائه میدهند در حالی که متد های متغیر در هر کلاس فرزند رفتار سفارشی را ارائه میدهند.

همچنین ببینید

منابع

  1. Vlissides, J M; Linton, M A (1990), "Unidraw: a framework for building domain-specific graphical editors", ACM Transactions on Information Systems, 8 (3): 237–268, doi:10.1145/98188.98197
  2. Johnson, R E (1992), "Documenting frameworks using patterns", Proceedings of the Conference on Object Oriented Programming Systems Languages and Applications, ACM Press: 63–76
  3. Birrer, A; Eggenschwiler, T (1993), "Proceedings of the European conference on object-oriented programming", Frameworks in the financial engineering domain: an experience report, Springer-Verlag: 21–35
  4. Hill, C; DeLuca, C; Balaji, V; Suarez, M; da Silva, A (2004), "Architecture of the Earth System Modeling Framework (ESMF)", Computing in Science and Engineering, 6: 18–28, doi:10.1109/MCISE.2004.1255817
  5. Gachet, A (2003), "Software Frameworks for Developing Decision Support Systems – A New Component in the Classification of DSS Development Tools", Journal of Decision Systems, 12 (3): 271–281, doi:10.3166/jds.12.271-280
  6. Pree, W (1994), "Meta Patterns: A Means for Capturing the Essentials of Reusable Object-Oriented Design", Proceedings of the 8th European Conference on Object-Oriented Programming, Lecture Notes in Computer Science, Springer-Verlag, 821: 150–162, doi:10.1007/BFb0052181, ISBN 978-3-540-58202-1
  7. Buschmann, F (1996), Pattern-Oriented Software Architecture Volume 1: A System of Patterns. Chichester, Wiley, ISBN 978-0-471-95869-7