Programovací techniky

Podobné dokumenty
Programovací techniky

Programovací techniky

Základy objektové orientace I. Únor 2010

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

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

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

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

1. Dědičnost a polymorfismus

Principy UML. Clear View Training 2005 v2.2 1

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

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

Objektově orientované technologie Diagram komponent Implementační náhled (Diagram rozmístění) Pavel Děrgel, Daniela Szturcová

Objektově orientovaný přístup

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

7.5 Diagram tříd pokročilé techniky

Programování II. Modularita 2017/18

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

1. Programování proti rozhraní

Výčtový typ strana 67

Analýza a Návrh. Analýza

Vzdělávací oblast: Informatika a informační a komunikační technologie Vzdělávací obor: Programování. Předmět: Programování

7.5 Diagram tříd pokročilé techniky

KTE / ZPE Informační technologie

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

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

Unifikovaný modelovací jazyk UML

UML a jeho použití v procesu vývoje. Jaroslav Žáček jaroslav.zacek@osu.cz

Obsah. Zpracoval:

8 Přehled OO metodik (metod, metodologií)

Obsah přednášky. 12. Dokumentace zdrojového kódu Tvorba elektronické dokumentace UML. Co je diagram tříd. Ing. Ondřej Guth

8 Přehled OO metodik (metod, metodologií)

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

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

Předměty. Algoritmizace a programování Seminář z programování. Verze pro akademický rok 2012/2013. Verze pro akademický rok 2012/2013

7 Jazyk UML (Unified Modeling Language)

Základy programování Zdrojový kód, dokumentace, týmová práce

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

Java/QE Akademie - Osnova

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.

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

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

Objekty, třídy, vazby 2006 UOMO 30

Generické programování

Jazyk UML - přehled. diagram hierarchie procesů. IS firmy. podpora řízení. evidence zaměstnanců. pokladny. výroba. diagram procesních vláken

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

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

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

Hodnoticí standard. Programátor (kód: M) Odborná způsobilost. Platnost standardu. Skupina oborů: Informatické obory (kód: 18)

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

Čtvrtek 8. prosince. Pascal - opakování základů. Struktura programu:

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

7 Jazyk UML (Unified Modeling Language)

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

Objektové programování

PV167 Projekt z obj. návrhu IS. 26. března 2008

DUM 06 téma: Tvorba makra pomocí VBA

7.3 Diagramy tříd - základy

Algoritmizace prostorových úloh

7.3 Diagramy tříd - základy

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

ALGORITMIZACE A PROGRAMOVÁNÍ

Vlastnosti algoritmu. elementárnost. determinovanost. rezultativnost. konečnost. hromadnost. efektivnost

Diagramy tříd - základy

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.

U Úvod do modelování a simulace systémů

1 Webový server, instalace PHP a MySQL 13

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

Matematika v programovacích

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

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

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

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

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

Programové konvence, dokumentace a ladění. Programování II 2. přednáška Alena Buchalcevová

Čtvrtek 3. listopadu. Makra v Excelu. Obecná definice makra: Spouštění makra: Druhy maker, způsoby tvorby a jejich ukládání

Dědění, polymorfismus

OOT Objektově orientované technologie

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

Algoritmizace a programování

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

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

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

První kapitola úvod do problematiky

Kritéria hodnocení praktické maturitní zkoušky z databázových systémů

Profilová část maturitní zkoušky 2013/2014

Modelování procesů s využitím MS Visio.

Algoritmizace, základy programování, VY_32_INOVACE_PRG_ALGO_01

GTL GENERATOR NÁSTROJ PRO GENEROVÁNÍ OBJEKTŮ OBJEKTY PRO INFORMATICA POWERCENTER. váš partner na cestě od dat k informacím

Objektově orientované technologie Logická struktura systému Objektový diagram. Pavel Děrgel, Daniela Szturcová

ŠVP Gymnázium Ostrava-Zábřeh Úvod do programování

3 druhy UML diagramů

Objektově orientované technologie. Daniela Szturcová

1 Úvod do technologie programování a programovacích stylů, OO návrh, základní UML diagramy, psaní programů v Javě

