LINUXSOFT.cz Přeskoč levou lištu

ARCHIV



   

> JAK na třídy

V minulém článku o JAK sem shrnul základní metody a mechanismy, které se hodí každému programátorovi. JavaScript je však jazyk objektový, a i JAK je na objektech založen. Jak se s objekty a jejich třídy pracuje, se pokusím vysvětlit v tomto článku.

20.1.2011 00:00 | Ondřej Tůma | Články autora | přečteno 9790×

Základním prvkem knihovny je tedy objekt, instance třídy, resp. instance  JAK třídy. JAK totiž obsahuje obal pro definici a aplikaci tříd, obdobně, jako to známe z ostatních objektových jazyků např. C++. Můžete tak například snadno definovat třídu, která dědí z jiné, nebo je singltonem. První příklad ukazuje jak se takové třídy za pomocí knihovny JAK vytvářejí:
var Terorist = JAK.ClassMaker.makeClass({
NAME: "Terorist",
VERSION: "1.0"
});

Terorist._counter = 0; // statická proměnná
Terorist.prototype.name = ''; // dynamická proměnná

Terorist.prototype.$constructor = function(name){
this.name = name;
Terorist._counter++;
}

Terorist.prototype.$destructor = function(){
Terorist._counter--;
}

Terorist.prototype.talk = function(){
document.write('My name is ' + this.name + ', the ' + this.constructor.NAME);
document.write('. I kill you !
');
}

var ahmed = new Terorist('Ahmed');
ahmed.talk();

document.write('Count of Terorists: '+ Terorist._counter+'
');
V kódu je vidět jak se definuje třída pomocí ClassMakeru. Parametry metody makeClass jsou název a verze třídy. Na dalším řádku je vidět definice statické proměnné. Ta je sdílená napříč všemi instancemi třídy. Dynamická proměnná (tedy lokální pro každou instanci) je přístupná přes operátor this. Přístup do paměti takové proměnné je copy_on_write, tedy vlastní skutečná kopie proměnné nastává až v okamžiku zápisu přes this. Zápis přes Trida.prototype mění statickou hodnotu, kterou uvidí všechny instance které si nevytvořili vlastní kopii zápisem.

Na definici metod není nic zvláštního až na specifickou metodu $constructor. Ta je volána po vytvoření objektu automaticky, pokud existuje. Lze definovat i metodu $destructor, nicméně ta se při mazání automaticky nevolá, a musíte si jí tak zavolat sami. Ostatní kód již netřeba komentovat, vytvoříme instanci třídy a zavoláme její metodu.

Dědičnost

Třída která je potomkem jiné třídy se v JAKu definuje neskutečně jednoduše, prostě metodě makeClass dáte ještě jeden parametr EXTEND a v něm uvedete rodiče oné třídy. Možnosti dědičnosti jsou však značně omezené a to také naznačuje následující ukázka.
var Bomberman = JAK.ClassMaker.makeClass({
NAME: "Bomberman",
VERSION: "1.0",
EXTEND: Terorist
});

Bomberman.prototype.$constructor = function(name, bombs){
this.$super(name);
this.bombs = bombs;
}

Bomberman.prototype.$destructor = function(){
document.write('BUM !!
');
this.$super();
}

Bomberman.prototype.talk = function(){
Terorist.prototype.talk.call(this); // totéž co this.$super();
document.write('I kill you all with my ' + this.bombs + ' bombs.
')
}

var mushafa = new Bomberman('Mushafa', 2);
mushafa.talk();
mushafa.$destructor();
Pokud chceme aby nějaká metoda potomka třídy zavolala metodu svého rodiče, provedeme to metodou $super. Ta volá metodu rodiče, která je stejná jako metoda, ve které je $super použito, viz definice metod $constructor. Je jí tím pádem možné volat pouze v metodě se stejným názvem, tedy v takové, kterou přepisujeme.

Dále můžeme dědit jen z jedné třídy, ale ta může být potomkem jiné. V případě že potřebujete volat libovolnou metodu libovolného předka, použijete zápis Prarodic.prototype.method.call(this, arg1, arg2...), tak jak je to v ukázce u metody Bomberman.prototype.talk. No a nakonec nemůžeme definovat metody, které je možné přepsat.

Interface

Další způsob jak rozšířit funkčnost nějaké třídy je použít Interface (rozhraní). Těch může být uvedeno více, a v případě konfliktů v názvech metod vyhrává metoda z posledního uvedeného rozhraní. Kombinace rodiče (EXTEND) a rozhraní (IMPLEMENT) není vyloučena, což ukazuje i následující kód.
var Hacker = JAK.ClassMaker.makeInterface({
NAME: "Hacker",
VERSION: "1.0",
});

Hacker.prototype.hack = function(){
document.write('Your PC is hacked, cha cha chaaaa!
');
};

var eTerorist = JAK.ClassMaker.makeClass({
NAME: "eTerororist",
VERSION: "1.0",
EXTEND: Terorist,
IMPLEMENT: [Hacker]
});

var farad = new eTerorist('Farad');
farad.hack();
farad.talk();

Singleton a Statická třída

Zvláštní lahůdkou na závěr jsou třídy typu Singleton a Statické třídy, jejich význam je obdobný. Instance těchto tříd nelze vytvořit neboť Singleton může být jen jeden, a statická třída nemůže být dynamická :) Než tuto stručnou a prostou informaci doplním ukázkou kódu, nesmím zapomenou upozornit na to, že i tyto typy tříd se v knihovně sami objevují. Které to jsou neprozradím a uložím to laskavému čtenáři za domácí úkol k prozkoumání.
// Singleton
var BinLadin = JAK.ClassMaker.makeSingleton({
NAME: "BinLadin",
VERSION: "1.0",
EXTEND: Terorist
});

BinLadin.prototype.$constructor = function(){
this.$super(this.constructor.NAME);
}

BinLadin.prototype.talk = function(){
document.write("I'm "+this.name+'. ');
document.write('America must be destroyed !!
');
}

BinLadin.getInstance().talk();
//new BinLadin(); // končí s chybou

// Static
var Zero = JAK.ClassMaker.makeStatic({
NAME: "Zero",
VERSION: "1.0"
});

Zero.value = 0;

console.log(Zero.value);
//new Zero(); // končí s chybou

Závěrem

JavaScript je jazyk objektový, ale jeho přístup k objektům je zcela jiný, než v ostatních objektových jazycích. Knihovna JAK se pokouší tyto rozdíly minimalizovat a jazyk samotný rozšířit. Za sebe mohu říct že se jí to daří a přibližuje webové programování ostatním programátorům, kteří jsou zvyklí na jiné objektové jazyky.

Verze pro tisk

pridej.cz

 

DISKUZE

Interface 20.1.2011 15:29 František Kučera




Příspívat do diskuze mohou pouze registrovaní uživatelé.
> Vyhledávání software
> Vyhledávání článků

28.11.2018 23:56 /František Kučera
Prosincový sraz spolku OpenAlt se koná ve středu 5.12.2018 od 16:00 na adrese Zikova 1903/4, Praha 6. Tentokrát navštívíme organizaci CESNET. Na programu jsou dvě přednášky: Distribuované úložiště Ceph (Michal Strnad) a Plně šifrovaný disk na moderním systému (Ondřej Caletka). Následně se přesuneme do některé z nedalekých restaurací, kde budeme pokračovat v diskusi.
Komentářů: 1

12.11.2018 21:28 /Redakce Linuxsoft.cz
22. listopadu 2018 se koná v Praze na Karlově náměstí již pátý ročník konference s tématem Datová centra pro business, která nabídne odpovědi na aktuální a často řešené otázky: Jaké jsou aktuální trendy v oblasti datových center a jak je optimálně využít pro vlastní prospěch? Jak si zajistit odpovídající služby datových center? Podle jakých kritérií vybírat dodavatele služeb? Jak volit vhodné součásti infrastruktury při budování či rozšiřování vlastního datového centra? Jak efektivně datové centrum spravovat? Jak co nejlépe eliminovat možná rizika? apod. Příznivci LinuxSoftu mohou při registraci uplatnit kód LIN350, který jim přinese zvýhodněné vstupné s 50% slevou.
Přidat komentář

6.11.2018 2:04 /František Kučera
Říjnový pražský sraz spolku OpenAlt se koná v listopadu – již tento čtvrtek – 8. 11. 2018 od 18:00 v Radegastovně Perón (Stroupežnického 20, Praha 5). Tentokrát bez oficiální přednášky, ale zato s dobrým jídlem a pivem – volná diskuse na téma umění a technologie, IoT, CNC, svobodný software, hardware a další hračky.
Přidat komentář

4.10.2018 21:30 /Ondřej Čečák
LinuxDays 2018 již tento víkend, registrace je otevřená.
Přidat komentář

18.9.2018 23:30 /František Kučera
Zářijový pražský sraz spolku OpenAlt se koná již tento čtvrtek – 20. 9. 2018 od 18:00 v Radegastovně Perón (Stroupežnického 20, Praha 5). Tentokrát bez oficiální přednášky, ale zato s dobrým jídlem a pivem – volná diskuse na téma IoT, CNC, svobodný software, hardware a další hračky.
Přidat komentář

9.9.2018 14:15 /Redakce Linuxsoft.cz
20.9.2018 proběhne v pražském Kongresovém centru Vavruška konference Mobilní řešení pro business. Návštěvníci si vyslechnou mimo jiné přednášky na témata: Nejdůležitější aktuální trendy v oblasti mobilních technologií, správa a zabezpečení mobilních zařízení ve firmách, jak mobilně přistupovat k informačnímu systému firmy, kdy se vyplatí používat odolná mobilní zařízení nebo jak zabezpečit mobilní komunikaci.
Přidat komentář

12.8.2018 16:58 /František Kučera
Srpnový pražský sraz spolku OpenAlt se koná ve čtvrtek – 16. 8. 2018 od 19:00 v Kavárně Ideál (Sázavská 30, Praha), kde máme rezervovaný salonek. Tentokrát jsou tématem srazu databáze prezentaci svého projektu si pro nás připravil Standa Dzik. Dále bude prostor, abychom probrali nápady na využití IoT a sítě The Things Network, případně další témata.
Přidat komentář

16.7.2018 1:05 /František Kučera
Červencový pražský sraz spolku OpenAlt se koná již tento čtvrtek – 19. 7. 2018 od 18:00 v Kavárně Ideál (Sázavská 30, Praha), kde máme rezervovaný salonek. Tentokrát bude přednáška na téma: automatizační nástroj Ansible, kterou si připravil Martin Vicián.
Přidat komentář

   Více ...   Přidat zprávičku

> Poslední diskuze

13.12.2018 10:57 / Jan Mareš
Re: zavináč

2.12.2018 23:56 / František Kučera
Sraz

5.10.2018 17:12 / Jakub Kuljovsky
Re: Jaký kurz a software by jste doporučili pro začínajcího kodéra?

20.9.2018 10:04 / Jan Ober
Jaký kurz a software by jste doporučili pro začínajcího kodéra?

20.9.2018 10:00 / Jan Ober
Re: Gimp

Více ...

ISSN 1801-3805 | Provozovatel: Pavel Kysilka, IČ: 72868490 (2003-2019) | mail at linuxsoft dot cz | Design: www.megadesign.cz | Textová verze