Platformy NetBean a Eclipse. Úvod

Podobné dokumenty
Platformy NetBean a Eclipse. Úvod

JAVA. Reflection API

JAVA. Krátce o Reflection API

Pokročilé programování na platformě Java. Úvod

Reflexe RTTI Runtime Type Identification

JAVA Moduly Java, letní semestr 2018

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

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

Úvod do programovacích jazyků (Java)

OSGi. Aplikační programování v Javě (BI-APJ) - 6 Ing. Jiří Daněček Katedra softwarového inženýrství Fakulta informačních technologií ČVUT Praha

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

Úvod do programování v jazyce Java

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

Google Web Toolkit. Martin Šurkovský, SUR března Katedra informatiky

Jalapeño: pekelně ostrá Java persistence v Caché. Daniel Kutáč Senior Sales Engineer

Java. Generické typy

UJO Framework. revoluční architektura beans. verze

Class loader. každá třída (java.lang.class) obsahuje referenci na svůj class loader. Implementace class loaderu

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

Výčtový typ strana 67

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

Programátorská příručka

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

Generické programování

typová konverze typová inference

public static void main(string[] args) { System.out.println(new Main().getClass().getAnnotation(Greet.class).text());

JAVA Unit testing Java, zimní semestr

Základy Guice Vazby Scopes. Google Guice. základní seznámení s frameworkem Google Guice

Definice třídy. úplná definice. public veřejná třída abstract nesmí být vytvářeny instance final nelze vytvářet potomky

Reflexe. Aplikační programování v Javě (BI-APJ) - 8 Ing. Jiří Daněček Katedra softwarového inženýrství Fakulta informačních technologií ČVUT Praha

Statické proměnné a metody. Tomáš Pitner, upravil Marek Šabo

7. přednáška - třídy, objekty třídy objekty atributy tříd metody tříd

Počítačové laboratoře bez tajemství aneb naučme se učit algoritmizaci a programování s využitím robotů CZ.1.07/1.3.12/

Spring framework 2.0. Roman Pichlík CZJUG

Algoritmizace a programování

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

Úvod do programování v jazyce Java

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

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

Obsah přednášky 9. Skrývání informací. Skrývání informací. Zapouzdření. Skrývání informací. Základy programování (IZAPR, IZKPR) Přednáška 9

Programování v Javě I. Leden 2008

8 Třídy, objekty, metody, předávání argumentů metod

Tvorba informačních systémů

Seminář Java II p.1/43

Enterprise Java (BI-EJA) Technologie programování v jazyku Java (X36TJV)

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

10 Balíčky, grafické znázornění tříd, základy zapozdření

knihovna programátora

Návrhové vzory OMO, LS 2014/2015

Java Enum Java, zimní semestr ,2017 1

1. Programování proti rozhraní

Enterprise Java (BI-EJA) Technologie programování v jazyku Java (X36TJV)

Definice třídy. úplná definice. public veřejná třída abstract nesmí být vytvářeny instance final nelze vytvářet potomky

[ASP].NET Core Demystified. Miroslav Holec. Konzultant a lektor [ASP].NET Core.

Obsah přednášky. Představení webu ASP.NET frameworky Relační databáze Objektově-relační mapování Entity framework

Programování v Javě I. Únor 2009

Programování II. Objektová dekompozice Třída jako objekt 2018/19

20. Projekt Domácí mediotéka

JAVA. Další jazyky kompilovatelné do Java byte-code

PŘETĚŽOVÁNÍ OPERÁTORŮ

První kapitola úvod do problematiky

Úvod. Únor Fakulta informačních technologií VUT. Radek Kočí Seminář Java Úvod 1/ 23

Jazyk C# (seminář 6)

Integrace OpenOffice.org a Javy. CZJUG, , Robert Vojta

Dynamicky vázané metody. Pozdní vazba, virtuální metody

Paměť počítače. alg2 1

1 - Úvod do platformy.net. IW5 - Programování v.net a C#

Abstraktní datové typy: zásobník

Úvodní informace. Petr Hnětynka 2/2 Zk/Z

Testovací metoda. Testovací metoda. public class SimpleTest {

Základy programovaní 3 (Java)

Teoretické minimum z PJV

Student s Life. Návrhová dokumentace (Design) Lukáš Barák, Jakub Ječmínek, Jaroslav Brchel, Jiří Zmeškal

Základy objektové orientace I. Únor 2010

Vaše jistota na trhu IT. Balíčky. Rudolf Pecinovský

OMO. 4 - Creational design patterns A. Singleton Simple Factory Factory Method Abstract Factory Prototype Builder IoC

Java [džava] nebo [džáva] v americkém slangu "kafe" Sun Microsystems nyní Oracle

Třídy. Instance. Pokud tento program spustíme, vypíše následující. car1 má barvu Red. car2 má barvu Red. car1 má barvu Blue.

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

Předměty. Algoritmizace a programování Seminář z programování. Verze pro akademický rok 2012/2013. Verze pro akademický rok 2012/2013

INTERACTION BETWEEN DESIGN PATTERNS AND INSTANTIATED OBJECTS BY REFLECTION. Jaroslav Žáček

Pokročilé programování na platformě Java. Úvod

Definice třídy. úplná definice. public veřejná třída abstract nesmí být vytvářeny instance final nelze vytvářet potomky

Remote Method Invocation RMI

Kód, který se nebude často měnit

Úvod do programovacích jazyků (Java)

Výchozí a statické metody rozhraní. Tomáš Pitner, upravil Marek Šabo

Programovací jazyk Java

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

Úvodní informace. Petr Hnětynka 2/2 Zk/Z

Úvodní informace. Petr Hnětynka 2/2 Zk/Z

Principy objektově orientovaného programování

Java Cvičení 01. CHARLES UNIVERSITY IN PRAGUE faculty of mathematics and physics

RMI Remote Method Invocation

PA165: Úvod do Java EE. Petr Adámek

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

11 Diagram tříd, asociace, dědičnost, abstraktní třídy

Zapouzdření. Tomáš Pitner, upravil Marek Šabo

Webové služby a XML. Obsah přednášky. Co jsou to webové služby. Co jsou to webové služby. Webové služby a XML

Transkript:

Platformy NetBean a Eclipse Úvod

O předmětu Petr Hnětynka hnetynka@d3s.mff.cuni.cz Jiří Vinárek vinarek@d3s.mff.cuni.cz http://d3s.mff.cuni.cz/~hnetynka/netbeans předpokládá se znalost Javy (alespoň v rozsahu NPRG013, lépe i NPRG021) 0/2 Z

Zá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

Zápočet vlastní (netriviální) program/modul nad NetBeans platform nebo vlastní (netriviální) program/plugin nad Eclipse

Osnova předmětu Úvod OSGi NetBeans Úvod Moduly Okna NB filesystem Datové objekty a uzly Eclipse (1 přednáška) (1 přednáška) (~6 přednášek) (~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 Platformy NetBeans a Eclipse, letní semestr 2017 applications

Literatura, odkazy vše o Javě NetBeans http://www.oracle.com/technetwork/java/ 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

Literatura, odkazy NetBeans... Eclipse...

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

NetBeans a Eclipse Proč používat framework...

Proč používat... Let's create our own framework! Maintaining the framework takes a lot of my time :(

Proč používat... Don't reinvent the wheel!

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

Nuance V-Builder VoiceXML

Fiorano Studio: Lego Blocks for SOA

Nokia NetAct: Mobile Network Mgr

TidalWave BlueMarine: Photo Manager

Global Vision Systems EasyMonitoring

IBM Lotus Expeditor

ForeFlight

Java Zopakování různých vlastností

Zopakování různých vlastností Reflection API

Přehled Reflection Introspection zkoumá strukturu objektů umožňuje mění strukturu/stav objektů 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 22

java.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<?> 23

java.lang.class získání instance třídy Class getclass() literál class (představuje expression typu Class) JmenoTridy.class třída pro daný typ Class.forName(String classname) metoda na třídě Object vrátí třídu objektu, na kterém je zavolána 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 24

java.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"); 25

java.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 26

java.lang.class: metody String getname() boolean isprimitive() boolean isarray() boolean isinterface() boolean isinstance(object o) boolean isassignablefrom(class cls) test, zda daný objekt je instancí třídy ekvivalent k operatoru instanceof 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()... 27

java.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 28

Zopakování různých vlastností Classloader

Přehled třídy se do VM natahují dynamicky lze změnit java.lang.classloader VM používá classloadery pro natahovaní tříd každá třída je natažena nějakým classloaderem odkud se natahují jak se natahují 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

Tří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 pokud se nespecifikuje => systémový classloader nemá předka 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

Tří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é

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)

Zopakování různých vlastností Service loader & provides

Př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

Použití implementaci zabalit do JAR v kódu přidat do JAR soubor META-INF/services/jmeno.interfacu.služby př: META-INF/services/javax.xml.parsers.DocumentBuilderFactory v něm co řádek, to jméno třídy implementující interface 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

Zopakování různých vlastností Anotace

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

Definice a použití podobně jako interface př. @interface metody bez implementace 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) {... }

Definice anotace pro použití na anotacích @Target ovlivňují možnosti použití anotace v balíku java.lang.annotation specifikuje, na jakém elementu lze anotaci použít @Retention specifikuje, kde je anotace použitelná source, class, runtime

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

Zopakování různých vlastností Návrhové vzory (design patterns)

Ná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)...

Zopakování různých vlastností MVC, DCI

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

DCI 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

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

NetBeans a Eclipse Modulární systémy Komponentové systémy

Př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ů

Komponenty 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

Komponenty 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)

NetBeans vs. Eclipse hlavní rozdíly (zjednodušeně) komponentový kontejner NB vlastní UI ale lze mít i OSGi Eclipse OSGi NB Swing Eclipse SWT podpora NB Oracle (dříve Sun) Eclipse IBM