UJO Framework. revoluční architektura beans. verze 0.80 http://ujoframework.org/

Podobné dokumenty
Tvorba informačních systémů

KIV/PIA 2013 Jan Tichava

Generické programování

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

Úvod do programovacích jazyků (Java)

Java a XML. 10/26/09 1/7 Java a XML

Teoretické minimum z PJV

typová konverze typová inference

(Enterprise) JavaBeans. Lekce 7

Vytváření a použití knihoven tříd

public class Karel { private int position; public boolean issmiling; public int getposition() { return position;

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

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

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

Dědění, polymorfismus

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

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

Technologie JavaBeans

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

Seminář Java II p.1/43

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

Programování v Javě I. Leden 2008

Anotace a Hibernate. Aleš Nosek Ondřej Vadinský Daniel Krátký

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

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

Abstraktní třída a rozhraní

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

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

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

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.

20. Projekt Domácí mediotéka

Výčtový typ strana 67

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

1. Programování proti rozhraní

SOUBORY, VSTUPY A VÝSTUPY POKRAČOVÁNÍ

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

Abstraktní datové typy: zásobník

Stream API. Petr Krajča. Základy programovaní 4 (Java) Katedra informatiky Univerzita Palackého v Olomouci

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/

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

Seminář Java IV p.1/38

Generické typy. Podrobněji: The Java Language Specification ( Third Edition ) , 18

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

Spring framework 2.0. Roman Pichlík CZJUG

4. ZÁKLADNÍ POJMY Z OBJEKTOVĚ ORIENTOVANÉHO PROGRAMOVÁNÍ

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

Platforma Java. Petr Krajča. Katedra informatiky Univerzita Palackého v Olomouci. Petr Krajča (UP) KMI/PJA: Seminář V. 27. říjen, / 15

Základy jazyka C# Obsah přednášky. Architektura.NET Historie Vlastnosti jazyka C# Datové typy Příkazy Prostory jmen Třídy, rozhraní

Softwarové komponenty a Internet

Datové typy v Javě. Tomáš Pitner, upravil Marek Šabo

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

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

GUI. Systémová integrace pro desktopové aplikace

JAVA JavaBeans Java, letní semestr

RMI Remote Method Invocation

Parametrizované třídy Generics generické třídy. JDK zavádí mimo jiné tzv. parametrizované třídy - generics

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

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

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

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

Java Výjimky Java, zimní semestr

Úvod Třídy Rozhraní Pole Konec. Programování v C# Hodnotové datové typy, řídící struktury. Petr Vaněček 1 / 39

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

Principy objektově orientovaného programování

DPKOM_06 Dědičnost entit a zpětná volání posluchači

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

TŘÍDY POKRAČOVÁNÍ. Události pokračování. Příklad. public delegate void ZmenaSouradnicEventHandler (object sender, EventArgs e);

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

Enterprise Java Beans 3.0

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

IRAE 07/08 Přednáška č. 1

Tvorba informačních systémů

JAVA JavaBeans Java, letní semestr 2018

Lambda funkce Novinky v interfaces Streamy Optional - aneb zbavujeme se null. Java 8. Ondřej Hrstka

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

Java Enum Java, zimní semestr ,2017 1

Obsah přednášky. 12. Dokumentace zdrojového kódu Tvorba elektronické dokumentace UML. Co je diagram tříd. Ing. Ondřej Guth

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

Návrh softwarových systém. Návrh softwarových systémů

1. Dědičnost a polymorfismus

KTE / ZPE Informační technologie

Komponenty v.net. Obsah přednášky

7. Datové typy v Javě

Java efektivně. Lukáš Zapletal liberix.cz. Pokročilejší techniky programování v Javě

Tvorba informačních systémů

Reflexe RTTI Runtime Type Identification

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

Předmluva k aktuálnímu vydání Úvod k prvnímu vydání z roku Typografické a syntaktické konvence... 20

Třídy a objekty. Třídy a objekty. Vytvoření instance třídy. Přístup k atributům a metodám objektu. $z = new Zlomek(3, 5);

OOPR_05. Případové studie

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

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

Java a Caché IV: Manipulace s objekty

Návrhové vzory Tvorba objektů

Object-relational mapping (JPA, Hibernate)

Tabulka symbolů. Vazba (binding) Vazba - příklad. Deklarace a definice. Miroslav Beneš Dušan Kolář

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

Java - řazení objektů

X-komponenty 3.1. Uživatelská příručka. J. Kocman, V. Trojan

JavaBeans API umožňuje psaní softwarových komponent v programovacím jazyce Java. Komponenta je obecně nějakou částí programového kódu, které je

Transkript:

UJO Framework revoluční architektura beans verze 0.80 http://ujoframework.org/ Pavel Pone(c), září 2008

Historie rok 2004 upravené objekty z frameworku Cayenne nevýhodou byla špatná typová kontrola rok 2007 využití generických datových typů Java 5.0 vzniká jádro aplikace jworksheet publikování samostatného projektu UJO Framework 0.70 v říjnu 2007

Co to je? UJO - Unified Java Object jednotná architektura objektů společná metoda pro zápis atributů společní metoda pro čtení atributů Vlastnosti: typově bezpečné řešení pro ukládání atributů objektu snadná introspekce serializace do XML, CSV, Resource bundle podpora komponenty JTable implementace užitečných funkcí: tostring(), clone(...), equals(ujo), textové konverze

Vize náhrada JavaBeans modelem Map odhalení chybných datových typů hodnot při kompilaci! odhalení chybných properties (klíče jiných tříd)! Java 5.0 Map<String,Object> bean = new HashMap(); bean.put("name", "Pavel"); bean.put("cash", 10.0); Double cash = (Double) bean.get("cash"); UJO Framework: Person bean = new Person(); bean.set(person.name,"pavel"); bean.set(person.cash, 10.0); Double cash = bean.get(person.cash);

Srovnání JavaBeans a UJO (1) Informace o typu property jsou v UJO objektu na jednom místě Java 5.0 class Person extends Object { private String name; public String getname() { return name; UJO Framework: class Person extends MapUjoExt<Person> { public static final MapProperty<Person,String> NAME = newproperty("name", String.class); public void setname(string name){ this.name = name;

Srovnání JavaBeans a UJO (2) Jak zacházet s atributy? JavaBeans objekt class Person extends Object {... void addcash(double val) { double newcash = this.cash + val; this.cash = newcash; UJO objekt class Person extends MapUjoExt<Person> {... void addcash(double val) { double newcash = get(cash) + val; set(cash, newcash);

Implicitní hodnoty atributů JavaBeans property může mít v deklaraci nastavenou implicitní hodnotu { Integer i=10; UJO property může obsahovat defaultní hodnotu při čtení hodnoty je nedefinovaný výraz (NULL) nahrazován defaultní hodnotou dané UjoProperty! defaultní hodnotu lze v UJO kdykoli obnovit (zápisem hodnoty NULL) class Person extends MapUjoExt<Person> { public static final MapProperty<Person,Double> CASH = newproperty("person", 0.0); /** Tato metoda nikdy nevrací NULL! */ public Double getcash() { return get(cash);

Řetězení properties volání UJO atributů lze řetězit přes více objektů volání je typově bezpečné, typ i pořadí properties se kontrolují při kompilaci v následující ukázce obsahuje třída Person také atribut ADDRESS import static Person.*; import static Address.*; Person bean = new Person(); bean.set(address, new Address(); bean.set(address, STREET, "Vídeňská"); bean.set(address, CITY, "Brno"); String street = bean.get(address, STREET); String city = bean.get(address, CITY);

Řetězení setters volání metody set() lze řetězit pro zápis několika hodnot jednoho objektu na jeden řádek. import static Person.*; Person bean = new Person(); bean.set(name, "Pavel").set(CASH, 100.0); String name = bean.get(name); double cash = bean.get(cash);

List UJO objektů class Person extends MapUjoExt<Person> { public static final MapPropertyList<Person,Address> ADDRESSES = newpropertylist("address", Address.class); void test() { add(addresses, new Address()); // list is created int count = getitemcount(addresses); Address ad = get(addresses, 0); // value from posit. 0 atributem UJO může být také nějaký List, nicméně pro tento typ je vyhrazeno rozhraní UjoPropertyList. implementace UjoExt pro tento typ poskytuje několik užitečných funkcí List<Address> adr1 = get (ADDRESSES); List<Address> adr2 = list(addresses); // not null allways

Práce s textem (1) reálné aplikace pracují s textovým formátem: editace hodnot v uživatelském rozhraní serializace z nebo do textových formátů (xml, csv,...) parametry z HTTP requestu ladění aplikací UJO Framework má integrovanou podporu pro konverzi atributů UJO do textového formátu.

Práce s textem (2) Tři způsoby konverze do textu: rodičovská třída SuperUjoExt podporuje nejpoužívanější Java objekty metodou: settext(ujoproperty property, String value) možnost vlastní implementace / překrytí metody UjoTextable.writeValueString(...) framework umí pracovat s objekty, které mají implementované chování PropertyTextable : konstruktor objektu s jedním parametrem typu String rozumí formátu, který vytváří metoda tostring()

Práce s textem (3) Následující kód zapisuje a čte číslo ve formátu String: Person bean = new Person(); bean.settext(person.cash, "1.379"); String cash = bean.gettext(person.cash); // PropertyTextable test: new Double(cash).toString().equals(cash); Více informací je v popisu rozhraní PropertyTextable.

XML export (1) 6x vyšší rychlost ve srovnání s XMLEncoder/XMLDecoder deserializace je o 10% rychlejší ve srovnání s JAXB 2.1 při použití implementace ArrayUjo serializace je pomalejší o 44% ve srovnání s JAXB 2.1 Person person = new Person(); person.set(name, "Joseph"); person.add(addreses, new Address("Brno", "Kocourova 16")); // Make Serialization: UjoManagerXML.getInstance().saveXML(writer, person, null, "My Export"); // Make Deserialization: person = UjoManagerXML.getInstance().parseXML(inputStream, Person.class, "My Import");

XML export (2) potřebujete zakázat export některého atributu? překryjte metodu Ujo.readAuthorization(), tato metoda slouží k autorizaci akce v závislosti na: property, hodnotě, typu akce a kontextu akce class Person extends MapUjoExt<Person> { public static final MapProperty<Person,String> NAME = newproperty("person", String.class);... /** Metoda potlačí XML export pro atribut NAME */ public boolean readauthorization(ujoaction action, UjoProperty property, Object value) { return action.gettype()==ujoactions.action_xml_export && property==name? false : super.readauthorization( -"- );

XML export (3) implicitně se každý atribut exportuje do samostatného elementu ve XML souboru libovolnou UJO property (nikoli však List) lze označit pro export jako atribut elementu jedním ze dvou způsobů: překrytím metody Ujo.readAuthorization() označením property anotací XmlAttribute (viz ukázka) class Person extends MapUjoExt<Person> { @XmlAttribute public static final MapProperty<Person,String> NAME = newproperty("person", String.class);

Rozhraní Ujo a UjoExt všechny předchozí informace se týkaly rozhraní UjoExt (UJO extended) poskytuje konzervativnější a proto čitelnější API přináší nově možnost řetězení properties a setters je podporované od verze UJO Framework 0.80 možnosti obou rozhraní jsou však prakticky identické nástroje frameworku pracují výhradně původním Ujo rozhraním hlavní rozdíl je: objekt Ujo má část klíčových metod deklarovanou v UjoProperty!

Rozdíly Ujo a UjoExt Ujo příliš revoluční API :-) snadná vlastní implementace lepší typová kontrola property při práci s potomky malé riziko kolize metod objektu s jiným rozhraním metody mohou být o málo rychlejší UjoExt čitelnější API pracnější vlastní implementace při dědění objektu je slabší typová kontrola properties větší množství metod nese vyšší riziko kolize s jiným rozhraním podpora řetězení properties a setters

Základ tvoří 2 rozhraní

Základ tvoří 2 rozhraní Interface Ujo: implementace obsahuje business data metoda pro autorizaci properties brána do introspekce (poskytuje seznam UjoProperties) Interface UjoProperty poskytuje vlastnosti property (meta data) obsahuje defaultní hodnotu poskytuje typově bezpečné metody pro čtení a zápis hodnoty nikdy neobsahuje business data!

Základní Ujo implementace Pro snadnou implementaci jsou připraveny abstraktní třídy, každá z nich má stejné API, ale různou implementaci MapUjo - je snadno použitelný s dostatečným výkonem pro běžné aplikace, je postavený na objektu HashMap. ArrayUjo - má vysoký výkon srovnatelný s rychlostí objektu JavaBeans, je implementovaný pomocí pole objektů PojoUjo - implementace volá přímo metody JavaBean podle property name a využívá Java reflexi XxxUjoExt<UjoImpl> - ke každému předchozímu typu existuje rozšířená implementace, název třídy končí Ext

Příklady použití Perzistentní tabulka pouze 110 řádků kódu ve třech třídách odkaz na zdrojový kód včetně komentářů Parametry aplikace v jediném UJO objektu (odkaz)

Výhody a nevýhody snadno dostupná struktura objektu dostupné vlastosti atributů včetně defaultní hodnoty práce se seznamem properties (nikoli hodnot) objekt si sám autorizuje použití svých properties snadná tvorba generických funkcí, například: implementace proxy pro třídy se společným předkem generická implementace property listeneru,... podpora komponenty JTable malá velikost frameworku (50 kb) open source netradiční architektura slabé reference zatím omezená přímá podpora služeb J2EE

Další vývoj výrazný rozvoj jádra už neplánuji spíše rozvoj modulů UJO dependency injection (?) data binding (?) DB perzistence (?) nabízí se mnoho jiných směrů pro rozvoj omezený čas na vývoj

Závěr 4.500 downloadů jworksheet za 10 měsíců malá velikost aplikace, výborná rychlost pozitivní ohlasy i recenze přístup na stránky i z velkých firem Epson, Fujifilm, Fujitsu, Siemens 210 downloadů UJO Framework za 10 měsíců prakticky bezproblémové jádro řada funkcí implementovaných přímo v objektu rychlý vývojový start aplikace jworksheet vítám připomínky, dotazy a upozornění na případné chyby (dokumentace, SW)

Děkuji za pozornost UJO Framework homepage: http://ujoframework.org/ Odkaz na prezentaci: http://ujoframework.org/prezentace/ Pavel Pone(c), září 2008