Programowanie tematyczne - Subject-oriented programming

W informatyki , programowania przedmiotem zorientowany jest zorientowany obiektowo oprogramowanie paradygmat , w którym państwo (pola) i zachowanie (metody) obiektów nie są postrzegane jako nierozerwalnie związane z samych obiektów, ale są dostarczane przez różnych subiektywnych spostrzeżeń ( „obiekty”) obiektów. Termin i koncepcje zostały po raz pierwszy opublikowane we wrześniu 1993 roku w referacie konferencyjnym, który został później uznany za jeden z trzech najbardziej wpływowych referatów prezentowanych na konferencji w latach 1986-1996. kontrast między poglądami filozoficznymi Platona i Kanta w odniesieniu do cech „rzeczywistych” obiektów, ale zastosowanych do tych programowych. Na przykład, podczas gdy wszyscy możemy postrzegać drzewo jako mające mierzalną wysokość, wagę, masę liści itp. z punktu widzenia ptaka, drzewo może mieć również wskaźniki względnej wartości dla celów związanych z pożywieniem lub gniazdowaniem lub z punktu widzenia doradcy podatkowego może mieć określoną wartość podatkową w danym roku. Ani dodatkowe informacje o stanie ptaka, ani osoby oceniającej podatek nie muszą być postrzegane jako nieodłączne od drzewa, ale są dodawane przez spostrzeżenia ptaka i osoby oceniającej podatek, a z analizy Kanta to samo może być prawdziwe nawet w przypadku cech, o których myślimy jako wewnętrzne.

Programowanie przedmiotowe zaleca organizowanie klas opisujących obiekty w „podmioty”, które można skomponować w celu utworzenia większych przedmiotów. W punktach dostępu do dziedzin lub metod można skomponować wypowiedzi kilku podmiotów. Punkty te scharakteryzowano jako punkty łączenia badanych. Na przykład, jeśli drzewo zostanie ścięte, zastosowane metody mogą wymagać połączenia zachowania osobników ptaków i podatników z zachowaniem drzewa. Jest to zatem zasadniczo pogląd na kompozycyjną naturę tworzenia oprogramowania, w przeciwieństwie do algorytmicznej (proceduralnej) lub ukrywającej reprezentację (obiektowej).

Relacje

Związek z programowaniem aspektowym

Wprowadzenie programowania aspektowego w 1997 roku wywołało pytania o jego związek z programowaniem przedmiotowym oraz o różnicę między przedmiotami a aspektami. Te pytania przez pewien czas pozostawały bez odpowiedzi, ale zostały poruszone w patencie dotyczącym programowania zorientowanego aspektowo złożonym w 1999 roku, w którym dwa punkty wyłaniają się jako charakterystyczne różnice w stosunku do wcześniejszej sztuki:

  • program aspektowy zawiera zarówno a) przekrój, który zawiera punkt w wykonaniu, w którym ma być uwzględnione zachowanie przecinania; oraz b) operację przecinania obejmującą część implementacji związaną z przekrojem, przy czym część implementacji zawiera czytelny dla komputera kod programu, który implementuje zachowanie przecinania.
  • aspekt transparentnie wymusza zachowanie przekrojowe na klasach obiektów i innych jednostkach oprogramowania

W ujęciu podmiotowym przekrój może być umieszczony oddzielnie od aspektu (tematu), a zachowanie nie jest wymuszone aspektem, lecz rządzi się regułami kompozycji. Hindsight umożliwia również rozróżnienie programowania zorientowanego aspektowo przez wprowadzenie i wykorzystanie koncepcji punktu przecięcia podobnego do zapytania, aby zewnętrznie narzucić punkty łączenia używane przez aspekty w sposób ogólny.

W prezentacji programowania przedmiotowego punkty łączenia zostały celowo ograniczone do dostępu do pola i wywołania metod, ponieważ były to punkty, w których projektowano dobrze zaprojektowane frameworki, aby umożliwić rozszerzenie funkcjonalne. Użycie zewnętrznie narzuconych punktów odniesienia jest ważną umiejętnością językową, ale pozostaje jedną z najbardziej kontrowersyjnych cech programowania aspektowego.

