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

Podobné dokumenty
Programování II. Modularita 2017/18

Programování II. Objektová dekompozice Třída jako objekt 2018/19

Programování II. Úvod do dědičnosti 2018/19

Programování II. Polymorfismus

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

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

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

Základy objektové orientace I. Únor 2010

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

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

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

MATURITNÍ OTÁZKY ELEKTROTECHNIKA - POČÍTAČOVÉ SYSTÉMY 2003/2004 PROGRAMOVÉ VYBAVENÍ POČÍTAČŮ

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

Objektově orientovaný přístup

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

OOT Objektově orientované technologie

Objektové programování

Programování v jazyce C a C++

Delphi - objektově orientované

Softwarové komponenty a Internet

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

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

Programování II. Návrh programu II

Maturitní témata Školní rok: 2015/2016

2. Modelovací jazyk UML 2.1 Struktura UML Diagram tříd Asociace OCL. 3. Smalltalk 3.1 Jazyk Pojmenování

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

OBJEKTOVÉ PROGRAMOVÁNÍ V C++ V PŘÍKLADECH 8 Proudová knihovna 8.1 Hierarchie proudů Standardně zavedené proudy

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

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

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

Maturitní témata. IKT, školní rok 2017/18. 1 Struktura osobního počítače. 2 Operační systém. 3 Uživatelský software.

Objektově orientované programování

Konstruktory a destruktory

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

typová konverze typová inference

Profilová část maturitní zkoušky 2017/2018

7. OBJEKTOVĚ ORIENTOVANÉ PROGRAMOVÁNÍ

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

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

Spojová implementace lineárních datových struktur

Algoritmizace prostorových úloh

1. Webové služby. K čemu slouží? 2. RPC Web Service. 3. SOA Web Service. 4. RESTful Web services

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

Procesy a vlákna (Processes and Threads)

TÉMATICKÝ OKRUH Softwarové inženýrství

Generické programování

Virtuální metody - polymorfizmus

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

Obsah. Úvod 11 Základy programování 11 Objektový přístup 11 Procvičování 11 Zvláštní odstavce 12 Zpětná vazba od čtenářů 12 Errata 13

1. Programování proti rozhraní

Objekty, třídy, vazby 2006 UOMO 30

1. Dědičnost a polymorfismus

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

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

Analýza a modelování dat. Přednáška 4

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

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

Programování v jazyce C a C++

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

1/1 ČESKÁ ZEMĚDĚLSKÁ UNIVERZITA V PRAZE PROVOZNĚ EKONOMICKÁ FAKULTA PŘIJÍMACÍ ŘÍZENÍ 2017/2018

Maturitní otázky z předmětu PROGRAMOVÁNÍ

Jazyk C# (seminář 6)

Střední průmyslová škola elektrotechnická Praha 10, V Úžlabině 320

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

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

Sdílení dat mezi podprogramy

Název předmětu: Školní rok: Forma studia: Studijní obory: Ročník: Semestr: Typ předmětu: Rozsah a zakončení předmětu:

ČÁST 1. Zahřívací kolo. Co je a k čemu je návrhový vzor 33

Střední průmyslová škola elektrotechnická Praha 10, V Úžlabině 320 M A T U R I T N Í T É M A T A P Ř E D M Ě T U

Programovací techniky

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

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

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

Objektově orientované programování. Úvod

Návrh IS - UML. Jaroslav Žáček

Teoretické minimum z PJV

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

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

Návrh IS - UML. Jaroslav Žáček

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

Algoritmizace, základy programování, VY_32_INOVACE_PRG_ALGO_01

Návrhové vzory. Jakub Klemsa, Jan Legerský. 30. října Objektově orientované programování.

Objektově orientované programování v jazyce Python

UML. Unified Modeling Language. Součásti UML

1 Webový server, instalace PHP a MySQL 13

Algoritmizace prostorových úloh

Výčtový typ strana 67

DF FA Novinky v Simotion Scout

UML - opakování I N G. M A R T I N M O L H A N E C, C S C. Y 1 3 A N W

Jazyk C# (seminář 3)

Common Object Request Broker Architecture

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

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

Pokročilé programování v jazyce C pro chemiky (C3220) Dědičnost tříd v C++

Ukazka knihy z internetoveho knihkupectvi

KTE / ZPE Informační technologie

3 Co je algoritmus? Trocha historie Definice algoritmu Vlastnosti algoritmu... 3

ANOTACE nově vytvořených/inovovaných materiálů

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

Transkript:

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

Osnova přednášky Objektový přístup (proč potřebujeme objekty). Třídy, objekty,... Příklad.

Proč potřebujeme objekty?

Udržovatelnost softwaru (maintenance) Studie Lientz a Swanson (1980). 487 různých systémů. Jak mnoho úsilí to vyžaduje?

Kdy to začalo? Jazyk Simula 67 (Ole-Johan Dahl a Kristen Nygaard, Norwegian Computing Center, 1960+) třídy a instance (objekty) automatické zanikání objektů (garbage collection) Jazyk Smalltalk (Xerox PARC, Alan Kay a další, 1970+) pojem objektově-orientované programování použití objektů a zpráv, které si objekty posílají a zpracovávají

Objektová orientovanost Objektové techniky pomáhají napsat lépe udržovatelný software. Metoda a jazyk. Implementace a prostředí. Knihovny.

