Image
29.6.2016 0 Comments

Programujeme pre Android /3.časť

Skôr ako začneme písať prvé riadky programového kódu, musíme sa oboznámiť s niekoľkými principiálnymi rozdielmi medzi programovacími jazykmi C++ a Java. Je trúfalé tieto rozdiely sumarizovať v rámci jediného článku, ale z dôvodu zamerania sa na programovanie pre Android je to nevyhnnutné.

Prečo Java?

Skúsení programátori používajúci jazyk C++ si v prvom rade položia otázku: „Prečo bola na vývoj Androidu použitá práve Java?“ Odpoveď na túto otázku existuje, je však zamotaná v spleti faktov a názorov. V prvom rade treba uviesť, že Android nepoužíva Javu. Jeho API sa výrazne podobá na Java-frontend, ale bytecode je vykonávaný pomocou Dalvik VM, ktorý nemožno porovnávať s JVM. Takisto treba spomenúť, že Android API po doplnení o NDK dokáže spracovať aj kód napísaný v jazyku C++, a to takmer bez úprav. Viacerí profesionálni programátori tvrdia, že dôvodom uprednostnenia Javy pred jazykom C++ je absencia ukazovateľov. Aplikácie napísané pomocou Javy tak nemajú možnosť pristupovať k ľubovoľným pamäťovým blokom. Ďalší z dôvodov na použite Javy je ten, že v období vzniku prvého Androidu existovala vo svete veľmi silná skupina programátorov, ktorí Javu obľubovali a uprednostňovali. Polemiku súvisiacu s touto témou by sme mohli ukončiť nasledujúcou myšlienkou: Nie je dôležité, aký programovací jazyk ani aké vývojové prostredie používame, dôležité je, že máme chuť a chceme programovať.

Obr. 1 Android Studio a Android Virtual Device so spustenou aplikáciou

Principiálne rozdiely medzi jazykmi C++ a Java

Nebudeme hovoriť o základných ani najdôležitejších, ale skôr o principiálnych rozdieloch:

1. Kód napísaný v jazyku C++ sa prekladá (compile) pre konkrétnu platformu. Kód napísaný v jazyku Java sa interpretuje (interprete) pomocou VM vo forme bytecode (intermediate language). Virtuálne stroje vyvinuté pre konkrétne platformy vykonávajú ten istý bytecode bez nutnosti jeho úprav. Rýchlosť vykonania kompilovaného a interpretovaného kódu je otázna – v minulosti bol kompilovaný kód jednoznačne rýchlejší, ale v súčasnosti sa interpretácia bytecode napr. cestou JIT svojou rýchlosťou približuje vykonávaniu kompilovaného kódu.

2. Java má veľmi striktnú kontrolu typov a rozsahov polí. Pretože nepozná polia znakov, text uzavretý v úvodzovkách je automaticky konvertovaný na objekt typu String. Premenné primitívnych typov sú automaticky inicializované na 0, resp. príslušný ekvivalent. Referencie (reference) objektov sú automaticky inicializované na null. V prípade typu char Java používa znakovú súpravu Unicode, čo síce zvyšuje pamäťové nároky, ale súčasne rieši globálnu portabilnosť. Primitívne typy možno pomocou tzv. obálok (type wrappers) previesť na objekty.

3. Java z dôvodu bezpečnosti nepozná ukazovatele (pointers), nedefinuje automatické štandardné (default) ani kopírovacie (copy) konštruktory. Objekty neruší pomocou deštruktorov. Namiesto nich operuje tzv. zberač odpadu (garbage collector), ktorý pomocou metódy finalize() uvoľňuje používané zdroje. Objekt sa automaticky zruší (vykoná sa finalize) v prípade, ak sa už ďalej nebude používať a súčasne existuje viacero takýchto nepoužívaných objektov.

4. Java podporuje viacvláknový (multithread) kód s automatickým uzamykaním (lock) a takisto tzv. súbežné programovanie (Fork/Join Framework). Má zabudovaný veľmi robustný systém obsluhy výnimiek (exceptions).

5. Java nepozná globálne údajové štruktúry ani funkcie. Všetky programové štruktúry musia byť zahrnuté v triedach (class). Z tohto dôvodu Java nepozná operátor oboru (scope operator). Namiesto oboru mien (namespace) používa balíčky (packages).

