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

Podobné dokumenty
Generické programování

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

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

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

Dědičnost (inheritance)

PREPROCESOR POKRAČOVÁNÍ

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

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

Principy objektově orientovaného programování

Seminář Java II p.1/43

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

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

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

Jazyk C# (seminář 3)

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

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

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

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

Teoretické minimum z PJV

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

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

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

Objektové programování

Základy objektové orientace I. Únor 2010

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

Programování v C++ 3, 3. 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.

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

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

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

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

KTE / ZPE Informační technologie

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

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

Výčtový typ strana 67

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

Úvod do programovacích jazyků (Java)

Jazyk C# (seminář 6)

typová konverze typová inference

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

Úvod do programovacích jazyků (Java)

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/

přetížení operátorů (o)

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

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

20. Projekt Domácí mediotéka

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

Programování v Javě I. Leden 2008

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

Viditelnost (práva přístupu) Tomáš Pitner, upravil Marek Šabo

Více o konstruktorech a destruktorech

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

1. Programování proti rozhraní

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

Abstraktní třída a rozhraní

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

Dědění, polymorfismus

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

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

Pokročilé programování v jazyce C pro chemiky (C3220) Třídy v C++

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

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

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

State. Známý jako. Účel. Použitelnost. Stav, Object for States. umožňuje objektu měnit svoje chování v závislosti na stavu objekt mění svou třídu

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

Abstraktní datové typy: zásobník

Mnohotvarost (polymorfizmus)

Algoritmizace a programování

Konstruktory a destruktory

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

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

Sada 1 - Základy programování

Chování konstruktorů a destruktorů při dědění

IW5 - Programování v.net a C# 4 Pokročilé konstrukce C#

Ukazka knihy z internetoveho knihkupectvi

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

Objekty jako zapozdření dat. začneme vytvářet vlastní objekty a třídy

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

Kolekce, cyklus foreach

Jazyk C++ I. Šablony 2

Jakub Čermák Microsoft Student Partner

Objektově orientované programování

Jazyk C++ I. Šablony

Java Výjimky Java, zimní semestr

7. Datové typy v Javě

24. listopadu 2013, Brno Připravil: David Procházka

Programování v jazyce C a C++

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

Programovací jazyk Java

1. Dědičnost a polymorfismus

Objektově orientované programování

Jazyk C# a platforma.net

Zpracoval:

Jazyk C# (seminář 5)

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

Jazyk C++ II. Šablony a implementace

1 Nejkratší cesta grafem

Algoritmizace a programování

Objektově orientované programování 1 XOBO1. Autor: Doc. Ing. František Huňka, CSc.

Transkript:

Úvod do předmětu OOP Objekt Proč OOP? Literatura, osnova předmětu viz. cvičení Základní prvek OOP sw inženýrství = model reálných objektů (věcí) člověk, auto, okno (ve windows), slovník, = model abstraktní věci: objednávka, účet u telefonní společnosti, atd. Procedurální programování: o Globální data (v Main()) a funkce s nimi manipulující nepřehledné // Příklad: dva slovníky static void Main(string[] args) string[] czde_cz; string[] czde_de; string[] czen_cz; string[] czen_en; int czenpocetslov; int czdepocetslov; static void PridejSlovicko(string[] kamcz, string kamjazyk2[], string cz, string j2, ref int pocetslov) // kod metody static void SetrigSlovnik(bool jazyk, string[] cz, string j2[], int pocetslov) // kod metody OOP o Sjednocení dat a funkcí pod jednu střechu objekt o Objekt = black box: Pro práci není nutné vidět vnitřní funkčnost komunikace prostřednictvím definovaného rozhraní (sw = Metody) Změna vnitř implementace nezpůsobí kolaps programu Třída = šablona pro vytvoření objektu (popisuje jej) Příklad: o Formička na cukroví = třída o Jednotlivé kousky cukroví z formičky = objekty Atributy = Charakteristiky (stav) objektu Objekt člověk : Váha, výška, věk, pohlaví 1

Metody Objekt účet u telefonní společnosti : tarif, provolané minuty, splaceno / nesplaceno, zákazník (= také objekt) Určují chování objektů Třídy a objekty v C# 1. Definice třídy 2. Vytvoření proměnné od třídy = objekt = instance třídy Atributy = proměnné (členské proměnné) (příklad není funkční) // definice tridy int atribut; int atribut2; void Metoda() Console.WriteLine("Ahoj"); static void Main(string[] args) Trida objekt = new Trida(); Trida jinyobjekt = new Trida(); objekt.atribut = 10; jinyobjekt.atribut = 55; objekt.metoda(); // vytvoreni objektu // manipulace s atributem // objekt se projevuje Dále člen třídy = vše, co je uvnitř (definice) třídy (atributy, metody, ) Jak to vypadá v paměti? o Každý objekt má svou verzi atributů, metody jsou společné: objekt jinyobjekt Data atr1 atr2 atr1 atr2 Program Metoda() Zapouzdření (encapsulation) 1. Integrace atributů a metod pod jednu střechu (objekt) širší smysl 2. = ochrana konzistence objektu před nechtěnou manipulací zvenčí užší smysl Provedení: modifikátory přístupu + kódová zeď (metody, properties viz. později) Modifikátory přístupu Určuje, jaká část programu má ke členům třídy přístup o public = veřejný, člen je vidět zvenčí třídy o private = soukromý, člen není vidět zvenčí 2

o protected viz dědičnost později není uveden = private private int atribut; public void Metoda() Console.WriteLine("Ahoj"); static void Main(string[] args) Trida objekt = new Trida(); objekt.atribut = 10; objekt.metoda(); // CHYBA: přístup k private položce Kódová zeď error CS0122: Trida.atribut' is inaccessible due to its protection level přímá manipulace s atributy je nebezpečná nelze zaručit konzistenci objektu public int vek; franta.vek = -10238; //??? zásada: žádný atribut přímý přístup (vše private), jen pomocí metod o nastavení atributu set metoda, setter, např. SetVek() o čtení hodnoty atributu get metoda, getter, např. GetVek() dle metod pro přístup k atributům: o atribut pro čtení i zápis setter + getter o atribut jen pro čtení jen getter o atribut jen pro zápis jen setter, nedělat, svědčí o špatném návrhu!!! private int vek; public void SetVek(int v) vek = v; public int GetVek() return vek; Osoba franta = new Osoba(); franta.setvek(50); Console.WriteLine(franta.GetVek()); Vlastnosti (properties) náhrada Set a Get metod 3

filosofie: Vlastnost = metoda uvnitř, přístup k atributu přímo (jako k proměnné) Vlastnost = metoda, uvnitř dva (jeden) spec. blok Zásada: jméno Vlastnosti = jméno atributu, jen s velkým písmenem private int vek; public int Vek get return vek; set vek = value; Osoba franta = new Osoba(); franta.vek = 50; Console.WriteLine(franta.Vek); Pouze get = Vlastnost jen pro čtení // vlastnost jen pro cteni private double suma; public double Suma get return suma; Dopředu: Vlastnost = metoda, lze static, virtual / override, abstract Již používáme Length u polí V BCL.NET kombinace Vlastnosti + Set a Get metod Vlastnost lze vytvořit od jakéhokoli datového typu i polí, tříd, výčtů private int[] pole = new int[10]; public int[] Pole get return pole; set pole = value; Trida objekt = new Trida(); objekt.pole[5] = 20; Console.WriteLine(objekt.Pole[0]); Vedlejší efekty při manipulaci s atributy 4 // inicializace viz. pozdeji Náhrada přímého přístupu k atributu metodou lze před nastavením (čtením) provést další operace, např. kontrola hodnoty, převod na jiné jednotky // Vlastnost s 2x vedlejsim efektem private double castka;

public double Castka get return castka; set if (castka > 0.0) castka = value; suma += castka; Reference this = odkaz na aktuální instanci třídy ( sebe samu ) Výhodné použití: o zamezení konfliktu identifikátorů: private int vek; public void SetVek(int vek) this.vek = vek; // this musí být o Zpřehlednění programu (odlišení členských proměnných od lokálních proměnných v dlouhých metodách) int a, b, s, x; public void Metoda(double c, int u) int k; this.a = c + 2 * this.s; // this nemusí být k = this.x + u; o Generování událostí (viz později předává se odkaz na původce události) Udalost(this, new EventArgs()); Lze použít jen uvnitř třídy (při její definici logické) this = odkaz na instanci nelze použít na statické členy (viz později) Vznik objektů Konstruktor Při vzniku objekt nutné (obvykle) provést jeho počáteční nastavení Způsoby: o Konstruktory o Přímá inicializace atributů 5

= public metoda volaná automaticky při deklaraci objektu (vznik objektu), účel = nastavení objektu do výchozího stavu Stejný název jako třída, nesmí nic vracet (ani void), může mít parametry o Bezparametrický konstruktor public Trida() atr1 = 10; atr2 ="text"; Trida objekt = new Trida() ; o Konstruktor s parametry Volání konstruktoru public Trida(int atr1, string atr2) this.atr1 = atr1; this.atr2 = atr2; Trida objekt = new Trida(10, "text"); není nutné jej definovat potom překladač vytvoří implicitně bezparametrický konstruktor, který nic nedělá lze jej přetížit double[] pole; public Trida() // prideli objektu vychozi funkcnost atr1 = 10; atr2 = "text"; pole = new double[100]; public Trida(int atr1, string atr2) this.atr1 = atr1; this.atr2 = atr2; pole = new double[100]; // nebo si ji urci uzivatel 6

o důvody využití možnost nabídnout uživateli více možností využití třídy o příklad v.net: Přímá inicializace atributů StreamWriter(Stream) StreamWriter(String) StreamWriter(String, Boolean) StreamWriter(String, Boolean, Encoding) StreamWriter(String, Boolean, Encoding, Int32) // a další = inicializace proměnných v deklaraci výhodné při několika přetížených konstruktorech nemusím psát několikrát zásady: o do konstruktoru jenom to, co je známo až při vzniku objektu o vše ostatní přímo v deklaracích atributů min. příklad lépe: double[] pole = new double[100]; public Trida(int atr1, string atr2) this.atr1 = atr1; this.atr2 = atr2; např. v C++ nelze 7