Фреймворк: различия между версиями

Материал из Википедии — свободной энциклопедии
Перейти к навигации Перейти к поиску
[непроверенная версия][отпатрулированная версия]
Содержимое удалено Содержимое добавлено
м Примечания: Project talk:Викификатор#Шаблон:Rq, replaced: {{rq|source}} → {{подст:нет источников}}
 
(не показана 41 промежуточная версия 29 участников)
Строка 1: Строка 1:
'''Фре́ймворк''', иногда '''''фреймво́рк''''' ([[англицизм]], [[неологизм]] от {{lang-en2|[[wikt:framework#Английский|framework]]}} «[[Несущая конструкция|остов]], [[Каркас_(конструкция)|каркас]], структура») — заготовки, шаблоны для [[Компьютерная платформа|программной платформы]], определяющие архитектуру бизнес-приложения; бизнес-приложение, облегчающее разработку по методологии SCRUM и объединение разных модулей программного проекта.
'''Фре́ймворк'''; иногда '''''фреймво́рк''''' ([[англицизм]], [[неологизм]] от {{lang-en2|framework}} «[[Несущая конструкция|остов]], каркас, рама; структура») — программная платформа, определяющая структуру программной системы; [[программное обеспечение]], облегчающее разработку и объединение разных компонентов большого программного проекта.


Уместно использование термина «каркас». Некоторые авторы используют его в качестве основного, не опираясь на англоязычный аналог<ref name="Karkas">В. Фаронов. Создание бизнес-приложений с помощью C#, Москва, ЭКСМО, 2008, с. 12</ref><ref>[http://www.citforum.ru/SE/project/isr/ Методы и технологии реинжиниринга ИС. К. В. Ахтырченко, Т. П. Сорокваша], Институт системного программирования [[РАН]]</ref><ref name="gorbunov" />. Можно также говорить о [[v:Каркас архитектуры|каркасном подходе]]<ref name="gorbunov">{{книга|автор=[[Горбунов-Посадов, Михаил Михайлович|Горбунов-Посадов М. М.]]|заглавие=Расширяемые программы|ссылка=http://keldysh.ru/gorbunov/|место=М.|издательство=Полиптих|год=1999|страниц=336|isbn=5-901-11801-4}}</ref> как о подходе к построению программ, где любая конфигурация бизнес-приложения строится из двух частей:
Употребляется также слово ''каркас'' (а некоторые авторы используют его в качестве основного) в том числе не базируясь вообще на англоязычном аналоге<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]]), а пример библиотеки — [[Модуль (программирование)|модуль]] [[Электронная почта|электронной почты]].
''Фреймворк'' отличается от понятия '''[[Библиотека (программирование)|библиотеки]]''' тем, что последняя может быть использована в программном продукте просто как набор подпрограмм похожей функциональности, не влияя на архитектуру программного продукта и не накладывая на неё никаких ограничений. В то время как ''фреймворк'' диктует правила построения архитектуры приложения, задавая на начальном этапе разработки поведение по умолчанию — «каркас», который нужно будет расширять и изменять согласно указанным требованиям. Пример программного фреймворка — 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}}</ref>.
Ключевым отличием «фреймворка» от библиотеки является [[инверсия управления]]: пользовательский код вызывает функции библиотеки (или классы) и получает управление после вызова. Во «фреймворке» пользовательский код может реализовывать конкретное поведение, встраиваемое в более общий — «абстрактный» код фреймворка. При этом «фреймворк» вызывает функции ([[Класс (программирование)|классы]]) пользовательского кода<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>.


== Фреймворк программной системы ==
== Фреймворк программной системы ==
[[Файл:Python Powered.png|thumb]]
Это '''каркас''' программной системы (или подсистемы). Может включать: вспомогательные программы, библиотеки кода, язык сценариев и другое [[Программное обеспечение|ПО]], облегчающее разработку и объединение разных компонентов большого программного проекта. Обычно объединение происходит за счёт использования единого [[API]].
Это '''каркас''' программной системы (или подсистемы). Может включать: вспомогательные программы, библиотеки кода, язык сценариев и другое [[Программное обеспечение|ПО]], облегчающее разработку и объединение разных компонентов большого программного проекта. Обычно объединение происходит за счёт использования единого [[API]].


'''Примеры:''' веб-каркасы, такие [[Rocket]] на [[Rust_(язык_программирования)|Rust]], [[Laravel]], [[Zend Framework]] и [[Symfony]] на PHP, [[Django]], написанный на [[Python]].
'''Примеры:''' [[веб-фреймворк]]и, как PHP-фреймворки [[Zend Framework]], [[Laravel]] или [[Symfony]], или [[Django]], написанный на [[Python]].


