Java: Zápis tříd
|  (→Konstruktor:  Vytvoření popisu) |  (→Konstruktor:  Doplnění volání jiného konstruktoru.) | ||
| Řádka 85: | Řádka 85: | ||
| ; Syntaxe: | ; Syntaxe: | ||
| − |   public class '' | + |   public class ''NazevTridy'' { | 
| − | + | ||
| + |       // Tady je konstruktor: | ||
| + |      [[Java: Modifikátory přístupu|modifikátor_přístupu]] ''NazevTridy''(''parametry'') { | ||
|          ''// ... Co se má dít...'' |          ''// ... Co se má dít...'' | ||
|       } |       } | ||
| Řádka 92: | Řádka 94: | ||
|   } |   } | ||
| + | <div class="Poznamka"> | ||
| ; Poznámky | ; Poznámky | ||
| * Můžeme použít více konstruktorů, které se budou lišit počtem či typem parametrů (nebo obojím). | * Můžeme použít více konstruktorů, které se budou lišit počtem či typem parametrů (nebo obojím). | ||
| * Pokud nezapíšeme žádný konstruktor, překladač vytvoří automaticky konstruktor bez parametrů. | * Pokud nezapíšeme žádný konstruktor, překladač vytvoří automaticky konstruktor bez parametrů. | ||
| + | * Z jednoho konstruktoru můžeme vyvolat jiný konstruktor. Musíme to však provést jako první příkaz konstruktoru: | ||
| + |  this(''parametry''); | ||
| + | </div> | ||
| ; Příklad | ; Příklad | ||
| + | Třída <code>Zbozi</code> s konstruktory: | ||
|   public class Zbozi { |   public class Zbozi { | ||
| − | + |      String nazev; | |
| − | + |      TypZachazeni omezeni; | |
| − | + |      int cena; | |
| − | + |      ... | |
| − | + |      ''// První konstruktor'' | |
| − | + |      public Zbozi(String nazev) { | |
| − | + |          this.nazev = nazev; | |
| − | + |          this.omezeni = TypZachazeni.zadneOmezeni(); | |
| − | + |          this.cena = 0; | |
| − | + |      } | |
| + | |||
| + |      ''// Druhý konstruktor'' | ||
| + |      public Zbozi(String nazev, int cena) { | ||
| + |          this(nazev); // volání druhého konstruktoru | ||
| + |          this.cena = cena; // doplnění ceny podle parametru | ||
| + |      ... | ||
|   } |   } | ||
| + | |||
| + | Vytvoření instance třídy <code>Zbozi</code>: | ||
| + |  Zbozi z1 = new Zbozi("Klavír"); | ||
| + |  String nazev = "Kaktus"; | ||
| + |  Zbozi z2 = new Zbozi(nazev, 150); | ||
| == Použití třídy == | == Použití třídy == | ||
Verze z 1. 12. 2015, 08:20
Java je objektově orientovaný jazyk. Chování systému (a tedy algoritmus) popisujeme jako komunikaci mezi objekty, které mají vlastnosti (atributy) a posílají si zprávy.
Zde uvádíme pouze syntaxi zápisu v Javě s minimem teorie. Více o OOP a jeho principech a konstruktech viz Objektově_orientované_programování.
Při zápisu programu v Javě se budeme řídit dohodnutými konvencemi pro zápis kódu.
| Obsah | 
Třída
Třída představuje „předpis“ pro tvorbu objektů. Ve třídě je tedy popsáno:
- jaké vlastnosti mají objekty dané třídy
- a na jaké zprávy umí objekty dané třídy reagovat.
public class MojeTrida {
   //
   // popis vlastností třídy
   //
   // popis zpráv
   //
}
Atributy
Nebo také vlastnosti popisují stav objektu. Z reálného objektu si vybíráme pouze ty vlastnosti, které jsou pro náš systém důležité.
Třeba třída Automobil bude mít v nějakém systému jako vlastnost jmenoVlastnika a nebude mít žádnou vlastnost, popisující výkon motoru. Pro náš systém je to tak vhodné. Jiný systém může u automobilu sledovat výkon a ne jméno vlastníka.
Zápis atributu:
- může být modifikátor přístupu
- datový typ
- název
Příklad:
int delka; public String jmeno;
Tedy ve třídě:
public class Zbozi {
   String nazev;
   TypZachazeni omezeni;
   int cena;
   ...
}
Zprávy/metody
- Metoda popisuje, co se má stát, když objektu někdo pošle zprávu.
-  Například popisuje, jak má panáček zareagovat, když mu někdo pošle zprávu moveRight.
Syntaxe:
modifikátor_přístupu návratový_typ nazevMetody ( parametry_oddělené_čárkou ) { popis, co se má dělat v reakci na metodu }
Příklady:
public void act() { ... }
public int distanceTo(Enemy enemy) { ... }
protected double ujetaVzdalenost() { ... }
private void pridejPanacka(int sloupec) { ... }
- Zápis volání („spuštění“) metod viz kapitola Volání metod.
Návratová hodnota metody
-  Pokud má metoda návratový typ jiný než void, tak na konci potřebujeme vrátit výsledek.
-  Použijeme klíčové slovo return.
- Příklad
public double ujetaVzdalenost() {
	double vysledek = 0;
	
	// ... tady nějak spočítám výsledek... ;)
	
	return vysledek;
}
Konstruktor
- Konstruktor třídy popisuje, co se má stát při vytvoření nové instance třídy.
-  Můžeme si ho představit jako „metodu“, která se volá při zavolání operátoru new.
- Syntaxe
public class NazevTridy {
    // Tady je konstruktor:
    modifikátor_přístupu NazevTridy(parametry) {
       // ... Co se má dít...
    }
    // ... Další metody
}
- Poznámky
- Můžeme použít více konstruktorů, které se budou lišit počtem či typem parametrů (nebo obojím).
- Pokud nezapíšeme žádný konstruktor, překladač vytvoří automaticky konstruktor bez parametrů.
- Z jednoho konstruktoru můžeme vyvolat jiný konstruktor. Musíme to však provést jako první příkaz konstruktoru:
this(parametry);
- Příklad
Třída Zbozi s konstruktory:
public class Zbozi {
    String nazev;
    TypZachazeni omezeni;
    int cena;
    ...
    // První konstruktor
    public Zbozi(String nazev) {
        this.nazev = nazev;
        this.omezeni = TypZachazeni.zadneOmezeni();
        this.cena = 0;
    }
    // Druhý konstruktor
    public Zbozi(String nazev, int cena) {
        this(nazev); // volání druhého konstruktoru
        this.cena = cena; // doplnění ceny podle parametru
    ...
}
Vytvoření instance třídy Zbozi:
Zbozi z1 = new Zbozi("Klavír");
String nazev = "Kaktus";
Zbozi z2 = new Zbozi(nazev, 150);
Použití třídy
Vytvoření instance
- Obecně
new NazevTridy(hodnoty_parametrů_konstruktoru)
- Například:
Automobil a1 = new Automobil(5);
Volání metod
- Volání metody instance nebo též zaslání zprávy instanci znamená, že spustíme kód, který je v metodě připraven.
- Příkazy zapsané v metodě se tedy provedou a metoda případně vrátí návratovou hodnotu.
Syntaxe:
instance_třídy.nazevMetody ( hodnoty_parametrů );
Příklady:
this.act();
int vzdalenost = panacek.distanceTo(this);
double celkem; celkem = this.ujetaVzdalenost();
this.getWorld().pridejPanacka(3);
Obdelnik o = new Obdelnik(5, 4); o.posun(10, 10); System.out.println(o.plocha());
Přístup k atributům
o.poziceX = 10; System.out.println(o.poziceY);
Přístup k atributům je ovlivněn modifikátory přístupu.
Další zdroje
- Pitner Tomáš. Programování v jazyce Java. 2003. Dostupné z: http://www.fi.muni.cz/~tomp/slides/pb162/printable.html
