Programovací jazyk Java

Slides:



Advertisements
Podobné prezentace
A1PRG - Programování – Seminář Ing. Michal Typová konverze, oblast platnosti, paměťové třídy 9 Verze
Advertisements

Pro začátek něco lehčího
Dynamické dokumenty na straně klienta Informatika pro ekonomy II.
HYPERTEXT PREPROCESSOR. JAZYK PHP. Jazyk PHP (Hypertext PreProcessor) je intepretovaný jazyk určený pro web. Je celkem jednoduchý, snadno přenositelný.
Přednáška č. 5 Proces návrhu databáze
ÚVOD DO CPP 7 Dědičnost - pokračování
C# pro začátečníky Mgr. Jaromír Osčádal
Databázové systémy II Přednáška č. 6 RNDr. David Žák, Ph.D. Fakulta elektrotechniky a informatiky
Programování v C++ Cvičení.
Algoritmizace a programování
Druhé cvičení Vytváření identifikátorů Datové typy
Algoritmizace Cíl předmětu - naučit se sestavovat algorimy řešení základních problémů a zapisovat je v jazyku Java. Jádrem předmětu jsou data, typy, výrazy.
J a v a Začínáme programovat Lucie Žoltá. Odkazy - oficiální stránky (překladače, help, metody, vývojové prostředí NetBeans,...)
PHP PHP – základy syntaxe (část 1) - 03 Mgr. Josef Nožička IKT PHP
Vlastnosti a použití jazyka Java
13AMP 8. přednáška Ing. Martin Molhanec, CSc.. Co jsme se naučili naposled RT jazyky RT jazyky Modula Modula Modula II Modula II.
Vyučovací hodina 1 vyučovací hodina: Opakování z minulé hodiny 5 min Nová látka 20 min Procvičení nové látky 15 min Shrnutí 5 min 2 vyučovací hodiny: Opakování.
13AMP 6. přednáška Ing. Martin Molhanec, CSc.. Co jsme se naučili naposled Synchronizace procesů Synchronizace procesů Producent-Konzument Producent-Konzument.
A1PRG - Programování – Seminář Ing. Michal Operátory (2. část) 4 Verze
Seminář C cvičení STL, Trolltech Ing. Jan Mikulka.
Orbis pictus 21. století Tato prezentace byla vytvořena v rámci projektu.
PHP – Základy programování
Objektové programování
Operační systémy.
Ant Připravil: Ing. Jan Kolomazník. strana 2 Proč vznikl Potřeba sestavovat komplexní Nezávisle na platformě Popis založený na xml Spouštění různých úloh.
C# - Úvod Centrum pro virtuální a moderní metody a formy vzdělávání na Obchodní akademii T.G. Masaryka, Kostelec nad Orlicí.
Informatika pro ekonomy II přednáška 10
6. cvičení Polymorfismus
Počítače a programování 1
Cvičení.
KIV/PPA1 cvičení 8 Cvičící: Pavel Bžoch. Osnova cvičení Objekty v Javě Třída Konstruktor Metody Metody a proměnné třídy x instance Program sestávající.
OSNOVA: a) Úvod do OOPb) Třídy bez metod c) Třídy s metodamid) Konstruktory a destruktory e) Metody constf) Knihovní třídy g) Třídy ve tříděh) Přetížení.
IB111 Programování a algoritmizace
Návrh a tvorba WWW Přednáška 5 Úvod do jazyka PHP.
Dědičnost - inheritance dědičnost je jednou z forem znovupoužitelnosti dědičnost je jednou z forem znovupoužitelnosti B A Třída A je předkem třídy B Třída.
7. Typ soubor Souborem dat běžně rozumíme uspořádanou množinu dat, uloženou mimo operační paměť počítače (na disku). Pascalský soubor je abstrakcí skutečného.
Algoritmizace a programování Úvod do Delphi - 04 Mgr. Josef Nožička IKT Algoritmizace a programování
Databázové modelování
Metodika objektového přístupu při tvorbě překladačů. Marek Běhálek Informatika a aplikovaná matematika FEI VŠB-TU Ostrava.
Šesté cvičení Výjimky Balíky.
Orbis pictus 21. století Tato prezentace byla vytvořena v rámci projektu.
PHP PHP - úvod - 02 Mgr. Josef Nožička IKT PHP
Databázové systémy Informatika pro ekonomy, př. 18.
ZÁPADOČESKÁ UNIVERZITA V PLZNI FAKULTA ELEKTROTECHNICKÁ KATEDRA TEORETICKÉ ELEKTROTECHKY Oddělení informatiky Java Micro Edition pro mobilní zařízení.
Počítače a programování 1 7.přednáška. Základy Pole ve třídách a metodách Pole Arrays.
Programování POCSI. Programovani/POCSI2 Základní pojmy Akce - děj nad objekty, mající začátek a konec, a mající přesně definovaný účinek. Příkaz - popis.
Soubory BI-PA1 Programování a algoritmizace 1, ZS Katedra teoretické informatiky © Miroslav Balík Fakulta informačních technologií České vysoké.
Jazyk C A0B36PRI - PROGRAMOVÁNÍ Část II.
PHP Programy pro tvorbu WWW stránek - 01
Vícerozměrná pole (1) Jazyk C povoluje, aby pole mělo více rozměrů (dimenzí) než jeden Z vícerozměrných polí bývá nejčastěji použí-váno pole dvourozměrné.
Podprogramy (subroutines) Pojmenované kousky programu, které –tvoří logicky ucelené části –se v programu opakují Jsou zapsány na jednom místě a v případě.
Tento projekt je financován z Operačního programu Vzdělávání pro konkurenceschopnost prostřednictvím Evropského sociálního fondu a státního rozpočtu ČR.
Praha & EU: Investujeme do vaší budoucnosti Evropský sociální fond Gymnázium, Praha 10, Voděradská 2 Projekt OBZORY Datové typy a operátory Základní programové.
Překladače 6. Sémantická analýza
Programování OPERÁTOR SIZEOF, FUNKCE, POLE JAKO PARAMETRY FUNKCÍ ERIK KRÁL.
XML a datový standard Zdeněk Jirkovec Softwarové Aplikace a systémy.
Makra v Excelu syntaxe. Zápis nahraného makra SubEnd Sub O klíčová slova Sub a End Sub – začátek a konec makra O komentáře O text za znakem ', až do konce.
Počítače a programování 2
Moduly.
Vícerozměrná pole (1) Jazyk C povoluje, aby pole mělo více rozměrů (dimenzí) než jeden Z vícerozměrných polí bývá nejčastěji použí-váno pole dvourozměrné.
Výukový materiál zpracován v rámci projektu
Překladače Syntaktická analýza
Připravil: Ing. Jan Kolomazník, Ph.D.
Programovací jazyk C Autorem materiálu a všech jeho částí, není-li uvedeno jinak, je Ing. Jitka Vlčková. Dostupné z Metodického portálu ISSN.
Programování v jazyce C++
Informatika pro ekonomy přednáška 8
Příkazy cyklu (1) Umožňují vícekrát (nebo ani jednou) pro-vést určitý příkaz Jazyk C rozlišuje příkaz cyklu: s podmínkou na začátku: obecný tvar: while.
Oblast platnosti identifikátoru (1)
MU002 – Informační technologie Základy algoritmizace 5/13
C# přehled vlastností.
Transkript prezentace:

Programovací jazyk Java Vlastnosti a použití jazyka Java Implementace vybraných objektových principů přednáška č. 1

Cíle předmětu Naučit se prakticky aplikovat teoretické poznatky z předmětů Algoritmizace a především Základy objektového návrhu prostřednictvím konkrétního objektového programovacího jazyka. Seznámit se s oblíbeným moderním programovacím jazykem, který svou šíří použití pokrývá oblast od chytrých karet přes aplikace pro mobilní zařízení, pro osobní počítače až po robustní, webově orientované informační systémy. V předmětu PJJ je pozornost zaměřena na tvorbu desktopových aplikací. V navazujícím volitelném předmětu Java aplikace se studenti naučí vytvářet webové aplikace běžící na straně serveru a aplikace pro mobilní telefony.

Podmínky ukončení předmětu Co bude hodnoceno: testy, aktivita a samostatná práce ve cvičeních (celkem až 60 bodů), zkouškový test rozdělený na teoretickou a praktickou část (až 40 bodů). Podmínky zkoušky: min. 50 % bodů z každé z obou výše uvedených položek (tzn. 30- 20) Hodnocení zkoušky – podle dosažených bodů: 90–100 bodů – A 80–89 bodů – B 70–79 bodů – C 60–69 bodů – D 50–59 bodů – E 0–49 bodů – F

