Java objekter først

sharepoint.vucsv.dk

Java objekter først

Javaobjekter først med Java. Kapitel 1. Steen Nielsen, VUC Viborg

Java-forløb: begreberne objekt, klasse, instans, metode, signatur, parameter, type, tilstand,

kildekode, returværdi, kompiler.

I finder programmet BlueJ i mappen datalogi

I finder eksempelfilerne på elevdrevet i mappen L:\SN datalogi\Java. Kopier indholdet af denne

mappe til din Dokumenter-mappe.

Åbn BlueJ og Åbn i \projects\chapter01\shapes:

Klik på Open og BlueJ ser således ud:

Side 1 af 7


Javaobjekter først med Java. Kapitel 1. Steen Nielsen, VUC Viborg

I det følgende vil du lære om følgende centrale begreber: klasser, objekter, oprettelse af objekter,

kald af metoder, parametre og datatyper. Noget af dette er kendt stof fra JavaScript (men ikke alt).

Først vil se på et centralt begreb i Java-programmering, nemlig Klasser og Objekter.

Lav alle øvelserne og læg svarene ind i Fronter.

Klasser og objekter

Et computerprogram kan siges at være en model af en del af virkeligheden. Modellen må så bestå af

objekterne fra problemområdet, dvs. disse objekter må være repræsenteret i computermodellen.

Objekterne kan tilhøre forskellige kategorier og en Klasse kan siges at beskrive alle objekter af en

bestemt slags.

Et eksempel: vi vil lave et program der simulerer trafik En sådan model må begribeligt nok operere

med biler. Hvad er da en bil i denne sammenhæng: en klasse eller et objekt?

Da vi ikke kan svare på fx ”Hvor er bilen” og ”hvor hurtigt kører den” og ”hvad farve har den” må

bilen være en klasse. Klassen bil er biler generelt og ikke en bestemt bil.

En bestemt bil er derimod et objekt. Så kan vi sige at bilen er min, at den er rød og er punkteret

hjemme i garagen.

Vi siger også at et objekt er en instans at en bestemt klasse. Den røde bil er altså en instans af

klassen Bil.

For at skelne mellem klasser og objekter skriver vi klasser med stort begyndelsesbogstav og

objekter med småt. ”Bil” er da en klasse og ”bil3” er et objekt.

Om at oprette objekter.

Når vi har en klasse kan vi oprette objekter. Nu skal vi bruge BlueJ og det projekt, vi åbnede for lidt

siden (Shapes). Her ser vi i BlueJ 4 klasser: Canvas, Circle, Square og Triangle. Vi vil nu prøve at

oprette objekter fra disse klasser:

Højreklik på Circle og vælg ”new Circle()” fra popup-menuen. BlueJ spørger om ”name of the

instance”. Du kan blot acceptere forslaget circle1. Så skal skærmen se således ud:

Side 2 af 7


Javaobjekter først med Java. Kapitel 1. Steen Nielsen, VUC Viborg

Øvelse: Opret endnu en cirkel og en firkant (Square).

Om at kalde metoder

Højreklik nu på et af cirkel-objekterne (de røde objekter - IKKE klassen) og der fremkommer en

popup-menu med adskillige muligheder.

Vælg ”makeVisible” fra menuen. Derved åbnes et separat vindue og cirklen bliver synlig.

Afprøv metoderne moveRight og MoveDown og prøv også makeInvisible og makeVisible.

Øvelse: Hvad sker der, hvis du kalder ”moveDown” to gange? Eller tre gange? Hvad sker der, hvis

du vælger ”makeInvisible” to gange?

Parametre

Afprøv nu ”moveHorizontal” metoden. Der fremkommer så en dialogboks, der beder om en

indtastning:

Side 3 af 7


Javaobjekter først med Java. Kapitel 1. Steen Nielsen, VUC Viborg

Indtast værdien 50 og klik OK. Cirklen bevæger sig så 50 pixels til højre. (en pixel er et punkt på

skærmen der fx kan bestå af 800 X 600 punkter)

Øvelse: Afprøv ”moveVertical”, ”slowMoveVertical” og ”changeSize” metoderne. Find ud af,

hvordan du kan anvende ”moveHorizontal” til at bevæge cirklen 70 pixels til venstre.

De ekstra værdier, som visse metoder kræver, kaldes parametre. En metode viser, hvilken type

parametre, der kræves. Når fx metoden ”moveHorizontal” kaldes, så vises linien:

void moveHorizontal(int distance)

Dette kaldes metodens signatur (hele linien). Signaturen giver information om metoden: (int

distance) giver information om den krævede parameter. Int fortæller om datatypen og distance er

navnet på parameteren. Navnet distance giver en idé om betydningen af parameteren.

Datatyper

En datatype specificerer hvilken slags data, der kan sendes som parameter. Typen ”int” betyder et

helt tal (forkortelse for engelsk: integer).

At datatyper er specificeret er en klar forskel til JavaScript, hvor vi ikke angiver datatypen, men det

gør vi altså i Java.

Kig på objekternes metoder og læg mærke til, at parentesen efter metoden er tom, når der ikke kan

angives parametre. En enkelt metode skiller sig ud, nemlig metoden ”changeColor”. Her angives

datatypen til String. String betyder tekststreng (fx et ord eller en sætning) og tekststrenge skal altid

sættes i anførselstegn. Fx kan man angive ordet red som en String ved at skrive:

”red”

I kommentaren oven over metoden kan man se, hvilke værdier der kan anvendes til at skifte farve.

Øvelse: Afprøv ”changeColor” metoden og giv cirklerne forskellige farver.

Øvelse: Afprøv hvad der sker, hvis du angiver en ukendt farve, der ikke er angivet i kommentaren.

Øvelse: Afprøv ”changeColor” metoden uden at angive anførselstegnene. Hvad sker der?

Mange instanser

Øvelse: Prøv at oprette mange instanser af klasserne Circle, Square og Triangle. Prøv at flytte

omkring med dem og ændre deres farve og størrelse.

Når du har en klasse kan du oprette så mange instanser af klassen (dvs. objekter) som det skal være.

Hvert eneste af disse objekter har sin egen position, farve og størrelse.

Bemærk i øvrigt changeSize metoden for triangelen. Dens signatur er

Side 4 af 7


Javaobjekter først med Java. Kapitel 1. Steen Nielsen, VUC Viborg

void changeSize (int newHeight, int newWidth)

Dette er et eksempel på en metode med mere end én parameter. Metoden har to og et komma

adskiller dem i signaturen. En metode kan have et hvilken som helst antal parametre.

Tilstand

Alle værdierne af de attributter (eller egenskaber), der definerer et objekt (fx x-position, y-position,

farve, diameter, synlighed osv.) kaldes også objektets tilstand.

I BlueJ kan et objekts tilstand inspiceres ved at vælge Inspect-funktionen fra objektets popup-menu.

Følgende vindue dukker op (kaldes for objekt-inspector):

Øvelse: Du skal have flere objekter oprettet. Prøv da at ændre et objekts tilstand (fx ved at kalde

moveLeft-metoden) mens objekt inspektoren er åben. Du skal da kunne se, hvordan værdierne

ændres.

Nogle metoder ændrer objektets tilstand, når de kaldes. Fx ændrer moveLeft attributten x-position.

Disse objekt-attributter kaldes i Java også felter (på ”Java’sk”: fields).

Et objekt af samme klasse har de samme felter. Dvs. antallet, typen og navnene på felterne er de

samme, mens felternes værdier kan være forskellige.

Objekter af forskellige klasser kan have forskellige felter. Fx har cirklen feltet ”diameter”, mens

trekanten har felterne ”width” og ”height”.

Øvelse: Brug formerne cirkel, firkant og trekant til at tegne et hus med et vindue, et skråt tag og en

sol. Hvad skal der til, for at det kan lade sig gøre (notér hvad du gør, for at ”tegne” billedet). Kunne

det mon gøres anderledes?

Samspil mellem objekter

Luk ”Shapes”-projektet i BlueJ og åbn i stedet projektet ”picture”.

Øvelse: Opret en instans af klassen Picture og kald dens ”draw”-metode. Prøv også objektets

setBlackAndWhite og setColor-metoder.

Side 5 af 7


Javaobjekter først med Java. Kapitel 1. Steen Nielsen, VUC Viborg

