Programujeme pre Android / 2. časť

Skôr ako za­čne­me pí­sať pr­vé riad­ky prog­ra­mo­vé­ho kó­du, mu­sí­me sa oboz­ná­miť s nie­koľ­ký­mi prin­ci­piál­ny­mi roz­diel­mi me­dzi prog­ra­mo­va­cí­mi ja­zyk­mi C++ a Ja­va. Je trú­fa­lé tie­to roz­die­ly su­ma­ri­zo­vať v rám­ci je­di­né­ho člán­ku, ale z dô­vo­du za­me­ra­nia sa na prog­ra­mo­va­nie pre An­droid je to ne­vyh­nnut­né.

Pre­čo Ja­va?

Skú­se­ní prog­ra­má­to­ri pou­ží­va­jú­ci ja­zyk C++ si v pr­vom ra­de po­lo­žia otáz­ku: „Pre­čo bo­la na vý­voj An­droi­du pou­ži­tá prá­ve Ja­va?" Od­po­veď na tú­to otáz­ku exis­tu­je, je však za­mo­ta­ná v sple­ti fak­tov a ná­zo­rov. V pr­vom ra­de tre­ba uviesť, že An­droid ne­pou­ží­va Ja­vu. Je­ho API sa vý­raz­ne po­do­bá na Ja­va-fron­tend, ale by­te­co­de je vy­ko­ná­va­ný po­mo­cou Dal­vik VM, kto­rý ne­mož­no po­rov­ná­vať s JVM.

Ta­kis­to tre­ba spo­me­núť, že An­droid API po dopl­ne­ní o NDK do­ká­že spra­co­vať aj kód na­pí­sa­ný v ja­zy­ku C++, a to tak­mer bez úp­rav. Via­ce­rí pro­fe­sio­nál­ni prog­ra­má­to­ri tvr­dia, že dô­vo­dom up­red­nos­tne­nia Ja­vy pred ja­zy­kom C++ je ab­sen­cia uka­zo­va­te­ľov. Ap­li­ká­cie na­pí­sa­né po­mo­cou Ja­vy tak ne­ma­jú mož­nosť pris­tu­po­vať k ľu­bo­voľ­ným pa­mä­ťo­vým blo­kom.

Ďal­ší z dô­vo­dov na pou­ži­te Ja­vy je ten, že v ob­do­bí vzni­ku pr­vé­ho An­droi­du exis­to­va­la vo sve­te veľ­mi sil­ná sku­pi­na prog­ra­má­to­rov, kto­rí Ja­vu ob­ľu­bo­va­li a up­red­nos­tňo­va­li. Po­le­mi­ku sú­vi­sia­cu s tou­to té­mou by sme moh­li ukon­čiť nas­le­du­jú­cou my­šlien­kou: Nie je dô­le­ži­té, aký prog­ra­mo­va­cí ja­zyk ani aké vý­vo­jo­vé pros­tre­die pou­ží­va­me, dô­le­ži­té je, že má­me chuť a chce­me prog­ra­mo­vať.

ANDROID-obr1.jpg

An­droid Stu­dio a An­droid Vir­tual De­vi­ce so spus­te­nou ap­li­ká­ciou

Prin­ci­piál­ne roz­die­ly me­dzi ja­zyk­mi C++ a Ja­va

