Börja med Java Sven-Olof Nyström Uppsala Universitet 11 mars 2005 1 Historik: Java • Hette från början OAK (James Gosling, 1991). Utvecklades vid SUN Microsystems. • Från början avsett för inbyggda system (tex tvättmaskiner, mobiltelefoner, TV/video, spel, mm). (Storlek och pålitlighet var viktiga) • Med WWW fick projektet en annan inriktning Java blev ett programspråk för web-applikationer • Senaste versioner är J2SE 1.4.2 samt J2SE 5.0 • Utvecklingsmiljö: Java 2 Software Development Kit 2 Java är... • enkelt (?), baserat på C/C++ (?) • objekt-orienterat från början • dynamiskt utbyggbart (nya klassdefinitioner kan laddas in under körning) • robust, säkert • oberoende av hårdvaruarkitektur (portabelt) • stöd för nätverksprogrammering, multitrådat • bra högnivåstöd genom standardbibliotek 3 Objektorienterat . . . • Java är ett rent OOP-språk: det finns bara klasser, inga funktioner. • Java är utvecklat för dagens fönsterbaserade datorer och har många färdiga komponenter för grafik och användarinteraktion. • Det finns understöd för trådar (flera “processer” i samma program) och nätverksprogrammering. 4 Kompilering av Java • Traditionella kompilatorer översätter programtexten till maskinkod. • De flesta Java-kompilatorer översätter till en slags maskinkod; Javabytekod (JVM). • Det finns inga maskiner som kör Javabytekod (nja, nästan inga). • Därför måste JVM-koden vid körning antingen – översättas till maskinkod, eller – interpreteras. 5 Java på webben • Java används dels för att skriva “vanliga” program för olika tillämpningar dels också för att skriva applets. • Applets (små applikationer) kan laddas ned via webbsidor och exekveras på din dator. • Webbläsare som t.ex. Netscape och Explorer innehåller en JVM som kan interpretera bytekod. • Har bibliotek för protokoll som TCP/IP och HTTP • Kan komma åt objekt över nätet via URL:er lika lätt (svårt?) som lokala filer 6 Robust • Statiska felkontroller (vid kompilering, hittar fel tidigt) • ...och dynamiska • Tillåter inte att man släpper igenom fel (exceptions) • Inga pekare (nåja), men absolut ingen pekararitmetik • Hård typkontroll • (Nästan) inga implicita typkonverteringar 7 Robust (forts) • Länkare dubbelkollar typerna • Javas pekarmodell: – Ingen pekararitmetik: kan ej peka fel – Avsaknad av pekararitmetik gör att indexkontroller kan genomföras – Omöjligt att omvandla en integer till en pekare! – Eliminerar möligheten att skriva i fel minnesadress 8 Säkert • Robusthet ger säkerhet • Omöjligt att komma åt data genom “buffer overrun” • Omöjligt att komma åt data genom pekarmodifiering 9 Hårdvaruoberoende • Utformat för att stödja nätverksapplikationer • Hårdvaruoberoende objektfilformat (bytecode) • ...som kan köras oberoende av processor, kräver Java runtime system • bytecode är enkel att tolka (interpretera) och kan lätt översättas till maskinkod (kompilering just-in-time) 10 Portabelt • hårdvaruoberoende -> portabelt • Portabla gränssnitt (ex abstrakt klass Window) • Java-system självt är portabelt (skrivet i Java med ett run-time-system som är skrivet i ANSI C) 11 Multitrådat • Mycket i verkligheten pågår parallellt... • Multitrådning är möjligheten att bygga sådana applikationer • Synkroniseringsverktygen är inbyggda i språket • Man får snabbare interaktion 12 Dynamiskt • Kan lätt anpassas till ändringar • Dynamisk länkning (ny kod kan laddas in under körning!) 13