Java Introduktion. Historik. Beståndsdelar

Relevanta dokument
Java: Utvecklingsverktyg, datatyper, kontrollstrukturer

Föreläsning 1. Presentation av kursen Vad är programmering? Lite om java och utvecklingsmiljöer Aktivitetsdiagram Ett första program

Lektion Java Grunder. Javas historia. Programmeringsspråket Java. Skillnaderna mellan Java och C++ JVM (Javas Virtuella Maskin)

Grundläggande programmering DVG A08 & ISG A04. Allmän information. Å vem är jag då. Karlstads Universitet, Johan Öfverberg 1

(Man brukar säga att) Java är... Denna föreläsning. Kompilering av Java. Historik: Java. enkelt. baserat på C/C++ Allmänt om Java

OOP Objekt-orienterad programmering

Att använda Java SE JDK 6

OOP F1:1. Föreläsning 1. Introduktion till kursen OOP Vad är Java? Ett första Java-program Variabler Tilldelning. Marie Olsson

Att använda Java SE JDK 6

Objektorienterad programmering i Java I

Inledande programmering med C# (1DV402) Introduktion till C#

Övning 1. Datateknik A, Java I, 5 poäng. Att ladda hem och installera Java Att skriva ditt första Javaprogram Att kompilera och exekvera ditt program

Programmering i C++ Kompilering från kommandoraden

NetBeans 7. Avsikt. Projektfönster

Objektorienterad programmering i Java. Föreläsning 5 Kort om Java-Applets

Programmering med Java. Grunderna. Programspråket Java. Programmering med Java. Källkodsexempel. Java API-exempel In- och utmatning.

Kompilera och exekvera Javakod

Eclipse. Avsikt. Nu ska ett fönster liknande figuren till höger synas.

Föreläsning 2. Operativsystem och programmering

ITK:P1 Föreläsning 1. Programmering. Programmeringsspråket Java. Stark typning Explicit typning Strukturerat Hög säkerhet

Objektorienterad programmering i Java

SMD 134 Objektorienterad programmering

NetBeans 5.5. Avsikt. Projektfönster

JAVAUTVECKLING LEKTION 1

TDDD78, TDDE30, 729A Introduktion till Java -- för Pythonprogrammerare

Vem är vem på kursen. Objektorienterad programvaruutveckling GU (DIT011) Kursbok Cay Horstmann: Big Java 3rd edition.

Laboration 10 - Eclipse

Här beskrivs Eclipse, den programutvecklingsmiljö som utnyttjas i programmeringskurserna. Mera information finns på:

Arv. Fundamental objekt-orienterad teknik. arv i Java modifieraren protected Lägga till och modifiera metoder med hjälp av arv Klass hierarkier

LÖSNINGSFÖRSLAG Programmeringsteknik För Ing. - Java, 5p

Föreläsning 2 Verktyg m.m.

Introduktion till programmering och Python Grundkurs i programmering med Python

Introduktion till programmering. Programspråk och paradigmer

Kort om klasser och objekt En introduktion till GUI-programmering i Java

732G Linköpings universitet 732G11. Johan Jernlås. Översikt. Repetition. Felsökning. Datatyper. Referenstyper. Metoder / funktioner

Editering, Kompilering och Exekvering av Javaprogram

Objektorienterade programmeringsspråk. Objektorienterade språk. Den objekt-orienterade modellen. Jämför med icke-oo

Programmering för språkteknologer II, HT2011. Rum

Laboration 10 - NetBeans

Objektorienterad Programkonstruktion. Föreläsning 3 9 nov 2015

Objektorienterad Programkonstruktion. Föreläsning 3 7 nov 2016

Få en förståelse för vad Java är och hur det har utvecklats fram till idag. Få en inblick i de delar vi kommer att behandla i senare lektioner.

2I1049 Föreläsning 9. Iterativ programutveckling. Iterativ programutveckling. Modularisering, återanvändning och JavaBeans

Kort repetition. Programmeringsteknik för Bio1 och I1. Vad ska vi lära oss idag? Ett exempel

Inledning. Vad är ett datorprogram, egentligen? Olika språk. Problemlösning och algoritmer. 1DV433 Strukturerad programmering med C Mats Loock

Kompilering och exekvering. Föreläsning 1 Objektorienterad programmering DD1332. En kompilerbar och körbar java-kod. Kompilering och exekvering

Javaprogrammering - Del 1. Kursupplägg. Hello world. Kompilera. Kör. Environmentvariabler. föreläsningar övningar 1, 2, 3 och 4 INLÄMNINGSUPPGIFT 2

