reklama

Programovanie pre úplných začiatočníkov - 3.časť

Dobrý deň, Teším sa z Vášho záujmu a vítam všetkých pri tretej časti seriálu o programovaní. Naposledy sme sa zamerali na triedy a uchovávanie informácii v nich. Povedali sme si o kontrolovaní prístupov k týmto informáciam a spôsob ako ich chrániť.

Písmo: A- | A+
Diskusia  (8)

Ešte v stručnosti pripomeniem náš výučbový plán a potom môžeme bez zbytočných slov pokračovať v bádaní:
1.časť – Zloženie sveta – čo je okolo nás
2.časť – Vnútri nášho programu I
3.časť – Vnútri nášho programu II
4.časť – Premenné, konštanty a poďme spolu vetviť
5.časť - Cyklus – neposlušný priateľ programátora
6.časť - Chyby – prečo vznikajú a ako sa im dá zabrániť
7.časť - Súbory, súboríky a iné časti našich informácii   

Odpovede na otázky

Skúste zistiť príčinu, prečo všetky atribúty danej triedy TextView sú private?  

SkryťVypnúť reklamu
Článok pokračuje pod video reklamou

Jeden zo štyroch základných princípov objektového programovania sa nazýva ZAPUZDRENIE (angl. encapsulation). Jeho podstatou je skrytie informácii o objekte pred okolitým svetom – na to využívame slovíčko private. V podstate je to prirodzené chrániť si svoje údaje a preto sa zaviedla ochrana údajov aj do programovania. Ak nastavíme atribút na private, tak vieme, že k danému údaju sa nedostane nik iný - iba objekt danej triedy.

Na tomto diagrame môžeme vidieť našu triedu TextTrieda. Je vidno,že všetky atribúty sú private, a preto k nim nemá priamy prístup nik, iba daná trieda. Ako však potom tieto atribúty zistiť? To si povieme dnes – ale trochu neskôr. Zatiaľ si zapamätajme dôležitý princíp zapúzdrenia.  

SkryťVypnúť reklamu
reklama

Čo znamená keď sa private a public použijú pri triede?  

Ak však použijeme public alebo private pri triede, napr. private class trieda_text

znamená to, že si chceme ochrániť celú triedu. Naskytá sa nám však otázka, pred kým ju chceme chrániť? Jedine pred ostatnými triedami, ktoré sú mimo adresára v ktorom je umiestnený zdrojový kód (zdroják) chránenej – private - triedy. Takto si danú triedu ochránime pred dotieravcami z iných priečinkov - packageov. S packagemi sme sa už stretli. Sú to adresáre, ktoré obsahujú naše zdrojové súbory. Myslím, že si ich vieme predstaviť. A private pri triede určuje, že ju môžu používať len triedy, ktoré sú v jej package. J Ak je to trochu nezrozumitelne, tak sa tým ani netrápte. Pochopíme to v priebehu vývoja aplikácie spolu. Aké sú ďalšie typy dát (nie len) pre čísla v Jave?

Typ byte sú celé čísla od -128 do 127.

SkryťVypnúť reklamu
reklama

Typ short sú celé čísla od -32 768 do 32 767 .

Typ int sú celé čísla od -2 147 483 648 do 2 147 483 647.

Typ long sú celé čísla od -9 223 372 036 854 775 808 do 9 223 372 036 854 775 807

Typ float sú desatinné čísla s počtom desatinných miest 754.

Typ double podobne ako float.

Typ boolean má len dve hodnoty true/false.

Typ char typ znak – teda napríklad b alebo f alebo 5...

Prácu s nimi si postupne budeme ozrejmovať, zatiať nám stačí vedieť, že existujú. Avšak zaujímavý pre náš textový editor môže byť typ char – znak. Predstavme si, čo ním môžeme reprezentovať v našej aplikácii....to be continue neskôr.. :D

Skúste si nakresliť na papier triedy pre objekty: text (už máme), písmeno, odstavec, bodky, čiarky, strana, nadpis, súbor. Ako a v ktorej triede budete reprezentovať informácie – názov súboru, čísla stránky a iné? A vlastne, aké informácie bude potrebné uchovávať pre textový editor?

