Фреймворк: различия между версиями
[отпатрулированная версия] | [отпатрулированная версия] |
Метка: отменено |
|||
Строка 41: | Строка 41: | ||
Процесс создания фреймворка заключается в выборе подмножества задач проблемы и их реализаций. В ходе реализаций общие средства решения задач заключаются в конкретных классах, а изменяемые средства — выносятся в точки расширения. |
Процесс создания фреймворка заключается в выборе подмножества задач проблемы и их реализаций. В ходе реализаций общие средства решения задач заключаются в конкретных классах, а изменяемые средства — выносятся в точки расширения. |
||
== См. также == |
|||
* [[Шаблон проектирования]] |
|||
* [[Компьютерная платформа]] |
|||
* [[Мультимедийный фреймворк]] |
|||
* [[CSS-фреймворк]] |
|||
== Примечания == |
== Примечания == |
Версия от 12:41, 20 февраля 2022
Фре́ймворк (иногда фреймво́рк; англицизм, неологизм от 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», впоследствии он был переписан на «С++». Другие популярные каркасы для «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, MyCoRe[нем.] или FOX toolkit.
Фреймворк концептуальной модели
Абстрактное понятие структуры, которое используется в исследованиях для определения возможных способов решения проблемы или представления идеи.
Реализация фреймворка
«Фреймворк» определяется как множество конкретных и абстрактных классов, а также определений способов их взаимоотношения. Конкретные классы обычно реализуют взаимные отношения между классами. Абстрактные классы представляют собой точки расширения, в которых каркасы могут быть использованы или адаптированы.
Точка расширения — это та «часть» фреймворка, для которой не приведена реализация. Соответственно, каркас концептуальной модели состоит из концептуальных классов, а каркас программной системы — из классов языка программирования общего назначения.
Процесс создания фреймворка заключается в выборе подмножества задач проблемы и их реализаций. В ходе реализаций общие средства решения задач заключаются в конкретных классах, а изменяемые средства — выносятся в точки расширения.
Примечания
- ↑ В. Фаронов. Создание приложений с помощью C#, Москва, ЭКСМО, 2008, с. 12
- ↑ Методы и технологии реинжиниринга ИС. К. В. Ахтырченко, Т. П. Сорокваша, Институт системного программирования РАН
- ↑ 1 2 Горбунов-Посадов М. М. Расширяемые программы. — М.: Полиптих, 1999. — 336 с. — ISBN 5-901-11801-4.
- ↑ Martin Fowler. InversionOfControl (англ.). Дата обращения: 5 ноября 2013.
Для улучшения этой статьи желательно:
|