Præsentation er lastning. Vent venligst

Præsentation er lastning. Vent venligst

I o p o DAIMI, AU, September 1999Introducerende objektorienteret programmering5C.1 Virkefeltsregler i Java int i; int j; int k; i = i+j; String t; Sequence.

Lignende præsentationer


Præsentationer af emnet: "I o p o DAIMI, AU, September 1999Introducerende objektorienteret programmering5C.1 Virkefeltsregler i Java int i; int j; int k; i = i+j; String t; Sequence."— Præsentationens transcript:

1 i o p o DAIMI, AU, September 1999Introducerende objektorienteret programmering5C.1 Virkefeltsregler i Java int i; int j; int k; i = i+j; String t; Sequence s; int i; int j; Sequence s; String s; int i; int j;

2 i o p o DAIMI, AU, September 1999Introducerende objektorienteret programmering5C.2 “What’s in a name?” Brian spillede blændende i søndags! Skolen ligger i Viby Ring til Kirsten og sig at...  Et navn fortolkes i en kontekst og konteksten er med til at definere navnets betydning.  Beskeden “Ring til Kirsten og sig at...” fortolkes vidt forskelligt på arbejde og hjemme!

3 i o p o DAIMI, AU, September 1999Introducerende objektorienteret programmering5C.3 Navne i Java Hvad betyder følgende? i = i + 1; Det kommer an på hvilken af følgende erklæringer der gælder: class Scope { int i; public void pip() { String i; i = i + 1; }

4 i o p o DAIMI, AU, September 1999Introducerende objektorienteret programmering5C.4 Erklæringer i Java Reglen i Java er at alle navne skal erklæres (eller importeres) før de kan bruges. Eneste undtagelse er navne fra java.lang der automatisk importeres til alle filer (String, Math, Thread,...). Navne kan erklæres i filer (gælder dog kun navne på klasser), i klasser og i metoder. I denne sammenhæng skal vi indskrænke os til at betragte navne på variabler erklæret i klasser og metoder. Som vi skal se i det følgende, er der lidt forskel på reglerne for variabler erklæret i klasser og variabler erklæret i (blokke i) metoder.

5 i o p o DAIMI, AU, September 1999Introducerende objektorienteret programmering5C.5 Variabler erklæret i klasser class Scope { Scope() { i = 0; } public void addOne() { i = i + 1; } int i; public void addTwo() { i = i + 2; } public int value() { return i; } } En klasse definerer et navnerum hvor alle navne erklæret i klassen er tilgængelige overalt i klassen.

6 i o p o DAIMI, AU, September 1999Introducerende objektorienteret programmering5C.6 Variabler erklæret i metoder public void pip() { x = x++; // error! int x = 0; x++; } I en metode (funktion) definerer en blok {...} et navnerum hvor alle navne erklæret i blokken er tilgængelige efter erklæringen (og indtil blokkens afslutning).

7 i o p o DAIMI, AU, September 1999Introducerende objektorienteret programmering5C.7 Indre blokke public void pip() { i = 0; { i++; System.out.println(i); int x = 0; x = i; x++; i++; System.out.println(x); } System.out.println(i); } I en blok kan man erklære indre blokke { {... } }. Reglen for indre blokke er den samme som reglen for blokke i metoder (forrige slide). Virkefelt for x

8 i o p o DAIMI, AU, September 1999Introducerende objektorienteret programmering5C.8 Et navn virker i indre blokke public void pip() { i = j; // Fejl, j virker ikke her! int j = 0;... { i++; System.out.println(i); j++; System.out.println(j); }... } Hvad er virkefeltet for int j ? Virkefelt for j

9 i o p o DAIMI, AU, September 1999Introducerende objektorienteret programmering5C.9 Og dog... class Scope { Scope() { i = 0; } public void pip() { i++; { i++; System.out.println(i); int i = 0; i++; System.out.println(i); } public static void main(String args[]) { Scope s = new Scope(); s.pip(); } int i; } Hvad sker der når vi oversætter (og evt. afvikler) følgende program?

10 i o p o DAIMI, AU, September 1999Introducerende objektorienteret programmering5C.10 En forklaring class Scope { Scope() { i = 0; } public void pip() { i++; { i++; System.out.println(i); int i = 0; i++; System.out.println(i); } public static void main(String args[]) { Scope s = new Scope(); s.pip(); } int i; } Hvad er virkefelterne for de to int i ’er ? Virkefelt for ydre i Virkefelt for indre i

11 i o p o DAIMI, AU, September 1999Introducerende objektorienteret programmering5C.11 Virkefeltsregler i Java En variabel erklæret i en klasse virker overalt i klassen med undtagelse af –virkefeltet for eventuelle ens-benævnte variabler erklæret i (blokke i) klassens metoder. En variabel erklæret i en blok virker overalt i blokken med undtagelse af –den del af blokken der går forud for erklæringen samt –virkefeltet for eventuelle ens-benævnte variabler erklæret i indre blokke.

12 i o p o DAIMI, AU, September 1999Introducerende objektorienteret programmering5C.12 { int i; int j; Sequence s; { int i; String s; i = i+j; { int i; int j; Sequence s; { String t; int k; int j; } Sådan!


Download ppt "I o p o DAIMI, AU, September 1999Introducerende objektorienteret programmering5C.1 Virkefeltsregler i Java int i; int j; int k; i = i+j; String t; Sequence."

Lignende præsentationer


Annoncer fra Google