Vyučující Přednášky Ing. Petr Jedlička, Ph.D. – petr.jedlicka@mendelu.cz Cvičení Ing. Jan Kolomazník jan.kolomaznik@mendelu.cz Ing. Jiří Balej jiri.balej@mendelu.cz

Studijní zdroje Herout, P. Učebnice jazyka Java. 5. vyd. České Budějovice: Kopp, 2010. 381 s. ISBN 978-80-7232-398-2. Obsah knihy ZDE.

Studijní zdroje Herout, P.: Java – grafické uživatelské prostředí a čeština. 3. vyd. České Budějovice: Kopp, 2007. 320 s. ISBN 978-80-7232-328-9. Obsah knihy ZDE.

Studijní zdroje Pecinovský, R.: Myslíme objektově v jazyku Java. 2. vyd. Praha: Grada Publishing, 2004. 576 s. ISBN 80-247-2653-3.

Další studijní zdroje Herout, P.: Java – bohatství knihoven. 3. vyd. České Budějovice: Kopp, 2008. 256 s. 978-80-7232-368-5. Obsah knihy ZDE. Pecinovský, R.: Návrhové vzory. 1. vyd. Brno: Computer Press, 2007. 527 s. ISBN 978-80-251-1582-4. Recenze. Beck, K.: Programování řízené testy. 1. vyd. Praha: Grada, 2004. 204 s. ISBN 80-247-0901-5. Recenze.

Další studijní zdroje DOKUMETACE (Java SE 7 API Specification) Seriál Programování v jazyku Java Seriál Java pro začátečníky Oracle Technology Network for Java Developers The Java Tutorials Z. Kotala, P. Toman: Java Programovací jazyk Java Java Lecture Notes Java Crash Course 1/3 Java Crash Course 2/3 Java Crash Course 3/3

Obsah 1. přednášky Vlastnosti a použití jazyka Java Implementace zásad objektově orientovaného programování v jazyce Java

Co je Java? Java je moderní, univerzální, objektově orientovaný programovací jazyk, vyvinutý firmou Sun Microsystems určený zejména pro vývoj internetových aplikací. Název jazyka odvozen od slangového označení kávy (viz logo). Tvůrce Javy – firma Sun – Javu charakterizuje jako jednoduchý, objektově orientovaný, distribuovaný, interpretovaný, robustní, bezpečný, nezávislý na architektuře, přenositelný, výkonný, víceprocesní a dynamický jazyk.

Java – jazyk jednoduchý Nízký počet jazykových konstrukcí Na základě jazyka C  pro mnoho programátorů snadno osvojitelný Nepoužívá prostředky a metody, které jsou náchylné k chybám, např. ukazatele, příkaz nepodmíněného skoku (goto) a další Automaticky uvolňuje nepotřebné objekty z paměti a slučuje volné části paměti

Java – jazyk objektově orientovaný Známé výhody OO programovacích jazyků, např. rozhraní, generické třídy, anotace, reflexe. Podpora výjimek. S výjimkou osmi primitivních datových typů jsou všechny ostatní datové typy objektové

Bohatství standardních knihoven java.awt (Abstract Windowing Toolkit) – nástroje pro tvorbu oken a GUI java.awt.image – podpora zpracování obrázků java.io – třídy pro IO operace objektů java.lang – „ústřední“ třídy Javy, např. třídy pro objekty datových typů, procesy, programová vlákna, … java.net – balík pro práci v počítačových sítích java.util – balík utilit jako je generátor pseudonáhodných čísel nebo různé kontejnery („chytrá pole “), např. typu LIFO nebo FIFO

Java – jazyk distribuovaný Podpora pro práci v síti (TCP, UDP, ...). Umožňuje vytvářet distribuované klientské aplikace a servery. Práce se vzdálenými soubory. Možnost zavádění vzdálených tříd přes sít’. Podpora multitaskingu.

Java – jazyk interpretovaný V Javě je možné psát tři druhy aplikací: samostatně spustitelné programy, applety pro spuštění ve webovském prohlížeči, kontejnerové aplikace běžící v režii jiné aplikace, typicky serveru (Tomcat, Glassfish, ...) nebo aplikačního kontejneru (EJB, Spring, ...) Ve všech případech se zdrojový text přeloží do přenositelného bajtkódu (bytekód, bytecode), který lze spustit na kterékoliv platformě (OS + HW), na které je nainstalováno prostředí Java Runtime Environment.

