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/04.0006

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

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

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

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

Úvod do programovacích jazyků (Java)

Seminář Java II p.1/43

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

Algoritmizace a programování

Ú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

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

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

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

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

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

typová konverze typová inference

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

Programování v Javě I. Leden 2008

Výčtový typ strana 67

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

7. Datové typy v Javě

Zápis programu v jazyce C#

Generické programování

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

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

Algoritmizace a programování

Obsah. Úvod 11 Základy programování 11 Objektový přístup 11 Procvičování 11 Zvláštní odstavce 12 Zpětná vazba od čtenářů 12 Errata 13

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

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

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

Teoretické minimum z PJV

Seminář Java IV p.1/38

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

PREPROCESOR POKRAČOVÁNÍ

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

1. Programování proti rozhraní

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

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

Objektově orientované programování

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

1. Dědičnost a polymorfismus

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.

20. Projekt Domácí mediotéka

3 Vývojová prostředí, základní prvky jazyka Java, konvence jazyka Java

Operátory, výrazy. Tomáš Pitner, upravil Marek Šabo

Algoritmizace a programování

Datové typy strana 29

6 Příkazy řízení toku

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

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

Algoritmizace a programování

Logické operace. Datový typ bool. Relační operátory. Logické operátory. IAJCE Přednáška č. 3. může nabýt hodnot: o true o false

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

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

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

Java Cvičení 01. CHARLES UNIVERSITY IN PRAGUE faculty of mathematics and physics

O autorovi O odborném korektorovi Úvod 17 Vývoj jazyka Java Java SE 8 Struktura této knihy Předchozí zkušenosti s programováním nejsou potřebné

Programovací jazyk Java

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

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

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

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

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.

Úvod do programování v jazyce Java

EVROPSKÝ SOCIÁLNÍ FOND. Úvod do PHP PRAHA & EU INVESTUJEME DO VAŠÍ BUDOUCNOSTI

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

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

Jazyk C# a platforma.net

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

Abstraktní datové typy: zásobník

Dědičnost (inheritance)

Ukazka knihy z internetoveho knihkupectvi

1. Téma 03 - Rozhodování

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

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

ADT/ADS = abstraktní datové typy / struktury

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

Úvodní informace. Petr Hnětynka 2/2 Zk/Z

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

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

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

KTE / ZPE Informační technologie

Programování v jazyce JavaScript

Třídy, polymorfismus. A0B36PR2-Programování 2 Fakulta elektrotechnická České vysoké učení technické

Java Výjimky Java, zimní semestr

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

Proměnná. Datový typ. IAJCE Cvičení č. 3. Pojmenované místo v paměti sloužící pro uložení hodnoty.

1. ÚVOD ZÁKLADY JAZYKA...

Jak v Javě příkazy, operace a výrazy. BD6B36PJV 00 Fakulta elektrotechnická České vysoké učení technické

for (i = 0, j = 5; i < 10; i++) { // tělo cyklu }

URČITÝM ZPŮSOBEM PODOBNÉ

Výrazy, operace, příkazy

Jak v Javě primitivní datové typy a jejich reprezentace. BD6B36PJV 002 Fakulta elektrotechnická České vysoké učení technické

Java reprezentace dat, výrazy. A0B36PR1-Programování 1 Fakulta elektrotechnická České vysoké učení technické

Úvodní informace. Petr Hnětynka 2/2 Zk/Z

Osnova přednášky. Programové prostředky řízení Úvod do C# II. Přístup ke členům. Členy (Members)

IZAPR ZKOUŠKA OTÁZKY

NPRG031 Programování II 1 / :47:55

Jazyk PL/SQL Úvod, blok

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

Transkript:

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/04.0006 Lekce 1 Jazyk Java Tento projekt je spolufinancován Evropským sociálním fondem a státním rozpočtem České republiky.

Komentáře Klíčová slova (rezervovaná) Nemohou být využita k jiným než definovaným účelům Příkazy programy se skládají z různých typů příkazů, které reprezentují akce nebo skupiny akcí a končí středníkem Bloky dvojice složených závorek { } Proměnné paměťová místa, ve kterých uchováváme informace

Třídy Základní stavební kámen jazyka Java Každý program v jazyce Java se skládá alespoň z jedné třídy Třída šablona (předpis) pro vytváření objektů Metody Skupina příkazů pro vykonání operací Metoda main speciální typ metody, výchozí bod při spouštění programu Identifikátory Jednoznačný název pro označení proměnných, konstant apod. Musí být souvislé, nelze je přerušovat bílými znaky

Java rozlišuje malá a velká písmena Konvence jazyka Java Code Conventions, k dispozici na www.oracle.com/technetwork/java/codeconventions- 150003.pdf Nepoužíváme znaky s diakritikou (editory ji většinou podporují, ale může být problém s výstupy programů) Třídy První písmeno je velké Pokud více slov v názvu začátek každého slova velké písmeno Název třídy ve většině případů podstatné jméno Příklad: Clovek, Ucet, SporiciUcet

Metody Začínají malým písmenem Většinou se jedná o sloveso Příklad: main(), zalozucet(), zrusucet() Proměnné Stejné zásady jako u metod první písmeno malé, ostatní velká (více slov camelcase) Příklad: pocetstudentu, znamkaprogramovani Konstanty Všechna písmena velká, jednotlivá slova oddělena symbolem podtržení Příklad: MINIMALNI_VEK

Java compiler Je součástí nástrojů obsažených v JDK Provádí kompilaci zdrojového kódu na bytecode javac [nastaveni] [soubory se zdroj. kodem] Příklad: javac HelloWorld.java Výsledkem kompilace je bytecode uložený v souboru se stejným názvem (ve stejné složce) Příklad: HelloWorld.class Příklad nastavení: (do složky classes ) javac d classes HelloWorld.java

Java Virtual Machine java [-nastaveni] class [argumenty] Příklad: java HelloWorld Program v jazyce Java Java API Java Virtual Machine Operační systém

Nelze volit identifikátor s identickým názvem s některým rezervovaným slovem Jde o elementy definované přímo jako součást gramatiky jazyka Nelze je uživatelsky měnit jsou součástí překladače

Klíčová slova Literály (doslovné hodnoty), které lze považovat za klíčová slova true, false, null

Do konce řádku int i; //promenna je typu int Víceřádkové /* * Toto je komentar na * vice radku */ Jednořádkové /* Toto je komentar na cely radek. */

Dokumentační JavaDoc /** * Tyto komentare lze * vyuzit pri vytvareni dokumentace * s vyuzitim nastroje JavaDoc */

Primitivní byte 8 short 16 int 32 long 64 float 32 double 64 int x = 7; //binarne 00000111 Referenční odkazují na objekty v paměti, jejich velikost není pevně dána Student objekt Scanner objekt Student referenční proměnná vstup referenční proměnná

Nejzákladnější forma dat v jazyce Java Při deklaraci proměnné prim. dat. typu dochází k alokaci určitého počtu bitů v paměti Velikost alokované paměti záleží na datovém typu Začínají vždy malým písmenem (dle konvence) Příklady: byte x = 10; char znak = A ; boolean souhlas = true; double = 2563.5;

Pri. Operátor Popis Asoc. 1 (), [] Primární výrazový L 2 ++, -- Inkrement (post, pre) P 2 +, - Unární plus, minus (změna znaménka) 2 ~ Bitový doplněk P 2 () Přetypování P 2! Logická negace P 3 *, /, % Násobení, dělení, zbytek po dělení L 4 +, - Součet, rozdíl, spojování řetězců L 5 <<, >>, >>> Posun vpravo, posun vlevo L 6 <, <=, >, >= Menší, menší rovno, větší, větší rovno (vrací boolean) 6 instanceof Porovnání typů (vrací boolean) L P L

Pri. Operátor Popis Asoc. 7 ==,!= Rovno, není rovno (vrací boolean) L 8 & Logické a bitové AND L 9 ^ Logické a bitové XOR L 10 Logické a bitové OR L 11 && Podmínkové AND (vrací boolean) L 12 Podmínkové OR (vrací boolean) L 13 (? : ) Podmínkový operátor P 14 =, +=, /=, *=, %=, -=, <<=, >>=, >>>=, &=, ~=, ^= Operátory přiřazení Více operátorů se stejnou prioritou rozhoduje asociativita int y = x += 1; // x = 2, vysledek bude 3 P

Základní tvar: if (vyraz) { prikaz; } Výsledkem výrazu musí být vždy true nebo false Blok else je volitelný if (vyraz) { prikaz1; } else { prikaz2; }

Obecný tvar vícenásobného rozhodování switch (vyraz) { case konst1: blok1; case konst2: blok2; default: blokd; } Výraz může být typu char, byte, short, int, enum

Neznámý počet opakování podmínka na začátku Probíhá dokud platí podmínka Nemusí proběhnout ani jednou while (bool. vyraz) { } prikaz;? fals e int x = 2; while (x == 2) { System.out.println(x); ++x; } true

Neznámý počet opakování podmínka na konci Probíhá dokud platí podmínka Proběhne vždy alespoň jednou do { prikaz; } while (bool. vyraz); int x = 2; do { System.out.println(x); ++x; } while (x == 2); true? fals e

Známý počet opakování for (inic.; podminka; iterace) { } telocyklu; for (int i = 0; i < 10; i++) { } System.out.println("i = " + i); for (int i = 20; i > 0; i--) { } System.out.println("i = " + i);

Deklarace referenční proměnné a vytváření objektů Jakého typu má být referenční proměnná Deklarace referenční proměnné Vytvoření objektu Student objekt Student studentnovak = new Student(); studentnovak referenční proměnná Vazba mezi referenční proměnnou a objektem

Příklad: [modifikator] class <JmenoTridy> { <atributy> <konstruktory> <metody> } public class Student { int znamkaprogramovani = 1; } void vyhodnotznamku() { if (znamkaprogramovani == 1) { System.out.println("Student ma znamku vyborne"); } else... }

Základní syntaxe [modifikator] <typ> <identifikator> [ = <inic. hodnota>]; public class Obdelnik { int delka; int sirka; boolean jezobrazen; String oznaceni; } Přístup k atributům tečková notace obdelnik1.delka = 5;

Základní syntaxe [modifikator] <navratovy_typ> <nazev> ([parametry]) { } prikaz1; prikaz2;... public void nastavznamku(int znamka) { } znamkaprogramovani = znamka; Volání metod tečková notace, argumenty studentnovak.nastavznamku(1);

Deklarace ref. proměnné typu pole datovytyp[] pole; datovytyp pole[]; //povoleno, ale nedoporucuje se Vytváření objektů typu pole pole = new datovytyp[pocetprvku]; pole = new double[10]; pole[0] odkazuje na první prvek pole pole[9] odkazuje na poslední prvek pole

Deklarace datovytyp[][] refpromenna; Vytvoření objektu refpromenna = new datovytyp[10][10]; Kombinace dekl. a inicializace datovytyp[][] refpromenna = new datovytyp[10][10]; Alternativa (nedoporučuje se) datovytyp refpromenna[][] = new datovytyp[10][10];

matice 6 7 0 1 matice[0] null 0 1 2 9 8 5 0 1 2 matice[1] int[][] matice = new int[3][]; matice[0] = new int[2]; matice[0][0] = 6; matice[0][1] = 7; matice[1] = new int[3]; matice[1][0] = 9;

Při vytváření objektů se používají konstruktory Nastavují vlastnosti objektů S využitím parametrů Bez parametrů Nemá žádný návratový typ nic nevrací Každá třída disponuje alespoň jedním konstruktorem i pokud nevytváříme konstruktor vlastní (implicitní, bez parametrů) Název konstruktoru se vždy shoduje s názvem třídy a konstruktor je vždy doplněn závorkami jako metody Pokud vytvoříme vlastní konstruktor, tak implicitní konstruktor není k dispozici (pokud si takový konstruktor nevytvoříme) Ukázka pomocí příkazu javap

Stejné názvy metod a konstruktorů (více variant jedné metody nebo konstruktoru) 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ů

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 { String jmeno; } void zmenjmeno(string jmeno) { this.jmeno = jmeno; } public static void main(string[] args) { Student st = new Student(); st.zmenjmeno("adam"); }

Parametry Jsou lokální proměnné metod (jen mají definovanou hodnotu, lze ji měnit až na výjimky final) 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)

Deklarace statických proměnných, metod a konstant Modifikátor static

Balíčky umožňují Organizovat větší 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

Syntaxe třídy <modifikator> class <Jmeno> [extends <Predek>] { } Vícenásobná dědičnost s využitím slova extends není v jazyce Java povolena Předek typu class je vždy pouze jen jeden Jiný typ vícenásobné dědičnosti (jedna třída má více předků) rozhraní Jeden předek může mít i více potomků násl. příklady

U tříd, na základě kterých nemá význam vytvářet objekty Pomocí modifikátoru abstract zamezíme vytvoření objektu V diagramu tříd název třídy odlišíme kurzívou Technik Zamestnanec -jmeno: String -plat: double -datumnarozeni: Date +getdeitals(): String Manazer -oddeleni: String

Přístupová práva Modifikátor V rámci třídy V rámci balíčku Potomek Jiné balíčky private Ano default Ano Ano protected Ano Ano Ano public Ano Ano Ano Ano

Potomek dědí metody od předka Změna implementace metody předka potomkem Překrývání metod (method overriding) Např. metody ve třídách CD, DVD vypis() Metody mohou být překryty pouze tehdy, pokud jsou dostupné Privátní metody nejsou dostupné mimo třídu, kde jsou definovány Proto nemohou být překryty a v takovém případě se nejedná o překryté metody, ale zcela nezávislé metody

Každá třída je potomkem třídy Object I pokud není definován žádný vztah dědičnosti, tak je předkem třídy třída Object Viz příkaz javap

Mnohotvárnost Proměnná m je typ Medium Do ref. proměnné lze přiřadit objekty jakékoliv podtřídy Rovněž v případě parametrů a návratových hodnot Medium m = new CD(); // v poradku String s = m.getautor(); // chyba CD m = new Medium(); // chyba Pokud chceme pracovat jako s objektem CD, přetypování

Princip podobný jako u primitivních datových typů Lze aplikovat také na objekty v hierarchii dědičnosti Souvisí s polymorfismem Object o = new Student(); // implicitni pretypovani Třídu Object tímto způsobem používáme jen v odůvodněných případech Student s = o; // chyba Chyba objekt, na který odkazuje ref. prom. "o" nemusí být objektem typu Student

Syntaxe stejná jako u prim. datových typů Object o = new Student(); // implicitni pretypovani Student s = o; // chyba Student s = (Student) o; // v poradku Explicitní přetypování musí být realizováno při přetypování z předka na potomka Nemusí vždy skončit úspěchem

Test, zda se u objektu jedná o instanci určité třídy Object mujobjekt = new Kruznice();... if (mujobjekt instanceof Kruznice) { System.out.println("Prumer kruznice je: " + ((Kruznice)mujObjekt).getPrumer());... }

Errors způsobené JVM, vnitřní systémové chyby Exceptions způsobené programem a okolnostmi (mohou být zachyceny a ošetřeny)

Kontrolované výjimky Třída Exception a její potomci Použití pro předpokládané chyby Je vyžadováno jejich ošetření programátorem Nekontrolované výjimky Třídy RuntimeException a Error a jejich potomci Použití pro neočekávané chyby

Konstrukce podobná třídám, ale může obsahovat pouze Konstanty Abstraktní metody (neobsahují žádnou implementaci a mají modifikátor abstract) Rozhraní je podobné abstraktním třídám, ale účelem je specifikace chování objektů (např. faktura je splatná, zaměstnancům je nutné platit apod. viz příklady na cvičení).

public interface ISplatne { public double MAX_PLATBA = 100000.0; } public void zaplatit(); stejné Přístup ke konstantám je stejný jako v případě použití tříd