Фре́ймворк; иногда фреймво́рк (англицизм, неологизм от framework «остов, каркас, рама; структура») — программная платформа, определяющая структуру программной системы; программное обеспечение, облегчающее разработку и объединение разных компонентов большого программного проекта.
Употребляется также слово каркас (а некоторые авторы используют его в качестве основного) в том числе не базируясь вообще на англоязычном аналоге[1][2][3]. Можно также говорить о каркасном подходе[3] как о подходе к построению программ, где любая конфигурация программы строится из двух частей:
- Постоянная часть — каркас, не меняющийся от конфигурации к конфигурации и несущий в себе гнёзда, в которых размещается вторая, переменная часть;
- Сменные модули (или точки расширения).
Отличие от библиотеки
правитьФреймворк отличается от понятия библиотеки тем, что последняя может быть использована в программном продукте просто как набор подпрограмм похожей функциональности, не влияя на архитектуру программного продукта и не накладывая на неё никаких ограничений. В то время как фреймворк диктует правила построения архитектуры приложения, задавая на начальном этапе разработки поведение по умолчанию — «каркас», который нужно будет расширять и изменять согласно указанным требованиям. Пример программного фреймворка — C.M.F. (Content Management Framework), а пример библиотеки — модуль электронной почты.
Также, в отличие от библиотеки, которая объединяет в себе набор близкой функциональности, — «фреймворк» может содержать в себе большое число разных по тематике библиотек.
Ключевым отличием «фреймворка» от библиотеки является инверсия управления: пользовательский код вызывает функции библиотеки (или классы) и получает управление после вызова. Во «фреймворке» пользовательский код может реализовывать конкретное поведение, встраиваемое в более общий — «абстрактный» код фреймворка. При этом «фреймворк» вызывает функции (классы) пользовательского кода[4].
Фреймворк программной системы
правитьЭто каркас программной системы (или подсистемы). Может включать: вспомогательные программы, библиотеки кода, язык сценариев и другое ПО, облегчающее разработку и объединение разных компонентов большого программного проекта. Обычно объединение происходит за счёт использования единого API.
Примеры: веб-фреймворки, как PHP-фреймворки Zend Framework, Laravel или Symfony, или Django, написанный на Python.
Фреймворк приложения
правитьОдно из главных преимуществ при использовании «каркасных» приложений — «стандартность» структуры приложения. «Каркасы» стали популярны с появлением графических интерфейсов пользователя, которые имели тенденцию к реализации стандартной структуры для приложений. С их использованием стало гораздо проще создавать средства для автоматического создания графических интерфейсов, так как структура внутренней реализации кода приложения стала известна заранее. Для обеспечения каркаса обычно используются техники объектно-ориентированного программирования (например, части приложения могут наследоваться от базовых классов фреймворка).
Одним из первых коммерческих фреймворков приложения был MacApp[англ.], написанный Apple для «Macintosh». Первоначально созданный с помощью расширенной (объектно-ориентированной) версии языка «Object Pascal», впоследствии он был переписан на «C++». Другие популярные каркасы для «Macintosh» включали:
- Metrowerks PowerPlant[англ.] и MacZoop[англ.] (все основаны на Carbon);
- WebObjects[англ.] от NeXT.
В различной степени фреймворки приложения представляют собой «Cocoa» для Mac OS X, а также свободные фреймворки, существующие как часть проектов Mozilla, OpenOffice.org, GNOME и KDE.
Microsoft создала похожий продукт для «Windows», который называется Microsoft Foundation Classes (MFC). На данный момент основным продуктом Microsoft для разработки ПО предлагается «.NET».
Кроссплатформенными каркасами приложений (для операционных систем «Linux», «Macintosh» и «Windows») являются, например, widget toolkit[англ.], wxWidgets, Qt, .NET, MyCoRe[нем.] или FOX toolkit.
Фреймворк концептуальной модели
правитьАбстрактное понятие структуры, которое используется в исследованиях для определения возможных способов решения проблемы или представления идеи.
Реализация фреймворка
править«Фреймворк» определяется как множество конкретных и абстрактных классов, а также определений способов их взаимоотношения. Конкретные классы обычно реализуют взаимные отношения между классами. Абстрактные классы представляют собой точки расширения, в которых каркасы могут быть использованы или адаптированы.
Точка расширения — это та «часть» фреймворка, для которой не приведена реализация. Соответственно, каркас концептуальной модели состоит из концептуальных классов, а каркас программной системы — из классов языка программирования общего назначения.
Процесс создания фреймворка заключается в выборе подмножества задач проблемы и их реализаций. В ходе реализаций общие средства решения задач заключаются в конкретных классах, а изменяемые средства — выносятся в точки расширения.
См. также
правитьПримечания
править- ↑ В. Фаронов. Создание приложений с помощью C#, Москва, ЭКСМО, 2008, с. 12
- ↑ Методы и технологии реинжиниринга ИС. К. В. Ахтырченко, Т. П. Сорокваша Архивная копия от 3 августа 2009 на Wayback Machine, Институт системного программирования РАН
- ↑ 1 2 Горбунов-Посадов М. М. Расширяемые программы. — М.: Полиптих, 1999. — 336 с. — ISBN 5-901-11801-4. Архивировано 20 сентября 2012 года.
- ↑ Martin Fowler. InversionOfControl (англ.). Дата обращения: 5 ноября 2013. Архивировано 23 января 2011 года.
В статье не хватает ссылок на источники (см. рекомендации по поиску). |