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



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

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

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

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/

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

Seminář Java II p.1/43

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

1. Programování proti rozhraní

Abstraktní datové typy: zásobník

Algoritmizace a programování

Úvod do programovacích jazyků (Java)

KTE / ZPE Informační technologie

Algoritmizace a programování

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

7. Datové typy v Javě

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

IRAE 07/08 Přednáška č. 2. atr1 atr2. atr1 atr2 -33

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

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

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

Základy objektové orientace I. Únor 2010

Generické programování

Výčtový typ strana 67

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

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

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

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

Datové struktury. alg12 1

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

Principy objektově orientovaného programování

Programování v Javě I. Leden 2008

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

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

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

Úvod do programovacích jazyků (Java)

1. Téma 12 - Textové soubory a výjimky

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

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

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

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

Datové struktury. Obsah přednášky: Definice pojmů. Abstraktní datové typy a jejich implementace. Algoritmizace (Y36ALG), Šumperk - 12.

Teoretické minimum z PJV

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

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

Mnohotvarost (polymorfizmus)

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

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

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

typová konverze typová inference

Komponenty v.net. Obsah přednášky

Seznamy a iterátory. Kolekce obecně. Rozhraní kolekce. Procházení kolekcí

PREPROCESOR POKRAČOVÁNÍ

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

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

Objektově orientované programování

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

Vaše jistota na trhu IT. Balíčky. Rudolf Pecinovský

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

KTE / ZPE Informační technologie

20. Projekt Domácí mediotéka

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

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

9. přednáška - třídy, objekty

RMI Remote Method Invocation

Obsah přednášky. 12. Dokumentace zdrojového kódu Tvorba elektronické dokumentace UML. Co je diagram tříd. Ing. Ondřej Guth

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

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

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

Třídy. Instance. Pokud tento program spustíme, vypíše následující. car1 má barvu Red. car2 má barvu Red. car1 má barvu Blue.

17. Projekt Trojúhelníky

Dědičnost (inheritance)

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

Java a XML. 10/26/09 1/7 Java a XML

Algoritmizace a programování

Podmínky na zápočet. Java, zimní semestr

Programovací jazyk Java

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

Java - řazení objektů

1. Dědičnost a polymorfismus

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

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

Pokud zadání nerozumíte nebo se vám zdá nejednoznačné, zeptejte se. Pište čitelně, nečitelná řešení nebudeme uznávat.

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

Konstruktory a destruktory

Základní pojmy. Úvod do programování. Základní pojmy. Zápis algoritmu. Výraz. Základní pojmy

IRAE 07/08 Přednáška č. 7. Začátek (head)

OOPR_05. Případové studie

3 KTE / ZPE Informační technologie

Zapouzdření. Tomáš Pitner, upravil Marek Šabo

TŘÍDY POKRAČOVÁNÍ. Události pokračování. Příklad. public delegate void ZmenaSouradnicEventHandler (object sender, EventArgs e);

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

Předmluva k aktuálnímu vydání Úvod k prvnímu vydání z roku Typografické a syntaktické konvence... 20

Abstraktní třída a rozhraní

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

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

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

Struktura programu v době běhu

Obsah. Předmluva 13 Zpětná vazba od čtenářů 14 Zdrojové kódy ke knize 15 Errata 15

Java Výjimky Java, zimní semestr

Třída jako datový typ. A0B36PR1-Programování 1 Fakulta elektrotechnická České vysoké učení technické

Transkript:

