Предметно-ориентированное программирование - Subject-oriented programming
В вычисление, предметно-ориентированное программирование является объектно-ориентированный программная парадигма в котором состояние (поля) и поведение (методы) объектов не рассматриваются как присущие самим объектам, а обеспечиваются различными субъективными восприятиями («субъектами») объектов. Термин и концепции были впервые опубликованы в сентябре 1993 года в документе конференции.[1] который позже был признан одним из трех наиболее влиятельных документов, представленных на конференции в период с 1986 по 1996 год.[2] Как показано в этой статье, проводится аналогия с контрастом между философскими взглядами Платон и Кант относительно характеристик «реальных» объектов, но применительно к программным. Например, хотя мы все можем воспринимать дерево как имеющее измеримую высоту, вес, массу листьев и т. Д., С точки зрения птицы, дерево также может иметь меры относительной ценности для целей питания или гнездования, или с точки зрения налогового инспектора, он может иметь определенную налогооблагаемую стоимость в данном году. Ни птица, ни дополнительная информация о состоянии налогоплательщика не должны рассматриваться как неотъемлемая часть дерева, она добавляется восприятием птицы и налогового инспектора, и, исходя из анализа Канта, то же самое может быть верно даже в отношении характеристик, о которых мы думаем. как внутреннее.
Субъектно-ориентированное программирование поддерживает организацию классы которые описывают объекты на «субъектов», которые могут быть составлены для формирования более крупных субъектов. В точках доступа к полям или методы, могут быть составлены статьи нескольких субъектов. Эти точки были охарактеризованы как точки соединения[3] предметов. Например, если дерево срублено, задействованные методы могут потребовать объединения поведения подопытных птиц и налогоплательщиков с поведением самих деревьев. Таким образом, это, по сути, взгляд на композиционную природу разработки программного обеспечения, в противоположность алгоритмической (процедурной) или скрывающей представление (объектной) природе.
Отношение к аспектно-ориентированному программированию
Вступление к аспектно-ориентированное программирование в 1997 г.[4] поднял вопросы о его отношении к предметно-ориентированному программированию и о разнице между предметами и аспектами. На эти вопросы в течение некоторого времени не было ответа, но они были рассмотрены в патенте на аспектно-ориентированное программирование, поданном в 1999 г.[5] в котором два момента проявляются как характерные отличия от более раннего искусства:
- программа аспекта включает в себя: а) поперечный разрез, который включает в себя точку выполнения, в которую должно быть включено поведение поперечного разреза; и b) действие поперечного разреза, включающее часть реализации, связанную с разрезом, часть реализации, содержащую машиночитаемый программный код, который реализует поведение пересечения.
- аспект прозрачно форсирует сквозное поведение классов объектов и других программных объектов
В субъектно-ориентированном представлении поперечный разрез может быть размещен отдельно от аспекта (объекта), и поведение не определяется аспектом, а регулируется правилами композиции. Ретроспективный взгляд[6] позволяет также различать аспектно-ориентированное программирование путем введения и использования концепции запроса, подобного Pointcut для внешнего наложения точек соединения, используемых аспектами в общих чертах.
В представлении предметно-ориентированного программирования точки соединения намеренно ограничивались доступом к полям и вызовом методов на том основании, что это были точки, в которых были разработаны хорошо спроектированные фреймворки, допускающие функциональное расширение. Использование навязываемых извне pointcut является важной лингвистической возможностью, но остается одной из самых спорных особенностей аспектно-ориентированного программирования.[7]
Отношение к аспектно-ориентированной разработке программного обеспечения
На рубеже тысячелетий стало ясно, что ряд исследовательских групп занимался различными технологиями, которые использовали композицию или присоединение отдельно упакованного состояния и функции для формирования объектов.[8] Чтобы отделить общую область интересов от аспектно-ориентированного программирования с его конкретными патентными определениями и подчеркнуть, что композиционная технология имеет дело не только с этапом кодирования разработки программного обеспечения, эти технологии были объединены под общим термином Аспектно-ориентированная разработка программного обеспечения,[9] и начата организация и проведение серии международных конференций по этой теме. Как аспектно-ориентированное программирование, предметно-ориентированное программирование, фильтры композиции, функционально-ориентированное программирование а адаптивные методы считаются аспектно-ориентированными подходами к разработке программного обеспечения.
Многомерное разделение проблем, Hyper / J и среда манипулирования проблемами
Первоначальная формулировка предметно-ориентированного программирования преднамеренно рассматривала его как упаковочную технологию, позволяющую расширять пространство функций и типов данных в любом измерении. Первые реализации были для C ++,[10] и Smalltalk.[11] Эти реализации использовали концепции меток программного обеспечения и правил композиции для описания объединения предметов.
Чтобы устранить озабоченность по поводу того, что должна быть обеспечена лучшая основа для анализа и составления программного обеспечения не только с точки зрения его упаковки, но и с точки зрения различных проблем, решаемых этими пакетами, была разработана явная организация материала с точки зрения множества компонентов размерная «матрица», в которой проблемы связаны с программными модулями, которые их реализуют. Эта организация называется Многомерное разделение проблем, и документ с его описанием[12] был признан самым влиятельным докладом конференции ICSE 1999 г.[13]
Эта новая концепция была реализована для создания Ява программное обеспечение, используя имя Hyper / J для инструмента.[14]
Композиция и концепция предмета могут применяться к программным артефактам, не имеющим исполняемой семантики, таким как спецификации требований или документация. Исследовательский автомобиль для Затмение, называется Обеспокоенность Манипулирование средой (CME), был описан[15] в каких инструментах для запроса, анализа, моделирования,[16] и композиция применяются к артефактам на любом языке или представлении посредством использования соответствующих подключаемых адаптеров для управления представлением.
Преемник движка композиции Hyper / J[17] был разработан как часть CME, который использует общий подход для нескольких элементов движка композиции:
- язык запросов с унификацией для определения точек соединения,
- гибкая конструктивно-крепежная модель,
- спецификация вложенного графа для упорядочивания идентифицированных элементов,
- и спецификацию упорядочения приоритетов для разрешения конфликтов между конфликтующими правилами.
И Hyper / J, и CME доступны от alphaWorks.[18] или sourceforge,[19] соответственно, но ни один из них активно не поддерживается.
Предметно-ориентированное программирование как «третье измерение»
Диспетчеризация методов в объектно-ориентированном программировании может рассматриваться как «двумерная» в том смысле, что выполняемый код зависит как от имени метода, так и от рассматриваемого объекта. Это можно противопоставить[20] с процедурным программированием, где имя процедуры разрешается напрямую или одномерно в подпрограмму, а также с предметно-ориентированным программированием, где отправитель или субъект также имеют отношение к отправке, составляя третье измерение.
Смотрите также
Рекомендации
- ^ Уильям Харрисон и Гарольд Ошер, Субъектно-ориентированное программирование - критика чистых объектов, Труды конференции 1993 г. по системам, языкам и приложениям объектно-ориентированного программирования, сентябрь 1993 г.
- ^ http://www.sigplan.org/Awards/OOPSLA
- ^ Гарольд Ошер, Пери Тарр. Состав рабочего уровня: случай в точке (присоединения), в ECOOP ’98 Workshop Reader, 406–409
- ^ Кичалес, Г.; Lamping, J .; Mendhekar, A .; Maeda, C .; Lopes, C .; Loingtier, J.M .; Ирвин, Дж. (1997). Аспектно-ориентированное программирование (PDF). ЭКООП '97. Материалы 11-й Европейской конференции по объектно-ориентированному программированию. LNCS. 1241. С. 220–242. CiteSeerX 10.1.1.115.8660. Дои:10.1007 / BFb0053381. ISBN 3-540-63089-9.
- ^ Кичалес; Грегор Дж .; Освещение; John O .; Лопес; Cristina V .; Хугунин; Джеймс Дж .; Хилсдейл; Эрик А .; Бояпати; Чандрасекхар, Аспектно-ориентированное программирование, патент США 6,467,086, 15 октября 2002 г.
- ^ Уильям Харрисон. De-constructing and Re-Construction Aspect-Orientation, седьмой ежегодный семинар по основам аспектных языков, Брюссель, Бельгия, 1 апреля 2008 г., под редакцией Гэри Т. Ливенса, ACM Digital Library, 2008, стр. 43-50
- ^ Фридрих Штайманн. Парадоксальный успех аспектно-ориентированного программирования, Материалы 21-й ежегодной конференции ACM SIGPLAN по системам, языкам и приложениям объектно-ориентированного программирования, Портленд, Орегон, США, 2006 г., стр. 481 - 497
- ^ Сообщения ACM, Vol. 44, No. 10, October 1994, pp. 28-95.
- ^ http://aosd.net/
- ^ Гарольд Ошер, Мэтью Каплан, Уильям Харрисон, Александр Кац и Винсент Крускал, Правила субъектно-ориентированной композиции, Труды конференции 1995 г. по системам объектно-ориентированного программирования, языкам и приложениям, октябрь 1995 г.
- ^ Хафед Мили, Уильям Харрисон, Гарольд Ошер, Поддержка предметно-ориентированного программирования в Smalltalk, Proceedings of TOOLS USA 96, август 1996 г.
- ^ Гарольд Ошер, Пери Тарр, Уильям Харрисон, Стэнли Саттон, N степеней разделения: многомерное разделение проблем, Труды Международной конференции по разработке программного обеспечения 1999 г., май 1999 г.
- ^ http://www.sigsoft.org/awards/mostInfPapAwd.htm
- ^ Гарольд Ошер, Пери Тарр. Hyper / J: многомерное разделение проблем для Java, Труды 23-й Международной конференции по разработке программного обеспечения, Торонто, Онтарио, Канада, 2001 г., страницы: 821 - 822
- ^ Уильям Чанг, Уильям Харрисон, Винсент Крускал, Гарольд Ошер, Стэнли М. Саттон-младший, Пери Тарр, Мэтью Чепмен, Эндрю Клемент, Хелен Хокинс, Сиан Январь. Среда манипулирования концерном, Материалы 27-й международной конференции по оглавлению программной инженерии, Сент-Луис, Миссури, США, 2005 г.
- ^ Уильям Харрисон, Гарольд Ошер, Стэнли Саттон, Пери Тарр. Моделирование проблем в среде манипулирования проблемами, Материалы семинара 2005 г. по моделированию и анализу проблем в программном обеспечении, Сент-Луис, штат Миссури, 2005 г.
- ^ Уильям Харрисон, Гарольд Ошер, Пери Тарр. Общая композиция программных артефактов, Proceedings of Software Composition Workshop 2006, март 2006 г., Springer-Verlag, LNCS 4089, страницы 194-210
- ^ http://www.alphaworks.ibm.com/tech/hyperj
- ^ http://sourceforge.net/projects/cme/
- ^ Журнал объектных технологий: контекстно-ориентированное программирование