Эволюция парадигмы программирования.pptx
- Количество слайдов: 13
Эволюция парадигмы программирования Знаменитый гуру программирования Гради Буч в 2001 году сделал важное признание в статье Through the Looking Glass : «Я был неправ: все-таки есть нечто более глубокое, нечто поистине более богатое возможностями, чем объекты» . Этими словами Буч представил аспектно-ориентированное программирование (АОП) — на тот момент новейшую парадигму программирования.
История индустрии ПО началась с огромных машин и машинного кода — ни о чем не говорящих человеку рядов чисел, поэтому решение вычислительных задач с точки зрения проектирования и программирования было чрезвычайно трудоемким. Требовались простые, удобные механизмы абстракции для упрощения процессов моделирования и программирования. Машинные языки сменил ассемблер, который в 60 -х — начале 70 -х уступил место структурным и процедурным языкам, позднее вытесненным объектноориентированным с его принципами инкапсуляции, наследования и полиморфизма.
Эволюция парадигм программирования происходила в связи с потребностью в разделении ответственности (separation of concerns): concerns артефактов, концепций или особенностей, интересующих участников проекта разработки ПО. Зона ответственности может быть функциональной (например, добавление элемента к списку) или нефункциональной (например, быстродействие, безопасность и т. д. ) либо относиться к этапам жизненного цикла разработки ПО, например к проектированию.
Разделение ответственности остается главным принципом программной инженерии, а его основа — общеизвестный метод снижения сложности с помощью абстрагирования. Процедурные языки изолируют и абстрагируют зоны ответственности в виде процедур и функций, тогда как в объектно-ориентированных языках в качестве абстракций используются классы и объекты.
Эволюция парадигм программирования закономерна и происходит по мере появления различных прагматических соображений, например, потребностей усовершенствования процессов моделирования, многократного использования или сопровождения ПО.
Типичная программа представляет собой набор взаимосвязанных друг с другом компонентов (например, отвечающих за управление транзакциями), обычно имеющих взаимозависимости по тем или иным функциям. Такое взаимосоединение называется сквозной функциональностью (cross-cutting concern), и аспектно-ориентированное программирование занимается ее систематизацией, преобразованием в отдельные модули и их управлением.
Основным инструментом АОП являются аспекты — модули, реализующие сквозную функциональность. На сегодня существует несколько аспектно-ориентированных языков и инструментов — например, Aspect. J и Post. Sharp. Aspect. J Post. Sharp С появлением АОП возникло немало вопросов о нужности и сферах применения новых парадигм, поэтому продуманный стандарт, предоставляющий логическую и систематизированную базу оценки и классификации парадигм, мог бы стать ценным подспорьем для участников разработки ПО.
Как узнать, когда появляется потребность в новой парадигме? Какими механизмами абстракции она должна обладать? Как оценивать новые парадигмы? Рассмотрим базовые принципы эволюции парадигм программирования.
Принцип эквивалентности Любая задача, которую можно решить с помощью какой-либо парадигмы программирования в иерархии из рисунка, должна быть решаемой с помощью остальных парадигм. Весь код должен преобразовываться в машинный, чтобы для каждой программы в любой парадигме с высоким уровнем абстракции существовала эквивалентная программа на машинном коде. Поскольку любую программу, составимую в машинном коде, также можно составить на ассемблере или процедурном языке, то можно утверждать эквивалентность всех программ в иерархии. Парадигмы в приведенной иерархии имеют слабую эквивалентность, то есть хотя они все позволяют вычислить одну и ту же функцию, делать это они могут по-разному.
Аспектно-ориентированное Программирование Возрастание сложности Объектно-ориентированное Программирование Процедурнное Программирование Ассемблер Машинный код Парадигмы программирования. Иерархически изображены принципы программирования по мере увеличения уровня сложности и широты возможностей механизмов абстрагирования
Любая новая парадигма в иерархии должна превосходить предшественниц и предоставлять новые механизмы абстрагирования и программирования, которые удовлетворяют больше потребностей, чем предыдущие. Проиллюстрируем этот принцип примерами:
ü управляющие структуры процедурного программирования превосходят регистры, команды адресации, флаги и всевозможные переходы, присущие программированию на ассемблере; ü процедуры и модули в процедурном программировании превосходят блоки кода в ассемблере; ü классы в объектно-ориентированном программировании превзошли структуры данных и процедуры, характерные для процедурного программирования; ü наследование и полиморфизм в ООП превзошли наборы процедур и механизмы вызова, свойственные процедурному программированию; ü аспекты в АОП превзошли разбросанный и запутанный код ООП; точки соединения (join point) и срезы (pointcut) в АОП абстрагируют статическое и динамическое связывание, а также другие особенности ООП. Место новой парадигмы программирования в иерархии зависит от уровня ее превосходства по сравнению с существующими.
Любой очередной механизм абстрагирования или программирования, предоставляемый новой парадигмой, должен быть абстракцией одного или более механизмов непосредственной предшественницы этой парадигмы. Этот принцип иллюстрируется теми же примерами, что и принцип превосходства.
Эволюция парадигмы программирования.pptx