NMIN201 Objektově orientované programování 2016/17 1 / :03:29

Podobné dokumenty
URČITÝM ZPŮSOBEM PODOBNÉ

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

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

Zápis programu v jazyce C#

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

Objektově orientované programování

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

NMIN201 Objektově orientované programování 1 / :36:09

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

NPRG031 Programování II 1 / :25:46

Jazyk C# a platforma.net

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

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

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

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

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

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

Čtvrtek 8. prosince. Pascal - opakování základů. Struktura programu:

Střední škola pedagogická, hotelnictví a služeb, Litoměříce, příspěvková organizace

Úvod do programovacích jazyků (Java)

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

PREPROCESOR POKRAČOVÁNÍ

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

Algoritmizace a programování

Programovací jazyk Pascal

Řídicí struktury. alg3 1

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/

Programování v Javě I. Leden 2008

Ukazka knihy z internetoveho knihkupectvi

Programovací jazyk. - norma PASCAL (1974) - implementace Turbo Pascal, Borland Pascal FreePascal Object Pascal (Delphi)

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

Generické programování

Seminář Java II p.1/43

Příklady: (y + (sin(2*x) + 1)*2)/ /2 * 5 = 8.5 (1+3)/2 * 5 = /(2 * 5) = 1.3. Pavel Töpfer, 2017 Programování 1-3 1

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

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

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

Algoritmizace a programování

Úvod do programování. Lekce 1

Výrazy, operace, příkazy

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

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

Základy programování (IZP)

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

Algoritmizace a programování

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

Opakování programování

Prezentace a vysvětlení programového prostředí NXC

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.

type Obdelnik = array [1..3, 1..4] of integer; var M: Obdelnik;

Algoritmizace a programování

ADT/ADS = abstraktní datové typy / struktury

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

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

Začínáme vážně programovat. Řídící struktury Přetypování Vstupně výstupní operace Vlastní tvorba programů

KTE / ZPE Informační technologie

Výčtový typ strana 67

1.1 Struktura programu v Pascalu Vstup a výstup Operátory a některé matematické funkce 5

6. Příkazy a řídící struktury v Javě

7. Datové typy v Javě

Jazyk C# (seminář 6)

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

2 Datové typy v jazyce C

Úvod do programovacích jazyků (Java)

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

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

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

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

Základy C++ I. Jan Hnilica Počítačové modelování 18

Jazyk C++ 1. Blok 3 Objektové typy jazyka C++ Třída. Studijní cíl. Doba nutná k nastudování. Průvodce studiem

- znakové konstanty v apostrofech, např. a, +, (znak mezera) - proměnná zabírá 1 byte, obsahuje kód příslušného znaku

8. lekce Úvod do jazyka C 3. část Základní příkazy jazyka C Miroslav Jílek

Střední škola pedagogická, hotelnictví a služeb, Litoměříce, příspěvková organizace

Proměnné a datové typy

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

1. lekce. do souboru main.c uložíme následující kód a pomocí F9 ho zkompilujeme a spustíme:

C++ Akademie SH. 2. Prom nné, podmínky, cykly, funkce, rekurze, operátory. Michal Kvasni ka. 20. b ezna Za áte níci C++

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

Teoretické minimum z PJV

C# konzole Podíl dvou čísel, podmínka IF

Struktura programu, proměnné, konstanty, výrazy v jazycích C a C#

Stručný obsah První týden Druhý týden 211 Třetí týden 451 Rejstřík 787

Základy objektové orientace I. Únor 2010

ZPRO v "C" Ing. Vít Hanousek. verze 0.3

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

Test prvočíselnosti. Úkol: otestovat dané číslo N, zda je prvočíslem

Více o konstruktorech a destruktorech

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

Programovací jazyk C++ Hodina 1

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

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

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

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

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

Správné vytvoření a otevření textového souboru pro čtení a zápis představuje

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

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).

Odvozené a strukturované typy dat

Tematický celek Proměnné. Proměnné slouží k dočasnému uchovávání hodnot během provádění aplikace Deklarace proměnných

Transkript:

NMIN201 Objektově orientované programování 2016/17 1 / 42 21. 11. 2016 11:03:29

Objekty Svět se skládá z objektů! konkrétní x abstraktní hmatatelné x nehmatatelné (letadlo) x (chyba v programu) Objekty mohou obsahovat jiné objekty (tělo obsahuje buňky, letadlo součásti). Objekty URČITÝM ZPŮSOBEM PODOBNÉ můžeme považovat za instance jedné TŘÍDY (pes). NMIN201 Objektově orientované programování 2016/17 2 / 42 21. 11. 2016 11:03:29

Objekty Další pokus oddělit CO x JAK VENKU x UVNITŘ INTERFACE x IMPLEMENTACE Strukturované programování blok, funkce Modulární programování modul, unit Objektové programování objekt NMIN201 Objektově orientované programování 2016/17 3 / 42 21. 11. 2016 11:03:29

Objekty v programu Způsob jak izolovat část kódu (příkaz-blok-procedura-modul-objekt). Způsob jak uvažovat o problému Objekt sdružuje DATA (datové složky, vlastnosti) i KÓD (funkce+procedury=metody) = ČLENY (members) OBJEKT = exemplář, instance TŘÍDY. NMIN201 Objektově orientované programování 2016/17 4 / 42 21. 11. 2016 11:03:29

Příklad: Napište program, který čte ze vstupu slova a tiskne je na řádky dané délky. NMIN201 Objektově orientované programování 2016/17 5 / 42 21. 11. 2016 11:03:29

Jazyk C# * C# - Java 1995, bytecode - C# 2002,.NET - Anders Hejlsberg * Microsoft Visual Studio, Expres verse zdarma * Projekt MONO (Linux) NMIN201 Objektově orientované programování 2016/17 6 / 42 21. 11. 2016 11:03:29

Přechod od C/C++ k jazyku C#...raději ne. Přechod od Pascalu k jazyku C# Používání mezer a řádkování - volné, stejně jako v Pascalu - doporučená a prostředím podporovaná indentace NMIN201 Objektově orientované programování 2016/17 7 / 42 21. 11. 2016 11:03:29

Identifikátory - case-sensitivní - možnost používat diakritiku - klíčová slova malými písmeny - jména prostorů*), tříd, metod a vlastností pascalská notace např. Math, DivideByZeroException, Main, WriteLine - konvence (proměnné malými písmeny, konstanty velkými písmeny, soukromé metody začínají malým písmenem = velbloudínotace, veřejné velkým písmenem = PascalskáNotace např. i, Max, soucetcisel, SoucetCisel, NMIN201 Objektově orientované programování 2016/17 8 / 42 21. 11. 2016 11:03:29

Struktura programu Celý program se skládá ze tříd, vše se deklaruje a používá uvnitř tříd (proměnné, konstanty, funkce, ). Položky deklarované ve třídě: datové složky třídy = členské proměnné metody = členské funkce Prozatím: celý program je tvořen jedinou statickou*) metodou (její obsah tedy odpovídá celému programu) Někdy příště: jak jinak to může vypadat se třídami NMIN201 Objektově orientované programování 2016/17 9 / 42 21. 11. 2016 11:03:29

Proměnné - zápis deklarace syntaxe: int alfa; - umístění deklarace: BUĎ členská proměnná třídy (tzn. datová složka objektu) NEBO lokální kdekoliv ve funkci, ale nesmí zakrýt jinou stejnojmennou deklaraci uvedenou v téže funkci (pozor na kolize!) - lokální platnost deklarace v bloku, kde je uvedena - možnost inicializace v rámci deklarace: int alfa = 15; - v programu nelze použít nedefinovanou hodnotu proměnné (kontrola při překladu) - hodnotové a referenční typy - všechno*) je objekt (instance nějaké třídy) NMIN201 Objektově orientované programování 2016/17 10 / 42 21. 11. 2016 11:03:29

Konstanty - syntaxe jako inicializované proměnné, specifikátor const: const int ALFA = 15; - číselné konstanty podobné jako v Pascalu (různé typy) - konstanty typu char v apostrofech: 'a', typu string v uvozovkách: "aaa" NMIN201 Objektově orientované programování 2016/17 11 / 42 21. 11. 2016 11:03:29

Typy Hodnotové celé číslo int System.Int32 32 bitů další typy: byte, sbyte, short, ushort, uint, long, ulong desetinné číslo double System.Double 64 bitů další typy: float, decimal logická hodnota bool znak char System.Char 16 bitů Unicode výčtový typ enum struktura struct NMIN201 Objektově orientované programování 2016/17 12 / 42 21. 11. 2016 11:03:29

Referenční pole [ ] System.Array znakový řetězec string System.String třída class (standardní třídy, např. ArrayList, StringBuilder, List<>) NMIN201 Objektově orientované programování 2016/17 13 / 42 21. 11. 2016 11:03:29

Aritmetické výrazy - obvyklé symboly operací i priority stejné jako v Pascalu + - * / - POZOR: symbol / představuje reálné i celočíselné dělení (zvolí se podle typu argumentů) zdroj chyb! - znak % pro modulo (zbytek po celočíselném dělení) - klíčová slova checked, unchecked určení, zda se má kontrolovat aritmetické přetečení v celočíselné aritmetice - použití jako checked(výraz) nebo checked{blok} - standardní matematické funkce statické metody třídy Math NMIN201 Objektově orientované programování 2016/17 14 / 42 21. 11. 2016 11:03:29

Středník - ukončuje každý příkaz (musí být i za posledním příkazem bloku!) - nesmí být za blokem ani za hlavičkou funkce (forward deklarace v C# neexistuje (skoro)) - odděluje sekce v hlavičce for-cyklu Čárka - odděluje deklarace více proměnných téhož typu - odděluje parametry v deklaraci funkce i při volání funkce - odděluje indexy u vícerozměrného pole NMIN201 Objektově orientované programování 2016/17 15 / 42 21. 11. 2016 11:03:29

Komentáře - jednořádkové // xxx do konce řádku - víceřádkové /* xxx */ - dokumentační /// Blok (složený příkaz) - závorky { } místo pascalského begin end Dosazovací příkaz - syntaxe: proměnná = výraz např. i = 2*i + 10; NMIN201 Objektově orientované programování 2016/17 16 / 42 21. 11. 2016 11:03:29

Příkaz modifikace hodnoty i++; ++i; i--; --i; i += 10; i -= 10; i *= 10; i /= 10; i %= 10; NMIN201 Objektově orientované programování 2016/17 17 / 42 21. 11. 2016 11:03:29

Podmíněný příkaz - podmínka = výraz typu bool v závorkách if (a == 5) b = 17; if (a == 5) b = 17; else b = 18; - relační operátory: ==!= < > <= >= - logické spojky && and (zkrácené vyhodnocování) or (zkrácené vyhodnocování) & and (úplné vyhodnocování) or (úplné vyhodnocování)! not ^ xor NMIN201 Objektově orientované programování 2016/17 18 / 42 21. 11. 2016 11:03:29

For-cyklus - syntaxe: for (inicializace; podmínka pokračování; příkaz iterace) příkaz těla for (int i=0; i<n; i++) a[i] = 3*i+1; - některá sekce může být prázdná (třeba i všechny) (pokud víc příkazů, oddělují se čárkou) NMIN201 Objektově orientované programování 2016/17 19 / 42 21. 11. 2016 11:03:29

Cykly while a do-while - cyklus while stejný jako while-cyklus v Pascalu (podmínka je opět celá v závorce a nepíše se do ) while (podmínka) příkaz; - cyklus do-while má podmínku na konci jako cyklus repeat-until v Pascalu, ale význam podmínky je proti Pascalu obrácený, tzn. dokud podmínka platí, cyklus se provádí do příkaz while (podmínka); - více příkazů v těle cyklu musí být uzavřeno v bloku { } NMIN201 Objektově orientované programování 2016/17 20 / 42 21. 11. 2016 11:03:29

Ukončení cyklu - příkazy break; continue; - stejný význam jako v Pascalu NMIN201 Objektově orientované programování 2016/17 21 / 42 21. 11. 2016 11:03:29

Příkaz switch - analogie pascalského příkazu case - varianta se může rozhodovat podle výrazu celočíselného, podle znaku nebo také stringu - sekce case, za každým case jediná konstanta, ale pro více case může být společný blok příkazů - poslední sekce může být default: - je povinnost ukončit každou sekci case (i sekci default, neboť ta nemusí být uvedena poslední) příkazem break, příp. return nebo goto (pozor: v C, C++, Javě se může propadat mezi sekcemi = zdroj chyb = v C# opraveno) NMIN201 Objektově orientované programování 2016/17 22 / 42 21. 11. 2016 11:03:29

int j, i =...; switch (i) { case 1: i++; break; case 2: case 3: i--; break; default: i=20; j=7; break; } NMIN201 Objektově orientované programování 2016/17 23 / 42 21. 11. 2016 11:03:29

Funkce - pascalské procedury a funkce metody (členské funkce) nějaké třídy - procedura funkce typu void - v deklaraci i při volání vždy píšeme ( ), i když nemá žádné parametry - ve funkci nelze lokálně definovat jinou funkci, strukturu nebo třídu, lze tam ale deklarovat lokální proměnné (ve třídě lze deklarovat jinou třídu ta může mít své metody) NMIN201 Objektově orientované programování 2016/17 24 / 42 21. 11. 2016 11:03:29

Funkce... - mohou vracet i složitější typy - return <hodnota>; definování návratové hodnoty a ukončení funkce v případě funkcí typu void pouze return; - předávání parametrů: standardně hodnotou odkazem specifikátor ref v hlavičce i při volání *) výstupní parametr specifikátor out v hlavičce i při volání (out je také odkazem, nemá ale vstupní hodnotu) NMIN201 Objektově orientované programování 2016/17 25 / 42 21. 11. 2016 11:03:29

Výchozí metoda Main() - plní funkci hlavního programu (určuje začátek a konec výpočtu) - je to statická*) metoda nějaké třídy (nic mimo třídy neexistuje), často se pro ni vytváří samostatná třída - obvykle jediná v aplikaci je tak jednoznačně určeno, kde má začít výpočet - může jich být i více, pak se ale při kompilaci musí přepínačem specifikovat, ze které třídy se má použít Main() při spuštění programu - syntaxe: static void Main(string[] args) NMIN201 Objektově orientované programování 2016/17 26 / 42 21. 11. 2016 11:03:29

Standardní vstup a výstup Console.Read(); vrací int = jeden znak ze vstupu (jeho kód) Console.ReadLine(); vrací string = jeden řádek ze vstupu Console.Write(výraz); vypíše hodnotu zadaného výrazu Console.WriteLine(výraz); vypíše hodnotu zadaného výrazu a odřádkuje NMIN201 Objektově orientované programování 2016/17 27 / 42 21. 11. 2016 11:03:29

Formátovaný výstup Console.WriteLine(string); do stringu se dosadí hodnoty výrazů po řadě na místa vyznačená pomocí {0}, {1}, {2}, atd., případně i s požadovaným formátováním {0:N} Console.WriteLine( abc {0} def {1} ghi {2} jkl, x0, x1, x2 ); NMIN201 Objektově orientované programování 2016/17 28 / 42 21. 11. 2016 11:03:29

using System; using System.Collections.Generic; using System.Text; namespace ConsoleApplication1 { class Program { static void Main(string[] args) { XXXXXXXXXXXXXXXXXXXX } } } NMIN201 Objektově orientované programování 2016/17 29 / 42 21. 11. 2016 11:03:29

Příklad: Eukleidův algoritmus static void Main(string[] args) { Console.WriteLine( "Zadej dvě kladná celá čísla:"); int a = int.parse(console.readline()); int b = int.parse(console.readline()); while (a!= b) if (a > b) a -= b; else b -= a; Console.WriteLine( "Nejv. spol. dělitel: {0}", a); Console.ReadLine(); } NMIN201 Objektově orientované programování 2016/17 30 / 42 21. 11. 2016 11:03:29

Příklady: Prvočíselný rozklad Hornerovo schéma vstup čísla po znacích NMIN201 Objektově orientované programování 2016/17 31 / 42 21. 11. 2016 11:03:29

static void Main(string[] args) { int v; int c; c = Console.Read(); // preskocit ne-cislice: while ((c < '0') (c > '9')) { c = Console.Read(); } // nacitat cislice: v = 0; while ((c >= '0') && (c <= '9')) { v = 10 * v + (c - '0'); c = Console.Read(); } Console.WriteLine(v); Console.ReadLine(); } NMIN201 Objektově orientované programování 2016/17 32 / 42 21. 11. 2016 11:03:29

Dynamicky alokované proměnné - vytvářejí se pomocí zápisu new + konstruktor*) vytvářeného objektu - new je funkce, vrací vytvořenou instanci (ve skutečnosti ukazatel na ni) - v odkazech se nepíšou ^ - string, pole, třídy referenční typy - konstanta null (jako nil v Pascalu) - automatická správa paměti v jazyce není příkaz dispose, nedostupné objekty jsou automaticky uvolněny z paměti (ne nutně úplně okamžitě, až na to bude čas) NMIN201 Objektově orientované programování 2016/17 33 / 42 21. 11. 2016 11:03:29

Příklad prvni = null; // to je korektní zrušení celého spojového seznamu class Uzel { public int info; public Uzel dalsi; } class Program { static void Main(string[] args) { Uzel prvni = new Uzel(); prvni.info = 123; prvni.dalsi = null; //... } } NMIN201 Objektově orientované programování 2016/17 34 / 42 21. 11. 2016 11:03:29

Pole - deklarace: int[] aaa; - referenční typ, je nutné vytvořit pomocí new: int[] aaa = new int[10]; - každé pole je instancí třídy odvozené z abstraktní statické třídy System.Array - indexování vždy od 0 - možnost inicializace: int[] aaa = new int[3] { 2, 6, 8 }; int[] aaa = { 2, 6, 8 }; - počet prvků: aaa.length vždy se provádějí kontroly přetečení mezí při indexování aaa[i] NMIN201 Objektově orientované programování 2016/17 35 / 42 21. 11. 2016 11:03:29

Pole... - připravené metody, např. CopyTo, Sort, Reverse, BinarySearch, Array.Reverse(aaa); - vícerozměrné pole obdélníkové [,] a nepravidelné [][] Nepravidelné dvourozměrné pole je ve skutečnosti pole polí (tzn. pole ukazatelů na řádky, což jsou pole jednorozměrná), - každý řádek je třeba zvlášť vytvořit pomocí new - řádky mohou mít různou délku int[][] aaa = new int[3][]; aaa[0] = new int[4]; aaa[1] = new int[6]; aaa[2] = new int[2]; NMIN201 Objektově orientované programování 2016/17 36 / 42 21. 11. 2016 11:03:29

Příklad: Třídění čísel v poli - přímý výběr static void Main(string[] args) { Console.Write("Počet čísel: "); int pocet = int.parse(console.readline()); int[] a; a = new int[pocet]; int i = 0; while (i < a.length) a[i++] = int.parse(console.readline()); i = 0; while (i < a.length) { int k = i; int j = i+1; while (j < a.length) { NMIN201 Objektově orientované programování 2016/17 37 / 42 21. 11. 2016 11:03:29

} if (a[j] < a[k]) k = j; j++; } if (k!= i) { int x = a[i]; a[i] = a[k]; a[k] = x; } i++; } i = 0; while (i < a.length) Console.Write(" {0}", a[i++]); Console.WriteLine(); NMIN201 Objektově orientované programování 2016/17 38 / 42 21. 11. 2016 11:03:29

Znakový řetězec - deklarace: string sss; - typ string referenční typ, alias pro třídu System.String - vytvoření instance: string sss = "abcdefg"; - nulou ukončené řetězce, nemají omezenou délku - indexování znaků od 0 - délka = sss.length() - obsah nelze měnit (na to je třída StringBuilder) - všechny třídy mají konverzní metodu ToString(), pro struktury a objekty je vhodné předefinovat ji (jinak se vypisuje jenom její jméno) NMIN201 Objektově orientované programování 2016/17 39 / 42 21. 11. 2016 11:03:29

Struktura struct - zjednodušená třída - má podobný význam a použití jako pascalský záznam (record) - navíc může mít metody (jako třída) - může mít i konstruktor (vlastní konstruktor musí inicializovat všechny datové složky, jinak má i implicitní bezparametrický konstruktor) - je to hodnotový typ (na rozdíl od instance třídy se nemusí alokovat) - některá omezení oproti třídám (např. nemůže dědit) NMIN201 Objektově orientované programování 2016/17 40 / 42 21. 11. 2016 11:03:29

struct Bod { } public int x, y; public Bod(int x, int y) { this.x = x; this.y = y; } NMIN201 Objektově orientované programování 2016/17 41 / 42 21. 11. 2016 11:03:29

NMIN201 Objektově orientované programování 2016/17 42 / 42 21. 11. 2016 11:03:29