Základy objektové orientace I. Únor 2010

Podobné dokumenty
Úvod do softwarového inženýrství IUS 2009/2010 p.1/42

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

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

Generické programování

Seminář Java II p.1/43

typová konverze typová inference

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

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

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

Objektově orientovaný přístup

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.

Dědění, polymorfismus

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

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

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

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

Programování II. Třídy a objekty (objektová orientovanost) 2018/19

1. Dědičnost a polymorfismus

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

Využití OOP v praxi -- Knihovna PHP -- Interval.cz

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

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

Teoretické minimum z PJV

6 Objektově-orientovaný vývoj programového vybavení

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

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

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

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

PREPROCESOR POKRAČOVÁNÍ

Abstraktní třída a rozhraní

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

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

7.5 Diagram tříd pokročilé techniky

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

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

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

Objektové programování

7.5 Diagram tříd pokročilé techniky

Objektově orientované programování. Úvod

Principy objektově orientovaného programování

Programování II. Dědičnost změna chování 2018/19

Objektově orientované programování v jazyce Python

Semin aˇr Java N avrhov e vzory Radek Ko ˇc ı Fakulta informaˇcn ıch technologi ı VUT Duben 2009 Radek Koˇc ı Semin aˇr Java N avrhov e vzory 1/ 25

Více o konstruktorech a destruktorech

Programování II. Polymorfismus

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

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

Objektově orientované programování v jazyce Python

Programování II. Abstraktní třída Vícenásobná dědičnost 2018/19

Tento studijní blok má za cíl pokračovat v základních prvcích jazyka Java. Konkrétně bude věnována pozornost rozhraním a výjimkám.

3. Je defenzivní programování technikou skrývání implementace? Vyberte jednu z nabízených možností: Pravda Nepravda

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

2005/2006. Seminář Java I p.1/48

Konstruktory a destruktory

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

Tvorba informačních systémů

Výčtový typ strana 67

Struktura třídy, operátory, jednoduché algoritmy, junit. Programování II 2. cvičení Alena Buchalcevová

PB161 Základy OOP. Tomáš Brukner

Úvod do programovacích jazyků (Java)

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

Seminář Java IV p.1/38

Vyřešené teoretické otázky do OOP ( )

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

1. Programování proti rozhraní

7.3 Diagramy tříd - základy

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

Klíčová slova: OOP, konstruktor, destruktor, třída, objekt, atribut, metoda

Objektově orientované programování

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

OBJEKTOVĚ ORIENTOVANÉ PROGRAMOVÁNÍ

PB přednáška (21. září 2015)

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

Dynamicky vázané metody. Pozdní vazba, virtuální metody

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

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

Semin aˇr Java N avrhov e vzory Radek Ko ˇc ı Fakulta informaˇcn ıch technologi ı VUT Duben 2008 Radek Koˇc ı Semin aˇr Java N avrhov e vzory 1/ 24

Programování v Javě I. Leden 2008

7.3 Diagramy tříd - základy

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

specifikuje vytvářené objekty pomocí prototypické instance nový objekt vytváří kopírováním prototypu

Objekty, třídy, vazby 2006 UOMO 30

Třída. Atributy. Operace

Diagramy tříd - základy

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

Dědičnost (inheritance)

20. Projekt Domácí mediotéka

OMO. 4 - Creational design patterns A. Singleton Simple Factory Factory Method Abstract Factory Prototype Builder IoC

Jazyk C# (seminář 6)

Obsah. October 2, Polymorfizmus. Typologie testování. Problém polymorfizmu. Vady/Anomálie. Vazební sekvence ČVUT FEL, K13132

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

Objekty v PHP 5.x. This is an object-oriented system. If we change anything, the users object.

Jazyk C++ I. Šablony 2

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

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

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

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

Dědičnost. seskupování tříd do hierarchie. potomek získá všechny vlastnosti a metody. provádí se pomocí dvojtečky za názvem třídy.

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.

KTE / ZPE Informační technologie

Transkript:

Seminář Java Základy objektové orientace I Radek Kočí Fakulta informačních technologií VUT Únor 2010 Radek Kočí Seminář Java Základy OO (1) 1/ 20

Téma přednášky Charakteristika objektově orientovaných systémů Třída, objekt, objektové rozhraní Abstrakce, zapouzdření Vytváření objektů, konstruktory Radek Kočí Seminář Java Základy OO (1) 2/ 20