Objektově orientované programování v jazyce Python

9. Polymorfismus a rozhraní

Programovací jazyk Pascal

Obsah. 1) Rozšířené zadání 2) Teorie zásuvných modulů a) Druhy aplikací používajících zásuvné moduly b) Knihovny c) Architektura aplikace d) Výhody

Da D to t v o é v ty t py IB111: Datové typy

Transkript:

Programovací techniky 2005/2006 přednášky: Ing. Pavel Mautner, Ph.D. (UK415) cvičení: Ing. Pavel Mautner, Ph.D. Ing. Roman Mouček, Ph.D. (UK415) Ing. Štěpán Albrecht

Plán přednášek PT -2005/2006 1. Úvod, organizace přednášek a cvičení, požadavky na zkoušku, plán přednášek a cvičení. Základy OOP návrhu, psaní programů v Javě 2. Dědičnost, polymorfismus, interface v Javě, soubory a práce s nimi 3. Základní ADT, zásobník, fronta, obousměrná fronta, vektor, list a jejich implementace 4. Tabulky, hashování, úvod do stromových struktur 5. AVL, B, Red-black stromy 6. Grafy a grafové algoritmy 7. Zpracování textových řetězců I: vyhledávání podřetězců (BF, KMP, Boayer-Moore algoritmy) 8. Zpracování řetězců II: vyhledání nejdelšího společného podřetězce (LCS algoritmus) 9. Komprese I: komprese textů (RLE, Huffman, Aritmetické kódování, LZW komprese) 10. Komprese II: komprese obrázků, audia, videa (JPEG, waveletová a fraktálová kompese) 11.??? programování mobilních tel. JAVA2ME 12.??? 13. přednáška- prof. Špale

Objektově orientovaný návrh

Cíle objektově orientovaného návrhu Cílem objektově orientovaného návrhu je vytvoření kvalitního software, který má následující vlastnosti: robustnost cílem je vytvořit software, který je schopen správně reagovat i na neočekávané vstupy, které nejsou explicitně definovány pro danou aplikaci Přizpůsobivost (adaptability) schopnost software běžet s minimálními úpravami i na jiné platformě (unix, MacOs) Znovupoužitelnost (reusability) cílem je vytvořit sw nebo jeho část tak, aby byla opětovně použitelná v jiných systémech. Vytváření programů se pak podobá stavebnici, kdy z hotových dílů vytváříme funkční celek

Principy objektově orientovaného návrhu Mezi nejdůležitější principy objektově orientovaného návrhu, které vedou ke splnění uvedených cílů patří: Abstrakce Zapouzdření (encapsulation) Modularita Abstrakce cílem je rozdělit složitý problém na základní části, tyto části popsat a implementovat. Příkladem abstrakce mohou být abstraktní datové typy (ADT) matematický model datových struktur, který specifikuje v jakém datovém typu budou uložena data a jaké operace lze nad těmito daty provádět. ADT v Javě = třída Zapouzdření cílem je ukrýt implementační detaily které nejsou pro uživatele podstatné a poskytnout uživateli určité rozhraní pomocí kterého může přistupovat k datovým strukturám. Chrání datové struktury před neoprávněnou manipulací

Modularita znamená rozdělení softwarového systému do oddělených funkčních jednotek (modulů). Moduly mohou být navrženy tak aby byly využitelné v jiných systémech (princip znovupoužitelnosti). Při návrhu složitého software obvykle skládáme celek z jednodušších komponent. Pro lepší využití jednotlivých komponent využívá objektově orientovaný návrh principů dědičnosti a polymorfizmu Dědičnost -umožňuje vytvořit tzv. generické třídy, ze kterých je možné odvozovat třídy další přidávat do nich nové metody, popř. modifikovat metody existující. Dědičnost se využívá zejména proto abychom se vyhnuli nadbytečnému programovému kódu (popř. nadbytečným datovým strukturám) Polymorfismus (mnohotvarost) umožňuje, aby stejné metody vykonávaly různou činnost v závislosti na objektu nad kterým pracují

