8 Třídy, objekty, metody, předávání argumentů metod

Podobné dokumenty
Obsah přednášky 7. Základy programování (IZAPR) Přednáška 7. Parametry metod. Parametry, argumenty. Parametry metod.

7 Formátovaný výstup, třídy, objekty, pole, chyby v programech

Obsah přednášky. Postup při vytváření objektů. Postup při vytváření objektů. Alokace paměti. Inicializace hodnot atributů

5 Přehled operátorů, příkazy, přetypování

Michal Krátký. Úvod do programovacích jazyků (Java), 2006/2007

Počítačové laboratoře bez tajemství aneb naučme se učit algoritmizaci a programování s využitím robotů CZ.1.07/1.3.12/

Seminář Java II p.1/43

10 Balíčky, grafické znázornění tříd, základy zapozdření

6 Příkazy řízení toku

7. Datové typy v Javě

Michal Krátký. Úvod do programovacích jazyků (Java), 2006/2007

11 Diagram tříd, asociace, dědičnost, abstraktní třídy

Programování v Javě I. Leden 2008

Tento studijní blok má za cíl pokračovat v základních prvcích jazyka Java. Konkrétně bude věnována pozornost rozhraním a výjimkám.

Úvod do programovacích jazyků (Java)

Programování v Javě I. Únor 2009

Teoretické minimum z PJV

Úvod do programovacích jazyků (Java)

Obsah přednášky. Příkaz for neúplný. Příkaz for příklady. Cyklus for each (enhanced for loop) Příkaz for příklady

7. přednáška - třídy, objekty třídy objekty atributy tříd metody tříd

Úvod do programování - Java. Cvičení č.4

Výčtový typ strana 67

Datové typy v Javě. Tomáš Pitner, upravil Marek Šabo

Martin Flusser. Faculty of Nuclear Sciences and Physical Engineering Czech Technical University in Prague. October 17, 2016

Obsah přednášky 9. Skrývání informací. Skrývání informací. Zapouzdření. Skrývání informací. Základy programování (IZAPR, IZKPR) Přednáška 9

Programování v C++ 1, 1. cvičení

Michal Krátký. Úvod do programovacích jazyků (Java), 2006/2007

Michal Krátký. Úvod do programovacích jazyků (Java), 2006/2007

Algoritmizace a programování

konstruktory a destruktory (o)

1. Programování proti rozhraní

"Václav Klaus". public class Clovek { protected String jmeno; protected int roknarozeni; public Clovek(String j, int rn) {

IB111 Programování a algoritmizace. Objektově orientované programování (OOP)

Úvod Třídy Rozhraní Pole Konec. Programování v C# Hodnotové datové typy, řídící struktury. Petr Vaněček 1 / 39

IAJCE Přednáška č. 6. logický celek, řešící dílčí část problému Příklad velmi špatného zápisu programu na výpočet obsahu obdélníku

Ukazatel (Pointer) jako datový typ - proměnné jsou umístěny v paměti na určitém místě (adrese) a zabírají určitý prostor (počet bytů), který je daný

Michal Krátký. Úvod do programovacích jazyků (Java), 2006/2007

typová konverze typová inference

1. Téma 03 - Rozhodování

Struktura programu v době běhu

Objektově orientované programování

ADT/ADS = abstraktní datové typy / struktury

4. ZÁKLADNÍ POJMY Z OBJEKTOVĚ ORIENTOVANÉHO PROGRAMOVÁNÍ

IAJCE Přednáška č. 8. double tprumer = (t1 + t2 + t3 + t4 + t5 + t6 + t7) / 7; Console.Write("\nPrumerna teplota je {0}", tprumer);

IRAE 07/08 Přednáška č. 1

Základy programování (IZP)

Vyučovací hodina. 1vyučovací hodina: 2vyučovací hodiny: Opakování z minulé hodiny. Procvičení nové látky

Lekce 6 IMPLEMENTACE OPERAČNÍHO SYSTÉMU LINUX DO VÝUKY INFORMAČNÍCH TECHNOLOGIÍ JAZYK C

KTE / ZPE Informační technologie

Soubor jako posloupnost bytů

Datové typy strana 29

Paměť počítače. alg2 1

Pokročilé programování v jazyce C pro chemiky (C3220) Třídy v C++

Programové konvence, dokumentace a ladění. Programování II 2. přednáška Alena Buchalcevová

PŘETĚŽOVÁNÍ OPERÁTORŮ

Michal Krátký. Úvod do programovacích jazyků (Java), 2006/2007

2) Napište algoritmus pro vložení položky na konec dvousměrného seznamu. 3) Napište algoritmus pro vyhledání položky v binárním stromu.