Základy objektové orientace Objektově orientovaný přístup abstrakce řešené domény na základě vyhledávání podobností objekty objekt = sloučení dat a funkcionality do uzavřené jednotky aplikace je chápána jako kolekce vzájemně komunikujících objektů Radek Kočí Seminář Java Základy OO (1) 3/ 20

Objektově orientované jazyky Rozlišujeme dva typy jazyků Prototypově založené (prototype-based) pracuje se pouze s objekty nové objekty se vytvářejí klonováním již existujících objektů existuje alespoň jeden počáteční objekt (prototyp) Self, JavaScript,... Třídně založené (class-based) nalezené objekty jsou klasifikovány do tříd Smalltalk, Java, C++, C#,... Radek Kočí Seminář Java Základy OO (1) 4/ 20

Objektová orientace Třída vzor popisující strukturu a chování objektů stejného druhu množina objektů stejného druhu deklaruje proměnné (atributy) a metody objektu může deklarovat proměnné (atributy) a metody třídy Objekt instance třídy objekty mají vlastní data (atributy) kopie objekty sdílí chování metody Radek Kočí Seminář Java Základy OO (1) 5/ 20

Vlastnosti objektu a třídy Vlastnosti objektů je třeba deklarovat proměnné jsou nositeli "pasivních" vlastností, charakteristik objektů datové hodnoty svázané (zapouzdřené) v objektu metody jsou nositeli "výkonných" vlastností, "dovedností" objektů v podstatě funkce (procedury) pracující primárně s proměnnými "mateřského" objektu může mít další parametry (argumenty metody) může vracet hodnotu Programování v Javě spočívá ve vytváření tříd, neexistují metody a atributy deklarované mimo třídy. Radek Kočí Seminář Java Základy OO (1) 6/ 20

Základy objektové orientace Vlastnosti objektové orientace Abstrakce (abstraction) Zapouzdření (encapsulation) Polymorfismus (polymorphism) Dědičnost (inheritance) Radek Kočí Seminář Java Základy OO (1) 7/ 20

Vlastnosti objektové orientace Abstrakce Abstrakce vytvářený systém objektů je abstrakcí řešeného problému analýza problému klasifikace do abstraktních struktur objekty třídy klasifikace je založena na rozpoznávání podobností v řešené problematice zjednodušený pohled na systém bez ztráty jeho významu objekt je abstrakcí části řešené domény, má definovanou zodpovědnost za řešení části problému Radek Kočí Seminář Java Základy OO (1) 8/ 20

Vlastnosti objektové orientace Abstrakce Radek Kočí Seminář Java Základy OO (1) 9/ 20

Vlastnosti objektové orientace Zapouzdření Zapouzdření Seskupení souvisejících idejí do jedné jednotky, na kterou se lze následně odkazovat jediným názvem (objekt). Objektově orientované zapouzdření je seskupení operací a atributů (reprezentujících stav) do jednoho typu objektu. Stav je pak dostupný či modifikovatelný pouze prostřednictvím rozhraní (operace, metody). Omezení externí viditelnosti informací nebo implementačních detailů. Zaručené rozhraní. Radek Kočí Seminář Java Základy OO (1) 10/ 20

