sobota 4. dubna 2015

Uložení rozhraní jako grafu

Dokumentace Java definuje rozhraní jako nový referenční typ, který může obsahovat třídy, rozhraní, konstanty a abstraktní metody. Rozhraní neobsahuje implementaci metod, avšak implementující třídy musí tyto metody implementovat.
InterfaceDeclaration:
    NormalInterfaceDeclaration
    AnnotationTypeDeclaration

NormalInterfaceDeclaration:
    InterfaceModifiersopt interface Identifier
    TypeParametersopt ExtendsInterfacesopt InterfaceBody
Máme k dispozici 2 druhy deklarací rozhraní. Buď deklarujeme klasické rozhraní, nebo anotační typ. Deklaraci anotačních typů se věnuje další článek.

Hlavička klasického rozhraní obsahuje Seznam modifikátorů, klíčové slovo pro identifikaci deklaracec rozhraní, identifikátor označující konkrétní rozhraní. Dále je možné přiložit typové parametry, pokud deklarujeme generické rozhraní. Následně máme možnost vypsat seznam rozhraní, od kterých chceme dědit. Nakonec je nutno napsat tělo rozhraní.

Možné modifikátory při deklaraci rozhraní jsou:
  • Annotations
  • public
  • protected
  • private
  • abstract
  • static
  • strictfp
Rozhraní má také možnost být oanotováno. Toto značí modifikátor Annotations a v grafu bude anotace rozhraní interpretována vztahem s názvem have_annotation, který bude mezi vrcholem rozhraní a anotací. Modifikátory přístupu budou také zaznamenány do vlastnosti s názvem access a ostatní modifikátory budou mít vlastní vlastnost se stejnojmenným názvem a pravdivostní hodnotou.

Dědění od jiných rozhraníbude značeno vztahem s názvem extends, který bude mezi vrcholem dědícího rozhraní a rozhraní, od kterého je děděno.Na rozdíl od tříd, je možné dedit od více rozhraní.

Jak již bylo řečeno, v těle deklarace rozhraní mohou být:
  • deklarace konstant
  • deklarace abstraktních metod
  • deklarace tříd
  • deklarace dalších rozhraní
Pokud porovnáme možný obsah třídy a rozhraní, z hlediska uložení do grafumůžeme najít podobnosti. Například deklarace tříd a rozhraní může být obsaženo jak ve třídě, tak v rozhraní. V grafu tak budou tyto entity uloženy jako vrchol s patřičným typem a bude navázán vztah mezi rozhraním a touto členskou entitou s názvem have_inner. Dále je ve třídě umožněno deklarovat metody, ale v rozhraní je možné deklarovat pouze abstraktní metody. Abstraktní metody jsou však podmnožina klasických metod, takže je možné s nimi pracovat a ukládat je stejným způsobem, čili pro metodu bude vytvořen zvláštní vrchol s typem metoda a vytvoří se vztah mezi rozhraním a touto metodou. Podobná situace nastává u konstant v rozhraní a atributů ve třídě. Pro každou konstantu v rozhraní bude vytvořen vrchol s typem atribut a vztahem se vytvoří relace mezi rozhraním a tímto atributem zastupujícím konstantu.

Souhrn

Vlastnosti:
  • name (String)
  • static (yes/no)
  • abstract (yes/no)
  • inner (yes/no)
  • access (public/private/protected)
  • package (String) 
  • strictfp (yes/no) 
Vztahy:
  • extends (Rozhraní)
  • uses (Třída, rozhraní nebo výčet)
  • have_inner (Vnitřní třída, rozhraní nebo výčet)
  • have_anonym (Anonymní třída)
  • have_method (Metoda)
  • have_attribute (Atribut)
Jako jednoduchý příklad vytvoříme rozhraní s jednou abstraktní metodou a dvěmi konstantami, z nichž jedna je instancí vnitřního rozhraní.


1
 2
 3
 4
 5
 6
 7
 8
 9
10
public interface Rozhrani extends Runnable{

 interface VnitrniRozhrani{
  public static String jina_konstanta = "hodnota";
 };

 public static String konstanta = "hodnota";
 public VnitrniRozhrani vr = new VnitrniRozhrani() {};
 public void metoda();
}



Zdroje:
http://docs.oracle.com/javase/specs/jls/se7/html/jls-9.html#jls-9.1

Žádné komentáře:

Okomentovat