Návrhové vzory pro GUI

Podobné dokumenty
Vývoj informačních systémů. Architektura, návrh Vzory: Doménová logika

Vývoj informačních systémů. Architektura, návrh Vzory: Doménová logika

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

CineStar Černý Most Praha

MVC (Model-View-Controller)

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

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

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

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

Design Patterns. Tomáš Herceg Microsoft MVP (ASP.NET)

Analýza a Návrh. Analýza

Vývoj informačních systémů. Přehled témat a úkolů

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

Hiearchical MVC (Model-view-controller) vs. PAC (Presentation-abstraction-control)

Semináˇr Java X J2EE Semináˇr Java X p.1/23

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

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

Java/QE Akademie - Osnova

Observer. Klasifikace. Alias. Smysl. Potřeba sledování změn objektu a notifikace. Obdoba systému událostí (C#, Java) vlastními prostředky

Návrhové vzory OMO, LS 2014/2015

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

Programování II. Modularita 2017/18

Návrhové vzory pro GUI

Vývoj informačních systémů. Přehled témat a úkolů

Aplikace je program určený pro uživatele. Aplikaci je možné rozdělit na části:

Generické programování

IS pro podporu BOZP na FIT ČVUT

14. května 2012, Brno

Při studiu tohoto bloku se předpokládá, že student je zvládá základy programování v jazyce Java s využitím vývojového prostředí NetBeans.

MVVM pro desktop i web

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

Efektivní vývoj mobilních aplikací na více platforem současně. Mgr. David Gešvindr MCT MSP MCPD MCITP

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

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

Architektura rodiny operačních systémů Windows NT Mgr. Josef Horálek

Software602 Form Designer

Business Intelligence

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

Technologie Java Enterprise Edition. Přemek Brada, KIV ZČU

Mobile application developent

Vývoj informačních systémů. Obecně o IS

Návrhový vzor Factory v JAVA API

PHP framework Nette. Kapitola Úvod. 1.2 Architektura Nette

ČESKÉ VYSOKÉ UČENÍ TECHNIKÉ Fakulta elektrotechnická. Microsoft Sharepoint 2007 Workflows Průmyslové informační systémy

Hospodářská informatika

VZOROVÝ STIPENDIJNÍ TEST Z INFORMAČNÍCH TECHNOLOGIÍ

NetBeans platforma. Evropský sociální fond Praha & EU: Investujeme do vaší budoucnosti

Architektura. Vedení sesterské dokumentace

Design systému. Komponentová versus procesní architektura

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

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

Specifikace projektu Ocerus

Jak testovat software v praxi. aneb šetříme svůj vlastní čas

Vstupní požadavky, doporučení a metodické pokyny

MBI - technologická realizace modelu

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

PŘÍRODOVĚDECKÁ FAKULTA UNIVERZITY PALACKÉHO KATEDRA INFORMATIKY BAKALÁŘSKÁ PRÁCE. Návrhové vzory Dan Doležel

Wonderware Information Server 4.0 Co je nového

Úvodem... 9 Kapitola 1 Karetních

JavaScript 101. "Trocha života do statických stránek"

1 Webový server, instalace PHP a MySQL 13

Platforma.NET 11.NET Framework 11 Visual Basic.NET Základní principy a syntaxe 13

Embedded vývoj v Clutteru a Mx

Jazyk C# (seminář 6)

Zpravodaj. Uživatelská příručka. Verze

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

Nástroje na vývoj aplikací pro ios Trocha motivace na úvod Co budete potřebovat Co když nemáte k dispozici počítač s macos? Vývojové prostředí Xcode

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

Začínáme pracovat s tabulkovým procesorem MS Excel

Dědění, polymorfismus

Obsah. Kapitola 1. Předmluva 11 O této knize 13 Konvence...13

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

PB161 Základy OOP. Tomáš Brukner

Rozklad na prvočinitele. 3. prosince 2010

Architektury informačních systémů

Komponentově orientované webové frameworky. Jiří Stránský twitter.com/jistr

Architektury informačních systémů

Obsah. Úvod 11 Zpětná vazba od čtenářů 13 Errata 14 Poznámka ke kódům 14

Návrh softwarových systémů - architektura softwarových systémů

Knot DNS Resolver. Modulární rekurzivní resolver. Karel Slaný

GUI. Systémová integrace pro desktopové aplikace

JAVA Unit testing Java, zimní semestr

Úvod 1 ČÁST 1 HTML 1 Základy HTML a kaskádových stylů 5

Programátorská příručka

Nový design ESO9. E S O 9 i n t e r n a t i o n a l a. s. U M l ý n a , P r a h a. Strana 1 z 9

Vývoj rozhraní pro vzdálené ovládání systému mainframe. Fakulta jaderná a fyzikálně inženýrská České vysoké učení technické v Praze

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

Vývoj řízený testy Test Driven Development

Principy OOP při tvorbě aplikací v JEE. Michal Čejchan

D2 - GUI design. Radek Mečiar

Outdoor Expert. Uživatelský manuál. Verze aplikace: OutdoorExpert_Manual.docx 1 /

Obsah. O autorech 9 Earle Castledine 9 Myles Eftos 9 Max Wheeler 9 Odborný korektor 10. Předmluva 11 Komu je kniha určena 12 Co se v knize dočtete 12

Bc. Martin Majer, AiP Beroun s.r.o.

Architektury Informačních systémů. Jaroslav Žáček

Dílčí projekt: Systém projektování textilních struktur 1.etapa: tvorba systému projektování vlákno - příze - tkanina

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

Vlákno (anglicky: thread) v informatice označuje vlákno výpočtu neboli samostatný výpočetní tok, tedy posloupnost po sobě jdoucích operací.

PŘÍLOHA C Požadavky na Dokumentaci

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

Transkript:

Návrhové vzory pro GUI RICHARD LIPKA 19. 3. 2018

Základní struktura GUI Vstup od uživatele Propojení s periferiemi Zpracování událostí Co se má stát po vstupu Spojení s jádrem programu Užitečná činnost Zpracování vstupu (od OS) Grafický subsystém Vykreslení obrazu Reakce na události Vlastní činnost Vykreslování 19.3.2018 UUR - NÁVRH APLIKACE 2

Interakce s uživatelem OS zajišťuje komunikaci s periferiemi Jednoduchá komunikace Stisknutí tlačítka Pohyb myši Jedna jasná událost z okolí Gesta Dvojklik, trojklik Gesta myši, drag and drop Více dotyková zařízení Klávesové kombinace Stisk tlačítka Kinect a podobná zařízení gesta rukou Potřebuji je rozpoznávat V ideálním případě jejich rozpoznání zajistí OS / platforma Kde to jde reagovat na gesta - univerzálnější Správa přerušení (HW) Ovladač zařízení Detekce gest Vznik události Obsluha OS Platforma Aplikace 19.3.2018 UUR - NÁVRH APLIKACE 3

Událostní smyčka 1 proces (CPU) může vykonávat jen 1 program Pevně daná posloupnost akcí Můžu se ptát jestli proběhla událost potřebuji nekonečný cyklus Proces musí zajistit Sledování událostí Rozpoznání gest (pokud je nedělá někdo za něj) Reakci na události Aktualizaci vzhledu Včetně změn kurzoru, podbarvení tlačítek Smyčka funguje ve většině technologií sama Nenarušovat ji, jen využít Pokračovat? Vezmi událost z fronty Je tam? ne ano ano Překresli okno Zavolej obsluhu ne 19.3.2018 UUR - NÁVRH APLIKACE 4

Zpracování události Každé události je třeba nastavit obsluhu Běží uvnitř smyčky událostí krátká a rychlá (nebo nové vlákno)! jinak GUI zamrzne! Platforma obvykle dokáže zpracovat základní gesta Kliknutí na obrazovku Událost myši pozice, identifikace tlačítka Lze získat z OS / ovladače příslušného zařízení Stisk tlačítka V důsledku stisknutí levého tlačítka myši nad komponentou tlačítko (nebo stisknutí klávesnicí, nebo stisknutí na dotykovém zařízení) Platforma musí zjistit že k ní došlo (OS nerozumí vnitřku okna, pokud není nativní) Platforma může vytvořit odpovídající událost, reagovat na ni (univerzálnější) Pozor, gesto může existovat s původní událostí lze reagovat na obojí (ale chci to?) 19.3.2018 UUR - NÁVRH APLIKACE 5

Důležité aspekty vývoje Návrh je naprosto nezbytný Nejdřív na papíře / v modelovacím nástroji! Nikdy bez spolupráce s uživatelem! (nebo alespoň bez dobré znalosti jeho práce) Iterativní design Prvotní návrh málokdy funguje, počítat s tím Chyby a problémy se často projeví až při testování / skutečném používání obtížné testovat GUI bez funkčního backendu Všechny fáze konzultovat s uživatelem / testovat Držet se zvyklostí platformy Často existují odpovídající manuály (Windows, Mac OS, Android) Uživatel se v aplikaci snáze vyzná Pozor na vstupy Cokoliv co uživatel zadává je podezřelé testovat, kontrolovat, upozorňovat 19.3.2018 UUR - NÁVRH APLIKACE 6

Důležité aspekty vývoje Pozor na zpracování chyb Nikdy je neskrývejte Nezobrazujte uživateli nic čemu nerozumí logy pro vývojáře, srozumitelná chybová hlášení Stabilní aplikace Uživatel si vytváří mentální mapu aplikace neměnit pozice prvků, neskrývat - nepomáhá to Uživatele lze sledovat Existuje řada studií o tom kam uživatelé koukají, co vidí dřív a co později Aplikace může logovat své používání je poznat co a jak se používá 19.3.2018 UUR - NÁVRH APLIKACE 7

Řízení aplikace - doporučení Umožněte ovládání myší i klávesnicí Klávesové zkratky urychlují práci Myš občas nefunguje nespoléhat jen na ni (podle možností) Popisujte srozumitelně všechny prvky Jasné popisy tlačítek a menu Kontextová nápověda (popup) když je text moc dlouhý Vratné akce Umožněte uživateli vracet jednotlivé úklony ( zpět ve Wordu) Nepovolte destruktivní akce bez ověření Okamžitá reakce Nikdy nenechte GUI zamrznout, vždy zobrazujte jak dlouho bude ještě pracovat (nebo alespoň že je vytížené) Umožněte zastavení probíhajících činností bez poškození dat Konzistentní GUI Seskupujte související ovládací prvky Reagujte na chyby vždy stejně dialog, pomocný výpis, stavová lišta 19.3.2018 UUR - NÁVRH APLIKACE 8

Dělení aplikace na vrstvy Zapouzdření = komunikace jen přes definovaná rozhraní implementace je skrytá před ostatními vrstvy jsou na sobě nezávislé snadná záměna a spolupráce na jednotlivých částech aplikace Soudržnost (cohesion) : 1 entita, 1 úkol Minimální provázanost (loose coupling): kde to jde vyhnout se závislostem Obojí lze měřit, nespoléhat slepě na metriky A D A D B E B E C F C << Interface >> F 19.3.2018 UUR - NÁVRH APLIKACE 9

Vrstvení aplikace třívrstvá architektura Prezentační vrstva Uživatelské rozhraní Přijímá pokyny a převádí výsledky do uživatelem pochopitelné podoby Logická vrstva Aplikační procesy, výpočty Datová vrstva Ukládání a získávání dat (databáze / soubory) 19.3.2018 UUR - NÁVRH APLIKACE 10

Návrhové vzory Poslední přednáška OOP! Vzorečky pro tvorbu programů Pokrývají základní situace které se opakovaně objevují Usnadňují komunikaci mezi vývojáři a návrháři (můžu pojmenovat i složitější struktury) Vyzkoušená a funkční řešení urychlují návrh a vývoj!!! Pokud jsou správně použity!!! Je dobré je znát a rozumět jim, není nutné je používat vždy (výhody se obvykle projeví u větších a dlouhodobě udržovaných projektů) Z roku 1995 (GoF) - Erich Gamma, Richard Helm, Ralph Johnson and John Vlissides: Design Patterns: Elements of Reusable Object-Oriented Software, 1995 Pro jazyk C++ - řada věcí v Javě zadarmo podporována návrhem jazyka 23 vzorů, 3 skupiny V knihovně česká verze (Návrh programů pomocí vzorů : stavební kameny objektově orientovaných programů) 19.3.2018 UUR - NÁVRH APLIKACE 11

Návrhové vzory potřebné pro GUI Architektonické vzory (doplněné později) Model-View-Controler Model-View-Presenter Model-View-ViewPresenter Konstrukční vzory Tovární metoda (Factory) Postupem času se objevily další vzory Strukturální vzory Kompozit [Strom, graf] (Composite) Vzory chování Pozorovatel (Observer) Prostředník (Mediator) Iterátor (Iterator) Strategie (Strategy) Ozdoba (Decorator) Velké množství informací je možné nalézt na internetu (bohužel obvykle bez podrobného rozboru) http://en.wikipedia.org/wiki/software_design_pattern http://www.tutorialspoint.com/design_pattern/index.htm 19.3.2018 UUR - NÁVRH APLIKACE 12

Pozorovatel (Observer) Univerzální obsluha událostí Pozorovatel (obvykle rozhraní nebo abstraktní třída) a jeho potomci Metoda notify() pro oznámení změny Pozorovaný Reference na pozorovatele Registrace a deregistrace Může vést k memory leakům, pokud se pozorovatelé neodhlašují Základ pro složitější vzory V Javě třída Observable a rozhraní Observer Obvykle je třeba vlastní implementace nechci dědit od Observable Observable addobserver() deleteobserver (Observer o) haschanged() clearchanged() setchanged() notifyobservers() notifyobservers (Object o) Observer update (Observable o Object arg) 19.3.2018 UUR - NÁVRH APLIKACE 13

Prostředník (Mediator) Komunikace mezi objekty aniž by na sebe měly referenci Zdroj odesílá zprávy do schránky Cíle si zprávy ze schránky vybírají Zdroj a cíl může být stejný objekt, peer to peer komunikace Umožňuje asynchronní komunikaci větší míra oddělení vrstev Běžný ve složitějších frameworcích (OSGi) Mediator a Colleague (Producer a Consumer) obvykle reprezentováni rozhraním Pro příjem zpráv lze využít vzor Observer Mediátor obvykle umožňuje filtrování zpráv pro posluchače (podle zdroje nebo obsahu zprávy) 19.3.2018 UUR - NÁVRH APLIKACE 14

Model-View-Controller (MVC) Klasický model komunikace počítače s člověkem, nejstarší Dělí GUI na 3 moduly Model: udržuje stav systému, obsahuje logiku aplikace aktivní nebo pasivní View: zobrazuje systém uživateli na základě informací z modelu Controller: Přijímá vstup od uživatele, provádí změny v modelu, volí vhodné view pro výstup Typické pro webové aplikace Model backend aplikace View zobrazované html Controller zpracování vrácených formulářů Velmi často hierarchický (pro každou komponentu) 19.3.2018 UUR - NÁVRH APLIKACE 15

Model-View-Presenter (MVP) Podobný jako MVC, view může být pasivní Model: rozhraní pro přístup k datům, logika aplikace View: Pasivní rozhraní které zobrazuje data Supervising controller: view navíc zpracovává vstup od uživatele Presenter: Získává data z modelu a předává je view Pokud je víc view, pro každé musí být vlastní presenter 19.3.2018 UUR - NÁVRH APLIKACE 16

Model-View-ViewModel (MVVM) Nejnovější, vytvořený v Microsoft Model: doménový model, data, logika aplikace View: prezentační vrstva - vstup i výstup pro uživatele ViewModel: abstrakce view pro model binding dat mezi view a viewmodel obraz vstupních a výstupních polí (nepotřebuje referenci na view, binding zajistí framework) může být doplněn o separátní controllery 19.3.2018 UUR - NÁVRH APLIKACE 17

MVC vs. MVP vs. MVVM Model a View víceméně vždy totéž Model: data a logika aplikace View: to co vidí uživatel a s čím může pracovat (formuláře, tlačítka, stránky na webu, ) Controler: Ovladače pro uživatele, přímo manipuluje s modelem V klasické podobě přímo ovládací prvky V moderní podobě třídy zpracovávající vstupy Presenter: Překladač modelu pro view, reference mezi view a modelem, synchronní komunikace ViewModel: Překladač view pro model, binding zajišťuje aktualizaci dat detaily implementace viz http://joel.inpointform.net/software-development/mvvm-vs-mvp-vs-mvc-the-differences-explained/ 19.3.2018 UUR - NÁVRH APLIKACE 18

Odbočka Novinky ve světě JavaFX Změna struktury Java JDK a číslování verzí Půlroční interval vydávání, nové číslování verzí, snaha o menší jádro Javy (Java 10 18.3 někdy brzy, Java 11-18.9) JavaFX, Java Web Start, Applet odděleny do samostatných modulů (snaha totéž udělat i se Swing, AWT, ) Kotlin a TornadoFX Jazyk nad JRE Od autorů IntelliJ IDEA Snaha o snazší synxaci a přehlednější kód FXGL - Knihovna pro herní aplikace Podpora Javy a Kotlinu Paralaxní scrollling, částicové systémy, manipulace s texturami, základní fyzika (kolize, Box2D), podpora pro AI (gdx-ai), hledání cest, 19.3.2018 UUR - NÁVRH APLIKACE 19

Dekompozice aplikace - příklad GUI Add Button Table Store Button Volá metodu store() z rozhraní Controller Zobrazuje Vytváří instance (volá konstruktor nebo továrnu) Datový model - kolekce Task Person Department Odpovídá struktuře databáze nebo souborů s daty Volá metodu create() z rozhraní Create new Store files Ukládá data na disk / do DB 19.3.2018 UUR - NÁVRH APLIKACE 20

Tovární metoda Metoda vytvářející instanci objektu místo konstruktoru továrna může rozhodnout o třídě vytvářeného objektu Klient neví nic o způsobu vytváření objektu Zná jen rozhraní objektu který továrna vrací Může odstínit od složitých konstruktorů Za běhu lze rozhodnout o použité implementaci předáním vhodné reference (místo podmínky) 19.3.2018 UUR - NÁVRH APLIKACE 21

Iterátor Vzor pro průchod všemi prvky daného kontejneru Skrývá implementaci kontejneru (nemusím vědět jakým způsobem ho procházet jednoduché u polí, těžší u stromů) Jen pokud je možné jednoznačně určit pořadí prvků Může existovat několik způsobů procházení V Javě umožňuje tvorbu zkráceného for cyklu nebo použití foreach() V Javě rozhraní Iterator hasnext() getnext() remove() nemusí být podporovaná funkce Pro seznamy ListIterator<E> Rozhraní Iterable pro objekty přes které lze iterovat 19.3.2018 UUR - NÁVRH APLIKACE 22

Kompozit Umožňuje zacházet se skupinou objektů jako s jedním objektem Vytváří stromovou strukturu (prvkem kompozitu mohou být další kompozity) Při změně kompozitu nemusím měnit klienta Typicky okno v GUI, geometrické objekty složené z grafických primitiv 19.3.2018 UUR - NÁVRH APLIKACE 23

Strategy Definována sada algoritmů které Mohou být zaměňovány Za běhu programu si lze vybrat který bude použit Algoritmy ukryty za rozhraním jednotný přístup Užitečné pro Layoutování prvků v okně Práci s různými typy souborů Řazení podle různých pravidel Mění chování objektu, ale ne jeho vzhled (ve smyslu API) na venek 19.3.2018 UUR - NÁVRH APLIKACE 24

Dekorátor (Wrapper) Doplnění nebo úprava funkcionality danému objektu, aniž by se změnilo jeho standardní chování Může fungovat staticky i dynamicky (přiřazení za běhu) Nemění se původní třída Lze na sebe vršit několik dekorátorů Znáte z I/O proudů, třída Optional<T> V GUI např. doplnění posuvníků nebo rámečků 19.3.2018 UUR - NÁVRH APLIKACE 25

Dekorátor 1. Dekorovaný prvek a dekorátor sdílejí stejné rozhraní (nebo jsou potomky téže třídy) 2. Dekorátor má referenci na dekorovaný objekt (obvykle získaný v konstruktoru) 3. Všechna volání předává dekorovanému objektu 4. Implementace dekorátoru překrývá metody které je třeba měnit nebo přidává nové 19.3.2018 UUR - NÁVRH APLIKACE 26

Lambda výrazy V Javě od verze 1.8 Lze chápat jako anonymní metody Hodí se při potřebě anonymní vnitřní třídy s jedinou metodu Umožňují použít jako parameter metody jinou metodu Hodí se pro Porovnávání (tvorba komparátoru) Zpracování celé kolekce (metoda foreach()) Reakce na události (jednoduchý obslužný objekt) 19.3.2018 UUR - NÁVRH APLIKACE 27

Lambda výrazy - zápis (parametry) -> {tělo metody} Parametry: seznam parametrů (a typů pokud je třeba) Obvykle si překladač dokáže typ parametru odvodit Tělo metody: blok který se má provést Lze použít tam, kde se jako parametr očekává instance rozhraní s jedinou metodou ( functional interface ) Z definice metody se odvozují typy Příklad: Pro interface Comparator, metodu compare() (name1, name2) -> { if (name1.length() == name2.length()) { return 0; } if (name1.length() > name2.length()) { return -1; } else { return 1; } } 19.3.2018 UUR - NÁVRH APLIKACE 28

Lambda výrazy příklad II Lambda výraz bez implementace rozhraní (int x, int y) -> x+y (x, y) -> { return x+y; } (int x, int y) -> { System.out.println(x+y); return x+y; } Lambda výraz a rozhraní @FunctionalInterface interface Converter { double convert(double input); } static double convert (Converter converter, double input) { return converter.convert(input); } System.out.println (convert(input -> (input-32)*5.0/9.0, 98.6)); 19.3.2018 UUR - NÁVRH APLIKACE 29

Děkuji za pozornost 19.3.2018 UUR - NÁVRH APLIKACE 30