Java (II) - 1. lekcia
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu
Reklama
Reklama

Java (II) - 1. lekciaJava (II) - 1. lekcia

 

Java (II) - 1. lekcia

Google       Google       6. 5. 2006       60 502×

Obsah prvej lekcie:

  • Základy objektovo orientovaného programovania
  • Komentáre
  • Primitívne dátové typy
  • Zoznam vyhradených kľúčových slov (keywords) pre Javu
  • Úloha č. 1

Reklama
Reklama

Základy objektovo orientovaného programovania

Základy OOP rozdelím na jednotlivé časti, ktoré stručne popíšem tak, ako to uvádza Sun. Túto časť je nutné veľmi dobre pochopiť, lebo od nej sa budú odvíjať ďalšie časti tohoto kurzu. Podrobnejšiu vysvetlím samotnú stavbu a použitie kódu v uvedených príkladoch v ďalšej lekcii. Taktiež napr. polymorfizmus a rozhrania nechám na neskôr.

Objekty

Objekt (object) je základným stavebným kameňom vývoja aplikácii a každý program napísaný v jazyku Java obsahuje minimálne jeden. Je to softwarový zväzok premenných (premenná je pomenovaný kúsok pamäte, ktorá je použitá k uloženiu nejakej informácie alebo dátovej položky) a príbuzných metód (metóda je funkcia definovaná v triede).

Softwarové objekty si môžeme predstaviť ako skutočné objekty z nášho života. Všetko, čo tieto objekty vedia (stav) alebo čo môžu robiť (správanie), je vyjadrené premennými a metódami. Na nižšie uvedenom obrázku je znázornený objekt, kde metódy obklopujú a skrývajú jeho jadro s premennými pred inými objektami. Takéto združovanie premenných do stredu objektu sa nazýva enkapsulácia – zapúzdrenie (encapsulation).

Ako objekt si môžeme predstaviť napr. auto. Tento príklad je len na pochopenie princípu premenných a metód. Stavbu (syntax) kódu si vysvetlíme neskôr.

Príklad č. 1


public class Auto {
    /*
     *  premenne pre ulozenie udajov o aute
     */
    private int rychlost;
    private int pocetNajazdenychKilometrov;

    /*
     *  metoda na zistenie rychlosti auta
     */
    public void zistiRychlost() {
        return rychlost;
    }

    /*
     *  metoda na nastavenie rychlosti auta
     */
    public void nastavRychlost(int novaRychlost) {
        rychlost = novaRychlost;
    }

    /*
     *  metoda, ktora vyvola poruchu auta, ked sa pocet najazdenych km rovna 1000
     */
    public boolean porucha() {
        if(pocetNajazdenychKilometrov == 1000)
            return true;
        else
            return false;     
    }
}

Vo vyššie uvedenom príklade sme použili premenné rychlost a pocetNajazdenychKilometrov. Metódy zistiRychlost, nastavRychlost a porucha predstavujú vlastnosti alebo správanie objektu. Metódy často využívajú premenné k tomu, aby mohly ovplyvniť alebo zmeniť správanie a vlastnosti objektu.

Správy

Objekty vzájomne pôsobia a komunikujú (interakcia – interaction) medzi sebou pomocou správ (messages). Na obrázku dole je uvedená interakcia dvoch objektov pomocou správy. Objekt A môže predstavovať napr. auto a objekt B človeka v aute. Človek chce znížiť rýchlosť auta, a tak pribrzdí, čím pošle správu autu o potrebe zníženia rýchlosti. Inak si interkaciu objektov môžeme vysvetliť ako využitie princípu architektúry klient-server. Klient poslaním správy žiada server o nejakú službu.

Jediný objekt nieje sám o sebe veľmi užitočný. Zvyčajne vystupuje ako komponent väčšieho programu alebo aplikácie, ktorá pozostáva s viacerých objektov. Programátori prostredníctvom interakcie objektov dosiahnu vysokú funkčnosť a viacej úrovňové komplexné správanie.

Triedy

Trieda (class) je predloha alebo prototyp definujúci premenné a metódy pre určitý druh objektov. V skutočnom svete existuje nespočetne veľa objektov toho istého druhu. Napr. Ferrari, ktoré si kúpime, je len jeden druh auta spomedzi množstva ďalších na svete. S použitím objektovo orientovanej terminológie hovoríme, že naše Ferrari ako objekt je inštancia (instance – objekt konkrétnej triedy) triedy auto.

