50
Platformy NetBeans a Eclipse, letní semestr 2016 23.2.2016 Platformy NetBean a Eclipse Platformy NetBean a Eclipse Úvod

Platformy NetBean a Eclipse - cuni.cz

  • Upload
    others

  • View
    4

  • Download
    0

Embed Size (px)

Citation preview

Page 1: Platformy NetBean a Eclipse - cuni.cz

Platformy NetBeans a Eclipse, letní semestr 201623.2.2016

Platformy NetBean a EclipsePlatformy NetBean a Eclipse

Úvod

Page 2: Platformy NetBean a Eclipse - cuni.cz

Platformy NetBeans a Eclipse, letní semestr 201623.2.2016

O předmětuO předmětu● Petr Hnětynka [email protected] ● Jiří Vinárek [email protected]

● http://d3s.mff.cuni.cz/~hnetynka/netbeans

● předpokládá se znalost Javy (alespoň v rozsahu NPRG013, lépe i NPRG021)

● 0/2 Z

Page 3: Platformy NetBean a Eclipse - cuni.cz

Platformy NetBeans a Eclipse, letní semestr 201623.2.2016

ZápočetZápočet● napsání zápočtového programu

– domluvit si zadání do konce výuky v letním semestru● poslat mailem● téma – rozšíření pro NetBeans nebo Eclipse

– více na dalších slidech

– odevzdat nejlépe do konce června● nejpozději do konce září (než začne nový akademický

rok)● předvedení osobně

– plus emailem uživatelskou dokumentaci a zdrojáky

Page 4: Platformy NetBean a Eclipse - cuni.cz

Platformy NetBeans a Eclipse, letní semestr 201623.2.2016

ZápočetZápočet● vlastní (netriviální) program/modul nad NetBeans

platform

nebo

● vlastní (netriviální) program/plugin nad Eclipse

Page 5: Platformy NetBean a Eclipse - cuni.cz

Platformy NetBeans a Eclipse, letní semestr 201623.2.2016

Osnova předmětuOsnova předmětu● Úvod (1 přednáška)● OSGi (1 přednáška)● NetBeans (6 přednášek)

– Úvod– Moduly– Okna– NB filesystem– Datové objekty a uzly

● Eclipse (6 přednášek)– Úvod– Eclipse infrastruktura — bundle, plugin, SWT, extension– UI (views, editors, menus, icons)– příkazy a akce, builders, natures– help, preferences, cheat sheets– features, bundling, branding, update sites, RICH

applications

Page 6: Platformy NetBean a Eclipse - cuni.cz

Platformy NetBeans a Eclipse, letní semestr 201623.2.2016

Literatura, odkazyLiteratura, odkazy● vše o Javě

– http://www.oracle.com/technetwork/java/● NetBeans

– http://netbeans.org/– http://platform.netbeans.org/– http://netbeans.org/features/platform/all-docs.html

● Eclipse– http://eclipse.org/– http://www.eclipse.org/articles/– http://www.vogella.de/eclipse.html

Page 7: Platformy NetBean a Eclipse - cuni.cz

Platformy NetBeans a Eclipse, letní semestr 201623.2.2016

Literatura, odkazyLiteratura, odkazy● NetBeans

● Eclipse

Page 8: Platformy NetBean a Eclipse - cuni.cz

Platformy NetBeans a Eclipse, letní semestr 201623.2.2016

O předmětuO předmětu● notebooky s sebou!● připojení k internetu s sebou!

Page 9: Platformy NetBean a Eclipse - cuni.cz

Platformy NetBeans a Eclipse, letní semestr 201623.2.2016

NetBeans a EclipseNetBeans a Eclipse

Proč používat framework...

Page 10: Platformy NetBean a Eclipse - cuni.cz

Platformy NetBeans a Eclipse, letní semestr 201623.2.2016

Proč používat...Proč používat...

Maintaining the framework takes a lot of my time :(

Let's create ourown framework!

Page 11: Platformy NetBean a Eclipse - cuni.cz

Platformy NetBeans a Eclipse, letní semestr 201623.2.2016

Proč používat...Proč používat...

Don't reinvent

the wheel!

Page 12: Platformy NetBean a Eclipse - cuni.cz

Platformy NetBeans a Eclipse, letní semestr 201623.2.2016

Proč používat...Proč používat...● Neobjevovat kolo!● Znovupoužití kódu● Existující knihovny● Modulární aplikace● Soustředění se jen na aplikační logiku● …

Page 13: Platformy NetBean a Eclipse - cuni.cz

Platformy NetBeans a Eclipse, letní semestr 201623.2.2016

Nuance V-Builder – VoiceXML Nuance V-Builder – VoiceXML

Page 14: Platformy NetBean a Eclipse - cuni.cz

Platformy NetBeans a Eclipse, letní semestr 201623.2.2016

Fiorano Studio: Lego Blocks for Fiorano Studio: Lego Blocks for SOASOA

Page 15: Platformy NetBean a Eclipse - cuni.cz

Platformy NetBeans a Eclipse, letní semestr 201623.2.2016

Nokia NetAct: Mobile Network Nokia NetAct: Mobile Network MgrMgr

Page 16: Platformy NetBean a Eclipse - cuni.cz

Platformy NetBeans a Eclipse, letní semestr 201623.2.2016

TidalWave BlueMarine: Photo TidalWave BlueMarine: Photo ManagerManager

Page 17: Platformy NetBean a Eclipse - cuni.cz

Platformy NetBeans a Eclipse, letní semestr 201623.2.2016

Global Vision Systems - Global Vision Systems - EasyMonitoring EasyMonitoring

Page 18: Platformy NetBean a Eclipse - cuni.cz

Platformy NetBeans a Eclipse, letní semestr 201623.2.2016

IBM Lotus ExpeditorIBM Lotus Expeditor

Page 19: Platformy NetBean a Eclipse - cuni.cz

Platformy NetBeans a Eclipse, letní semestr 201623.2.2016

ForeFlightForeFlight

Page 20: Platformy NetBean a Eclipse - cuni.cz

Platformy NetBeans a Eclipse, letní semestr 201623.2.2016

JavaJava

„Zopakování“ různých vlastností

Page 21: Platformy NetBean a Eclipse - cuni.cz

Platformy NetBeans a Eclipse, letní semestr 201623.2.2016

„„Zopakování“ různých vlastnostíZopakování“ různých vlastností

Reflection API

Page 22: Platformy NetBean a Eclipse - cuni.cz

Platformy NetBeans a Eclipse, letní semestr 201623.2.2016 22

PřehledPřehled● Reflection

– mění strukturu/stav objektů● Introspection

– zkoumá strukturu objektů● umožňuje

– zjišťování informací o třídách, atributech, metodách– vytváření objektů– volání metod– ...

● balík java.lang.reflect● třída java.lang.Class

Page 23: Platformy NetBean a Eclipse - cuni.cz

Platformy NetBeans a Eclipse, letní semestr 201623.2.2016 23

java.lang.Classjava.lang.Class● instance třídy Class reprezentuje třídu nebo interface

v běžícím programu● primitivní typy také reprezentovány jako instance třídy

Class● nemá žádný konstruktor● instance vytvářeny automaticky při natažení kódu

třídy do JVM– třídy jsou natahovány do JVM až při jejich prvním

použití● od Java 5 generický typ

– T – typ třídy reprezentované instancí Class● př. pro String ~ Class<String>● pokud nelze určit, tak Class<?>

Page 24: Platformy NetBean a Eclipse - cuni.cz

Platformy NetBeans a Eclipse, letní semestr 201623.2.2016 24

java.lang.Classjava.lang.Class● získání instance třídy Class

– getClass()● metoda na třídě Object● vrátí třídu objektu, na kterém je zavolána

– literál class (představuje expression typu Class)● JmenoTridy.class● třída pro daný typ

– Class.forName(String className)● statická metoda● vrátí třídu daného jména

– pro primitivní typy● statický atribut TYPE na wrapper třídách

– Integer.TYPE● literál class

– int.class

Page 25: Platformy NetBean a Eclipse - cuni.cz

Platformy NetBeans a Eclipse, letní semestr 201623.2.2016 25

java.lang.Classjava.lang.Class● typ po získání instance

String s = "hello";Class<String> clazz1 = s.getClass();

Class<String> clazz2 = String.class;

Class<Integer> clazz3 = int.class;

– ale

Class<?> clazz4 =Class.forName("mypackage.MyClass");

Page 26: Platformy NetBean a Eclipse - cuni.cz

Platformy NetBeans a Eclipse, letní semestr 201623.2.2016 26

java.lang.Classjava.lang.Class● třídy do JVM natahuje classloader

– java.lang.ClassLoader– standardní classloader hledá třídy v CLASSPATH– lze si napsat vlastní classloader– Class.forName(String className, boolean initialize, ClassLoader cl)

● natáhne třídu daným classloaderem a vrátí objekt třídy Class

– getClassLoader()● metoda na Class● classloader, kterým byla třída natažena

– upozornění: typ objektu je reprezentována nejen pomocí Class, ale také classloaderu, který danou class nahrál

Page 27: Platformy NetBean a Eclipse - cuni.cz

Platformy NetBeans a Eclipse, letní semestr 201623.2.2016 27

java.lang.Class: metodyjava.lang.Class: metody● String getName()● boolean isPrimitive()● boolean isArray()● boolean isInterface()● boolean isInstance(Object o)

– test, zda daný objekt je instancí třídy– ekvivalent k operatoru instanceof

● boolean isAssignableFrom(Class cls)– zda objekt typu cls lze přiřadit do proměnné typu třídy,

na níž je metoda volaná● Method[] getMethods()● Field[] getFields()● Constructor<T>[] getConstructors()● ...

Page 28: Platformy NetBean a Eclipse - cuni.cz

Platformy NetBeans a Eclipse, letní semestr 201623.2.2016 28

java.lang.Class: instancejava.lang.Class: instance● T newInstance()

– vytvoří novou instanci dané třídy– použije se konstruktor bez parametrů

● jako by se použilo new Trida()

● vytváření nových instancí od třídy pomocí jiných konstruktorů– třída java.lang.reflect.Constructor

Page 29: Platformy NetBean a Eclipse - cuni.cz

Platformy NetBeans a Eclipse, letní semestr 201623.2.2016

„„Zopakování“ různých vlastnostíZopakování“ různých vlastností

Classloader

Page 30: Platformy NetBean a Eclipse - cuni.cz

Platformy NetBeans a Eclipse, letní semestr 201623.2.2016

PřehledPřehled● třídy se do VM natahují dynamicky

– lze změnit● odkud se natahují● jak se natahují

● java.lang.ClassLoader– VM používá classloadery pro natahovaní tříd

● každá třída je natažena nějakým classloaderem– Class.getClassLoader()

● výjimka– třídy pro pole

● vytvářeny automaticky, když je potřeba● Class.getClassLoader() vrací stejnou třídu jako pro

elementy pole

Page 31: Platformy NetBean a Eclipse - cuni.cz

Platformy NetBeans a Eclipse, letní semestr 201623.2.2016

Třída a classloaderTřída a classloader● třída je ve VM určena nejen jménem ale i

classloaderem– jedna třída natažená různými classloadery =>

z pohledu VM dvě různé třídy

● každý classloader má předka (teď ne dědičnost)– výjimka

● system bootstrap classloader– nemá předka

– pokud se nespecifikuje => systémový classloader● při použití null nebude žádný předek

● při natahování třídy classloader nejdříve deleguje natažení na předka a pokud ten třídu nenalezl, natáhne classloader třídu sám

Page 32: Platformy NetBean a Eclipse - cuni.cz

Platformy NetBeans a Eclipse, letní semestr 201623.2.2016

Třída a classloaderTřída a classloader● pokud jsou při natahování třídy potřeba další třídy,

natahují se stejným classloaderem

● lze si napsat vlastní classloader– podědit od java.lang.ClassLoader

● předefinovat metodu findClass()– použití Class.forName("trida", true, new MyClassLoader()); nebo new MyClassLoader().loadClass("trida");

– lze zcela změnit systém načítání (ve smyslu předků)● není to vhodné

Page 33: Platformy NetBean a Eclipse - cuni.cz

Platformy NetBeans a Eclipse, letní semestr 201623.2.2016

Příklad použití více classloaderůPříklad použití více classloaderů● oddělení jmenných prostorů

– př. aplikační server● jedna VM● "aplikace" jsou natahovány vlastními classloadery

– mohou využívat různé verze stejných knihoven● (různé třídy se stejnými názvy)

● …

Page 34: Platformy NetBean a Eclipse - cuni.cz

Platformy NetBeans a Eclipse, letní semestr 201623.2.2016

„„Zopakování“ různých vlastnostíZopakování“ různých vlastností

Service loader & provides

Page 35: Platformy NetBean a Eclipse - cuni.cz

Platformy NetBeans a Eclipse, letní semestr 201623.2.2016

PřehledPřehled● mějme nějaký interface pro nějakou „službu“

– př. javax.xml.parsers.DocumentBuilderFactory● různí „dodavatelé“ implementace služby

– pokud bychom chtěli použít v programu, museli bychom jméno implementace mít napevno v kódu

● při změně dodavatele nutno změnit kód– lépe => použijeme ServiceLoader

Page 36: Platformy NetBean a Eclipse - cuni.cz

Platformy NetBeans a Eclipse, letní semestr 201623.2.2016

PoužitíPoužití● implementaci zabalit do JAR

– přidat do JAR souborMETA-INF/services/jmeno.interfacu.službypř: META-INF/services/javax.xml.parsers.DocumentBuilderFactory

– v něm co řádek, to jméno třídy implementující interface● v kódu

– sl = ServiceLoader.load(interface.class, classloader);– sl.iterator()

● ServiceLoader je až od JDK 6– META-INF/services se používá už od JDK 1.3

● bylo nutné si obdobu ServiceLoaderu napsat ručně

● lze použít na dependency injection

Page 37: Platformy NetBean a Eclipse - cuni.cz

Platformy NetBeans a Eclipse, letní semestr 201623.2.2016

„„Zopakování“ různých vlastnostíZopakování“ různých vlastností

Anotace

Page 38: Platformy NetBean a Eclipse - cuni.cz

Platformy NetBeans a Eclipse, letní semestr 201623.2.2016

PřehledPřehled● anotace ~ metadata

– „data o datech“– přídavná informace o části programu, která nemá

(přímo) vliv na funkčnost programu● od JDK 5● anotaci lze použít tam, kde lze použít nějaký

modifikátor– výjimka u anotací pro balíky

● zapisují se do spec. souboru package-info.java● při definici anotace lze omezit, na co půjde použít● lze použít mezi modifikátory v jakémkoliv pořadí

– konvence – použít nejdřív anotace a pak modifikátory● lze aplikovat libovolné množství anotací na jeden

element● nelze aplikovat jednu anotaci vícekrát

– ani při použití různých parametrů

Page 39: Platformy NetBean a Eclipse - cuni.cz

Platformy NetBeans a Eclipse, letní semestr 201623.2.2016

Definice a použitíDefinice a použití● podobně jako interface

– @interface– metody bez implementace

● př. public @interface RequestForEnhancement { int id(); String synopsis(); String engineer() default "[unassigned]"; String date() default "[unimplemented]"; } @RequestForEnhancement( id = 2868724, synopsis = "Enable time-travel", engineer = "Mr. Peabody", date = "4/1/3007" ) public static void travelThroughTime(Date destination)

{ ... }

Page 40: Platformy NetBean a Eclipse - cuni.cz

Platformy NetBeans a Eclipse, letní semestr 201623.2.2016

DefiniceDefinice● anotace pro použití na anotacích

– ovlivňují možnosti použití anotace– v balíku java.lang.annotation

● @Target– specifikuje, na jakém elementu lze anotaci použít

● @Retention– specifikuje, kde je anotace použitelná

● source, class, runtime

Page 41: Platformy NetBean a Eclipse - cuni.cz

Platformy NetBeans a Eclipse, letní semestr 201623.2.2016

ZpracováníZpracování● Reflection API

– interface AnnotatedElement– na „runtime“ anotace

● Annotation processors– zpracování „source“ anotací– během překladu– parametr překladače -processor

– původně zvláštní nástroj APT (Annotation Processing Tool)

● od JDK 8 je APT a související API „deprecated“

Page 42: Platformy NetBean a Eclipse - cuni.cz

Platformy NetBeans a Eclipse, letní semestr 201623.2.2016

„„Zopakování“ různých vlastnostíZopakování“ různých vlastností

MVC a DCI

Page 43: Platformy NetBean a Eclipse - cuni.cz

Platformy NetBeans a Eclipse, letní semestr 201623.2.2016

MVCMVC● Model-View-Controler

Zdroj obrázku: http://zdrojak.root.cz/clanky/uvod-do-architektury-mvc/

Page 44: Platformy NetBean a Eclipse - cuni.cz

Platformy NetBeans a Eclipse, letní semestr 201623.2.2016

DCIDCI● Data-Context-Interactions

– řeší problém● OOP je dobré pro modelování dat● kam dát operace?

– př. bankovní účet a převod peněz

Page 45: Platformy NetBean a Eclipse - cuni.cz

Platformy NetBeans a Eclipse, letní semestr 201623.2.2016

DCIDCI

Zdroj obrázků: http://www.artima.com/articles/dci_vision.html

Page 46: Platformy NetBean a Eclipse - cuni.cz

Platformy NetBeans a Eclipse, letní semestr 201623.2.2016

NetBeans a EclipseNetBeans a Eclipse

Modulární systémyKomponentové systémy

Page 47: Platformy NetBean a Eclipse - cuni.cz

Platformy NetBeans a Eclipse, letní semestr 201623.2.2016

PřehledPřehled● žádná aplikace se dnes nepíše od začátku

– knihovny, frameworky,...

● co když chceme mít aplikaci rozšiřitelnou „třetími stranami“

● co když chceme distribuovaný vývoj

● samotné objekty nestačí– potřebujeme komponenty (moduly, pluginy,...)

● v Java 9 budou moduly přímo obsaženy● komponenty mají explicitně i závislosti (požadavky)

– objekty mají explicitně poskytované služby● komponenty naimplementovány pomocí objektů

● existuje obrovské množství komponentových systémů

Page 48: Platformy NetBean a Eclipse - cuni.cz

Platformy NetBeans a Eclipse, letní semestr 201623.2.2016

Komponenty vs. NetBeans a EclipseKomponenty vs. NetBeans a Eclipse● NetBeans – moduly● Eclipse – pluginy

● základ systému = kontejner pro komponenty– poskytuje

● správu komponent● správu závislostí● versioning

● NetBeans – vlastní systém● Eclipse – OSGi

● od 6.9 NetBeans platforma může běžet nad OSGi– NB moduly budou OSGi bundly– některé Eclipse pluginy (bez UI) lze použít v NB

Page 49: Platformy NetBean a Eclipse - cuni.cz

Platformy NetBeans a Eclipse, letní semestr 201623.2.2016

Komponenty vs. NetBeans a EclipseKomponenty vs. NetBeans a Eclipse● druhy komponent (ve vztahy k NB a Ecl)

– normální– knihovny

● obálka na existujícími JAR baliky● jak NB, tak i Ecl umožňují vytvářet

– rozšíření do IDE– samostatné aplikace

● vůbec to nemusí být IDE● aplikace je sada komponent (plus kontejner)

Page 50: Platformy NetBean a Eclipse - cuni.cz

Platformy NetBeans a Eclipse, letní semestr 201623.2.2016

NetBeans vs. EclipseNetBeans vs. Eclipse● hlavní rozdíly (zjednodušeně)

– komponentový kontejner● NB – vlastní

– ale lze mít i OSGi● Eclipse – OSGi

– UI● NB – Swing● Eclipse – SWT

– podpora● NB – Oracle (dříve Sun)● Eclipse – IBM