autor: Ivan Kupka

Verzia 1

home uvod K1 K2 K3 K4 K5 K6 K7 K8 K9 K10 K11 K12 K13 K14

Java 1

Java. Úvodná kapitola

Motto: I firmly believe that the best way to learn a new language is to program in it.

              John Withers, vo svojej knihe „Developing Java Entertainment Applets“.

 

Cieľ Prednášky 1:  Ukážka kódu v Jave, stručný opis Javy – objektovo orientovaného jazyka, literatúra a zdroje na sieti, existencia knižníc-balíkov, jednoduché dátové typy, String.

 

 

I.               Stretnutie s Jazykom Java

 

Predstavte si, že ste počítačový lingvista v 23. storočí. Poznáte z vykopávok viacero programovacích jazykov. Jedného dňa dostanete do ruky kód ďalšieho, pre vás zatiaľ neznámeho jazyka. Viete len, že sa volal Java a bol „objektovo orientovaný“.

Úloha1 : Využite vaše doterajšie znalosti kódov iných jazykov. Preskúmajte nasledujúci kód a skúste hádať, na čo sú jeho jednotlivé časti určené. Rozlišujte medzi faktami, ktorými ste si istí, veľmi pravdepodobnými domniekami a čírymi špekuláciami. Nesnažte sa porozumieť všetkému. Naopak, predpokladajte, že väčšine kódu nebudete rozumieť a nepotrebujete rozumieť. Kód je z knihy Bruce Eckela „Thinking in Java“ a tak ho uvádzame aj s copyrigtovým povolením – ak by ste ho chceli šíriť ďalej.

 

Kód P1.1:

//:! :CopyRight.txt

Copyright ©2000 Bruce Eckel

Source code file from the 2nd edition of the book

"Thinking in Java." All rights reserved EXCEPT as

allowed by the following statements:

You can freely use this file

for your own work (personal or commercial),

including modifications and distribution in

executable form only. Permission is granted to use

this file in classroom situations, including its

use in presentation materials, as long as the book

"Thinking in Java" is cited as the source.

Except in classroom situations, you cannot copy

and distribute this code; instead, the sole

distribution point is http://www.BruceEckel.com

(and official mirror sites) where it is

freely available. You cannot remove this

copyright and notice. You cannot distribute

modified versions of the source code in this

package. You cannot use this file in printed

media without the express permission of the

author. Bruce Eckel makes no representation about

the suitability of this software for any purpose.

It is provided "as is" without express or implied

warranty of any kind, including any implied

warranty of merchantability, fitness for a

particular purpose or non-infringement. The entire

risk as to the quality and performance of the

software is with you. Bruce Eckel and the

publisher shall not be liable for any damages

suffered by you or any third party as a result of

using or distributing software. In no event will

Bruce Eckel or the publisher be liable for any

lost revenue, profit, or data, or for direct,

indirect, special, consequential, incidental, or

punitive damages, however caused and regardless of

the theory of liability, arising out of the use of

or inability to use software, even if Bruce Eckel

and the publisher have been advised of the

possibility of such damages. Should the software

prove defective, you assume the cost of all

necessary servicing, repair, or correction. If you

think you've found an error, please submit the

correction using the form you will find at

www.BruceEckel.com. (Please use the same

form for non-code errors found in the book.)

///:~

//: c11:WordCount.java

// Counts words from a file, outputs

// results in sorted form.

import java.io.*;

import java.util.*;

 

class Counter {

  private int i = 1;

  int read() { return i; }

  void increment() { i++; }

}

 

public class WordCount {

  private FileReader file;

  private StreamTokenizer st;

  // A TreeMap keeps keys in sorted order:

  private TreeMap counts = new TreeMap();

  WordCount(String filename)

    throws FileNotFoundException {

    try {

      file = new FileReader(filename);

      st = new StreamTokenizer(

        new BufferedReader(file));

      st.ordinaryChar('.');

      st.ordinaryChar('-');

    } catch(FileNotFoundException e) {

      System.err.println(

        "Could not open " + filename);

      throw e;

    }

  }

