Какая разница между классами-«пространствами имён» и библиотеками функций?
Мне нужно реализовать функции, к примеру, по работе с аккаунтами в проекте. Сейчас у меня это файл player_func.php с набором функций с названиями player_* для удобства. Имеет ли плюсы вот такой вариант: создание файла с классом Player , а в нём все нужные функции как методы. К примеру, раньше
player_register();
Player::register();
Я обсуждаю не функции VS объекты, а функции VS классы в качестве «пространств имён».
Отслеживать
Олег Архипов
задан 24 мар 2012 в 10:53
Олег Архипов Олег Архипов
1,315 1 1 золотой знак 16 16 серебряных знаков 38 38 бронзовых знаков
Мне кажется, что вариант с классом лучше. Однотипные функции собраны в одном классе, что немного упрощает понимание работы программы.
24 мар 2012 в 11:24
@ReinRaus, ну в случае с функциями понимание улучшали префиксы.
24 мар 2012 в 13:18
Скромное ИМХО — если используете функциональный подход и классы если и будут применяться то исключительно для организации кода — лучше использовать пространства имен, либо, как вы уже писали — префиксы. **** Не много не в тему, но — с применением функционального подхода можно писать на ура, особенно если с умом использовать безымянные функции.
24 мар 2012 в 15:02
@AlexWindHope, я пока больше в функциональном стиле (вроде он правильно называется «процедурный»?). А что вы имеете в виду под >> безымянные функции
24 мар 2012 в 15:08
Например у вас есть массив с функциями для валидации, количество функций и то, что они делают — никому не известно. Мы пишем функцию для добавления функции валидатора, функцию для получения результатов в виде (есть ошибка — или нету) и функцию для получения сообщений ошибок (если они есть). Это к примеру. Так-же, например, вы можете имитировать что-то типа событий и подписчиков без ООП. Вообще для того что-бы очень хорошо понимать как этим пользоваться надо хорошо знать языки аля javascript, lisp etc. Но и так, думаю, полет фантазий я открыл, а если нет — забудьте об этом и не парьтесь
Зачем нужны фреймворки и библиотеки

