С точки зрения чистой информатики (или, возможно, вычислительной лингвистики), я хотел бы знать разницу между словами:
- декоратор
- Атрибут
- Aspect
- Тре
Различные языки используют эти слова и функциональные возможности разным образом. В Python, например, Decorators [в соответствии с Python Wiki] (выделено мной):
Декораторы динамически изменяют функциональность функции, метода или класса без прямого использования подклассов или изменения исходного кода выполняемой функции.
Это поражает меня как удивительно похожего на инструмент с ориентированным ориентиром, например PostSharp или DynamicProxy. то есть:.
[Profile]
private static void SleepSync()
{
Thread.Sleep(200);
}
Источник: Примеры PostSharp
В С# и Java (а также множество других языков) атрибуты могут означать либо декоратор-иш-шаблон (С#), либо поле (Java).
И в С++ с помощью boost или PhP с помощью встроенного слова , мы можем использовать черты для расширения классов, как показано здесь: https://en.wikipedia.org/wiki/Trait_(computer_programming)
Итак, с "чистой" точки зрения, каковы канонические определения того, что все это на самом деле? Есть ли лучший способ определить их?