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

Tipy a triky: Ako na snímku obrazovky na akomkoľvek počítači s Windows?

02.12.2016 00:13

Ak snímky obrazovky robíte často apotrebujete napríklad funkcie na posun stránok alebo snímanie zobrazenia pri vyššom rozlíšení displeja, zrejme používate nejakú špecializovanú aplikáciu. Väčšina použ ...

Ako na to 1

Tipy a triky: Ako aplikácii prednastaviť spúšťanie s administrátorskými právami?

30.11.2016 00:10

Väčšina aspoň trochu skúsenejších používateľov vie, že aj keď máte na operačnom systéme Windows vytvorený administrátorský účet, aplikácie pre bezpečnosť nefungujú vždy splnými administrátorskými práv ...

Ako na to 2

Tipy a triky: Ako vypnúť uzamykaciu obrazovku vo Windows 10?

29.11.2016 00:10

Rozčuľuje vás, že pred každým prihlásením doúčtu vášho počítača musíte prejsť uzamykacou obrazovkou? Windows 10 na tejto obrazovke ukazuje čas,dátum anejakú zaujímavú fotografiu zrôznych kútov sveta. ...

Žiadne komentáre

Vyhľadávanie

Kyocera - prve-zariadenia-formatu-a4-s-vykonom-a3

Najnovšie videá