Java – jazyk robustní Je určen pro psaní vysoce spolehlivého softwaru. Vylučuje určité typy programátorských chyb: neumožňuje některé programátorské konstrukce, které bývají častou příčinou chyb (např. správa paměti, příkaz goto, používání ukazatelů), používá tzv. silnou typovou kontrolu – veškeré používané proměnné musí mít definovaný svůj datový typ, který pak již nelze změnit. Správa paměti je realizována pomocí automatického Garbage collectoru který automaticky vyhledává již nepoužívané části paměti a uvolňuje je pro další použití. Propracovaný systém ošetření výjimek

Java – jazyk bezpečný Kompilátor nerozhoduje o rozvržení paměti, odkazy do paměti se převedou na reálné adresy až při běhu programu Run-time systém kontroluje dodržování omezení Javy ze strany bytekódu Třídy načtené z bytekódu se ukládají mimo lokální třídy, takže je nemohou přepsat

Java – jazyk přenositelný a nezávislý na architektuře Vlastnost dána používáním přenositelného bajtkódu. Vytvořená aplikace běží na libovolném OS nebo libovolné HW architektuře. Ke spuštění programu je potřeba pouze to, aby byl na dané platformě instalován správný virtuální stroj.

Java – jazyk výkonný Jako interpretovaný jazyk by neměl dosahovat rychlosti kompilovaných jazyků, ale: díky Just-In-Time kompilátorům rychlost oproti minulosti rapidně vzrostla, rychlost lze podpořit hardwarově, dnes jsou důležitější jiné rysy jazyka, než rychlost. JIT kompilace probíhá při spuštění a je možné zvolit mezi delší kompilací s lepší optimalizací kódu (serverové aplikace) nebo kratší kompilací s horší optimalizací kódu (desktopové aplikace).

Java – jazyk víceprocesní a dynamický Poskytuje podporu pro tvorbu programových vláken Umožňuje synchronizaci procesů a vláken Lze zavádět třídy podle potřeby a to i po síti, i dynamicky do běžícího systému

K čemu se Java hodí a k čemu ne? Hodí se pro všechny druhy klientských aplikací, pro serverové aplikace včetně webových aplikací (servlety, JSP, …)  náplní předmětu Java aplikace Nehodí se pro systémové programování, protože zde bývá závislost na operačním systému nebo přímý přístup k hardwaru.

Kompilace a běh programu

Java aplikace a applety samostatné programy, obdoba standardních programů spouští se z příkazové řádky pomocí interpretu java Applety programy stahované přes WWW a spouštěné v prostředí webového prohlížeče

Java Runtime Environment – JRE (Java platforma) Prostředí pro běh programů v Javě, má 2 části: Java Virtual Machine – JVM Abstraktní počítač – virtuální stroj, tvořen runtime systémem (realizuje vazbu na hardware) a interpretem (vykonává bytový kód). Pro urychlení může být interpret volitelně nahrazen JIT (Just-In-Time) kompilátorem, který při běhu programu provádí nejprve překlad do strojového kódu příslušného procesoru. Java Core API Aplikační programové rozhraní. Základní knihovny pro psaní programů. Výhoda: tyto knihovny nemusí být s programem distribuovány, neboť jsou povinnou součástí Java Platformy.

Java Development Kit – JDK Obsahuje JRE + překladač + další vývojové nástroje. Číslování verzí JRE a JDK je shodné. Původně se číslovalo takto: JDK 1.4.16 | | | | | +--- bug fix number (větší číslo  méně chyb) | +----- minor version (mění se, dojde-li ke změnám | či rozšířením v jazyce nebo knihovnách) +------- major version (zatím vždy 1) Takto byly verze Javy číslovány až po 1.4. Verze 1.5 (rok 2004) už se od počátku označovala jako 5.0, následovaly verze 6 (rok 2006) a 7 (rok 2011). Menší změny se provádějí pomocí updatů. Aktuální verze (k 27. 9. 2012) je Java SE 7 Update 7 zveřejněná 30. srpna 2012.