== Фреймворк бизнес-приложения ==
== Фреймворк приложения ==
Одно из главных преимуществ при использовании «каркасных» бизнес-приложений — «стандартность» бизнес-структуры бизнес-приложения. «Каркасы» стали популярны с появлением [[Графический интерфейс пользователя|графических интерфейсов пользователя]], которые имели тенденцию к реализации стандартной бизнес-структуры для бизнес-приложений. С их использованием стало гораздо проще создавать бизнес-средства для '''''автоматического''''' создания графических интерфейсов, так как бизнес-структура внутренней бизнес-реализации кода бизнес-приложения стала известна ''заранее.'' Для обеспечения каркаса обычно используются бизнес-техники [[Объектно-ориентированное программирование|объектно-ориентированного программирования]] (например, части бизнес-приложения могут наследоваться от базовых бизнес-классов фреймворка).
Одно из главных преимуществ при использовании «каркасных» приложений — «стандартность» структуры приложения. «Каркасы» стали популярны с появлением [[Графический интерфейс пользователя|графических интерфейсов пользователя]], которые имели тенденцию к реализации стандартной структуры для приложений. С их использованием стало гораздо проще создавать средства для '''''автоматического''''' создания графических интерфейсов, так как структура внутренней реализации кода приложения стала известна ''заранее.'' Для обеспечения каркаса обычно используются техники [[Объектно-ориентированное программирование|объектно-ориентированного программирования]] (например, части приложения могут наследоваться от базовых классов фреймворка).


Одним из первых коммерческих фреймворков бизнес-приложения был {{нп5|MacApp}}, написанный [[Apple]] для [[Macintosh]]. Первоначально созданный с помощью расширенной (объектно-ориентированной) версии языка [[Object Pascal]], впоследствии он был переписан на [[C++|С++]]. Другие популярные каркасы для Macintosh включали:
Одним из первых коммерческих фреймворков приложения был {{нп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]]);
* {{нп5|WebObjects}} от [[NeXT]].
* {{нп5|WebObjects}} от [[NeXT]].


В различной степени фреймворки бизнес-приложения представляют собой [[Cocoa]] для [[Mac OS X]], а также [[Свободное ПО|свободные]] фреймворки, существующие как часть бизнес-проектов [[Mozilla application framework|Mozilla]], [[OpenOffice.org]], [[GNOME]] и [[KDE]].
В различной степени фреймворки приложения представляют собой «[[Cocoa]]» для [[Mac OS X]], а также [[Свободное ПО|свободные]] фреймворки, существующие как часть проектов [[Mozilla application framework|Mozilla]], [[OpenOffice.org]], [[GNOME]] и [[KDE]].


[[Microsoft]] создала похожее бизнес-приложение для [[Windows]], который называется [[Microsoft Foundation Classes]] (MFC). На данный момент основным бизнес-приложением Microsoft для разработки бизнес-приложений предлагается [[.NET Framework]].
[[Microsoft]] создала похожий продукт для «[[Windows]]», который называется [[Microsoft Foundation Classes]] (MFC). На данный момент основным продуктом Microsoft для разработки ПО предлагается «[[.NET]]».


[[Кроссплатформенное ПО|Кроссплатформенными]] каркасами бизнес-приложений (для операционных систем [[Linux]], Macintosh и Windows) являются, например, Unity 3D, {{нп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]].


== Фреймворк концептуальной бизнес-модели ==
== Фреймворк концептуальной модели ==
Абстрактное понятие бизнес-структуры, которое используется в бизнес-исследованиях для определения возможных способов решения бизнес-проблемы или представления бизнес-идеи.
Абстрактное понятие структуры, которое используется в исследованиях для определения возможных способов решения проблемы или представления идеи.


== Бизнес-реализация фреймворка ==
== Реализация фреймворка ==
«Фреймворк» определяется как множество конкретных и [[абстрактный класс|абстрактных классов]]. А также бизнес-определений способов их бизнес-взаимоотношения. Конкретные бизнес-классы обычно реализуют взаимные отношения между бизнес-классами. Абстрактные бизнес-классы представляют собой ''точки расширения'', в которых каркасы могут быть использованы или адаптированы.
«Фреймворк» определяется как множество конкретных и [[абстрактный класс|абстрактных классов]], а также определений способов их взаимоотношения. Конкретные классы обычно реализуют взаимные отношения между классами. Абстрактные классы представляют собой ''точки расширения'', в которых каркасы могут быть использованы или адаптированы.


''Точка расширения'' — это та «часть» фреймворка, для которой не приведена бизнес-реализация. Соответственно. Каркас концептуальной бизнес-модели состоит из [[концептуальные классы|концептуальных классов]]. А каркас бизнес-приложения — из классов [[язык программирования|языка программирования]] общего бизнес-назначения.
''Точка расширения'' — это та «часть» фреймворка, для которой не приведена реализация. Соответственно, каркас концептуальной модели состоит из [[концептуальные классы|концептуальных классов]], а каркас программной системы — из классов [[язык программирования|языка программирования]] общего назначения.


Бизнес-процесс создания фреймворка заключается в выборе подмножества задач проблем и их бизнес-реализаций. В ходе бизнес-реализаций общие средства решения бизнес-задач заключаются в конкретных бизнес-классах, а изменяемые бизнес-средства — выносятся в точки расширения.
Процесс создания фреймворка заключается в выборе подмножества задач проблемы и их реализаций. В ходе реализаций общие средства решения задач заключаются в конкретных классах, а изменяемые средства — выносятся в точки расширения.