DI-institutionen Sid 1 av 6 Hans-Edy Mårtensson Sten Sundin

Eclipse en handledning

OOMPA 2D1359 Föreläsning 3

Programmering för språkteknologer I, VT2012. Rum

1 Språket C Valet av språket C++ för kompendiet. 1.2 Språket. 1.3 Att programmera. 1.4 Hello World Börja programmera

Objektorienterad Programmering DAT043. Föreläsning 1 15/1-18 Moa Johansson

JAVA Mer om klasser och objektorientering

Kompilering av Java-program med eclipse SDK för den som kan BlueJ

En livsmedelsbutik på Internet

Introduktion till Datalogi DD1339. Föreläsning 2 22 sept 2014

725G61 - Laboration 7 Implementation av ett API. Johan Falkenjack

Objektorienterad programmering i Java I. Uppgifter: 2 Beräknad tid: 5-8 timmar (OBS! Endast ett labbtillfälle) Att läsa: kapitel 5 6

Tentamen , Introduktion till Java, dtaa98, dtea53

Verktyg och Utvecklingsmiljö. Jochim von Hacht

TDDD78, TDDE30, 729A Introduktion till Java -- för Pythonprogrammerare

Verktyg och Utvecklingsmiljö. Föreläsning 2 Eclipse

Arv: Fordonsexempel. Arv. Arv: fordonsexempel (forts) Arv: Ett exempel. En klassdefinition class A extends B {... }

Introduktion till arv

Att skriva till och läsa från terminalfönstret

Innehåll. Introduktion till objektorientering. OOP (objektorienterad programmering) Objekt, instanser, klasser

TDDC77 Objektorienterad Programmering

Innehålls förteckning

Så här skriver du ditt första program i C++

Klassen javax.swing.timer

Inledande programmering med C# (1DV402) Ditt första C#-program med Visual Studio

Imperativ programmering. Föreläsning 4

Programsystemkonstruktion med C++: Övning 1. Karl Palmskog september 2010

Lektion 2. Datateknik A, Java I, 5 poäng

Design av interaktiv multimedia. Läs i förväg om det som övningarna kommer att beröra. Träna hemma både före och efter övningarna.

2 Eclipse en handledning

Ingenjörsfirman Stéen Java Sida 1 av 1

I Skapa Hej.java och skriv programmet. I Kompilera med javac Hej.java. I Rätta fel och repetera tills du lyckas kompilera ditt program

Objektorienterad Programmering (TDDC77)

Objektorientering/ Klasser

Java: kort introduktion. Trådar. Något om mutex, Dekkers algoritm och monitorer. Javas ("inbyggda monitor") synchronized.

Föreläsning 8 - del 2: Objektorienterad programmering - avancerat

Uppgiften är att beskriva en kvadrat i ett Java program. En första version av programmet skulle kunna se ut så här:

Föreläsning 2. Täcker material från lektion 1, 2, 3 och 4:

Dagens program. Programmeringsteknik och Matlab. Objektorienterad programmering. Vad är vitsen med att ha både metoder och data i objekten?

Kompilatorteknik. Görel Hedin Datavetenskap Lunds Tekniska Högskola. Temaföreläsning, Datorer i system, 2014

Föreläsning 3. Programmering, C och programmeringsmiljö

Högskolan Dalarna sid 1 av 7 DI-institutionen Hans-Edy Mårtensson Sten Sundin

Objektorienterad Programkonstruktion, DD1346 FACIT. Tentamen , kl

Programmering med Java. Grunderna. Programspråket Java. Programmering med Java. Källkodsexempel. Java API-exempel In- och utmatning.

DUGGA: Objektorienterade applikationer. Läs detta! Uppgifterna är inte avsiktligt ordnade efter svårighetsgrad.

Programmering i C++ En manual för kursen Datavetenskaplig introduktionskurs 5p

Programutveckling med Java Development Kit. (JDK 1.1.x) och Programmers File Editor (PFE 7.02)

PROGRAMMERING. Ämnets syfte. Kurser i ämnet

l uppgiftsformulering l algoritmkonstruktion l verifikation l kodning l testning och avlusning l validering l dokumentering l underhœll Kapitel 2

Eclipse en handledning

Anteckningar 1: Grundläggande saker

Classes och Interfaces, Objects och References, Initialization

TUTORIAL: SAMLING & KONSOLL

Transkript:

Java Introduktion Historik Java utvecklades ursprungligen av Sun Microsystems för att skriva kompakta program inbäddade i konsumentelektronik, t ex microvågsugnar och tvättmaskiner. Java skapades utifrån C++ syntax och SmallTalks idéer. ( SmallTalk är det första och hittills enda rent objektorienterade programspråket. I SmallTalk betraktas allting som objekt. Om du vill veta mer kan du läsa vidare på http://www.smalltalk.org ) Målet för utvecklingen av Java var att utveckla ett säkert programspråk och man avlägsnade C++-konstruktioner som ansågs vara osäkra eller onödigt komplicerade och svåra att använda. Språket lanserades officiellt i november 1995 och har funnits i flera huvudversioner med en mängd underversioner. Den som används nu är 1.4.2. Beståndsdelar Java är mer än ett språk, det är en hel utvecklingsplattform. Man kan se olika delar i Java: Språket själv (syntax + semantik) Java API (Application Programming Interface) Java API är ett klassbibliotek med färdiga klasser för gränssnittsprogrammering, ADT:er, etc. Java interpretator (java) Kör igång en eller flera.class-filer på en virtuell maskin. virtuell maskin (för plattformsoberoende) (JVM). Mjukvara som emulerar en java-dator, dvs en dator som kan exekvera bytecode i stället för maskinkod. Det finns en JVM för varje operativsystem. Appletviewer (för testkörning av applets) Dekompilator för undersökning av.class-filer (javap). Visar viktig information om gränssnittet mot en.class-fil så att man vet vilka egenskaper den har. Debugger (jdb) för felsökning. Dokumentationsgenererare (javadoc) Läser speciella /** javadoc-kommentarer */ och genererar HTML-kod från dessa. Garbage Collector (GC) Ett delprogram som tar hand om minnesdeallokering. Sveper över minnet då och då och ser om det finns områden som ingen använder men som är allokerade. Dessa deallokeras då av GC.

Applets och applikationer Man kan i Java skapa två sorters program. Applets små program som körs i en browser eller med appletviewer. Applikationer Självständiga program som dock kräver en JVM för att kunna köras. Egenskaper Enkelt Java är medvetet designat för att vara så enkelt som möjligt. Det finns t.ex. inga pekare, det har automatisk minneshantering, men trots enkelheten är språket komplett. Likt Språket liknar syntaxmässigt C/C++ mycket. Nästan all syntax och språkliga konstruktioner är identiska. Generellt Objektorienterat som Smalltalk, numeriskt som Fortran, systemspråk som C/C++, distribuerat som inget tidigare språk. Även om de flesta Javaprogram körs som applets i en browser och därmed i ett grafiskt gränssnitt, finns det möjligheter att skriva vanliga traditionella textbaserade applikationer. Objektorienterat Språket är fullt ut objektorienterat då det har stöd för klasser, arv och polymorfism. Plattformsoberoende Eftersom Java körs på en virtuell maskin kan program köras i olika datorer/operativsystem utan omkompilering (förutsatt att det finns en Java Virtual Machine installerad). Java är alltså oberoende av processor, operativsystem och användargränssnitt. Dynamiskt I stället för att länka in alla klasser till en stor exekverbar modul, laddas klasserna in vid behov. Nackdelen med detta är dock att effektiviteten blir lägre. En fördel är att storleken på själva applikationen som laddas ner över nätet kan hållas nere eftersom klasserna som används i den normalt sett finns i Javas lokala bibliotek.

Hårt typat Javas filosofi är att det är hårda kontroller vid kompileringen, för att minska risken för fel under exekveringen. Robust Inga pekare, automatisk minneshantering och stöd för undantagshantering gör det lättare att skapa program som inte kraschar. Säkert Java har stöd för att låta okända program exekvera under stark kontroll med begränsade rättigheter. (Det är i alla fall säkrare än andra liknande tekniker). Alla javaprogram körs i ett separat minnesområde och eftersom det inte är möjligt att använda pekare, kan man inte komma åt data utanför detta minnesområde. Dessutom kontrollerar interpretatorn koden innan den tillåts exekvera. Standardiserat Javaspråket, klassbiblioteken (dvs. API:erna) och Java Virtual Machine är specificerade i detalj vilket lämnar minimalt utrymme för tolkning. Javasoft testar applikationer och utvecklingsmiljöer och delar ut märket "100% Pure Java" till godkända produkter. Långsamt Java-språket i sig medför inte att Java-applikationer blir långsamma, utan det är det faktum att programmen körs i en Java Virtual Machine, dvs. ett extra mjukvaruskal, som gör att det kan bli långsammare. Man jobbar med olika trix för att få programmen snabbare: - Just-In-Time kompilatorer som omvandlar bytekod till maskinkod innan den exekveras, - vanlig kompilering till datorspecifik maskinkod utan att gå via bytekod, - adaptiv optimering av "Hot Spots" när program exekveras

Klassbibliotek (API:er) Java-standarden omfattar inte bara själva språket utan även ett antal API:er (klassbibliotek) och Java Virtual Machine. Java är därför att betrakta som en hel utvecklingsplattform. Exempel på API:er är: Filhantering Användargränssnitt Nätverkskommunikation De klassbibliotek som vi kommer att använda mest i denna kurs är.lang.io.util Traditionellt Applikation Språk Operativsystem Hårdvara Med Java Applikation Java Java Virtual Machine (JVM) Operativsystem Hårdvara Traditionellt API kontra Java-API

Standardiserade filnamn Bytekoden är ett standardiserat kompakt instruktionsformat för en virtuell Javamaskin. Bytekod kan alltså direkt flyttas mellan olika maskiner utan någon omkompilering. <Namn>.java Källkod <Namn>.class Bytekod Java Virtual Machine Källkoden kompileras till bytekod. Bytekoden lagras i en fil med samma filnamn som källkoden men med filändelsen.class och det är denna fil som sedan interpreteras av Java Virtual Machine. Versioner av Java Versionerna av Java styrs av den s.k. Java Development Kit (JDK) som Sun släpper vid varje ny version av Java. I JDK finns en Java Virtual Machine, Java-kompilator och samtliga standardbibliotek för Java. JDK är gratis och kan laddas ner över nätet. Språkändringar (=språktillägg) har varit små mellan olika versioner. Däremot har en hel del utökningar och ändringar skett i klassbiblioteken (även kallade Java API:er eller Javapaket). Det finns vissa språkliga inkompatibiliteter, dvs. ändringar som gör att program skrivna i en tidigare Java-version inte går att köra i en nyare Java-miljö. Dessa språkinkompatibiliteter beror enligt dokumentationen på att man velat täppa till säkerhetsluckor.

Att komma igång med Java Källkodsformat Enligt javadefinitionen så ska Unicode användas för Java-källkod, vilket innebär att nationella tecken som å, ä och ö kan användas. Java kontra Javascript JavaScript har inte mycket med språket Java att göra. JavaScript är ett scriptspråk som utvecklats av Netscape för att enkelt kunna lägga in enkla skript direkt i en HTML-sida. Viss syntax från Java har använts i JavaScript. Javafiler Java har en enkel filstruktur. Endast två typer av filer finns: ".java" och ".class"..java En källkodsfil som innehåller en Javaklass måste ha samma namn som klassen följt av suffixet ".java". Normalt innehåller en källkodsfil endast en klass (undantaget är s.k. inre klasser, något vi kommer att komma in på senare)..class När en källkodsfil (.java ) kompileras skapas en fil innehållande bytekod vilken får samma namn som källkodsfilen, men med suffixet ".class". Länkning Någon länkning sker aldrig i Java varför inga särskilda filer behövs för det. Istället läses klasser in dynamiskt vid exekveringen, och av den anledningen är det viktigt att ".class"- filerna har samma namn som klassen de innehåller så att JVM kan hitta klasserna under exekveringen. Olika utvecklingsmiljöer skapar dock andra typer av filer, t.ex. för att hålla reda på olika projekt, debuginformation etc. Om ni går in och tittar närmare i någon av mapparna med BlueJ-projekt som medföljer boken ser ni en rad olika filer. Det finns.java filer och i vissa fall även.class filer (om projektet kompilerats) men även en rad andra filer med andra filändelser. Det är projektfiler, specifika för BlueJ-miljön.

Modularisering och katalogstruktur Man har i Java två begrepp när det gäller att gruppera källkod i moduler. Del är det klassbegreppet och dels paketbegreppet. Ett paket grupperar ett antal klasser, och ligger således på en högre nivå än klassen. Klassnamn En javafil döps alltid till samma namn som klassen den innehåller. Om klassen i javafilen heter MinKlass ska filen alltså heta MinKlass.java. En klass med namnet MinKlass.java kompileras alltid till en fil med namnet MinKlass.class. Paketnamn På motsvarande sätt används paketnamnet för att namnge filkatalogen som innehåller filerna i paketet ifråga. Dvs. paketmekanismen styr hur koden lagras i olika kataloger i filsystemet. Paketnamnet kan bestå av flera delar åtskilda av punkt. Man kan på det sättet skapa en hierarki av paket vilken i filsystemet motsvaras av en hierarki av kataloger. På detta sätt får man möjlighet att dela upp en applikation i delsystem. Filer kan ligga på vilken nivå som helst i hierarkin. Exempel: Klassen java.awt.button ligger i katalogen <java-directory>/java/awt/ i en fil med namnet Button.class. Ett paket definierar en egen namnrymd. Dvs. samma namn på klasser, metoder och fält kan återanvändas i olika paket utan att konflikt uppstår. Källkodsfiler ".java" och bytekodsfiler ".class" lagras normalt i samma katalog. Miljövariabeln CLASSPATH används för att tala om för Java Virtual Machine var ens egna ".class"-filer ligger. Om ingen paket-deklaration görs så kommer klassen i filen att hamna i ett paket utan namn. En sådan klass är typiskt en klass som är helt applikationsspecifik och endast ingår i den applikation där den är definierad. I övningarna och laborationerna i denna kurs kommer vi inte att skapa egna paket, utan klasserna ni skapar kommer att tillhöra sådana namnlösa paket.

Kodningskonventioner Vi kommer att tillämpa de kodkonventioner, Code Conventions for the JavaTM Programming Language, som finns på Suns hemsida: http://java.sun.com/docs/codeconv/html/codeconvtoc.doc.html Klassnamn och interface ska alltid inledas med versal. Exempel: MinKlassSak Metoder ska vara verb med gemen första bokstav. Inom namn används versal för att skilja på ord. Exempel: dosomethingwiththisthing Konstanter ska vara enbart versaler. Exempel: SIZE, NUMBEROFTHINGS Variabler har gemen första bokstav. Variabler bestående av flera ord kapitaliserar första bokstaven i varje ord precis som för metoder. Exempel: MinKlassSak mittlillaobjekt Använd alltid {} där sammansatta satser kan skrivas. (För alla C++ programmerare är detta knappast nödvändigt, men Javas konvention är sådan.) Exempel: if ( a.test( ) ) { a.miffo( ); } Bara en javasats per källkodsrad. Applikationer och applets I Java kan man skriva program av två olika typer, dels Java-applikationer och dels Javaapplets. Java-applikationer exekverar som fristående program, medan Java-applets exekveras från ett annat program (normalt en webbläsare). Vi kommer att börja med att skriva applikationer. Applets kommer att introduceras i senare moduler. Java-applikationer och main-metoden Det som särskiljer en Java-applikation ifrån en Java-applet är att Java-applikationen alltid innehåller en main-metod i den "huvudklass" som man startar applikationen med. Programexemplen nedan visar en jämförelse mellan C++ och en Java-applikation och innehåller definitionen av main metoderna. Hur en Java-applikation kompileras och körs går vi igenom i kompendiet Att kompilera Javafiler.

//Hello World skriven i C++ #include <iostream.h> void main(void) { cout << Hello, World << endl; } //Hello World skriven i Java import java.io.*; class HelloWorld { public static void main(string[] args) { System.out.println("Hello World!"); //Display the string. } } Signaturen för main-metoden innehåller tre modifierare: public indikerar att metoden kan anropas från vilket objekt som helst static indikerar att metoden är en s.k. klass-metod void indikerar att metoden inte returnerar något värde Main-metoden accepterar ett argument vilket är en array med element av typen String. Om man vid start av programmet skriver in några argument efter klass-namnet så läggs varje sådant argument in i ett element i arrayen args. Utvecklingsmiljöer för Java Den grundläggande utvecklingsmiljön för Java är Java Development Kit (SDK) från JavaSoft. SDK utgör en referens för Java, dvs. SDK bestämmer vad som är "standard Java". SDK är en kommandoradsbaserad miljö. SDK kan laddas ner gratis från java.sun.com och innehåller: Java kompilator Java Virtual Machine (JVM) Java klassbibliotek Java AppletViewer Java Debugger och andra verktyg Dokumentation (laddas separat) Java SDK finns också på CDn som medföljer kursboken.

Kommandot för att kompilera fil innehållande en klass: >javac <filnamn>.java (filnamn = namnet för klassen som filen innehåller) Kommandot för att starta JVM och exekvera ett program: >java <klassnamn> (klassnamn för klassen med main-metoden; inget suffix)