Pokud jde o dodržování zásad objektově orientovaného programování, mám obavu o trend moderních programovacích jazyků. V programovacích jazycích, které byly skutečnou oslavou objektově orientovaného programování. C++, se používal ke zrušení objektu i destruktor, ve kterém jste věděli, kdy jej voláte i jak se má postupovat při rušení objektů. Bylo to sice pracné, ale přesně jste věděli, co děláte. Jen jste to museli udělat dobře.
Java hýčka programátoru tak, že může fungovat jako zlobivé dítě ve školce. Může si vybrat jakékoli hračky z police (vytvářet instance tříd), a když ho to přestane bavit, nemusí je uklidit (zrušit z paměti). Nemusí to udělat proto, že v tomto případě to za něj udělá někdo jiný. Konkrétně je to práce Garbage Collectora.
Je to problém? Problém je, že jakmile řízení předáte někomu jinému, ztrácíte nad výsledkem kontrolu. Proto například. Java není považována za deterministický jazyk – neumíme při ní přesně specifikovat, kolik budou trvat jednotlivé části kódu.
Standardní Java nemůže být použita v systémech, ve kterých potřebujeme přesně spočítat, maximální odezvu aplikace. Např. brzdy auta. Co by se stalo, kdybyste uviděli chodce na přechodu, stlačili brzdu a auto by se na 2 sekundy zamyslelo, co udělá ve stylu přesýpacích hodin s Windows 95/ME? Asi by to nedopadlo moc dobře.
Představte si linku plnění piva do lahví v pivaři. ve Velkém Šariši. Pivní láhev se naplní a posune po pase. Pokud by program napsaný ve standardní Javě dávkoval pivo do lahví, program by se jednou by se na chvíli zamyslel a spustil by plnění láhve právě v době, kdy se posouvají pivní láhve, tedy do meziprostoru. Pivo by skončilo na podlaze.
Řešení je použít například JamaicaVM. V ní nejsou použity mezipaměti (cache). Právě ty vedou k nedereminističnosti. Kromě toho má deterministický garbage collector, tedy přesně víme, kdy nastane a kolik bude trvat.
JamaicaVM je používána v právu v automobilovém průmyslu a v aplikacích, které jsou nasazeny pro průmyslovou automatizaci.
Viac informacií preberáme na kurze:
Kurz JAVAOOP - Java: Objektově Orientované Programování
Marián Knězek