Úvod do programovania v jazyku Java: Rozdiel medzi revíziami

Z Kiwiki
Skočit na navigaci Skočit na vyhledávání
(Vytvorená stránka „__NOTOC__ V súčasnosti existuje veľké množstvo programov, ktoré riešia veľmi rozmanité úlohy, pomaly sa môže zdať, že na všetko už bol naprogramovaný progr…“)
 
 
(16 medziľahlých úprav od 2 ďalších používateľov nie je zobrazených)
Riadok 1: Riadok 1:
__NOTOC__
+
{{navigacne menu - java}}
V súčasnosti existuje veľké množstvo programov, ktoré riešia veľmi rozmanité úlohy, pomaly sa môže zdať, že na všetko už bol naprogramovaný program. Napriek tomu často je potrebné, aby sme vytvorili vlastný program: autor môže totiž naprogramovať zoptimalizovaný algoritmus (taký postup na riešenie konkrétnej úlohy, aby bol vykonaný čo najrýchlejšie, s najmenšími výpočtovými nárokmi), čo je niekedy - hlavne pri náročných vedeckých výpočtoch - veľmi dôležité.
+
V súčasnosti existuje veľké množstvo programov, ktoré riešia veľmi rozmanité úlohy, pomaly sa môže zdať, že na všetko už bol naprogramovaný nejaký program. Napriek tomu často je potrebné, aby sme vytvorili vlastný program: autor môže totiž naprogramovať zoptimalizovaný algoritmus (taký postup na riešenie konkrétnej úlohy, aby bol vykonaný čo najrýchlejšie, s najmenšími výpočtovými nárokmi), čo je niekedy - hlavne pri náročných vedeckých výpočtoch - veľmi dôležité.
 
Samozrejme nie je vhodné programovať všetko úplne nanovo, je výhodné, pokiaľ môžeme čo najviac využiť, čo už iní naprogramovali (inak by pokrok v programovaní bol nulový). Podobne, ako pri skladaní stavebnice niekedy potrebujeme väčšie, inokedy zase menšie diely, aj riešenie našej úlohy rozdelíme na časti, ktoré je možné realizovať postupne (niektoré časti postupov prevezmeme od iných programátorov, niektoré vytvoríme sami, dôležité je však, že sme schopní program korektne zostaviť ideálne s čo najmenšou námahou). Pri programovaní vždy volíme kompromis medzi možnosťou prebrať už naprogramované (s tou nevýhodou, že možno berieme aj časti, ktoré potrebovať nebudeme) a pracným programovaním vlastného algoritmu.  
 
Samozrejme nie je vhodné programovať všetko úplne nanovo, je výhodné, pokiaľ môžeme čo najviac využiť, čo už iní naprogramovali (inak by pokrok v programovaní bol nulový). Podobne, ako pri skladaní stavebnice niekedy potrebujeme väčšie, inokedy zase menšie diely, aj riešenie našej úlohy rozdelíme na časti, ktoré je možné realizovať postupne (niektoré časti postupov prevezmeme od iných programátorov, niektoré vytvoríme sami, dôležité je však, že sme schopní program korektne zostaviť ideálne s čo najmenšou námahou). Pri programovaní vždy volíme kompromis medzi možnosťou prebrať už naprogramované (s tou nevýhodou, že možno berieme aj časti, ktoré potrebovať nebudeme) a pracným programovaním vlastného algoritmu.  
  
 
== Programovací jazyk Java ==
 
== Programovací jazyk Java ==
  
