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

Podobné dokumenty
Generické programování

PREPROCESOR POKRAČOVÁNÍ

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

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

Dědičnost (inheritance)

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

Principy objektově orientovaného programování

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

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

Výčtový typ strana 67

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

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

Seminář Java II p.1/43

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

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

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

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

Jazyk C++ I. Šablony 2

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

KTE / ZPE Informační technologie

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

Jazyk C# (seminář 6)

Více o konstruktorech a destruktorech

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

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

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

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

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

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/

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

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

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

Jazyk C# (seminář 3)

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

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

Zápis programu v jazyce C#

1. Programování proti rozhraní

Abstraktní třída a rozhraní

Datové struktury. alg12 1

Teoretické minimum z PJV

Pokud neuvedeme override, vznikne v synu nová (nevirtuální) metoda (a pochopitelně se nezavolá, jak bychom

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

OOPR_05. Případové studie

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

Abstraktní datové typy: zásobník

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

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.

Java - řazení objektů

Programování II. Návrh programu I 2018/19

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

OOPR_05. Případové studie

Úvod do programovacích jazyků (Java)

Programování v Javě I. Leden 2008

Jazyk C# přednáška 01. Fakulta elektrotechniky a informatiky Univerzita Pardubice 2014/2015

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

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

Pokročilé programování v jazyce C pro chemiky (C3220) Operátory new a delete, virtuální metody

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

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

Typický prvek kolekce pro české řazení

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

Tabulka symbolů. Vazba (binding) Vazba - příklad. Deklarace a definice. Miroslav Beneš Dušan Kolář

5 Rekurze a zásobník. Rekurzivní volání metody

Základní pojmy. Matice(řádky, sloupce) Matice(4,6) sloupce

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

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

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

1 Nejkratší cesta grafem

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

III/2 Inovace a zkvalitnění výuky prostřednictvím ICT

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

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

Uklízení odpadků a analýza úniku

Dědění, polymorfismus

Třídy a objekty. Třídy a objekty. Vytvoření instance třídy. Přístup k atributům a metodám objektu. $z = new Zlomek(3, 5);

Objektově orientované programování

Mělká a hluboká kopie

SOUBORY, VSTUPY A VÝSTUPY POKRAČOVÁNÍ

Dalším příkladem může být například výstup dat na různá zařízení, souborů, grafických rozhraní, sítě atd.

20. Projekt Domácí mediotéka

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

IUJCE Přednáška č. 11. další prvky globální proměnné, řízení viditelnosti proměnných, funkcí

SOUBORY, VSTUPY A VÝSTUPY POKRAČOVÁNÍ

Soubor jako posloupnost bytů

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

ADT/ADS = abstraktní datové typy / struktury

Jazyk C++ I. Šablony

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

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

1. Dědičnost a polymorfismus

URČITÝM ZPŮSOBEM PODOBNÉ

Bridge. Známý jako. Účel. Použitelnost. Handle/Body

Přehled probírané látky

Projekty pro výuku programování v jazyce Java

Základy objektové orientace I. Únor 2010

Polymorfismus. Časová náročnost lekce: 3 hodiny Datum ukončení a splnění lekce: 30.března

Projekt Obrázek strana 135

Objektově orientované programování

7. Statické prvky třídy

Transkript:

Objekt jako proměnná Objekty a metody Objekt = proměnná referenčního typu vznik pomocí new, chování viz pole jako referenční proměnná minulý semestr Stack Heap objekt ref this 10 20 atr1 atr2 jinyobjekt ref this 187-33 1 atr1 atr2 Objekt může být parametrem metod a návratovou hodnotou (samozřejmé) Referenční proměnné volány odkazem (viz pole min. semestr) Příklad: class T1 private int cislo; public int Cislo get return cislo; set cislo = value; public T1(int cislo) this.cislo = cislo; public void Tisk() Console.WriteLine(this.cislo); public int Dvojnasobek() return 2 * this.cislo; class Program // objekt jako parametr static int Metoda(T1 o) o.tisk(); return o.dvojnasobek(); // objekt jako navratova hodnota static T1 Vytvor() T1 temp = new T1(10); return temp; // vyuziti volani odkazem objekt je menen v metode static void Zmen(ref T1 o) // ref neni nezbytne nutne

o.cislo = 10; static void Main(string[] args) T1 o1 = new T1(555); int x = Metoda(o1); T1 o2 = Vytvor(); Zmen(ref o2); Pole objektů Zcela bez problémů, pouze pozor na neinicializované proměnné T1[] poleobjektu = new T1[3]; poleobjektu[0] = new T1(10); T1 o3 = new T1(-444); poleobjektu[1] = o3; poleobjektu[1].tisk(); poleobjektu[2].cislo = 10; Zánik objektů // Error, poleobjektu[2] je zatím null opak konstruktoru = destruktor = metoda volaná při zániku objektu V C# objekty odstraňuje automatická správa paměti okamžik není přesně determinován Garbage Collector volá periodicky.net (cca každých 10 ms) o Běh programu je zastaven o Veškerá data, na která nevede odkaz, jsou z paměti odstraněna int a; Trida objekt1 = new Trida(); if (a > 10) double b; Trida objekt2 = new Trida(); // nejaky kod // končí: referenční proměnná objekt2, b // nejaky kod objekt1 = null; // příští GC = odstranění objekt1 // končí: a 2

Statické členy = člen, který se pojí se třídou (ne s instancí) objekt ke statickým členům nemá přístup Označeny static Atributy, Metody, Vlastnosti Typický příklad: počítání počtu vytvořených instancí class Zamestnanec string jmeno; public Zamestnanec(string jmeno) this.jmeno = jmeno; pocetcelkem++; public static int pocetcelkem; // public jen pro tuto ukazku! Zamestnanec zednik = new Zamestnanec("Franta Vomacka"); // pc = 1 Zamestnanec skladnik = new Zamestnanec("Alfonz Mucha"); // pc = 2 Console.WriteLine(zednik.pocetCelkem); // CHYBA Console.WriteLine(Zamestnanec.pocetCelkem); // OK Příklad statické metody (doplnění min. příkladu) class Zamestnanec string jmeno; public Zamestnanec(string jmeno) this.jmeno = jmeno; pocetcelkem++; private static int pocetcelkem; public static int GetPocet() return pocetcelkem; Zamestnanec zednik = new Zamestnanec("Franta Vomacka"); Zamestnanec skladnik = new Zamestnanec("Alfonz Mucha"); Console.WriteLine(Zamestnanec.GetPocet()); // 2 o Lepší řešení statická Vlastnost private static int pocetcelkem; public static int PocetCelkem get return pocetcelkem; Console.WriteLine(Zamestnanec.PocetCelkem); Nelze použít this (logické) Konstruktory Účelem je provést prvotní nastavení, společné pro všechny instance, např.: 3

o připojení ke sdílenému prostředku databázi, komunikačnímu rozhraní (sériový port, síť, apod.) o pokud objekty zapisují např. informace do společného souboru, tak statický konstruktor jej otvírá omezení: o nesmí mít parametry ani přístupový modifikátor o nelze jej přímo zavolat to proběhne automaticky někdy těsně před vytvořením první instance nebo před použitím prvního statického členu okamžik volání nemá uživatel pod kontrolou Výchozí konstruktor má každá třída v případě, že nedefinujeme vlastní Příklad: class Trida public Trida() Console.WriteLine("Instancni ctor"); static Trida() Console.WriteLine("Static ctor"); Trida o = new Trida(); o Vytiskne: Čistě statické třídy Instancni ctor Static ctor Obsahují pouze statické členy nelze vytvořit instanci (nemělo by jít) V.NET např. Console, Math možnosti zamezení vytvoření instance: o označit třídu jako static doporučeno o privátní konstruktor více viz. MSDN Skládání tříd Třída jako atribut jiné třídy Vztah má např. auto má motor class Motor double vykon; public Motor(double vykon) this.vykon = vykon; public void Nastartuj() 4

public double NastavSkrKlapku(double pozice) // 0-1 = 0-100% return vykon * pozice; // vraci aktualni vykon motoru dle nastaveni plynu class Auto int pocetmist; public Motor motor; // public aby motor byl vidět zvenčí Auta public Auto(int pocetmist, double vykon) this.pocetmist = pocetmist; motor = new Motor(vykon); Auto mojeauto = new Auto(5, 85); mojeauto.motor.nastartuj(); mojeauto.motor.nastavskrklapku(1); Problém: skutečné auto nemá přístupný motor zvenčí o motor skryjeme pod ovladače auta // Trida Motor je stejna class Auto int pocetmist; private Motor motor; public Auto(int pocetmist, double vykon) this.pocetmist = pocetmist; motor = new Motor(vykon); public void Nastartuj() motor.nastartuj(); public void NastavPlyn(double pozice) motor.nastavskrklapku(pozice); Auto mojeauto = new Auto(5, 85); mojeauto.nastartuj(); mojeauto.nastavplyn(1); Třída obsahuje definici jiné třídy definici třídy lze umísti dovnitř definice jiné třídy // s motorem primo nebudeme manipulovat vnořené třídě lze přiřadit specifikátor přístupu: o public class Trida vnořená třída bude přístupná mimo svoji mateřskou třídu o private class Trida nebude Příklad: 5

class Trida public void Metoda() + public class VnorenaTrida int atribut; public VnorenaTrida(int atribut) this.atribut = atribut; public int GetAtribut() return atribut; Trida.VnorenaTrida objekt = new Trida.VnorenaTrida(10); Console.WriteLine(objekt.GetAtribut()); // přístup ke členům třídy je již normální Málokdy využívané, to samé platí ovšem i pro enum, struct (později) class KvadratickaRovnice public enum TypKorenu realne, nasobny, cmplx // mimo tuto třídu nemá jinak smysl public KvadratickaRovnice(double a, double b, double c) public TypKorenu Vypocti(out double k1, out double k2) KvadratickaRovnice polynom = new KvadratickaRovnice(10, -3, 185); KvadratickaRovnice.TypKorenu typvysledku = polynom.vypocti(out x1, out x2); o (Třída je špatně navržena lepší: a, b, c jako Vlastností) 6