  void cleanup() {

    try {

      file.close();

    } catch(IOException e) {

      System.err.println(

        "file.close() unsuccessful");

    }

  }

  void countWords() {

    try {

      while(st.nextToken() !=

        StreamTokenizer.TT_EOF) {

        String s;

        switch(st.ttype) {

          case StreamTokenizer.TT_EOL:

            s = new String("EOL");

            break;

          case StreamTokenizer.TT_NUMBER:

            s = Double.toString(st.nval);

            break;

          case StreamTokenizer.TT_WORD:

            s = st.sval; // Already a String

            break;

          default: // single character in ttype

            s = String.valueOf((char)st.ttype);

        }

        if(counts.containsKey(s))

          ((Counter)counts.get(s)).increment();

        else

          counts.put(s, new Counter());

      }

    } catch(IOException e) {

      System.err.println(

        "st.nextToken() unsuccessful");

    }

  }

  Collection values() {

    return counts.values();

  }

  Set keySet() { return counts.keySet(); }

  Counter getCounter(String s) {

    return (Counter)counts.get(s);

  }

  public static void main(String[] args)

  throws FileNotFoundException {

    WordCount wc =

      new WordCount("eden.txt");

    wc.countWords();

    Iterator keys = wc.keySet().iterator();

    while(keys.hasNext()) {

      String key = (String)keys.next();

      System.out.println(key + ": "

               + wc.getCounter(key).read());

    }

    wc.cleanup();

  }

} ///:~

 

 

Úloha 2.  Možno ste si v Úlohe 1 nepoložili niektoré z nasledujúcich otázok. V takom prípade si ich skúste položiť teraz:

a)    Na čo asi slúžia v kóde lomítka?

b)    Čo asi označuje slovo „String?“

c)    Čo by mohlo signalizovať slovo „import“?

d)    Skúste uhádnuť, na ktorých miestach je v kóde daný príkaz na vytvorenie nového objektu.

e)    Vymenujte niekoľko objektov (tried objektov) , s ktorými kód pracuje.

f)     Je niekde v kóde príkaz na tlačenie?

g)    Pracuje sa niekde v kóde s logickými podmienkami?

 

Úloha 3. Prezrite si nasledujúci javovský program typu „Hello world“. Uhádnite, aký bude výstup z programu, keď sa preloží a spustí.  Neskôr ho skúste preložiť javovským prekladačom a spustiť.

 

Kód P1.2

  public class Pozdrav {

 

    public static void main(String[] args) {

 

         System.out.println("Ahojte vsetci!");

   }

}

 

 

 

II.            Literatúra, zdroje na sieti

Knihy, ktoré umožnia aj začiatočníkovi  spoznať jazyk Java:

 Herout Pavel, Učebnice jazyka Java,  nakladatelství Kopp, České Budějovice,2000.

 

  Schildt Herbert, Java 2 Příručka programátora,Softpress , Brno, 2001.

  Eckel Bruce, Myslíme v jazyku Java , knihovna programátora, Grada publishing Praha, 2001.

 

   Literatúra pre pokročilejších:

Herout Pavel, Java grafické uživatelské prostředí a čeština,   nakladatelství Kopp, České Budějovice,2001.

Eckel Bruce, Myslíme v jazyku Java , knihovna zkušeného programátora, Grada publishing Praha, 2001.

Eckstein Robert, Loy Marc, Wood Dave, Java Swing. OReilly 1998.

 

 

 

užitočné internetové adresy:

Stránky Heroutovej učebnice:  www-kiv.zcu.cz~herout/java/ujjl

   www.BruceEckel.com

www.softpress.cz

 

Stránky spoločnosti Sun Microsystems, ktorá Javu vyvinula (a vyvíja):

www.javasoft.com

www.java.sun.com   - kde sa dá stiahnuť JDK, Java Development Kit, obsahujúci aj prekladač jazyka Java javac.exe a štandardný interpreter jazyka Java java.exe.

P.S. Spoločnosť Sun má na svojich stránkach aj rozsiahlu, prehľadne spracovanú dokumentáciu k jazyku Java, k jeho jednotlivým triedam. Do pozornosti odporúčam hlavne stránku „AllClasses“ . Dokumentácia je vo formáte html.

 