Работа с библиотеками и фреймворками — базовый навык для девелопера. Хотя оба инструмента помогают строить архитектуру программ, а разработчики часто используют их как синонимы, между ними есть различия.
Объясняем, что выбрать для решения ваших задач.
«Чужой» код
И фреймворки, и библиотеки — это код, который до вас написал другой разработчик. Этот код используют, когда решают однотипные задачи или распространенные проблемы.
Принцип разработки программного обеспечения 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
Фреймворки и библиотеки: что нужно знать IT рекрутерам
Почему нужно знать о фреймворках и библиотеках? Как IT рекрутер, вам уже недостаточно знать только названия определенных языков программирования – вы также должны понимать основы того, как создается программное обеспечение.
Когда речь заходит о создании производственного программного обеспечения, необходимо учитывать два очень важных фактора: во-первых — разработка приложений становится все более сложной. Во-вторых, программисты всегда стараются быть более результативными в своей работе. В результате каждая команда программистов должна решить, следует (или нет) создавать приложение, используя либо фреймворк, либо библиотеку ПО (или несколько библиотек).
По той же причине вы должны знать, какие библиотеки и фреймворки имеют отношение к определенной должности, на которую вы подбираете сотрудников. Так как сможете найти разработчиков, наиболее подходящих для вакансии. Полное понимание того, как языки программирования, фреймворки и библиотеки работают вместе, позволит вам действительно выделиться на фоне коллег (а также позволит вам чувствовать себя более уверенно, когда вы говорите «о технологиях») с кандидатами.
В чем разница между фреймворком и библиотекой?
Основное различие заключается в вопросе о том, кто контролирует определенные ключевые действия в процессе создания программного обеспечения (и когда программное обеспечение фактически работает).
Например, когда разработчик использует функцию из библиотеки, он контролирует – другими словами, код разработчика полностью контролирует последовательность событий. Однако в случае фреймворка направление управления инвертируется (это называется инверсией управления), поскольку фреймворк управляет разработчиком – в данном случае фреймворк управляет кодом разработчика. В каком-то смысле фреймворк работает так же, как и так называемый голливудский принцип: «Не звони нам, мы тебе позвоним».
Итак, что же такое фреймворки и библиотеки? В частности, в чем разница между этими двумя понятиями?
Какова цель фреймворков и библиотек?
Как вы, вероятно, знаете, код приложения, написанный программистами, постоянно меняется по мере того, как приложение, над которым они работают, развивается. Однако фреймворки и библиотеки являются фундаментальными строительными блоками, которые не меняются и используются в качестве структуры конкретного приложения. Как библиотеки, так и фреймворки были разработаны программистами для сокращения необходимости выполнения повторяющихся задач снова и снова. Они также могут обеспечить некоторую функциональность без необходимости реализовывать ее с нуля.
Что такое библиотеки в кодировании?
Библиотека — это набор функций, к которым разработчик может получить доступ. Библиотека обычно организована в так называемые «классы». Вся идея такой библиотеки заключается в том, что она содержит код, который можно повторно использовать для определенной цели в определенном домене. Таким образом, библиотека упрощает конкретные задачи, предоставляя набор общих функциональных возможностей. Затем они готовы к использованию в программном обеспечении. Например, большинство языков программирования предоставляют библиотеки для функциональных возможностей, таких как форматирование строки или ведение журнала исключений, которые могут возникнуть. Используя соответствующие библиотеки, разработчики могут сократить объем кода, который им необходимо написать. В то же время хорошо известные библиотеки имеют хорошую документацию и были протестированы. Поэтому в большинстве случаев IT специалистам лучше пользоваться библиотекой, а не тратить время и силы на написание, тестирование и документирование собственного кода.
Что такое фреймворк в программировании?
Фреймворк можно описать как архитектуру, которая облегчает реализацию программного обеспечения хорошо организованным образом. Такая структура воплощает некоторую заранее определенную абстрактную конструкцию, которая связана с более встроенным поведением, чем в случае с библиотекой. В фреймворке весь поток управления уже находится на месте, где разработчики могут разместить свой собственный код. В результате фреймворк определяет скелет, в котором разработчики конкретного приложения определяют свои собственные функции для заполнения этого самого скелета. Другими словами, фреймворк можно рассматривать как набор шаблонов и библиотек, которые помогают программистам создавать приложения. С другой стороны, фреймворк также диктует архитектуру приложения. Например, он будет определять общую структуру, разделение на классы, ключевые обязанности классов и способы взаимодействия объектов.
Когда лучше использовать фреймворк и библиотеки?
Как и в случае с любой реальной проблемой, это сложный вопрос, на который трудно дать четкий ответ в каждом конкретном случае. Например, команда с большим количеством младших разработчиков может быть лучше с фреймворком, который, следовательно, обеспечивает определенную структуру и определенные стандарты, диктуя команде, как она должна создавать продукт. С другой стороны, опытной команде, работающей над приложением, которое не является заурядным и имеет нишевую функциональность, может быть лучше использовать библиотеку (или библиотеки), а не фреймворк, потому что это дает им большую гибкость и контроль. В более экстремальных случаях, возможно, даже лучше для конкретной команды разработчиков создавать ПО полностью с нуля, не используя ни фреймворк, ни библиотеки.
На что обращать внимание при отборе кандидатов, которым необходимо знать определенные фреймворки и библиотеки?
Вот мини-FAQ о том, как языки программирования, фреймворки и программные библиотеки используются в реальном мире. Там, где это уместно, мы также добавили некоторые предложения о том, на что следует обращать внимание при отборе кандидатов.
Вопрос: Могут ли программисты кодировать приложение без библиотеки или фреймворка, но используя только свой собственный код, написанный с нуля?
Ответ: Да, они могут, но это всегда займет больше времени.
Вопрос: Могут ли программисты кодировать приложение, используя фреймворк плюс какой-то свой собственный код?
Ответ: Да, они могут.
Вопрос: Могут ли программисты программировать приложение, используя либо одну библиотеку (или несколько библиотек), либо часть своего собственного кода?
Ответ: Да, они могут.
Вопрос: Могут ли программисты написать свою собственную библиотеку?
Ответ: Да, и большинство программистов делают это в процессе своей собственной работы. Это один из лучших способов избежать любой формы дублирования, которая не нравится всем разработчикам. Они иногда решают выпустить в сообщество библиотеки, которые оказались особенно полезными. Как рекрутер, стоит спросить кандидатов, сделали ли они какие-либо такие вещи с открытым исходным кодом.
Вопрос: Могут ли программисты кодировать приложение, используя фреймворк плюс одну библиотеку (или несколько библиотек) плюс свой собственный код?
Ответ: Да, они могут. Если команда разработчиков уже знакома с фреймворком и соответствующими библиотеками, и конкретный фреймворк хорошо подходит для той области, в которой будет работать новое программное обеспечение, то такой подход, скорее всего, будет наиболее эффективным и действенным. Это означает, что при подборе персонала вы ищете разработчиков, которые уже знакомы с фреймворками и библиотеками, используемыми вашей командой в данный момент.
Вопрос: Возможно ли, чтобы библиотека устарела?
Ответ: Да, но это вряд ли произойдет с хорошо известной библиотекой, которая обеспечивает значительную функциональность.
Вопрос: Возможно ли, чтобы фреймворк устарел?
Ответ: Да, и это один из потенциальных недостатков использования фреймворка. Фреймворки приходят и уходят, и даже если фреймворк популярен в течение длительного времени, любой фреймворк может резко измениться от одной основной версии к другой основной версии. Конечно, создатели популярных фреймворков пытаются ограничить такие изменения, но это может произойти и происходит. Вы должны стараться быть в курсе, по крайней мере, основных изменений в рамках, используемых вашей командой.
Вопрос: Могут ли программисты создать свой собственный фреймворк?
Ответ: Да. После того, как команда программистов закончила создание нового типа программного обеспечения, довольно часто случается, что, основываясь на своем конкретном опыте, они позже создают структуру, которая предназначена для того, чтобы сделать возможным создание аналогичного типа ПО способом, который значительно более эффективен. Это хорошая идея, чтобы просмотреть резюме и увидеть был такой опыт у кандидата.
Вывод
Как IT рекрутер, очень важно, чтобы вы отбирали кандидатов не только с точки зрения языков программирования, но и с точки зрения фреймворков и библиотек.
Связи между языковыми компонентами и типами библиотек
Определение языка C# требует, чтобы стандартная библиотека имела определенные типы, а также определенные доступные члены этих типов. Компилятор создает код, использующий эти необходимые типы и члены для многих разных языковых компонентов. По этой причине версии C# поддерживаются только для соответствующей версии .NET и более новой. Это гарантирует правильное поведение во время выполнения и доступность всех необходимых типов и членов.
Эта зависимость от функциональности стандартной библиотеки входила в состав языка C# с самой первой версии. В эту версию были включены следующие примеры:
- Exception — используется для всех исключений, созданных компилятором.
- String — синоним string .
- Int32 — синоним int .
Эта первая версия была простой: компилятор и стандартная библиотека поставлялись вместе, и для каждого из них была только одна версия.
В последующих версиях C# в число зависимостей иногда добавлялись новые типы или члены. Примеры: INotifyCompletion, CallerFilePathAttributeи CallerMemberNameAttribute. C# 7.0 добавил зависимость для ValueTuple реализации функции языка кортежей . Для C# 8 требуются System.IndexSystem.Rangeдиапазоны и индексы, среди прочего. Каждая новая версия может добавить дополнительные требования.
Группа разработчиков языка стремится минимизировать контактную зону типов и членов, необходимых в совместимой стандартной библиотеке. Эта задача уравновешивается потребностью в простой структуре, когда новые функции библиотек легко внедряются в язык. В будущих версиях C# появятся функции, требующие новых типов и членов в стандартной библиотеке. Средства компилятора C# теперь отделены от цикла выпуска библиотек .NET на поддерживаемых платформах.
Совместная работа с нами на GitHub
Источник этого содержимого можно найти на GitHub, где также можно создавать и просматривать проблемы и запросы на вытягивание. Дополнительные сведения см. в нашем руководстве для участников.