Psaní programů v Javě 3 základní kroky : 1. Návrh 2. Kódování 3. Testování a ladění Návrh: nejdůležitější krok celého procesu vytváření software. Cílem je vytvořit třídy a objekty. ale jak???? Jak identifikovat třídy? jak určit, jaké atributy mají mít? jak určit, jaké metody mají mít? jak tyto skutečnosti zachytit? - jedním ze způsobů jsou tzv. CRC karty

CRC-karty CRC (Class-Responsibility-Collaborator) Card jednoduchá, ale silná OO modelovací technika CRC tým uživatelé, analytici, vývojáři CRC model je množinou CRC karet, na zadní straně podrobnější popis třídy Class Responsibilities (odpovědnosti) Collaborators (spolupracovníci)

Třídy a odpovědnost tříd Kandidáti na třídu vybrat podstatná jména Odpovědnost něco, co třída zná nebo dělá Například třída Osoba má odpovědnost za své jméno, adresu, rodné číslo třída Auto má odpovědnost za velikost, počet dveří, může zastavit, jet zjišťování odpovědností vybrat slovesa Collaborator (spolupracovník) Spolupracovník třídy A je jiná třída, která je využívána při realizaci určité odpovědnosti třídy A spolupracovník je třeba, pokud třída potřebuje informace, které sama nemá pokud potřebuje změnit informace, které nemá požádá jinou třídu, aby to udělala při spolupráci je jedna třída iniciátorem

CRC model objednávek Objednávka Číslo objednávky Datum objednávky Datum dodání Položky objednávky spočti cenu objednávky tisk objednávky zrušení objednávky Položka objednávky Zákazník Množství Číslo sklad. Položky Položka objednávky vypočti celkovou cenu Skladová položka Skladová položka Číslo Název Popis Cena za jednotku Zákazník Jméno Číslo telefonu Číslo zákazníka objednat zrušit objednávku zaplatit Objednávka Adresa dodání

Zákazník Jméno Číslo telefonu Objednávka Adresa dodání Číslo zákazníka objednat zrušit objednávku zaplatit Ulice Město Stát PSČ tisk štítku Adresa dodání Příklad spolupráce třída Objednávka má odpovědnost spočti cenu objednávky ví sice o svých položkách, ale neví, jaké množství bylo objednáno, to ví třída Položka objednávky, proto musí třída Objednávka spolupracovat s třídou Položka objednávky, aby vypočítala celkovou cenu objednávky Položka objednávky zase pro výpočet ceny položky nezná cenu za jednotku, proto musí spolupracovat s třídou Skladová položka

Jazyk UML, UML diagramy UML unifikovaný modelovací jazyk Vznikl jako prostředek pro objektově-orientovanou analýzu a návrh (G. Booche, J. Rumbaugh, I. Jacobson) Skládá se z grafických prvků, které se dají vzájemně kombinovat do podoby diagramů. Účelem diagramů je vytvořit určité pohledy na navrhovaný systém. Skupina pohledů se nazývá model Model jazyka UML popisuje co má systém dělat, ale neříká jak to implementovat UML zahrnuje definici 8-mi typů diagramů, tj. 8 různých pohledů na model systému: diagramy tříd a objektů popisují statickou strukturu systému, znáyorňují datový model datový model systému od konceptuální úrovně až po implementaci modely jednání (diagramy případů užití) dokumentují možné případy použití systému události, na které musí systém reagovat, scénáře činností (diagramy posloupností) popisují scénář průběhu určité činnosti systému, diagramy spolupráce zachycují komunikaci spolupracujících objektů, stavové diagramy popisují dynamické chování objektu nebo systému, diagramy aktivit popisují průběh aktivit procesu nebo činností diagramy komponent popisují rozdělení výsledného systému na funkční celky a definují náplň jednotlivých komponent, diagramy nasazení popisují umístění funkčních celků (komponent) na výpočetní uzly informačního systému

Diagram objektů Diagram tříd Model jednání

Scénáře činností Diaramy spolupráce Stavový diagram

Diagram aktivit Diagram komponent

Diagram nasazení

Kódování: Jakmile máme vytvořen návrh tříd je možné zapsat třídy v programovacím jazyce Java buďto pomocí textového editoru nebo použitím integrovaného vývojového prostředí (JBuilder, JCreator, eclipse atd.) Při zápisu programu dodržovat následující doporučení : používat smysluplné názvy identifikátorů jména tříd začínat s velkým písmenem (Datum,Vektor, atd.) jména metod a proměnných začínat s malým písmenem (vlozpolozku(), jmenostudenta, atd.) pokud má proměnná charakter konstanty definovat jí jako konstantu (final) a název identifikátoru konstanty psát s velkými písmeny (MAX_HODNOTA, MAX_POCET_PRVKU) odsazovat příkazové bloky v každé třídě dodržovat následující pořadí deklarací Konstantní atributy třídy, tj. statické konstanty Ostatní atributy třídy Konstantní atributy instancí Ostatní atributy instancí Přístupové metody atributů třídy Ostatní metody třídy Konstruktory a metody vracející odkaz na instance třídy Přístupové metody atributů instancí Ostatní metody instancí Testovací metody používat komentáře zvlášť případech kde se vyskytují nejednoznačnosti, podivné konstrukce atd. Komentáře psát nejlépe ve stylu javadoc

Testování a ladění: Ladění nejjednodušší způsob kontrolní výpisy použitím System.out.print(<String>) použití speciálního programu - debuggeru - standardní jdk obsahuje základní řádkově orientovaný debugger jdb, vývojová prostředí (eclipse, JBuilder) obsahují debuggery s GUI (grafické uživatelské rozhraní) Testování Testování a ladění je obvykle časově nejnáročnější činnost. Cílem je ověřit správnost programu a použitých metod popř. odstranit chyby které se během zápisu algoritmu vyskytly. Testování provádíme na reprezentativní množině vstupů tu je nutné zvolit tak, aby byla každá metoda třídy alespoň jednou zavolána. Totéž by mělo platit o každém příkazu v programu. Program často padá v důsledku neočekávaných vstupních hodnot -> obvykle se doporučuje nechat program proběhnou na rozsáhlé množině náhodně vygenerovaných dat

Příklad: pro otestování metody řazení pole celočíselných prvků volíme obvykle následující vstupy: pole nulové délky (neobsahující žádný vstup) pole s jedním prvkem pole s prvky stejné hodnoty seřazené pole pole seřazené v opačném pořadí Komentáře a dokumentace Chceme-li aby se program dožil vysokého produktivního věku musíme jej psát tak, aby bylo možno snadno upravit a doplnit o další funkce tj. psát program čitelně. Čitelnost ovlivňují: Správně volené identifikátory Komentáře vysvětlující náročnější obraty Druhy komentářů v Javě: Řádkový komentář začíná dvojicí znaků // a končí koncem řádku - poznámky ke kódu Obecný komentář /* */ Dokumentační komentář speciální typ obecného komentáře /** */ - je zpracováván programem javadoc.exe, který vytváří html dokumentaci

Dokumentační komentáře se zapisují těsně před dokumentovaný prvek (javadoc reaguje i na umístění komentářů) Komentáře popisující účel a použití třídy patří před hlavičku třídy Komentář popisující účel atributu patří před deklaraci tohoto atributu Komentáře popisující funkci nějaké metody a význam parametru patří před hlavičku této metody Pomocné značky pro javadoc: @author vkládá se do místa dokumentace k celé třídě. Zapisuje se za mí jméno autora třídy, více autorů je možné psát odděleně nebo za společnou značku @version vkládá se do místa dokumentace pro celou třídu a zapisuje se za ní číslo verze. Pro formát verze není žádný předpis @param používá se v místě dokumentace konstruktorů, za ní se uvádí přesný název parametru z hlavičky a za něj popis parametru @returns používá se v dokumentaci metod, které vracejí nějakou hodnotu, za ní se uvádí podrobný popis návratové hodnoty @throw používá se k popisu výjimky a důvodu proč jí metoda vyhazuje