Základy programování (IZAPR) Přednáška 7 Ing. Michael Bažant, Ph.D. Katedra softwarových technologií Kancelář č. 229, Náměstí Čs. legií Michael.Bazant@upce.cz Obsah přednášky 7 Parametry metod, předávání odkazem a hodnotou Přetěžování metod Metody, metoda main Rozhraní, implementace, signatura, kontrakt Ikona třídy 2 Parametry metod U metod je možné definovat 0 n parametrů (formální parametry) Parametry, argumenty public void nastavznamku(int znamka) { znamkaprogramovani = znamka; Student studentnovy = new Student(); studentnovy.nastavznamku(1); Argumenty vstupují do metod prostřednictvím parametrů Argumety někdy též aktuální parametry 3 4 Parametry metod Žádný parametr musí být uvedeny prázdné závorky Pokud je parametrů více, oddělují se čárkou U každého parametru musí být uveden jeho typ public void vyhledejstudenta(string id, int znamka) {... Volání metod vkládáme argumenty polestudentu.vyhledejstudenta("st123", 2); Parametry metod Parametry Lze je využívat jako lokální proměnné metod (jen mají definovanou hodnotu, lze ji měnit) Typ argumentů musí vždy odpovídat typu parametrů Argumenty mohou být literální hodnoty i proměnné V některých jazycích lze realizovat dva typy předávání parametrů (např. Pascal) Hodnotou kopírování hodnoty argumentu do parametru Odkazem propojení formálního parametru a skutečného argumentu Jazyk Java předávání parametrů hodnotou (pass by value) 5 6 1

Primitivní datové typy Bity reprezentující hodnotu jsou kopírovány do metody void prictidvojku(int prom) { prom = prom + 2; Referenční proměnné Opět se jedná o bitové kopie referenční proměnné Příklad 1: public class Student { String jmeno;... int a = 10; System.out.println("a = " + a); cislo.prictidvojku(a); System.out.println("a = " + a); void zmenjmeno(student student) { student.jmeno = "Adam"; Student st = new Student(); st.jmeno = "Evzen"; st.zmenjmeno(st); 7 8 (ref. prom.) Předávání kopie referenční proměnné Jedná se o bitové kopie referenční proměnné Příklad 2: public class Student2 { String jmeno; Student void zmenstudenta(student2 student) { student = new Student2(); student.jmeno = "Adam"; st (argument) referenční proměnná 1000111 1111 referenční proměnná 1000111 1111 Student2 st = new Student2(); st.jmeno = "Evzen"; st.zmenjmeno(st); 9 10 st (argument, lok. prom.) Rekapitulace Předávání parametrů v jazyce Java vždy dochází k vytváření kopií hodnot argumentů st (argument, lok. proměnná) Nezáleží na typu parametrů (primitivní, referenční) 11 12 2

Metody mohou vracet hodnoty, ale nemusí Pokud nevrací hodnotu void Klíčové slovo return Lze vracet hodnoty Primitivního datového typu Referenčního datového typu (např. pole) Lze použít i pro okamžité ukončení vykonávané metody Vracení hodnot Vždy hodnoty kompatibilní s definovaným návratovým typem [modifikator] <navratovy_typ> <nazev> ([parametry]) { 13 14 Příklady: public Student vytvorstudenta(string id) { if (lzevytvorit()) { return new Student(); else { return null; public String[] gettext () { return new String[] {"I", "Z", "A", "P", "R"; 15 Příklady: public int vypocet() { char c = 'a'; return c; public int vypocet() { float f = 32.5f; return (int) f; public void vypocet() { return "vysledek"; public void vypocet() { return; 16 Parametry klíč. slovo this Stejné názvy instančních proměnných a parametrů použije se vždy bližší definice proměnné this přístup k instančním proměnným a metodám public class Student { Klíčové slovo this String jmeno; void zmenjmeno(string jmeno) { this.jmeno = jmeno; Student st = new Student(); st.zmenjmeno("adam"); 17 18 3

Parametry klíč. slovo this Není nutné používat vždy Pouze v případech, kdy dochází k překryvu identifikátorů (např. lokální vs. instanční proměnná) Používá se i v jiných případech (např. při přetěžování konstruktorů) Metody volání metod 19 20 Volání metod Volání metod zásobník 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) Na pořadí definice metod ve třídě nezáleží (vzhledem k pořadí jejich volání) public void metodajedna() { boolean b = true; metodadve(4); public void metodadve(int x) { int z = x + 24; metodatri(); Volání metody 1. 2. Umístění na vrchol zásobníku i s lokálními proměnnými 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á public void metodatri() { char c = 'a'; public static void main(string[] args) {.metodajedna(); 3. 21 22 Volání metod zásobník Volání metod zásobník public void metodajedna() { boolean b = true; metodadve(4); public void metodadve(int x) { int z = x + 24; metodatri(); public void metodatri() { char c = 'a'; public static void main(string[] args) {.metodajedna(); Volání metody 3. 4. Umístění na vrchol zásobníku i s lokálními proměnnými Vrchol zásobníku Aktuálně vykonávaná metoda Stack frame Zásobníků může být i více Vícevláknové programování (další semestry studia) 23 24 4

Přetěžování metod a konstruktorů (overloading) Stejné názvy metod a konstruktorů (více variant jedné metody nebo konstruktoru) Přetěžování metod a konstruktorů Nelze pouze změnit návratový typ Pokud změněn pouze návratový typ, nejedná se o přetížení Návratový typ může být změněn Přetížení (není přepis metod další přednášky na téma základů dědičnosti) Musí být změněn počet nebo typ parametrů 25 26 Přetěžování metod a konstruktorů Přetěžování rekapitulace Musí být změněn seznam parametrů Může být změněn návratový typ Mohou být změněny modifikátory Metody metoda main 27 28 Metoda main Programování v metodě main Nejedná se o ově orientované programování Reálné aplikace v jazyce Java Objekty komunikující s jinými y (posílání zpráv, volání metod) Další průběh semestru používání metody main "Testování" připravené aplikace (pokročilejší způsoby testování programování neprobíhají v metodě main předmět OOP) Spuštění aplikace Aplikace startuje vždy metodou main 29 30 5

umožňují Organizovat velké projekty Členit programy na logické celky Vytvářet jmenné prostory v každém balíčku vždy jen jedna třída stejného názvu Jedná se o podobnou práci jako se složkami v operačním systému Plný název třídy se skládá z uvedení balíčků a názvu třídy (např. java.lang.math, java.lang.string) Při využívání tříd z balíčků je nutné uvádět příkaz import Každá třída v Java API je umístěna v balíčku Import není nutné uvádět pro balíček java.lang Používali jsme bez importu např. třídu Math, String apod. Vytváření většího počtu tříd přemýšlet nad uspořádáním tříd Předcházení konfliktů při volbě názvů balíčků doménové jméno v opačném pořadí (doménová jména jsou unikátní) (např. import cz.upce.fei.matematika.matice; import cz.upce.fei.matematika.*;) 31 32 Příkaz package Třída se nachází v balíčku příkaz import na prvním řádku zdroj. kódu třídy Pouze jeden příkaz package v souboru Pokud více tříd v jednom souboru, musí být ve stejném balíčku (včetně vnitřních tříd) Struktura balíčků musí odpovídat struktuře složek Java API 33 34 Java API (Application Programming Interface) Dokumentace k API Přehled balíčků, tříd, konstruktorů, atributů a metod http://java.sun.com/reference/api/ Zatím jsme např. využívali Balíček java.lang, třídu Math Ballíček java.util, třídu Scanner Rozhraní, implementace, signatura, kontrakt Pro jednotlivé verze jazyka se API může značně lišit 35 36 6

Rozhraní, implementace Rozhraní Množina informací, které o sobě třída zveřejní Např. vše označené jako public Příklad rozhraní tříd Java API Co nechceme aby bylo přístupné označíme private (nebude součástí rozhraní) Implementace Způsob naprogramování třídy, realizace nabízených funkcí třídy Jak je uděláno to, co třída umí Rozhraní signatura, kontrakt Rozhraní lze dále rozdělit na: Signaturu Kombinace modifikátoru, názvu metody, seznamu parametrů a návratového typu Překladač dokáže kontrolovat správnost Kontrakt Dohoda mezi tvůrcem třídy či metody a jejím uživatelem Měl by být uveden v dokumentačních komentářích (popis funkce, význam parametrů, omezení hodnot parametrů, význam návratové hodnoty, seznam chybových stavů apod.) Nedokáže kontrolovat překladač Nedodržení kontraktu často vede k havárii programu 37 38 Ikona třídy Název třídy Instanční proměnné (atributy) Metody Obdelnik stranaa stranab vypocitejobvod() vypocitejobsah() vypocitejdelkuuhlopricky() Stavy (co y znají) Chování (co y dělají) obdelnik1 : Obdelnik obdelnik2 : Obdelnik obdelnik3 : Obdelnik 39 7