logo
Ещё

Библиотеки в программировании

Библиотеки ускоряют разработку любой программы в десятки раз, благодаря принципу DRY и той идее, что с вашей задачей уже кто-то когда-то сталкивался. Кроме того, правильно выбранные библиотеки позволяют ускорить работу самой программы в десятки раз, NumPY с ее оптимизированными на C математическими операциями – прямое тому подтверждение. Ниже мы расскажем, как библиотеки спасают разработчиков программного обеспечения, что вообще эти библиотеки собой представляют, как ими пользоваться и чем библиотеки отличаются от фреймворков.


Зачем нужны библиотеки

Первым делом необходимо дать определение рассматриваемого термина. Применительно к программированию, под библиотекой понимается набор готовых объектов, функций, классов и других вспомогательных инструментов, которые необходимые для решения различных задач при создании ПО. Главным преимуществом ее использования становится отсутствие необходимости постоянно изобретать велосипед в ситуации, когда можно воспользоваться уже имеющимся. Причем наверняка не хуже, а даже лучше выполненным.

Что особенно актуально для так называемых DRY и повторяющихся задач, так как в данном случае экономится максимально возможное количество времени. Выше эти термины уже звучали. Здесь мы раскроем эту тему глубже.

DRY расшифровывается как Don’t Repeat Yourself, «Не повторяй себя». Этот принцип программирования в разумной мере применим к любой ситуации, его суть – если что-то нужно делать несколько раз, то лучше вынести это в отдельную функцию с необходимыми параметрами и вызывать эту функцию так часто, как это потребуется. Предположим, что ваше приложение ожидает ввода из консоли каких-либо чисел несколько раз в программе, при этом вам нужно убедиться, что вводятся именно числа – в противном случае возвращается -1. Код для решения задачи на Python: 

def user_input():

storage = input()

if not storage.isnumeric:

return -1

return storage

Здесь мы упаковали проверку в функцию, и вам остается только вызвать user_input(). Если бы мы этого не делали, в каждом месте приложения, где вам нужно было бы получить ввод от пользователя, вам пришлось бы писать новую проверку ввода – DRY как раз говорит о том, что так делать не надо. Так вот, если вы вынесете все такие повторяющиеся функции (или классы, например) в отдельный файл и подключите этот файл через #include – вы получите готовую библиотеку ваших исходных кодов.

Но вам не обязательно писать ее самому. Поскольку с большинством задач уже кто-то сталкивался, давно был создан список стандартных библиотек, решающих те или иные задачи. Некоторые библиотеки поставляются сразу с языком, другие же нужно искать и подключать самостоятельно. Принцип при этом не меняется – вы пишете #include, подключаете библиотеку к своему коду и пользуетесь уже готовыми решениями конкретных задач.

Еще один не менее наглядный пример, который касается использования популярного языка программирования Python. Подключение библиотеки Requests позволяет быстро и без проблем – буквально парой строк программного кода – оформить запрос в отношении любого сервера. Он имеет следующий очень простой и лаконичный вид.

#Подключение библиотеки для отправки запросов

import requests

url = "Адрес сервера"

#Отправляем запрос и помещаем ответ в переменную response

response = requests.get(url)

#Парсим данные из формата JSON в словарь

data = response.json()

Результатом становится отправление запроса по указанному в программе адресу. Если решать подобную задачу самостоятельно, то есть без задействования готовой и уже скомпонованной библиотеки, потребуется написание нескольких тысяч строк исходного программного кода.

Виды библиотек

Вы можете подключить либо динамическую библиотеку, либо статическую библиотеку. Сразу скажем, что если вы только начинаете программировать – для вас не будет никакой разницы. Кроме того, вид библиотеки неважен для интерпретируемых языков, вроде Python или JavaScript – интерпретатор сам во всем разберется.

Динамические библиотеки распространяются в виде объектных файлов – то есть с уже скомпилированным двоичным программным кодом. Для разных языков существуют разные расширения файлов, но особенно «примелькались» dll расширения – DLL Windows, стандартные расширения для Windows. Они поставляются сразу с операционной системой и позволяют быстро решать задачи, связанные с OC. «Фишка» динамических библиотек состоит как раз в том, что они прекомпилированы – их не нужно компилировать при подключении и обращении к ним, достаточно просто указать путь к библиотеке и вызвать нужный метод. Динамические библиотеки работают быстрее, но не позволяют заглянуть в исходники – вы увидите нечитаемый двоичный код.

