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

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

 

Java (II) - 3. lekcia

Google       Google       19. 6. 2006       35 032×

Obsah tretej lekcie:

  • Definovanie tried
  • Premenné v definícii triedy
  • Metódy v definícii triedy
  • Prístup k členom triedy
  • Úloha č. 3

Reklama
Reklama

Definovanie tried

Triedu definujeme (čiže určíme jej obsah a význam) pred vytváraním objektu. Je to vlastne vzor, podľa ktorého budeme vytvárať objekty. Telo triedy je umiestnené medzi dvomi zloženými zátvorkami:


public class Bicykel {

}

Do definície triedy dávame:

  • Premenné (angl. variables a v Jave sa označujú aj ako fields) – pomenované kúsky pamäte, ktoré slúžia na uloženie nejakej informácie alebo dátovej položky.
  • Metódy (angl. methods) – funkcie definované v triede, ktoré vykonávajú operácie pre triedu. Metódy väčšinou pracujú s premennými.

public class Bicykel {
    // premenna
    private int rychlost;

    // metoda
    public int zistiRychlost() {
        return rychlost;
    }

    // metoda
    public void nastavRychlost(int novaRychlost) {
        rychlost = novaRychlost;
    }
}

Premenné v definícii triedy

Objekt vytvorený z triedy (objekt môžeme nazvať aj ako inštanciu triedy) obsahuje všetky premenné, ktoré sú súčasťou definície danej triedy. Tieto premenné sa rozdeľujú na dva druhy:

  • Inštančné premenné (angl. instance variables) – každý objekt vytvorený z danej triedy bude mať svoju vlastnú kópiu každej inštančnej premennej, ktoré boli uvedené v definícii vzorovej triedy. Objekt je jedným výskytom (inštanciou) triedy a hodnoty premenných, ktoré sú v ňom uložené sa odlišujú od ostatných hodnôt premenných objektov vytvorených z tej istej triedy. Inštančná premenná je v triede deklarovaná normálnym spôsobom:

    
    private int rychlost;
    
  • Statické premenné (angl. static variables) – všetky objekty vytvorené zo vzorovej triedy budú túto premennú a jej hodnotu spoločne zdielať. Na rozdiel od inštančných premenných, kde zmena hodnoty pre jeden objekt nemá vplyv na hodnoty iných objektov, je hodnota statickej premennej dostupná v nezmenenej podobe vo všetkých objektoch vzorovej triedy. Takáto premenná musí byť v triede deklarovaná s kľúčovým slovom static:

    
    private static int maximalnaRychlost;
    

Keď v triede definujeme nejaké premenné, tak im nemusíme priradiť žiadnu hodnotu (viď príklad hore, vtedy sa im priradí implicitná hodnota) alebo ich inicializujeme sami na nejakú hodnotu:


private static int maximalnaRychlost = 130;

Metódy v definícii triedy

Metódy definované v triede predstavujú vlastnosti, správanie alebo akcie, ktoré môžu byť vykonávané s premennými budúceho objektu. Tak isto ako u premenných, aj metódy sú rozdelené na inštančné


public int zistiRychlost() {
    return rychlost;
}

a statické


public static int zistiMaximalnuRychlost() {
    return maximalnaRychlost;
}
s tým istým významom. Každá metóda musí mať určený typ návratovej hodnoty a poprípade zoznam parametrov, ktore prijíma na spracovanie.


Prístup k členom triedy

K členom triedy, čiže k premenným alebo metódam, sa pristupuje po vytvorení objektu pomocou operátoru „.“ (bodka). Po vytvorení objektu napr. z triedy Bicykel


Bicykel mojBicykel = new Bicykel();

môžeme pristúpiť k jeho celočíselnej premennej rýchlosť a zmeniť jej hodnotu.


mojBicykel.rychlost = 5;

V zásade by sa nemalo pristupovať priamo k premenným objektu, tak ako je to vidno na vyššie uvedenom zdrojáku, lebo sa tým narúša integrita zapúzdrenia dát. Preto sa tento problém rieši pomocou geterov (od angl. get – získa hodnotu premennej) a seterov (od angl. set – nastaví hodnotu premennej):