Uplynulých pár týždňov som opäť meškal s písaním ďalšieho dielu. Je to spôsobené mojou zanepráznenosťou, a v kútiku duše som myslel, že mi trocha pomôžete. Táto úloha si priam núkala more mailov a písania do diskusie. No však nič som nedostal, a ani sa nič nerozoberalo. A tak teda musím ešte upustiť od tímovej práce.  A keďže nemám od Vás žiadnu inšpiráciu, tak sa teraz pokúsim načrtnúť Vám výsledky tejto úlohy.

SkryťVypnúť reklamu
reklama

Obrázok pre triedu TextTrieda už máme vyššie a máme ju už aj popísanú. Bude uchovávať informácie, akého formátu je text. Či je písaný kurzívou, tlačeným boldom alebo je podčiarknutý. Bude sa tam uchovávať aj jeho veľkosť.

Ďalším v zozname je písmeno. Každé písmeno je vlastne znak – a tu teda môžeme využiť služby typu char, ktorý sme si predstavili vyžšie. Jedno písmeno = jeden char. Môžeme povedať, že i bodky, čiarky, výkričníky, otázniky a čísla sú znaky. A tak nám char poskytuje ideálne riešenie aj pre ne.

Znaky sa spajajú do slov, viet a odstavcov. Pre všetky tieto zloženiny znakov môžeme v Jave použiť (ľudovo povedané) zloženiny charov – String.String je reťazec písmen a jednoducho sa dá povedať, že to je slovo. Viac si o ňom povieme neskôr.

Reťazec nám môže uchovávať aj nadpisy.

A tak zostávajú už len 2 objekty našej aplikácie. Tou je stránka a súbor. Rozhodol som sa – a kedže ste mi neposlali žiadny jej návrh – že objekt stránky budeme v našej aplikácii ignorovať. Bude to pre nás jednoduchšie na pochopenie.

Takže zostal už len súbor. A súbor bude v našej aplikácii triedy SuborTrieda. Je znázornený na nasledujúcom obrázku:

Meno súboru bude uchované v atribúte meno. Tento atribút je typu String – reťazec znakov – slová označujúce meno súboru.

Druhým atribútom je text, ktorý daný súbor obsahuje. Na tento účel sme si vytvorili spolu triedu TextTrieda. Takže daný atribút je vlastne iba objektom tejto triedy (chcem poukázať na to, že objekty sú súčasťou iných objektov a teda sa do seba akoby vnorujú).

To je všetko, čo sa týka objektov a tried našej aplikácie.

TAK A POĎME SI SPRAVIŤ ŠIALKU ĽADOVEJ KÁVY, ALEBO KAKAA, ALEBO ČAJU...


Bez vetra sa ani lístok na strome nepohne

Je to pravda odveká. Veru veru. Naši starí rodičia mali veľkú pravdu. Problém však je v tom, že vietor je objekt a ako taký nezmôže nič.  

MUSÍ FÚKAŤ!  

Musí uskutočňovať činnosť. Fúkať, duť, viať, výchriť sa. To posledné som trochu prehnal. Ale je jasne, že ak chce vietor pohnúť listom, musí fúkať.  

A to isté platí aj pre našu aplikáciu. Darmo budeme mať súbor, keď nebudeme schopný súbor prepísať. Darmo budeme mať písmená, keď ich nebudeme môcť napísať. Musíme teda priradiť objektom činnosť.  

Jasné? Myslím si, že áno.   Súbor a činnosti spojené s ním.  

Dajme tomu, že máme náš súbor. Objekt našej aplikácie. Daný súbor má základné činnosti: Otvoriť. Uložiť. Načítať. Zavrieť. Ako ich prenesieme do našeho zdrojového súboru?

 Funkcia, funkcie,... 

Povieme objektu, že má funkciu.

Objekt súboru má funkciu Otvoriť. 

private void otvorit(){ 

 //cinnost vykonavana vo funkcii otvorit

} 

Private poznáme. I tu má funkciu rovnaku ako pri atribútoch. Určuje prístupnosť danej funkcie. Neplatí však pravidlo zapúzdrenia, a preto funkcia nemusí byť private – môže kľudne byť i public. To znamená, že k nej môže pristupovať aj iný objekt (prezradím, že toto je môžné využiť pri získavaní hodnôt atribútov daného objektu).  