Java platformy Java SE (Standard Edition) je platforma pro psaní klasických programů pro osobní počítače (desktopových aplikací)  náplní tohoto předmětu Java EE (Enterprise Edition) je platforma pro psaní rozsáhlejších (distribuovaných) aplikací. V podstatě se jedná o rozšíření platformy Java SE. Java ME (Micro Edition) je určena speciálně k psaní aplikací pro mobilní zařízení (telefony, PDA apod.). Java Card – pro aplikace provozované v rámci tzv. „chytrých“ karet (např. platební a kreditní karty atp.) JavaFX – nová platforma pro tvorbu RIA (Rich Internet Application), které kombinují širokou dostupnost webu s uživatelským komfortem desktopových aplikací

Přehled použití platforem ME, SE a EE jazyka Java

Java platformy

Tvorba aplikace Překlad se provádí kompilátorem javac, zadává se celý název souboru. Spuštění se provádí příkazem java, zadává se název souboru s bytekódem bez přípony. Příklad: Zdrojový text: Program.java Překlad: javac Program.java Výsledek: Program.class Spuštění: java Program

Způsob zápisu identifikátorů Třídy a rozhraní identifikátor začíná velkým písmenem, ostatní jsou malá. Pokud je utvořen z více slov, je počáteční písmeno každého slova velké. Např. String, StringBuffer. Metody a proměnné pouze malá písmena, pokud z více slov, pak začátek dalšího velkým písmenem, např. pocet, pocetPrvku, getSize() Balíky pouze malá písmena, ve složených názvech slova oddělena tečkou. Např. java.lang, java.awt.image Konstanty pouze velká písmena, pokud z více slov ® podtržítka. Např. PI, MAX_VALUE

Objekt Jednotlivé prvky modelované reality (jak data, tak související funkčnost) jsou v programu seskupeny do entit, nazývaných objekty. Objekty si pamatují svůj stav a navenek poskytují operace (přístupné jako metody pro volání). Co je to stav objektu? Stav objektu = hodnoty atributů. Objekty mezi sebou komunikují pomocí zpráv. Co je to zpráva? Zpráva = identifikátor objektu + identifikátor metody + případné parametry metody. Otázka: Může objekt poslat zprávu sám sobě?

Třída Abstrakce objektu, která v programu podchycuje na obecné úrovni podstatu všech objektů podobného typu. Objekt je instancí třídy. Co to znamená? Objekt je konkrétní realizací obecného vzoru definovaného v příslušné třídě. Všechny instance jedné třídy mají stejnou strukturu (atributy a metody). V čem se tedy liší? Instance téže třídy se mohou lišit ve svých stavech.

Třída v Javě class MojeTrida { tělo třídy } Zdrojový kód třídy zpravidla ukládáme do souboru se stejným názvem (včetně velikosti písmen) a příponou java. Např. MojeTrida.java. Tato shoda je nutná u veřejných tříd (hlavička třídy začíná slovem public), které jsou pak dostupné i mimo svůj balíček. V jednom souboru může být zapsáno i více tříd za sebou (každá je pak zkompilována do samostatného .class souboru). Třídy lze i vnořovat, pro vnitřní třídy však platí určitá omezení. Lze použít i anonymní třídy (beze jména), definované až v místě použití. Třída obsahuje především definice metod a deklarace proměnných.

Základní datové typy celočíselné reálné znakové logické pouze znaménkové byte (1 B), short (2 B), int (4 B), long (8 B) reálné float (4 B), double (8 B) znakové char (2 B) – Java implicitně používá kódování Unicode logické boolean prázdný typ void

Deklarace proměnných Formát: datovýTyp jménoProměnné; Příklad: int i; Po deklaraci by ještě před použitím proměnné mělo dojít k její inicializaci: při deklaraci: int i = 5; nebo později: i = 5; Překladač nepovolí použití neinicializované proměnné jinde než na levé straně přiřazovacího příkazu

Zápis čísel Zapsané celé číslo je automaticky chápáno jako číslo typu int, reálné číslo jako číslo typu double. Chceme-li, aby bylo zapsané celé číslo chápáno jako typ long, zapíšeme za něj „L“: int x = 5; je OK, ale int x = 5L; nelze. Chceme-li, aby bylo zapsané reálné číslo chápáno jako typ float, zapíšeme za něj „F“ (implicitně je double): float x = 5.5; je chyba, float x = 5.5F; je OK. Můžeme používat i čísla v šestnáctkové soustavě, před číslo umístíme „0x“ nebo „0X“ : int j = 0x1c; // číslo 28 v šestnáctkové soustavě. Můžeme používat i čísla v osmičkové soustavě, před číslo umístíme nulu: int j = 034; // číslo 28 v osmičkové soustavě.