Príklad č. 2 (trieda a objekty)


public class Auto {
	/*
	 *  premenne pre ulozenie udajov o aute
	 */
	private String typAuta;
	private int serioveCislo;
	private int maxRychlost;
	
	/*
	 *  metoda na zistenie typu auta
	 */
	public String zistiTypAuta() {
		return typAuta;
	}
	
	/*
	 *  metoda na zistenie serioveho cisla
	 */
	public int zistiSerioveCislo() {
		return serioveCislo;
	}
	
	/*
	 *  metoda na zistenie maximalnej rychlosti
	 */
	public int zistiMaxRychlost() {
		return maxRychlost;
	}
	
	/*
	 *  metoda na nastavenie typu auta
	 */
	public void nastavTypAuta(String novyTypAuta) {
		typAuta = novyTypAuta;
	}
	
	/*
	 *  metoda na nastavenie serioveho cisla
	 */
	public void nastavSerioveCislo(int noveSerioveCislo) {
		serioveCislo = noveSerioveCislo;
	}
	
	/*
	 *  metoda na nastavenie maximalnej rychlosti
	 */
	public void nastavMaxRychlost(int novaMaxRychlost) {
		maxRychlost = novaMaxRychlost;
	}
	
	/*
	 *  hlavna metoda, ktora je spustena hned po spusteni aplikacie
	 */
	public static void main(String[] args) {
		
		/*
		 *  vytvorenie prveho auta a nastavenie jeho udajov
		 */
		Auto Ferrari = new Auto();
		Ferrari.nastavTypAuta("Ferrari Enzo");
		Ferrari.nastavSerioveCislo(12345);
		Ferrari.nastavMaxRychlost(300);
		
		/*
		 *  vypis udajov prveho auta
		 */
		System.out.println("Typ prveho auta: " + Ferrari.zistiTypAuta());
		System.out.println("Seriove cislo prveho auta: " + Ferrari.zistiSerioveCislo());
		System.out.println("Max. rychlost prveho auta: " + Ferrari.zistiMaxRychlost());
		
		System.out.println();
		
		/*
		 *  vytvorenie druheho auta a nastavenie jeho udajov
		 */
		Auto Porsche = new Auto();
		Porsche.nastavTypAuta("Porsche 911");
		Porsche.nastavSerioveCislo(54321);
		Porsche.nastavMaxRychlost(280);
		
		/*
		 *  vypis udajov druheho auta
		 */
		System.out.println("Typ druheho auta: " + Porsche.zistiTypAuta());
		System.out.println("Seriove cislo druheho auta: " + Porsche.zistiSerioveCislo());
		System.out.println("Max. rychlost druheho auta: " + Porsche.zistiMaxRychlost());
	}

}

Vo vyššie uvedenom príklade je jednoduchá demonštrácia vytvorenia dvoch objektov na základe jednej triedy. Použili sme tri premenné na uloženie údajov o type, sériovom čísle a maximálnej rýchlosti auta. Na nastavenie a zistenie týchto údajov boli použité metódy, tzv. nastavovače (setters od angl. slova set – nastav) a zisťovače (getters od angl. slova get – získaj).

Dedičnosť

Triedy dedia (alebo odvodzujú, angl. inherit) stav a správanie zo svojej základnej triedy (alebo rodičovskej triedy, predka, angl. superclass). Dedením vzniká nová trieda (alebo odvodená trieda, priama podtrieda, priamy potomok, angl. subclass).

Triedy Ferrari, Porsche aj BMW dedia zo základnej triedy Auto stav vo forme premenných (každé auto, či už je to Ferrari, Porsche alebo BMW, má napr. svoje sériové číslo) a správanie vo forme metód (napr. všetky autá dokážu meniť smer jazdy volantom).

Príklad č. 3 (dedičnosť)

Trieda Auto

public class Auto {
	/*
	 *  premenna pre ulozenie serioveho cisla
	 */
	private int serioveCislo;
	
	/*
	 *  metoda na zistenie serioveho cisla
	 */
	public int zistiSerioveCislo() {
		return serioveCislo;
	}
	
	/*
	 *  metoda na nastavenie serioveho cisla
	 */
	public void nastavSerioveCislo(int noveSerioveCislo) {
		serioveCislo = noveSerioveCislo;
	}
}
Trieda Ferrari

public class Ferrari extends Auto {
	/*
	 * premenna pre ulozenie farby nasho Ferrati
	 */
	private String farbaFerrari;
	