Pozornému oku neujde slovko void. Dôležité slovo. Znamená, že nám funkcia nevracia žiadnu hodnotu. Doslova! Nevracia nič. Prečo je to dôležité? Pretože, keď robíme nejakú činnosť, obvykle tou činnosťou získame nejaký objekt. Rúbeme – získame drevo, pálime – získame teplo, sadíme – získame úrodu. To isté platí o funkciách (činnostiach objektov). Funkcia počítania – získame číslo. Inými slovami funkcia počítania nám vráti číslo. A funkcia otvor súbor nám nevráti nič. Zatiaľ od nej nepotrebujeme nič. Neskôr môžno od nej budeme niečo chcieť a tak prepíšeme void na typ/triedu toho, čo chceme dostať.  

Naproti tomu funkcia Načítať nám vráti text súboru, ktorý z neho načíta. Takže nám táto funkcia vráti objekt triedy TextTrieda.

 public TextTrieda nacitat(){ 

 //cinnost vykonavana vo funkcii nacitat 

 //vrati objekt triedy TextTrieda

}


CHECKPOINT 1
Objekty majú aj činnosti, ktoré vykonávajú. Je to super, pretože konečne môžu aj pracovať. Nielen sedieť a nič nerobiť. :D Lenive objekty nikto nechce.

ÚLOHA 1
Čo je to konštruktor?

Parameter nie je meter

Občas nastane situácia, že potrebujeme danej funkcii objektu dať nejakú dodatočnú informáciu. Napríklad chceme aby sa do našeho objektu textu zapísalo písmeno. Musíme teda určiť, aké písmeno a kam sa má zapísať. Nech náša trieda TextTrieda (,ktorá nám slúži ako predloha pre vytváranie objektov textu), má funkciu zapisatPismeno. Potrebujeme jej predať dva parametre: aké písmeno a na akú pozíciu.

 public void zapisat(char pismeno, int pozicia){

 //zapisanie znaku pismeno na cislo pozicie pozicia

}

Predávaný parameter – pismeno je typu char, čiže znak. Pozícia je typu int, a určuje poradové číslo pozície, kam sa zaradí nové písmeno.

 Zapúzdrenie – hodená rukavica  

Vieme síce načo nám zapúzdrenie slúži. Chráni atribút objektu pred priamym prístupom z iného objektu. Ale potom ako teda chceme získať informácie z daného atribútu bez toho, aby sme na atribút priamo ukazovali?  

Pomocou funkcii. J

 Chcem vedieť aká je veľkosť textu!! 

Požiadavka ako hrom. Keďže veľkosť textu je ukrytá v private atribúte velkostTextu v objekte triedy TextTrieda nemáme nožnosť doň priamo vidieť. Jedine, čo nám zostáva je pozrieť sa naň nepriamo. Pomocou funkcie, ktorá je v triede TriedaText. 

 class TextTrieda {   

 private int velkostTextu;  

 public int dajVelkostTextu(){  

 return velkostTextu; 

 } 

}

A tu sa na chvíľu zastavíme. Ako vidíme, funkcia sa nachádza vnútri triedy TextTrieda a teda jej patrí. Táto funkcia je public, čiže ju môže zastihnúť každý objekt. Ďalej trieda obsahuje aj atribút velkostTextu. Tento je private a teda je zastihnutľný len vo vnútri triedy TriedaText. Keďže funkcia dajVelkostTextu je vnútri tejto triedy, môžeme v nej daný atribút používať.  

Použijeme ho teda spolu so slovíčkom return (z angl. vrátiť). A to slovo v preklade znamená vráť velkostTextu. Všimnite si, že funkcia dajVelkostTextu ma návratový typ hodnoty int presne rovnaký ako atribút velkostTextu.  

To znamená, že zavolaním funkcie dajVelkostTextu dostaneme naspäť hodnotu atribútu velkostTextu. To neporušuje zapúzdrenie triedy – pretože neprístupujeme k atribútu priamo. JE CHRÁNENÉ FUNKCIOU!  

Správne po programátorsky sa funkcia datVelkostTextu má volať getVelkostTextu (get znamená po anglicky dať). Tým pádom náš kód má vyzerať takto:

 class TextTrieda {   

 private int velkostTextu;  

 public int getVelkostTextu(){  

 return velkostTextu; 

 }

 } 