Na našich cvičeniach sa budeme venovať programovaniu v programovacom jazyku Java, ktorý vyvíja spoločnosť SUN Microsystems Inc. Jeho hlavnými výhodami sú:
+
Na našich prednáškach a cvičeniach sa budeme venovať programovaniu v programovacom jazyku [http://en.wikipedia.org/wiki/Java_%28programming_language%29 Java], ktorý vyvíja spoločnosť [http://java.sun.com/ SUN Microsystems Inc] pod licenciou GNU/GPL - [http://www.sun.com/software/opensource/java/ Free and Open Source Java]. Jeho hlavnými výhodami sú:
  
* sú podporované vlastne všetky operačné systémy
+
* sú podporované takmer všetky operačné systémy
 
* je voľne šíriteľný - zadarmo
 
* je voľne šíriteľný - zadarmo
 
* je objektovo orientovaný (vysvetlíme neskôr), čo umožňuje veľkú znovupoužiteľnosť už naprogramovaných algoritmov
 
* je objektovo orientovaný (vysvetlíme neskôr), čo umožňuje veľkú znovupoužiteľnosť už naprogramovaných algoritmov
* existuje preň veľké množstvo príkladov
+
* existuje preň veľké množstvo príkladov, knižníc a má rozsiahlu podporu
 
* je veľmi dobre dokumentovaný
 
* je veľmi dobre dokumentovaný
  
Riadok 20: Riadok 20:
  
 
* písanie programu (zdrojového kódu) v jazyku Java (súbory *.java)
 
* písanie programu (zdrojového kódu) v jazyku Java (súbory *.java)
* preloženie = kompilovanie - vytvorenie binárneho (*.class) súboru kompilátorom javy (javac)
+
* preloženie resp. kompilovanie - vytvorenie binárneho (*.class) súboru kompilátorom javy [http://en.wikipedia.org/wiki/Javac javac]
* spustenie virtuálneho stroja javy (java) a vykonanie spustiteľného .class súboru
+
* spustenie [http://en.wikipedia.org/wiki/Virtual_machine virtuálneho stroja] javy (sada počítačových programov spoločne integrovaných do programu [http://cs.wikipedia.org/wiki/Virtu%C3%A1ln%C3%AD_stroj java]) a vykonanie spustiteľného .class súboru
  
== Zdrojový kód ==
+
==Slovník používaných pojmov==
 
+
;Case-sensitive: Skutočnosť, že sa rozlišujú veľké a malé písmená. Java je case-sensitive.
Zdrojový kód = textový súbor, v ktorom je zapísaný program v jazyku Java. Je editovateľný textovým editorom, typicky je pomenovaný meno_triedy.java podľa triedy (class), ktorá sa v ňom nachádza.
+
;Skorá väzba (early binding): O tom, ktorá metóda ktorej triedy bude volaná sa rozhoduje už v priebehu kompilácie.
Zdrojový kód je zrozumiteľný programátorovi - ten mu musí rozumieť, aby mohol do neho zapísať požadovaný algoritmus.
+
;Členské premenné (member variables):Dátová časť triedy.
Význam tried vysvetlíme neskôr, zatiaľ ich berme ako niečo "povinné".
+
;Dedičnosť (Inheritance): Novú triedu možno vytvoriť tak, že ju odvodíme od už existujúcej. Táto nová trieda zdedí ako členské premenné tak aj metódy rodičovskej triedy. Dedičnosť je prenosná. Teda ak trieda A je odvodená od triedy B a trieda B od triedy C, potom objekt triedy A je aj objektom triedy B i triedy C.
 
+
;Inštancia:Môžeme povedať, že nejaký objekt je inštanciou nejakej triedy - teda onen objekt je akoby premennou danej triedy
Najjednoduchší zdrojový kód (v súbore nic.java):
+
;Metódy (methods):Funkčná časť triedy, resp. funkcia patriaca danej triede.
 
+
;Objekt (object):Konkrétne zástupca triedy. Niečo ako premenná dátového typu. Má vyhradený pamäťový priestor, možno s ním manipulovať prostredníctvom ovládačov.
class nic {
+
;Odvodzovanie: Skutočnosť, kedy novú triedu vytvoríme rozšírením / upravením nejaké iné.
}
+
;Ovládač alebo referencie, referenčná premenná (handler, referencie):Identifikátor, pomocou ktorého môžeme manipulovať s objektmi. Neobsahuje adresu objektu v pamäti, preto nemožno použiť adresové aritmetiky.
 
+
;Polymorfizmus (polymorphism): Vlastnosť OOP založená na neskoré väzbe
* "{" otvára obsah bloku, "}" zatvára, zatiaľ je blok a teda aj trieda prázdna
+
;Neskorá väzba (late binding):O tom, ktorá metóda ktoré triedy bude volaná sa rozhoduje až za behu aplikácie. Implicitný spôsob pre Javu.
* kompilovanie = preklad do bytecode (človeku nezrozumiteľný), vytvorenie súboru .class
+
;Prístupové práva:Jednotlivým triedam, členským premenným a metódam môžeme nastaviť prístupové práva, čím môžeme určiť, z akých častí programu je možné použiť.
** z príkazového riadku javac nic.java (vytvorí nic.class)
+
;Rozhranie triedy: Zoznam použiteľných metód. Inak povedané informácie o tom, aké správy trieda prijíma.
** my budeme robiť v SciTe: Tools -> Compile alebo stlačením klávesy F7
+
;Skladanie alebo kompozície (Composition): Skutočnosť, keď sa objekt vytvára skladaním z ďalších objektov.
 
+
;Trieda (class):Štruktúra, ktorá zahŕňa dáta aj programový kód. Vzdialene podobné typom record / struct v procedurálnych jazykoch.
'''Úloha'''
+
;Zapuzdrenie (Encapsulation):Skutočnosť, že objekty obsahujú pohromade dáta aj funkcie s nimi pracujúce a ďalej že môžeme obmedziť prístup k nim.
 
+
;Správy:Objekty spolu komunikujú zasielaním správ - podobné ako volanie metód.
Vyskúšajte: Čo sa stane, ak súbor prva.java bude obsahovať viac tried?
 
   
 
class prva {
 
}
 
 
class druha {
 
}
 
 
class tretia {
 
}
 
 
 
Po spustení javac prva.java dostaneme tri súbory prva.class, druha.class, tretia.class, každý bude obsahovať jednu triedu. Tieto súbory by sme dostali aj keby sa súbor .java volal inak, nie prva.java, kompilátor sa riadi menom, ktoré napíšeme za class.
 
 
 
* zásadou však bude v jednom súbore mať iba jednu triedu a pomenovať ho podľa nej
 
* pozor, často sa stane, že omylom pomenujete súbor inak, ako triedu v ňom a trápite sa, prečo chybové hlásenia nedávajú zmysel... (súbor .class sa volá inak, ako súbor .java)
 
 
 
== Spustenie aplikácie (súboru .class) v Java Virtual Machine ==
 
 
 
Po kompilácii zdrojového kódu do bytecode, ktorý sa uloží do súboru meno_triedy.class je tento možné spustiť, pokiaľ v ňom je časť popisujúca, čo sa má vykonať. Najjednoduchšia spustiteľná trieda Hello.java:
 
 
class Hello {
 
    public static void main(String[] args) {
 
        System.out.println("Hey, it really works!");
 
    }
 
}
 
 
 
* po skompilovaní javac Hello.java (F7) spustíme
 
** z príkazového riadku java Hello
 
** v SciTe: Tools -> Go alebo stlačením klávesy F5
 
* čo sa má vykonať píšeme medzi { a } funkcie (metódy) main
 
* tento príklad vypíše do konzoly "Hey, it really works!" (podrobnejšie vysvetlíme neskôr)
 
* samotné vykonanie zabezpečí Java Virtual Machine (JVM)
 
* Java Virtual Machine je skompilovaná pre danú platformu (systém)
 
* to zabezpečuje úplnú prenositeľnosť medzi systémami - platí pre súbory .java aj bytecode (.class), teda nie je treba ani znova kompilovať, keď prejdeme do iného operačného systému
 
 
 
== Editor SciTE ==
 
 
 
Je to textový editor (založený na voľne šíriteľnom komponente Scintilla), ktorý môžete používať pod Linuxom aj Windows. V princípe by sme mohli používať ľubovoľný textový editor, tento je však veľmi dobrý a zadarmo.
 
 
 
* Scintilla Text Editor je programátorský textový editor (podporuje okolo 80 rôznych jazykov/formátov)
 
* syntax highlight - kľúčové slová, operátory farebne vyznačuje
 
* brace matching - vyhľadanie páru k zátvorke (kurzor nastavte za zátvorku - ak sa pár nenájde, zmení farbu na červenú, inak sa aj s párom zafarbia na modro)
 
* skrývanie blokov (kliknutím na +/- na ľavom okraji okna sa blok rozbalí/zbalí)
 
* auto complete - doplnenie príkazu (Ctrl+Space) - novšie verzie, v T3 zatiaľ nefunguje
 
* klávesové skratky:
 
** Ctrl+c = kopíruj, Ctrl+v = vlož, Ctrl+x = vystrihni, Ctrl+s = ulož
 
** F9 = kompiluj aktuálny .java súbor, F5 = spusti aktuálnu triedu
 
** Ctrl+q = zakomentovanie/odkomentovanie bloku/riadku, Ctrl+d = duplikuj riadok
 
** Ctrl+b = zakomentuj/odkomentuj blok, Ctrl+e = presun k páru k danej zátvorke
 
** Ctrl+f = hľadaj, F3 = hľadaj znova, Ctrl+r = hľadaj a nahraď
 
** Ctrl+g = rýchly presun na riadok/stĺpec, Ctrl+hore/dole = posun obsahu okna
 
* v časti okna sa ukazuje výstup programu a exit code (neskôr si povieme, ako exit code nastaviť na nejakú hodnotu funkciou System.exit(), je to informácia o ukončení programu - 0 znamená normálne ukončenie bez chyby).
 
 
 
[[Súbor:Scite.png]]
 

Aktuálna revízia z 18:38, 12. september 2010

V súčasnosti existuje veľké množstvo programov, ktoré riešia veľmi rozmanité úlohy, pomaly sa môže zdať, že na všetko už bol naprogramovaný nejaký program. Napriek tomu často je potrebné, aby sme vytvorili vlastný program: autor môže totiž naprogramovať zoptimalizovaný algoritmus (taký postup na riešenie konkrétnej úlohy, aby bol vykonaný čo najrýchlejšie, s najmenšími výpočtovými nárokmi), čo je niekedy - hlavne pri náročných vedeckých výpočtoch - veľmi dôležité. Samozrejme nie je vhodné programovať všetko úplne nanovo, je výhodné, pokiaľ môžeme čo najviac využiť, čo už iní naprogramovali (inak by pokrok v programovaní bol nulový). Podobne, ako pri skladaní stavebnice niekedy potrebujeme väčšie, inokedy zase menšie diely, aj riešenie našej úlohy rozdelíme na časti, ktoré je možné realizovať postupne (niektoré časti postupov prevezmeme od iných programátorov, niektoré vytvoríme sami, dôležité je však, že sme schopní program korektne zostaviť ideálne s čo najmenšou námahou). Pri programovaní vždy volíme kompromis medzi možnosťou prebrať už naprogramované (s tou nevýhodou, že možno berieme aj časti, ktoré potrebovať nebudeme) a pracným programovaním vlastného algoritmu.

Programovací jazyk Java

Na našich prednáškach a cvičeniach sa budeme venovať programovaniu v programovacom jazyku Java, ktorý vyvíja spoločnosť SUN Microsystems Inc pod licenciou GNU/GPL - Free and Open Source Java. Jeho hlavnými výhodami sú:

  • sú podporované takmer všetky operačné systémy
  • je voľne šíriteľný - zadarmo
  • je objektovo orientovaný (vysvetlíme neskôr), čo umožňuje veľkú znovupoužiteľnosť už naprogramovaných algoritmov
  • existuje preň veľké množstvo príkladov, knižníc a má rozsiahlu podporu
  • je veľmi dobre dokumentovaný

Pre nás bude dôležité, že sa v tomto programovacom jazyku naučíme ako základné princípy programovania tak aj rýchlo a relatívne jednoducho naprogramovať veľmi pekné a užitočné veci.

Na druhej strane, vždy je to niečo za niečo, a ako sme už spomenuli, za jednoduchosť sa platí daň. V prípade Javy to, že je podporovaná takmer všetkými operačnými systémami (jej prenositeľnosť) je možná vďaka tomu, že v operačnom systéme spustíme tzv. virtuálny stroj Javy, ktorý prekladá náš program operačnému systému. Programátori spoločnosti Sun nám tým, že naprogramovali virtuálny stroj Javy pre každú platformu umožnili programovať jednotne pod ľubovoľným operačným systémom. Áno, znamená to určitú stratu efektivity, pretože Java musí byť interpretovaná z bytecode. Existujú však spôsoby, ako tieto straty zredukovať na minimum, takže nevýhody sú bohato vyvážené možnosťami, ktoré jazyk ponúka.

Postup, ako sa dostať až k vykonateľnému programu v Jave a vykonať ho:

  • písanie programu (zdrojového kódu) v jazyku Java (súbory *.java)
  • preloženie resp. kompilovanie - vytvorenie binárneho (*.class) súboru kompilátorom javy javac
  • spustenie virtuálneho stroja javy (sada počítačových programov spoločne integrovaných do programu java) a vykonanie spustiteľného .class súboru

Slovník používaných pojmov

Case-sensitive
Skutočnosť, že sa rozlišujú veľké a malé písmená. Java je case-sensitive.
Skorá väzba (early binding)
O tom, ktorá metóda ktorej triedy bude volaná sa rozhoduje už v priebehu kompilácie.
Členské premenné (member variables)
Dátová časť triedy.
Dedičnosť (Inheritance)
Novú triedu možno vytvoriť tak, že ju odvodíme od už existujúcej. Táto nová trieda zdedí ako členské premenné tak aj metódy rodičovskej triedy. Dedičnosť je prenosná. Teda ak trieda A je odvodená od triedy B a trieda B od triedy C, potom objekt triedy A je aj objektom triedy B i triedy C.
Inštancia
Môžeme povedať, že nejaký objekt je inštanciou nejakej triedy - teda onen objekt je akoby premennou danej triedy
Metódy (methods)
Funkčná časť triedy, resp. funkcia patriaca danej triede.
Objekt (object)
Konkrétne zástupca triedy. Niečo ako premenná dátového typu. Má vyhradený pamäťový priestor, možno s ním manipulovať prostredníctvom ovládačov.
Odvodzovanie
Skutočnosť, kedy novú triedu vytvoríme rozšírením / upravením nejaké iné.
Ovládač alebo referencie, referenčná premenná (handler, referencie)
Identifikátor, pomocou ktorého môžeme manipulovať s objektmi. Neobsahuje adresu objektu v pamäti, preto nemožno použiť adresové aritmetiky.
Polymorfizmus (polymorphism)
Vlastnosť OOP založená na neskoré väzbe
Neskorá väzba (late binding)
O tom, ktorá metóda ktoré triedy bude volaná sa rozhoduje až za behu aplikácie. Implicitný spôsob pre Javu.
Prístupové práva
Jednotlivým triedam, členským premenným a metódam môžeme nastaviť prístupové práva, čím môžeme určiť, z akých častí programu je možné použiť.
Rozhranie triedy
Zoznam použiteľných metód. Inak povedané informácie o tom, aké správy trieda prijíma.
Skladanie alebo kompozície (Composition)
Skutočnosť, keď sa objekt vytvára skladaním z ďalších objektov.
Trieda (class)
Štruktúra, ktorá zahŕňa dáta aj programový kód. Vzdialene podobné typom record / struct v procedurálnych jazykoch.
Zapuzdrenie (Encapsulation)
Skutočnosť, že objekty obsahujú pohromade dáta aj funkcie s nimi pracujúce a ďalej že môžeme obmedziť prístup k nim.
Správy
Objekty spolu komunikujú zasielaním správ - podobné ako volanie metód.