Metody (funkce, procedury)

Slides:



Advertisements
Podobné prezentace
Standardní knihovní funkce pro práci s textovými řetězci
Advertisements

Programování v C jazyku - SEMINÁŘ
Vlastní skript může být umístěn: v hlavičce stránky v těle stránky
Funkce Připomeňme si program pro výpočet faktoriálu:
Pascal - příklady.
Vstupy a výstupy v JavaScriptu Vstup: použitím metody prompt objektu window čtením hodnot z položek formuláře Výstup : použitím metody alert objektu window.
Strukturované datové typy
Algoritmizace a programování Podprogramy v Delphi - 10
Alg51 Rozklad problému na podproblémy Postupný návrh programu rozkladem problému na podproblémy –zadaný problém rozložíme na podproblémy –pro řešení podproblémů.
Počítače a programování 1. Obsah přednášky Výjimky - základní typy výjimek Způsoby zpracování výjimek.
Cvičení 2 Proměnné(jednoduché a složené) a konstanty První program Zápis výrazů.
Programování v C++ Cvičení.
Algoritmy I Cvičení č. 3.
Druhé cvičení Vytváření identifikátorů Datové typy
Programování v Pascalu Přednáška 7
Materiály k přednášce Úvod do programování Ondřej Čepek.
Generování mezikódu Jakub Yaghob
Větvení cykly J a v a Začínáme programovat Lucie Žoltá.
J a v a Začínáme programovat Lucie Žoltá pole řetězec debugr.
J a v a Začínáme programovat Lucie Žoltá metody, objekty, konstruktor.
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,...)
Základy Visual Basicu.
Jazyk vývojových diagramů
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í.
Deklarace Radim Štefan. 2 Použité zkratky BP – Borland Pascal De – Delphi.
Informatika I 2. přednáška
A1PRG - Programování – Seminář Ing. Michal Operátory (2. část) 4 Verze
Třída jako zdroj funkcionality
ALGO – Algoritmizace 2. cvičení
C# - funkce a procedury Centrum pro virtuální a moderní metody a formy vzdělávání na Obchodní akademii T.G. Masaryka, Kostelec nad Orlicí.
Jedenácté cvičení Vlákna. Java cv112 Vlákna Operační systém Mutitasking – více úloh se v operačním programu vykonává „současně“ Java Multithreading -
Jazyk vývojových diagramů
Alg91 Textové soubory Na rozdíl od jiných typů souborů jsou textové soubory určené pro gramotné lidské oko. Textový soubor je posloupnost znaků členěná.
Počítače a programování 1
Cvičení.
3. Příkazy  Příkazy dělíme na jednoduché a strukturované.  Jednoduché příkazy - žádnou jejich dílčí částí neni příkaz - přiřazovací, vstupu a výstupu,
5. Procedury a funkce Procedura je samostatně odladěný algoritmus, v programu může být volána vícekrát. Dvojí terminologie - rozlišujeme procedury a funkce.
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í.
Orbis pictus 21. století Tato prezentace byla vytvořena v rámci projektu.
C# - předávání parametrů Centrum pro virtuální a moderní metody a formy vzdělávání na Obchodní akademii T.G. Masaryka, Kostelec nad Orlicí.
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.
Napište program v C pro výpočet plochy obdélníka se stranami A=3 a B=2. Výsledek vytiskněte s patřičným komentářem na obrazovku formátovým příkazem printf.
OSNOVA: a)Funkce – úvod b) Hlavičky funkcí c) Rekurze funkcí d)Knihovny funkcí e)Příklady Jiří Šebesta Ústav radioelektroniky, FEKT VUT v Brně Počítače.
Šesté cvičení Výjimky Balíky.
Rozklad problému na podproblémy, rekurze
POSLOUPNOST úkol 1_41. ZADÁNÍ Sestavte program, který doplní tabulku nepřímé úměrnosti pro hodnoty proměnné x = 1, …, n. Nepřímá úměrnost je zadána uživatelem.
Počítače a programování 1 7.přednáška. Základy Pole ve třídách a metodách Pole Arrays.
PŘÍKAZ while úkol 1_42.
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.
Jazyk C A0B36PRI - PROGRAMOVÁNÍ Část I.
C – procedury Mgr. Lenka Švancarová.
Funkce, intuitivní chápání složitosti
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ě.
Řízení běhu programu, řídící struktury A0B36PRI - PROGRAMOVÁNÍ
Procedurální programování,
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é.
NÁZEV ŠKOLY: Střední odborná škola Net Office, spol. s r.o., Orlová-Lutyně AUTOR: Ing. Adéla Tomalová NÁZEV: Podpora výuky v technických oborech TEMA:
NÁZEV ŠKOLY: S0Š Net Office, spol. s r.o., Orlová-Lutyně AUTOR: Ing. Adéla Tomalová NÁZEV: Podpora výuky v technických oborech TEMA: Objektově orientované.
Programování OPERÁTOR SIZEOF, FUNKCE, POLE JAKO PARAMETRY FUNKCÍ ERIK KRÁL.
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é.
C# konzole – Podíl dvou čísel, podmínka IF
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.
Oblast platnosti identifikátoru (1)
Opakování základních příkazů a syntaxí v programovacím jazyce Pascal
Opakování ze 3. cvičení deklarace proměnných výpis na monitor (výstup)
C# přehled vlastností.
NÁZEV ŠKOLY: S0Š Net Office, spol. s r.o., Orlová-Lutyně
Opakování ze 4. cvičení int a; printf("Zadej číslo: ");
Transkript prezentace:

Metody (funkce, procedury) A0B36PRI - PROGRAMOVÁNÍ Metody (funkce, procedury) Jazyk JAVA České vysoké učení technické Fakulta elektrotechnická V 2.01

Nezajímá nás jak to počítá Metoda Černá (programová) skřínka pro určitý výpočetní úkon Známe - co počítá Nezajímá nás – jak to počítá Má určené místo pro vstup informace se kterou metoda počítá – vstup dat Má určené místo pro výstup zpracované informace – výstup dat Princip umožňuje řešit složité úkoly rozkladem na jednodušši navzájem spolupracující části (metody) Vstup dat Metoda má jméno Metoda Nezajímá nás jak to počítá Známe co metoda počítá Výstup dat A0B36PRI „PROGRAMOVÁNÍ“ 04

Čtení hodnoty z klávesnice Metoda bez vstupů Metoda nemusí mít vstup dat Má pouze výstup dat Např: Čtení hodnoty z klávesnice Výstupem metody – přečtená hodnota Čtení hodnoty z klávesnice Metoda Výstup dat = přečtená hodnota A0B36PRI „PROGRAMOVÁNÍ“ 04

Metoda bez výstupů Metoda nemusí mít výstup dat, pouze vykoná nějakou činnost Má pouze vstup dat Např: zobrazení hodnoty na obrazovce Vstupem metody – jméno a hodnota zobrazovaných dat Vstup dat = Jméno a hodnota toho co se má zobrazit Metoda Zobrazení jména a hodnoty dat na obrazovce A0B36PRI „PROGRAMOVÁNÍ“ 04

Metoda - vstupní a výstupní data Metoda může mít více vstupních dat Metoda může mít i více výstupních dat Funkce – je metoda, která má pouze jednu hodnotu – „výstupní“ Procedura – je metoda, která má definovány vstupní hodnoty a svou činnost nemívá žádná výstupní data Funkce vždy pouze jednu výstupní hodnotu Procedura – „něco“ vykoná Funkce Funkce Procedura Procedura A0B36PRI „PROGRAMOVÁNÍ“ 04

Funkce Funkce – je metoda, která má pouze jednu hodnotu – hodnotu funkce Funkci lze použít ve výrazu Např: y = 2*x + sin(x), y = 2*x + Math.sin(x); sin(x) je funkce Funkce vždy pouze jednu „výstupní“ hodnotu Funkce Funkce Sin(x) A0B36PRI „PROGRAMOVÁNÍ“ 04

Procedura Procedura – je metoda, která má definovány vstupní hodnoty a svou činnost - nemívá žádná výstupní data Procedura ale může změnit Hodnotu nelokální proměnné – nedoporučeno – proč? Hodnoty prvků polí či hodnoty atributů objektů, je-li vstupní hodnotou reference na pole či objekt – viz později!!! Proceduru – nelze použít ve výrazu Procedura – „něco“ vykoná Procedura Procedura A0B36PRI „PROGRAMOVÁNÍ“ 04

Funkce a procedura – vstupní data Pravidla pro zápis vstupních dat jsou pro funkci i pro proceduru stejná Pravidla pro zápis vstupních dat pro funkci i proceduru stejná Funkce Funkce Procedura Procedura A0B36PRI „PROGRAMOVÁNÍ“ 04

