Programovanie a algoritmy INFRPR 1 c05 Rbert Novotn
Programovanie a algoritmy ÚINF/RPR 1 c/05 Róbert Novotný 21. 10. 2006 ÚINF/RPR 1 c/05 21. 10. 2006
V minulom dieli ste videli. . . public class Pes { String rasa; int vek; inštančné premenné String stekaj() { return "Haf!" } void pridaj. Rok() { vek = vek + 1; } metódy } ÚINF/RPR 1 c/05 21. 10. 2006
Chráňte životné prostredie a inštančné premenné! Pes slayer = new Pes(); slayer. vek = -125; Huh? záporný vek? Riešenie: • ku všetkým inštančným premenným budeme pristupovať pomocou metód • tešíme sa na kopu klepkania! ÚINF/RPR 1 c/05 21. 10. 2006
Chráňte životné prostredie a inštančné premenné! public class Pes { //. . rasu vynecháme slayer. nastav. Vek(25); int vek. Psa = slayer. daj. Vek(); int daj. Vek() { return vek; } } Pes slayer = new Pes(); System. out. println(vek. Psa); void nastav. Vek(int novýVek) { vek = novýVek; } ÚINF/RPR 1 c/05 Čo môj záporný vek? 21. 10. 2006
Chráňte životné prostredie a inštančné premenné! public class Pes { //. . . void nastav. Vek(int novýVek) { if(novýVek >= 0) { vek = novýVek; } else { System. out. println("Vek nesmie byť < 0"); } } } To je lepšie slayer. nastav. Vek(3); System. out. println(slayer. daj. Vek()); slayer. nastav. Vek(-125); 3 Vek nesmie byť < 0 3 System. out. println(slayer. daj. Vek()); ÚINF/RPR 1 c/05 21. 10. 2006
Chráňte životné prostredie a inštančné premenné! Pes slayer = new Pes(); pes. nastav. Vek(25); Au! Bwahahaha! pes. vek = -17000; Ako zabrániť zlému vedcovi páchať neprístojnosti? Vyhlásime inštančnú premennú v triede Pes za súkromnú private int vek; ÚINF/RPR 1 c/05 21. 10. 2006
Súkromné vlastníctvo • k privátnym premenným môže pristupovať len kód v danej triede public class Pes { private int vek; } Pes slayer = new Pes(); slayer. vek int daj. Vek() { return vek; } void nastav. Vek(int novýVek) { vek = novýVek; } ÚINF/RPR 1 c/05 = -17000; Do kela! Taká premenná neexistuje! 21. 10. 2006
Súkromné vlastníctvo • Príklad použitia: chceme premennú, do ktorej nemôžeme zapisovať (, , read only") public class Pes { private int vek; int daj. Vek() { return vek; } Pes slayer = new Pes(); slayer. vek = -17000; slayer. nastav. Vek(25); } Taká premenná neexistuje! ÚINF/RPR 1 c/05 Taká metóda neexistuje! 21. 10. 2006
Daj a nastav po americky • • • Pre každú inštančnú premennú naklepkáme 2 metódy: – daj. XXX daj. Vek(), daj. Rasu() – nastav. XXX nastav. Vek(. . . ), nastav. Rasu() Premenné určené len na čítanie majú len jednu metódu – daj. XXX Dohoda: – metóda daj. XXX sa bude zapisovať ako get. XXX – metóda nastav. XXX sa bude zapisovať ako set. XXX , , nahodíme gettre a settre" • Nariadenie – odteraz pristupujeme k premenným triedy len cez get. XXX a set. XXX , , úplné zapúzdrenie" ÚINF/RPR 1 c/05 21. 10. 2006
Daj a nastav po americky • Problém so slovenčinou – správne by malo byť: String daj. Rasu() – podľa dohody: get. Rasu() • zabudneme na Ľ. Štúra a na skloňovanie – nástroje predpokladajú takýto stav: • private String rasa; • get + rasa = get. Rasa() • set + rasa = set. Rasa(String nováRasa) • zabudneme na slovenčinu = riešenie odrodilca , , reč, ktorú z domu vieš, ó, jak je lichá" private String breed; String get. Breed() set. Breed(String a. Breed) ÚINF/RPR 1 c/05 21. 10. 2006
Polia a zoznamy ÚINF/RPR 1 c/05 21. 10. 2006
Polia obyčajné , , . . . a od Prešova v tym poľu" • už poznáme • deklarácia a inicializácia pole dĺžky 4 String[] reťazce = new String[4]; • alternatívna deklarácia a inicializácia String[] reťazce = new String[] { "Ferko", "Miško" }; • prístup k prvkom poľa pole dĺžky 2 String prvý = reťazce[0]; • dĺžka poľa String dlzka = reťazce. length; ÚINF/RPR 1 c/05 bez zátvoriek! toto nie je metóda nepíšeme počet prvkov! 21. 10. 2006
Výhody a nevýhody polí + dĺžka poľa môže byť určená premennou + spomni Pascal: len konštantou, alebo číslom pri deklarácii. – komplikované vkladanie prvkov do existujúceho poľa • nadeklarovať nové pole o jedna dlhšie • v cykle skopírovať prvú časť poľa, nový prvok, zvyšok – komplikované mazanie prvkov z poľa • nadeklarovať nové pole o jedna kratšie • v cykle skopírovať prvú časť poľa, zvyšok za vymazaným prvkom ÚINF/RPR 1 c/05 21. 10. 2006
Polia dynamické čili zoznamy • našťastie máme zoznamy – trieda java. util. Array. List • deklarácia a inicializácia Array. List<String> mená = new Array. List<String>(); • pridanie prvku (na koniec zoznamu) mená. add("Rex"); • prístup k prvku String meno = mená. get(0); • dĺžka zoznamu int dĺžka = mená. size(); ÚINF/RPR 1 c/05 so zátvorkami! toto je metóda!21. 10. 2006
Použitie zoznamov • trieda java. util. Array. List sa nachádza v tzv. balíčku • balíčky sú analógiou adresára v operačnom systéme • sprehľadňujú aplikáciu v prípade veľkého množstva tried • použitie triedy z balíčka: java. util. Array. List<String> mená = new java. util. Array. List<String>(); ÚINF/RPR 1 c/05 21. 10. 2006
Prehľadnejšie použitie zoznamov • namiesto komplikovaného zápisu triedy vieme použiť skratku: tzv. import. public class Tester { public static void main(String[] args) { java. util. Array. List<String> mená = new java. util. Array. List<String>(); } } import java. util. Array. List; public class Tester { public static void main(String[] args) { Array. List<String> mená = new Array. List<String>(); } } ÚINF/RPR 1 c/05 21. 10. 2006
Polia dynamické čili zoznamy • odstránenie prvku mená. remove(2); – prvky sa posunú doľava • pridanie prvku na pozíciu mená. add(1, "Lassie"); – pridanie na , , druhú" pozíciu – prvky sa posunú doprava • ostatné operácie – viď Java. Doc ÚINF/RPR 1 c/05 21. 10. 2006
Prechádzame poľom • dva spôsoby prechádzania poľom String[] mená = new String[] { "Rex", "Brok" }; • klasický • for (int i = 0; i < mená. length; i++) { String meno = mená[i]; System. out. println(meno); nevieme zistiť } index prvku, ale Java 5: často ho for (String meno : mená) { netreba System. out. println(meno); } ÚINF/RPR 1 c/05 21. 10. 2006
Prechádzame zoznamom • dva spôsoby prechádzania zoznamom • klasický for (int i = 0; i < zoznam. Mien. size(); i++) { String meno = zoznam. Mien. get(i); System. out. println(meno); } • Java 5: for (String meno : zoznam. Mien) { System. out. println(meno); } ÚINF/RPR 1 c/05 21. 10. 2006
- Slides: 19