Metoda a jazyk Nejde jen o programovací jazyk a způsob jeho použití. Jde i o způsob uvažování a vyjadřování a také o záznamy v textové či grafické formě.

Model domény

Implementace a prostředí Podpora vývoje Vlastnosti a efektivita nástrojů pro vývoj. Nástroje pro podporu nasazení nových verzí. Nástroje pro podporu dokumentování.

Knihovny Objektové technologie velmi spoléhají na opakovanou použitelnost. Jde o podporu vývoje formou využití již implementovaných řešení (knihoven). Jde také o podporu vytváření a správy nových vlastních knihoven.

Máme být dogmatičtí? Objektově orientovaný přístup se dnes chápe jako základní nástroj pro vývoj softwaru. Nicméně Existují různé programovací jazyky s různou mírou podpory technik objektového programování (OOP). Ne každý potřebuje všechny vlastnosti, které OOP nabízí. Objektová orientovanost může být jen jedním z faktorů úspěšného vývoje, proto je třeba uvažovat komplexně.

Metoda a jazyk Třídy Třídy jako moduly Třídy jako typy Zasílání zpráv (message passing, feature-based) Skrývání informací Statická kontrola typů Genericita Dědičnost, redefinice, polymorfismus a dynamická vazba Správa paměti a garbage collection

Třída

Třídy Objektově orientovaný přístup je postaven na pojmu třída. Třídu můžeme chápat jako část softwaru, která popisuje abstraktní datový typ a jeho implementaci. Abstraktním datovým typem rozumíme objekty se společným chováním reprezentovaným seznamem operací, které umí objekty vykonávat.

Třídy jako moduly OOP je zejména o struktuře (architektuře) softwaru, kde je důležitá modularita. Třídy nepopisují jen typy objektů, ale musí být zároveň modulární jednotky. V čistě objektově orientovaných programech by neměly být jiné samostatné jednotky než třídy (např. funkce).

Třídy jako typy V čistě objektově orientovaných jazycích a programech by neměly být jiné typy než třídy. Platí to i pro systémové typy jako INT nebo DOUBLE.

Zasílání zpráv Message passing (feature call), feature-based computation je výpočetní mechanismus. Objektu jako instanci třídy je zaslána zpráva daného jména a s potřebnými parametry. aperson->changelastname( Smith ) Ten, kdo zasílá zprávu (požaduje vykonání operace s určitými argumenty) je KLIENT třídy.

Skrývání informací Pro klienta jsou důležité pouze ty operace (metody), které popisují vnější chování objektů třídy. Detaily implementace by měly zůstat skryty (data + pomocné operace). Pokud klient potřebujeme získat informace a stavu (datech) objektu, dostane se k nim pouze prostřednictvím zaslání zprávy (voláním metody).

Statická vazba a kontrola typů Každá entita v programu (např. proměnná daného jména) musí mít definovaný typ. Požadavek na objekt (zaslání zprávy) musí odpovídat operaci (metodě), kterou třída poskytuje.

Generičnost Je potřeba, aby existovaly třídy, které umí pracovat s typem, který není dopředu znám. Např. seznamy, do kterých lze ukládat objekty různých tříd (typů).

Dědičnost a redefinice Děděním se rozumí založení nové třídy na základě již existující třídy. Základem je rozšíření původní třídy o nové vlastnosti. V rámci dědění se také předpokládá možnost změnit některé vlastnosti původní třídy.

Polymorfismus a dynamická vazba Někdy potřebujeme, aby jeden a tentýž objekt vystupoval v různém kontextu v různých rolích. Rolí rozumíme různé chování, které se může měnit v čase.

Správa paměti a garbage collection V rozsáhlých programech vzniká a zaniká mnoho objektů, a to v různých a ne zcela jednoduchých situacích. Je problém ručně uhlídat životní cyklus objektů. V moderních jazycích je zanikání objektů potřeba automatizovat.

Příklad

Deklarace

Použití

Výsledek

Definice (implementace)

Úkoly na cvičení Implementujte příklad z přednášky a do třídy KeyValues přidejte metodu KeyValue* RemoveObject(int k), která odebere objekt s daným klíčem a vrátí ukazatel na něj. Implementuje třídu Faktura, která bude obsahovat číslo, objekt třídy Osoba (se jménem a adresou) a pole objektů PolozkaFaktury (s názvem a cenou). Navrhněte konstruktor a destruktor a další potřebné metody. Faktura bude mít metodu (funkci), která spočítá a vrátí celkovou cenu.

Kontrolní otázky Co je hlavními příčinami potřeby změn software? Jaké jsou hlavní faktory ovlivňující objektovou orientovanost? Vysvětlete, co rozumíme pojmy objektově orientovaná metoda (přístup) a jazyk. Vysvětlete, co rozumíme podporou objektově orientované implementace. Vysvětlete, co rozumíme podporou opakované použitelnosti (využití a vytváření knihoven). Vysvětlete pojmy třída a objekt a použijte správnou terminologii. Zdůrazněte vlastnosti třídy z pohledu modularity. Vysvětlete princip zapouzdření v OOP. Vysvětlete princip zasílání zpráv. Vysvětlete principy deklarace a definice jednoduché třídy v C++.

Ke studiu Bertrand Meyer. Object-Oriented Software Construction. Prentice Hall 1997. [17-36]