Vlastnosti objektové orientace Zapouzdření int obsah(int x, int y) { return x * y; struct Obdelnik { int x, y; int obsah(struct Obdelnik o) { return o.x * o.y; struct Obdelnik { int x, y; int obsah() { return x * y; Radek Kočí Seminář Java Základy OO (1) 11/ 20

Vlastnosti objektové orientace Zapouzdření int obsah(int x, int y) { return x * y; struct Obdelnik { int x, y; int obsah(struct Obdelnik o) { return o.x * o.y; struct Obdelnik { int x, y; int obsah() { return x * y; Radek Kočí Seminář Java Základy OO (1) 11/ 20

Vlastnosti objektové orientace Zapouzdření int obsah(int x, int y) { return x * y; struct Obdelnik { int x, y; int obsah(struct Obdelnik o) { return o.x * o.y; struct Obdelnik { int x, y; int obsah() { return x * y; Radek Kočí Seminář Java Základy OO (1) 11/ 20

Vlastnosti objektové orientace Zapouzdření class Obdelnik { int x; int y; int obsah() { return x * y; Ukrývání implementačních detailů, omezení přístupu k vlastnostem tříd (zajištění integrity dat) public class Obdelnik { protected int x; protected int y; public int obsah() { return x * y; Radek Kočí Seminář Java Základy OO (1) 12/ 20

Vlastnosti objektové orientace Zapouzdření class Obdelnik { int x; int y; int obsah() { return x * y; Ukrývání implementačních detailů, omezení přístupu k vlastnostem tříd (zajištění integrity dat) public class Obdelnik { protected int x; protected int y; public int obsah() { return x * y; Radek Kočí Seminář Java Základy OO (1) 12/ 20

Vlastnosti objektové orientace Zapouzdření class Obdelnik { int x; int y; int obsah() { return x * y; Ukrývání implementačních detailů, omezení přístupu k vlastnostem tříd (zajištění integrity dat) public class Obdelnik { protected int x; protected int y; public int obsah() { return x * y; Radek Kočí Seminář Java Základy OO (1) 12/ 20

Základní pojmy Objektové rozhraní Operace vs. metoda množina operací reprezentuje chování objektu metoda implementuje operaci Rozhraní objektu množina operací, které objekt nabízí pouze definuje co objekt umí (nabízí) Radek Kočí Seminář Java Základy OO (1) 13/ 20

Příklad public class Obdelnik { public int obsah() {... public int obvod() {... public interface Ctyruhelnik { public int obsah(); public int obvod(); public class Obdelnik implements Ctyruhelnik { public int obsah() { // implementace operace public int obvod() { // implementace operace Radek Kočí Seminář Java Základy OO (1) 14/ 20

Příklad public class Obdelnik { public int obsah() {... public int obvod() {... public interface Ctyruhelnik { public int obsah(); public int obvod(); public class Obdelnik implements Ctyruhelnik { public int obsah() { // implementace operace public int obvod() { // implementace operace Radek Kočí Seminář Java Základy OO (1) 14/ 20

Základní pojmy Komunikace objektů Komunikace objektů objekty spolu komunikují zasíláním zpráv příjemce chápe zprávu jako požadavek na provedení služby (operace) zpráva obsahuje identifikátor příjemce název operace argumenty obsluha zprávy (vykonání metody) reaguje podle stavu / modifikuje stav objektu po ukončení obsluhy může metoda vracet výsledek Radek Kočí Seminář Java Základy OO (1) 15/ 20

Použití třídy třída implementuje rozhraní (metody) a definuje atributy objekt je instancí třídy objekty stejné třídy sdílejí chování (metody), atributy má každý objekt vlastní Obdelnik o = new Obdelnik(); int obsah = o.obsah(); Radek Kočí Seminář Java Základy OO (1) 16/ 20

Vytváření objektů Voláním new Obdelnik() jsme použili: operátor new, který vytvoří prázdný objekt a volání konstruktoru, který prázdný objekt naplní počátečními údaji (daty). Konstruktory Konstruktury jsou speciální metody volané při vytváření nových instancí dané třídy. Typicky se v konstruktoru naplní (inicializují) proměnné objektu. Konstruktory lze volat jen ve spojení s operátorem new k vytvoření nové instance třídy nového objektu, eventuálně volat z jiného konstruktoru. Radek Kočí Seminář Java Základy OO (1) 17/ 20

Implicitní konstruktor Každá třídá má implicitní (bezparametrický) konstruktor nemá žádné parametry nemá žádný návratový typ! nemusí se deklarovat deklarace: JmenoTridy() {... public class Obdelnik { public Obdelnik() {... Použití: new Obdelnik(); Radek Kočí Seminář Java Základy OO (1) 18/ 20

Další konstruktory Každá třída může mít další (jiné) konstruktory než implicitní odlišují se parametry pokud se deklaruje alespoň jeden konstruktor, implicitní se již negeneruje!! public class Obdelnik { protected int x; protected int y; public Obdelnik(int x, int y) { this.x = x; this.y = y; Použití: new Obdelnik(50, 20); new Obdelnik(); chyba! Radek Kočí Seminář Java Základy OO (1) 19/ 20

Další konstruktory Pokud chceme deklarovat další konstruktory a současně používat implicitní, musíme ho také deklarovat! public class Obdelnik { public Obdelnik() { public Obdelnik(int x, int y) { this.x = x; this.y = y; Použití: new Obdelnik(50, 20); new Obdelnik(); OK (ale zbytečné) Radek Kočí Seminář Java Základy OO (1) 20/ 20