Ne­bu­de­me ho­vo­riť o zá­klad­ných ani naj­dô­le­ži­tej­ších, ale skôr o prin­ci­piál­nych roz­die­loch:

  1. Kód na­pí­sa­ný v ja­zy­ku C++ sa prek­la­dá (com­pi­le) pre kon­krét­nu plat­for­mu. Kód na­pí­sa­ný v ja­zy­ku Ja­va sa inter­pre­tu­je (inter­pre­te) po­mo­cou VM vo for­me by­te­co­de (inter­me­dia­te lan­gua­ge). Vir­tuál­ne stro­je vy­vi­nu­té pre kon­krét­ne plat­for­my vy­ko­ná­va­jú ten is­tý by­te­co­de bez nut­nos­ti je­ho úp­rav. Rých­losť vy­ko­na­nia kom­pi­lo­va­né­ho a inter­pre­to­va­né­ho kó­du je otáz­na - v mi­nu­los­ti bol kom­pi­lo­va­ný kód jed­noz­nač­ne rých­lej­ší, ale v sú­čas­nos­ti sa inter­pre­tá­cia by­te­co­de napr. ces­tou JIT svo­jou rých­los­ťou prib­li­žu­je vy­ko­ná­va­niu kom­pi­lo­va­né­ho kó­du.
  2. Ja­va má veľ­mi strik­tnú kon­tro­lu ty­pov a roz­sa­hov po­lí. Pre­to­že ne­poz­ná po­lia zna­kov, text uzav­re­tý v úvo­dzov­kách je auto­ma­tic­ky kon­ver­to­va­ný na ob­jekt ty­pu String. Pre­men­né pri­mi­tív­nych ty­pov sú auto­ma­tic­ky ini­cia­li­zo­va­né na 0, resp. prís­luš­ný ek­vi­va­lent. Re­fe­ren­cie (re­fe­ren­ce) ob­jek­tov sú auto­ma­tic­ky ini­cia­li­zo­va­né na null. V prí­pa­de ty­pu char Ja­va pou­ží­va zna­ko­vú súp­ra­vu Uni­co­de, čo sí­ce zvy­šu­je pa­mä­ťo­vé ná­ro­ky, ale sú­čas­ne rie­ši glo­bál­nu por­ta­bil­nosť. Pri­mi­tív­ne ty­py mož­no po­mo­cou tzv. obá­lok (ty­pe wrap­pers) pre­viesť na ob­jek­ty.
  3. Ja­va z dô­vo­du bez­peč­nos­ti ne­poz­ná uka­zo­va­te­le (poin­ters), ne­de­fi­nu­je auto­ma­tic­ké štan­dar­dné (de­fault) ani ko­pí­ro­va­cie (co­py) konštruk­to­ry. Ob­jek­ty ne­ru­ší po­mo­cou deš­truk­to­rov. Na­mies­to nich ope­ru­je tzv. zbe­rač od­pa­du (gar­ba­ge collec­tor), kto­rý po­mo­cou me­tó­dy fi­na­li­ze() uvoľ­ňu­je pou­ží­va­né zdro­je. Ob­jekt sa auto­ma­tic­ky zru­ší (vy­ko­ná sa fi­na­li­ze) v prí­pa­de, ak sa už ďa­lej ne­bu­de pou­ží­vať a sú­čas­ne exis­tu­je via­ce­ro ta­kých­to ne­pou­ží­va­ných ob­jek­tov.
  4. Ja­va pod­po­ru­je viac­vlák­no­vý (mul­tit­hread) kód s auto­ma­tic­kým uza­my­ka­ním (lock) a ta­kis­to tzv. sú­bež­né prog­ra­mo­va­nie (Fork/Join Fra­mework). Má za­bu­do­va­ný veľ­mi ro­bust­ný sys­tém ob­slu­hy vý­ni­miek (excep­tions).
  5. Ja­va ne­poz­ná glo­bál­ne úda­jo­vé štruk­tú­ry ani fun­kcie. Všet­ky prog­ra­mo­vé štruk­tú­ry mu­sia byť za­hr­nu­té v trie­dach (class). Z toh­to dô­vo­du Ja­va ne­poz­ná ope­rá­tor obo­ru (sco­pe ope­ra­tor). Na­mies­to obo­ru mien (na­mes­pa­ce) pou­ží­va ba­líč­ky (pac­ka­ges).
  6. Všet­ky trie­dy sú or­ga­ni­zo­va­né v jed­no­ko­re­ňo­vej (sing­le-root) štruk­tú­re za­čí­na­jú­cej sa trie­dou Ob­ject. Trie­dy sú de­fi­no­va­né, nie dek­la­ro­va­né. Bez špe­ci­fi­ká­cie kon­krét­ne­ho prís­tu­pu pre úda­je a me­tó­dy tried sú úda­je a me­tó­dy auto­ma­tic­ky prís­tup­né všet­kým trie­dam de­fi­no­va­ným v rám­ci ba­líč­ka (friend­ly). Ja­va s vý­ho­dou pou­ží­va tzv. vno­re­né (nes­ted) trie­dy, kto­ré veľ­mi ele­gan­tným spô­so­bom spo­lup­ra­cu­jú s člen­mi na­dria­de­ných tried. Dô­le­ži­tý roz­diel je v pou­ží­va­ní prís­tu­po­vej úrov­ne pro­tec­ted. V prí­pa­de Ja­vy mož­no k tak­to mo­di­fi­ko­va­ným čle­nom trie­dy pris­tu­po­vať z ľu­bo­voľ­né­ho mies­ta v rám­ci ba­líč­ka, ale mi­mo ne­ho iba z pod­tried da­nej trie­dy.
  7. Čo sa tý­ka de­dič­nos­ti (in­he­ri­tan­ce), ro­di­čov­skú trie­du uvá­dza­me po­mo­cou kľú­čo­vé­ho slo­va extends a me­tó­dy ro­di­čov­skej trie­dy vo­lá­me po­mo­cou kľú­čo­vé­ho slo­va su­per. Dô­le­ži­tá pod­mien­ka vo­la­nia konštruk­to­ra ro­di­čov­skej trie­dy v rám­ci konštruk­to­ra de­di­ča je vy­ko­nať to­to vo­la­nie na za­čiat­ku konštruk­to­ra. De­dič ne­mô­že zme­niť prís­tu­po­vú úro­veň čle­nov ro­di­čov­skej trie­dy.
  8. Ja­va pou­ží­va pre­ťa­žo­va­nie (overri­de) me­tód v po­dob­nom du­chu ako ja­zyk C++. Ná­zov me­tó­dy a zoz­nam jej pa­ra­met­rov sa na­zý­va sig­na­tú­ra. Na vy­tvo­re­nie abstrak­tnej trie­dy (roz­hra­nia) slú­ži kľú­čo­vé slo­vo inter­fa­ce. Nás­led­ne na de­fi­no­va­nie trie­dy, kto­rá im­ple­men­tu­je abstrak­tné me­tó­dy roz­hra­nia, slú­ži kľú­čo­vé slo­vo im­ple­ments. Na vy­tvo­re­nie me­tó­dy, kto­rá ne­mô­že byť pre­ťa­že­ná, slú­ži kľú­čo­vé slo­vo fi­nal.
  9. Ge­ne­ric­ké ty­py Ja­vy sa po­do­ba­jú šab­ló­nam v ja­zy­ku C++. Zá­kla­dom pou­ží­va­nia ge­ne­ric­kých ty­pov je pa­ra­met­ri­zá­cia na zá­kla­de ty­pov. Ja­va pris­tu­pu­je ku ge­ne­ric­ké­mu kó­du s drob­ným, ale úpl­ne zá­sad­ným roz­die­lom.
  10. Ja­va ob­sa­hu­je veľ­ké množ­stvo kniž­níc (lib­ra­ries), po­mo­cou kto­rých do­ká­že im­ple­men­to­vať mno­ho roz­lič­ných úloh v du­chu RAD (Ra­pid Ap­pli­ca­tion De­ve­lop­ment).