Związek z tworzeniem oprogramowania zorientowanego aspektowo

Na przełomie tysiącleci stało się jasne, że wiele grup badawczych pracowało nad różnymi technologiami, które wykorzystywały skład lub mocowanie oddzielnie zapakowanego stanu i funkcji do tworzenia obiektów. Aby odróżnić wspólny obszar zainteresowania od programowania zorientowanego na aspekty z jego szczególnymi definicjami patentowymi i podkreślić, że technologia kompozycyjna zajmuje się czymś więcej niż tylko fazą kodowania rozwoju oprogramowania, technologie te zostały zorganizowane razem pod nazwą Aspect-Oriented Software Development , oraz organizacja i cykl międzynarodowych konferencji rozpoczętych na ten temat. Podobnie jak programowanie aspektowe, programowanie tematyczne, filtry kompozycji, programowanie zorientowane na funkcje i metody adaptacyjne są uważane za podejścia do tworzenia oprogramowania zorientowane aspektowo.

Wymiary

Wielowymiarowa separacja obaw, Hyper/J i środowisko manipulacji obawami

Pierwotne sformułowanie programowania przedmiotowego celowo przewidywało je jako technologię pakowania – pozwalającą na rozszerzenie przestrzeni funkcji i typów danych w dowolnym wymiarze. Pierwsze implementacje dotyczyły C++ i Smalltalk. Te implementacje wykorzystywały koncepcje etykiet oprogramowania i reguł kompozycji do opisu łączenia podmiotów.

W odpowiedzi na obawy, że należy zapewnić lepsze podstawy do analizy i składu oprogramowania nie tylko pod względem jego opakowania, ale pod względem różnych problemów, których dotyczą te pakiety, opracowano wyraźną organizację materiału pod kątem wielo- wymiarowa „macierz”, w której obawy są związane z jednostkami oprogramowania, które je implementują. Organizacja ta nazywana jest wielowymiarową separacją obaw , a opisujący ją artykuł został uznany za najbardziej wpływowy dokument Konferencji ICSE 1999.

Ta nowa koncepcja została zaimplementowana do komponowania oprogramowania Java , używając nazwy Hyper/J dla narzędzia.

Kompozycję i koncepcję podmiotu można zastosować do artefaktów oprogramowania, które nie mają wykonywalnej semantyki, takiej jak specyfikacje wymagań lub dokumentacja. Opisano wehikuł badawczy dla Eclipse , zwany Concern Manipulation Environment (CME), w którym narzędzia do zapytań, analizy, modelowania i kompozycji są stosowane do artefaktów w dowolnym języku lub reprezentacji za pomocą odpowiednich adapterów wtyczek do manipulować reprezentacją.

Następca silnika kompozycji Hyper/J został opracowany jako część CME, który wykorzystuje ogólne podejście do kilku elementów silnika kompozycji:

  • język zapytań z unifikacją do identyfikacji punktów złączenia,
  • elastyczny model konstrukcyjno-przystawkowy,
  • specyfikacja zagnieżdżonego wykresu do porządkowania zidentyfikowanych elementów,
  • oraz specyfikację kolejności priorytetów w celu rozwiązania konfliktów między sprzecznymi regułami.

Zarówno Hyper/J, jak i CME są dostępne odpowiednio w alphaWorks lub sourceforge, ale żadne z nich nie jest aktywnie wspierane.

Programowanie tematyczne jako „trzeci wymiar”

Wysyłanie metod w programowaniu obiektowym może być traktowane jako „dwuwymiarowe” w tym sensie, że wykonywany kod zależy zarówno od nazwy metody, jak i od danego obiektu. Można to skontrastować z programowaniem proceduralnym, gdzie nazwa procedury przechodzi bezpośrednio lub jednowymiarowo na podprogram, a także z programowaniem zorientowanym podmiotowo, gdzie nadawca lub podmiot jest również istotny dla wysyłki, stanowiąc trzeci wymiar.

Zobacz też

Bibliografia

Zewnętrzne linki