Chcem nastaviť veľkosť textu!! 

Nemôžeme pristúpiť priamo k atribútu a preto jediné, čo nám ostáva, je pokúsiť sa ho zmeniť prostrednictvom funckie.

 class TextTrieda {   

 private int velkostTextu;  

 public int getVelkostTextu(){  

 return velkostTextu; 

 }  

 public void nastavVelkostTextu(int novaHodnota){ 

 velkostTextu = novaHodnota; 

 }  

} 

 Rovnako ako pri získavacej funkcii, tak i pri nastavovacej funkcii voláme atribút z tela funkcie (je ohraničené zátvorkami typu {}). Čiže voláme atribút vnútri danej triedy. Funkcii predávame parameter novaHodnota – podľa ktorého sa nám nastaví hodnota atribútu. Samotné nastavovanie prebieha pomocou riadku velkostTextu = novaHodnota.  

Programátorsky sa funkcia nastavVelkostTextu volá setVelkostTextu (angl. set znamená nastaviť). Takže máme zapúzdrený kód pre atribút velkostTextu: 

class TextTrieda {   

 private int velkostTextu;  

 public int getVelkostTextu(){  

 return velkostTextu; 

 }

   public void nastavVelkostTextu(int novaHodnota){  

 velkostTextu = novaHodnota; 

 }  

} 


CHECKPOINT 2


Naučili sme sa prvý princíp objektového programovania. Je to super, je to úžasné. Používame parametre a všetko začína pôsobiť známo.

 POĎME SI SPOLU ZARÝPAŤ..

 Na funkciách je založené funkcionálne programovanie. Fóra k mojim článkom sem-tam odhaľujú ľudí, ktorí tento typ programovania obhajujú ako pokrokový a najlepší na svete. Nič proti nim nemám, ale predsa len, pohľad na funkcie cez objekty sa trochu viac približuje k vnímaniu človeka. Koniec rýpania. :D

ÚLOHA 2


Chcem vidieť všetky triedy v našej aplikácii nakódené! A to hneď! Som zvedavý, kto to aspoň skúsi má u mňa bonusové body.


Čo obsahuje kód jednej triedy

Dnešná posledná tretina bude strohá. Vyzývam iba na komunikáciu do fóra. Chcem vedieť, ako chápete trieda, objektom, ako vnímate atribúty a ako sa Vám pozdávajú funkcie.

Poďme spolu rozoberať kód v našej aplikácii – určíte si, čo sú funkcie, čo sú atribúty. Kontrolujte si private u atribútov a snažte sa dokončiť zdrojové súbory pre triedu TextTrieda a triedu SuborTrieda. Hlavne dokončite get a set funkcie daných tried.  

V budúcej časti zverejním zdrojový kód celej aplikácie, aby sme spoločne mohli pokračovať ďalej. Rád by som však jej súčasti poskladal z Vašich prác a preto mi ich posielajte na adresu tisan@azet.sk

CHECKPOINT 3
Vieme použiť ZAPÚZDRENIE. A vieme o trochu viac o triedach. Sme schopný si stavať postupne vlasné triedy.

ÚLOHA 3
Čo je to bug, buggovanie a debuggovanie?  

A čo nabudúce?

Nabudúce sa dozviete odpovede na úlohy a vydáme sa po stopách premenných a matematických géniov. Nič to, že nám matematika nejde, môže ju za nás spraviť náš verný priateľ počítač.  Pekný zvyšok programovania a čo najmenej bugov.

Peter Dodok

Peter Dodok

Bloger 
  • Počet článkov:  41
  •  | 
  • Páči sa:  0x

Počítače a blikajúci monitor sú mojím zamestnaním, zelený svet a modré nebo sú mojím koníčkom, srdce a myšlienky sú mojím hriechom,.

Prémioví blogeri

Karolína Farská

Karolína Farská

4 články
Post Bellum SK

Post Bellum SK

75 článkov
Juraj Karpiš

Juraj Karpiš

1 článok
Pavol Koprda

Pavol Koprda

10 článkov
Monika Nagyova

Monika Nagyova

296 článkov
Martina Hilbertová

Martina Hilbertová

49 článkov
reklama
reklama
SkryťZatvoriť reklamu