1 Příklady pro druhý semestr PGL

Rozměr: px
Začít zobrazení ze stránky:

Download "1 Příklady pro druhý semestr PGL"

Transkript

1 1 Příklady pro druhý semestr PGL Jiří Fišer 1.1 Formátovač Vytvoření aplikace pro snadné vytváření jednoduše strukturovaných dokumentů. Strukturované dokumenty musí podporovat sekce (=kapitoly) a odstavce s případnými nadpisy resp. jinými dekoracemi. Dokumenty lze serializovat do HTML, Wiki-textu resp. jiného textového formátu (např. LaTeX). Na příkladu lze ukázat různé návrhové vzory především Bridge resp. Abstract factory. Východiskem je jednoduché sdílené rozhraní, které by měly implementovat textové objekty, jež lze ukládat vypisovat do objektu třídy TextWriteru: i n t e r f a c e I W r i t a b l e T e x t { void Write ( T e x t W r i t e r w r i t e r ) ; Nejjednodušší implementací je objekt prostého textu, jenž vypisuje neformátovaný řetězec, jenž je v něm uložen. c l a s s Text : I W r i t a b l e T e x t { p u b l i c s t r i n g C o n t e n t { g e t ; p r i v a t e s e t ; p u b l i c Text ( s t r i n g c o n t e n t ) { C o n t e n t = c o n t e n t ; p u b l i c Write ( T e x t W r i t e r w r i t e r ) { w r i t e r. Write ( t h i s. C o n t e n t ) ; Jen o málo složitější je objekt vypisující text tučně. Tučný text nelze vypisovat na konzoli přímo (resp. nelze to udělat přenositelně). Proto zvolíme výpis ve strukturovaném formátu např. HTML. Nově vytvořená třída BoldText se bude lišit jen v těle metody Write. w r i t e r. Write ( <b> + t h i s. C o n t e n t + </b> ) ; Pro vytváření složitěji strukturovaných testů však takto jednoduché třídy nestačí, nebot se skládají i z složených struktur např. odstavců. Odstavec je v našem zjednodušeném modelu tvořen posloupností jednoduchých resp. tučných textů (přidání dalších typů inline textu je snadné, ale ještě počkáme). c l a s s P a r a g r a p h : I W r i t a b l e T e x t { p r i v a t e L i s t <I W r i t a b l e T e x t > p a r t s ; p u b l i c P a r a g r a p h ( params I W r i t a b l e T e x t [ ] p ) { p a r t s = new L i s t <I W r i t a b l e T e x t >(p ) ; p u b l i c AppendText ( I W r i t a b l e T e x t t ) {.... p u b l i c AppendText ( s t r i n g t ) { AppendText ( new Text ( t ) ) ; p u b l i c void Write ( T e x t W r i t e r w r i t e r ) { w r i t e r. Write ( ) ; f o r e a c h ( I W r i t a b l e T e x t t e x t i n p a r t s ) t e x t. Write ( w r i t e r ) ; w r i t e r. W r i t e L i n e ( ) ; 1

2 Podobně je možno vytvořit třídu Section, která representuje kapitolu a od odstavce se liší tím, že má nadpis (tvořený holým textem). Při serializaci je nadpis opatřen tagem H1. HTML však není jedinou možností representace strukturovaného textu. Např. na Wikipedii se používá jednodušší textový formát, kde je např. tučnost vyjádřena pomocí apostrofů tučný text. Detailnější informace lze získat na h t t p : / / cs. w i k i p e d i a. org / w i k i / W i k i p e d i e : Pr%C5%AFvodce %28form%C3%A1tov%C3%A1n%C3%AD%29 h t t p : / / cs. w i k i p e d i a. org / w i k i / W i k i p e d i e : Průvodce ( f o r m á t o v á n í ) Náš současný model však s alternativním formátováním nepočítá. Jednou z možností je vytvoření nových tříd pro nové formátování (typu WikiBoldText, WikiParagraph). To však není rozumné řešení, nebot umožňuje vytvářet dokumenty se smíšeným formátováním (např. v HTML odstavci by byl tučný wiki-text). Navíc strukturovaných textových formátů je téměř neomezené množství. Hlavním problémem je však nemožnost měnit výstupní formát u již vytvořených objektů tj. nemožnost jednoduchého vypsání jediného dokumentu v různých formátech. Řešením je oddělení abstrakce a implementace tj. použití návrhového vzoru bridge. Nejjednodušší možností je přidání dodatečného parametru do metody IWritableText.Write, což může být řetězec, ale lepší je formátovací objekt, tj. objekt implementující (naše nové) rozhraní ITextFormater. i n t e r f a c e I T e x t F o r m a t t e r { s t r i n g F o r m a t I n l i n e T e x t ( s t r i n g t e x t, FontShape shape ) ; s t r i n g F o r m a t P a r a g r a p h ( s t r i n g c o n t e n t s ) ; s t r i n g FormatHeader ( s t r i n g t e x t, i n t l e v e l ) ; kde FontShape je výčtový typ s hodnotami například Italics a Bold. Pro testování se vytvoří dvě implementace tohoto rozhraní HtmlTextFormatter a WikiText- Formatter a abstraktní továrna, která poskytuje odpovídající třídu podle označení formátu resp. zvolí implicitní formát (zadán při vytvoření továrny). Tento formát je použit v případě, že požadovaný formát není vytvořen. c l a s s T e x t F o r m a t t e r F a c t o r y { p r i v a t e s t a t i c D i c t i o n a r y <s t r i n g, I T e x t F o r m a t t e r > formatmapper = new... p u b l i c s t a t i c T e x t F o r m a t t e r F a c t o r y ( ) { formatmapper. Add ( html, new H t m l T e x t F o r m a t t e r ( ) ) ; p u b l i c T e x t F o r m a t t e r F a c t o r y ( I T e x t F o r m a t t e r d e f a u l t F o r m a t ) { p u b l i c I T e x t F o r m a t t e r C r e a t e ( s t r i n g f o r m a t ) {.... Samozřejmě je nutno ještě přepsat implementace metody IWritableText.Write, např. takto (pro třídu BoldText) p u b l i c void Write ( T e x t W r i t e r w r i t e r, I T e x t F o r m a t t e r f o r m a t t e r ) { w r i t e r. Write ( f o r m a t t e r. F o r m a t I n l i n e T e x t ( t h i s. Content, FontShape. Bold ) ) ; 2

3 1.2 Sklad Vytvoření modelu prodejního skladu, do něhož lze ukládat objekty různých tříd. Třídy by měly podporovat rozhraní i ISkladovatelne a rozhraní IProdatelne. Součástí modelu by měly být i implementace tříd konkrétních skladovatelných výrobků. Základní rozhraní skladovatelných výrobků (zjednodušeno): i n t e r f a c e I S k l a d o v a t e l n e { Sklad Sklad { g e t ; void VlozDoSkladu ( Sklad s ) ; Skladovatelný výrobek musí nabízet jednoznačný identifikátor. Příslušnou vlastnost je však vhodnější vyčlenit do speciálního rozhraní. i n t e r f a c e I I d e n t i f i k o v a t e l n e { s t r i n g U n i k a t n i I d { g e t ; i n t e r f a c e I S k l a d o v a t e l n e : I I d e n t i f i k o v a t e l n e... Produkty ve skladu by měly být prodávatelné tj. měly by být opatřeny cenou a lze testovat zda nepřekročily maximální dobu trvanlivosti (je otázkou, zda by metoda neměla být spíše v rozhraní ISkladovatelne, ale trvanlivost primárně ovlivňuje prodej a cenu nikoliv skladování). Cena je primárně uvedena i n t e r f a c e I P r o d a t e l n e { d e c i m a l CenaKus { g e t ; d e c i m a l PocetKusu { g e t ; d e c i m a l CenaCelkova { g e t ; bool J e P o u z i t e l n e ( DateTime datum ) ; Jaký je vztah mezi navrženými rozhraními: je prodatelná věc nutně i jednoznačně identifikovatelná (prodejní model, vrácení, záruka), je skladovatelná věc prodávatelnou (asi ano, sklad je prodejní). Výsledná hierarchie tak mít tvar: I I d e n t i f i k o v a t e l n e > I P r o d a t e l n e > I S k l a d o v a t e l n e ; nebo méně lineární: I I d e n t i f i k o v a t e l n e > I S k l a d o v a t e l n e ; I P r o d a t e l n e > I S k l a d o v a t e l n e ; Jako příklad třídy implementující rozhraní ISkladovatelne lze uvést například třídu Potravina. c l a s s P o t r a v i n a : I S k l a d o v a t e l n é { s t a t i c i n t i d C o u n t e r = 1 ; p u b l i c P o t r a v i n a ( s t r i n g druh, DateTime spotrebado, d e c i m a l cenacelkem, i n t pocetkusu ) { U n i k a t n i I d = s t r i n g. Format ( {0 {1:0000, druh, i d C o u n t e r ) ; i d C o u n t e r ++; t h i s. Druh = druh ; t h i s. s p o t r e b a = s p o t r e b a D o ; 3

4 p u b l i c P o t r a v i n a ( s t r i n g druh, DateTime spotrebado, d e c i m a l cenacelkem ) : t h i s ( druh, spotrebado, cenacelkem, 1) { \\ pomocný k o n s t r u k t o r pro j e d n o k u s o v é z b o ž í \\ v C# 4. 0 l z e p o u ž í t i m p l i c i t n í p a r a m e t r y p u b l i c U n i k a t n i I d { g e t ; p r i v a t e s e t ;... p u b l i c d e c i m a l CenaKus { g e t { return CenaCelkova / PocetKusu ;... Důležité je rozlišení mezi třídou (všechny potraviny), druhem potraviny (podmnožina třídy), balením (= to co je skladováno = objekt) a jednotlivým kusem (není identifikovatelný a jediným jeho nepřímým atributem je cena (za kus). Identifikace se musí vztahovat k balení tj. objektu nikoliv druhu. Presentované řešení pro rozlišení balení využívá čítače objektů, jenž je sdílen všemi potravinami (tj. nikoliv jen druhem). Generováno je tak např. pořadí: Susenky-0000 Mleko-0001 Susenky-0002 Kontrakt rozhraní (jedinečnost identifikátorů) je však splněn. Vazba čítače na jednotlivé druhy potravin by program zbytečně komplikovala (bylo by nutné použít slovník mapující identifikátor druhu na hodnotu příslušného čítače). Implementace kontraktu by měla být co možná nejjednodušší. Výjimkou jsou případy, kdy je jednoduchá (triviální) implementace neefektivní (má např. exponenciální složitost, zatímco nejeoptimálnější implementace je kvadratická či dokonce lineární) Implementace skladu by se měla dít postupně v následujících fázích: list type= enum Implementace typu černá díra tj. pouze vkládání zboží do skladu. c l a s s Sklad { L i s t <I S k l a d o v a t e l n e > polozky = new L i s t <I S k l a d o v a t e l n e > ( ) ; void Vloz ( I S k l a d o v a t e l n e vyrobek ) { vyrobek. VlozDoSkladu ( t h i s ) ; polozky. Add ( vyrobek ) ; Při vkládání je nutno zajistit obousměrné provázání skladu a zboží, tj. musí být volána i metoda ISkladovatelne.VlozDoSkladu. Druhou fází je implementace vlastností pro výpočet celkových charakteristik skladu jako Sklad.CelkovyPocetKu resp. Sklad.CelkovaCena. Pro implementaci lze využít i LINQ (funkcionální zápis). 4

5 p u b l i c i n t CelkovyPocetKusu { g e t { return polozky. Sum ( p => p. PocetKusu ) ; Mezifáze: uzavřený sklad, z něhož se záhadně ztrácí zboží tj. implementace metody Sklad.NahodneUkradni. I S k l a d o v a t e l n e NahodneUkradni ( ) {... Testování funkčnosti metody na základě sumární metody (např. celkové ceny). Jak klesá cena při náhodné volbě resp. při kradení nejdražšího zboží (otázka jak krást efektivně to nejdražší = využití pomocné struktury a flexibilní přizpůsobení změnám). Implementace vyjímání zboží ze skladu. Pozornost je nutno zaměřit na konzistenci (musí být odstraněny odkazy v obou směrech). 5

platnost od 10. 9. 2012

platnost od 10. 9. 2012 P latnost od 3. 9. 2012 platnost od 10. 9. 2012 Obsah Úvod...... 4 Průvodce nastavením e-shopu... 5 Výkladový slovník... 9 Přihlášení... 11 Odhlášení... 13 ThemeCentrik - objednávka grafické šablony...

Více

The BlueJ Tutorial verze 1.4 pro BlueJ verze 1.2.x

The BlueJ Tutorial verze 1.4 pro BlueJ verze 1.2.x The BlueJ Tutorial verze 1.4 pro BlueJ verze 1.2.x Michael Kölling Mærsk Institute University of Southern Denmark přeložil Petr Škoda, 1. verze 1 Obsah 1 Předmluva... 4 1.1 O BlueJ... 4 1.2 Rozsah a cílová

Více

GLOBÁLNÍ ARCHITEKTURA ZÁKLAD- NÍCH REGISTRŮ DOPLNĚK

GLOBÁLNÍ ARCHITEKTURA ZÁKLAD- NÍCH REGISTRŮ DOPLNĚK GLOBÁLNÍ ARCHITEKTURA ZÁKLAD- NÍCH REGISTRŮ DOPLNĚK Projekt Informační systém základních registrů je spolufinancován Evropskou unií z Evropského fondu pro regionální rozvoj. Obsah 1 Cíle dokumentu... 3

Více

Fakulta informačních technologií Vysoké učení technické v Brně. Jak na projekt

Fakulta informačních technologií Vysoké učení technické v Brně. Jak na projekt Fakulta informačních technologií Vysoké učení technické v Brně Příručka pro studenty předmětu Formální jazyky a překladače Jak na projekt (IFJ07) Zbyněk Křivka Projekt FRVŠ 673/2007/G1 Roman Lukáš Lukáš

Více

Základy MS Excelu 2007 jednoduše

Základy MS Excelu 2007 jednoduše Základy MS Excelu 2007 jednoduše Učební texty jsou určeny pro všechny, kteří nechtějí studovat tlusté příručky a přitom se chtějí snadněji orientovat v tabulkovém editoru MS Excel. Právě stručný text,

Více

Koncepce katalogizace otevřených dat VS ČR. (zkrácená verze)

Koncepce katalogizace otevřených dat VS ČR. (zkrácená verze) Koncepce katalogizace otevřených dat VS ČR (zkrácená verze) Praha, květen září 2012 Zpracovali: Dušan Chlapek Jan Kučera Martin Nečaský Fakulta informatiky a statistiky, Vysoká škola ekonomická v Praze

Více

3 Současný pohled na jednotlivé směry SWI

3 Současný pohled na jednotlivé směry SWI 3 Současný pohled na jednotlivé směry SWI 3.1 Úvod Chaotický a překotný vývoj programů vedl ke stavu, označovaném jako KRIZE PROGRAMOVÁNÍ. Poučení z krize bylo v několika směrech. Jedním z nich byl směr,

Více

Datové struktury a datové typy.

Datové struktury a datové typy. Datové struktury a datové typy. Základní datové typy. Odvozené datové typy. Základní datové struktury. Odvozené datové struktury. Tomáš Bayer bayertom@natur.cuni.cz Katedra aplikované geoinformatiky a

Více

D A T A B Á Z O V É S Y S T É M Y

D A T A B Á Z O V É S Y S T É M Y 1(22) Konceptuální úroveň - vytvářím první model reality - ER-model jednoduchý grafický aparát, dá se jednoduše identifikovat - entita skládá se z vlastností, které chci zpracovávat - Chenovo pojetí -

Více

JAK NAPSAT BAKALÁŘSKOU PRÁCI

JAK NAPSAT BAKALÁŘSKOU PRÁCI Mendelova univerzita v Brně Fakulta regionálního rozvoje a mezinárodních studií JAK NAPSAT BAKALÁŘSKOU PRÁCI Jana Borůvková Brno 2010 Obsah 1 ÚVOD... 7 2 ÚVOD DO TYPOGRAFIE... 9 2.1 ODSTAVEC... 9 2.2 PÍSMO...

Více

PROGRAMOVÁNÍ V SQL Podpora výuky databázových systémů na SOŠ, založené na technologiích společnosti ORACLE.

PROGRAMOVÁNÍ V SQL Podpora výuky databázových systémů na SOŠ, založené na technologiích společnosti ORACLE. PROGRAMOVÁNÍ V SQL Podpora výuky databázových systémů na SOŠ, založené na technologiích společnosti ORACLE. Publikace vznikla v rámci projektu CZ.1.07/1.1.07/02.007, Podpora výuky databázových systémů

Více

MRP Základ vizuálního systému

MRP Základ vizuálního systému MRP - Soubor účetních agend MRP Základ vizuálního systému P. O. BOX 35 76315 Slušovice telefon: +420 577 001 258 telefax: +420 577 059 250 internet: http://www.mrp.cz průvodce uživatele programem MRP

Více

Tvorba mapové aplikace pro sledování polohy v Cloud serverová část Windows Azure

Tvorba mapové aplikace pro sledování polohy v Cloud serverová část Windows Azure Vysoká škola ekonomická v Praze Fakulta informatiky a statistiky Katedra informačních technologií Studijní program: Aplikovaná informatika Obor: Informační systémy a technologie Tvorba mapové aplikace

Více

Řízení vztahů se zákazníky a tvorba hodnoty a přidané hodnoty produktu

Řízení vztahů se zákazníky a tvorba hodnoty a přidané hodnoty produktu Bankovní institut vysoká škola Praha Katedra managementu firem a institucí Řízení vztahů se zákazníky a tvorba hodnoty a přidané hodnoty produktu Bakalářská práce Autor: Petr Pavlas Bankovní management

Více

A05 Stanovení způsobů ověření Praktické předvedení praktická neznamená jen manuální nebo ruční

A05 Stanovení způsobů ověření Praktické předvedení praktická neznamená jen manuální nebo ruční A05 Stanovení způsobů ověření Způsob ověření se stanovuje pro každé jednotlivé kritérium. Určuje, jakým postupem je kritérium ověřováno. Základní způsoby ověření jsou: - praktické předvedení - písemné

Více

VYUŽITÍ POČÍTAČŮ V ÚČETNICTVÍ

VYUŽITÍ POČÍTAČŮ V ÚČETNICTVÍ SOUKROMÁ VYSOKÁ ŠKOLA EKONOMICKÁ ZNOJMO VYUŽITÍ POČÍTAČŮ V ÚČETNICTVÍ distanční studijní opora Břetislav Andrlík, Jiří Mikulica Soukromá vysoká škola ekonomická Znojmo říjen 2014 Využití počítačů v účetnictví

Více

Dokumentace programu ATENA Část 4-1. Průvodce programem ATENA 2D. Napsali: Jan Červenka, Václav Veselý

Dokumentace programu ATENA Část 4-1. Průvodce programem ATENA 2D. Napsali: Jan Červenka, Václav Veselý Červenka Consulting s.r.o. Na Hřebenkách 55 150 00 Praha 5 Tel.: +420 220 610 018 E-mail: cervenka@cervenka.cz Web: http://www.cervenka.cz Dokumentace programu ATENA Část 4-1 Průvodce programem ATENA 2D

Více

Best practice Jak vyřizovat elektronickou poštu

Best practice Jak vyřizovat elektronickou poštu Ministerstvo informatiky Havelkova 2 130 00 Praha 3 Best practice Jak vyřizovat elektronickou poštu Verze 2.0 Obsah: Best practice Jak vyřizovat elektronickou poštu verze 2.0... 1 Obsah:... 2 Předmluva...

Více

Manuál pracovních postupů v GIS pro oblast sociálního výzkumu a sociální práci

Manuál pracovních postupů v GIS pro oblast sociálního výzkumu a sociální práci Manuál pracovních postupů v GIS pro oblast sociálního výzkumu a sociální práci pracovní postupy v GIS zpracování statistických dat atributové a prostorové výběry dat interpolační metody geostatistické

Více

Základy programování v GNU Octave pro předmět PPAŘ

Základy programování v GNU Octave pro předmět PPAŘ Základy programování v GNU Octave pro předmět PPAŘ Introduction to programing in Octave for subject denoted as Computer Aires Automation Control Jaroslav Popelka Bakalářská práce 2008 UTB ve Zlíně, Fakulta

Více

Servisně orientovaný návrh (část 3: Návrh služeb)

Servisně orientovaný návrh (část 3: Návrh služeb) KAPITOLA 15 Servisně orientovaný návrh (část 3: Návrh služeb) Ještě před tím, než se můžeme pustit do vývoje služby, musíme definovat její rozhraní. Jedná se o klasické zaříkávadlo všeobecně přijímaného

Více

Při používání tohoto zařízení je třeba vždy dodržovat následující bezpečnostní opatření.

Při používání tohoto zařízení je třeba vždy dodržovat následující bezpečnostní opatření. Návod k použití Bezpečností opatření Při používání tohoto zařízení je třeba vždy dodržovat následující bezpečnostní opatření. Bezpečnost při provozu V tomto návodu jsou používány tyto důležité symboly:

Více

Posouzení vlastností elektronických dokumentů z hlediska jejich dlouhodobého uchovávání

Posouzení vlastností elektronických dokumentů z hlediska jejich dlouhodobého uchovávání Posouzení vlastností elektronických dokumentů z hlediska jejich dlouhodobého uchovávání Ing. Ivan Zderadička, spolupracovník společnosti Central European Advisory Group S pokračujícím rozvojem informačních

Více

GNU Image Manipulation Program 1 / 317. GNU Image Manipulation Program

GNU Image Manipulation Program 1 / 317. GNU Image Manipulation Program 1 / 317 GNU Image Manipulation Program Uživatelská příručka 2 / 317 Copyright 2002, 2003, 2004, 2005, 2006, 2007 The GIMP Documentation Team Právní upozornění Permission is granted to copy, distribute

Více

Využití aplikace NetSupport School pro školní prostředí

Využití aplikace NetSupport School pro školní prostředí Využití aplikace NetSupport School pro školní prostředí Vytvořeno v rámci projektu Dotkněte se inspirace Registrační číslo: CZ.1.0.7./1.3.00/51.0046 Autoři: Ludmila Klatovská Petr Kofroň Lenka Mandryszová

Více

Analýza vybraného procesu ve středně velké potravinářské firmě

Analýza vybraného procesu ve středně velké potravinářské firmě Vysoká škola ekonomická v Praze Fakulta informatiky a statistiky Vyšší odborná škola informačních služeb v Praze Adéla Weinsteinová Analýza vybraného procesu ve středně velké potravinářské firmě Bakalářská

Více

- mikrokontrolér pro začátečníky a snadné použití

- mikrokontrolér pro začátečníky a snadné použití - mikrokontrolér pro začátečníky a snadné použití Následující text byl poprvé zveřejněn v modelářském časopisu Praktická Elektronika Amatérské Radio (www.aradio.cz) v roce 2012 jako seriál článků. Seriál,

Více

M-CAST v knihovnách. Osnova. Obecně o projektu M-CAST. Ontologie. Typy dotazů a odpovědí. Český lingvistický modul. Dotazy, odpovědi, vyhledávání

M-CAST v knihovnách. Osnova. Obecně o projektu M-CAST. Ontologie. Typy dotazů a odpovědí. Český lingvistický modul. Dotazy, odpovědi, vyhledávání M-CAST v knihovnách Marie.Bal Balíková @nkp.cz Osnova Obecně o projektu M-CAST Ontologie Typy dotazů a odpovědí Český lingvistický modul Dotazy, odpovědi, vyhledávání Aplikace v knihovnách Ukázky M. Balíková

Více