Funkce, rozklad na dílčí problémy Připomeňme si program pro výpočet faktoriálu: public class Faktorial { public static void main(String[] args) { Scanner sc = new Scanner(System.in); System.out.println("zadejte přirozené číslo"); int n = sc.nextInt(); if (n < 1) { System.out.println(n + " není přirozené číslo"); System.exit(0); } int i = 1; int f = 1; while (i < n) { i = i + 1; f = f * i; } System.out.println (n + "! = " + f); }// main() END }// class Faktorial END Čtení přirozeného čísla Algoritmus výpočtu faktoriálu Tisk výsledku Čtení přirozeného čísla, výpočet faktoriálu a tisk výsledku jsou tři dílčí podproblémy, jejichž řešení popíšeme samostatnými metodami` A0B36PRI „PROGRAMOVÁNÍ“ 04

Řešení problému rozkladem na dílčí problémy ctiPrirozene Funkce Čtení přirozeného čísla Předává se přečtené n Funkce faktorial Algoritmus výpočtu faktoriálu Předává se vypočtený faktoriál Procedura tiskVysledku Tisk výsledku A0B36PRI „PROGRAMOVÁNÍ“ 04

Faktoriál pomocí funkcí Funkce pro čtení přirozeného čísla static int ctiPrirozene() { Scanner sc = new Scanner(System.in); System.out.println ("Zadejte přirozené číslo"); int n = sc.nextInt(); if ( n < 1) { System.out.println (n + " není přirozené číslo"); System.exit(0); } return n; } Hlavička funkce static int ctiPrirozene() vyjadřuje, že funkce nemá parametry (prázdná závorka) a že výsledkem volání funkce je hodnota typu int Příkaz předepisuje návrat z funkce, výsledkem volání je hodnota n Příklad volání funkce: int nn = ctiPrirozene(); A0B36PRI „PROGRAMOVÁNÍ“ 04

Faktoriál pomocí funkcí Funkce pro výpočet faktoriálu static int faktorial(int n) { int i = 1; int f = 1; while (i < n) { i = i + 1; f = f * i; } return f; Hlavička funkce vyjadřuje, že funkce má jeden vstupní parametr typu int a že výsledkem je hodnota typu int Příklad volání funkce int ff = faktorial(4); A0B36PRI „PROGRAMOVÁNÍ“ 04

Faktoriál pomocí funkcí Procedura pro tisk výsledku výpočtu static void tiskVysledku(int n, String napis, int x) { Systém.out.println(n + napis + s); } Hlavička vyjadřuje, že procedura má tři vstupní parametry (int, String, int). Procedura nevrací žádnou hodnotu (void). Příklad volání procedury tiskVysledku(n, "! = ",f); A0B36PRI „PROGRAMOVÁNÍ“ 04

Faktoriál pomocí funkcí Výsledné řešení: package pri04; import java.util.*; public class Faktorial { public static void main(String[] args) { int n = ctiPrirozene(); int f = faktorial(n); tiskVysledku(n,"! = ",f); } static int ctiPrirozene() { … } static int faktorial(int n) { … } static void tiskVysledku(int n, String napis,int x){ … } A0B36PRI „PROGRAMOVÁNÍ“ 04

Deklarace funkce Deklaraci funkce tvoří hlavička funkce tělo funkce Hlavička funkce v jazyku Java má tvar static typ jméno(specifikace parametrů) kde typ je typ výsledku funkce (funkční hodnoty) jméno je identifikátor funkce specifikací parametrů se deklarují parametry funkce, každá deklarace má tvar typ_parametru jméno_parametru (a oddělují se čárkou) specifikace parametrů je prázdná, jde-li o funkci bez parametrů Tělo funkce je složený příkaz nebo blok, který se provede při volání funkce Tělo funkce musí končit příkazem return x; kde x je výraz, jehož hodnota je výsledkem volání funkce A0B36PRI „PROGRAMOVÁNÍ“ 04

Bloková struktura programu package d6alg; public class TridaA { package d36alg; public class TridaB { Začátek programu static int x1, x2=0, y=54; static char funkceB ( void ) { double d; d = TridaC.funkceD ( ); ……… } public static void main (String[] args) { int x = funkceA ( 35 ); TridaB.funkceC ( x, c1 ); } // main() END Fce v jiném modulu static void funkceC (int r1, char c) { System.out.printf (……..); . . . . . . . . . } static int funkceA (int x) { char s; s = TridaB.funkceB ( ); . . . . . . . . } } // class END } // class END Konec programu A0B36PRI „PROGRAMOVÁNÍ“ 04

Struktura metody (funkce, procedury) Jméno funkce Typ návratové hodnoty Formální parametr(y) funkce Hlavička funkce static double funkceA ( int x ) { } Začátek funkce final double MIN = 1000.0; double v=1.0; int n; Lokální konstanty Lokální proměnné for( n=0; n<10; n++) { v = v * 4.5 + 305.9; } if( v > MIN ) v = v - 255.6; return v ; Kód funkce Návratová hodnota Zdrojový modul (soubor) Konec funkce A0B36PRI „PROGRAMOVÁNÍ“ 04

Vstupní parametry funkce Parametry funkce jsou lokální proměnné funkce, kterým se při volání funkce přiřadí hodnoty skutečných parametrů Jestliže parametr funkce je typu T, pak přípustným skutečným parametrem je výraz, jehož hodnotu lze přiřadit proměnné typu T (stejná podmínka, jako u přiřazení) Příklad: public class Max1 { static int max(int x, int y) { if (x>y) return x; else return y; } public static void main(String[] args) { int a = 10, b = 20; System.out.println(max(a+20, b));// O.K. System.out.println(max(1.1, b)); // Chyba při překladu } A0B36PRI „PROGRAMOVÁNÍ“ 04

Vstupní parametry funkce Vstupní parametry funkce slouží pro předání vstupních dat algoritmu, který je funkcí realizován Častá chyba začátečníka: funkce, která čte hodnoty parametrů pomocí operace vstupu dat (např. čtení klávesnice) static int max(int x, int y) { x = sc.nextInt(); // nesmyslný příkaz y = sc.nextInt(); // nesmyslný příkaz if (x>y) return x; else return y; } int z= max(7,99); Nesmysl Proč? A0B36PRI „PROGRAMOVÁNÍ“ 04

Hodnota funkce Typ návratové hodnoty se uvádí před názvem funkce Návratová hodnota (proměnná, výraz) se uvádí za příkazem return Funkce může vracet pouze jednu návratovou hodnotu Návratovou hodnotou může být i referenční proměnná (viz „pole“) static int max(int x, int y) { int maxHodnota = y; if (x>y) maxHodnota = x; return x; } Funkce max Návratová hodnota A0B36PRI „PROGRAMOVÁNÍ“ 04

Formální a skutečné parametry funkce public static void main(String[] args){ int a = 4; int b = 2; int m = max(a,b); System.out.println("max="+m); m = max(b,6); } static int max(int x, int y) { int maxHodnota = y; if (x > y) maxHodnota = x; return x; Skutečné parametry Skutečné parametry obsahují aktuální předávaná data do metody Formální parametry Formální parametry umožní v těle metody popsat, jak má algoritmus zpracovat vstupní data /** * * @param x * @param y * @return */ Formální parametry jsou lokální proměnné A0B36PRI „PROGRAMOVÁNÍ“ 04

Příklad – Výplata hotovosti Výplata hotovosti (výčetka platidel) se odevzdává bance, uvádí vždy hodnotu bankovky a počet bankovek My budeme hledat takovou výčetku, která pro danou částku obsahuje celkově nejmenší počet bankovek Příklad: (pro jednoduchost uvažujme pouze bankovky 5000, 1000, 500 a 100 Kč) Částka = 38 900 bankovka (Kč) počet (ks) 5000 7 1000 3 500 1 100 4 A0B36PRI „PROGRAMOVÁNÍ“ 04

Příklad - Výplata hotovosti public class Vycetka { public static void main(String[] args) { int plat, platX; int p5000,p1000,p500,p100; platX=sc.nextInt(); plat=platX; p5000=plat/5000; plat=plat%5000; p1000=plat/1000; plat=plat%1000; p500=plat/500; plat=plat%500; p100=plat/100; plat=plat%100; System.out.println("Vyplata castky " + platX + " je:\n" + p5000 + ",\n" + p1000 + ",\n„ + p500 + ",\n" + p100 + ", \na zbytek " + plat); }} pocet = plat/hodnBankovky; plat = plat%hodnBankovky; A0B36PRI „PROGRAMOVÁNÍ“ 04

Výplata hotovosti s funkcí public class VycetkaFunkce { static int plat; static int pocetBankovek(int hodnotaBankovky){ int pocet; pocet = plat/hodnotaBankovky; plat = plat%hodnotaBankovky; return pocet; }; public static void main(String[] args) { int p5000,p1000,p500,p100, platX; plat=sc.nextInt(); platX=plat; p5000=pocetBankovek(5000); p1000=pocetBankovek(1000); p500=pocetBankovek(500); p100=pocetBankovek(100); System.out.println ("Vyplata castky " + platX + " je:\n" + p5000 + ",\n" + p1000 + ",\n„ + p500 + ",\n" + p100 + ", \na zbytek " + plat); }} A0B36PRI „PROGRAMOVÁNÍ“ 04

Přetěžování jmen funkcí Funkce lišící se v počtu nebo typu parametrů se mohou jmenovat stejně (přetěžování jmen, Name Overloading) Příklad: public class Max2 { static int max(int x, int y) { if (x>y) return x; else return y; } static int max(int x, int y, int z) { return max(x, max(y, z)); static double max(double x, double y) { public static void main(String[] args) { System.out.println (max(3,4)); System.out.println (max(1,2,3)); System.out.println (max(1.0,2.4)); Přetížené jméno max A0B36PRI „PROGRAMOVÁNÍ“ 04

ukončit na více místech Příklady funkcí Funkce pro zjištění, zda daný rok je přestupný public class Rok { static boolean prestupny(int rok) { if (rok%4 == 0 && (rok%100!=0 || rok%1000 == 0)) return true; else return false; } public static void main(String[] args) { int rok; System.out.println ("zadejte rok"); rok = sc.nextInt(); System.out.print("rok "+rok); if (prestupny(rok)) System.out.println (" je přestupný"); System.out.println (" není přestupný"); return může metodu ukončit na více místech A0B36PRI „PROGRAMOVÁNÍ“ 04

Funkce pro výpočet NSD 1 Efektivní algoritmus lze sestavit na základě těchto vztahů: je-li x = y, pak nsd(x,y) = x je-li x > y, pak nsd(x,y) = nsd(x-y,y) je-li x < y, pak nsd(x,y) = nsd(x,y-x) Řešení 1: static int nsd(int x, int y) { while (x != y) if (x > y) x = x-y; else y = y-x; return x; } public static void main(String[] args) { int a=sc.nextInt();int b=sc.nextInt(); System.out.println(“Nejvetsi spolecny delitel” + a + ”, “ + b + “je “ + nsd(a,b)); int nsd(int x, int y) { int d; if (x<y) d=x; else d=y; while (x%d!=0 | y%d!=0) d--; return d; } A0B36PRI „PROGRAMOVÁNÍ“ 04

Funkce pro výpočet NSD 2 Do těla cyklu vnoříme místo podmíněného příkazu pro jediné zmenšení hodnoty x nebo y dva cykly pro opakované zmenšení hodnot x a y Řešení 2: static int nsd(int x, int y) { while (x!=y) { while (x>y) x = x-y; while (y>x) y = y-x; } return x; public static void main(String[] args) { int a = sc.nextInt();int b = sc.nextInt(); System.out.println(“Nejvetsi spolecny delitel” + a + ”, “ + b “je “ + nsd(a,b)); A0B36PRI „PROGRAMOVÁNÍ“ 04

Euklidův algoritmus pro výpočet NSD 3 Vnitřní cykly řešení 2 počítají nenulový zbytek po dělení většího čísla menším Pro výpočet zbytku po dělení máme operaci % Jejím využitím dostaneme Euklidův algoritmus, který lze slovně formulovat takto: určíme zbytek po dělení daných čísel, zbytkem dělíme dělitele a určíme nový zbytek, až dosáhneme nulového zbytku; poslední nenulový zbytek je nsd Řešení 3: static int nsd(int x, int y) { int zbytek = x%y; while (zbytek != 0) { x = y; y = zbytek; zbytek = x%y; } return y; public static void main(String[] args) { int a=sc.nextInt();int b=sc.nextInt(); System.out.println(“Nejvetsi spolecny delitel” + a + ”, “ + b “je “ + nsd(a,b)); A0B36PRI „PROGRAMOVÁNÍ“ 04

Procedury Metoda, jejíž typ výsledku je void, nevrací žádnou hodnotu Metoda, která nevrací žádnou hodnotu, se nazývá procedura Předávání vstupních dat do procedury se řídí stejnými pravidly jako u funkce Procedura může vracet vypočítané hodnoty (!)- způsob bude probrán v dalších lekcích. Příklady procedury: Hlavní funkce main Tisk na obrazovku print( ) nebo println( ) Příklad uživatelské procedury: Výpis znaku zn doplněného zleva mezerami na celkový počet n znaků static void vypisZnak(char zn, int n) { for (int i=1; i<n; i++) System.out.print(' '); System.out.print(z); } A0B36PRI „PROGRAMOVÁNÍ“ 04

Statické proměnné Třída může obsahovat deklarace statických proměnných Statické proměnné třídy jsou použitelné ve všech funkcích dané třídy – jsou to pro ně nelokální proměnné Příklad: public class StatickePromenne { static int x, y; // statické proměnné třídy public static void main(String[] args) { System.out.println("zadejte dvě celá čísla"); x = sc.nextInt(); y = sc.nextInt(); // System.out.println(i); // Nelze, i zde neznama vypisSoucet(); } static void vypisSoucet() { int i=6; System.out.println("součet čísel je "+(x+y+i)); Poznámka: statické proměnné jsou inicializovány hodnotou nula A0B36PRI „PROGRAMOVÁNÍ“ 04

Hvězdičky - procedury static void hvezdickyln(int pocet){ for (int i=1; i<=pocet; i++) System.out.print('*'); System.out.println(""); } static void hvezdicky(int pocet) { static void mezeryln(int pocet) { for (int i=1; i<=pocet; i++) System.out.print(' '); static void mezery(int pocet) { A0B36PRI „PROGRAMOVÁNÍ“ 04 A0B36PR1 - 05 32

Hvězdičky - procedury ***** ********** public class Hvezdicky { public static void main(String[] args ) { hvezdickyln(5); mezery(4); hvezdicky(10); mezeryln(0); } ***** ********** A0B36PRI „PROGRAMOVÁNÍ“ 04 A0B36PR1 - 05 33

Zastínění nelokální proměnné Deklarace lokální proměnné x zastíní deklaraci nelokální proměnné x Příklad: public class Zastineni { static int a = 10; public static void main(String[] args) { f(); System.out.println(a); } static void f() { int a = 20; Program vypíše 20 10 Statická, nelokální (globální ve své třídě) Lokální proměnná, zastíní nelokální proměnnou stejného jména public class Lokalita A0B36PRI „PROGRAMOVÁNÍ“ 04

Přidělování paměti proměnným Poznali jsme doposud dva druhy proměnných: statické proměnné třídy lokální proměnné metod Přidělením paměti proměnné rozumíme určení adresy umístění proměnné v paměti počítače Statickým proměnným třídy se přidělí paměť v okamžiku, kdy se do paměti zavádí kód funkcí třídy, a zůstane jim přidělena až do ukončení běhu programu, prostor haldy (heap) Lokálním proměnným a parametrům funkce se paměť přidělí při každém volání funkce a zůstane jim přidělena jen do návratu z funkce ( při návratu z funkce se přidělené adresy uvolní pro další použití) Úseky paměti přidělované lokálním proměnným a parametrům tvoří tzv. zásobník (stack, LIFO): úseky se přidávají a odebírají, přičemž se vždy odebere naposledy přidaný úsek zásobník A0B36PRI „PROGRAMOVÁNÍ“ 04

Přidělování paměti proměnným Příklad public static void main(String[] args) { int a; // 1 f(); ... // 5 } static void f() { int b; ... // 2 g(10); ... // 4 static void g(int x) { int c; // 3 ... } c x b b b Proměnné v paměti a a a a a args args args args args 1 2 3 4 5 krok A0B36PRI „PROGRAMOVÁNÍ“ 04

Další informace k této přednášce hledejte např. v: Herout, P.: Učebnice jazyka Java, Kopp, Č.Budějovice, 2010, str.114 - 128. A0B36PRI „PROGRAMOVÁNÍ“ 04

Metody (funkce, procedury) A0B36PRI - PROGRAMOVÁNÍ Metody (funkce, procedury) Jazyk JAVA Konec České vysoké učení technické Fakulta elektrotechnická