Maturitní otázky z předmětu PROGRAMOVÁNÍ

Více o konstruktorech a destruktorech

Základní datové typy, proměnné - deklarujeme předem - C je case sensitive rozlišuje malá a velká písmena v názvech proměnných a funkcí

PROGRAMOVÁNÍ V C++ CVIČENÍ

Programování v C++ 1, 5. cvičení

Základy objektové orientace I. Únor 2010

Úvod do programovacích jazyků (Java)

15. Projekt Kalkulačka

Základy jazyka C# Obsah přednášky. Architektura.NET Historie Vlastnosti jazyka C# Datové typy Příkazy Prostory jmen Třídy, rozhraní

NPRG031 Programování II --- 2/2 Z, Zk

Algoritmizace a programování

DSL manuál. Ing. Jan Hranáč. 27. října V této kapitole je stručný průvodce k tvorbě v systému DrdSim a (v

Pascal. Katedra aplikované kybernetiky. Ing. Miroslav Vavroušek. Verze 7

Algoritmizace a programování

PB161 Programování v jazyce C++ Přednáška 4

C++ přetěžování funkcí a operátorů. Jan Hnilica Počítačové modelování 19

Úvod do jazyka C. Ing. Jan Fikejz (KST, FEI) Fakulta elektrotechniky a informatiky Katedra softwarových technologií

TÉMATICKÝ OKRUH Softwarové inženýrství

Správa paměti. Karel Richta a kol. Katedra počítačů Fakulta elektrotechnická České vysoké učení technické v Praze Karel Richta, 2016

Algoritmizace a programování. Terminálový vstup a výstup

Úvod do programování v jazyce Java

Příklad : String txt1 = new String( Ahoj vsichni! ); //vytvoří instanci třídy String a přiřadí ji vnitřní hodnotu Ahoj vsichni!

Statické proměnné a metody. Tomáš Pitner, upravil Marek Šabo

3. Třídy. Základní pojmy objektového programování. Třídy

PREPROCESOR POKRAČOVÁNÍ

PROMĚNNÉ, KONSTANTY A DATOVÉ TYPY TEORIE DATUM VYTVOŘENÍ: KLÍČOVÁ AKTIVITA: 02 PROGRAMOVÁNÍ 2. ROČNÍK (PRG2) HODINOVÁ DOTACE: 1

Programování v jazyce C a C++

Programování v C++ 2, 4. cvičení

Generické programování

Mnohotvarost (polymorfizmus)

int ii char [16] double dd název adresa / proměnná N = nevyužito xxx xxx xxx N xxx xxx N xxx N

Funkce pokročilé možnosti. Úvod do programování 2 Tomáš Kühr

V dalších letech se pak začaly objevovat první normy pro jazyk C++ (ISO/IEC 14882:1998; ISO/IEC 9899:1999; ISO/IEC 14882:2003; ISO/IEC 14882:2011).

Definice třídy. úplná definice. public veřejná třída abstract nesmí být vytvářeny instance final nelze vytvářet potomky

Jazyk C++, některá rozšíření oproti C

Algoritmizace, základy programování, VY_32_INOVACE_PRG_ALGO_01

IAJCE Přednáška č. 7. řízení semaforu na křižovatce = přepínání červená/oranžová/zelená

6. blok část B Vnořené dotazy

Zápis programu v jazyce C#

Z. Kotala, P. Toman: Java ( Obsah )

Jazyk C# a platforma.net

Vytváření a použití knihoven tříd

Michal Krátký. Úvod do programovacích jazyků (Java), 2006/2007

Transkript:

8 Třídy, objekty, metody, předávání argumentů metod Studijní cíl Tento studijní blok má za cíl pokračovat v základních prvcích jazyka Java. Konkrétně bude věnována pozornost třídám a objektům, instančním metodám a předávání argumentů metod. Doba nutná k nastudování 2 2,5 hodiny 8.1 Třídy, objekty V minulém bloku jsme si uvedli základní informace o třídách a objektech, v této kapitole si dosavadní znalosti rozšíříme o detailnější informace. Třída popisuje data (stavy), kterými disponuje objekt vytvořený na základě třídy a třída také popisuje chování objektů, které má každý objekt vytvořený na základě třídy. Každý objekt má unikátní hodnoty instančních proměnných, které vytváří jeho stav a každý objekt má v metodách popsánu logiku, pomocí níž dochází k vykonání činností. Při vytváření tříd je nutné mít na paměti, že by každá třída měla nést odpovědnost za řešení určitých vymezených kompetencí. I jednoduchý program používá objekty založené na mnoha jiných třídách vytvořených buď programátorem samotným, nebo z jiných zdrojů (např. Java API). Co se týká metod, tak každá metoda má mít odpovědnost za řešení jedné konkrétní (atomické) činnosti např. u matice se jedná o metody nactipocetradku(), nactipocetsloupcu(), nactiprvky(), vypisprvky() atd. Metody představují místa, kde je uchována logika programu metody obsahují algoritmy a dochází v nich ke zpracování dat. Instanční metody jsou volány na objektech viz příklad: studentnovak.nastavznamku(1) V jazyce Java platí pro vytváření tříd následující pravidla: ve zdrojovém souboru může být jen jedna třída s modifikátorem public KST/IZAPR - Základy programování blok 8, strana 1 (7) Michael Bažant

název třídy se musí shodovat s názvem souboru pokud je třída umístěna v balíčku, příkaz package musí být prvním řádkem v souboru s třídou pokud se používají jiné třídy, tak příkaz import musí být mezi příkazem package a definicí třídy (pokud se nepoužívají balíčky, tak příkaz import musí být prvním příkazem) soubor s třídou může obsahovat i více tříd, ale pouze jednu public Vztah mezi třídou a objekty můžeme znázornit i pomocí následujícího obrázku, kde jsou zobrazeny dva objekty (kruznice1 a kruznice2) vytvořené na základě jedné třídy (Kruznice). Obrázek 1: Vztah mezi objekty a třídou 8.2 Postup při vytváření objektů Nyní se blíže podíváme na kroky, které se vykonávají při vytváření objektů. Následující příkaz: new Student(); vykoná následující činnosti: alokaci paměti pro objekt, inicializaci hodnot atributů objektu pokud neuvedeme žádné standardní hodnoty u instančních proměnných, použijí se následující hodnoty dle datového typu proměnné: o referenční proměnné null KST/IZAPR - Základy programování blok 8, strana 2 (7) Michael Bažant

o byte, short, int, long 0 o float, double 0.0 o o boolean false char '\u0000' spuštění konstruktoru, návrat reference na objekt pomocí operátoru new. Příklad definice atributů v třídě si můžeme demonstrovat na následujícím příkladu třídy Obdelnik: public class Obdelnik { int delka; int sirka; boolean jezobrazen; String oznaceni; } 8.3 Metody V této kapitole se blíže podíváme na metody. Již jsme si uvedli, že metody představují místa, kde je uchována logika programu. Metody obsahují algoritmy a dochází v nich ke zpracování dat. Instanční metody jsou volány na objektech viz následující příklad: studentnovak.nastavznamku(1) Podle konvence by názvy metody měla být slovesa (název metody vždy začíná malým písmenem). Název metody je obvykle v rámci příslušné třídy jedinečný, metoda však může mát stejný název jako jiné metody díky přetěžování metod viz kapitola přetěžování metod. Základní syntaxe metody v jazyce Java má následující tvar: Obrázek 2: Základní syntaxe metody v jazyce Java KST/IZAPR - Základy programování blok 8, strana 3 (7) Michael Bažant

Z obrázku je zřejmé, že hlavička metody (její první řádek) se skládá z několika základních částí, na které se podíváme v dalších kapitolách podrobněji: modifikátor návratový typ formální parametry 8.3.1 Návratové hodnoty metod Metody mohou vracet a často také vrací hodnoty. Na obrázku (viz Obrázek 2) je tato část zapsána pomocí označení <navratovy_typ>. Pokud metody nevrací hodnotu, tak použijeme klíčové slovo void. Pokud metoda vrací hodnotu, tak musí být uvedeno klíčové slovo return a datový typ hodnoty (datový typ musí být kompatibilní s hodnotou), která je vracena. Lze vracet hodnoty jak primitivního datového typu, tak hodnoty referenčního datového typu (např. referenci na pole). Po provedení příkazu, který obsahuje slovo return metoda ihned skončí a je pokračováno dalším zpracováním programu. Příklady: 8.3.2 Parametry metod Deklarace metody obsahuje deklaraci určitého počtu a typu parametrů, které vstupují do metody. Tato vlastnost metod umožňuje psát obecné metody bez nutnosti definice konkrétních hodnot uvnitř metod viz následující příklad pro výpočet součinu dvou zadaných parametrů metody a, b: public double vypocitejsoucin(double a, double b) { return a * b; } Parametr metody vždy musí mít vždy definován datový typ a parametr se stává lokální proměnnou metody. KST/IZAPR - Základy programování blok 8, strana 4 (7) Michael Bažant

8.3.3 Volání metod Při volání metod neexistuje žádný limit týkající se počtu volaných metod. Volající a volaná metoda mohou být ve stejné třídě i ve třídách různých (způsob volání se odlišuje): volání metod v rámci jedné třídy bez uvádění referenční proměnné, volání metod z jiné třídy - musí být uvedena referenční proměnná. Na pořadí definice metod ve třídě nezáleží (vzhledem k pořadí jejich volání). Při volání metod musí vždy odpovídat počet a typ skutečných parametrů (někdy se také skutečné parametry označují pojmem argumenty) parametrům formálním. Pokud tato podmínka není splněna, kompilace nebude úspěšná. Pro předchozí příklad tedy volání metody vypocitejsoucin() bude vypadat následovně: vypocitejsoucin(2.5, 1.5); Pokud by byl uveden jiný počet nebo typ parametrů, kompilace neproběhne úspěšně. 8.3.4 Předávání argumentů metod V některých programovacích jazycích lze realizovat dva typy předávání argumentů (např. Pascal), přičemž při předávání hodnotou dochází ke kopírování hodnoty argumentu do parametru. Dalším mlžným přístupem při předávání argumentů je předávání odkazem, kdy dochází k propojení formálního parametru a skutečného argumentu. V jazyce Java se argumenty vždy předávají hodnotou (pass by value). Při předávání argumentů primitivního datového typu dochází ke kopírování bitů reprezentujících hodnotu do metody viz následující příklad. Dojde k vytvoření bitové kopie vkládané hodnoty (v našem případě pro hodnotu 10), tato kopie je použita v metodě a po ukončení metody se použije lokální proměnná metody main() s označením a. KST/IZAPR - Základy programování blok 8, strana 5 (7) Michael Bažant

Obrázek 3: Předávání argumentů primitivního datového typu Při předávání referenčních proměnných opět dochází k vytvoření bitové kopie referenční proměnné, což má za následek existenci dvou referenčních proměnných, které odkazují na jeden objekt (jedna proměnná ve volající metodě, jedna proměnná ve volané metodě) viz Obrázek 4. Obrázek 4: předávání argumentů referenčního datového typu KST/IZAPR - Základy programování blok 8, strana 6 (7) Michael Bažant

Příklad: Obrázek 5: Příklad na předávání argumentů referenčního typu 8.3.5 Metoda main Speciálním typem metod je metoda main(), kterou používáme pro spouštění programu. Programování pouze v metodě main() nelze považovat za správný způsob programování, standardně jsou všechny programy rozděleny do jednotlivých metod, přičemž každá metoda vykonává jednu elementární činnost. Otázky na procvičení 1. Kolik public tříd může být v jednom souboru.java? 2. Čím jsou specifické jednotlivé objekty vytvořené na základě jedné a té stejné třídy? 3. Jaký je rozdíl mezi třídou a objektem? 4. Jaký je postup při vytváření objektu v jazyce Java? 5. Z jakých částí se skládá definice metody v jazce Java? Odkazy a další studijní prameny 1. Java Tutorial - http://docs.oracle.com/javase/tutorial/ KST/IZAPR - Základy programování blok 8, strana 7 (7) Michael Bažant