	/*
	 *  metoda na zistenie serioveho cisla
	 */
	public String zistiFarbuFerrari() {
		return farbaFerrari;
	}
	
	/*
	 *  metoda na nastavenie serioveho cisla
	 */
	public void nastavFarbuFerrari(String novaFarbaFerari) {
		farbaFerrari = novaFarbaFerari;
	}
}
Trieda Porsche

public class Porsche extends Auto {
	/*
	 * premenna pre ulozenie poctu dveri nasho Porsche
	 */
	private int pocetDveriPorsche;
	
	/*
	 *  metoda na zistenie poctu dveri
	 */
	public int zistiPocetDveriPorsche() {
		return pocetDveriPorsche;
	}
	
	/*
	 *  metoda na nastavenie poctu dveri
	 */
	public void nastavPocetDveriPorsche(int novyPocetDveri) {
		pocetDveriPorsche = novyPocetDveri;
	}
}
Trieda BMW

public class BMW extends Auto {
	/*
	 * premenna pre ulozenie ceny nasho BMW
	 */
	private long cenaBMW;
	
	/*
	 *  metoda na zistenie ceny
	 */
	public long zistiCenuBMW() {
		return cenaBMW;
	}
	
	/*
	 *  metoda na nastavenie ceny
	 */
	public void nastavCenuBMW(int novaCenaBMW) {
		cenaBMW = novaCenaBMW;
	}
}
Trieda TestAut

public class TestAut {
	public static void main(String[] args) {
		
		// vytvorenie objektu mojeFerrari zo subclassu Ferrari
		Ferrari mojeFerrari = new Ferrari();
		
		// nastavenie serioveho cisla cez metodu, ktora bola zdedena zo superclassu Auto
		mojeFerrari.nastavSerioveCislo(11111);
		
		// nastavenie farby cez metodu v subclasse
		mojeFerrari.nastavFarbuFerrari("cervena");
		
		// vypis serioveho cisla a farby
		System.out.println("Seriove cislo Ferrari: " + mojeFerrari.zistiSerioveCislo());
		System.out.println("Farba Ferrari: " + mojeFerrari.zistiFarbuFerrari());
	
		System.out.println();
		
		// vytvorenie objektu mojePorsche zo subclassu Porsche
		Porsche mojePorsche = new Porsche();
		
		// nastavenie serioveho cisla cez metodu, ktora bola zdedena zo superclassu Auto
		mojePorsche.nastavSerioveCislo(22222);
		
		// nastavenie poctu dveri cez metodu v subclasse
		mojePorsche.nastavPocetDveriPorsche(2);
		
		// vypis serioveho cisla a poctu dveri
		System.out.println("Seriove cislo Porsche: " + mojePorsche.zistiSerioveCislo());
		System.out.println("Pocet dveri Porsche: " + mojePorsche.zistiPocetDveriPorsche());
		
		System.out.println();
		
		// vytvorenie objektu mojeBMW zo subclassu BMW
		BMW mojeBMW = new BMW();
		
		// nastavenie serioveho cisla cez metodu, ktora bola zdedena zo superclassu Auto
		mojeBMW.nastavSerioveCislo(33333);
		
		// nastavenie ceny cez metodu v subclasse
		mojeBMW.nastavCenuBMW(1200000);
		
		// vypis serioveho cisla a ceny
		System.out.println("Seriove cislo BMW: " + mojeBMW.zistiSerioveCislo());
		System.out.println("Pocet dveri Porsche: " + mojeBMW.zistiCenuBMW());
	}
}

V tomto príklade je použitých päť zdrojových súborov, pričom každý z nich obsahuje jednu triedu. Príklad spustíme tak, že si v Eclipse vytvoríme projekt, do ktorého pridáme päť tried (5× „File-> New-> Class“), nazveme ich tak, ako to je uvedené v príklade, a vložíme do nich zdrojáky. Aplikáciu spustíme v „Package Exploreri“ cez súbor TestAut.java, ako je to znázornené na nižšie uvedenom obrázku.


Komentáre

Java podporuje tri druhy komentárov (komentáre sú poznámky programátora, ktoré bližšie objasňujú zdrojový kód). Prvé dva sú známe z jazykov C a C++:


// jednoriadkový komentár

/*
 * niekolko
 * riadkovy
 * komentar
 */

Tretím druhom je tzv. javadoc. Je to nástroj pre generovanie API dokumentácie do HTML formátu:


/**
 * javadoc - vsimnite si 
 * dve hviezdicky
 * na zaciatku komentara
 */

V predchádzajúcich príkladoch sme použili prvé dva druhy komentárov a pri nich aj zatiaľ ostaneme.


Primitívne dátové typy

Primitívne dátové typy sú typy hodnôt premenných. Keď deklarujeme premennú, do ktorej budeme ukladať nejaké čislo, musíme uviesť, akého dátového typu bude. Môže byť napr. celočíselného typu (int) alebo to môže byť typ s desatinnou čiarkou (float). Java používa tieto primitívne dátové typy:

Datové typy v Javě
Typ Veľkosť Popis
boolean false-> true nadobúda iba dve možné hodnoty
byte 128-> 127 8bitové celé číslo v dvojkovom doplnkovom kóde
short 32768-> 32767 16bitové celé číslo v dvojkovom doplnkovom kóde
int −2147483648-> 2147483647 32bitové celé číslo v dvojkovom doplnkovom kóde
long −9223372036854775808-> 9223372036854775807 64bitové celé číslo v dvojkovom doplnkovom kóde
char 0-> 65535 16bitové neznamienkové celé číslo
float * 32bitové číslo s plávajúcou rádovou čiarkou
double * 64bitové číslo s plávajúcou rádovou čiarkou

* Dátové typy float a double nadobúdajú kladné a záporné hodnoty, kladné a záporné nuly, kladné a záporné nekonečná a NaN (Not-a-Number).

Príklad č. 4 (dátové typy)


public class DatoveTypy {
	// premenne
	private boolean odpovedNaOtazku;
	private byte octet;
	private short maleCislo;
	private int cislo;
	private long velkeCislo;
	private char znak;
	private float maleDesatinneCislo;
	private double velkeDesatinneCislo;
	
	public static void main(String[] args) {
		// vytvorenie objektu 
		// z triedy DatoveTypy
		DatoveTypy mojeDatoveTypy = new DatoveTypy();
		
		System.out.println("Vypis implicitne nastavenych (prednastavenych) hodnot datovych typov: \n");
		System.out.println(mojeDatoveTypy.odpovedNaOtazku);
		System.out.println(mojeDatoveTypy.octet);
		System.out.println(mojeDatoveTypy.maleCislo);
		System.out.println(mojeDatoveTypy.cislo);
		System.out.println(mojeDatoveTypy.velkeCislo);
		System.out.println(mojeDatoveTypy.znak);
		System.out.println(mojeDatoveTypy.maleDesatinneCislo);
		System.out.println(mojeDatoveTypy.velkeDesatinneCislo);
		
		System.out.println();
		
		/*
		 * teraz zmenime hodnoty premennych
		 * vsimnite si, ze pri premennych "velkeCislo"
		 * typu long a "maleDesatinneCislo" typu float
		 * musime na konci cisla uviest malym alebo
		 * velkym pismenom ci sa jedna o long alebo float
		 * 
		 * je to kvoli tomu aby sa dali cisla rozoznat od
		 * inych datovych typov, napr. cislo 3.14 moze byt 
		 * typu float aj typu double; zapisom 3.14F je nam
		 * aj kompilatoru jasne, ze sa jedna o premennu
		 * datoveho typu float
		 * 
		 * pri desatinnych cislach oddelujeme cisla pred
		 * a za desatinnou ciarkou bodkou ako je vidno
		 * pri cisle 3.14
		 */
		mojeDatoveTypy.odpovedNaOtazku = true;
		mojeDatoveTypy.octet = 12;
		mojeDatoveTypy.maleCislo = 10000;
		mojeDatoveTypy.cislo = 100000;
		mojeDatoveTypy.velkeCislo = 1000000000000L; // vsimnite si pismeno "L" na konci
		mojeDatoveTypy.znak = 'x';
		mojeDatoveTypy.maleDesatinneCislo = 3.14F; // vsimnite si pismeno "F" na konci
		mojeDatoveTypy.velkeDesatinneCislo = 3.1415926535897932384626433832795;
		
		System.out.println("Vypis explicitne (nami) nastavenych hodnot datovych typov: \n");
		System.out.println(mojeDatoveTypy.odpovedNaOtazku);
		System.out.println(mojeDatoveTypy.octet);
		System.out.println(mojeDatoveTypy.maleCislo);
		System.out.println(mojeDatoveTypy.cislo);
		System.out.println(mojeDatoveTypy.velkeCislo);
		System.out.println(mojeDatoveTypy.znak);
		System.out.println(mojeDatoveTypy.maleDesatinneCislo);
		System.out.println(mojeDatoveTypy.velkeDesatinneCislo);
	}
}

