کتابخانه در برنامه نویسی چیست؟ — مفهوم و کاربرد Library به زبان ساده
واژه «کتابخانه» (Library) در برنامه نویسی بسیار پرکاربرد است و هر گاه سخن از برنامه نویسی به میان میآید، اصطلاح کتابخانه هم شنیده میشود. اما ممکن است تا کنون تعریف دقیقی از چیستی کتابخانه در ذهن وجود نداشته باشد. کتابخانه یکی از مفاهیم و اجزای بسیار مهم در برنامه نویسی به حساب میآید و شناخت دقیق آن برای هر فرد فعال در حوزه برنامه نویسی ضرورت دارد. میتوان به صورت کلی گفت که کتابخانه در برنامه نویسی مجموعهای از کدهای از قبل نوشته شده است که برنامه نویسان برای بهینهسازی کدهای خود از آنها استفاده میکنند. در مقاله «کتابخانه در برنامه نویسی چیست»، علاوه بر شرح چیستی کتابخانه در برنامه نویسی به برخی از سوالات مهم پیرامون آن و همچنین به انواع کتابخانه، کاربردها، مزایا و معایب آن و سایر موارد نیز پرداخته شده است.
کتابخانه چیست؟
در علم محاسبات، کتابخانه مجموعهای از اشیای ذخیره شده مشابه است و هر زمان که نیاز باشد میتوان از آنها در برنامه استفاده کرد. اغلب، برنامههایی به شکل کد منبع (Source Code) یا کد شی (Object Code)، فایل دادهها، اسکریپتها (Script)، قالبها (Template)، فونتها (Font) و مخازن ذخیرهسازی فیزیکی را کتابخانه مینامند. استفاده از کتابخانه در برنامه نویسی باعث سهولت کدنویسی و جلوگیری از هدر رفتن زمان میشود. «Library» دارای چهار نوع اصلی است که در ادامه معرفی میشوند:
- کتابخانه در برنامه (Program Library): این نوع Library معمولاً مجموعهای از برنامههای از قبل کامپایل شده (Precompiled) و قابل استفاده مجدد است که یک برنامه نویس میتواند هنگام نوشتن کدها، آنها را فراخوانی کند تا نیازی به نوشتن مجددشان وجود نداشته باشد. «کتابخانه پیوند پویا» (Dynamic Link Library | DLL) یکی از انواع کتابخانه در برنامه به حساب میآید. نوع دیگری از کتابخانه در برنامه، کتابخانه کلاس (Class) است که روالهای (Routine) ذخیره شده در آن تعاریف کلاس در برنامه نویسی شی گرا (Object Oriented Programming | OOP) هستند. مؤلفههای رابط گرافیکی کاربر (Graphical User Interface | GUI) از جمله «Scroll Bar» (نوار مرور)، دکمهها (Button) و روالهای پنجرهای (Windowing Routine) همگی در یک کتابخانه کلاس ذخیره میشوند.
- کتابخانه ذخیره سازی (Storage Library): این نوع از کتابخانه مجموعهای از مخازن ذخیرهسازی فیزیکی رسانهها از جمله نوارها (tape) و دیسکها (disk) همراه با راه دسترسی به آنها هستند. برای مثال این کتابخانه حاوی کارتریجهای نوار (Tape Cartridge) و دارای ساز و کاری است که آنها را به داخل و خارج از درایوهایی منتقل میکند که محتوای آنها خوانده یا بهروزرسانی میشوند.
- کتابخانه داده (Data Library): به محلی در مرکز داده (Data Center) کتابخانه داده میگویند که رسانههای به دست آمده در آن مکان ذخیره میشوند. مرکز داده یک مکان متمرکز است که سیستمها و تجهیزات کامپیوتری را در خود جای میدهد. گاهی اوقات ارائه دهندگان خدمات آنلاین (Online Service Provider) از دایرکتوری (شاخهای) روی سرور استفاده میکنند که حاوی فایلهایی برای دانلود به عنوان کتابخانه داده هستند.
- کتابخانه مجازی (Virtual Library): این نوع از کتابخانهها، نسخه ساده و آنلاین کتابخانههای سنتی به حساب میآیند. کتابها و مطالب مورد نیاز برای استفاده عموم در وب قرار دارند و هم به صورت آنلاین و هم دانلود شده میتوان از آنها استفاده کرد.
بخش بعدی مقاله به بررسی سوال کتابخانه در برنامه نویسی چیست اختصاص داده شده است.
کتابخانه در برنامه نویسی چیست ؟
کتابخانه در برنامه نویسی مجموعه کدهایی از قبل نوشته شده گفته میشود. کتابخانه به بستهبندی توابعی کمک میکند که در یک فایل باهم در ارتباط هستند و سازماندهی و دسترسی به این توابع از طریق کتابخانه آسانتر میشود. در دنیای برنامه نویسی و رو به پیشرفت امروزی، هر روز تعداد بسیاری برنامه نوشته میشوند و هر لحظه تعداد کدهای برنامه به صورت نمایی در حال افزایش است. کتابخانه در برنامه نویسی به جهت مدیریت چندین هزار و حتی میلیونها خط از کدها مورد استفاده قرار میگیرد.
به عنوان مثال، در زبان برنامه نویسی C تعدادی کتابخانه داخلی وجود دارند که بر اساس عملکردشان نامگذاری شدهاند. از جمله آنها میتوان به «math.h» ،«string.h» ،«stdio.h» و سایر موارد اشاره کرد. همچنین، کتابخانه در برنامه نویسی مجموعهای از پیادهسازی رفتارها است که بر اساس یک زبان برنامه نویسی نوشته میشوند. این نوع از کتابخانهها دارای یک رابط کاربری مناسب برای فراخوانی هر یک از رفتارها هستند. برای مثال افرادی که در سطح بالا (Higher Level) برنامه نویسی انجام میدهند، میتوانند به جای اجرای مکرر برخی از پیادهسازیها از فراخوانی کتابخانههای آنها استفاده کنند.
به علاوه، کتابخانه در برنامه نویسی برای استفاده مجدد از رفتارها توسط چندین برنامه مستقل ارائه شده است. یک برنامه، رفتار ارائه شده توسط کتابخانه را به وسیله زبان برنامه نویسی نشان میدهد. برای مثال در یک زبان دستوری مانند C، رفتار در کتابخانه با استفاده از روش فراخوانی تابع معمولی در C نمایان میشود. چیزی که رفتار Library در برنامه نویسی را از رفتار تابع معمولی در کدها متمایز میکند، نحوه سازماندهی کدهای آنها در سیستم است. در بخش بعدی مقاله به بررسی علت استفاده از کتابخانه در برنامه نویسی پرداخته میشود.
علت استفاده از کتابخانه در برنامه نویسی چیست ؟
همه روزه مسائل پیچیده و سخت بسیاری پیش روی یک برنامه نویس قرار دارند. برای مثال میتوان مهندس نرم افزاری را در نظر گرفت که قصد طراحی وب سایتی را با انواع وظایف گوناگون دارد. مدیر وب سایت بر حسب نیاز، متنهایی را از وب سایت دریافت و آنها را به فهرست وظایف در حال اجرای برنامه نویسان اضافه میکند. برای مثال، چند نمونه از این وظایف در ادامه نشان داده شدهاند:
- BUY GROCERIES (خرید مواد غذایی)
- PAY Credit CARD BILLS (پرداخت قبضهای کارت اعتباری)
- DO HomeWork (انجام تکالیف)
فهرست بالا مناسب به نظر میرسد؛ اما فرض بر این است که برنامه به طور خودکار فهرست وظایف را ایجاد و سازماندهی کند تا خواندن آنها برای کاربران آسان باشد. برای انجام چنین وظایفی به نظر میرسد که نیاز است کدهای زیادی ایجاد و توسعه پیدا کنند. با توجه به این که هدف برنامه، ساده کردن فهرستی از وظایفی است که کاربران و برنامه نویسان باید انجام دهند، این روش معقول و ایدهآلی نیست.
کتابخانههایی وجود دارند که به واسطه آنها دیگر نیازی نیست از کدنویسیهای طولانی استفاده شود و این نوع از عملکردها را به صورت آماده ارائه میدهند. برای مثال، بسیاری از زبانهای برنامه نویسی مانند پایتون (Python) دارای کتابخانههای داخلی هستند که ویرایش و قالببندی (Format) رشتهها (String) را انجام میدهند. در نام کتابخانهها معمولاً هر کلمه با حرف بزرگ شروع میشود و بقیه حروف آن کوچک هستند. در زمان استفاده از کتابخانه دیگر نیازی به نوشتن کد وجود ندارد و به جای آن فقط توابع کتابخانهها فراخوانی میشوند. مانند کتابخانههای داخلی پایتون که بسیاری از وظایف مهم و کاربردی در برنامه نویسی را انجام میدهند. بنابراین زمانی که کتابخانه در برنامه نویسی استفاده میشود، یعنی مجموعهای از توابع پیچیده همراه با هزاران خط از کدها وجود دارند که فقط به وسیله یک یا دو خط کد برای انجام وظایف مورد نظر بهینهسازی شدهاند. در بخش بعدی مقاله، روش استفاده از Library در برنامه نویسی آموزش داده شده است.
چگونه از کتابخانه در برنامه نویسی استفاده میشود؟
برخی از کتابخانهها با زبان برنامه نویسی در حال استفاده برنامه ساخته میشوند، مانند مثالی که در بخش فوق ارائه شد. اما بیشتر کتابخانههایی که امروزه مورد استفاده قرار میگیرند از قبل ساخته شدهاند و در ابتدای برنامه و قبل از استفاده از آنها وارد (Import) برنامه میشوند.
برخی از کتابخانههای معروف و محبوب در زبان پایتون شامل Pandas ،Plotly ،Matplotlib و سایر موارد هستند که به سادگی در کدهای برنامه وارد و استفاده میشوند. برای استفاده از کتابخانه در پایتون به صورت زیر میتوان آن را وارد برنامه کرد:
import pandas
اگر در زبان پایتون کتابخانهای برای اولین بار در حال استفاده باشد، باید قبل از وارد کردن آن به وسیله «import»، این کتابخانه روی سیستم نصب شود. برای نصب کتابخانهها در پایتون میتوان با استفاده از یک جستجوی ساده روش نصب کتابخانه مورد نظر را یافت. اما معروفترین روش نصبی که برای بیشتر کتابخانهها وجود دارد استفاده از «نصب کننده بسته پایتون» (Python Install Package | Pip) در خط فرمان (Command Prompt) است. برای مثال، کتابخانه «Pandas» با استفاده از «pip» به صورت زیر نصب میشود:
pip install pandas
- مقاله پیشنهادی: نصب PIP پایتون بر روی ویندوز، مک و لینوکس — از صفر تا صد
اکنون پس از نصب کتابخانه Pandas در برنامه مورد نظر، برنامه نویس به این کتابخانه و توابع آن دسترسی دارد. اما ممکن است کمی پیچیدگی در استفاده از کتابخانه در برنامه نویسی نیز وجود داشته باشد. هنگام وارد کردن هر کتابخانه در برنامه، تعدادی قوانین خاص برای روش نوشتن کتابخانه وجود دارند که باید رعایت شوند. همچنین میتوان کتابخانه را برای مرتب و تمیزتر شدن کدها با روش خاصی به برنامه وارد کرد و برای مثال نام مستعار کوتاه شدهای را برای استفاده از کتابخانه در کدها انتخاب کرد. برای مثال، وارد کردن کتابخانه Pandas به برنامه معمولاً با استفاده از نام مستعار آن یعنی «pd» انجام میشود:
import pandas as pd
اگر برنامه نویس قصد داشته باشد که فقط یک تابع خاص را از کتابخانهای وارد برنامه کند، نوع وارد کردن کتابخانه به همراه تابع خاص تغییر پیدا میکند. برای مثال کتابخانه Pandas در پایتون، دارای تابعی برای خواندن فایلهای اِکسل (Excel) به نام «read_excel» است، اگر برنامه فقط همین تابع را نیاز داشته باشد و از توابع دیگر کتابخانه Pandas استفاده نکند، میتوان با وارد کردن همین تابع به صورت صریح از کتابخانه استفاده کرد و مقدار کدهای نوشته شده را کاهش داد، روش نوشتن توابع Library در برنامه نویسی به صورت زیر است:
from pandas import read_excel
بخش بعدی مقاله به کاربردها و مثالهایی از کتابخانههای نوشته شده اختصاص داده شده است.
کاربردها و مثالهایی از کتابخانههای آماده پایتون
برخی از زبانهای برنامه نویسی دارای کتابخانههای بسیاری هستند و عملکرد اصلی آنها با استفاده از کتابخانهها انجام میشود. پایتون یکی از زبانهای برنامه نویسی به حساب میآید که بیشترین کتابخانههای از پیش نوشته شده را دارد. این زبان برای انجام هر وظیفهای در حوزههای گوناگون دارای کتابخانههای خاصی است. برای مثال هر کدام از زمینههای هوش مصنوعی، پردازش تصویر، شبکههای کامپیوتری و سایر موارد دارای کتابخانههای اختصاصی هستند. در این بخش چند نمونه از این کتابخانهها معرفی شدهاند:
- TensorFlow: کتابخانه تنسورفلو، یکی از انواع کتابخانههای یادگیری ماشین (Machine Learning) به حساب میآید. این کتابخانه با همکاری شرکت گوگل ایجاد شده است. کتابخانه TensorFlow برای طراحی و ایجاد شبکههای عصبی، ماتریسهای چند بعدی و گرافها (Graph) با سرعت بالا و به وسیله انواع پردازندهها استفاده میشود.
- Scikit-Learn: به عنوان یک کتابخانه مناسب برای کار روی دادههای پیچیده، میتوان Scikit-Learn را نام برد که به کتابخانه «NumPy» و «SciPy» مرتبط است. این کتابخانه در زمینههای اعتبار سنجی متقابل (Cross Validation)، الگوریتمهای نظارت نشده یادگیری ماشین (Unsupervised Learning Algorithm) و سایر موارد مورد استفاده قرار میگیرد.
- Numpy: این کتابخانه، یکی از محبوبترین کتابخانههای یادگیری ماشین به حساب میآید. کتابخانه تنسورفلو و برخی از کتابخانههای دیگر از کتابخانه Numpy به صورت داخلی برای انجام چندین عملیات روی تنسورها استفاده میکنند. تنسورها ماتریسهای چند بعدی هستند که دادهها را نشان میدهند.
- Keras: کراس یک کتابخانه متنباز و رایگان پایتون برای توسعه و ارزیابی مدلهای یادگیری عمیق است.
- PyTorch: پایتورچ بزرگترین کتابخانه یادگیری ماشین است که به توسعه دهندگان این امکان را میدهد که محاسبات تنسور را به وسیله پردازنده گرافیکی انجام دهند.
- LightGBM: یکی از بهترین و محبوبترین کتابخانههای پایتون، LightGBM است. این کتابخانه به توسعه دهندگان کمک میکند تا الگوریتمهای جدید را به وسیله تعریف مجدد مدلهای ابتدایی مانند درخت تصمیم (Decision Tree) ایجاد کنند.
- Eli5: اغلب نتایج پیشبینی (Prediction) مدلهای یادگیری ماشین دقیق نیستند و کتابخانه Eli5 به غلبه بر این مسئله کمک میکند. این کتابخانه ترکیبی از تجسم (Visualization) و اشکالزدایی (Debug) همه مدلهای یادگیری ماشین و بررسی مراحل کار الگوریتمهای آن است.
- SciPy: یک کتابخانه متنباز برای پایتون است که برای حل مسئلههای ریاضی، علمی، مهندسی و فنی مورد استفاده قرار میگیرد. کتابخانه SciPy شامل ماژولهایی برای بهینهسازی (Optimization)، جبر خطی (Linear Algebra)، ادغام (Integration) و آمار است.
- Theano: این یک کتابخانه یادگیری ماشین برای محاسبه آرایههای چند بعدی به حساب میآید. این کتابخانه به تنسورفلو شباهت زیادی دارد ولی به دلیل عدم توانایی آن در سازگاری با محیطهای تولید، کارآمدی آن به اندازه تنسورفلو نیست.
- Pandas: این کتابخانه یکی از کتابخانههای یادگیری ماشین است که ساختمان دادههای (Data Structure) سطح بالا و تنوع گستردهای از ابزارهای تجزیه و تحلیل را فراهم میکند. یکی از بهترین ویژگیهای این کتابخانه مهارت ترجمه عملیات پیچیده دادهها به وسیله یک یا دو دستور است.
- مقالههای پیشنهادی:
- فرق Back End و Front End چیست ؟ — هر آنچه باید بدانید
- درخت تصمیم با پایتون — راهنمای کاربردی
- بهینه سازی در پایتون | Optimization در پایتون با SciPy | راهنمای جامع
- آمار توصیفی در پایتون با کتابخانه Numpy و Pandas — راهنمای کاربردی
- رسم نمودار در پایتون با Matplotlib — راهنمای کاربردی
- آموزش نصب کتابخانه های پایتون علم داده — راهنمای کاربردی
اکنون پیش از پرداختن به موضوع نحوه فراخوانی کدهای کتابخانه در برنامه نویسی ، بخش بعدی این مقاله به معرفی مجموعه دورههای آموزش برنامه نویسی تم آف اختصاص داده شده است.
معرفی فیلم های آموزش برنامه نویسی تم آف
دورههای آموزشی تم آف بر اساس موضوع به صورت مجموعههای آموزشی مختلفی دستهبندی شدهاند. یکی از این مجموعهها مربوط به دورههای آموزش انوع زبانهای برنامه نویسی است. علاقهمندان میتوانند برای یادگیری زبانهای مختلف و انواع کتابخانهها در برنامه نویسی از این مجموعه آموزشی استفاده کنند. در زمان تدوین این مقاله، مجموعه دورههای برنامه نویسی تم آف حاوی بیش از ۴۳۰ ساعت محتوای ویدیویی و دارای نزدیک به ۵۰ عنوان آموزشی مختلف است. در ادامه، برخی از دورههای این مجموعه به طور مختصر معرفی شدهاند:
- فیلم آموزش برنامه نویسی جاوا Java (طول مدت: 19 ساعت , 19 دقیقه، مدرس: دکتر سید مصطفی کلامی هریس): در این تم آف از آخرین نسخه زبان برنامه نویسی جاوا (Java8) استفاده شده است و مباحث مربوط به برنامه نویسی شی گرا و رابطهای گرافیکی (طراحی و برنامه نویسی GUI) مورد بررسی قرار گرفتهاند. این دوره آموزشی به علاقهمندانی پیشنهاد میشود که قصد یادگیری زبان برنامه نویسی جاوا را از پایه دارند. برای مشاهده فیلم آموزش برنامه نویسی جاوا Java + کلیک کنید.
- فیلم آموزش برنامه نویسی C (طول مدت: ۱۳ ساعت و ۳۰ دقیقه، مدرس: دکتر سید مصطفی کلامی هریس): در این دوره آموزشی، مفاهیم زبان برنامه نویسی C به صورت عملی همراه با پیادهسازی پروژههای برنامه نویسی آموزش داده میشوند. برای مشاهده فیلم آموزش برنامه نویسی C + کلیک کنید.
- فیلم آموزش برنامه نویسی پایتون Python – مقدماتی (طول مدت: ۱۹ ساعت و ۵۳ دقیقه، مدرس: پژمان اقبالی شمس آبادی): در این تم آف، برنامه نویسی پایتون از پایه آموزش داده شده و تا جایی که امکان داشته است تمام مباحث مقدماتی مورد نیاز برای برنامه نویسی پایتون پوشش داده شدهاند. مخاطبان این دوره نیاز به دانش قبلی از زبان پایتون ندارند و سعی شده است همه مطالب لازم در همین دوره بیان شوند. برای مشاهده فیلم آموزش برنامه نویسی پایتون Python – مقدماتی + کلیک کنید.
- فیلم آموزش برنامه نویسی متلب MATLAB (طول مدت: ۸ ساعت و ۵۸ دقیقه، مدرس: دکتر سید مصطفی کلامی هریس): هدف این تم آف آشنایی دانشجویان و کاربران با مباحث مختلف مرتبط با برنامه نویسی متلب است که از طریق نکات تئوری و عملی به طور همزمان انجام میشود. جهت مشاهده فیلم آموزش برنامه نویسی متلب MATLAB + کلیک کنید.
- فیلم آموزش جاوا اسکریپت JavaScript (طول مدت: ۹ ساعت و ۸ دقیقه، مدرس: محمد عبداللهی): جاوا اسکریپت زبان برنامه نویسی مفسری در سمت کلاینت است که میتوان به وسیله آن عناصر «HTML» موجود در صفحه وب و مقادیر «CSS» آنها را تغییر داد. این دوره به علاقهمندانی پیشنهاد میشود که قصد یادگیری زبان برنامه نویسی جاوا اسکریپت را دارند. برای مشاهده فیلم آموزش جاوا اسکریپت JavaScript + کلیک کنید.
- فیلم آموزش برنامه نویسی C++ سی پلاس پلاس (طول مدت: ۲۰ ساعت و ۱۴ دقیقه، مدرس: دکتر فرشید شیرافکن): در این تم آف، آموزش زبان برنامه نویسیC++ در دو بخش معرفی دستورات و ساختمان داده و بیان مفاهیم شی گرایی ارائه شده است. برای مشاهده فیلم آموزش برنامه نویسی C++ سی پلاس پلاس + کلیک کنید.
حال، در بخش بعدی مقاله «کتابخانه در برنامه نویسی چیست» به نحوه فراخوانی کدهای کتابخانه در برنامه نویسی پرداخته شده است.
نحوه فراخوانی کدهای کتابخانه در برنامه نویسی
کدهای کتابخانه در برنامه نویسی به گونهای سازماندهی میشوند که بتوانند در چندین برنامه بدون ارتباط با یکدیگر استفاده شوند. اما استفاده از کدهایی که در یک برنامه خاص نوشته و سازماندهی شدهاند، فقط در همان برنامه امکانپذیر است. این تمایز بین فراخوانیها زمانی که برنامه بزرگ شود و مثلاً دارای چند میلیون خط کد باشد، یک مفهوم سلسله مراتبی ایجاد میکند. در برنامههای بزرگ، ممکن است کتابخانههای داخلی وجود داشته باشند و توسط بخشهای فرعی برنامه به صورت مستقل و مجدداً استفاده شوند.
وجه تمایز فراخوانی تابع و فراخوانی کتابخانه این است که یک کتابخانه به منظور استفاده مجدد توسط برنامههای اصلی یا زیر برنامههای مستقل سازماندهی شده است و برنامه نویس فقط باید نحوه استفاده از کتابخانه را بدون جزئیات داخلی آن بداند. اما در خصوص تابع باید گفت که برنامه نویس از جزئیات کدهای آن تابع آگاه است. اکثر زبانهای برنامه نویسی کامپایلری دارای کتابخانههای استاندارد (Standard Library) هستند. همچنین برنامه نویسان میتوانند کتابخانههای خاص خود را هم ایجاد کنند.
بیشتر سیستمهای نرم افزاری مدرن امروزی، کتابخانههایی دارند که اکثر خدمات مورد نیاز سیستمها را ارائه میدهند. چنین کتابخانههایی خدمات خود را با برنامههای مدرن سازماندهی میکنند. به این ترتیب، بیشتر کدهایی که توسط برنامههای کاربردی مدرن استفاده میشوند در کتابخانههای سیستمها ارائه شدهاند. در بخش بعدی مقاله «کتابخانه در برنامه نویسی چیست» به شرح فرآیند پیوند و اتصال Library در برنامه نویسی پرداخته میشود.
فرآیند پیوند و اتصال Library در برنامه نویسی
کتابخانه در برنامه نویسی برای فرآیند پیوند و اتصال (Linking or Binding) برنامه از اهمیت بالایی برخوردار است. آنها ارجاعات معروف به پیوندها یا نمادها را به وسیله ماژولهای کتابخانه حل میکنند. این فرآیند اتصال معمولاً به صورت خودکار به وسیله متصل کننده برنامه (Linker or Binder) انجام میشود و مجموعهای از کتابخانهها و سایر ماژولها را به ترتیب خاصی جستجو میکند. پیوند زدن زمانی انجام میشود که یک فایل اجرایی ایجاد شده باشد یا هنگامی که برنامه در زمان اجرا استفاده میشود. در بخش بعدی این مقاله به این سوال اساسی پاسخ داده شده است که انواع کتابخانه در برنامه نویسی چیست؟
انواع کتابخانه در برنامه چیست؟
Library در برنامه نویسی انواع گوناگونی دارد که بر اساس نوع رفتارهای آنها ایجاد میشوند. در این بخش به بررسی و تعریف انواع کتابخانه در برنامه نویسی پرداخته شده است. ابتدا در بخش بعدی کتابخانههای ثابت (Static Library) در برنامه نویسی شرح داده شدهاند.
کتابخانه ثابت در برنامه چیست؟
هنگامی که اتصال در حین ایجاد یک فایل اجرایی یا فایل شی (Object File) دیگر انجام میشود، به آن پیوند ثابت یا پیوند اولیه میگویند. در این مورد، پیوند معمولاً توسط یک متصل کننده انجام میشود، اما ممکن است توسط کامپایلر نیز انجام شود. کتابخانه ثابت که به عنوان آرشیو (Archive) نیز شناخته میشود، کتابخانهای به حساب میآید که به صورت ثابت پیوند داده شده است.
پس از کامپایل کردن برنامه با کتابخانه ثابت، این کتابخانه به بخشی از برنامه تبدیل میشود. در سیستمهای یونیکس و مانند آن، کتابخانههای ثابت دارای پسوند «a.» هستند، در حالی که در ویندوز کتابخانهها به پسوند «lib.» ختم میشوند. مزایای این روش این است که برای اجرای برنامه نیازی به برنامههای وابسته دیگر نیست و همچنین آنها سریعتر هستند. این کتابخانهها در هر فایل اجرایی که کپی میشوند فضای زیادی را میگیرند و بهروزرسانی آنها دشوار است زیرا باید هر برنامهای که از کتابخانههای ثابت استفاده میکند، دوباره کامپایل شود.
به طور خلاصه میتوان گفت که یک کتابخانه ثابت حاوی مجموعهای از فایلهای اشیا است. در ابتدا فقط کتابخانههای ثابت وجود داشتند. باید هنگام کامپایل مجدد هر ماژول، پیوند ثابت انجام شود. گاهی همه ماژولهای مورد نیاز یک برنامه به صورت ثابت ایجاد و در برنامه اجرایی کپی میشوند. این فرآیند و فایل نتیجه به عنوان روش ساخت ثابت برنامه شناخته میشوند. در بخش بعدی به بررسی کتابخانههای اشتراکی یا پویا در برنامه پرداخته شده است.
کتابخانه اشتراکی یا پویا در برنامه چیست؟
کتابخانه اشتراکی، پویا یا شی اشتراکی (Dynamic Link Library | DLL) فایلی است که برای اشتراکگذاری به وسیله فایلهای قابل اجرا و همچنین فایلهای شی اشتراکی در نظر گرفته میشود. ماژولهای استفاده شده توسط یک برنامه از اشیاء مشترک منحصر به فرد در زمان بارگذاری یا زمان اجرا در حافظه به جای کپی شدن توسط اتصال دهنده هنگام ایجاد یک فایل یکپارچه اجرایی در برنامه، بارگذاری شدهاند. کتابخانههای اشتراکی یا پویا میتوانند به صورت ثابت در حین زمان کامپایل استفاده شوند. این موضوع به این معنی است که ارجاعات به ماژولهای کتابخانه انجام میشوند و زمانی که فایل اجرایی ایجاد شده است، حافظهها به ماژولها اختصاص داده میشوند. اما اغلب، اتصال کتابخانههای اشتراکی تا بارگذاری آنها به تعویق میافتد.
یک کتابخانه پویا از روالهایی تشکیل شده است که در زمان اجرا در برنامه بارگذاری میشوند. مزایای کتابخانههای پویا این است که بهروزرسانی آنها آسانتر انجام میشود و فایلهای اجرایی برنامه در آنها بسیار سبکتر خواهند بود. با این حال، برای اجرای برنامه به برنامههای وابسته نیاز است و کتابخانههای پویا کندتر از کتابخانههای ثابت هستند. کتابخانههای پویا در سیستمهایی مانند یونیکس معمولا با پسوند «so.» ذخیره میشوند. کتابخانههای اشتراکی را با روشهای گوناگون میتوان استفاده کرد که در ادامه به بررسی آنها پرداخته شده است.
حافظه اشتراکی برای کتابخانههای پویا در برنامه چیست؟
کدهای کتابخانه ممکن است در حافظه توسط چندین فرآیند و همچنین روی دیسک به اشتراک گذاشته شوند. اگر از حافظه مجازی استفاده شود، پردازشها همان صفحه فیزیکی «RAM» را اجرا میکنند که در فضاهای آدرس مختلف پردازشها نگاشت شده است. در بخش بعدی مقاله «کتابخانه در برنامه نویسی چیست» به شرح اتصال پویا (Dynamic Linking) در کتابخانهها پرداخته میشود.
اتصال پویا برای کتابخانه در برنامه چیست؟
اتصال پویا یا اتصال دیر هنگام (Late Binding) اتصالی است که در هنگام بارگذاری برنامه (زمان بارگذاری) یا اجرا (زمان اجرا) برنامه به جای زمانی انجام میشود که فایل اجرایی ایجاد شده است. یک کتابخانه پیوندی پویا کتابخانهای به حساب میآید که برای اتصال پویا در نظر گرفته میشود. در بخش بعدی به بهینهسازی برای کتابخانه در برنامه نویسی پرداخته شده است.
بهینهسازی برای کتابخانههای پویا در برنامه چیست؟
از آنجایی که کتابخانههای مشترک معمولاً در اکثر سیستمها تغییر نمیکنند، سیستمها میتوانند آدرس احتمالی را برای هر کتابخانه مشترک روی سیستم قبل از محاسبه اطلاعات در کتابخانهها و فایلهای اجرایی ذخیره کنند. اگر هر کتابخانه مشترکی که بارگیری میشود این فرآیند را طی کرده باشد، آنگاه هر یک در آدرس از پیش تعیین شده خود بارگیری میشوند و این کار روند اتصال پویا را سرعت میبخشد. بخش بعدی به یافتن کتابخانهها در زمان اجرا اختصاص داده شده است.
یافتن کتابخانهها در زمان اجرا چگونه است؟
سیستمهای بارگذاری کننده کتابخانههای مشترک از نظر عملکرد بسیار متفاوت هستند. برخی از آنها به ذخیره اجرایی مسیرهای صریح در کتابخانهها بستگی دارند. هر گونه تغییر در نامگذاری کتابخانه یا چیدمان سیستم فایل باعث از کار افتادن این سیستمها میشود. معمولاً فقط نام کتابخانه در فایل اجرایی ذخیره میشود و سیستم عامل روشی را برای یافتن کتابخانه روی دیسک، بر اساس برخی الگوریتمها، ارائه میکند. مسیر کتابخانه، کاربردی در این بخش ندارد. اگر یک کتابخانه اشتراکی که یک فایل اجرایی به آن وابسته است حذف، منتقل یا تغییر نام داده شود، همچنین اگر نسخه ناسازگاری از کتابخانه در مکانی کپی شود که قبلاً در جستجو بوده است، بارگذاری فایل اجرایی انجام نمیشود. بخش بعدی مقاله به بارگذاری پویا (Dynamic Loading) در کتابخانه در برنامه نویسی پرداخته شده است.
بارگذاری پویا در کتابخانهها چیست؟
بارگذاری پویا، زیرمجموعهای از اتصال پویا به حساب میآید و شامل بارگذاری و تخلیه کتابخانه به صورت پویا در زمان اجرا در یک درخواست است. چنین درخواستی امکان دارد به طور ضمنی یا صریح مطرح شود. درخواستهای ضمنی زمانی ایجاد میشوند که یک کامپایلر یا اتصال دهنده ثابت، منابع کتابخانهای شامل مسیرهای فایل یا نامهای آنها را به برنامه اضافه میکند. درخواستهای صریح زمانی ایجاد میشوند که برنامهها با رابط برنامه نویسی برنامه کاربردی (API) سیستم عامل به طور مستقیم فراخوانی شوند. در بخش بعدی مقاله «کتابخانه در برنامه نویسی چیست» به مزایا و معایت انواع کتابخانه در برنامه نویسی پرداخته میشود.
مزایا و معایت انواع کتابخانه در برنامه نویسی چیست ؟
دو نوع کتابخانه ثابت و پویا در برنامه نویسی دارای اثرات مثبت و منفی هستند و ایجاد آنها توسط برنامه نویس بستگی به مکان و نوع استفاده آنها در برنامه دارد. در ادامه برخی از این مزایا و معایب فهرست شدهاند:
- توابع در کتابخانههای ثابت سریعتر اجرا میشوند، زیرا زمانی برای یافتن مکان تابع در برنامه صرف نمیکنند.
- کل کتابخانه داخل یک فایل اجرایی است، اما برنامه نویس باید کتابخانه ثابت را برای هر فایل اجرایی در برنامه قرار دهد و این موضوع باعث میشود که کتابخانه ثابت فضای بیشتری را مصرف کند. در این صورت، بهتر است که از کتابخانههای پویا استفاده شود.
- کتابخانههای پویا داخل فایل اجرایی قرار نمیگیرند، این کتابخانهها فقط اتصال پیدا میکنند. از سوی دیگر، فایلهای اجرایی با کتابخانههای پویا کندتر از فایلهای دارای کتابخانههای ثابت هستند.
- تفاوت بزرگ دیگر مربوط به پشتیبانی و بهروزرسانی کدها است، کتابخانههای ثابت به سختی مدیریت میشوند، به این دلیل که پس از بهروزرسانی کتابخانههای ثابت، باید هر فایل اجرایی را در آن دوباره کامپایل کرد، در حالی که این مشکل با کتابخانههای پویا وجود ندارد.
در بخش بعدی مقاله «کتابخانه در برنامه نویسی چیست» به تفاوت بین Library در برنامه نویسی و فریمورک (Framework) در برنامه نویسی پرداخته شده است.
تفاوت فریم ورک و کتابخانه در برنامه نویسی چیست ؟
گاهی برخی از توسعهدهندگان تازهکار با وجود اینکه این که این دو اصطلاح کاملاً با هم تفاوت دارند، کتابخانه و فریمورک را به اشتباه به جای یکدیگر استفاده میکنند. در این بخش از مقاله کتابخانه در برنامه نویسی چیست ، تفاوت بین کتابخانه و فریمورک مورد بررسی قرار گرفته است. اکنون ابتدا به تعریف فریمورک در برنامه نویسی پرداخته میشود.
فریم ورک چیست؟
در برنامه نویسی کامپیوتر، فریمورک یک چارچوب یا نرم افزار مفهومی است که نوشتن برنامهها را برای برنامه نویس سادهتر میکند. همچنین، فریمورک به طور دلخواه توسط برنامه نویس قابل تغییر است. بنابراین، فریمورک نرمافزار خاصی توسط برنامه نویس برای ایجاد و نوشتن برنامه نیز به حساب میآید. فریمورک روشی استاندارد برای ساخت و استقرار برنامهها و یک محیط نرمافزاری قابل استفاده مجدد است که قابلیتهای خاصی را به عنوان بخشی از یک پلتفرم نرمافزاری بزرگتر برای تسهیل توسعه اپلیکیشنهای کاربردی، محصولات و راهحلهای نرمافزاری فراهم میکند.
موارد زیادی برای بررسی تفاوت کتابخانه و فریمورک وجود دارند. به طور کلی میتوان گفت که معمولاً از یک Library در برنامه نویسی برای حل مسئلهای خاص یا اضافه کردن یک ویژگی خاص به برنامه استفاده میشود. در مقابل آن، Framework ابزاری بسیار عمومیتر و قابل استفاده مجدد را برای استقرار برنامه در اختیار برنامه نویس قرار میدهد. دلایل تفاوت بین کتابخانه و فریمورک در بخش بعدی مقاله «کتابخانه در برنامه نویسی چیست» ارائه شده است.
دلایل تفاوت فریمورک و کتابخانه در برنامه نویسی چیست ؟
همانطور که در تصویر زیر قابل مشاهده است، میتوان گفت که فریمورک ابزاری به حساب میآید که کل برنامه با استفاده از آن پیادهسازی میشود و کتابخانهها ابزارهایی برای حل برخی از مسائل هستند.
سه موضوع مهم وجود دارند که تفاوت بین کتابخانه و فریمورک را نشان میدهند، در این بخش به صورت مختصر به بررسی این سه موضوع پرداخته شده است. ابتدا موضوع وارونگی کنترل (Inversion of Control) در فریمورک مورد بررسی قرار میگیرد.
وارونگی کنترل چیست؟
اولین تفاوت عمده بین کتابخانه در برنامه نویسی و فریمورک این است که برنامه نویس معمولاً هر زمان که بخواهد و نیاز باشد از کتابخانه استفاده میکند. اما در فریمورک کل جریان کار در یک چارچوب ثابت و مشخص صورت میگیرد. بنابراین، اغلب احساس میشود که فریمورک کنترل فرآیند توسعه را در دست دارد و برنامه نویس یا توسعه دهنده نقش کمرنگتری در آن دارند. به این موضوع، «وارونگی کنترل» گفته میشود. به طور خلاصه میتوان گفت:
- برنامه نویس کتابخانه را برای انجام کار فراخوانی میکند.
- فریمورک برنامه نویس را برای انجام کار فراخوانی میکند.
با توجه به وارونگی کنترل، فریمورکها بسیار محبوب هستند و میتوانند وظایف بسیاری را برای برنامه نویس انجام دهند. فریمورکها نحوه نوشتن کدها، مکان فایلها و حتی نام فایلهای مذکور را به طور خودکار مدیریت میکنند. در بخش بعدی مقاله به عنوان دومین تفاوت بین کتابخانه و فریمورک، فرآیند «توسعهپذیری» (Extensibility) مورد بررسی قرار میگیرد.
توسعه پذیری چیست؟
برنامه نویس با استفاده از توسعه پذیری میتواند ویژگیهای جدیدی را به فریمورک اضافه کند و رفتار ویژگیهای موجود را برای رسیدن به نیازهای برنامه بدون تغییر کد منبع اصلی تغییر دهد. فریمورکهای خوب با در نظر گرفتن ویژگیهای توسعهپذیری ساخته میشوند. اگر فریمورکی قابل توسعه نبود و عملکرد نسبتاً محدودی داشت، جذابیت یادگیری آن برای توسعه دهندگان کاهش مییابد. برای درک بهتر مفهوم توسعهپذیری به بررسی یکی از اصول مهم در برنامه نویسی شی گرا به نام «باز بسته» (Open Closed) پرداخته میشود.
این اصل بیان میکند که رفتار کدها باید برای گسترش دادن (Extend) باز باشد یعنی امکان انجام آن به راحتی وجود دارد و برای تغییر دادن بسته باشد یعنی تا جایی که امکان دارد کدها تغییر داده نشوند. یک مثال ساده برای این اصل ارثبری یا وراثت (Inheritance) در کلاسها است که زیر کلاسها میتوانند بدون تغییر مستقیم در کلاس والد، تغییراتی در عملکرد و ویژگیهای کلاس خود به وجود بیاورند و خود را گسترش دهند. در نهایت میتوان گفت که کتابخانهها به دلیل دسترسی محدودترشان به برنامه از منظر چنین قابلیتهایی مورد بررسی قرار نمیگیرند. بخش بعدی مقاله «کتابخانه در برنامه نویسی چیست» به کدهای غیر قابل تغییر (Non Modifiable Code) اختصاص داده شده است.
کدهای غیر قابل تغییر
مفهوم کدهای غیر قابل تغییر بسیار سادهتر است. تعریف کوتاه و ساده کدهای غیر قابل تغییر این است که فریمورکها مجموعهای از کدها را تولید میکنند که در بیشتر موارد در دسترس برنامه نویسان و توسعه دهندگان نیستند. ولی کدهایی که به وسیله کتابخانهها در برنامه ایجاد میشوند، کاملاً قابل لمس هستند. اکنون، در بخش نهایی مقاله «کتابخانه در برنامه نویسی چیست» به بررسی برخی از فیلمهای آموزشی مرتبط با برنامه نویسی و کتابخانه در برنامه نویسی پرداخته میشود.
معرفی فیلم های آموزش برنامه نویسی تم آف
در این بخش انتهایی مقاله «کتابخانه در برنامه نویسی چیست» برای یادگیری بیشتر کتابخانهها، تعدادی از دورههای آموزش برنامه نویسی تم آف به علاقهمندان معرفی شدهاند. مفهوم کتابخانه در برنامه نویسی در برخی از این دورهها مورد بررسی قرار گرفته و آموزش داده شده است. در ابتدا به معرفی دوره آموزش یادگیری عمیق با پایتون – تنسورفلو و کراس TensorFlow و Keras پرداخته میشود.
فیلم آموزش یادگیری عمیق با پایتون – تنسورفلو و کراس TensorFlow و Keras
در سالهای اخیر، یادگیری عمیق، تحول بزرگی را در یادگیری ماشین و هوش مصنوعی ایجاد کرده است. یکی از مهمترین شاخههای حوزه یادگیری عمیق، بسترهای نرم افزاری و برنامه نویسی هستند که به منظور پیادهسازی و آموزش مدلها به کار میروند. همچنین، تحقیقات زیادی در زمینه ایجاد بسترها و کتابخانههای نرم افزاری مخصوص، توسط شرکتها و دانشگاههای معتبر دنیا، انجام شده است؛ میتوان کتابخانه TensorFlow شرکت گوگل به همراه کتابخانه Keras را پرکاربردترین و محبوبترین و در عین حال، قدرتمندترین کتابخانه در برنامه نویسی برای این زمینه معرفی کرد. در این آموزش مطالب اصلی برای ایجاد و آموزش مدلهای یادگیری عمیق در کتابخانه Keras آورده شده است. این تم آف توسط سعید محققی تدریس میشود. طول مدت این دوره نزدیک به سه ساعت است و این دوره چهار درس را در بر میگیرد. سرفصلهای این دوره شامل مقدمه و راهاندازی، کار با دادهها در Keras، ایجاد و آموزش مدل در Keras و تکنیکهای مفید برنامه نویسی در Keras میشوند.
- برای مشاهده فیلم آموزش یادگیری عمیق با پایتون – تنسورفلو و کراس TensorFlow و Keras + اینجا کلیک کنید.
فیلم آموزش کتابخانه scikit-learn در پایتون – الگوریتم های یادگیری ماشین
در این تم آف هدف اصلی آموزش بخشی از الگوریتمهای یادگیری ماشین موجود در کتابخانه «scikit-learn» است. پس از یادگیری این دوره آموزشی، دانشجویان و علاقهمندان قادر هستند مسائل مختلف را با توجه به شرایط حل کرده و به جواب نهایی برسند. طول مدت این دوره نزدیک به چهار ساعت و مدرس آن سید علی کلامی هریس است. این تم آف ۱۷ فصل را در بر میگیرد. همچنین، برخی از سرفصلهای آن شامل کار با داده در کتابخانه scikit-learn، طبقهبندی با روش KNN، طبقهبندی با روش Naive Bayes، طبقهبندی با روش SVM، رگرسیون با روش KNN، رگرسیون با روش MLP در کتابخانه scikit-learn و سایر موارد میشوند.
- برای مشاهده فیلم آموزش کتابخانه scikit-learn در پایتون – الگوریتم های یادگیری ماشین + اینجا کلیک کنید.
فیلم آموزش کتابخانه های NumPy و Matplotlib در پایتون
این تم آف برای تکمیل و بهینهسازی مباحث موجود در پایتون مقدماتی ارائه شده است. همچنین آشنایی با کتابخانه NumPy فاز جدیدی از برنامه نویسی در پایتون را به روی کاربران میگشاید. برای یادگیری کتابخانههای «NumPy» و «Matplotlib» در پایتون، دوره آموزشی تدریس شده توسط میترا تجربه کار پیشنهاد میشود. طول مدت این دوره نزدیک به ۵ ساعت است و همچنین این دوره ۳ درس را در بر میگیرد. سرفصلهای این دوره معرفی و تعریف آرایهها در زبان پایتون، معرفی کتابخانه NumPy، رسم نمودار در پایتون با کتابخانه Matplotlib هستند.
- برای مشاهده فیلم آموزش کتابخانه های NumPy و Matplotlib در پایتون + اینجا کلیک کنید.
فیلم آموزش برنامه نویسی اندروید Android – پیشرفته
در بخشهای مقدماتی و تکمیلی برنامه نویسی اندروید (Android)، مفاهیم اصلی و عمومی برنامه نویسی اندروید ارائه شدهاند. در این بخش، مفاهیم پیشرفتهتر مورد بررسی قرار گرفتهاند و در حین آموزش تلاش شده پروژهها و مثالهای گوناگون برای تفهیم بیشتر، حل و بررسی شوند. نحوه ارتباط با اینترنت، ساخت نماهای اختصاصی، دریافت اطلاعات مکانی کاربر، کار با سنسور اثر انگشت، نمونه یک بازی ساده با استفاده از کتابخانههای گرافیکی و سایر موارد مباحث مطرح شده در این دوره آموزشی هستند. طول مدت این دوره نزدیک به ۲۶ ساعت است. این تم آف توسط محمدمهدی علیزاده تدریس میشود و ۱۴ درس را در بر میگیرد. برخی از سرفصلهای این دوره آموزشی شامل آشنایی با SnackBar و اعمال تغییرات برای شخصی سازی اسنک بار، استفاده از کتابخانه Volley برای ارتباط سادهتر و آشنایی با متدهای مختلف آن، آشنایی با نحوه رسم نمودارهای مختلف در اپلیکیشنهای اندرویدی و سایر موارد میشوند.
- برای مشاهده فیلم فیلم آموزش برنامه نویسی اندروید Android – پیشرفته + اینجا کلیک کنید.
فیلم آموزش فریم ورک اسپرینگ Spring در جاوا
هدف از این تم آف، یادگیری مقدماتی فریمورک اسپرینگ (Spring) است. این آموزش پروژه محور به حساب میآید و علاقهمندان و دانشجویان مرحله به مرحله آموزش را با مثالهایی ساده اما مناسب یاد میگیرند. در نهایت یک پروژه ساده کتابخانه را با معماری Spring بررسی میکنند. همچنین برای یادگیری و آموزش این فریمورک، استفاده از دوره آموزش فریم ورک اسپرینگ Spring تم آف پیشنهاد میشود. طول مدت این دوره نزدیک به شش ساعت و مدرس آن مصطفی عنبرمو است. این دوره هشت درس را شامل میشود که از برخی سرفصلهای مهم آن میتوان به مقدمهای بر Spring Framework، پیکربندی متادیتا یا Configuration meta-data، Inversion of Control با فریم ورک Spring، نوشتن یک کتابخانه با معماری Spring و سایر موارد اشاره کرد.
- برای مشاهده فیلم آموزش فریم ورک اسپرینگ Spring در جاوا + اینجا کلیک کنید.
جمعبندی
درک کتابخانه در برنامه نویسی و روش استفاده از آن یکی از مسائل مهم در حوزه برنامه نویسی به حساب میآید. همچنین، کتابخانهها باعث سهولت کدنویسی و منظم بودن کدها میشوند. به همین دلیل، یادگیری کتابخانه در برنامه نویسی به عنوان یک مسئله مهم در جهت پیشرفت کاربران تلقی میشود. در این مقاله، ابتدا مفاهیم مهم مرتبط با Library در برنامه نویسی و چیستی Library بررسی شدند و در بخشهای بعدی به برخی از مزیتها و محدویتهای این ابزار اشاره شد.
در بخش پایانی مقاله «کتابخانه در برنامه نویسی چیست» نیز به بررسی تفاوت بین کتابخانه و فریمورک پرداخته شد. در نهایت، با توجه به کاربرد کتابخانه در برنامه نویسی برای زبانهای گوناگون، استفاده از این روش به پیشرفت کیفیت کدنویسی توسعه دهندگان کمک میکند.