Deklarace proměnných se statickou konstantou V podstatě se jedná o konstanty Jako deklarace proměnné, navíc se použije klíčové slovo final Příklad: final int MAX = 10; Konstantě poté již nelze přiřadit žádnou hodnotu (ani stejnou), s výjimkou: final int MAX; ... MAX = 10;

Výraz, přiřazení, příkaz Terminologie: L-hodnota = něco, co má adresu v paměti (písmeno L znamená, že se nachází na levé straně přiřazovacího příkazu). Co JE L-hodnotou: proměnná x. Co NENÍ L-hodnotou : konstanta 526, výraz(x + 9) česky anglicky symbolicky prakticky výraz expression x * 5 + 8 přiřazení assigment L-hodnota = výraz y = x * 5 + 8 příkaz statement L-hodnota = výraz; y = x * 5 + 8;

Operátor přetypování (konverze) Jako operátor použijeme název typu v závorce (tzv. explicitní konverze) Příklad: double d = 5; int i; i = (int) d; V případě rozšiřující konverze možno použít implicitní konverze (d = i;) Rozšiřující konvence pro základní datové typy: byte ® short ® int ® long ® float ® double Přetypování má nejvyšší prioritu

Aritmetické operátory Unární +, – (prefix, tedy např. +5, -j) ++, –- (prefix nebo postfix, tedy např. x++, --i) Nelze však napsat např. 5++, protože zde musí být l-hodnota. Binární +, -, *, /, % (dělení modulo) Přiřazovací L-hodnota = l-hodnota operátor výraz lze zkrátit na L-hodnota operátor= výraz např: x = x / z lze zapsat jako x /= z

Další operátory Relační Logické Bitové <, >, <=, >=, ==, != Logické && – logické A || – logické NEBO ! – negace Bitové ^ – bitová negace (např. 9 ^ 3 = 10, 9 ^ 7 = 14) & – bitové A (např. 9 & 3 = 1, 13 & 11 = 9) |– bitové NEBO (např. 9 | 3 = 11, 9 | 7 = 15)

Priorita operátorů

Zápis třídy Třída je definována v souboru (Xy.java). Jeden soubor může obsahovat lib. počet neveřejných tříd. Jeden soubor může obsahovat max. jednu veřejnou třídu. Jméno souboru odpovídá jménu veřejné třídy. Zápis třídy: [public] class Jmeno {}

Zápis třídy – příklady // Soubor Point.java public class Point { ... } // Soubor Y.java class X {...} class Z {...} public class Y {...}

Organizace tříd do balíků Třídy a rozhraní organizujeme do balíků (packages) V balíku jsou vždy umístěny „související“ třídy. Jméno balíku + jméno třídy = plně kvalifikované jméno třídy a tedy jednoznačná identifikace třídy. Třídy ze stejného balíku jsou navzájem viditelné. Třídy z různých balíků je třeba: adresovat plně kvalifikovaným jménem. NEBO importovat.

Organizace tříd do balíků Balík složen z dílčích jmen, která jsou oddělena tečkami. Fyzická reprezentace balíku je adresářová struktura. Ve cvičeních tomto předmětu budeme pojmenovávat balíčky podle tohoto vzoru: cz.mendelu.pef.pjj.xnovak.cv1

Import třídy Pokud je třeba použít jinou třídu, než z aktuálního balíku nebo balíku java.lang, je možné provést import. Klíč. slovo import: import nazev.baliku.Trida; // import 1 třídy import nazev.baliku.*; // import všech tříd balíku

Struktura souboru zdrojového kódu Sekce balíku – nepovinná: package balik2; Sekce importu – nepovinná: import balik.Trida; import balik.*; Sekce zápisu definice tříd. Příklad: package cz.mendelu.pef.pjj.xnovak.cv2; import cz.mendelu.pef.pjj.xnovak.cv1.*; import java.io.File; class Xyz {...}

Metody Program v Javě obsahuje jednu nebo více definic metod. Metody v OOP zastupují podprogramy typu procedura a funkce. Jaký je rozdíl mezi procedurou a funkcí? V těle jedné metody nesmíme definovat jinou metodu, můžeme ji pouze volat.