V tomto príklade sme pristupovali k pemenným priamo cez objekt. Je nutné podotknúť, že takýto spôsob prístupu sa nepoužíva a je nebezpečný, lebo sa ním priamo mení hodnota premennej. Na nastavenie a získanie hodnôt premenných sa používajú gettre a settre, ktoré som už spomínal a použil v predošlých príkladoch.

Implicitné hodnoty dátových členov

Primitívne dátové typy obsahujú východziu počiatočnú hodnotu pokiaľ niesú inicializované na inú hodnotu.

Implicitní hodnoty datových typů
Dátový typ Implicitná (počiatočná) hodnota
boolean false
byte (byte)0
short (short)0
int (int)0
long (long)0
char '\u0000' (null)
float (float)0.0
double (double)0.0

Zoznam vyhradených kľúčových slov (keywords) pre Javu

Zoznam slov, ktoré sú v Jave vyhradené na používanie vlastností tohto jazyka. Postupne sa s nimi oboznámime.

Seznam vyhrazených klíčových slov
Keywords Keywords
abstract int
assert interface
boolean long
break native
byte new
case package
catch private
char protected
class public
const return
continue short
default static
do strictfp
double super
else switch
extends synchronized
final this
finally throw
float throws
for transient
goto try
if void
implements volatile
import while
instanceof

Úloha č. 1

Vyskúšajte všetky uvedené príklady a zoznámte sa s prostredím Eclipse, poprípade NetBeans. Všetky problémy a veci týkajúce sa Javy a tohto kurzu sa budú riešiť na fóre v kategórii Java.

×Odeslání článku na tvůj Kindle

Zadej svůj Kindle e-mail a my ti pošleme článek na tvůj Kindle.
Musíš mít povolený příjem obsahu do svého Kindle z naší e-mailové adresy kindle@programujte.com.

E-mailová adresa (např. novak@kindle.com):

TIP: Pokud chceš dostávat naše články každé ráno do svého Kindle, koukni do sekce Články do Kindle.

Hlasování bylo ukončeno    
0 hlasů
Google
Autor je studentom FEI STU v Bratislave, odbor Aplikovana Informatika a vo svojom volnom case sa zaobera hlavne programovanim a rad sportuje.
Web    

Nové články

Obrázek ke článku Nový IT hráč na českém trhu

Nový IT hráč na českém trhu

V roce 2015 otevřela v Praze na Pankráci v budově City Tower své kanceláře společnost EPAM Systems (NYSE:EPAM), jejíž centrála se nachází v USA. Společnost byla založená v roce 1993 a od té doby prošla velkým vývojem a stále roste.

Reklama
Reklama
Obrázek ke článku České Radiokomunikace opět hledají nejlepší nápady pro internet věcí

České Radiokomunikace opět hledají nejlepší nápady pro internet věcí

České Radiokomunikace (CRA) pořádají druhý ročník CRA IoT Hackathonů. Zájemci z řad vývojářů a fanoušků moderních technologií mohou změřit své síly a během jediného dne sestrojit co nejzajímavější funkční prototyp zařízení, které bude komunikovat prostřednictvím sítě LoRa. CRA IoT Hackathony se letos uskuteční ve dvou fázích, na jaře a na podzim, v různých městech České republiky. Jarní běh se odstartuje 31. března v Brně a 7. dubna v Praze.

Obrázek ke článku Cloud computing je využíván stále intenzivněji

Cloud computing je využíván stále intenzivněji

Využívání cloud computingu nabývá na intenzitě. Jen v letošním roce vzroste podle analytiků trh se službami veřejného cloudu o 18 %, přičemž o téměř 37 % vzrostou služby typu IaaS. Růst o více než pětinu pak čeká služby poskytování softwaru formou služby, tedy SaaS. Aktuálním trendům v oblasti využívání cloudu se bude věnovat konference Cloud computing v praxi, která se koná 23. března. 2017 v pražském Kongresovém centru Vavruška na Karlově náměstí 5.

loadingtransparent (function() { var po = document.createElement('script'); po.type = 'text/javascript'; po.async = true; po.src = 'https://apis.google.com/js/plusone.js'; var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(po, s); })();
Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032017 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý