• No results found

Denna föreläsning

N/A
N/A
Protected

Academic year: 2021

Share "Denna föreläsning"

Copied!
37
0
0

Loading.... (view fulltext now)

Full text

(1)

Denna föreläsning

• Allmänt om Java

• Javas datatyper, arrayer, referenssemantik

• Klasser

• Strängar

Objectorienterad programmering

(2)

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,

• (Storlek och pålitlighet var viktiga)

• Med WWW fick projektet en annan inriktning

• Java blev ett programspråk för web-applikationer

(3)

(Man brukar säga att) Java är...

• enkelt

• “baserat på C/C++”

• objekt-orienterat “från början”

• dynamiskt utbyggbart

• robust, säkert

• oberoende av hårdvaruarkitektur (portabelt)

• web-anpassat: applets, div bibliotek

Objectorienterad programmering

(4)

Kompilering av Java

• Traditionella kompilatorer översätter programte till maskinkod.

• De flesta Java-kompilatorer översätter till en maskinkod; Javabytekod (JVM).

• Det finns inga maskiner som kör Javabytek nästan inga).

• Därför måste JVM-koden vid körning antingen – översättas till maskinkod, eller

– interpreteras.

(5)

Utvecklingsverktyg för Java

• Senaste versioner är – J2SE 1.4.2 samt – J2SE 5.0

• J2SE 5.0 (även känt som Java 1.5) innehåller utökningar, inte helt bakåtkompatibelt.

• Vi fokuserar på Java 5.

Objectorienterad programmering

(6)

On-line dokumentation

• När man arbetar med Java behöver man dokumentation av alla standardklasser.

http://java.sun.com/j2se/1.5.0/docs/api

• Suns tutorial

http://java.sun.com/docs/books/tutorial

(7)

Verktyg

Arbetsgången är:

• man redigerar sina filer (klasser) med något redigeringsverktyg (tex Emacs),

• kompilerar dem med javac och

• kör den med java (applikationer) eller appletvie

Objectorienterad programmering

(8)

Verktyg (forts)

• Applets kan också visas i webbläsare som Explorer, Netscape eller Mozilla.

• Kompilator, interpretator och appletviewer star – från ett terminalfönster (Unix) eller

– från ett MS-DOS-fönster (Windows).

• Om filen heter MinTest.java skriver man alltså:

javac MinTest.java java MinTest

(9)

Ett första exempel

• Klassen Hej implementerar ett klassiskt exempel:

applikation som skriver ut ett meddelande.

• Filen ska heta Hej.java, samma namn som

• public class Hej {

public static void main(String[] args) { System.out.println("Hej hopp");

} }

Objectorienterad programmering

(10)

Enkelt exempel (testkörning–Unix)

harpo$ javac Hej.java harpo$ java Hej

Hej hopp harpo$

harpo$ java -Djava.compiler=NONE Hej Hej hopp

(11)

Datatyper i Java: Tre slag

• Primitiva: Sanningsvärden, tecken, heltal, flyttal stycken)

• Arrayer (nästan inte alls som i C)

• Objekt

Objectorienterad programmering Sida

(12)

De åtta primitiva typerna

Typ Innehåll Defaultvärde Storlek boolean true, false false 1 bit

char Tecken \u000 16 bit

byte Heltal 0 8 bit

short Heltal 0 16 bit

int Heltal 0 32 bit

long Heltal 0 64 bit

float Flyttal 0

.0 32 bit

double Flyttal 0

.0 64 bit

(13)

Typen boolean

1. representerar ett sanningsvärde 2. genereras av relationsoperatorer

(tex ==, <)

3. if och while-satser kräver att alla sanningsvärden representeras som boolean

Objectorienterad programmering Sida

(14)

Typen char

Ett tecken i Unicode.

16 bitar.

Unicode omfattar alla levande och utdöda språk.

Hur får dessa plats i 16 bitar?

(15)

Typkonvertering heltal & flyttal

• Ett tal kan automatiskt omvandlas till ett tal vidare representation.

