Rozhraní
m (kategorizace) |
|||
| (Nejsou zobrazeny 2 mezilehlé verze od 1 uživatele.) | |||
| Řádka 1: | Řádka 1: | ||
| − | Objektově orientované jazyky poskytují pro realizaci tříd, kromě dědičnosti, dalši prostředek - | + | Objektově orientované jazyky poskytují pro realizaci tříd, kromě dědičnosti, dalši prostředek - rozhraní. Rozhraní definuje soubor metod bez jejich implementace (podobně jako kompletně virtuální třída). Analogie je v rozepsané kuchařce, kdy víme co to bude za jídlo a z čeho budeme vařit, ale postup neznáme. Třída, která implementuje toto rozhrani (tj. implementuje - definuje - všechny jeho metody), je po té v polymorfovatelná do ukazatele definovaného tímto rozhraním, což znamená, ze klient ví, že tato třída má implementované všechny metody, které potřebuje (a které jsou definované v rozhraní). |
| − | Deklarace | + | // trochu divoký vysvětlení |
| + | |||
| + | Deklarace rozhraní je podobná deklaraci třídy | ||
interface jmeno { | interface jmeno { | ||
| Řádka 7: | Řádka 9: | ||
} | } | ||
| − | V Javě se implementace rozhraní zapiše pomoci kličoveho slova implements | + | V Javě se implementace rozhraní zapiše pomoci kličoveho slova implements |
| + | |||
| + | Trida implements Rozhrani { | ||
| + | ... | ||
| + | } | ||
| + | |||
V jiných jazycích (C++, C#, ...) používáme dvojtečku, přičemž první třída za dvojtečkou je obvykle dědění, ostatní jsou implementace rozhraní (i když v C++ je to jedno, tam můžeme implementovat i dědit od více tříd). Implementovat můžeme i několik rozhraní (například implements Cloneable, Runnable) | V jiných jazycích (C++, C#, ...) používáme dvojtečku, přičemž první třída za dvojtečkou je obvykle dědění, ostatní jsou implementace rozhraní (i když v C++ je to jedno, tam můžeme implementovat i dědit od více tříd). Implementovat můžeme i několik rozhraní (například implements Cloneable, Runnable) | ||
Může se stát, že 2 rozhraní mají stejné metody k implementaci. Implementovat je tedy možné | Může se stát, že 2 rozhraní mají stejné metody k implementaci. Implementovat je tedy možné | ||
* '''Implicitně''' - Implementujeme metodu první nalezené metody s tímto jménem ve všech rozhraních, nebo selže, záleží na jazyku | * '''Implicitně''' - Implementujeme metodu první nalezené metody s tímto jménem ve všech rozhraních, nebo selže, záleží na jazyku | ||
| − | * '''Explicitně''' - Implementujeme metodu tak, že řekneme kterou metodu kterého rozhraní implementujeme | + | * '''Explicitně''' - Implementujeme metodu tak, že řekneme kterou metodu kterého rozhraní implementujeme např: |
| + | public this.type Cloneable.Clone() { | ||
| + | // tělo | ||
| + | } | ||
Nejsilnější zbraní rozhraní je, že odděluje kód od definic (vhodné např. pro pluginové systémy) a je sdružuje třídy do jedné skupiny funkčnosti. | Nejsilnější zbraní rozhraní je, že odděluje kód od definic (vhodné např. pro pluginové systémy) a je sdružuje třídy do jedné skupiny funkčnosti. | ||
| + | |||
| + | |||
| + | {{fav-kiv-bzinf}} | ||
| + | [[Kategorie:fav-kiv-bzinf]] | ||
Aktuální verze z 20. 2. 2014, 06:37
Objektově orientované jazyky poskytují pro realizaci tříd, kromě dědičnosti, dalši prostředek - rozhraní. Rozhraní definuje soubor metod bez jejich implementace (podobně jako kompletně virtuální třída). Analogie je v rozepsané kuchařce, kdy víme co to bude za jídlo a z čeho budeme vařit, ale postup neznáme. Třída, která implementuje toto rozhrani (tj. implementuje - definuje - všechny jeho metody), je po té v polymorfovatelná do ukazatele definovaného tímto rozhraním, což znamená, ze klient ví, že tato třída má implementované všechny metody, které potřebuje (a které jsou definované v rozhraní).
// trochu divoký vysvětlení
Deklarace rozhraní je podobná deklaraci třídy
interface jmeno {
// hlavicky metod, všechny samozřejmě virtuální a abstraktní
}
V Javě se implementace rozhraní zapiše pomoci kličoveho slova implements
Trida implements Rozhrani {
...
}
V jiných jazycích (C++, C#, ...) používáme dvojtečku, přičemž první třída za dvojtečkou je obvykle dědění, ostatní jsou implementace rozhraní (i když v C++ je to jedno, tam můžeme implementovat i dědit od více tříd). Implementovat můžeme i několik rozhraní (například implements Cloneable, Runnable)
Může se stát, že 2 rozhraní mají stejné metody k implementaci. Implementovat je tedy možné
- Implicitně - Implementujeme metodu první nalezené metody s tímto jménem ve všech rozhraních, nebo selže, záleží na jazyku
- Explicitně - Implementujeme metodu tak, že řekneme kterou metodu kterého rozhraní implementujeme např:
public this.type Cloneable.Clone() {
// tělo
}
Nejsilnější zbraní rozhraní je, že odděluje kód od definic (vhodné např. pro pluginové systémy) a je sdružuje třídy do jedné skupiny funkčnosti.