JAVA & .NET JAVA VS .NET
Java
Architektura Java Core API (základní knihovna tříd)
Překladač Java Virtual Machine Správa spuštěných programů
Architektura Aplikace v programovacím jazyce Java • .class / .jar / … soubor • V bytecode
JRE – Java Runtime Environment • Součástí je JVM – Java Virtual Machine • Zpracovává bytecode • Překládá jej do strojového kódu
Operační systém / Procesor • Strojový kód
Princip tvorby aplikace Tvorba aplikace
• Zdrojový kód v jazyce Java (text)
.java
.class • Zdrojový kód v Bytecode
• Zabalené kódy + jiné zdroje
(.jar, …)
Spuštění aplikace
• Bytecode
JRE/JVM • Překlad pro platformu
.class/.jar
• Strojový kód
OS
Historie Oak 1996 První verze má release
1.0.2
1.1
1997 Vnitřní třídy JavaBeans JDBC Reflexe
1.2
1998 SE/EE/ME JIT kompilace Kolekce
1.4 1.5 5.0
2004 Generika Autoboxing Výčtové typy Cyklus for-each
Historie 6.0 2006 Vydávány updaty Java 6 update 30
7.0 2011 Nyní update 2 Virtuální stroj podporuje
dynamické jazyky Částečná podpora lambda výrazů
8.0 Léto 2013? Další rozšíření podpory
funkcionálních operací jazyka
Požadavky Tvorba aplikací
Spuštění aplikací
JDK / SDK
JRE
JRE + JVM Další knihovny Podpora pro tvorbu aplikací Kompilátor a debugger Univerzální přes všechny edice +/- 80 MB
Vývojové prostředí
Jcreator BlueJ NetBeans Eclipse
JRE + JVM Pouze běhové prostředí a
základní knihovny Typicky konkrétní edice +/- 20 MB
Java platformy Java SE Java Standard Edition Pro tvorbu běžných (desktopových) aplikací … + API knihovny pro vytváření klientských
desktopových aplikací (AWT, Swing)
Java platformy Java ME Java Micro edition Vývoj pro malá zařízení a zařízení s omezenými
prostředky, dvě varianty zařízení CLDC 160 kb ROM, 32 kB RAM Mobilní telefony Kilobyte Virtual Machine
CDC 32bitový procesor, >512 kB ROM, >256 kB RAM PDA, set-top-boxy
Java platformy Java EE Java Enterprise Edition Pro vývoj a provoz rozsáhlých programů a
informačních systémů
Java platformy Java Card Pro čipové karty Smart-Cards Fingerprint issues
.NET
Architektura Base Class Library (BCL) Základní knihovna tříd
Překladač z konkrétního jazyka .NET jazyka Common Language Runtime (CLR) Správa spuštěných programů
Architektura Tvorba aplikace Programátorův kód kompilátor jazyka .NET
Vývoj
Intermediate language
Spouštění kompilátor Just-In-Time
Strojový kód
.NET – Verze .NET 1.0
• první verze, únor 2002 • Microsoft Visual Studio 2002 / 7 – Rainier • jazyky C#, VB.NET, J# + ASP.NET • základní vlastnosti
.NET – Verze .NET 1.0 1.1• první verze, únor 2002 • velký update, • Microsoft Visualduben Studio2003 2002 / 7 – Rainier
• Microsoft Visual Studio 2003 / 7.1 – Everett • jazyky C#, VB.NET, J# + ASP.NET • mobilevlastnosti ASP.NET • základní • zabezpečení – code access security • ODBC + Oracle DB • .NET Compact Framework • IPv6
.NET – Verze .NET 1.0 1.1• první verze, únor 2002 2.0 • velký update, duben 2003 • Microsoft Visual Studio 2002 / 7 –roku Rainier • radikální vylepšení, počátek 2006 • Microsoft Visual Studio 2003 / 7.1 – Everett
• jazyky C#, VB.NET, J# + ASP.NET • Microsoft Visual Studio 2005 / 8 – Whidbey • mobile ASP.NET • základní vlastnosti • podpora pro tvorbu 64bitsecurity aplikací • zabezpečení – code access • podpora Generického programování • ODBC + Oracle DB • deklarativní • .NET Compactdatabinding Framework • vylepšení ASP.NET + • IPv6 • personalizace, webparts, …
.NET – Verze .NET 1.0 1.1• první verze, únor 2002 2.0 • velký update, duben 2003 3.0 • Microsoft Visual Studio 2002 / 7 –roku Rainier • radikální vylepšení, počátek 2006 • Microsoft Visual Studio 2003 / 7.1 – Everett • spíše pouze upgrade z2005 verze/ 82.0, 2007 • jazyky C#, VB.NET, J# + ASP.NET • Microsoft Visual Studio – Whidbey • mobile ASP.NET • stále Microsoft Visual Studio 2005 • základní vlastnosti • podpora pro tvorbu 64bit aplikací • zabezpečení – code access security • rozšíření potřebná pro (beta) 3.5 • podpora Generického programování • ODBC + OraclePresentation DB • Windows Foundation • deklarativní databinding • .NET CompactCommunication Framework • Windows Foundation • vylepšení ASP.NET + • IPv6 • Windows• Workflow Foundation personalizace, webparts, … • Windows CardSpace
.NET – Verze .NET 1.0 1.1• první verze, únor 2002 2.0 • velký update, duben 2003 3.0 • Microsoft Visual Studio 2002 / 7 –roku Rainier • radikální vylepšení, počátek 2006 3.5 • Microsoft Visual Studio 2003 / 7.1 – Everett • spíše pouze upgrade z verze 2.0, 2007
• jazyky C#, VB.NET, J# + ASP.NET • Microsoft Visual Studio 2005rozšíření, / 8 – Whidbey • opět (tentokrát zásadní) • mobile ASP.NET • stále Microsoft Visual Studio 2005 • základní vlastnosti • podpora pro tvorbu 64bit aplikací • začátek–roku • zabezpečení code2008 access security • rozšíření potřebná pro (beta) 3.5 • podpora Generického programování • Microsoft Visual Studio 2008 / 9 – Orcas • ODBC + OraclePresentation DB • Windows Foundation • deklarativní databinding • Compact nové vlastnosti jazyků C# a VB.NET • .NET Framework • Windows Communication Foundation • vylepšení ASP.NET + • expression trees a lambda výrazy • IPv6 • Windows• Workflow Foundation personalizace, • extensions methods webparts, … • Windows CardSpace • anonymní typy • LINQ, …
.NET – Verze .NET 1.0 1.1• první verze, únor 2002 2.0 • velký update, duben 2003 3.0 • Microsoft Visual Studio 2002 / 7 –roku Rainier • radikální vylepšení, počátek 2006 3.5 • Microsoft Visual Studio 2003 / 7.1 – Everett • spíše pouze upgrade z2005 verze/ 82.0, 2007 • jazyky C#, VB.NET, J# + ASP.NET 4.0 • Microsoft Visual Studio – Whidbey • opět (tentokrát zásadní) rozšíření,
• mobile ASP.NET • stále Microsoft Visual Studio 2005 • základní vlastnosti • hlavně využití technologií WPF/XAML • podpora pro tvorbu 64bit aplikací • začátek roku 2008 • zabezpečení – code access security • rozšíření potřebná pro (beta) 3.5 • 2010 • podpora Generického programování • Microsoft Visual Studio 2008 / 9 – Orcas • ODBC + OraclePresentation DB • Windows Foundation • Microsoft Visual Studio / 10 – Orcas • deklarativní databinding • Compact nové vlastnosti jazyků C# 2010 a VB.NET • .NET Framework • Windows Communication Foundation • paralelní programování, lepší threading • vylepšení ASP.NET + • expression trees a lambda výrazy • IPv6 • Windows Foundation • WCF• aWorkflow WF podpora pro Web 2.0 personalizace, webparts, … • extensions methods • Windows CardSpace (REST, • anonymníPOX, typy ATOM, …) • tvorba • LINQ, … grafy
• MVC framework pro ASP.NET
Požadavky Tvorba aplikací
Spuštění aplikací
.NET FW + CLR
CLR
Odpovídající verze Typicky umožňuje vývoj
všech typů aplikací Některé věci se doinstalovávají bokem +/- 300 MB
Vývojové prostředí Visual Studio … Borland, …
.NET FW Redistributable
package Dříve .NET FW Client Profile Dnes +/- 50 MB Nebo plný FW Je typicky v OS
.NET - Architektura
C#
VB.NET
… další
Common Language Specification WinForms
ASP.NET
ADO.NET: Data & XML Base Class Library Common Language Runtime VES
JIT
GC, … Operační systém
CLS
CTS
.NET - Architektura
Zdrojový kód
C#
VB.NET
… další
Common Language Specification WinForms ASP.NET Knihovny ADO.NET: Data & XML
MSIL
Base Class Library Common Language Runtime
Strojový kód VES
JIT
GC, … Operační systém
CLS
CTS
.NET platformy .NET Pro tvorbu běžných (desktopových) aplikací Základní balík všech "výchozích" knihoven … + API knihovny pro vytváření klientských
desktopových aplikací
.NET platformy .NET Compact Edition Pro malá zařízení S Windows Mobile, Windows CE
.NET Micro Framework >320 kB RAM Podporuje podmnožinu funkcí .NET Vlastní UI (WPF)
.NET platformy ASP.NET Není čistě platforma Rozšíření .NET pro tvorbu webových aplikací
.NET – potřebné bloky Pro spuštění aplikací .NET Redistributable Package Řádově desítky MB (4.0 = cca 60MB) Nevychází vždy
Pro tvorbu aplikací .NET Framework
Plná verze, řádově stovky MB (3.5 SP1 = cca 350MB)
Programovací jazyky Java
.NET
"Hlavní jazyk" Java (2)
Jedna obecná specifikace celé
Od 6 podpora
skriptovacích jazyků Visual Basic
Od 7 "univerzální" virtuální
stroj Tvorba vlastních jazyků
platformy Libovolný jazyk podporující
tuto platformu Hlavní jazyky C# a Visual
Basic .NET Spousta dalších (PHP.NET,
Delphi.NET, J#, JavaScript.NET, …)
Tvorba programu Java
.NET
Zdrojový kód v Javě
Zdrojový kód v libovolném
jazyce .NET Přeložený kód v ByteCode
Implementovaný "strojový"
kód JVM
Přeložený kód v
Intermediate Language Implementovaný "strojový"
kód CLR
Tvorba programu Java - Bytecode
.NET – Intermediate language
Samopopisný
Samopopisný
Optimalizovaný
Neoptimalizovaný
Nečitelný
Čitelný Text
Nutný
Nebo překompilovaný Do x86, …
Nikam nepřipojitelný
Připojitelný (např. do C++,
Javy, Delphi)
Programovací jazyky Oba plně objektově orientované Nejvyšší typ "Object„
Oba syntakticky vycházejí z C++ a inspirují se jinými OOP jazyky (LISP, Smalltalk, Simula) Dědičnost Jednoduchá Rozhranní
Garbage collector Stejné základní datové typy Obdobné principy Téměř stejná syntaxe
Programovací jazyky Java
.NET
Programátor tvoří pouze třídy
Podporuje struktury
Primitivní typy nejsou třídy Implicitní virtualizace Generika se "mažou" při
překladu Nemá "unsigned" typy Má checked-exceptions
Výjimky je nutné zachytit nebo
předat dál
I ty jsou obecným typem Např. primitivní typy
Všechny typy jsou objektové Explicitní virtualizace Generické typy jsou skutečně
existují Má i unsigned typy
Typy jsou o „jeden řád“ větší
Výjimky jsou volné
Některé jazyky výjimky nemusí používat
Programovací jazyky Java
.NET
Nativně pouze procedurální a
Procedurální, OOP, funkcionální
Enum je "potomek" intu Má 3 základní typy polí
OOP paradigma Enum je "vlastní třída" Nemá nativně maticová pole
HQL/apod. jsou součástí
knihoven
„klasická“ „pole polí“ „pravoúhlá pole“
LINQ je součástí jazyka
.
Programovací jazyky Java
.NET
Odlišné chování vnitřních
Vnitřní třídy jsou
tříd Vidí obsah svého
nadřazeného typu Implementace více rozhranní Wrapping funkcionalit
„normální“ třídy Explicitní implementace rozhranní
Programovací jazyky .NET Podmíněné překlady Uzávěry Má Java od 7
Anonymní třídy a metody Dlouho měla pouze Java
Lambda výrazy Měla mít Java7, má mít Java8
Má parciální třídy Má hodnotové / referenční
/ výstupní parametry
Checked/unchecked bloky
pro testování "overflow" Vlastnosti Obecně spousta různých členů
tříd
Goto, Switch, Using, Yield; Delegáti Podpora funkcionálního
paradigmatu Událostní model
Přetěžování (všeho)
Programovací jazyky Java Lepší podpora a užití
návrhových vzorů Hlavně MVC
Lepší struktura
implementovaných objektů Dědění, rozhranní
Public podpora vývoje Pomocí Java Specification
Request
Lepší reakce a podpora
opravy chyb
Lépe vytvořené principy
pro desktop aplikace AWT / Swing Podpora MVC
Více standardizovaných
mohutných rozšíření (EE)
Programovací jazyky Verze V .NET Oproti Javě vycházejí zvlášť Ne tak časté updaty Ale zase pak to stojí za to (i stovky MB) FW je nativně v OS Windows (dle verze) Není zpětná kompatibilita / Java průběžné updaty Malá velikost Zpětná kompatibilita /
Připojení k DB Java
.NET
JDBC
ADO.NET
Java DataBaseConnectivity 4 druhy Zapouzdření nad ODBC … … Čisté JDBC
Vytvoření připojení Nalezení ovladače class.forName(
); Otevření připojení Práce s příkazy Uzavření připojení
Active data objects 1 druh Pro „libovolné“ DB (včetně ODBC)
Vytvoření připojení Připojení knihovny Vytvoření instance připojení … práce s příkazy Ukončení připojení
Připojení k DB Příkazy DDL, DML, DQL Volání uložených procedur Java Statement PreparedStatement Ochrana proti SQL injection CallableStatement
.NET SQLCommand (typ rozlišuje parametr) Ochrana proti SQL injection
Připojení k DB Navrácení hodnoty pomocí
"recordSetu"/"resultSetu" Přímé propojení do databáze
V Javě Jednosměrný, obousměrný, citlivý na změny
V .NET Typicky pouze dopředný
V obou jazycích podpora "metadat"
Připojení k DB Java
.NET
V reálu FW pro připojení k
V reálu dříve frameworky
db a zapouzdření ukládání Hibernate Java Persistence API
Definice XML
Nyní anotace
Nhibernate
Dnes LINQ Univerzální nad obecným
zdrojem LINQ to SQL LINQ to Entities
Definice Parciální třídy
Aplikační vrstva Java
.NET
Java Enterprise Edition
Drobné nástroje, ale žádný
Ucelený blok prostředků pro
tvorbu výkonné automatizované aplikační logiky
ucelený Některé požadavky jsou
automatizované v .NET Správa stavů / sessions Zasílání správ Na něco jsou externí nástroje Entitybeans vs. DataSet, deklarativní databinding, adaptéry
Prezen(ta)ční vrstva Java
.NET
Pro desktop AWT / Swing /
WinForms
Nebude dále podporován Nutné lokální řešení
Existuje "univerzální"
implementace
XAML
Pro web
Servlety JSP JSF // třídy doplněné bokem
Pro obecná zařízení Silverlight
Pro web ASP.NET // uvnitř jádra .NET vlastní kompilátor, …
Prezen(ta)ční vrstva V obou jazycích „kompilace po dotazu“
Při spuštěném běhu se kompilace neprovádí Webové řešení V javě request response V .NETu událostní model
Klient click na tlačítko (data na server) metoda button_Clicked(…) (nový formulář na klienta)
XML Java
.NET
JAXP (Java API for XML
Jmenný prostor
Processing) – analyzátor dokumentů XML v
Javě, aplikační rozhraní, umožňuje analýza ověření validity transformace
System.XML Nově System.Linq.XML Automatická práce x XML
dokumenty
Základní přístup přes DOM
2 různé standardy SAX DOM
VB.NET má XML literáry !!!
Java – (další) stavební bloky
Servlety Alternativa k CGI skriptům pro generování
dynamických webových stránek Běží na straně serveru Request/response + cache, session Server řeší Připojení (network connections) Správu a dohodnutí protokolu (protocol
negotiations) Nahrávání tříd (class loading) a další
Servlety Podporuje základní protokoly HTTP, SMTP, POP3, FTP …
Běží uvnitř servletového kontaineru Základní metody Init () – při prvním volání servletu, slouží pro
inicializaci Destroy () – opak Service() – vlastní obsloužení požadavku Pomocí objektu servletRequest, servletResponse
Servlet
JSP Java Server Pages
Dynamické generované webové stránky pomocí Javy spolupracují s "javabeans" (ne enterprise beans) a
servlety
Obdobné HTML jiné tagy vlastní tagy
JSP Opačný pohled oproti servletům Servlety generují ze zdrojáku HTML JSP generují do HTML pomocí zdrojáků bloky
V praxi se kompilují do servletů
JSP
JSF Webový aplikační framework
Založený na komponentách (ne requestdriven) JSF používají pro zobrazení JSP, lze však
použít také XUL apod. Před zavoláním requestu na novou stránku je stav UI komponenty uložen a obnoven po vrácení odpovědi
JSF
http://exadel.com/web/portal/jsftutorial-kickstart
EJB Enterprise Java Beans framework pro tvorbu enterprise aplikací == obecně pro podporu podnikových procesů podpora tvorby aplikační vrstvy bussines logika informačního systému
Distribuovaná komponentní architektura Entity bean / Entities (Java Persistence API) Session bean Message-driven bean
EJB Komponentní architektura pro serverové
komponenty v Javě na straně serveru EJB reprezentují byznys logiku aplikace Kontrakt mezi komponentou a aplikačním serverem Aplikační server slouží jako prostředí pro spouštění EJB a poskytuje tzv. kontejner Odpovědnost za správu a zabezpečení
komponenty
EJB Výhody Přenositelnost Standard nejen pro psaní EJB, ale také pro kontejner Jednoduché vzít EJB a přenést do jiného kontejneru
jiného výrobce
Silná podpora kontejneru Kontejnery již podle specifikace musí poskytovat velké
množství služeb, které ulehčují samotný vývoj aplikace. Mnoho výrobců kontejnerů přidává ještě své nestandardní funkce.
EJB Základní typy EJB Session Stateless – jednorázové akce, umožňují konkurenční přístup, vyžadují méně zdrojů (nemusí si pamatovat) Statefull – v případě že je třeba pracovat se sessions (po přihlášení do e-shopu), pracuji s více kroky Entity (Container managed persistency Bean managed persistency) Message driven bean – nové od v2.0, integrace JMS a
EJB (pro zpracování asynchronních JMS zpráv)
Další prvky Logování událostí při běhu aplikace Log4j Logger / Appender / Layout
(Anonymní vnitřní třídy, formátování datových
typů) Aspektově orientované programování roztříštěná funkcionalita AspectJ
Podpora moderních technik TDD, XP, …
.NET – (další) stavební bloky
ASP.NET Podpora pro tvorbu webových aplikací Velmi obdobné tvorbě desktopových aplikací Událostní model
Definice stránek pomocí formulářů Webové služby Uživatelské prvky
Odlišení zdrojového kódu od "HTML" Dva soubory Odlišení generovaného od programátorova kódu 3 soubory
ASP.NET Volné i automatizované řešení Cookies, stavy, sessions, applications
Integrované zabezpečení, přihlašování, role, … Automatická kompilace, sledování změn Žádné „sestavování“ projektu
Cachování Konfigurační XML soubory Podpora MVC Nativní podpora AJAXu IIS, funguje i nad Apache
ASP.NET
ASP.NET
Windows presentation foundation / XAML Definice rozhranní ne pomocí tříd
Ale pomocí XML Tlačítko už není "instance" objektu formuláři Tvorba formuláře se blíží tvorbě webové stránky Animace Nezávislé na OS (funguje pod .NET Micro Ed.) Různá (i naprosto hloupá) zařízení
WPF / XAML
Windows Communication Foundation Tvorba distribuovaných aplikací včetně webových služeb
Jedno/oboustranné spojení Zabezpečené / nezabezpečené
Windows Workflow foundation Programování pomocí UML Zatím pomocí sekvenčních diagramů a diagramů
tříd
Automatické generování zdrojového kódu
Bližší k modelování procesu v organizaci/podniku
LINQ Typové dotazování do databáze Obecné datové zdroje ODBC, SQL, kolekce, XML, …
SELECT x FROM Zamestnanec WHERE plat="nikde nic"
XNA Pro tvorbu her a grafických aplikací Lepší než jednoduché a horší než profi
Zapouzdření DirectX
Silverlight Obdoba Flashe
Dynamické (grafické) realizace na stránce Využívá .NET + XAML + Nutná instalace u klienta (cca 3MB)
Kritika Javy Generika pomocí type-erasure
Nemá neznaménkové typy Nemá hodnotové typy Omezená velikost pole Chybějící možnosti přetěžování Uzávěry funkcí Nejsou delegáti Je v JSR
FP aritmetika Výkonnost Bezpečnost
Kritika .NETu Ne vždy povedená implementace OO
Velké balíčky pro update Nekompatibilní verze
Nezabezpečené výjimky Unchecked exceptions
Menší podpora „EE“ knihoven Větší závislost na dodavateli
Výhody javy Vyspělá
Multiplatformní Podpora několika firem Nejmenší distribuční jednotka je "třída" Univerzálnost SWINGu JSR
Výhody .NET Common Language Runtime
Bezkonkurenční pro desktopové aplikace Dobrá podpora nad OS Win Generika v .NET Uzávěry Funkcionální programování
Struktury (hodnotové typy) Explicitní přetěžování