(به : Software framework) یک طراحی قابل استفاده برای یا زیرسیستم‌های نرم‌افزاری است.
 در یک یک است که در آن فراهم کننده عملکردهای عمومی می‌تواند به صورت انتخابی توسط کدهای نوشته شده کاربران عوض شود، در تعریفی بهتر می‌توان گفت یک فراهم کننده طراحی‌های قابل استفاده برای نرم‌افزار است. در واقع یک چهارچوب یک راه استاندارد برای ساخت و گسترش برنامه‌ها است و یک محیط با قابلیت استفاده مجدد در است به صورتی که عملکردهای خاصی از بخش‌های یک بزرگ نرم‌افزاری را آماده می‌کند تا برنامه‌نویسی و الگوریتم‌ها را آسان‌تر کند، چهارچوب‌های نرم‌افزاری ممکن است شامل برنامه‌های پشتیبانی، کامپایلرها، کتابخانه‌های کد، مجموعه ابزارها و باشد که تمام مختلف را گرد هم آورده تا امکان توسعه یک یا فراهم کند.
 چهارچوب‌های نرم‌افزاری امکانات کلیدی متمایز کننده ای دارند که آنها را از معمولی کد متمایز می‌کند:
 
 
 
 طراح‌های چهارچوب‌های نرم‌افزاری با هدف آسان کردن توسعه نرم‌افزاری به برنامه نویسان و طراحان نرم‌افزاری اجازه می‌دهند تا وقت خود را برای تأمین نیازهای نرم‌افزاری خود اختصاص داده و به جزئیات استاندارد سطح پایین‌تر ارائه سیستم کاری نپردازند، که نتیجه آن کاهش زمان کلی توسعه و برنامه سازی است. به عنوان مثال، تیمی که از یک برای ساخت یک وبسایت بانکی استفاده می‌کند می‌تواند تمرکز بیشتری بر روی نوشتن کدهای مخصوص بانکی داشته باشد تا مکانیک‌های درخواست پاسخ وبسایت یا .
 چهارچوب اغلب حجم برنامه را می‌افزاید، پدید تحت عنوان « ». به دلیل نیازهای نرم‌افزاری کاربران با توجه به درخواست مصرف‌کنندگان هر دو چهارچوب رقابتی و مکمل گاهی در یک محصول نهایی قرار می‌گیرند. به علاوه با توجه به پیچیدگی APIهای آنها زمان کاهش یافته کلی فراینده برنامه سازی ممکن است به دلیل صرف وقت اضافی برای یادگیری استفاده از چهارچوب در نظر گرفته نشود و زمان کاهش یافته حاصل نشود، در صورتی که این انتقاد زمانی مورد قبول است که برنامه‌نویس یا توسعه دهنده برای اولین بار با یک چهارچوب خاص یا جدید روبرو شود. در صورتی که این چهارچوب در کارهای بعدی استفاده نشود زمان صرف شده برای یادگیری چهارچوب می‌تواند حتی بیشتر از زمان نوشتن کد برای یک پروژه باشد. بسیاری از برنامه نویسان برای نیازهای مشترکشان کپی‌هایی را برای خود نگه می‌دارند.
 حال، هنگامی که یک چهارچوب یادگرفته می‌شود، پروژه‌های آینده می‌توانند با سرعت بیشتر و آسان‌تر کامل شوند. مفهوم یک چهارچوب، ساختن یک مجموعه متناسب با همه راه حل‌ها است و با آشنایی به آن منطقی باید افزایش یابد. هیچگونه ادعایی در مورد حجم و اندازه کد ارائه شده در محصول نهایی یا هیچ بهره‌وری مربوط و مختصر بودن وجود ندارد. استفاده از راه حل‌های کتابخانه ای لزوماً موارد اضافی و دارایی‌های بلااستفاده را به دنبال دارد، مگر اینکه نرم‌افزار یک کامپایلر اشیا باشد که یک ماژول قابل اجرا (کوچک، مشخص و با کنترل کامل) را ایجاد کند.
 این موضوع همچنان ادامه دارد، اما یک دهه تجربه صنعت نشان داده‌است که موثرترین چهارچوب‌ها بجای استفاده از یک چهارچوب عمومی " یک حجم متناسب برای همه " که توسط یک شخص ثالث برای اهداف عمومی نوشته شده‌است، چهارچوب‌هایی هستند که از فاکتورگیری مجدد کدهای مشترک یک شرکت تکاملی تشکیل شده‌اند.
 این روند جنجالی مسئله مهمی را در مورد چهارچوب‌ها نتیجه می‌دهد. ساختن یک چهارچوب ظریف در مقابل چهارچوبی که صرفاً مشکلی را حل می‌کند هنوز یک مهارت است تا یک علم. "ظرافت نرم افزاری " به معنی نظم و ترتیب، وضوح و دقت به همراه ضعف اندک (عملکردهای اضافی که بیشتر آنها توسط کاربر تعریف می‌شوند) است. به عنوان مثال برای چهارچوب‌هایی که کد تولید می‌کنند، ظرافت به معنای ایجاد کدی است که واضح و قابل درک برای یک برنامه‌نویس (و به راحتی قابل اصلاح) باشد، در مقابل کدی که صرفاً تصحیح می‌کند. مسئله ظرافت این است که چرا تعداد نسبتاً کمی از چهارچوب‌های نرم‌افزاری در آزمایش زمان متوقف شده‌اند: بهترین چهارچوب‌ها توانسته‌اند به عنوان پیشرفته‌ترین فناوری که بر اساس آن ساخته شده‌اند پیشرفت کنند و تکامل بیابند، در حین تکامل یافتن، بسیاری از آنها قابلیت‌های قدیمیشان را حفظ کرده‌اند.
 چهارچوب‌های نرم‌افزاری به‌طور معمول شامل فواید و کاربردپذیری‌های قابل توجهی برای کمک به برنامه‌های کاربر هستند، اما به‌طور کلی بر روی مشکلات خاص تمرکز می‌کنند، مثال‌هایی از چهارچوب‌ها:
 
 
 
 
 
 
 
 
 
 
 
 
 بر اساس گفته‌های Pree, چهارچوب‌های نرم‌افزاری از نقاط منجمد و نقاط داغ تشکیل شده‌اند. نقاط منجمد معماری کلی یک سیستم نرم‌افزاری را تعریف می‌کنند، یعنی همان اجزای پایه و اساسی و روابط بین آنها. این موارد در نمونه سازی از چهارچوب نرم‌افزاری بدون تغییر (منجمد) باقی می‌مانند. نقاط داغ نشان دهنده قسمت‌هایی است که برنامه نویسان با استفاده از چهارچوب کدهای مختص به خودشان را برای افزایش عملکردهای خاص به پروژه خود اضافه می‌کنند.
 در یک محیط یک چهارچوب از کلاس‌های انتزاعی و انضمامی تشکیل شده‌است. مراحل ایجاد چنین چهارچوبی ترکیب و طبقه‌بندی کلاس‌های موجود است (به صورت ارث بری برنامه‌نویسی شی گرا). 
 عملکردهای لازم را می‌توان با استفاده از روش الگویی پیاده‌سازی کرد که در آن، نقاط منجمد به عنوان متد ثابت و نقاط داغ به عنوان متدهای متغیر شناخته می‌شوند. متدهای ثابت در کلاس‌های والدین رفتار پیش فرض را ارائه می‌دهند در حالی که متدهای متغیر در هر کلاس فرزند رفتار سفارشی را ارائه می‌دهند.
{"title": "چارچوب نرم‌افزاری", "link": "https://fa.wikipedia.org//w/index.php?title=%DA%86%D8%A7%D8%B1%DA%86%D9%88%D8%A8_%D9%86%D8%B1%D9%85%E2%80%8C%D8%A7%D9%81%D8%B2%D8%A7%D8%B1%DB%8C&oldid=35010006", "language": "fa"}