III.         Krátko o Jave.

Pôvodné, štrukturované programovanie sa riadilo heslom: „Dáta prispôsobím kódu“. Objektové programovanie má za cieľ prispôsobiť kód dátam.

          Java je objektovo orientovaný jazyk, vyvíjaný spoločnosťou Sun od roku 1991. Jej význam veľmi vzrástol s rozšírením internetu. Umožňuje prenositeľnosť kódu do rôznych operačných systémov (portability) . Java totiž negeneruje spustiteľný kód ako prekladače iných jazykov. Miesto toho generuje tzv. bajtový kód (byte code).Ide tu o vysoko optimalizovanú množinu inštrukcií, spustiteľných prostredníctvom run-time systému, ktorý sa nazýva virtuálny stroj Javy (Java Virtual Machine, JVM). Virtuálny stroj sa pomerne ľahko impementuje pre rôzne platformy. Virtuálne stroje, pracujúce v ľubovoľnom operačnom systéme sú už schopné interpretovať ten istý bajtový kód. Veľkou prednosťou Javy je aj dostupnosť zdrojov. Na siete sú celé hotové knižnice, ktoré možno používať zadarmo. Java takisto používa premyslený spôsob ladenia kódu, ktorý programátorovi uľahčuje prácu. Ďalšou veľkou pomôckou je prístupnosť dokumentácie k jednotlivým triedam a možnosť vytvárať veľmi pohodlným spôsobom dokumentáciu ku vlastným triedam. Java tiež umožňuje oddeliť verejné a súkromné časti kódu. To užívateľovi umožní pracovať stále s tou istou triedou a jej vlastnosťami, programátorovi triedy to zasa umožní skrytý kód kedykoľvek optimalizovať.

Poznámka pre programátorov v jazyku C: zabudnite na smerníky, v Jave neexistujú. Toto opatrenie zvyšuje bezpečnosť javovských aplikácií, napr. apletov. (Nedovolí sa v nich sprístupňovanie zdrojov mimo samotný program.)

 

IV.          Jednoduché programy v Jave.

  Preskúmajte nasledujúce kódy, obsahujúce prácu so základnými dátovými typmi a objektami.

Nájdite odpovede na kladené otázky.

 

Kód P1.3

   public class CislaAStringy {

 

    public static void main(String[] args) {

        String s = new String("Teraz vytlacim cislo.");

         System.out.println(s);

 

          int i = 5;

          System.out.println(i);

 

         s = "Teraz zmenim hodnotu cisla";

         System.out.println(s);

 

          i = 10;

          System.out.println(i);

     }

}

 

  Všimnite si: ako je deklarovaná premenná základného dátového typu integer? Ako je deklarovaný objekt typu String? Ako to, že hoci sme triedu s názvom String nevytvorili, napriek tomu môžeme vytvoriť objekt tejto triedy? (Odpoveď: pri každom spustení Javy sa automaticky importuje balík java.lang.  Jeho triedy sú programu k dispozícii. Jednou z nich je trieda String, ďalšou trieda  System .)

 

 

Základný dátový typ boolean . Príkazy if  if ...  else.

Kód P1.4

public class IfElse {

 

    public static void main(String[] args) {

       

       boolean pravdivostnaHodnota = true;

        

       if(pravdivostnaHodnota) System.out.println("Je to pravda.");

 

       pravdivostnaHodnota = false;  

 

       

       if(pravdivostnaHodnota) 

        System.out.println("Je to este stale  pravda.");

 

       if(pravdivostnaHodnota){ 

        System.out.println("Je to este stale, stale pravda.");

       }

       else {

        System.out.println("Uz to vobec nie je pravda.");

       }

      

     }

}

Otázky: Akým symbolom končí každý príkaz v Jave?

              Ako sa vytvorí premenná typu boolean a ako jej môžeme priradiť počiatočnú pravdivostnú hodnotu? 

Aký text sa vytlačí, keď sa vykoná program?

