Reflexe jako introspekce

Slides:



Advertisements
Podobné prezentace
(instance konkrétní třídy)
Advertisements

Seminář C++ 5. cvičení Dědičnost Ing. Jan Mikulka.
Funkce Připomeňme si program pro výpočet faktoriálu:
Špička v každém směru IT 3 Produktivita práce s Eclipse.
Pole, ukazatele a odkazy
ÚVOD DO CPP 7 Dědičnost - pokračování
BLIŽŠÍ POHLED NA TŘÍDY, DĚDIČNOST - úvod
PJV151 Vnořené a vnitřní členy mohou být členy tříd a interfejsů. Je-li X obalem Y a Y je obalem Z, pak Z získá jméno X$Y$Z - kompilací vzniknou classy.
4IT1014IT101 Pátá přednáška Datové struktury - pokračování Statické prvky třídy.
Polymorfismus Dědičnost
C++ Přednáška 3 Konstantní a statické členy tříd, ukazatel this, konstantní instance třídy Ing. Jiří Kulhánek , kat. 352, VŠB TU Ostrava 2004.
Čtvrté cvičení Objektové programování Objektový model v Javě
J a v a Začínáme programovat Lucie Žoltá metody, objekty, konstruktor.
C# - struktury, výčtové typy, pole
C# - datové typy Centrum pro virtuální a moderní metody a formy vzdělávání na Obchodní akademii T.G. Masaryka, Kostelec nad Orlicí.
Páté cvičení Dědičnost Interface Abstarktní třídy a metody
Třída jako zdroj funkcionality
Identity Field Radim Veselý ČVUT v Praze Radim Veselý ČVUT v Praze Michal Kouřík ČVUT v Praze
Objektové orientované programování Objektově orientované problémy v PHP Lukáš Masopust 2008.
Objektové programování
Podpora vláken a jejich synchronizace v jazyce C# Jan Kučera Jan Mittner Petr Effenberger 4IT353 Klient/server aplikace v Javě.
Jedenácté cvičení Vlákna. Java cv112 Vlákna Operační systém Mutitasking – více úloh se v operačním programu vykonává „současně“ Java Multithreading -
Seminář C cvičení Obsluha výjimek Ing. Jan Mikulka.
C# - OOP (object oriented programming)
Návrh a tvorba WWW Přednáška 11
08/04/20151 Delegáty (1) Delegát (delegate) je datový typ, který definuje signaturu metody Delegáty bývají rovněž označovány jako typo- vě bezpečné ukazatele.
PRÁCE S VLÁKNY A APLIKAČNÍ DOMÉNY V.NET FRAMEWORK APLIKACÍCH Architektura technologie.NET Jan Martinovič, FEI - Katedra Informatiky.
Seminář C++ 4. cvičení Objekty Ing. Jan Mikulka. Co je objekt ► obraz třídy i instance ► třída – definovaná za pomocí klíčového slova class ► instance.
Dependency injection Předávání závislostí Petr Kalivoda
6. cvičení Polymorfismus
PB161 Právo friend, přetěžování operátorů, přetypování PB161 | Friend, operátory PB161 – Programování v jazyce C++ Objektově Orientované Programování.
VISUAL BASIC PRALG.
KIV/PPA1 cvičení 8 Cvičící: Pavel Bžoch. Osnova cvičení Objekty v Javě Třída Konstruktor Metody Metody a proměnné třídy x instance Program sestávající.
OSNOVA: a) Úvod do OOPb) Třídy bez metod c) Třídy s metodamid) Konstruktory a destruktory e) Metody constf) Knihovní třídy g) Třídy ve tříděh) Přetížení.
Algoritmizace a programování Objektově orientované programování - 16 Mgr. Josef Nožička IKT Algoritmizace a programování
C# - předávání parametrů Centrum pro virtuální a moderní metody a formy vzdělávání na Obchodní akademii T.G. Masaryka, Kostelec nad Orlicí.
Návrh a tvorba WWW Přednáška 5 Úvod do jazyka PHP.
OSNOVA: a) Přetížení členských funkcí b) Dědičnost tříd Jiří Šebesta Ústav radioelektroniky, FEKT VUT v Brně Počítače a programování 2 pro obor EST BPC2E.
Dědičnost - inheritance dědičnost je jednou z forem znovupoužitelnosti dědičnost je jednou z forem znovupoužitelnosti B A Třída A je předkem třídy B Třída.
13/04/20151 Indexery (1) Členy třídy (struktury) umožňující třídě (struk- tuře) používat hranaté závorky a pracovat s ní podobně jako s polem (používat.
13/04/20151 Datový typ třída – class (1) Datový typ definovaný uživatelem Poskytuje mechanismus pro modelování entit, s nimiž manipulují aplikace Charakterizuje.
Principy OOP Objektově orientované programování vychá-zí ze třech základních principů (rysů): zapouzdření (encapsulation) dědičnost (inheritance) polymorfismus.
Netrvaloppa21 Vytvořte třídu Student pro reprezentaci struktury student na ZČU. Atributy třídy budou fakulta a osobniCislo. Název třídy: Student proměnné.
PJV031 Přetypování (casting) Objekty, atributy, lokální proměnné, parametry a návratové hodnoty metod mají definovaný, neměnný typ. Jsou dva druhy typů:
FEL Komunikátor. Memory Leak program konsumuje operační paměť, kterou neumožňuje uvolnit o uvolnění paměti stará Garbage Collector ▫plně v režii Java.
PŘÍKAZ while úkol 1_42.
Jazyk C A0B36PRI - PROGRAMOVÁNÍ Část II.
Strategy. Motivace Různé algoritmy pro stejnou akci Hromada kódu v mnoha podmínkách Důsledky  Komplexnost  Špatná čitelnost  Těžká správa kódu  Těžka.
Proxy. Popis  Klient má přístup k nějakému objektu  Potřebujeme tento přístup ošetřit, aniž bychom přidělali klientovi práci Kontrola přístupu Vzdálený.
FUN WITH C# EPISODE XIII INTERFACES STRIKE BACK CLI Type System All types Reference types (allocated on managed heap) PointersValue types (allocated.
PROGRAMOVÁNÍ 3ITA,3ITB Jaroslav Burdys Hlavní zdroj:
Proxy. Proxy poskytuje bariéru mezi klientem a reálnou implementací.
NÁZEV ŠKOLY: S0Š Net Office, spol. s r.o., Orlová-Lutyně AUTOR: Ing. Adéla Tomalová NÁZEV: Podpora výuky v technických oborech TEMA: Objektově orientované.
PJV15 1 Vnořené ( nested ) a vnitřní ( inner ) členy Třídy či interfejsy mohou být členy tříd či interfejsů. Je-li X obalem Y a Y obalem Z, pak Z získá.
PJV26 1 JavaBeans je technologie výroby znovupoužitelných, na platformě nezávislých komponent. Podporována je od jdk 1.1 a BDK. Bean lze vizuálně vkládat.
Applety Applet ( Application program–let ) je javský program upravený ke spuštění v klientově prohlížeči ( browseru ). Prohlížeč je aplikace ( application.
Úvod do C# - OOP Jaroslav BURDYS 4IT.
NÁZEV ŠKOLY: S0Š Net Office, spol. s r.o., Orlová-Lutyně
Události ( Events ) GUI definuje model událostí ( event model ) – od Javy 1.1 je to tzv. delegační model. ( Původní tzv. hierarchický model se již neužívá.
OOP - Objektově Orientované Programování
Y36PJC Programování v jazyce C/C++
Generické typy jsou třídy či interfejsy deklarující tzv. typové parametry jimiž: systematizují typovou kontrolu kompilátorem, vyjadřují jasněji smysl,
Počítače a programování 2 pro obor EST BPC2E PŘEDNÁŠKA 3
Polymorfismus = Mnohotvarost
RMI = Remote Method Invocation
Tvorba objektů Objekty lze vytvářet, operovat nad nimi, ukládat je na vnější paměti, přenášet je či využívat telekomunikačně pouze v čase běhu ( run-time.
Bridge.
C# přehled vlastností.
NÁZEV ŠKOLY: S0Š Net Office, spol. s r.o., Orlová-Lutyně
Výčtové typy ( Java 5 ) Výčtové typy jsou speciální třídy zavedené pro větší bezpečí a pohodlí. V nejjednodušší variantě se definují příkladmo takto:
Transkript prezentace:

Reflexe jako introspekce Soubory typu .class vzniklé kompilací tříd a interfejsů obsahují dostatek informací o sobě samých. To umožňuje reflexi v čase běhu ( bez znalosti zdrojových souborů ) zjišťovat: - strukturu programů a balíčků, - hodnoty atributů objektů a měnit je, - dostupné metody a konstruktory a volat je, - třídy a interfejsy a dynamicky vytvářet třídy a instanciovat je, - anotace - parametry (v. 1.8) Tyto kejkle podporuje třída java.lang.Class a balíček java.lang.reflect. Viz též: http://java.sun.com/docs/books/tutorial/ http://www.j2ee.me/docs/books/tutorial/reflect/ http://java.sun.com/developer/technicalArticles/ALT/Reflection/ http://www.roseindia.net/java/reflect/ PJV25

java.lang.reflect Class Array Package Proxy Type Field Method Modifier java.rmi java.lang Package TypeVariable Annotated Element <D> java.lang Class Parameter Proxy Type <T> 1.8 Generic ArrayType Accessible Object Generic Declaration Parametrized Type WildcardType Executable Constructor Array 1.8 Field Method Modifier Member java.io.Serializable PJV25

Event Handler Annotated Reflect Permission PJV25 Remote Guard java.rmi java.security Remote Guard Annotated Element java.rmi.server java.security Remote Object Permission Annotated Type 1.8 Annotated ArrayType java.rmi.server java.security 1.8 RemoteObject Invocation Handler Basic Permission Annotated ParametrizedType 1.8 Annotated WildcardType Invocation Handler Reflect Permission 1.8 Annotated TypeVariable java.beans 1.8 Event Handler java.io.Serializable PJV25

Třída java.lang.Class Ke každému typu ( i primitivnímu i poli ) existuje v runtime právě jeden popisný objekt ( tzv. class-object ). Tyto objekty jsou typu Class< typ > a jsou odvozeny z třídy Class. Tato třída oplývá jak testy is***, tak getry get*** k získání informací o typu, struktuře a členech typů. Getry vracejí typy: Constructor[ ], Method[ ], Field[ ], Interface[ ], Class[ ], Annotation[ ], EnumConstants, Signers, TypeParameters, Package buď jen deklarované ve zkoumaných typech anebo i všechny zděděné . Constructor, Method, Field, Interface, Class, Annotation specificky dle požadovaného jména resp. signatury Dále lze zjistit superclass, loader, package, modifikátory, typy polí ( i primitivních ) a indikovat různé typy v čase běhu. PJV25

Třída java.lang.Class Další zajímavé metody: static Class<?> forName( String name, boolean init, ClassLoader loader ) - zavede třídu do paměti (pokud tam dosud není) a event. ji inicializuje. T newInstance( ) - instanciuje třídu tj. vytvoří a vrátí objekt. Pro testy is***: Annotation, AnnonymousClass, Array, AssignableFrom, Enum, Instance, Interface, LocalClass, MemberClass, Primitive, Synthetic. Metody hashCode, clone a equals jsou dědictvím java.lang.Objectu. PJV25

public static void main Class-objekty Class<Object> getClass( ), toString( ) Class<Main> Class<?> toString( ) Class<Z> def. methods is*** public static void main stack Z Z z = new Z( ); Class c1 = z.getClass( ); Class c2 = Z.class; c2 c1 z objekt PJV25

Proxy čili zástupce Nechat se zastupovat lze i ve virtualitě. Třída java.lang.reflect.Proxy má jen konstruktor: protected Proxy( InvocationHandler h ) a jen public static metody: InvocationHandler get InvocationHandler( Object proxy ) Class getProxyClass( ClassLoader clo, Class … interfaces ) boolean isProxyClass( Class cla ) Object newProxyInstance( ) ( ClassLoader clo, Class[ ] interfaces, InvocationHandler h ) PJV25

java.lang.reflect $Proxy0 $Proxy0 MyHandler Proxy ProxyA PJV25 InvocationHandler java.io java.lang.Object all final methods: getClass, notify, notifyAll, 3 x wait Serializable MyHandler MyInterface Proxy ProxyA 4 static methods Class[ ] sun.com.proxy sun.com.proxy $Proxy0 public final $Proxy0 public final invocation handler object proxy object interfaces 3 instant methods: hashCode equals, toString + from interfaces methods, fields value object extends implements refers PJV25