Øvelse: Hvordan tror du Picture-klassen tegner dette billede?

De fire af klasser er ligesom i Shapes-projektet. Eneste forskel er, at vi nu har Picture-klassen.

Denne klasse er programmeret til at gøre det, som vi gjorde i hånden i øvelsen før. Picture-klassen

er skrevet således, at den opretter de nødvendige objekter og flytter rundt på dem, indtil vi har det

billede, vi ser.

Det væsentlige at forstå her er, at objekter kan oprette andre objekter og de kan kalde hinandens

metoder. I et almindeligt Java-program kan der være hundredvis eller tusindvis af objekter. Når

brugeren starter programmet oprettes typisk det første objekt og alle andre objekter er så oprettet

direkte eller indirekte fra dette objekt.

Kildekode

Kildekoden er tekst, skrevet i Java programmeringssproget. Den definerer, hvilke felter og metoder,

en klasse har og hvad der sker, når en metode bliver kaldt.

En væsentlig del af programmeringen i Java handler om at lære, hvordan man selv skriver nye

klasser.

Når man ændrer i kildekoden bliver ikonet for klassen stribet. Dermed kan man se, at der er ændret i

kildekoden og klassen skal nu kompileres for at ændringerne bliver effektueret.

At kompilere vil sige at oversætte kildekoden til maskinkode (her kaldet Java Byte Code), som

Java-fortolkeren så arbejder med.

Øvelse: Find i Picture-klassen der hvor solen tegnes gul og lav det om så solen bliver blå.

Øvelse: Prøv at få Picture-klassen til at tegne to sole.

Øvelse (småvanskelig): Prøv at få solen til at gå ned. Brug metoden slowMoveVertical. Få din sol

nummer 2 til at gå ned.

Øvelse: (småvanskelig): Du har sikkert fået solen til at gå ned når billedet er tegnet. (altså

umiddelbart efter). Hvis det er tilfældet, så lav det om således at man først ser billedet med solen

uden bevægelse, men med mulighed for at kalde en metode (der fx kunne hedde solNedgang), som

får solen til at gå ned.

LabClass-eksemplet

Luk Picture-projektet og åbn Lab-classes-projektet. Dette projekt holder styr på hvilke studenter,

der er i hvilke lokaler og kan printe klasse-lister.

Øvelse: Opret et objekt af klassen Student (husk at parametre af typen String skal sættes i

anførselstegn)

Returværdier

Side 6 af 7


Javaobjekter først med Java. Kapitel 1. Steen Nielsen, VUC Viborg

Øvelse: Opret en række Student-objekter. Kald metoden getName. Forklar, hvad der sker.

Metoden getName rummer noget nyt: metodens signatur ser således ud:

String getName()

Ordet String før metodenavnet angiver returværdien. I dette tilfælde angiver det, at et kald af denne

metode vil returnere en værdi at typen String. Signaturen for metoden changeName siger:

void changeName(String)

og ordet void (på engelsk egl. tomrum) betyder, at denne metode ikke returnerer noget.

Når en metode har en returværdi, kan vi ved at kalde dem skaffe os oplysninger om objekterne.

Vi kan altså både kalde metoder, der ændrer et objekts tilstand og metoder, der aflæser dets tilstand.

Objekter som parametre

Øvelse: Opret et objekt at klassen LabClass. Som signaturen indikerer, skal du angive det

maksimale antal studenter i denne klasse (et hel-tal).

Øvelse: Kald metoden numberOfStudents. Hvad gør denne metode?

Øvelse: Se på signaturen for metoden enrollStudent. Læg mærke til, at den forventede type af

parameteren er Student. Check at du har mindst to eller tre Student-objekter og et LabClass

objekt oprettet. Kald så metoden enrollStudent. Check at cursoren befinder sig i indtast-feltet og

klik så på et at Student-objekterne. Således udfylder du Student-objektet i parameterfeltet. Klik OK

og du har nu tilføjet en student til dit klasseværelse. Tilføj flere studenter.

Øvelse: Kald metoden printList fra LabClass-objektet.

Øvelserne viser, at objekter kan sendes som parametre via andre objekters metoder. I metodens

signatur er parametertypen i disse tilfælde angivet til objektets klassenavn. (fx. Student).

Side 7 af 7