Programowanie refleksyjne
Transkrypt
Programowanie refleksyjne
Justyna Korycińska Programowanie refleksyjne polega na dynamicznym korzystaniu ze struktur języka programowania, które nie musiały być zdeterminowane w momencie tworzenia oprogramowania. Class Field Method Array Constructor Powyższe klasy zgrupowane są w pakietach java.lang i java.lang.reflect Wszystkie klasy tworzone w Javie mogą być używane zarówno w sposób tradycyjny jak i refleksyjny. Oczywiście klasa nie może być prywatna, gdyż wtedy nie będzie mogła być skompilowana jako główna klasa pliku Java. // bez refleksji Foo foo = new Foo(); foo.hello(); // z refleksją Class cl = Class.forName("Foo"); Method method = cl.getMethod("hello"); method.invoke(cl.newInstance()); Należy sprawdzić liczbę i typy parametrów oraz wynik. Należy bardzo uważać na ewentualną możliwość przeciążenia metod oraz konstruktorów. Ważną kwestią, która może uniemożliwić korzystanie z obiektów refleksyjnych jest sposób tworzenia tych obiektów. Do tego celu nadzorca obiektu refleksyjnego wykorzystuje konstruktor bezparametrowy. Jeśli klasa wymaga tworzenia z użyciem innego konstruktora, to mogą pojawić się trudności z jej poprawnym użyciem. Kolejną kwestią jest obsługa błędów. Powinna ona być na znacznie wyższym poziomie, niż w przypadku zwykłych obiektów. Poza obsługą standardowych przypadków, które mogą zajść w czasie normalnej pracy powinna ona uwzględnić kwestie związane z dynamicznym dostępem do samego obiektu jak i jego składowych. Wszystkie te utrudnienia powodują, że obiekty refleksyjne powinny być używane tylko wtedy, gdy jest to naprawdę potrzebne. W językach programowania zorientowanych obiektowo, refleksji używa się do przeprowadzania inspekcji w klasach, interfejsach lub metodach. Można to zrobić w trakcie działania programu i nie musimy znać ich nazw. Refleksja może być dynamicznie zaadaptowana do różnych sytuacji w zależności od tego co potrzebujemy, Przykładowo aplikacja używa dwóch różnych klas X i Y zamiennie do wykonywania podobnych czynności. Bez refleksji, aplikacja może wymagać wiele kodu, by wywołać metody klasy X i Y. Jednak przy użyciu refleksji, aplikacja może wykorzystać odbicie w celu wywołania metod w klasach X i Y.