Зачем нужны фреймворки и библиотеки
Работа с библиотеками и фреймворками — базовый навык для девелопера. Хотя оба инструмента помогают строить архитектуру программ, а разработчики часто используют их как синонимы, между ними есть различия.
Объясняем, что выбрать для решения ваших задач.
«Чужой» код
И фреймворки, и библиотеки — это код, который до вас написал другой разработчик. Этот код используют, когда решают однотипные задачи или распространенные проблемы.
Принцип разработки программного обеспечения DRY (Don’t repeat yourself) советует не дублировать код, который используется много раз. Например, вам нужно обрабатывать строки. Для этого вы применили функцию добавления заглавной буквы к каждой новой строке. Записав функцию, вы создали небольшую собственную библиотеку.
Что такое библиотека
Библиотека — это набор функций, которые решают конкретную задачу в программе. Она может применять шаблоны сообщений, ранее скомпилированный код, классы или подпрограммы — и использоваться много раз. В языках программирования есть стандартные библиотеки, но разработчик также может создать свою.
Классы и методы, с которыми работает библиотека, определяют, для чего она используется. Например, математические библиотеки позволяют разработчикам делать вычисления, просто вызвав функцию и не изучая, как работает этот алгоритм в программе. Доступ к библиотекам обычно реализован с помощью API.
Здесь мы рассказываем о Pillow — библиотеке для обработки графики на Python.
статьи по теме:
Какие инструменты разработки используют чаще других.
Разбираем 5 ключевых.
Что такое фреймворк
Фреймворк — это тоже фрагмент кода, но его задача — определить, как структурировать и выполнять программу. Он требует задать архитектуру приложения — например, дизайн программы и интерпретацию кода. Фреймворк — «каркас» вашего приложения. Фреймворки обычно создают профессиональные команды разработчиков в больших корпорациях (вроде Google).
Например, фреймворк AngularJS применяют для создания веб-приложений. Он основан на HTML и JavaScript и задает базовые параметры для проекта: разметку страницы для десктопной и мобильной версии, синхронизацию с данными сервера, синтаксис шаблона и кроссплатформенность страницы (одинаковое отображение на Android и iOS). Чтобы расширить функционал, к сайту на основе Angular можно подключить одну или несколько библиотек. Но подключить Angular к другому фреймворку невозможно, поскольку фреймворк определяет, как запускать код на сайте.
Использование фреймворков и библиотек часто объясняют по аналогии со строительством дома. Фреймворк — это строительная компания, у которой есть несколько готовых проектов домов. А библиотеки — рабочие инструменты (как дрель или лобзик), которые можно применить по своему усмотрению.
Чем фреймворки отличаются от библиотек
Библиотека подключается к вашему коду, а он — к фреймворку. Основное отличие фреймворка от библиотеки в том, кто контролирует процесс разработки. Программист обращается к библиотеке по желанию. В таком случае он отвечает за поток выполнения программы и последовательность выполнения команд. При использовании фреймворка роли меняются. Фреймворк сам вызывает ваш код и предоставляет вам пространство для добавления деталей. Поэтому такое отличие называют инверсией управления.
Упрощенно это можно представить так:
- Библиотека: задайте нам команду, чтобы выполнить работу.
- Фреймворк: не задавайте команду, мы зададим команду вам.
В программировании существует субъективный параметр — «упрямство» библиотек и фреймворков. Это степень свободы разработчика при структурировании кода.
Именно из-за инверсии контроля фреймворки более упрямы и способны больше автоматизировать разработку. Они самостоятельно принимают решения по написанию кода. Например, фреймворк помогает создавать формы авторизации, таблицы или автоматически генерирует верстку. Некоторые фреймворки даже задают расположение или названия файлов.
Такой подход называется convention over configuration (соглашение по конфигурации). В нем разработчику не нужно настраивать большинство параметров программы.
У разных фреймворков — разная степень «упрямства».
Например, фреймворк Ruby on Rails (RoR) языка Ruby называют очень упрямым. Когда вы делаете новый проект на RoR, он сразу создает папки и файлы с большим количеством кода. Например, когда вы создаете модель User, фреймворк ожидает, что она будет привязана к UsersController. Благодаря заранее написанному коду, Rails в фоновом режиме соединяет модели и контроллеры.
Сравним этот подход с использованием Chart.js — библиотеки, которая создает диаграммы в JavaScript. Вы определяете, где и когда вызвать Chart.js, но вам нужно указать тип диаграмм, цвета и границы. Библиотека ответственна только за информацию для диаграмм.
Хорошие фреймворки легко расширить. Они обеспечивают базовый функционал для разработки программы, но остаются открытыми для изменений. Фреймворки генерируют много кода, который разработчик обычно не меняет.
Используя библиотеку, вы должны понимать, что делает каждый из методов. Фреймворки же требуют от разработчика применять конкретную парадигму программирования (функциональную, декларативную, императивную) и понимать логику процессов. Поэтому изучение фреймворков занимает больше времени, но они предоставляют возможность сделать целый проект или его прототип.
Универсального ответа, когда лучше применять фреймворк, а когда — библиотеку, не существует. Но если на проекте вы используете фреймворк, то лучше применять его для решения задач. Библиотека понадобится, если функций фреймворка недостаточно или у вас продвинутые навыки работы с библиотекой и вы хотите решить задачу нестандартным способом.
курсы по теме:
Data Science with Python
Что такое framework и библиотека в программировании
Статья написана программистами для самых обычных людей. Возможно, некоторые вещи будут упущены для четких разграничений терминов и лучшего усвоения материала.
Начнем с простого…
Что такое Библиотека
Библиотека – это набор функций или даже всего одна функция, которая помогает программисту решить поставленную задачу за короткое время и может быть легко интегрирована в любую программу.
Давайте учиться на примерах….
Допустим, у нас стоит цель написать функцию, которая будет получать данные с другого сайта и что-то с ними делать. Наша цель написать отказоустойчивую функцию, которая в случае сбоев на сервере (при долгом ожидании) не развалит наше приложение.
Реализация примерно подобного функционала с помощью классических методов языка программирования JavaScript обойдется нам в 30-40 строк кода:
А если мы воспользуемся готовой библиотекой, которая уже соответствует нашим требованиям (да и многим другим), наш код будет выглядеть как-то так:
Как видите, наш код сократился в 3 раза (потому что мы подключили чужой код через import, который выполняет нашу задачу). В работе программиста очень часто приходится набирать какой-то текст или код в огромном количестве, поэтому использовать 3-4 библиотеки в одном проекте, чтобы освободить время и заняться другими задачами, это нормально.
Использование библиотек это не признак лени. Просто при разработке приложения перед программистом стоит масса задач: сделать интерфейс, разработать серверную часть, разработать модули для взаимодействия интерфейса и сервера и.т.д. Поэтому сокращать написание кода можно и нужно библиотеками, иначе разработка будет идти не 1 месяц, а 2, и интернет-магазин будет стоит не 100.000 рублей, а 300.000 рублей.
Что такое Framework
Framework – это инструмент для быстрой разработки, предлагающий готовую архитектуру, и внутри которого могут быть объединены несколько библиотек.
Архитектура – довольно непонятный термин в данном контексте, да? В нашем случае в этом слове кроется примерно такой смысл: набор готовой логики и алгоритмов. Программисту нужно писать только бизнес-логику. А бизнес-логика – это какие-то конкретные участки программы присущие конкретному бизнесу/программе.
Давайте учиться на примерах….
Есть задача разработать реактивный сайт (если не знаете что это, читайте по ссылке нашу статью), который будет легко масштабироваться и обслуживаться.
Естественно, программировать в “реактивном” стиле очень и очень сложно. Многие программисты за всю жизнь не смогут реализовать самостоятельно сложную и масштабируемую архитектуру с помощью реактивной парадигмы программирования (ссылка на википедию). Поэтому есть смысл использовать готовый framework, вместо того чтобы голову сложить во время обучения данной премудрости.
Поэтому, программист берёт готовую логику (архитектуру) и на ее основе разрабатывает приложение. Программист пишет только бизнес-логику: калькуляцию каких-то данных, запросы на сервер и т.д.
Бизнес логика – это такой код, который присущ конкретному бизнесу (для которого создается сайт). Т.е этот код невозможно перенести из проекта в проект.
Чем отличаются друг от друга Framework и Библиотека
Давайте подведем итог.
Библиотека – это набор кода, который решает какую-либо задачу. Библиотеки можно переносить из проекта в проект (как плагины), и они будут отлично работать в других проектах. Когда мы запускаем наш код, он вызывает библиотеки. Т.е библиотека это некое дополнение к нашему коду.
Framework – это некий инструмент, для быстрой разработки чего либо, который в себе содержит (а может и не содержать) набор библиотек и какую-то логику с алгоритмами. Фреймворк принуждает разработчика работать в определенном стиле, подчиняясь конкретной логике. Когда мы запускаем программу написанную на каком-либо фреймворке, мы, в первую очередь, запускаем сам фреймворк, который вызывает наш код (бизнес-логику). Т.е наш код это некое дополнение к фреймворку.
Библиотека
Библиотека — это готовый набор функций и объектов для какого-либо языка программирования. Обычно такие наборы объединены назначением или сферой использования, например математические библиотеки или веб-библиотеки. Программисты пользуются ими, чтобы ускорять и упрощать свою работу.
«IT-специалист с нуля» наш лучший курс для старта в IT
Полностью термин звучит как «библиотека подпрограмм». Функции, объекты и другие сущности, которые входят в библиотеку, можно использовать в коде и тем самым облегчать себе задачу. Например, не писать с нуля сложный алгоритм сортировки, а вызвать функцию из библиотеки, где он уже реализован. Это своеобразный набор «строительных блоков» для кода.
Библиотеку не стоит путать с фреймворком. Эти понятия похожи и иногда пересекаются, но библиотека — скорее «облегченный» вариант фреймворка, который не накладывает серьезных требований к архитектуре проекта.
Профессия / 8 месяцев
IT-специалист с нуля
Попробуйте 9 профессий за 2 месяца и выберите подходящую вам
Для чего нужны библиотеки
Писать все с нуля — долго и неэффективно. Разработчикам важно сосредоточиться на внутренней логике своего продукта, а не тратить много времени на решение типовых задач. Поэтому они используют для распространенных действий библиотеки и функции, которые в них входят. В результате вместо сотни строк типового кода разработчик пишет одну — и все работает. Выходит быстрее, проще и удобнее.
Функции собирают в библиотеки для решения какой-то конкретной задачи: математических вычислений, отправки сообщений на сервер, построения модели для машинного обучения и так далее. Какие классы, объекты и функции войдут в библиотеку — зависит от задачи и от того, что для нее требуется чаще всего.
Библиотеки помогают реализовать принцип DRY — don’t repeat yourself, «не повторяйся». Эффективнее и правильнее с точки зрения чистоты кода воспользоваться функцией из библиотеки, чем пытаться реализовать ее с нуля и «изобретать велосипед».
Какие возможности дают библиотеки
В теории — никаких, кроме тех, которые и так можно реализовать внутри языка. Например, библиотека для отправки запросов. Отправить запрос можно и без нее — да, это займет сотни строк кода и много сил, но в теории это возможно.
Основной бонус, который дает использование библиотек, — упрощение и ускорение разработки, а также более чистый код и легкое создание прототипов. Это и есть главная возможность — возможность создавать проекты быстрее.
Можно провести аналогию с готовыми наборами для сборки мебели. Мебель можно выстрогать из дерева своими руками — с этой точки зрения готовые наборы не предлагают ничего нового. Но представьте, сколько времени, сил и умений для этого нужно. Поэтому мало кто сейчас делает мебель сам, а вот наборы популярны.
Какими бывают библиотеки
У библиотек довольно широкая классификация в зависимости от назначения, типа распространения, способа использования и так далее. Вот какими они бывают.
Сторонними и встроенными. Большая часть популярных библиотек, о которых пишут в интернете, — сторонние, то есть их создали не сами разработчики языка. По умолчанию они не входят в язык, но их всегда можно скачать из интернета — чаще всего их хранят в репозиториях на специальных сайтах.
Встроенные, или стандартные библиотеки есть в самих языках программирования. Они подключаются по желанию разработчика, но их не нужно скачивать отдельно — файлы всегда под рукой.
А еще бывают системные библиотеки — system libraries. Это такие, которые изначально встроены в операционную систему. Обычно они нужны для разнообразного системного программирования и работы в консоли.
Открытыми и коммерческими. Открытая библиотека — это такая, которую можно скачать в исходном виде и просмотреть ее код. Некоторые варианты лицензий позволяют пользователям видоизменять код по своему усмотрению или вносить правки в уже готовый продукт — разумеется, их должно одобрить сообщество. Такие библиотеки обычно развиваются за счет сообщества энтузиастов или каких-либо инициативных групп.
Коммерческие библиотеки часто закрытые, их исходный код не видно. Их разрабатывают компании для своих нужд или для внешнего распространения. Бывают и библиотеки для внутреннего пользования, которые обычно не покидают пределов компании, где их создали.
Разработчики могут создавать и свои собственные библиотеки — это по сути наборы функций, и реализовать их может любой опытный программист.
Курс для новичков «IT-специалист
с нуля» – разберемся, какая профессия вам подходит, и поможем вам ее освоить
Статическими и динамическими. Статическая библиотека — это файл с программным кодом, который описывает нужные сущности. Ее подключают к программе с помощью специальной команды; некоторые языки позволяют подключать не библиотеку целиком, а только ее части. При запуске код из библиотеки как бы «вставляется» в программу и становится ее частью.
Динамическая библиотека — это отдельный исполняемый файл на машинных кодах. Он тоже подключается к коду, но иначе — во время запуска. Такая библиотека не «встраивается» в код, а остается отдельным модулем. Сущности из нее подгружаются в работающую программу динамически, уже во время выполнения.
Динамические библиотеки позволяют уменьшить размер программы, и их можно быстро обновить, не «пересобирая» программу. Но их считают более уязвимыми. Если файл библиотеки повредить или подменить, вся программа будет работать неправильно. Статические же модули не повредишь: они уже встроились в исходный код.
Различающимися по назначению. Вот несколько примеров: библиотека для научных вычислений, библиотека для нужд фронтенда, для бэкенда, для шифрования данных, для работы с сетью, передачи запросов или файлов, обработки графики, 3D-моделирования… Список можно продолжать бесконечно. Под любые нужды, скорее всего, найдется подходящая библиотека.
Примеры популярных библиотек
Библиотек существует тысячи, и перечислить их все для каждого языка программирования невозможно. Поэтому мы приведем примеры популярных библиотек для трех распространенных языков: JavaScript, Python и Java.
JavaScript. Этот язык в основном используют для веба, поэтому и библиотеки рассчитаны на него. Например, Webix UI Library нужна для создания пользовательских интерфейсов. В нее входят разнообразные виджеты, готовые блоки с уже запрограммированной логикой. Разработчику остается настроить их. Есть и другие библиотеки компонентов: DHTMLX, Kendo и прочие.
Но библиотеки для JS — это не только компоненты для веба. Например, Choreographer-JS служит для создания и настройки анимаций, а Omniscient добавляет в интерфейсы элементы функционального программирования. А знаменитый Redux, который используется в связке с фреймворками React и Angular, помогает управлять состоянием приложения.
Python. Он многофункциональный, но самые популярные отрасли его использования — data science и машинное обучение, веб и автоматическое тестирование. Поэтому и библиотеки для него в основном направлены на эти отрасли.
В первую очередь стоит упомянуть NumPy и SciPy — библиотеки для математических и научных вычислений. Еще есть TensorFlow, которая популярна в машинном обучении и помогает легко создавать нейронные сети. Сюда же можно отнести библиотеки Scikit Learn, Keras и Pandas — они тоже нужны для ML.
Для веба и других задач есть, например, Requests — библиотека, которая упрощает запросы. Для разработки игр существует Pygame, а для построения графиков — Matplotlib и Seaborn. Еще есть Pillows для работы с изображениями и многое другое.
Java. Этот многофункциональный язык чаще всего используют в крупных корпоративных проектах. Он довольно своеобразный: например, его многословный синтаксис заставляет писать немало повторяющегося кода. Поэтому многие популярные библиотеки для него — MapStruct, Lombok и еще некоторые — нужны для генерации кода с помощью аннотаций. Такой код решает рутинные задачи. Например, MapStruct нужен для маппинга: «связывания» объектов одних сущностей с другими. Это легко, но долго и неудобно делать вручную.
Стоит вспомнить библиотеки для работы с базами данных: Liquibase, FlyWay и другие. Легковесный Blade для веб-разработки можно назвать облегченным аналогом фреймворка Spring.
Библиотеки есть и для многих других целей. Apache POI генерирует отчеты в разных текстовых форматах. Log4j помогает с логированием. libGDX нужен для работы с разнообразным мультимедиа, а Guava — многофункциональный сборник библиотек от Google для самых разных общих задач.
Когда нужно использовать библиотеки
Библиотеки применяются практически в любых профессиональных проектах. Вообще не пользуются ими только новички, задача которых пока что — не создать продукт, а понять принципы и научиться программировать. Но и они, когда знакомятся с синтаксисом и логикой, переходят на новый уровень и начинают пользоваться библиотеками.
Иногда для реализации каких-то действий действительно стоит написать функцию с нуля. Но такое бывает редко и в основном касается оптимизации уже существующего кода. Для создания новых возможностей или прототипирования практически всегда пользуются библиотеками и фреймворками.
Новичкам стоит начинать работать с библиотеками сразу, как только они понимают, что освоили основные принципы языка и могут создавать что-то новое. Так разработка станет эффективнее, а начинающие получат опыт работы с профессиональными инструментами — соответственно, повысят уровень.
Как начать пользоваться библиотеками
Библиотеку можно найти почти под любую задачу. Чаще всего их выкладывают на GitHub, о них пишут на профессиональных сайтах — отыскать подходящую несложно. Затем нужно загрузить библиотеку к себе на рабочее устройство и подключить к коду.
Обычно библиотека — это файл, который можно «импортировать» в код. Команда для этого может иметь разный синтаксис. Чаще всего она называется import. Пишут ее обычно в самом начале файла с кодом; после этого можно пользоваться функциями из библиотеки по своему усмотрению.
Понять, что есть в библиотеке и как этим пользоваться, поможет документация. Создатели практически всегда дают подробную инструкцию с рассказом о возможностях, инструментах, функциях и других сущностях, которые есть в библиотеке. Чаще всего она лежит там же, где и сама библиотека, — на GitHub в файле readme или на официальном сайте.
IT-специалист с нуля
Наш лучший курс для старта в IT. За 2 месяца вы пробуете себя в девяти разных профессиях: мобильной и веб-разработке, тестировании, аналитике и даже Data Science — выберите подходящую и сразу освойте ее.
Библиотека (программирование)
Библиотека (от англ. library ) в программировании — сборник подпрограмм или объектов, используемых для разработки программного обеспечения (ПО).
В некоторых языках программирования [каких?] то же, что модуль, в некоторых — несколько модулей. С точки зрения операционной системы (ОС) и прикладного ПО библиотеки разделяются на динамические и статические.
Термин «библиотека подпрограмм» по всей видимости одними из первых упомянули Уилкс М., Уиллер Д., Гилл С. в качестве одной из форм организации вычислений на компьютере [1] [2] . Исходя из изложенного в их книге под библиотекой понимался набор «коротких, заранее заготовленных программ для отдельных, часто встречающихся (стандартных) вычислительных операций» [3] .
Динамические библиотеки
Часть основной программы, которая загружается в ОС по запросу работающей программы в ходе её выполнения (Run-time), то есть динамически (Dynamic Link Library, DLL в Windows, SO в Linux). Один и тот же набор функций (подпрограмм) может быть использован сразу в нескольких работающих программах, из-за чего они имеют ещё одно название — библиотеки общего пользования (Shared Library). Если динамическая библиотека загружена в адресное пространство самой ОС (System Library), то единственная копия может быть использована множеством работающих с нею программ, что положительно сказывается на степени использовании ресурса ОЗУ. Динамические библиотеки могут содержать в себе как критические для работы программы части, так и дополнительные функции. Дополнительным плюсом такого подхода является то, что динамическая библиотека может быть использована в качестве плагина (Plug-ins), расширяющего функциональность программы. Минусом является то, что в случае, если модуль, который содержит в себе критическую часть, отсутствует, программа не сможет продолжить работу.
Динамические библиотеки хранятся обычно в определенном месте и имеют стандартное расширение. Например, файлы .library в логическом томе Libs: в AmigaOS; в Microsoft Windows и OS/2 файлы библиотек общего пользования имеют расширение .dll; в UNIX‐подобных ОС — обычно .so; в Mac OS — .dylib.
При написании программы программисту достаточно указать транслятору (компилятору или интерпретатору) языка программирования, что следует подключить нужную библиотеку и использовать функцию из неё. Ни исходный текст, ни исполняемый код функции в состав программы на данном этапе не входит.
Статические библиотеки
Могут быть в виде исходного текста, подключаемого программистом к своей программе на этапе написания (например, для языка Fortran существует огромное количество библиотек для решения разных задач именно в исходных текстах), либо в виде объектных файлов, присоединяемых (линкуемых) к исполняемой программе на этапе компиляции (в Microsoft Windows такие файлы имеют расширение .lib, в UNIX‐подобных ОС — обычно .a). В результате программа включает в себя все необходимые функции, что делает её автономной, но увеличивает размер. Без статических библиотек объектных модулей (файлов) невозможно использование большинства современных компилирующих языков и систем программирования: Fortran, Pascal, C, C++ и других.
Примечания
- ↑Wilkes M. V., Wheeler D. J., Gill S. Preparation of Programs for an Electronic Digital Computer. — Addison-Wesley, 1951.
- ↑ Уилкс М., Уиллер Д., Гилл С. «Составление программ для электронных счётных машин». Издательство иностранной литературы, 1953
- ↑Волченскова, Надежда Ивановна, Технология многомашинной реализации и жизнеобеспечения библиотек подпрограмм вычислительной математики на языке Фортран, автореферат к диссертации, 1984
Литература
Николай Джосьютис C++ Стандартная библиотека. Для профессионалов = The C++ Standart Library. A Tutorial and Reference. — СПб. : Питер, 2004. — 730 с. — ISBN 5-94723-635-4
- Библиотеки программ