Java jako programovací jazyk

  • Je jazykem "3. generace" (3GL), imperativním jazykem vysoké úrovně

  • Je jazykem univerzálním; není určen výhradně pro specifickou aplikační oblast.

  • Je jazykem objektově-orientovaným, výpočet je převážně realizován jako volání metod objektů (zasílání zpráv objektům).

  • Ideovým předchůdcem Javy je C++

  • a evt. Delphi

  • Svým způsobem je Java obdobou C++, ale zbavena zbytečností a nepříjemností.

  • Je jazyk významně jednodušší než C++, komplikovaností srovnatelný s jazykem C#, jenž se Javou inspiroval.

Java v budoucnu

  • Pro tradiční typy serverových podnikových aplikací (IS) zůstává Java (Enterprise Edition) klíčovou platformou spolu s .NET.

  • Perspektivním směrem vývoje je zachování Java platformy (JVM, stávající knihovny, aplikace, aplikační prostředí).

  • Rychle se vyvíjejí skriptovací jazyky na této platformě (Groovy, JRuby, Jython…).

  • Objevují se nové jazyky na javové platformě (Scala).

Proč Java

  • Java je jazyk pro vývoj a běh jednoduchých i rozsáhlých aplikací.

  • Vývoj je efektivnější než na jejich předchůdcích (C++) a výsledné aplikace "běží všude".

  • Silnou typovaností, běhovou bezpečnostní kontrolou, stabilními knihovnami vč. open-source a rozsáhlým souborem dobrých praktik nabízí aplikacím velmi vysokou robustnost.

  • Nezavádí zbytečnosti a vede ke správným a dále uplatnitelným návykům.

  • Je velmi perspektivní platformou pro vývoj open-source i komerčního SW, mj. pro extrémně velké množství volně dostupných knihoven.

Z toho plyne, že…

  • Co se naučíme v Javě, v C# jako když najdeme.

  • .NET/CLI jako platforma je silně ovlivněná Java EE.

  • Rovněž moderní skriptovací jazyky (Groovy zcela, Ruby a Scala se inspirovaly) koncepčně i syntakticky vychází z Javy.

Java jako správný vzor

Java podporuje vytváření správných návyků v objektovém programování a naopak systematicky brání přenosu některých špatných návyků z jiných jazyků.

  • Začínat v imperativním paradigmatu ihned se slabě typovaným (např. skriptovacím) jazykem není vhodné, absentuje zde překladová typová kontrola, chyby se projeví typicky později.

  • Je lépe nejdříve dobře zvládnout klasický (silně typovaný) jazyk, navyknout si na omezení a kontroly, vytvořit si styl, a pak snadno přejít.

Další charakteristiky

  • Program v Javě je meziplatformně přenositelný na úrovni zdrojového i přeloženého kódu.

  • Je to umožněno tím, že přeložený javový program běží v tzv. Java Virtual Machine (JVM).

  • Zdrojový i přeložený kód je tedy přenositelný mezi všemi obvyklými platformami (UNIX, Windows, Mac OS X, ale také sálové počítače, minipočítače typu IBM AS/400 apod.).

  • Při respektování omezení mobilních zařízení (smartphones) je Java použitelná i tam (viz mnohé mobilní hry), byť dnes v podstatě úplně vytlačená Androidem.

  • Tedy všude tam, kde existuje příslušná JVM.

Java jako běhové prostředí

Kód je při běhu dobře zabezpečen:

  • Je možné velmi jemně nastavit úrovně přístupu k hostitelskému systému pomocí tzv. Security Manageru (knihu možné pročíst i z webu!).

  • Je možné ověřovat před spuštěním elektronický podpis kódu.

Java pro programátora (produktivita)

Java pro programátora (výhody oproti C++)

Konkrétní možnosti:

  • V Javě se dobře píší vícevláknové aplikace (multithreaded applications).

  • Java má automatické odklizení nepoužitelných objektů (automatic garbage collection).

  • Java je jednodušší než C++ (méně syntaktických konstrukcí, méně nejednoznačností v návrhu), což zlepšuje čitelnost a redukuje riziko chyb.

Hlavní domény Javy (1)

  • Škálovatelné výkonné aplikace běžící na serverech — Java Enterprise Edition

  • Přenositelné desktopové, a to i grafické/okénkové (GUI) aplikace

  • Výukové účely (nahradila Pascal jako referenční jazyk)

  • Aplikace na přenosných a vestavěných (embedded) zařízeních — Java Micro Edition

  • Aplikace na chytrých kartách (smart cards) — Java Card technology

Hlavní domény Javy (2)

  • Webové aplikace: jak back-end (Java EE), tak front-end (JavaFX)

  • Velké podnikové (informační) systémy (Java EE)

  • Integrační technologie (propojování systémů) (Java EE)

Javová platforma

Javovou platformu tvoří:

  • Java Virtual Machine

  • Java Core API (základní knihovna tříd)

  • překladač (přístupný např. příkazem javac) a další vývojové nástroje

Java je dána

