Lecture overview -- Keyboard shortcut: 'u'  Previous page: Procedurer og parametermekanismer i Java -- Keyboard shortcut: 'p'  Next page: Udtryk og operatorer i Java [Section] -- Keyboard shortcut: 'n'  Lecture notes - all slides and notes together  slide -- Keyboard shortcut: 't'  Help page about these notes  Alphabetic index  Course home  Play sound for this page -- Keyboard shortcut: 'y'  Page 27 : 39
Forelæsningsnoter i Objekt-orienteret Programmering
De ikke objekt-orienterede dele af Java
Parametermekanismer i Java

Parametermekanismer er en helt naturlig fortsættelse af historien om procedurebegrebet i Java

Alle parametre i Java overføres som værdiparametre

Variableparametre understøttes ikke af Java

Java er, overfladisk set, enkel hvad angår parametermekanismer. Alle parametre er værdiparametre. Vi bliver dog nødt til at nuancere synet på dette en smule. Mere konkret bliver vi nødt til at skelne mellem hvad det vil sige at parameteroverføre værdier af primitive typer, og objekter af klasse typer

En aktuel værdiparameter kopieres, og kopien bindes til det formelle parameternavn. Den aktuelle parameter kan ikke ændres ved assignment til den formelle parameter

Vi definerer her værdiparameter begrebet. Dette parameteroverførselsbegreb involverer kopieringen samt den deraf følgende beskyttelse af den aktuelle parameter

  • Parameteroverførsel af objekter (instanser af klasser):

    • Objekter tilgås altid via en reference

    • Referencen overføres som en værdiparameter

      • Referencen kopieres

      • Objektet kopieres ikke

    • Via en formel parameter kan vi derfor ændre på et parameteroverført objekt

    • Vi kan derimod ikke ændre på referencen til objektet via den formelle parameter

Værdier af primitive typer overføres som værdiparametre.

Objekter af klassetyper overføres som referenceparametre.

Dette udsagn er nok mere reelt end det første og øverste udsagn: 'Konsekvent anvendelse af værdiparametre'. Når vi taler om 'reference parametre', 'pass by reference' eller 'call by reference' er det dog vigtigt at understrege, at der ikke er tale om variabelparametre ala Pascal's. Vi hentyder derimod til overførsel af objekternes referencer som værdiparametre, i den forstand vi diskuterede ovenfor.

Det er ikke muligt at overføre procedurer som parametre i Java. Men da procedurer er en del af et objekter, kan vi let omgå denne tilsyneladende begrænsning. Dette er en lidt mere avanceret observation. Som nogle nok er klar over, kan vi overføre procedurer som parametre i Pascal, og i mange andre sprog. I Java kan vi ikke direkte overføre en procedure P som parametre til procedurer, men vi kan overfører et objekt O, hvori P er en metode. Dette er næsten lige så godt, og i nogle situationer endog bedre, fordi P medbringer 'en kontekst', nemlig objektet og det's tilstand. Notationsmæssigt er det dog tungt og ofte akavet at skulle indlejre en procedure i en klasse, for at kunne overføre den som parameter.