Vaše jistota na trhu IT Rozhraní a implementace Rudolf PECINOVSKÝ 2012 – Vývoj bezpečných aplikací 1.

Slides:



Advertisements
Podobné prezentace
A1PRG - Programování – Seminář Ing. Michal Typová konverze, oblast platnosti, paměťové třídy 9 Verze
Advertisements

Interní datové typy a výjimky
(instance konkrétní třídy)
Stručný úvod do UML.
Vývoj aplikací s využitím JavaFX
Seminář C++ 5. cvičení Dědičnost Ing. Jan Mikulka.
Přechod „strukturovaných“ programátorů k OO programování
Přednáška č. 3 Normalizace dat, Datová a funkční analýza
CSS a HTML 5. HTML 5 HTML5 je nová verze specifikace značkovacího jazyka HTML, která přináší podstatné změny v technologiích webových stránek. HTML5 umožňuje.
Vaše jistota na trhu IT Quo vadis, programování? Rudolf PECINOVSKÝ 2012 – e-bezpečnost v Kraji Vysočina 1.
Pole, ukazatele a odkazy
ÚVOD DO CPP 7 Dědičnost - pokračování
BLIŽŠÍ POHLED NA TŘÍDY, DĚDIČNOST - úvod
PJV151 Vnořené a vnitřní členy mohou být členy tříd a interfejsů. Je-li X obalem Y a Y je obalem Z, pak Z získá jméno X$Y$Z - kompilací vzniknou classy.
Polymorfismus Dědičnost
Programování v C++ Cvičení.
● SWIG - Simplified Wrapper and Interface Generator ● + google a diskusní fóra ● nástroj zjednodušující (a sjednocující)
Čtvrté cvičení Objektové programování Objektový model v Javě
J a v a Začínáme programovat Lucie Žoltá metody, objekty, konstruktor.
Chain of responsibility Martin Malý prezentace na předmět Návrhové vzory (PRG024) na MFF UK
Druhá přednáška Datové typy a operátory Zapouzdření Pojem rozhraní
Rudolf Pecinovský Dědění implementace Rudolf Pecinovský
Definování prostředí pro provozování aplikace dosud jsme řešili projekt v obecné rovině aplikace bude ovšem provozována v konkrétním technickém a programovém.
State. State – kontext a problém Kontext  chování objektu má záviset na jeho stavu, který se typicky mění za běhu Neflexibilní řešení  metody obsahují.
Páté cvičení Dědičnost Interface Abstarktní třídy a metody
Seminář C++ 9. cvičení Šablony Ing. Jan Mikulka. Šablony ► template – vzory, podle kterých může překladač tvořit skupiny podobných tříd nebo funkcí, které.
Vaše jistota na trhu IT Generické a parametrizované datové typy a metody Rudolf PECINOVSKÝ 1.
Rudolf Pecinovský Rozhraní Rudolf Pecinovský
Adapter. Adapter – pojem Součástka navržená k propojení dvou „nekompatibilních“ zařízení Definice slova podle Cambridge Advanced Learner's Dictionary:
Objektové orientované programování Objektově orientované problémy v PHP Lukáš Masopust 2008.
Objektové programování
Jedenácté cvičení Vlákna. Java cv112 Vlákna Operační systém Mutitasking – více úloh se v operačním programu vykonává „současně“ Java Multithreading -
08/04/20151 Delegáty (1) Delegát (delegate) je datový typ, který definuje signaturu metody Delegáty bývají rovněž označovány jako typo- vě bezpečné ukazatele.
Strategy. Strategy – „All-in-1“ na začátek class AStrategy { public: virtual void Algorithm()=0; protected: AStrategy(); }; class SpecificStrategy: public.
Rudolf Pecinovský Dědění implementace Rudolf Pecinovský
Seminář C++ 4. cvičení Objekty Ing. Jan Mikulka. Co je objekt ► obraz třídy i instance ► třída – definovaná za pomocí klíčového slova class ► instance.
6. cvičení Polymorfismus
Vaše jistota na trhu IT Interní datové typy Rudolf Pecinovský
KIV/PPA1 cvičení 8 Cvičící: Pavel Bžoch. Osnova cvičení Objekty v Javě Třída Konstruktor Metody Metody a proměnné třídy x instance Program sestávající.
OSNOVA: a) Úvod do OOPb) Třídy bez metod c) Třídy s metodamid) Konstruktory a destruktory e) Metody constf) Knihovní třídy g) Třídy ve tříděh) Přetížení.
Algoritmizace a programování Objektově orientované programování - 16 Mgr. Josef Nožička IKT Algoritmizace a programování
PB161 Principy OOP - rozhraní, dědičnost PB161 | Principy OOP - Dědičnost, rozhraní
IB111 Programování a algoritmizace
Návrh a tvorba WWW Přednáška 5 Úvod do jazyka PHP.
OSNOVA: a) Přetížení členských funkcí b) Dědičnost tříd Jiří Šebesta Ústav radioelektroniky, FEKT VUT v Brně Počítače a programování 2 pro obor EST BPC2E.
Dědičnost - inheritance dědičnost je jednou z forem znovupoužitelnosti dědičnost je jednou z forem znovupoužitelnosti B A Třída A je předkem třídy B Třída.
13/04/20151 Datový typ třída – class (1) Datový typ definovaný uživatelem Poskytuje mechanismus pro modelování entit, s nimiž manipulují aplikace Charakterizuje.
Databázové modelování
Metodika objektového přístupu při tvorbě překladačů. Marek Běhálek Informatika a aplikovaná matematika FEI VŠB-TU Ostrava.
Šesté cvičení Výjimky Balíky.
Principy OOP Objektově orientované programování vychá-zí ze třech základních principů (rysů): zapouzdření (encapsulation) dědičnost (inheritance) polymorfismus.
Decorator. Rozšiřuje objekty o dodatečné chování  rozšiřuje konkrétní objekty, ne třídy  rozšiřuje objekt dynamicky, tj. za běhu Upřednostňuje kompozici.
Návrh podle kontraktu - klasická metodika a moderní nástroje Tomáš Pitner Masarykova univerzita v Brně Fakulta informatiky
Pokročilé programování v C++ (část B)
Jazyk C A0B36PRI - PROGRAMOVÁNÍ Část II.
Service layer. Service layer – úvod Problém  Vytvoření API aplikace  Odstínění bussiness logiky a transakčního chování od zbytku aplikace  Kam s aplikační.
Observer Martin Dráb Návrhové vzory, Co to je?  Definuje závislost 1:N mezi objekty  Závislé objekty jsou informovány o změně stavu  Konzistentní.
Strategy. Motivace Různé algoritmy pro stejnou akci Hromada kódu v mnoha podmínkách Důsledky  Komplexnost  Špatná čitelnost  Těžká správa kódu  Těžka.
Template Method. Motivační příklad – reálný svět Čaj 1) Uvař vodu 2) Dej do hrnku sáček čaje 3) Zalij hrnek 4) Přisyp cukr a vymačkej citrón Káva 1) Uvař.
Vaše jistota na trhu IT Výčtové a interní datové typy Rudolf Pecinovský
PROGRAMOVÁNÍ 3ITA,3ITB Jaroslav Burdys Hlavní zdroj:
NÁZEV ŠKOLY: S0Š Net Office, spol. s r.o., Orlová-Lutyně AUTOR: Ing. Adéla Tomalová NÁZEV: Podpora výuky v technických oborech TEMA: Objektově orientované.
PJV15 1 Vnořené ( nested ) a vnitřní ( inner ) členy Třídy či interfejsy mohou být členy tříd či interfejsů. Je-li X obalem Y a Y obalem Z, pak Z získá.
Programování v jazyce C++ Speciality jazyka C++, úvod do OOP.
Vývojová prostředí Objektově Orientované Programování OB21-OP-EL-KON-DOL-M Orbis pictus 21. století.
Úvod do C# - OOP Jaroslav BURDYS 4IT.
Návrhový vzor Flyweight
Bridge.
C# přehled vlastností.
NÁZEV ŠKOLY: S0Š Net Office, spol. s r.o., Orlová-Lutyně
Transkript prezentace:

