INFO
Sylabus
Standard ODMG, część 8
1. Co to jest i po co jest metamodel?
2. Przykład opisu metamodelu
3. Co przedstawia metamodel?
4. Przykład metamodelu
5. Wymagania w stosunku do metamodelu
6. Co to jest "generyczność"?
7. Metody programowania generycznego
8. Kroki refleksji
9. Metamodel rezultatów zapytań
10. Metadane w ODMG 3.0
11. Zakresy
12. Metaobiekty
13. Interfejs DefiningScope
14. Moduły
15. Operacje, wyjątki, stałe
16. Własności
17. Interfejsy
18. Klasy i kolekcje
19. Typy konstruowane
20. Specyfikatory i operandy
21. Podsumowanie i ocena specyfikacji
22. Jak poprawić koncepcję metamodelu?
23. Spłaszczenie meta-modelu
24. Spłaszczony metamodel - przykład (1)
25. Rozwinięcie spłaszczonego metamodelu
26. Spłaszczony metamodel - przykład (2)
27. Podsumowanie
Skorowidz
Wyście:
Wyklad XIV. Wprowadzenie do standardu ODMG, część 8:
Metamodel i repozytorium metadanych (KURS SSR)
I II III IV V VI VII VIII IX X XI XII XIII XIV
« poprzedni punkt   następny punkt »

7. Metody programowania generycznego

(1kB) Najbardziej popularną metodą jest obniżenie poziomu abstrakcji programowania. Np. programując w C/C++ można pointery do struktur zamienić (przekastować) na pointery do bajtów, i następnie przetwarzać struktury bajt-po-bajcie.
(1kB) Inną metodą są wszelkie struktury parametryzowane, np. szablony (templates) w C++. Tę zasadę na wyższym poziomie abstrakcji wykorzystują także języki z polimorfizmem typów, np. ML lub Haskel.
(1kB) Inną metoda jest stosowana w relacyjnych SZBD (dynamiczny SQL), CORBA (wołania dynamiczne) i innych interfejsach. Metoda ta jest określana jako "refleksja". Metoda ta pojawia się w bardzo różnych wariantach. Chodzi w niej o to, że programista wewnątrz aplikacji generuje program, który w tej samej aplikacji jest wykonywany.
(1kB) Wariantem refleksji jest sprowadzenie danych i metadanych na ten sam poziom przetwarzania; następnie, udostępnienia mechanizmów umożliwiających wykorzystanie metadanych dla przetwarzania danych (patrz np. XML).

Java jest krytykowana za słabe możliwości programowania generycznego.



8. Kroki refleksji

W językach z wczesnym wiązaniem (C, C++, Java) refleksja jest w zasadzie niemożliwa, gdyż wymagałaby skonsolidowania wygenerowanego programu z działającym programem, a takie mechanizmy nie istnieją.

Z tego powodu refleksja polega na generowaniu pewnych struktur danych (symulujacych program), które następnie podlegają interpretacji wewnątrz tego samego programu. Kroki refleksji są więc następujące:

  1. Odszukanie właściwej meta-informacji w katalogu;
  2. Wykorzystanie tej meta-informacji do dynamicznego skonstruowania zlecenia, np. w postaci stringu reprezentującego zdanie SQL;
  3. Wykonanie tego zlecenia poprzez specjalny mechanizm wbudowany w dany język, który skonstruowane zlecenie bierze jako parametr. Rezultat zlecenia jest zapamiętany w specjalnie przygotowanej strukturze danych;
  4. Utylizacja rezultatu zlecenia w programie. Często wymaga ona odzyskania informacji o typie tego rezultatu oraz dodatkowych mechanizmów.

Istnienie metamodelu jest więc warunkiem koniecznym dla zrealizowania mechanizmu refleksji. Nie zawsze jednak to wystarcza (patrz punkty 3 i 4).



« poprzedni punkt   następny punkt »