== См. также ==
== См. также ==
* [[Шаблон проектирования]]
* [[Шаблон проектирования]]
* [[Компьютерная платформа]]
* [[Мультимедийный фреймворк]]
* [[Мультимедийный фреймворк]]
* [[CSS-фреймворк]]
* [[CSS-фреймворк]]
* {{нп3|Фреймворк (значения)||en|Framework}}


== Примечания ==
== Примечания ==
{{примечания}}
{{примечания}}


== Ссылки ==
{{Навигация}}
{{Навигация}}


{{Нет источников |дата=2024-10-20}}
{{rq|source}}


[[Категория:Программирование]]
[[Категория:Программирование]]

Текущая версия от 16:57, 20 октября 2024

Фре́ймворк; иногда фреймво́рк (англицизм, неологизм от framework «остов, каркас, рама; структура») — программная платформа, определяющая структуру программной системы; программное обеспечение, облегчающее разработку и объединение разных компонентов большого программного проекта.

Употребляется также слово каркас (а некоторые авторы используют его в качестве основного) в том числе не базируясь вообще на англоязычном аналоге[1][2][3]. Можно также говорить о каркасном подходе[3] как о подходе к построению программ, где любая конфигурация программы строится из двух частей:

  1. Постоянная часть — каркас, не меняющийся от конфигурации к конфигурации и несущий в себе гнёзда, в которых размещается вторая, переменная часть;
  2. Сменные модули (или точки расширения).

Отличие от библиотеки

[править | править код]

Фреймворк отличается от понятия библиотеки тем, что последняя может быть использована в программном продукте просто как набор подпрограмм похожей функциональности, не влияя на архитектуру программного продукта и не накладывая на неё никаких ограничений. В то время как фреймворк диктует правила построения архитектуры приложения, задавая на начальном этапе разработки поведение по умолчанию — «каркас», который нужно будет расширять и изменять согласно указанным требованиям. Пример программного фреймворка — C.M.F. (Content Management Framework), а пример библиотеки — модуль электронной почты.

Также, в отличие от библиотеки, которая объединяет в себе набор близкой функциональности, — «фреймворк» может содержать в себе большое число разных по тематике библиотек.

Ключевым отличием «фреймворка» от библиотеки является инверсия управления: пользовательский код вызывает функции библиотеки (или классы) и получает управление после вызова. Во «фреймворке» пользовательский код может реализовывать конкретное поведение, встраиваемое в более общий — «абстрактный» код фреймворка. При этом «фреймворк» вызывает функции (классы) пользовательского кода[4].

Фреймворк программной системы

[править | править код]

Это каркас программной системы (или подсистемы). Может включать: вспомогательные программы, библиотеки кода, язык сценариев и другое ПО, облегчающее разработку и объединение разных компонентов большого программного проекта. Обычно объединение происходит за счёт использования единого API.

Примеры: веб-фреймворки, как PHP-фреймворки Zend Framework, Laravel или Symfony, или Django, написанный на Python.

Фреймворк приложения

[править | править код]

Одно из главных преимуществ при использовании «каркасных» приложений — «стандартность» структуры приложения. «Каркасы» стали популярны с появлением графических интерфейсов пользователя, которые имели тенденцию к реализации стандартной структуры для приложений. С их использованием стало гораздо проще создавать средства для автоматического создания графических интерфейсов, так как структура внутренней реализации кода приложения стала известна заранее. Для обеспечения каркаса обычно используются техники объектно-ориентированного программирования (например, части приложения могут наследоваться от базовых классов фреймворка).

Одним из первых коммерческих фреймворков приложения был MacApp[англ.], написанный Apple для «Macintosh». Первоначально созданный с помощью расширенной (объектно-ориентированной) версии языка «Object Pascal», впоследствии он был переписан на «C++». Другие популярные каркасы для «Macintosh» включали:

В различной степени фреймворки приложения представляют собой «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.

Фреймворк концептуальной модели

[править | править код]

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

Реализация фреймворка

[править | править код]

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

Точка расширения — это та «часть» фреймворка, для которой не приведена реализация. Соответственно, каркас концептуальной модели состоит из концептуальных классов, а каркас программной системы — из классов языка программирования общего назначения.

Процесс создания фреймворка заключается в выборе подмножества задач проблемы и их реализаций. В ходе реализаций общие средства решения задач заключаются в конкретных классах, а изменяемые средства — выносятся в точки расширения.

Примечания

[править | править код]
  1. В. Фаронов. Создание приложений с помощью C#, Москва, ЭКСМО, 2008, с. 12
  2. Методы и технологии реинжиниринга ИС. К. В. Ахтырченко, Т. П. Сорокваша Архивная копия от 3 августа 2009 на Wayback Machine, Институт системного программирования РАН
  3. 1 2 Горбунов-Посадов М. М. Расширяемые программы. — М.: Полиптих, 1999. — 336 с. — ISBN 5-901-11801-4. Архивировано 20 сентября 2012 года.
  4. Martin Fowler. InversionOfControl (англ.). Дата обращения: 5 ноября 2013. Архивировано 23 января 2011 года.