Статические библиотеки не скомпилированы – то есть это файл с кодом. Когда вы подключаете их, компилятор сначала должен эти библиотеки скомпилировать, после чего уже их методы будут использоваться в программе. Статические библиотеки более медленные в работе, но вы можете заглянуть непосредственно в код вызываемой функции и посмотреть, что там происходит.

Отличие библиотеки от фреймворка

Если библиотека предлагает набор функций для решения каких-либо задач, то фреймворк идет дальше – он насаждает разработку приложений определенным образом. Любой программист, который брался за разработку программного обеспечения, знает, что продумать архитектуру приложения – сложная и изнурительная задача, которая сводится к выбору лучшего варианта в условиях неопределенности. Фреймворк решает всю эту задачу: он представляет собой каркас приложения, и вы вынуждены работать только в рамках этого каркаса. В этом есть как плюсы, так и минусы. Плюсы: выбор делают за вас, вам нужно только следовать ему; фреймворк имеет в себе готовые библиотеки. Минусы: фреймворк заставляет вас держать в коде ненужные инструменты; фреймворк может мешать решать необычную задачу. В больших проектах фреймворки необходимы, поскольку они существенно ускоряют разработку.

Где применяются

Библиотеки применяются везде. Если для небольшого проекта вы можете при желании написать свой код с нуля, то в больших проектах библиотеки жизненно необходимы, без них скорость разработки будет примерно равна нулю.

Кто создает новые

Любой программист, который способен засунуть набор подпрограмм в отдельный файл, может создать библиотеку. Крупные библиотеки разрабатываются крупными компаниями, обычно тематика библиотеки пересекается с работой компании – к примеру, Microsoft выпускает библиотеки для работы с функциями Windows.

Наиболее часто применяемая классификация библиотек предусматривает разделение на открытые (бесплатные) и закрытые (коммерческие). Первые разрабатываются различными сообществами программистов, каждый из которых вносит свои изменений или сообщает об ошибках непосредственному автору. Такая возможность обеспечивается отсутствием необходимости запрашивать право доступа к исходному коду библиотеки, так как он предоставляется бесплатно. Например, при регистрации на определенном сайте.

Вторые – то есть закрытые или коммерческие – создаются компаниями, в штате которых присутствуют как программисты, так и тестировщики. Цель разработки – получение на выходе коммерческого продукта для дальнейшего продвижения на рынок или решения других задач, способствующих зарабатыванию прибыли.

Как добавляются библиотеки

Зависит от языка, но обычно исполняемый код подключается через инструкцию include, после которой следует адрес библиотеки, которую нужно подключить. В зависимости от способа подключения различают два типа библиотек:

  1. Динамические. Принцип работы предусматривает подключение машинного кода непосредственно в процессе исполнения программы. Если необходимо, его можно заменить, что становится как плюсом, так и минусом динамических библиотек. Дело в том, что замена с равным успехом происходит как на что-то хорошее и полезное, так и на вредоносный вирус.
  2. Статические. В этом случае речь идет об объектном модуле или исходном коде, написанном на языке программы, которую использует разработчик. Замена библиотеки в подобной ситуации представляет собой нетривиальную задачу, решение которой требует серьезных усилий и временных затрат.

Можно ли обойтись без них

В маленьком проекте – можно, хотя это будет непросто. В большом проекте без библиотек обойтись нереально. Такой подход к программированию сопровождается очень большими трудозатратами, что исключает успешную коммерческую деятельность по продвижению готового продукта.

Еще одним существенным плюсом использования библиотек становится высокий уровень безопасности их содержимого. Хотя бы по причине постоянного и обязательного тестирования. Если заниматься написанием кода с нуля, добиться такого уровня отладки и отточенности программного обеспечения попросту не получится.

Почему важно уметь работать с библиотеками

Потому что как мы и говорили выше, большинство задач уже давно решили за вас. Умение искать библиотеки и пользовать ими в сотни раз повышает вашу продуктивность, если мы говорим об умении превратить идею в работающий проект. Вам не обязательно знать все библиотеки мира (к тому же это невозможно), но вы должны уметь искать их (то есть, пользоваться гуглом).

Что почитать по теме

Подведем итоги

Тезисно:

  • Библиотека – это набор готовых решений (в виде функций и классов), вынесенный в отдельный файл.
  • Библиотеки нужны для того, чтобы вы не писали повторно решение какой-либо задачи.
  • Библиотека отличается от фреймворка тем, что фреймворк навязывает вам конкретный подход к решению задачи, библиотека же просто дает инструмент.
  • Любому программисту, желающему зарабатывать на программировании, нужно уметь пользоваться библиотеками. Начать стоит со стандартных библиотек языка, на котором вы пишете.
Часто ищут