(Exempel: int->long, int->double, float->doub

Ett heltal kan omvandlas till en mindre representation via en uttrycklig omvandling,

• Aritmetiska operatorer (tex +) returnerar alltid värde av type int eller long.

b = b + 1 är ej korrekt om b är en byte.

Objectorienterad programmering Sida

(16)

Arrayer i Java: Inte som i C

• arrayer skapas explicit

• storlek anges dynamiskt

• index testas

int[] a = new int [10];

a[-1] och a[10] ger felmeddelande!

• inititiering

int[] a = {1, 2, 3};

men även

int[] a = {1, n+1, 2*n, n*n};

(17)

Inte som i C (forts)

• Tilldelning

int[] a = new int [10]; int[] b = a;

a och b refererar till samma array!

• Storlek på array ges av .length.

int[] a = new int[10];

int x = a.length;

a = new int[100];

int y = a.length;

Objectorienterad programmering Sida

(18)

Inte som i C (forts)

• “null” står för ingen array.

int[] a = null;

betyder samma sak som int[] a;

(19)

Exempel: Byt värde på två array-variab

static void main (String args[]) { int[] a = {1,2,3};

int[] b = {99, 98, 97, 93, 92, 91};

int[] temp;

temp = a;

a = b;

b = temp;

System.out.println("b[0] = " + b[0]);

}

Objectorienterad programmering Sida

(20)

Lite om strängar

• I Java är strängar objekt av en speciell klass inte en primitiv datatyp och inte heller en arr

• Tecknen i en sträng är av “char”-typ, dvs Unicode-tecken.

• Objekt av typ String är konstanta—man kan

ändra i en sträng. (Det finns en klass StringBuff som tillåter ändringar.)

• Man kan skapa ett nytt sträng-objekt med syntax

"En sträng".

(21)

Strängar (forts)

• Strängar slås ihop (konkateneras) med “+”.

Om a och b är strängar så returnerar uttryc a + b

en ny sträng som är konkateneringen av a

• Om det ena argumentet till + är ett String-objekt, omvandlas det andra till en sträng.

• Exempel:

int x = 42;

System.out.println("Shoesize: " + x);

Resultat: “Shoesize: 42”.

Objectorienterad programmering Sida

(22)

Strängar, jämförelse

• Notera att två strängar kan ha samma innehåll att vara identiska.

• Operatorn == testar om två referenser är till objekt.

• För att testa om två strängar har samma innehåll, skriv (tex)

s1.equals(s2)

(23)

Vad är en klass?

• En klass är ett sätt att beskriva en mängd objekt deras gemensamma egenskaper.

• En klassdefinition innehåller datafält ...

• ... och metoder (= “funktioner” i C).

• Man kan också säga: En klassdefinition beskr kod och data.

• Ett Javaprogram består av en eller flera klassdefinitioner (och ingenting kan finnas klassdefinition).

Objectorienterad programmering Sida

(24)

Klasser och objekt

• Varje objekt tillhör en viss klass. (Objektets detsamma som objektets typ.)

Vi säger att objektet är en instans av klassen.

• Alla objekt av en viss klass kan användas på sätt–de har samma “gränssnitt”.

• En definition av en viss klass kan ses som objekt av den typen.

(25)

Klassdefinition: Exempel class Person {

int ålder;

String namn;

}

• Konvention: Namnet på en klass skrivs med bokstav.

’namn’ och ’ålder’ är fält i objekt av typen P

• Skansholm: instansvariabler

• Engelska: field

Objectorienterad programmering Sida

(26)

Klassdefinition: Körexempel

Person x;

x = new Person ();

x.ålder = 42;

x.namn = "Kalle Karlsson";

System.out.println(

"Personen " + x.namn + " är " + x.ålder + " år gammal");

(27)

Referensvariabler och referenssemantik

Person x;

Person y;

x = new Person ();

y = x;

x.ålder = 42;

x.namn = "Kalle Karlsson";

Vilken ålder har y?

Objectorienterad programmering Sida

(28)

Referensvariabler och

referenssemantik(forts)

• Givet en klassdefinition class X { ... }

• och en variabeldeklaration X a;

Variabeln a lagrar en referens.

(29)

Referensvariabler (forts)

• Exempel:

X a, b;

a = new X();

b = a;

• Nu refererar a och b till samma objekt.

Objectorienterad programmering Sida

(30)

Referensvariabel, regel

Variabler av klasstyp har referenssemantik.

• Nya objekt skapas med new.

• Tilldelning kopierar referensen, inte objektet.

(31)

Metoder

public class Person { int age;

void incrementAge() { age = age + 1;

} }

En klassdefinition även innehålla definitioner av Liknar funktioner i C, men en metod kan referer objektets instansvariabler.

Objectorienterad programmering Sida

(32)

Referensvariabler i metodanrop

• Med en metoddefinition void f(X c) { ... }

och ett anrop f(a)

kommer variabeln c inom metodkroppen att till samma objekt som a

Regel: Objekt kopieras aldrig (om man inte uttryckligen om det).

(33)

Konstruktorer: Att skapa nya objekt

Exempel:

class Person { [...]

Person (String n, int å) { ålder = å;

namn = n;

} }

Skapa en ny person:

Person x = new Person("Kalle", 42);

Objectorienterad programmering Sida

(34)

Konstruktorer (forts)

• En konstruktor har alltid samma namn som

• En konstruktor deklareras utan resultattyp (inte void)

• En konstruktor ska initialisera objektets fält (instansvariabler)

• Om en klass inte har någon konstruktor, kommer Javakompilatorn att definiera en parameter

konstruktor (defaultkonstruktorn)

(35)

Namns räckvidd

• Instansvariabler och metoder kan kommas inom hela den egna klassen

• Namn på lokala variabler inom ett block (metodkropp) kan bara kommas åt inom blocket (metodkroppen).

• Om samma namn används för flera olika sak den användning som är "närmast".

• Instansvariabler och metoder kan alltid kommas med this:

this.namn ger instansvariabeln i nuvarande även om namn har andra betydelser.

Objectorienterad programmering Sida

(36)

Referenssemantik, repetition

Vad händer om. . .

• man tilldelar två variabler samma objekt?

K x = new K();

K y = x;

• passar ett objekt som parameter?

void m(K x) { ... } K y = new K();

m(y);

(37)

Referenssemantik (forts)

• en metod returnerar ett objekt?

K m() {

K x = new K();

return x;

}

• om variabeln redan är bunden?

K x = new K();

K y = new K();

y = x;

Objectorienterad programmering Sida

References

Related documents

Här förtecknas skyddsanordningar för permanent bruk, förutom broräcken, som enligt Trafikverkets bedömning uppfyller trafiksäkerhetskrav för användning på det allmänna

För sex månader sedan beslutade så CST-JBE att de ville satsa på en ny fackklubb där och utsåg två personer till det arbetet, en av dem var Damaris.. Damaris, som trots att hon

48 Dock betonade Tallvid att datorn innebar en ökad motivation hos eleverna något som återspeglats i deras akademiska prestationer i skolan, även hos elever som tidigare

Kamrater, detta var en mycket viktig seger inte främst för oss, men en seger för alla som vill kämpa för och slå vakt om en generell välfårdsmodell.. Bättre

I pilotstudien är detta tema och det samspel mellan personal och närstående det beskriver en förutsättning för att personalen skall kunna skapa sig en bild av patienten

(nerifrån och upp i denna bild) Elephants And Donkeys Have Big Ears Ellen Ankom (till) Doris Gata Bakom

Resultatet indikerar på att förskollärarnas gemensamma åsikt är att pedagogisk dokumentation har vidgat och underlättat helhetssynen för att utveckla och

137 Clementi, s.. henne”, skriver Dahlerup. 139 Detta antyder alltså att det kan vara olika språkliga traditioner som avgör vilken retorik som lämpar sig