6. Všetky triedy sú organizované v jednokoreňovej (single-root) štruktúre začínajúcej sa triedou Object. Triedy sú definované, nie deklarované. Bez špecifikácie konkrétneho prístupu pre údaje a metódy tried sú údaje a metódy automaticky prístupné všetkým triedam definovaným v rámci balíčka (friendly). Java s výhodou používa tzv. vnorené (nested) triedy, ktoré veľmi elegantným spôsobom spolupracujú s členmi nadriadených tried. Dôležitý rozdiel je v používaní prístupovej úrovne protected. V prípade Javy možno k takto modifikovaným členom triedy pristupovať z ľubovoľného miesta v rámci balíčka, ale mimo neho iba z podtried danej triedy.

7. Čo sa týka dedičnosti (inheritance), rodičovskú triedu uvádzame pomocou kľúčového slova extends a metódy rodičovskej triedy voláme pomocou kľúčového slova super. Dôležitá podmienka volania konštruktora rodičovskej triedy v rámci konštruktora dediča je vykonať toto volanie na začiatku konštruktora. Dedič nemôže zmeniť prístupovú úroveň členov rodičovskej triedy.

8. Java používa preťažovanie (override) metód v podobnom duchu ako jazyk C++. Názov metódy a zoznam jej parametrov sa nazýva signatúra. Na vytvorenie abstraktnej triedy (rozhrania) slúži kľúčové slovo interface. Následne na definovanie triedy, ktorá implementuje abstraktné metódy rozhrania, slúži kľúčové slovo implements. Na vytvorenie metódy, ktorá nemôže byť preťažená, slúži kľúčové slovo final.

9. Generické typy Javy sa podobajú šablónam v jazyku C++. Základom používania generických typov je parametrizácia na základe typov. Java pristupuje ku generickému kódu s drobným, ale úplne zásadným rozdielom.

10. Java obsahuje veľké množstvo knižníc (libraries), pomocou ktorých dokáže implementovať mnoho rozličných úloh v duchu RAD (Rapid Application Development).

Použitie Android Studia

Pretože budeme programovať pre OS Android, na prípravu našej vzorovej aplikácie použijeme priamo IDE Android Studio. Ak nebudeme mať počas práce s AS prístupu na internet, budeme musieť osobitne doinštalovať zostavovací systém (builder) Gradle (http://www.gradle.org). Podľa prvotných skúseností s AS musíme skonštatovať, že rýchlosť práce oproti použitiu gcc rapídne klesla, a to najmä ak používame AVD. Práca s fyzickým zariadením je o niečo svižnejšia (vrelo odporúčame), no pokles výkonnosti je tak či tak badateľný.

Obr. 2 Dôležité súbory, s ktorými budeme pracovať v prvých fázach vývoja vzorovej aplikácie

 

 

Zobrazit Galériu
Autor: Marek Sopko

Nechajte si posielať prehľad najdôležitejších správ emailom

Mohlo by Vás zaujímať

Ako na to

CES 2017: Lenovo predstavilo nové notebooky ThinkPad X1, Miix 720 a prvý smartfón s podporou Tango - Lenovo Phab 2

03.01.2017 00:09

Lenovo odštartovala ďalší ročník veľtrhu s celou škálou nových produktov. Nová generácia produktov radu ThinkPad X1 Carbon 2017 je najľahším 14-palcovým biznis notebookom, ktorý váži len 1,14kg a obsa ...

Ako na to

Tipy a triky: Ako správne poskytovať IT pomoc a ako o ňu správne žiadať?

14.12.2016 09:40

Či už ste pokročilý používateľ počítača, ktorý často poskytuje IT pomoc známym a rodine, alebo ste to vy, kto o takúto pomoc zvyčajne žiada, ľahko sa stanete nechcenou príčinou frustrácie a obrovskej ...

Ako na to

Tipy a triky: Ako diagnostikovať a opravovať neúspešné upgrady Windows 10

14.12.2016 09:37

Microsoft prešiel s Windows 10 do celkom novej éry vývoja. Namiesto samostatných verzií Windows, vydávaných zvyčajne s odstupom dvoch až piatich rokov (XP, Vista, 7 a podobne), začal svoj systém vyvíj ...

Žiadne komentáre

Vyhľadávanie

ITSMF jar

Najnovšie videá