Existují třídy tzv. top level a naopak vnořené třídy. Vnořené třídy jsou deklarované uvnitř jiné třídy nebo rozhraní. Mezi vnořené třídy se řadí členské třídy, lokální třídy a anonymní třídy. V grafu budou mít vnitřní třídy speciální vrchol, kde anonymní třídy budou odlišeny jiným druhem vrcholu.
Třída může obsahovat atributy, metody, instance, statickou inicializaci a konstruktory. V grafu budou mít třídy vztah s atributy (have_attribute) a metodami (have_method). S konstruktory bude zacházeno jako s metodami s tím rozdílem, že budou vrcholy odlišeny typem.
Popis deklarace třídy je následující:
ClassDeclaration:Z první části je zjevné, že existují dva druhy tříd. První jsou normální třídy a druhou je výčet (enum). Mezi normální třídou a výčtem je mnoho rozdílného, z hlediska grafu však ne, proto budou tyto dvě entity rozlišeny pouze typem vrcholu a dále s nimi bude zacházeno stejně.
NormalClassDeclaration
EnumDeclaration
NormalClassDeclaration:
ClassModifiersoptclass
Identifier TypeParametersopt
Superopt Interfacesopt ClassBody
Při deklaraci třídy jsou možné následující modifikátory:
- Annotation
- public
- protected
- private
- abstract
- static
- final
- strictfp
S třídami, které deklarují generický typ bude zacházeno jako s ostatními třídami. Jméno třídy bude použito bez typového parametru. Java kompilátor se již postará o to aby byl typový parametr používán správně, proto není potřeba toto v grafu ošetřovat.
Třída může dědit od rodiče, kterého může mít pouze jednoho. V grafu nebude na počet předků brán zřetel (o to se stará kompilátor). Vrchol zastupující třídu tak bude mít možnost mít vztah s jinou třídou (extends), což bude charakterizovat dědění. Dále může třída implementovat rozhraní. Je možné implementovat více rozhraní, proto v grafu bude možnost navázat vztah na více vrcholů typu rozhraní.
Protože z hlediska vytváření grafu není mezi vnitřní třídou, anonymní třídou a jinou třídou rozdíl, bude s nimi pracováno stejně. Budou však rozlišeny typem vrcholu.
Protože není potřeba podrobně mapovat strukturu java balíků (package), bude tato informace uložena v každé tříde pouze jako vlastnost.
Souhrn
Vlastnosti:
- name (String)
- static (yes/no)
- abstract (yes/no)
- final (yes/no)
- anonym (yes/no)
- inner (yes/no)
- access (public/private/protected)
- package (String)
- strictfp (yes/no)
- extends (Třída)
- uses (Třída)
- implements (Rozhraní)
- have_inner (Vnitřní třída)
- have_anonym (Anonymní třída)
- have_method (Metoda)
- have_attribute (Atribut)
- have_annotation (Anotace)
Pro příklad je vytvořen následující kód. Třída s názvem Třída je označena modifikátory public a final. Dále tato třída dědí od třídy Object a implementuje rozhraní s názvem Runnable. Toto rozhraní vyžaduje implementaci metody run. Třída dále obsahuje jeden atribut, který je navíc typu, jež je deklarován uvnitř třídy. Obsažena je tedy také vnitřní třída s názvem VnitrniTrida, která disponuje jením atributem.
Ukážeme si, jak by mohl vypadat graf pro tento kód.
1 2 3 4 5 6 7 8 9 10 11 12 | package experiment; public final class Trida extends Object implements Runnable{ class VnitrniTrida{ public String atribut_vnitrni_tridy; } private VnitrniTrida atribut = new VnitrniTrida(); public void run() { // .. } } |
Zdroje:
http://docs.oracle.com/javase/specs/jls/se7/html/jls-8.html
http://docs.oracle.com/javase/specs/jls/se7/html/jls-15.html#jls-15.4
Žádné komentáře:
Okomentovat