Java. Cvičenie 1

 

   Cieľom tohto cvičenia je naučiť sa spúšťať javovské programy. Táto činnosť zahrňuje:

Poznatky otom, ako zvoliť meno súboru, v ktorom je uložený kód. O tom, ako kód´preložiť a spustiť v operačnom systéme DOS a o tom, čo všetko musí byť na počítači nainštalované, aby spustenie prebehlo. Príklady precvičia narábanie so základnými dátovými premennými, použije sa príkaz tlačenia textu na konzolu.

 

Cv1.1

-        Spustenie programu v DOS-e. Vojdite do adresára, v ktorom sa nachádzajú programy „javac.exe“ a „java.exe“  (Príklad: adresár typu C:\jdk1.3\bin) . Nazvime ho “materský adresár”.  Kód P1.2  uložte do súboru s názvom „Pozdrav.java“ . Je dôležité, aby  „P“ v slove Pozdrav bolo veľké.  Súbor „Pozdrav.java“ uložte do materského adresára. Ak pracujete s operačným systémon Windows, vyvolajte príkazový riadok DOS-u pomocou Start/Programs/ Command Prompt.  Spustite prekladač „javac.exe“ pomocou príkazu:

 

javac Pozdrav.java

 

Výsledkom úspešného procesu je preklad kódu a jeho uloženie do súboru „Pozdrav.class“. Ak sa tak stalo, spustite súbor Pozdrav.class pomocou interpretera „java.exe“. Príkaz je:

 

java Pozdrav

 

Výpis z takéhoto spustenia cez Command Prompt sa nachádza tu:

 

Microsoft Windows 2000 [Version 5.00.2195]

(C) Copyright 1985-2000 Microsoft Corp.

 

C:\Documents and Settings\Administrator>cd C:\jdk1.3

 

C:\jdk1.3>cd bin

 

C:\jdk1.3\bin>javac Pozdrav.java

 

C:\jdk1.3\bin>java Pozdrav

Ahojte vsetci!

 

C:\jdk1.3\bin>

 

 

 

Cv1. 2

 Vyskúšajte aj spustenie cez „bat“ súbor.  Do súboru „zdravim.bat“ uložte tento kód:

 

javac Pozdrav.java

java Pozdrav

pause

 

Súbory  „zdravim.bat“ a  „Pozdrav.java“ uložte do materského adresára.  Spustite „zdravim.bat“.

Teraz kód v súbore „zdravim.bat“ upravte zmazaním prvého riadku na:

 

java Pozdrav

pause

 

Spustite znovu „zdravim.bat“.

Nakoniec v materskom adresári vymažte súbor „Pozdrav.class“. (Ak ste pri predošlých operáciách nedostali chybové hlásenie, tak tam ten súbor bude!). Spustite „zdravim.bat“ znovu. Čo sa teraz zmenilo? Vysvetlite, prečo program nezbehol.

 

Cv1. 3 Preložte a spustite aj ostatné programy z prednášky.

 

Cv1. 4

Mierne pozmeňte každý z programov. Pozmenené programy a triedy premenujte a spustite. Správali sa podľa vášho očakávania?

Návrh na zmenu: miesto výrazu System.out.println() použite výraz System.out.print(). Čo sa zmenilo?

 

Cv1. 5 Detektív oriešok

 

Preskúmajte nasledujúci kód. Čo podľa vás program vytlačí?

 

public class TypyCisel {

 

    public static void main(String[] args) {

       

       int cislo = 2004; 

       for(int j=1;j<21; j++) {

         cislo = cislo*10;

         System.out.println(cislo);

       }

     }

}

 

Spustite tento program. Ako sa líšili vytlačené údaje od tých, ktoré ste očakávali? Čím to vysvetľujete?

Vymeňte teraz v programe riadok

       int cislo = 2004; 

za riadok

       long cislo = 2004; 

a sledujte výstup z programu.

Nakoniec spustite program s riadkom

      double cislo = 2004;

 

 

© Ivan Kupka

home uvod K1 K2 K3 K4 K5 K6 K7 K8 K9 K10 K11 K12 K13 K14

Vaše komentáre: kupka@fmph.uniba.sk