4 minute read

4.1 Klasser og objekter

Next Article
Sammendrag

Sammendrag

Objektorientert programmering 4

KOMPETANSEMÅL

I dette kapittelet skal du jobbe for å nå disse målene: в utvikle objektorienterte programmer med klasser, objekter, metoder og arv в anvende objektorientert modellering til å beskrive et programs struktur

4.1 Klasser og objekter

I programmeringen vi har drevet med hittil, har vi behandlet data og funksjoner som to atskilte konsepter: Variabler inneholder data, og funksjoner kan ta inn og returnere data. I dette kapittelet skal vi lære å lage egne datatyper som lagrer verdier, og som har innebygde funksjoner. Dette kalles for objektorientert programmering. En klasse er en oppskrift, eller mal, som beskriver hvordan datamaskinen skal lage en spesifikk datatype. En variabel som er opprettet med utgangspunkt i en klasse, kaller vi for et objekt.

Nedenfor ser du filen _hund.js. Den inneholder en klasse vi har gitt navnet Hund. Fordi det står export foran den, kan den importeres til andre filer.

1 // _hund.js 2 export class Hund { 3 constructor(navn) { 4 this.navn = navn

5 } 6 }

Vi importerer klassen Hund til filen hund-test.svelte og oppretter et objekt av Hund som lagrer navnet til hunden Fido.

Tegning av et hus og et ferdigbygd hus. En klasse kan sammenlignes med tegningen og et objekt med huset.

1 <!-- hund-test.svelte --> 2 <script> 3 import { Hund } from "./_hund.js"

4

5 let hundeobjekt = new Hund("Fido") 6 </script>

7 8 <h1>Flink bisk, {hundeobjekt.navn}!</h1>

Når vi starter en linje med class, forteller vi datamaskinen at det som kommer mellom de påfølgende krøllparentesene, er en klassedefinisjon. Før krøllparentesene kommer klassens navn, i dette tilfellet Hund. Vi skriver klassens navn med stor forbokstav for å skille klasser fra vanlige variabler og funksjoner.

Klasser

En klasse er oppskriften på et objekt. Vi definerer en klasse slik:

1 class Klassenavn { 2 constructor(parameter1, parameter2) { 3 this.felt1 = parameter1 4 this.felt2 = parameter2

5 } 6 }

Et objekt som tilhører en viss klasse, kalles for et objekt av klassen Klassenavn.

I klassedefinisjonen oppretter vi metoder, som er objektenes innebygde funksjoner. I klassedefinisjonen for klassen Hund hadde vi bare én metode, og det var den såkalte konstruktøren, som alltid heter constructor.

De spesifikke verdiene vi gir til parametere når vi kaller på en klasse, kalles argumenter: Jobben til konstruktøren er å lagre de dataene som metoden får gjennom parameterne sine, på riktig sted i objektet. Disse stedene kalles felter (fields på engelsk). Vi legger en verdi i et felt ved å skrive this.feltnavn = verdi. Konstruktøren til Hund har én parameter, navn. Konstruktøren plasserer verdien i et felt som også heter navn.

I linje 5 i programmet på forrige side oppretter vi et nytt objekt. I denne linjen får vi datamaskinen til å gjøre tre ting:

• • let hundeobjekt får datamaskinen til å opprette variabelen hundeobjekt. new Hund("Fido") får datamaskinen til å kalle på konstruktøren som ligger i klassen Hund med argumentet "Fido" for parameteren navn. Når vi kaller på konstruktøren til en klasse, må vi skrive new og deretter navnet til klassen. • Likhetstegnet = får datamaskinen til å lagre resultatet av koden på høyre side i en variabel med navnet hundeobjekt.

Metoder og konstruktøren

Alle klasser inneholder metoden som kalles konstruktøren. Konstruktørmetoden heter alltid constructor. Vi bruker konstruktøren når vi oppretter et objekt av en klasse. Jobben til konstruktøren er å lagre dataene vi gir den, i riktige felter. For å kalle på konstruktøren skriver vi new fulgt av klassenavnet til konstruktøren og parenteser. Mellom parentesene skriver vi verdiene vi vil kalle på klassen med:

new Klassenavn(argument1, argument2, …)

I HTML-delen av koden kan vi hente ut og vise frem verdien til feltet navn i

hundeobjekt ved å skrive hundeobjekt.navn.

Felter

Et felt er et sted i et objekt der data lagres. Vi oppretter feltene når vi definerer konstruktør-metoden. For å opprette et felt skriver vi

this.feltnavn = verdi.

Når vi har opprettet et objekt og lagret det i en variabel, får vi tilgang til dataene som er lagret i et av objektets felter, ved å skrive

variabelnavn.feltnavn.

EKSEMPEL

Objekt med flere felter

Nedenfor har vi definert en klasse som heter Sirkel. Konstruktørmetoden tar inn radiusen som parameter. Konstruktøren bruker radiusen til å regne ut arealet og omkretsen til sirkelen før den lagrer disse verdiene i felter.

1 <script> 2 class Sirkel {

3 constructor(radius) {

4 this.radius = radius

5 this.omkrets = 2 * Math.PI * radius

6 this.areal = Math.PI * radius * radius

7 8 } 9 10 let minSirkel = new Sirkel(10) 11 </script>

12 13 <div> 14 Vi har en sirkel med radius {minSirkel.radius}. <br /> 15 Arealet av sirkelen er {minSirkel.areal}. <br /> 16 Omkretsen av sirkelen er {minSirkel.omkrets}. 17 </div>

A = πr2 O = 2πr

r

This article is from: