Фреймворк: различия между версиями
[отпатрулированная версия] | [отпатрулированная версия] |
мНет описания правки |
MBHbot (обсуждение | вклад) м →Примечания: Project talk:Викификатор#Шаблон:Rq, replaced: {{rq|source}} → {{подст:нет источников}} |
||
(не показано 20 промежуточных версий 14 участников) | |||
Строка 1: | Строка 1: | ||
'''Фре́ймворк''' |
'''Фре́ймворк'''; иногда '''''фреймво́рк''''' ([[англицизм]], [[неологизм]] от {{lang-en2|framework}} «[[Несущая конструкция|остов]], каркас, рама; структура») — программная платформа, определяющая структуру программной системы; [[программное обеспечение]], облегчающее разработку и объединение разных компонентов большого программного проекта. |
||
Употребляется также слово |
Употребляется также слово ''каркас'' (а некоторые авторы используют его в качестве основного) в том числе не базируясь вообще на англоязычном аналоге<ref name="Karkas">В. Фаронов. Создание приложений с помощью C#, Москва, ЭКСМО, 2008, с. 12</ref><ref>[http://www.citforum.ru/SE/project/isr/ Методы и технологии реинжиниринга ИС. К. В. Ахтырченко, Т. П. Сорокваша] {{Wayback|url=http://www.citforum.ru/SE/project/isr/ |date=20090803222040 }}, Институт системного программирования [[РАН]]</ref><ref name="gorbunov" />. Можно также говорить о [[v:Каркас архитектуры|каркасном подходе]]<ref name="gorbunov">{{книга|автор=[[Горбунов-Посадов, Михаил Михайлович|Горбунов-Посадов М. М.]]|заглавие=Расширяемые программы|ссылка=http://keldysh.ru/gorbunov/|место=М.|издательство=Полиптих|год=1999|страниц=336|isbn=5-901-11801-4|archive-date=2012-09-20|archive-url=https://web.archive.org/web/20120920094340/http://keldysh.ru/gorbunov/}}</ref> как о подходе к построению программ, где любая конфигурация программы строится из двух частей: |
||
# Постоянная часть — каркас, не меняющийся от конфигурации к конфигурации и несущий в себе гнёзда, в которых размещается вторая, переменная часть; |
# Постоянная часть — каркас, не меняющийся от конфигурации к конфигурации и несущий в себе гнёзда, в которых размещается вторая, переменная часть; |
||
# Сменные модули (или точки расширения). |
# Сменные модули (или точки расширения). |
||
== Отличие от библиотеки == |
== Отличие от библиотеки == |
||
''Фреймворк'' отличается от понятия '''[[Библиотека (программирование)|библиотеки]]''' тем, что последняя может быть использована в программном продукте просто как набор подпрограмм похожей функциональности, не влияя на архитектуру программного продукта и не накладывая на неё никаких ограничений. В то время как ''фреймворк'' диктует правила построения архитектуры приложения, задавая на начальном этапе разработки поведение по умолчанию — «каркас», который нужно будет расширять и изменять согласно указанным требованиям. Пример программного фреймворка — C.M.F. ([[Content Management Framework]]), а пример библиотеки — [[Модуль (программирование)|модуль]] [[Электронная почта|электронной почты]]. |
|||
Также, в отличие от библиотеки, которая объединяет в себе набор близкой функциональности, — «фреймворк» может содержать в себе большое число разных по тематике библиотек. |
Также, в отличие от библиотеки, которая объединяет в себе набор близкой функциональности, — «фреймворк» может содержать в себе большое число разных по тематике библиотек. |
||
Ключевым отличием «фреймворка» от библиотеки является [[инверсия управления]]: пользовательский код вызывает функции библиотеки (или классы) и получает управление после вызова. Во «фреймворке» пользовательский код может реализовывать конкретное поведение, встраиваемое в более общий — «абстрактный» код фреймворка. При этом «фреймворк» вызывает функции ([[Класс (программирование)|классы]]) пользовательского кода<ref>{{cite web|url=http://martinfowler.com/bliki/InversionOfControl.html|title=InversionOfControl|author=Martin Fowler|accessdate=2013-11-05|lang=en|archive-date=2011-01-23|archive-url=https://web.archive.org/web/20110123051630/http://martinfowler.com/bliki/InversionOfControl.html|deadlink=no}}</ref>. |
|||
== Фреймворк программной системы == |
== Фреймворк программной системы == |
||
Строка 16: | Строка 16: | ||
Это '''каркас''' программной системы (или подсистемы). Может включать: вспомогательные программы, библиотеки кода, язык сценариев и другое [[Программное обеспечение|ПО]], облегчающее разработку и объединение разных компонентов большого программного проекта. Обычно объединение происходит за счёт использования единого [[API]]. |
Это '''каркас''' программной системы (или подсистемы). Может включать: вспомогательные программы, библиотеки кода, язык сценариев и другое [[Программное обеспечение|ПО]], облегчающее разработку и объединение разных компонентов большого программного проекта. Обычно объединение происходит за счёт использования единого [[API]]. |
||
'''Примеры:''' веб- |
'''Примеры:''' [[веб-фреймворк]]и, как PHP-фреймворки [[Zend Framework]], [[Laravel]] или [[Symfony]], или [[Django]], написанный на [[Python]]. |
||
== Фреймворк приложения == |
== Фреймворк приложения == |
||
Одно из главных преимуществ при использовании «каркасных» приложений — «стандартность» структуры приложения. «Каркасы» стали популярны с появлением [[Графический интерфейс пользователя|графических интерфейсов пользователя]], которые имели тенденцию к реализации стандартной структуры для приложений. С их использованием стало гораздо проще создавать средства для '''''автоматического''''' создания графических интерфейсов, так как структура внутренней реализации кода приложения стала известна ''заранее.'' Для обеспечения каркаса |
Одно из главных преимуществ при использовании «каркасных» приложений — «стандартность» структуры приложения. «Каркасы» стали популярны с появлением [[Графический интерфейс пользователя|графических интерфейсов пользователя]], которые имели тенденцию к реализации стандартной структуры для приложений. С их использованием стало гораздо проще создавать средства для '''''автоматического''''' создания графических интерфейсов, так как структура внутренней реализации кода приложения стала известна ''заранее.'' Для обеспечения каркаса обычно используются техники [[Объектно-ориентированное программирование|объектно-ориентированного программирования]] (например, части приложения могут наследоваться от базовых классов фреймворка). |
||
Одним из первых коммерческих фреймворков приложения был {{нп5|MacApp}}, написанный [[Apple]] для «[[Macintosh]]». Первоначально созданный с помощью расширенной (объектно-ориентированной) версии языка «[[Object Pascal]]», впоследствии он был переписан на «[[C |
Одним из первых коммерческих фреймворков приложения был {{нп5|MacApp}}, написанный [[Apple]] для «[[Macintosh]]». Первоначально созданный с помощью расширенной (объектно-ориентированной) версии языка «[[Object Pascal]]», впоследствии он был переписан на «[[C++]]». Другие популярные каркасы для «Macintosh» включали: |
||
* {{lang-en2|Metrowerks}} {{нп5|PowerPlant}} и {{нп5|MacZoop}} (все основаны на [[Carbon (API)|Carbon]]); |
* {{lang-en2|Metrowerks}} {{нп5|PowerPlant}} и {{нп5|MacZoop}} (все основаны на [[Carbon (API)|Carbon]]); |
||
Строка 30: | Строка 30: | ||
[[Microsoft]] создала похожий продукт для «[[Windows]]», который называется [[Microsoft Foundation Classes]] (MFC). На данный момент основным продуктом Microsoft для разработки ПО предлагается «[[.NET]]». |
[[Microsoft]] создала похожий продукт для «[[Windows]]», который называется [[Microsoft Foundation Classes]] (MFC). На данный момент основным продуктом Microsoft для разработки ПО предлагается «[[.NET]]». |
||
[[Кроссплатформенное ПО|Кроссплатформенными]] каркасами приложений (для операционных систем «[[Linux]]», «Macintosh» и «Windows») являются, например, {{нп5|widget toolkit}}, [[wxWidgets]], [[Qt]], {{нп5|MyCoRe||de|MyCoRe}} или [[FOX toolkit]]. |
[[Кроссплатформенное ПО|Кроссплатформенными]] каркасами приложений (для операционных систем «[[Linux]]», «Macintosh» и «Windows») являются, например, {{нп5|widget toolkit}}, [[wxWidgets]], [[Qt]], [[.NET]], {{нп5|MyCoRe||de|MyCoRe}} или [[FOX toolkit]]. |
||
== Фреймворк концептуальной модели == |
== Фреймворк концептуальной модели == |
||
Строка 44: | Строка 44: | ||
== См. также == |
== См. также == |
||
* [[Шаблон проектирования]] |
* [[Шаблон проектирования]] |
||
* [[Компьютерная платформа]] |
|||
* [[Мультимедийный фреймворк]] |
* [[Мультимедийный фреймворк]] |
||
* [[CSS-фреймворк]] |
* [[CSS-фреймворк]] |
||
* {{нп3|Фреймворк (значения)||en|Framework}} |
|||
== Примечания == |
== Примечания == |
||
{{примечания}} |
{{примечания}} |
||
{{Навигация}} |
{{Навигация}} |
||
{{Нет источников |дата=2024-10-20}} |
|||
{{rq|source}} |
|||
[[Категория:Программирование]] |
[[Категория:Программирование]] |
Текущая версия от 16:57, 20 октября 2024
Фре́ймворк; иногда фреймво́рк (англицизм, неологизм от 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 года.
В статье не хватает ссылок на источники (см. рекомендации по поиску). |