Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Software Engineering2010.docx
Скачиваний:
1
Добавлен:
01.05.2025
Размер:
539.8 Кб
Скачать

Функции высших порядков

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

Функции высших порядков весьма схожи с функциями первого класса, оба типа позволяют иметь на выходе и в качестве аргумента функцию. Грань между этими типами функций довольно тонкая: функции высших порядков это математическая концепция функций, оперирующих другими функциями, а функции первого класса — термин компьютерных наук, описывающий конструкцию языка, не имеющую ограничений на свое использование (функция первого порядка может использоваться всюду в программе, как и другие сущности первого класса, к примеру число, включая возможность быть аргументом других функций и быть на выходе у них).

Функции высших порядков позволяют использовать карринг — преобразование функции от пары аргументов в функцию, берущую свои аргументы по одному. Это преобразование получило свое название в честь Х. Карри.

Аспектно-ориентированное программирование

Аспектно-ориентированное программирование (АОП) — парадигма программирования, основанная на идее разделения функциональности для улучшения разбиения программы на модули.

Существующие парадигмы программирования, такие как процедурное, модульное и объектно-ориентированное программирование, предоставляют определённые способы для разделения и выделения функциональности (функции, классы, модули), но некоторую функциональность с помощью предложенных методов невозможно выделить в отдельные сущности. Такую функциональность называют сквозной (англ. scattered, разбросанная или tangled, переплетённая), так как её реализация рассыпана по различным модулям программы. Сквозная функциональность приводит к рассредоточенному и запутанному коду, сложному для понимания и сопровождения. Ведение лога и обработка ошибок — типичные примеры сквозной функциональности.

В рамках АОП утверждается, что никакая технология проектирования не поможет решить проблему запутанного кода, если только мы будем оставаться в рамках языка, ориентированного только на разработку компонентов. Для программирования сервисов, обеспечивающих взаимодействие объектов, нужны специальные средства, возможно специальные языки.

АОП предлагает средства выделения сквозной функциональности в отдельные программные модули — аспекты.

Разработка в рамках АОП состоит из трех отдельных шагов:

1. Аспектная декомпозиция: разбиение требований для выделения общей и сквозной функциональности.

2. Реализация функциональности.

3. Компоновка аспектов.

На этом шаге аспектный интегратор определяет правила для создания своих модулей — аспектов, составляя конечную систему.

На сегодняшний день существует множество аспектно-ориентированных языков. Мы ограничимся перечислением лишь некоторых из них:

- AspectJ (аспектно-ориентированный язык Java)

- AspectL (аспектно-ориентированная реализация Lisp)

- AspectC++ (аспектно-ориентированное расширение языка С++)

- AspectC# (реализация, добавляющая поддержку аспектов к языку C#)

- Pythius (проект с открытым исходным кодом, добавляющий принципы АОП к языку Python)

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]