ANDROID-obr2.jpg

Dô­le­ži­té sú­bo­ry, s kto­rý­mi bu­de­me pra­co­vať v pr­vých fá­zach vý­vo­ja vzo­ro­vej ap­li­ká­cie

Pou­ži­tie An­droid Stu­dia

Pre­to­že bu­de­me prog­ra­mo­vať pre OS An­droid, na príp­ra­vu na­šej vzo­ro­vej ap­li­ká­cie pou­ži­je­me pria­mo IDE An­droid Stu­dio. Ak ne­bu­de­me mať po­čas prá­ce s AS prís­tup na inter­net, bu­de­me mu­sieť oso­bit­ne doin­šta­lo­vať zos­ta­vo­va­cí sys­tém (buil­der) Grad­le (http://www.grad­le.org). Pod­ľa pr­vot­ných skú­se­nos­tí s AS mu­sí­me skon­šta­to­vať, že rých­losť prá­ce op­ro­ti pou­ži­tiu gcc ra­píd­ne kles­la, a to naj­mä ak pou­ží­va­me AVD. Prá­ca s fy­zic­kým za­ria­de­ním je o nie­čo sviž­nej­šia (vre­lo od­po­rú­ča­me), no pok­les vý­kon­nos­ti je tak či tak ba­da­teľ­ný.

Zdroj: IW 5-6/2014



Ohodnoťte článok:
 
 
 

24 hodín

týždeň

mesiac

Najnovšie články

Cloud a je­ho do­sah na vý­voj IT tr­hu. CFO a CIO to vi­dia inak.
Ako môže ovplyvniť nástup cloudových technológií rozhodovacie a prevádzkové procesy v bežnej ekonomicky aktívnej spoločnosti? čítať »
 
Vy­uži­tie sen­zo­rov
Moderné tablety a konvertibilné zariadenia pod taktovkou operačného systému Windows 8.1 sú vybavené niekoľkými užitočnými senzormi, ktoré môžete využiť vo svojich aplikáciách. Spravidla ide o kompas, akcelerometer, gyroskop, náklonomer a snímač intenzity osvetlenia.  čítať »
 
No­vý Thin­kPad X1 Car­bon
ThinkPad X1 Carbon tretej generácie je naozaj veľmi ľahký vďaka tomu, že je vyrobený z karbónového vlákna, ktoré má menšiu hmotnosť ako horčíkové alebo hliníkové. Vďaka konštrukcii z uhlíkových vlákien je model X1 Carbon vôbec najodolnejší notebook z radu ThinkPad. čítať »
 
Da­ta Dis­co­ve­ry - ob­ja­vo­va­nie vzo­rov v dá­tach
Dnes hýbu svetom biznisu nielen peniaze, ale hlavne informácie. V tejto informačnej dobe sa na dáta, ako aj na nástroje na ich spracovanie kladú vysoké nároky. čítať »
 
No­vý pro­ce­sor IBM Power8: 50× rých­lej­ší pri ana­lý­ze dát ako x86
Spoločnosť IBM predstavila prvé servery vybavené novou generáciou procesora Power8. Zároveň pripomenula svoju nadáciu, ktorá otvára architektúru POWER záujemcom o jej ďalší vývoj. čítať »
 
 
 
  Zdieľaj cez Facebook Zdieľaj cez Google+ Zdieľaj cez Twitter Zdieľaj cez LinkedIn Správy z RSS Správy na smartfóne Správy cez newsletter