Vývoj Javy

  • Nejrychleji se vyvíjí Java Core API.

  • Chování JVM se mění např. pokud se objeví bezpečnostní "díra" nebo nelze-li dosáhnout požadované změny chování pomocí modifikace Java Core API.

  • Daleko konzervativnější je samotný jazyk

  • mění se zřídka, ale přece: např. Java2, v1.4 přidala nové klíčové slovo assert, Java 5.0 (postaru 1.5) obohacuje jazyk o enum, generické typy, anotace a další rysy.

  • Java 7 přináší další spíše drobné změny jazyka, např. v ošetřování výjimek, uvolňování systémových zdrojů.

  • Java 8 ale také zásadnější prvky (lambda-výrazy, funkcionální rozhraní).

Specifikace a implementace Javy

  • Specifikace Javy (tzv. "Editions") - např.: Java 2 Standard Edition, 1.4 nebo Java Standard Edition 6

  • Implementace Javy ("Development Kits" nebo "Runtime Environments"), např.: Java Software Development Kit, 6.0 - obsahuje vývojové nástroje.

  • Java Runtime Enviroment, 6.0 - obsahuje jen běhové prostředí pro spouštění hotových přeložených programů.

Verze Javy - starší konvence

  • Verze Javy byly až do verze 5.0 označovány jako "Java 2, vX.Y, tedy následovně:

  • tzv. major číslo, např. Java 2, v1.4

  • tzv. minor číslo, např. Java 2, v1.4.2

  • změnu minor (třetího) čísla doprovází jen odstraňování chyb

  • při změně major (druhého) čísla se může měnit Core API a někdy i jazyk

  • ke změně prvního čísla dochází až s verzí 5 (postaru 1.5) - tj. s celkovou změnou pojmenovávacího schématu

Aktuální verze

Stav k září 2016:

  • Java Standard Edition 8 (u zákazníků s Long Term Support pokračují i SE 6 a 7)

  • je stabilní verzí pro všechny platformy.

  • U Java 7 běžná podpora skončila dubnem 2015.

  • Aktuální informace najdete vždy na webu Oracle Oracle Technetwork/Java.

  • K předpokládanému vývoji existuje Oracle roadmap

Licence k použití (a redistribuci) Javy

  • používání Javy pro běžný vývoj (i komerční) je zdarma, licenční ujednání Java SE for Business License

  • distribuce vyvíjí Oracle i další výrobci (např. IBM) a tvůrci open source — jako OpenJDK

Stažení distribuce Oracle

  • http://www.oracle.com/technetwork/java/index.html pro Windows, Solaris, Linux, Mac OS X

  • Lze stáhnout jak samotné vývojové prostředí (JDK), jen běhové prostředí (JRE) nebo JDK v balíčku s IDE (Integrated Development Environment) NetBeans (nyní NetBeans 8.0).

  • Dokumentace se stahuje z téhož místa, ale samostatně. Obvyklejší je číst z webu — pozor na verzi Javy, jejíž dokumentaci čteme!

Typy distribucí Javy (Oracle)

Lze stáhnout:

  • samotné vývojové prostředí (JDK), např. Java SE 8 JDK

  • jen běhové prostředí (JRE), např. Java SE 8 JRE: to nám tady nestačí, chceme vyvíjet

  • JDK v balíčku s grafickým (okénkovým) integrovaným vývojovým prostředím (IDE, Integrated Development Environment) NetBeans.

Obsah vývojové distribuce Javy

  • Vývojové nástroje (Development Tools) v bin určené k vývoji, spouštění, ladění a dokumentování programů v Javě.

  • Běhové prostředí Javy (Java Runtime Environment) se nalézá v jre. Obsahuje Java Virtual Machine (JVM), knihovnu tříd Java Core API a další soubory potřebné pro běh programů v Javě.

  • Přídavné knihovny (Additional libraries) v podadresáři lib jsou další knihovny nutné pro běh vývojových nástrojů.

  • Ukázkové applety a aplikace (Demo Applets and Applications) v demo . Příklady zahrnují i zdrojový kód.

Nástroje ve vývojové distribuci

Pod Windows jsou to .exe soubory umístěné v podadresáři bin

  • java (nebo jexec)- spouštěč (přeloženého bajtkódu)

  • javac- překladač ( .java.class)

  • javadoc- generátor dokumentace API

  • jar-- správce archivů JAR (sbalení, rozbalení, výpis) a jarsigner-- podpisovač archivů JAR

  • jdb-- debugger a jcmd zasílá diagnostické příkazy JVM

  • appletviewer - referenční prostředí pro spouštění appletů

  • javaws-- referenční prostředí pro spouštění aplikací typu "Java Web Start" prostřednictvím Java Network Launching Protocol (JNLP) a javafxpackager-- nástroj na sbalení JavaFX aplikace

Pomocné nástroje ve vývojové distribuci

  • javah — generátor hlavičkových souborů pro C — používá se při programování tzv. nativních (platformově závislých) metod dostupných přes Java Native Interface (JNI)

  • javap — disassembler bajtkódu (např. pro ruční optimalizace, hledání chyb)

Budoucnost Javy