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

Podobné dokumenty
Indexové seznamy. známe už pole, kde ale musí být předem známa velikost indexové seznamy umí růst dynamicky

Tabulková data. budeme pracovat s CSV soubory položky oddělené středníkem, např.

Nejzajímavější jsou události MouseDown a KeyDown.

Př. program s popojíždějícím autíčkem o 50 pixelů při každém stisku Popojeď

Pokročilá práce s proměnnými

POLE. - datová struktura ze složek stejného typu, ke kterým se přistupuje pomocí indexů

Jazyk C# a platforma.net

Metodický list k didaktickému materiálu

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

Programování jako nástroj porozumění matematice (seriál pro web modernivyuka.cz)

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

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

Pro kontrolu správného formátu hodnoty N použijeme metodu try-catch.

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

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

Programování jako nástroj porozumění matematice (seriál pro web modernivyuka.cz)

Programování jako nástroj porozumění matematice (seriál pro web modernivyuka.cz)

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

Druhy souborů. textové. binární. nestrukturované txt strukturované - ini, xml, csv. veřejné bmp, jpg, wav proprietární docx, cdr, psd

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

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

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

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

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

Jazyk C# a platforma.net

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

Takto chápanému druhu objektů se říká TŘÍDA.

Jazyk C# - přístup k datům

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

Středoškolská technika 2017 PROGRAM NA GENEROVÁNÍ PRVOČÍSEL

Větvení programů příkaz IF

Jazyk C# - přístup k datům

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

Jazyk C# - přístup k datům

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

Podmíněné vykonávání

Desetinná čísla. pro celá čísla jsme používali typ int. pro desetinná čísla používáme typ double

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

Jazyk C# (seminář 5)

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

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

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

Klíčové pojmy: Události, handlery, třída Graphics, pera, stětce, kreslení vyplněných a nevyplněných objektů.

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

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

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

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

Metodický list k didaktickému materiálu

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

Náhodná a pseudonáhodná čísla

Středoškolská odborná činnost. Obor SOČ: 1. Matematika a statistika GRAFY FUNKCÍ

Tvorba programů s GUI v C#

PREPROCESOR POKRAČOVÁNÍ

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

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

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

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

Metodický list k didaktickému materiálu

Generické programování

Zápis programu v jazyce C#

UŽIVATELSKÉ ROZHRANÍ WINDOWS-FORM DESKTOPOVÉ APLIKACE - CVIČENÍ

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

KTE / ZPE Informační technologie

Zásady kreslení Kreslení na obrazovku 139

Předdefinované dialogy

Objektově orientované programování

Aplikace pro vykreslování grafů elementárních funkcí

zapište obslužnou metodu události Click tlačítka a vyzkoušejte chování polevýsledek.text = polečíslo1.text + polečíslo2.text;

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

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

Metodický list k didaktickému materiálu

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

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

Dědičnost (inheritance)

<surface name="pozadi" file="obrazky/pozadi/pozadi.png"/> ****************************************************************************

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

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

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.

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

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

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

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

URČITÝM ZPŮSOBEM PODOBNÉ

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

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

Jazyk C# (seminář 6)

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

Programovací jazyk Java

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.

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/

OOPR_05. Případové studie

Univerzita Palackého v Olomouci Radek Janoštík (Univerzita Palackého v Olomouci) Základy programování 4 - C# 19.2.

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

Kolekce, cyklus foreach

Datové struktury. alg12 1

7. Datové typy v Javě

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

Jazyk C# (seminář 7)

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

20. Projekt Domácí mediotéka

Transkript:

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

Rekapitulace Každý objekt obsahuje: (např. okno programu) proměnné polejméno, tlačítkoodeslat vlastnosti Text, MinimizeBox, BackColor události Load, Paint metody Close, Refresh

Zapouzdření zapouzdření seskupení logicky souvisejících proměnných do jednoho celku (objektu) př. starší program s panáčkem v programu tři proměnné obrázekpanáčka, xpanáčka, ypanáčka zapouzdřením schováme tyto proměnné do jediného objektu panáček díky příslušnosti k objektu už nemusíme v názvu řešit příslušnost stačí značení: obrázek, x, y efekt ještě lépe vynikne, když budeme mít v programu panáčků třeba dvacet bez zapouzdření 3 x 20 = 60 proměnných panáček obrázek x y

Projekt > Přidat třídu název: Panáček.cs using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Drawing; namespace WindowsFormsApplication4 class Panáček public int x, y; public Image obrázek; Vytvoření třídy

Modifikátor přístupu klíčové slovo public před definicí proměnných označuje, že s danou proměnnou lze pracovat z kterékoliv části programu použití static zajistí, že s proměnnou lze pracovat pouze zevnitř objektu samotného, ale nikoliv zvenčí

Práce s instancí panáčka vytvoříme novou instanci klasicky pomocí konstruktoru new Panáček() v Loadu okna public partial class oknoprogramu : Form Panáček petr; public oknoprogramu() InitializeComponent(); private void oknoprogramu_load(object sender, EventArgs e) petr = new Panáček(); petr.x = 50; petr.y = 100; petr.obrázek = Properties.Resources.panacek;

zbytek programu private void oknoprogramu_keydown(object sender, KeyEventArgs e) switch (e.keycode) case Keys.Left: petr.x -= 5; case Keys.Righ: petr.x += 5; case Keys.Up: petr.y -= 5; case Keys.Down: petr.y += 5; Refresh(); private void oknoprogramu_paint(object sender, PaintEventArgs e) Graphics kp = e.graphics; kp.drawimage(petr.obrázek, petr.x, petr.y);

Tři panáčci modifikujeme předchozí příklad budou tři panáčci Dlouhý, Široký, Poloslepý vždy jeden aktivní přepínání klávesami D, S a P přemýšlejte, jak blbě by se to programovalo bez zapouzdření dat

public partial class oknoprogramu : Form Panáček dlouhý, široký, poloslepý; Panáček aktivní;.. private void oknoprogramu_load(object sender, EventArgs e) // Připrav Dlouhého dlouhý = new Panáček(); dlouhý.x = 30; dlouhý.y = 50; dlouhý.obrázek = Properties.Resources.postavička_Dlouhý; // Připrav Širokého široký = new Panáček(); široký.x = 120; široký.y = 40; široký.obrázek = Properties.Resources.postavička_Široký; // Připrav Poloslepého (inicializací objektu) poloslepý = new Panáček() x = 70, y = 180, obrázek = Properties.Resources.postavička_Poloslepý; // Po startu programu půjdou klávesy ke Dlouhému aktivní = dlouhý;

private void oknoprogramu_paint(object sender, PaintEventArgs e) Graphics kp = e.graphics; kp.drawimage(dlouhý.obrázek, dlouhý.x, dlouhý.y); kp.drawimage(široký.obrázek, široký.x, široký.y); kp.drawimage(poloslepý.obrázek, poloslepý.x, poloslepý.y); private void oknoprogramu_keydown(object sender, KeyEventArgs e) switch (e.keycode) // Aktivace příslušného panáčka case Keys.D: aktivní = dlouhý; case Keys.D3: // š je jako trojka case Keys.S: // š jako s (pro ignoranty češtiny) aktivní = široký; case Keys.P: aktivní = poloslepý; // Šipky - pohyb case Keys.Left: aktivní.x -= 5; case Keys.Right: aktivní.x += 5; case Keys.Up: aktivní.y -= 5; case Keys.Down: aktivní.y += 5; Refresh();

Výčtový typ enum Pohlaví Muž, Žena ; -------------------------------------------- namespace Zákazník_jako_objekt enum Pohlaví Muž, Žena ; Třída Zákazník class Zákazník public int číslo; public string příjmení; public string jméno; public Pohlaví pohlaví; public int roknarození; public string místobydliště; public double obratcelkem; public double obratposlední;

private void tlačítkoprocházetvýchozí_click(object sender, EventArgs e) if (oknootevřenísouboru.showdialog() == DialogResult.OK) polevýchozí.text = oknootevřenísouboru.filename; private void tlačítkoprocházetvýsledný_click(object sender, EventArgs e) if (oknouloženísouboru.showdialog() == DialogResult.OK) polevýsledný.text = oknouloženísouboru.filename; private void tlačítkovyber_click(object sender, EventArgs e) // Otevření souborů StreamReader výchozí = new StreamReader(poleVýchozí.Text, Encoding.Default); StreamWriter výsledný = new StreamWriter(poleVýsledný.Text, false, Encoding.Default); // Přeskoč první řádek (se záhlavím) výchozí.readline(); // Zapiš správné záhlaví výsledný.writeline("číslo zákazníka;příjmení;jméno"); // Inicializace objektu zákazník Zákazník zákazník = new Zákazník() číslo = Convert.ToInt32(hodnoty[0]), příjmení = hodnoty[1], jméno = hodnoty[2], roknarození = Convert.ToInt32(hodnoty[4]), místobydliště = hodnoty[5], obratcelkem = Convert.ToDouble(hodnoty[6]), obratposlední = Convert.ToDouble(hodnoty[7]) ; if (hodnoty[3].tolower() == "muž") zákazník.pohlaví = Pohlaví.Muž; else zákazník.pohlaví = Pohlaví.Žena; // Ženy ročník 1970 a starší do výsledného souboru if (zákazník.pohlaví == Pohlaví.Žena && zákazník.roknarození <= 1970) výsledný.writeline(zákazník.číslo.tostring() + ";" + zákazník.příjmení + ";" + zákazník.jméno); // Čtení z výchozího, vyhodnocení a případný zápis do výsledného string řádek; while ((řádek = výchozí.readline())!= null) // Rozbití řádku na jednotlivé hodnoty string[] hodnoty = řádek.split(';'); // Zavření obou souborů výchozí.close(); výsledný.close(); MessageBox.Show("HOTOVO!");

Př. myšince pomocí třídy Bod. class Bod public int x, y; -------------------------------------------------------------------------------------- namespace Myšince public partial class oknoprogramu : Form List<Bod> myšince = new List<Bod>(); int šířkamyšince = 5, výškamyšince = 2; Color barvamyšince = Color.Black; public oknoprogramu() InitializeComponent(); private void oknoprogramu_mousedown(object sender, MouseEventArgs e) Bod bod = new Bodx = e.x, y = e.y; myšince.add(bod); Refresh(); private void oknoprogramu_paint(object sender, PaintEventArgs e) Graphics kp = e.graphics; Brush štětec = new SolidBrush(barvaMyšince); foreach (Bod m in myšince) int xlh = m.x - šířkamyšince / 2; int ylh = m.y - výškamyšince / 2; kp.fillrectangle(štětec, xlh, ylh, šířkamyšince, výškamyšince);