В компьютерном программировании программная среда — это абстракция , в которой программное обеспечение , предоставляющее общие функциональные возможности, может быть выборочно изменено дополнительным написанным пользователем кодом, тем самым предоставляя специфичное для приложения программное обеспечение. Она предоставляет стандартный способ создания и развертывания приложений и является универсальной, повторно используемой программной средой , которая предоставляет определенную функциональность как часть более крупной программной платформы для облегчения разработки программных приложений , продуктов и решений.
Программные фреймворки могут включать в себя вспомогательные программы, компиляторы, библиотеки кода, наборы инструментов и интерфейсы прикладного программирования (API) , которые объединяют все различные компоненты для обеспечения разработки проекта или системы .
Фреймворки имеют ключевые отличительные особенности, которые отличают их от обычных библиотек :
Разработчики программных фреймворков стремятся облегчить разработку программного обеспечения, позволяя разработчикам и программистам посвящать свое время выполнению требований к программному обеспечению, а не разбираться с более стандартными низкоуровневыми деталями предоставления работающей системы, тем самым сокращая общее время разработки. [2] Например, команда, использующая веб-фреймворк для разработки банковского веб-сайта, может сосредоточиться на написании кода, специфичного для банковской сферы, а не на механике обработки запросов и управления состоянием .
Фреймворки часто увеличивают размер программ, явление, называемое « раздуванием кода ». Из-за потребностей приложений, обусловленных спросом клиентов, как конкурирующие, так и дополнительные фреймворки иногда оказываются в продукте. Кроме того, из-за сложности их API предполагаемое сокращение общего времени разработки может не быть достигнуто из-за необходимости тратить дополнительное время на изучение использования фреймворка; эта критика явно справедлива, когда специальный или новый фреймворк впервые встречается сотрудникам по разработке. [ необходима цитата ] Если такой фреймворк не используется в последующих рабочих задачах, время, вложенное в изучение фреймворка, может стоить больше, чем специально написанный код, знакомый сотрудникам проекта; многие программисты хранят копии полезного шаблонного кода для общих нужд.
Однако после изучения фреймворка будущие проекты могут быть быстрее и проще в выполнении; концепция фреймворка заключается в создании набора решений «один размер подходит всем», и с знакомством производство кода должно логически возрасти. Нет никаких подобных заявлений о размере кода, в конечном итоге связанного с выходным продуктом, или его относительной эффективности и краткости. Использование любого библиотечного решения обязательно влечет за собой дополнительные и неиспользуемые посторонние активы, если только программное обеспечение не является компоновщиком объектов компилятора, создающим плотный (небольшой, полностью контролируемый и определенный) исполняемый модуль.
Проблема сохраняется, но более чем десятилетний опыт работы в отрасли [ требуется ссылка ] показал, что наиболее эффективными оказываются те фреймворки, которые развиваются из рефакторинга общего кода предприятия, вместо использования универсального фреймворка «один размер подходит всем», разработанного третьими лицами для общих целей. Примером этого может служить то, как пользовательский интерфейс в таком пакете приложений, как офисный пакет, разрастается до общего вида, поведения и атрибутов и методов обмена данными, поскольку некогда разрозненные пакетные приложения объединяются в более компактный и компактный набор; более новый/развитый набор может быть продуктом, который разделяет интегральные библиотеки утилит и пользовательские интерфейсы.
Эта тенденция в споре поднимает важный вопрос о фреймворках. Создание элегантного фреймворка, в отличие от того, который просто решает проблему, все еще является скорее ремеслом, чем наукой. « Элегантность программного обеспечения » подразумевает ясность, краткость и мало отходов (дополнительной или посторонней функциональности, большая часть которой определяется пользователем). Например, для тех фреймворков, которые генерируют код, «элегантность» будет означать создание кода, который является чистым и понятным для достаточно знающего программиста (и который, следовательно, легко модифицируется), в отличие от того, который просто генерирует правильный код. Проблема элегантности заключается в том, почему относительно немногие фреймворки программного обеспечения выдержали испытание временем: лучшие фреймворки смогли изящно развиться по мере того, как развивалась базовая технология, на которой они были построены. Даже там, развившись, многие такие пакеты сохранят устаревшие возможности, раздувающие конечное программное обеспечение, поскольку в противном случае замененные методы были сохранены параллельно с более новыми методами.
Программные фреймворки обычно содержат значительный объем служебного и вспомогательного кода, помогающего загружать пользовательские приложения, но в целом они сосредоточены на конкретных проблемных областях, таких как:
Согласно При, [8] программные фреймворки состоят из замороженных точек и горячих точек . Замороженные точки определяют общую архитектуру программной системы, то есть ее основные компоненты и отношения между ними. Они остаются неизменными (замороженными) в любой реализации прикладного фреймворка. Горячие точки представляют собой те части, куда программисты, использующие фреймворк, добавляют свой собственный код для добавления функциональности, специфичной для их собственного проекта.
В объектно-ориентированной среде фреймворк состоит из абстрактных и конкретных классов . Создание такого фреймворка заключается в составлении и подклассификации существующих классов. [9]
Необходимая функциональность может быть реализована с помощью шаблона Template Method, в котором замороженные точки известны как инвариантные методы, а горячие точки известны как варианты или методы-ловушки. Инвариантные методы в суперклассе обеспечивают поведение по умолчанию, в то время как методы-ловушки в каждом подклассе обеспечивают пользовательское поведение.
При разработке конкретной программной системы с программным фреймворком разработчики используют горячие точки в соответствии с конкретными потребностями и требованиями системы. Программные фреймворки опираются на голливудский принцип : «Не звоните нам, мы сами вам позвоним». [10] [11] Это означает, что определяемые пользователем классы (например, новые подклассы) получают сообщения от предопределенных классов фреймворка. Разработчики обычно справляются с этим, реализуя абстрактные методы суперкласса .
{{citation}}
: CS1 maint: дата и год ( ссылка )