Poznámky
Prezentace
Osnova
1
"Róbert Novotný"
  • Róbert Novotný
  • robert.novotny@upjs.sk
  • 26. 10. 2006
2
Národnostné konflikty v triedach
  • dosiaľ sme mali jednoduché názvy tried – Pes, Veľryba...
  • problém nastáva, keď dva projekty pomenujú triedu rovnako
    • Attribute: spracovávač webových stránok v HTML
    • Attribute: v podpore pre tlač
    • Attribute: v projekte IGAP T. Horvátha
  • Čo keď chcem používať vo svojej aplikácii aj HTML spracovávač aj IGAP?
    • Riešenie 1: dohoda medzi programátormi, premenovanie tried
      • HTMLAttribute, PrintAttribute, IgapAttribute
    • problém: s T. Horváthom sa dohodnete, s autormi Javy už nie
3
Zabaľme konflikty
  • Riešenie 2: balíčky


  • zaveďme hierarchickú štruktúru á la adresáre pre triedy
  • každá trieda má názov získaný z hierarchie
    • org.htmlparser.Attribute: v HTML parseri
    • javax.print.attribute.Attribute: v podpore pre tlač
    • uinf.wid.Attribute: v projekte IGAP T. Horvátha

4
Zabaľme konflikty
  • Ak chceme vytvoriť novú inštanciu HTML atribútu, musíme uviesť celý názov cesty.
  • org.htmlparser.Attribute atribút = new org.htmlparser.Attribute();
  • Problém: dá si niekto na obed toto?
  • org.springframework.aop
  • .framework.autoproxy.metadata
  • .AttributesThreadLocalTargetSourceCreator c
  • = new org.springframework.aop
  • .framework.autoproxy.metadata
  • .AttributesThreadLocalTargetSourceCreator();


5
Syndróm karpálneho tunelu a jeho riešenie
  • namiesto klepkania názvu triedy použijeme import


6
Balíčky
  • každá trieda prináleží do nejakého balíčka
  • výnimka-nevýnimka: existuje implicitný balíček (default package), ktorý je tvorený ,,koreňovým adresárom" hierarchie
  • náš Pes bol zatiaľ v implicitnom balíčku
  • triedy v implicitnom balíčku netreba importovať
    • trieda v balíčku nevidí implicitný balíček
  • v implicitnom balíčku nie sú štandardne žiadne triedy (pokiaľ nepoužívame prasácky napísané knižnice)
7
Štábna kultúra
  • Odteraz zaradíme každú našu triedu do balíčka
  • Príklad: novotnyr.zvierata.Pes
  • Ale ako?
8
Balíčky
  • Zabudli sme sa spýtať: čo napr. taký String?
    • String sa volá java.lang.String
    • Triedy v balíčku java.lang sa nemusia importovať
  • Trieda v rovnakom balíčku sa nemusí importovať



9
Balíčky
  • Viacero importov z rovnakého balíčka vieme zapísať skrátene
10
Nadradené a podr(i)ad(e)né balíčky
  • Trieda automaticky importuje (= netreba písať import) len triedy zo svojho balíčka
  • Musíme importovať aj triedy z nadradených, aj z podriadených balíčkov
11
Nadradené a podr(i)ad(e)né balíčky
  • Hviezdičkový import znamená len ,,importuj triedy z tohto balíčka"
  • Triedy z podriadených balíčkov sa takto NEimportujú
    • import java.util.* importne java.util.ArrayList, java.util.HashMap, atď
    • NEimportne napr. triedu java.util.prefs.Preferences, ani napr. java.util.regex.Pattern
  • nedá sa ani použiť import java.util.*.*.*
12
Štábna kultúra
  • Zdrojové súbory tried sa doteraz váľali v jednom adresári.
  • Norma: skompilované triedy musia byť uložené v adresárovej štruktúre zodpovedajúcej hierarchii balíčkov
  • Príklad: skompilovaná trieda novotnyr.zvierata.Pes musí byť v súbore
  • nejakýAdresár\novotnyr\zvierata\Pes.class
13
Balíčky, CLASSPATH a iné potvory
  • Ako Java vie, že triedu novotnyr.zvierata.Pes má načítať práve z tohto adresára?
  • nejakýAdresár\novotnyr\zvierata\Pes.class
  • premenná prostredia CLASSPATH
  • WinXP: Ovládacie panely | Systém | Upresniť | Premenné prostredia | Systémové premenné
  • obsahuje adresáre, v ktorých sa má začať prehľadávať hierarchia balíčkov
14
Balíčky, CLASSPATH a iné potvory
  • Príklad:
    • majme CLASSPATH=C:\
    • chceme používať triedu novotnyr.zvierata.Pes uloženú v D:\Java\psi\novotnyr\zvierata\Pes.class
  • Riešenie
    • prehľadávame CLASSPATH:
      • hľadáme súbor C:\novotnyr\zvierata\Pes.class
    • taký súbor neexistuje = chyba!
15
Balíčky, CLASSPATH a iné potvory
  • Riešenie
    • CLASSPATH upravíme na
    • CLASSPATH=C:\;D:\Java\psi
    • prehľadávame CLASSPATH
      • C:\novotnyr\zvierata\Pes.class nenájdený
      • D:\Java\psi\novotnyr\zvierata\Pes.class nájdený = OK!
  • Nenastavený CLASSPATH je to isté ako
    • CLASSPATH=.
16
Balíčky, CLASSPATH a iné potvory
  • CLASSPATH môžeme nastaviť aj pri spúšťani java.exe
  • java –cp C:\;D:\Java\psi novotnyr.zvierata.Pes
  • Integrované vývojové prostredia riešia CLASSPATH sami
17
Preťažené metódy (nie výťahy)
  • Niekedy je vhodné mať metódy s rovnakým názvom
  • Preťažené (overloaded) metódy
  • Ak majú dve metódy rovnaký názov, musia mať rôzne typy parametrov.
18
Preťažené metódy (nie výťahy)
  • Príklad: notoricky známa metóda println() v System.out
  • 9 preťažených metód: pre každý primitívny dátový typ jedna
  • Ak by neexistovalo preťaženie, museli by sme mať metódy
    • printlnInt(int i);
    • printlnFloat(float f);
    • ....
19
Preťažené metódy (nie výťahy)
  • Pozor: metódy s rôznymi návratovými typmi sa nepovažujú za preťažené, ba priam sa nie sú povolené
20
Konštruktory
  • Spomnime:
  • Pes dunčo = new Pes();
21
Vypíšte správu pri zrodení nového psa
22
Konštruktory
  • názov konštruktoru musí byť rovnaký ako názov triedy
  • konštruktor nemá uvedený návratový typ a v jeho tele sa nevracia žiadna hodnota
23
Konštruktory s parametrami
  • konštruktory môžu mať parametre
  • presne ako metódy
24
Parametrami preťažení konštruktéri
  • konštruktorov môžeme mať koľko len chceme
25
Parametrami preťažení konštruktéri
  • Pozor! Ak používame preťažené konštruktory a chceme používať aj prázdny konštruktor, musíme ho v triede explicitne napísať!