Vaše jistota na trhu IT Rozhraní a implementace Rudolf PECINOVSKÝ 2012 – Vývoj bezpečných aplikací 1

Vaše jistota na trhu IT Rozhraní × Implementace ►Rozhraní × Implementace (odkaz dovnitř)Rozhraní × Implementace 159–176

Vaše jistota na trhu IT Rozhraní × Implementace principy ►Rozhraní × Implementace ►Signatura × Kontrakt ►Dokumentační komentáře ►Zásady správného programování 159–176

Programování proti rozhraní ►Jedna z hlavních zásad říká, že programovat se má proti rozhraní a ne proti implementaci ►Řada studentů ale stále netuší, co to je rozhraní a k čemu je v programu dobré ►Další možná umějí implementovat interface, ale vůbec netuší, kdy by jej měli zakomponovat do svého návrhu ►=> Následuje malé opakování 2012 – e-bezpečnost v Kraji Vysočina 4

ICZ Copyright © 2009, Rudolf Pecinovský 5 Trocha mytologie ►Janus římský bůh vchodů, dveří, počátku a konce ►Měl dvě tváře: jedna hleděla do budoucnosti, druhá do minulosti ►I program má dvě tváře: Rozhraní × Implementace

VŠE – 03 Copyright © 2006, Rudolf Pecinovský 6 RozhraníImplementace Definuje, co bude zbytek programu o dané entitě vědět Všem na sebe všechno řekne Zabezpečuje, aby entita plnila svoji funkci Všechno se snaží maximálně utajit I samotné rozhraní má dvě složky ►Signatura Specifikuje vlastnosti, které může zkontrolovat překladač (názvy, typy, …) ►Kontrakt Doplňuje další důležité informace, které však překladač zkontrolovat nedokáže – o jejich dodržení se musí postarat programátor

VŠE – 03 Copyright © 2006, Rudolf Pecinovský 7 Příklad – rozhraní ITvar v projektu Tvary

Příklad: Přesouvač ►Definici plynulého posunu nebudeme programovat v každé třídě, ale „vytkneme“ ji do zvláštní třídy, která bude všechny tvary obsluhovat ►Instance třídy Přesouvač jsou ochotny plynule přesunout každého, kdo implementuje interface ITvar ►K implementaci se třídy musí veřejně přihlásit Úvod do OOP ICZ, 2011 © Rudolf Pecinovský 8

Obsluha instancí neznámí třídy ►Pokud Přesouvač obsluhuje všechny instance rozhraní ITvar, je schopen plynule přesunout i instance třídy, která v době jeho vzniku ještě vůbec neexistovala – stačí, aby třída implementovala ITvar Úvod do OOP ICZ, 2011 © Rudolf Pecinovský 9

Zjednodušení požadavků ►Z hlediska objektů, které chtějí být pouze plynule přesouvány, má rozhraní ITvar z předchozího příkladu na implementující třídy zbytečně velké nároky ● Přesouvači by mělo stačit, když instance umí prozradit svoji pozici a umí se přesunout na zadanou pozici; vše ostatní je zbytečné ►Lepší řešení je proto definovat nové rozhraní, např. IPosuvný, které omezí své požadavky na ty, jejichž splnění přesouvač bezpodmínečně potřebuje ►Třída může implementovat několik rozhraní současně ►Můžeme proto definovat a implementovat i další rozhraní, která např. definují požadavky instancí třídy Kompresor na instance, které chtějí plynule měnit svůj rozměr Úvod do OOP ICZ, 2011 © Rudolf Pecinovský 10

Implementace více rozhraní ►Když budou všechny třídy tvarů implementovat všechna rozhraní, diagram se opět znepřehlední ►K zpřehlednění diagramu využijeme možnosti definovat mezi rozhraními vztahy dědičnosti: ►Potomek přebírá všechny požadavky předka a může přidat i své vlastní Úvod do OOP ICZ, 2011 © Rudolf Pecinovský 11

VŠE – 05 Copyright © 2006, Rudolf Pecinovský 12 Pravidla dědičnosti rozhraní ►Rozhraní může být potomkem jiného rozhraní; svého rodiče pak uvede v hlavičce za slovem extends interface IHýbací extends IPosuvný, INafukovací ►V diagramu tříd znázorňujeme vztah předek–potomek šipkou s trojúhelníkovým koncem ukazujícím k předku ►Dceřiné rozhraní přebírá (dědí) všechny metody deklarované rodičem ►Třídy implementující dceřiné rozhraní musí implementovat všechny jeho metody včetně zděděných

Použití v projektu Úvod do OOP ICZ, 2011 © Rudolf Pecinovský 13

Vaše jistota na trhu IT Rozhraní × Implementace v Javě ►Rozhraní × Implementace ►Signatura × Kontrakt ►Dokumentační komentáře ►Zásady správného programování 159–176

ICZ Copyright © 2009, Rudolf Pecinovský 15 Rozhraní a implementace metody ►Rozhraní – signatura ● Jmenuje se blikni ● Nemá žádné parametry ● Nic nevrací ►Rozhraní – kontrakt ● Světlo nejprve „rozsvítí“ ● Nechá je „svítit“ půl vteřiny ● Po půl vteřině je opět „zhasne“ ►Implementace ● K rozsvícení světla používá svoji metodu rozsviť() ● Půlvteřinové svícení zabezpečí pozastavením programu pomocí metody čekej() třídy IO, které předá počet milisekund čekání ● Zhasnutí realizuje zavoláním své metody zhasni() public void blikni() { rozsviť(); IO.čekej( 500 ); zhasni(); }

ICZ Copyright © 2009, Rudolf Pecinovský 16 ►Rozhraní – signatura ● Třída se jmenuje Světlo ● Třída má metody – 4 přetížené verze konstruktorů – rozsviť(), zhasni() – blikni() – getBarva(), getPozice() – getPrůměr(), isZhasnuté() – setPozice(int,int) – setPozice(Pozice) ►Rozhraní – kontrakt ● Co která metoda umí ►Implementace ● Používané atributy ● Realizace jednotlivých metod public class Světlo { private static final Barva ZHASNUTÁ = Barva.ČERNÁ; private final Elipsa žárovka; private final Barva barva; public Světlo() { this( 0, 0 ); } public Světlo( int x, int y ) { this( x, y, Barva.ČERVENÁ ); } public Světlo( int x, int y, Barva barva ) { this( x, y, 50, barva ); } public Světlo( int x, int y, int průměr, Barva barva ) { žárovka = new Elipsa( x, y, průměr, průměr, barva ); this.barva = barva; } public void zhasni() { žárovka.setBarva( ZHASNUTÁ ); } public void rozsviť() { žárovka.setBarva( barva ); } public void blikni() { rozsviť(); IO.čekej( 500 ); zhasni(); } public int getPrůměr() { return žárovka.getŠířka(); } public Barva getBarva() { return barva; } public boolean isZhasnuté() { return žárovka.getBarva() == ZHASNUTÁ; } public Pozice getPozice() { return new Pozice( žárovka.getX(), žárovka.getY() ); } public void setPozice( int x, int y ) { žárovka.setPozice( x, y ); } public void setPozice( Pozice p) { žárovka.setPozice( p.x, p.y ); } Rozhraní a implementace třídy

ICZ Copyright © 2009, Rudolf Pecinovský 17 interface – formalizovaný zápis rozhraní ►Java zavedla speciální konstrukci umožňující deklarovat rozhraní bez jakékoliv zmínky o implementaci ►Konstrukce dostala název interface – je to vlastně třída bez implementace ►Signatura rozhraní je dána deklaracemi metod a statických konstant (konstanty se nedoporučuje používat) ►Kontrakt je (stejně jako u standardních tříd) definován prostřednictvím dokumentačních komentářů ►Také interface je třeba přeložit, po překladu má vlastní soubor.class ►V diagramu tříd je doplněn stereotypem «interface»

ICZ Copyright © 2009, Rudolf Pecinovský 18 Proč používat interface ►Odděluje třídy, které by na sobě jinak vzájemně závisely, a umožňuje je pak měnit nezávisle na sobě (viz NV Most) ►Umožňuje deklarovat požadované vlastnosti zpracovávaných objektů bez ohledu na to, čí instancí tyto objekty budou (viz NV Služebník) ►Umožňuje definovat obecněji koncipované služby (metody) ►Umožňuje zobecnit společné vlastnosti skupiny tříd a definovat pak metody schopné pracovat s instancí kterémkoliv třídy z dané skupiny

ICZ Copyright © 2009, Rudolf Pecinovský 19 Rozhraní a moderní programování ►Programujte proti rozhraní, ne proti implementaci (Program to an interface, not an implementation) ►Programátor nesmí využívat své znalosti o implementačních detailech použitých objektů, protože implementace se může záhy změnit ►Při deklaraci dat se snažit využít ten nejobecnější typ, který ještě vyhovuje ● ArrayList -> List -> Collection ►Aktivní obrana: při návrhu využívat definici interface i při definici společného rodičovského typu ● Standardní knihovna kolekcí

ICZ Copyright © 2009, Rudolf Pecinovský 20 Knihovna kolekcí – architektura

ICZ Copyright © 2009, Rudolf Pecinovský 21 Interní × publikované rozhraní ►Interní (pracovní) rozhraní (= používané jen v projektu) navrhovat tak, aby se minimalizovala pravděpodobnost nutnosti změny ● Modifikace v důsledku jeho změny je pracná, ale řešitelná ● Výrazně ji usnadňují refaktorační nástroje ►Publikované rozhraní = rozhraní, které budou používat externí uživatelé se nesmí měnit ● Není možné zabezpečit korektní reakce na změnu ● Bylo-li navrženo špatně, je nutno definovat nové a označit původní jako zavržené (deprecated) ● I po změně však musí být toto zavržené rozhraní použitelné ve svém původním rozsahu ● Knihovna kolekcí

Vaše jistota na trhu IT Děkuji za pozornost ►Rudolf Pecinovský mail: ICQ: – e-bezpečnost v Kraji Vysočina22

2012 – e-bezpečnost v Kraji Vysočina 23

Pgm Používaná písma a objekty ► Pgm Příliš žluťoučký kůň úpěl ďábelské ódy (Demi) ● Pgm Příliš žluťoučký kůň úpěl ďábelské ódy (Medium) ● Pgm Příliš žluťoučký kůň úpěl ďábelské ódy (Cond) ►Příliš žluťoučký kůň úpěl ďábelské ódy (Heavy) ● Příliš žluťoučký kůň úpěl ďábelské ódy (Franklin Gothic Book) ● Příliš žluťoučký kůň úpěl ďábelské ódy (Comic Sans MS) ● Příliš žluťoučký kůň úpěl ďábelské ódy (Consolas) Program Keyword Opakování Příliš žluťoučký kůň úpěl ďábelské ódy 2012 – e-bezpečnost v Kraji Vysočina 24