Definice metody Zahrnuje hlavičku (typ návratové hodnoty, jméno metody, příp. jména a typy formálních parametrů) a tělo metody. Minimální syntaxe: NávratovýTyp jménoMetody ([p1[, p2[, p3[, …]]]]) { // tělo metody } Tělo může také obsahovat příkaz return (v podobě return;), který okamžitě ukončí běh metody.

Použití metody Příklad: public class Metody1 { int max(int a, int b) { if (a > b) return (a); else return (b); } void vypis() { int a, b, c, d, i = 1, j = 2; a = max(i, j); b = max(i + 3, j); c = max(i, 5); d = max(10 * i, j - 15); } }

Metoda bez parametrů Musí být definována i volána včetně kulatých závorek (v tomto případě prázdných). Např. metoda int secti2CislaZeStdIn() { int a, b; a = Vstup.ctiInt(); b = Vstup.ctiInt(); return (a + b); } je volána j = secti2CislaZeStdIn();

Metoda bez návratového typu (obdoba procedury) má v hlavičce uveden typ void (= prázdný). Např. void tiskniCenuCZK(int koruny) { System.out.println("Cena: " + koruny + " Kc."); } Může být současně bez parametrů (např. pro tisk hlavičky), např. void tiskni () { System.out.println("- - - SEZNAM - - -"); } Voláme pouze tiskniCenuCZK(20); resp. tiskni();

Metoda s více parametry různých typů Parametry se zapisují jednotlivě včetně typů, oddělují se čárkami. Pořadí parametrů může být v hlavičce libovolné, při volání však musí být dodrženo. Správně definované metody double secti(int a, double b) { return a + b; } int secti(int a, int b) { return a + b; } Nesprávně definovaná metoda int secti(int a, b) { return a + b; }

Rekurzivní metody Žádná zvláštní omezení, metoda prostě ve svém těle volá sama sebe (přímá rekurze) nebo se více metod volá cyklicky navzájem (nepřímá rekurze). long fakt(long n) { if (n > 1) return n * fakt(n - 1); else return 1; } }

Parametry metod V případě odlišnosti typu skutečného a formálního parametru lze počítat pouze s implicitní rozšiřující konverzí, zužující konverzi je třeba zadat explicitně. Pokud předáváme jako parametry primitivní datové typy, předávají se výhradně hodnotou. public class Konverze { int konv1(double d) { return (int) d; } double konv2(int d) { return d; } void vypis() { int k = konv1(4); double j = konv2((int)4.5); System.out.println("k = " + k + ", j = " + j); } }

Přetížené metody jsou metody, které mají stejná jména, ale různé hlavičky. Formální parametry se musí lišit počtem, typem nebo pořadím, příp. kombinací předchozích. Metodu nelze přetížit pouhou změnou návratové hodnoty. Kdykoliv je přetížená metoda volána, kompilátor vybere tu z metod, která přesně odpovídá počtu, typům a pořadí skutečných parametrů. Pozor na volání přetížených metod s využitím implicitní rozšiřující konverze. Zde je někdy potřeba při volání explicitně přetypovat skutečné parametry, aby typy přesně odpovídaly typům formálních parametrů.

Přetížení metod – příklad class Pretizeni1 { int ctverec(int i) { return i * i; } double ctverec(double i) { return i * i; } // long ctverec(int i) {...} // chyba long ctverec(long i) { return i * i; } void vypis() { int j = ctverec(5); double d = ctverec(5.5); long l = ctverec(12345L); System.out.println("j = " + j + ", d = " + d + ", l = " + l); } }

Parametry přetížených metod – příklad Máme přetíženou metodu s uvedenými formálními parametry: void id(int a, double b) {...} void id(int a, int b) {...} void id(double a, int b) {...} Která varianta metody id bude spuštěna v případě volání s následujícími skutečnými parametry? id(2,5); id(2,5.3); id(2,5.0); id(2L,5); id(2L,5.0); void id(int a, double b) {...} void id(double a, int b) {...} id(2,5); id(2,(double)5);

Umístění definic metod Pokud voláme metody z téže třídy, mohou být tyto metody implementovány i za místem volání. void vypocet() { int i = 8; int j = naDruhou(i); ... } int naDruhou (int x) { return (i * i); }