Upload
others
View
2
Download
0
Embed Size (px)
Citation preview
Platformy NetBeans a Eclipse, letní semestr 201720.2.2017
Platformy NetBean a EclipsePlatformy NetBean a Eclipse
Úvod
Platformy NetBeans a Eclipse, letní semestr 201720.2.2017
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
Platformy NetBeans a Eclipse, letní semestr 201720.2.2017
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
Platformy NetBeans a Eclipse, letní semestr 201720.2.2017
ZápočetZápočet● vlastní (netriviální) program/modul nad NetBeans
platform
nebo
● vlastní (netriviální) program/plugin nad Eclipse
Platformy NetBeans a Eclipse, letní semestr 201720.2.2017
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
Platformy NetBeans a Eclipse, letní semestr 201720.2.2017
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
Platformy NetBeans a Eclipse, letní semestr 201720.2.2017
Literatura, odkazyLiteratura, odkazy● NetBeans
● Eclipse
. . .
. . .
Platformy NetBeans a Eclipse, letní semestr 201720.2.2017
O předmětuO předmětu● notebooky s sebou!● připojení k internetu s sebou!
Platformy NetBeans a Eclipse, letní semestr 201720.2.2017
NetBeans a EclipseNetBeans a Eclipse
Proč používat framework...
Platformy NetBeans a Eclipse, letní semestr 201720.2.2017
Proč používat...Proč používat...
Maintaining the framework takes a lot of my time :(
Let's create ourown framework!
Platformy NetBeans a Eclipse, letní semestr 201720.2.2017
Proč používat...Proč používat...
Don't reinvent
the wheel!
Platformy NetBeans a Eclipse, letní semestr 201720.2.2017
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● …
Platformy NetBeans a Eclipse, letní semestr 201720.2.2017
Nuance V-Builder – VoiceXML Nuance V-Builder – VoiceXML
Platformy NetBeans a Eclipse, letní semestr 201720.2.2017
Fiorano Studio: Lego Blocks for Fiorano Studio: Lego Blocks for SOASOA
Platformy NetBeans a Eclipse, letní semestr 201720.2.2017
Nokia NetAct: Mobile Network Nokia NetAct: Mobile Network MgrMgr
Platformy NetBeans a Eclipse, letní semestr 201720.2.2017
TidalWave BlueMarine: Photo TidalWave BlueMarine: Photo ManagerManager
Platformy NetBeans a Eclipse, letní semestr 201720.2.2017
Global Vision Systems - Global Vision Systems - EasyMonitoring EasyMonitoring
Platformy NetBeans a Eclipse, letní semestr 201720.2.2017
IBM Lotus ExpeditorIBM Lotus Expeditor
Platformy NetBeans a Eclipse, letní semestr 201720.2.2017
ForeFlightForeFlight
Platformy NetBeans a Eclipse, letní semestr 201720.2.2017
JavaJava
„Zopakování“ různých vlastností
Platformy NetBeans a Eclipse, letní semestr 201720.2.2017
„„Zopakování“ různých vlastnostíZopakování“ různých vlastností
Reflection API
Platformy NetBeans a Eclipse, letní semestr 201720.2.2017 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
Platformy NetBeans a Eclipse, letní semestr 201720.2.2017 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<?>
Platformy NetBeans a Eclipse, letní semestr 201720.2.2017 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
Platformy NetBeans a Eclipse, letní semestr 201720.2.2017 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");
Platformy NetBeans a Eclipse, letní semestr 201720.2.2017 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
Platformy NetBeans a Eclipse, letní semestr 201720.2.2017 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()● ...
Platformy NetBeans a Eclipse, letní semestr 201720.2.2017 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
Platformy NetBeans a Eclipse, letní semestr 201720.2.2017
„„Zopakování“ různých vlastnostíZopakování“ různých vlastností
Classloader
Platformy NetBeans a Eclipse, letní semestr 201720.2.2017
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
Platformy NetBeans a Eclipse, letní semestr 201720.2.2017
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
Platformy NetBeans a Eclipse, letní semestr 201720.2.2017
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é
Platformy NetBeans a Eclipse, letní semestr 201720.2.2017
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)
● …
Platformy NetBeans a Eclipse, letní semestr 201720.2.2017
„„Zopakování“ různých vlastnostíZopakování“ různých vlastností
Service loader & provides
Platformy NetBeans a Eclipse, letní semestr 201720.2.2017
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
Platformy NetBeans a Eclipse, letní semestr 201720.2.2017
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
Platformy NetBeans a Eclipse, letní semestr 201720.2.2017
„„Zopakování“ různých vlastnostíZopakování“ různých vlastností
Anotace
Platformy NetBeans a Eclipse, letní semestr 201720.2.2017
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ů
Platformy NetBeans a Eclipse, letní semestr 201720.2.2017
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)
{ ... }
Platformy NetBeans a Eclipse, letní semestr 201720.2.2017
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
Platformy NetBeans a Eclipse, letní semestr 201720.2.2017
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“
Platformy NetBeans a Eclipse, letní semestr 201720.2.2017
„„Zopakování“ různých vlastnostíZopakování“ různých vlastností
Návrhové vzory(design patterns)
Platformy NetBeans a Eclipse, letní semestr 201720.2.2017
Návrhové vzoryNávrhové vzory● obecné řešení problému, které se využívá při návrhu
počítačových programů (Wikipedia)
● Gamma, E., Helm, R., Johnson, R., Vlissides, J. (1995). Design Patterns: Elements of Reusable Object-Oriented Software
● různé druhy– tvorba objektů (creational)– struktura (structural)– chování (behavioral)– ...
Platformy NetBeans a Eclipse, letní semestr 201720.2.2017
„„Zopakování“ různých vlastnostíZopakování“ různých vlastností
MVC, DCI
Platformy NetBeans a Eclipse, letní semestr 201720.2.2017
MVCMVC● Model-View-Controler
Zdroj obrázku: http://zdrojak.root.cz/clanky/uvod-do-architektury-mvc/
Platformy NetBeans a Eclipse, letní semestr 201720.2.2017
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
Platformy NetBeans a Eclipse, letní semestr 201720.2.2017
DCIDCI
Zdroj obrázků: http://www.artima.com/articles/dci_vision.html
Platformy NetBeans a Eclipse, letní semestr 201720.2.2017
NetBeans a EclipseNetBeans a Eclipse
Modulární systémyKomponentové systémy
Platformy NetBeans a Eclipse, letní semestr 201720.2.2017
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ů
Platformy NetBeans a Eclipse, letní semestr 201720.2.2017
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
Platformy NetBeans a Eclipse, letní semestr 201720.2.2017
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)
Platformy NetBeans a Eclipse, letní semestr 201720.2.2017
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