// metoda pre ziskanie hodnoty premennej (geter)
public int zistiRychlost() {
    return rychlost;
}

// metoda pre nastavenie hodnoty premennej (seter)
public void nastavRychlost(int novaRychlost) {
    rychlost = novaRychlost;
}

...

mojBicykel.nastavRychlost(5);

System.out.println(mojBicykel.zistiRychlost());

To, ako sú členy triedy alebo jej objektu prístupné napr. iným triedam, určujú prístupové kľúčové slová.

Kľúčové slovo určujúce prístup Povolený prístup
žiadne z metód hociktorej triedy toho istého balíku*
public z metód v hociktorej triede, hocikde
private iba z metódy vo vnútri danej triedy (zvonku žiadny prístup)
protected z metód v hociktorej triede toho istého balíku* a z hociktorej podtriedy

* – Tomu, čo sú to balíky a načo slúžia, sa budem venovať neskôr.

Príklad

Trieda Zakaznik


// trieda Zakaznik a jej definicia
public class Zakaznik {
	// PREMENNE:
	
	/*
	 * instancna premenna pre ulozenie hodnoty
	 * hotovosti zakaznika (klucove slovo 
	 * pristupu - protected)
	 */
	protected int hotovost;
	
	// METODY:
	
	/*
	 * - zisti hodnotu premennej "hotovost";
	 * - navratova hodnota je typu int, lebo vracia
	 *   celocislenu hodnotu premennej "hotovost"
	 */
	public int zistiHotovost() {
		return hotovost;
	}
	
	/*
	 * - nastavi hodnotu premennej "hotovost";
	 * - navratova hodnota je typu void (prazdna), lebo
	 *   metoda nevracia ziadnu hodnotu;
	 * - tato metoda prijima ako parameter premennu 
	 *   "novaHotovost", ktorou sa nastavi premenna 
	 *   "hotovost" na jej hodnotu 
	 */
	public void nastavHotovost(int novaHotovost) {
		hotovost = novaHotovost;
	}
}

Trieda Banka


// trieda Banka a jej definicia
public class Banka {	
	// PREMENNE:
	
	/*
	 * staticka premenna urcujuca maximalnu
	 * vysku vkladu (klucove slovo pristupu
	 * - public); tato premenna je inicializovana
	 * na urcitu hodnotu (v nasom pripade 70000)
	 */
	public static int maxVyskaVkladu = 70000;
	
	/*
	 * instancna premenna pre ulozenie hodnoty
	 * vysky vkladu zakaznika (klucove slovo 
	 * pristupu - private)
	 */
	private int vkladZakaznika;
	
	// METODY:
	
	/*
	 * - zisti hodnotu premennej "vkladZakaznika";
	 * - navratova hodnota je typu int, lebo vracia
	 *   celocislenu hodnotu premennej "vkladZakaznika"
	 */
	public int zistiVkladZakaznika() {
		return vkladZakaznika;
	}
	
	/*
	 * - nastavi hodnotu premennej "vkladZakaznika";
	 * - navratova hodnota je typu void (prazdna), lebo
	 *   metoda nevracia ziadnu hodnotu;
	 * - tato metoda prijima ako parameter premennu 
	 *   "novyVkladZakaznika", ktorou sa nastavi premenna 
	 *   "vkladZakaznika" na jej hodnotu 
	 */
	public void nastavVkladZakaznika(int novyVkladZakaznika) {
		vkladZakaznika = novyVkladZakaznika;
	}
}

Trieda Test


// trieda Test a jej definicia
public class Test {	
	// PREMENNE:
	
	// METODY:

	/*
	 * hlavna staticka metoda obsahujuca zdrojovy kod, podla 
	 * ktoreho sa bude program vykonavat
	 */
	public static void main(String[] args) {
		/*
		 * novy objekt "mojaBanka" vytvoreny na zaklade
		 * vzoru triedy "Banka"
		 */ 
		Banka mojaBanka = new Banka();
		
		/*
		 * novy objekt "mojZakaznik" vytvoreny na zaklade
		 * vzoru triedy "Zakaznik"
		 */ 
		Zakaznik mojZakaznik = new Zakaznik();
		
		// nastavime vysku hotovosti mojhoZakaznika
		mojZakaznik.nastavHotovost(50000);
		
		/*
		 * novy objekt "mojDruhyZakaznik" vytvoreny na zaklade
		 * vzoru triedy "Zakaznik"
		 */ 
		Zakaznik mojDruhyZakaznik = new Zakaznik();
		
		// nastavime vysku hotovosti druheho zakaznika
		mojDruhyZakaznik.nastavHotovost(20000);
		
		// vypis hodnot hotovosti zakaznikov; vsimnite si, ze hodnoty
		// instantnych premennych su odlisne
		System.out.println("1. Hotovost prveho zakaznika v jeho penazenke: "
                		   + mojZakaznik.zistiHotovost());
		System.out.println("2. Hotovost druheho zakaznika v jeho penazenke: "
                		   + mojDruhyZakaznik.zistiHotovost());
		
		// nastavenie vkladu zakaznika do banky pomocou toho, ze
		// ako parameter metody "nastavVkladZakaznika" (objekt mojaBanka) 
		// sa prijima hodnota cez metodu zistiHotovost (objekt mojZakaznik)
		mojaBanka.nastavVkladZakaznika(mojZakaznik.zistiHotovost());
		
		// vypis vysky vkladu zakaznika v banke
		System.out.println("3. Vklad prveho zakaznika v banke: "
				           + mojaBanka.zistiVkladZakaznika());
		
		// vypis maximalnej moznej vysky vkladu v banke
		System.out.println("4. Maximalna mozna vyska vkladu v prvej banke: "
		                   + mojaBanka.maxVyskaVkladu);
		
		/*
		 * novy objekt "mojaDruhaBanka" vytvoreny na zaklade
		 * vzoru triedy "Banka"
		 */
		Banka mojaDruhaBanka = new Banka();
		
		// vypis maximalnej moznej vysky vkladu v druhej banke
		System.out.println("5. Maximalna mozna vyska vkladu v druhej banke: "
		                   + mojaDruhaBanka.maxVyskaVkladu);
		
		// urcenie novej hodnoty pre staticku premennu a jej vypis; vsimnite si, 
		// ze jej hodnota sa zmeni aj v druhej banke
		mojaBanka.maxVyskaVkladu = 75000;
		System.out.println("6. Maximalna mozna vyska vkladu v prvej banke: "
                		   + mojaBanka.maxVyskaVkladu);
		System.out.println("7. Maximalna mozna vyska vkladu v druhej banke: "
						   + mojaDruhaBanka.maxVyskaVkladu);
    }
}

Úloha č. 3

Spusťte uvedený príklad a zmeňte ho tak, aby testoval, či výška vkladu zákazníka vyhovuje maximálnej možnej výške vkladu do banky, a spravte pre statickú premennú metódy na získanie a nastavenie jej hodnoty.

×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 Seznamte se s open source platformou NopCommerce – 1. díl

Seznamte se s open source platformou NopCommerce – 1. díl

Hledáte e-commerce řešení, které si dokážete přizpůsobit podle vašich požadavků? Chcete čistý a srozumitelný kód, se kterým bude radost pracovat? Prozkoumejte s námi možnosti open source projektu NopCommerce. Seriál programování pod NopCommerce Vám pomůže překonat první kroky nejistoty a úspěšně zvládnout vývoj pod platformou NopCommerce.

Reklama
Reklama
Obrázek ke článku Facebook spouští službu Marketplace V ČR

Facebook spouští službu Marketplace V ČR

Společná platforma Marketplace usnadní lidem na Facebooku vyhledávání, nákup a prodej použitého zboží na lokální úrovni. Bude tak přímou konkurencí pro weby a aplikace se stejným zaměřením jako je například Letgo, Bazoš, Aukro, Sbazar a další.

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032017 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý