Principy objektově orientovaného programování



Podobné dokumenty
Teoretické minimum z PJV

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

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

Abstraktní třída a rozhraní

Programování v Javě I. Leden 2008

Třídy a objekty -příklady

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

Abstraktní datové typy: zásobník

Úvod do programovacích jazyků (Java)

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

Vytváření a použití knihoven tříd

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

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

PREPROCESOR POKRAČOVÁNÍ

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

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

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

Generické programování

Class loader. každá třída (java.lang.class) obsahuje referenci na svůj class loader. Implementace class loaderu

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

Stromy. Příklady. Rekurzivní datové struktury. Základní pojmy

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

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

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

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

Objektově orientované programování

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

public class Karel { private int position; public boolean issmiling; public int getposition() { return position;

Jazyk C# (seminář 6)

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

typová konverze typová inference

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

11. Dědičnost. Dědičnost strana 103

Technologie JavaBeans

Správa paměti. doc. Ing. Miroslav Beneš, Ph.D. katedra informatiky FEI VŠB-TUO A-1007 /

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

KTE / ZPE Informační technologie

Java Enum Java, zimní semestr ,2017 1

Typický prvek kolekce pro české řazení

Jazyk C# (seminář 5)

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

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

Více o konstruktorech a destruktorech

OOPR_05. Případové studie

Seminář Java II p.1/43

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

RMI Remote Method Invocation

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

Práce s textem. Třída Character. Třída Character. Třída Character. reprezentuje objekty zapouzdřující hodnotu typu char (boxing / unboxing)

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

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

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

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

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

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

Dědičnost (inheritance)

Reflexe RTTI Runtime Type Identification

Mělká a hluboká kopie

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

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

Stream API. Petr Krajča. Základy programovaní 4 (Java) Katedra informatiky Univerzita Palackého v Olomouci

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

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

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

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

Datové struktury. alg12 1

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

Základy objektové orientace I. Únor 2010

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

7. Datové typy v Javě

Třídy a dědičnost. A0B36PR1-Programování 1 Fakulta elektrotechnická České vysoké učení technické

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

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

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

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

Algoritmizace a programování

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

Java Řetězce Java, zimní semestr

Výčtový typ strana 67

Java Výjimky Java, zimní semestr

Iterator & for cyklus

Soubor jako posloupnost bytů

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

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

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

Přehled probírané látky

Java - výjimky. private void vstup() throws IOException {... }

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.

součet cvičení celkem. známka. Úloha č.: max. bodů: skut. bodů:

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/

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

Objektově orientované programování v PHP 5. Martin Klíma

Neměnné objekty. Tomáš Pitner, upravil Marek Šabo

Třída jako zdroj funkcí

Dědění, polymorfismus

Pokročilé schopnosti OOP

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

10. března 2015, Brno Připravil: David Procházka. Programovací jazyk C++

Připravil: David Procházka. Programovací jazyk C++

Transkript:

Principy objektově orientovaného programování Třídy a objekty doc. Ing. Miroslav Beneš, Ph.D. katedra informatiky FEI VŠB-TUO A-1007 / 597 324 213 http://www.cs.vsb.cz/benes Miroslav.Benes@vsb.cz C E T O Principy OOP 2 Co mají společného? Vlastnosti (stav) souřadnice středu x, y barva obsah, obvod Operace (chování) přesunutí na jinou pozici n-násobné zvětšení a zmenšení vykreslení na obrazovku Vztahy sousedí, překrývají se,... V čem se liší? Druh obrazce čtverec, trojúhelník, elipsa Specifické vlastnosti délka strany čtverce velikosti poloos elipsy Hodnoty vlastností konkrétní souřadnice, barva,... Způsob provedení operací vykreslení na obrazovku Principy OOP 3 Principy OOP 4 1

Grafická reprezentace třídy čitatel jmenovatel Zlomek Jméno třídy Vlastnosti Objekt = instance třídy čitatel jmenovatel Zlomek Zlomek přičti(zlomek jinýzlomek) Zlomek násob(zlomek jinýzlomek) void normalizuj() z1 : Zlomek čitatal = 2 jmenovatel = 3 Zlomek přičti(zlomek jinýzlomek) Zlomek násob(zlomek jinýzlomek) void normalizuj() Operace z2 : Zlomek čitatal = -6 jmenovatel = 4 z3 : Zlomek čitatal = 1 jmenovatel = 2 Principy OOP 5 Principy OOP 6 Třídy v jazyce Java class Zlomek { // instanční proměnné int citatel; int jmenovatel; // metody Zlomek nasob(zlomek jiny) { citatel *= jiny.citatel; jmenovatel *= jiny.jmenovatel; Principy OOP 7 Vytvoření instance třídy public static void main(string[] args) { reference Zlomek z = new Zlomek; // nastavení instančních proměnných z.citatel = 2; z.jmenovatel = 3; // volání metody z.nasob(z); // z *= z Principy OOP 8 2

Jak se instance zruší? Pascal, C, C++ je třeba volat speciální operaci, která uvolní paměť: Pascal: Dispose(ptr) C: free(ptr); C++: delete ptr; Java automatická správa paměti (garbage collector) paměť se uvolní automaticky, pokud na ni neexistuje žádný odkaz Inicializace objektu Zajištění definovaného stavu objektu po jeho vytvoření všechny proměnné objektu se nastaví na nulu je-li uvedena inicializace, provede se nastavení class Test { int x; // poč. hodnota je 0 int y = 10; // poč. hodnota je 10 int m() { int z; // POZOR! zde to neplatí! return z + 1; // chyba neinicializovaná // proměnná z Principy OOP 9 Principy OOP 10 Konstruktor Zajištění inicializace objektu po vytvoření class Zlomek { Zlomek(int citatel, int jmenovatel) { není typ výsledku! this.citatel = citatel; this.jmenovatel = jmenovatel; odkaz na aktuální objekt Zlomek z1 = new Zlomek(3, 4); // ¾ Zlomek z2 = z1.pricti(new Zlomek(1,2)); Principy OOP 11 Příklad int hodnota; Citac() { hodnota = 0; Citac(int pocatek) { hodnota = pocatek; void krok() { hodnota++;... Citac c = new Citac(10); c.krok(); System.out.println(c.hodnota); // 11 Principy OOP 12 3

Jak si hlídat svá data? // veřejné metody public void nastavhodnotu(int nova) { hodnota = nova; public int vrathodnotu() { return hodnota; public void krok() { hodnota++; // soukromá proměnná private int hodnota = 0; Principy OOP 13 Jak si hlídat svá data? class Test { public static void main(string args[]) { Citac c = new Citac(); // c.hodnota = 10; -- není přípustné c.nastavhodnotu(10); c.krok(); System.out.println(c.vratHodnotu()); Principy OOP 14 Statické členy třídy Instanční proměnné a metody jsou vázané vždy na nějaký objekt obj.proměnná, obj.metoda() Proměnné a metody třídy společné pro všechny instance Třída.proměnná, Třída.metoda() označují se klíčovým slovem static static int počet; static void main(string[] args) { Příklad class Test { private static int pocet = 0; // vrátí počet vytvořených instancí třídy public static int pocetinstanci() { return pocet; public Test() { pocet++; Principy OOP 15 Principy OOP 16 4

Dědičnost Čtverec int a Obrazec int x int y presun(x1, y1) Elipsa int a int b Dědičnost class Obrazec { int x, y; void presun(int x, int y) { this.x = x; this.y = y; class Ctverec extends Obrazec { int a; Principy OOP 17 Principy OOP 18 Dědičnost Dědičnost Je-li něco čtverec, pak je to i obrazec Ctverec c = new Ctverec; c.presun(10, 20); // dědí metodu presun() Obrazec o = c; // lze přiřadit Je-li něco obrazec, nemusí to být čtverec Obrazec o = new Ctverec; // o.a = 5; // nepřípustné // Ctverec c = o; // nepřípustné Není-li uvedena bázová třída, použije se java.lang.object String tostring() převod objektu na textovou reprezentaci boolean equals(object obj) porovnání s jiným objektem Object clone() vytvoření kopie objektu Principy OOP 19 Principy OOP 20 5

Zapouzdření prvků třídy Konstruktory a dědičnost Soukromé proměnné/metody private přístupné pouze z vlastních metod Chráněné proměnné/metody protected přístupné i z metod zděděných tříd Veřejné proměnné/metody public přístupné i z metod jiných objektů Principy OOP 21 Konstruktor musí nejprve zavolat zděděný konstruktor zajištění správné inicializace class Obrazec { public Obrazec(int x, int y) { this.x = x; this.y = y; protected int x, y; class Ctverec extends Obrazec { public Ctverec(int x, int y, int a) { super(x, y); this.a = a; protected int a; Principy OOP 22 Konstruktory a dědičnost Není-li zděděný konstruktor zavolán, zajistí se volání implicitního konstruktoru public Citac() { pocet = 1; protected int pocet; class CitacSKrokem extends Citac { public CitacSKrokem(int krok) { // super() -- zavolá se automaticky this.krok = krok; protected int krok; Principy OOP 23 Konstruktory a dědičnost Neexistuje-li žádný konstruktor, vytvoří se prázdný implicitní konstruktor // public Citac() { -- vytvoří se protected int pocet; Jak zajistit, aby nebylo možné vytvořit instanci třídy voláním operátoru new? private Citac() {... Principy OOP 24 6

Úloha na cvičení Vytvořte třídu Complex, která bude reprezentovat komplexní číslo s operacemi sčítání, odčítání a násobení Upravte řešení kvadratické rovnice tak, aby pracovalo s typem Complex Principy OOP 25 7