Laste ned presentasjonen
Presentasjon lastes. Vennligst vent
PublisertBerit Engebretsen Endret for 9 år siden
1
ADA 95 – del3 Foreleser: Olaf Hallan Graven Bok: Programming in ADA95 (2nd) John Barnes
2
ADA95 for KDA Pakker Ada har innebygget en mekanisme for å gruppere sammen underprogrammer som utfører en oppgave sammen, eller som utfører beslektede oppgaver. Denne mekanismen kalles pakke, og kan sammenlignes med en klasse i C++ som man har et globalt objekt av, eller namespace.
3
ADA95 for KDA Pakker Pakker deles i to biter: –Pakke spesifikasjonen –Pakke kroppen(body) Vi har allerede støtt på en pakke: –text_io Eksempel på en pakke.
4
ADA95 for KDA Pakke eksempel Fil a.ads (Pakkespesifikasjonen) package a is procedure set(X: in integer); function get return integer; end a;
5
ADA95 for KDA Fil a.adb (Pakkekroppen) with text_io; package body a is Remember : integer; procedure set(X: in integer) is begin Remember := X; end set; function get return integer is begin return Remember; end get;
6
ADA95 for KDA Slutten på pakkekroppen begin -- dette blir kjørt før pakka tas -- i bruk. Remember := 0; text_io.put_line("Starting"); -- utskrift som bevis på kjøring end a;
7
ADA95 for KDA Bruk av pakka with text_io; with a; procedure main is package int_io is new text_io.integer_io(integer); procedure p is begin int_io.put(a.get); text_io.put_line(""); a.set(100); int_io.put(a.get); text_io.put_line(""); end p;
8
ADA95 for KDA Bruk av pakka begin int_io.put(a.get); text_io.put_line(""); a.set(10); int_io.put(a.get); text_io.put_line(""); p; int_io.put(a.get); text_io.put_line(""); end main; Starting 0 10 100
9
ADA95 for KDA Gjeming av informasjon (Private typer) Normale private typer Begrensede private typer
10
ADA95 for KDA Private typer Vi kan lage pakker uten private typer: package ComplexNumbers is type Complex is record Real,Imag : float; end record; function ”+” (X:Complex) return Complex; function ”+” (X,Y:Complex) return Complex; function ”-” (X:Complex) return Complex; function ”-” (X,Y:Complex) return Complex; end ComplexNumbers;
11
ADA95 for KDA eller med privat type. package ComplexNumbers is type Complex is private; function ”+” (X:Complex) return Complex; function ”+” (X,Y:Complex) return Complex; function ”-” (X:Complex) return Complex; function ”-” (X,Y:Complex) return Complex; private type Complex is record Real,Imag : float; end record; end ComplexNumbers;
12
ADA95 for KDA Pakkekroppen package body ComplexNumbers is function ”+” (X,Y:Complex) return Complex is begin return (X.Real+Y.Real,X.Imag+Y.Imag); end ”+”; ::::::::::::::::::: end ComplexNumbers;
13
ADA95 for KDA Bruk av ComplexNumbers with ComplexNumbers; procedure Main is a,b,c : ComplexNumbers.Complex; `begin a := b + c; Hvilken + er dette? a:=ComplexNumbers.+(b,c); a := b + c; use ComplexNumbers ;Type.Complex
14
ADA95 for KDA Arv (Subtype) Vi kan gjøre slikt som: type Lengde is new Integer; I dette tilfellet kan vi lage nye operatorer: function “+”(L,R : Lengde) return Lengde; Men husk at dersom vi ikke lager nye operatorer arver vi alle fra integer. Hva dersom vi ønsker å fjerne operatorer: function “*”(l,r:Lengde) return Lengde is abstract;
15
ADA95 for KDA Stack pakke package StackPak is type Stack is private; procedure Push(S: in out Stack; X:in integer); procedure Pop(S: in out Stack; X:out integer); function ”=”(S1,S2:Stack) return boolean; private MAX : constant := 100; type IntVec is array (integer range <>) of integer; type Stack is record Data: IntVec(1..MAX); Top : integer range 0..MAX := 0; end record; end StackPak;
16
ADA95 for KDA package body StackPak is procedure Push(S: in out Stack; X:in integer) is begin S.Top := S.Top + 1; S.Data(S.Top) := X; end Push; procedure Pop(S: in out Stack; X:out integer) is begin X := S.Data(S.Top); S.Top := S.Top - 1; end Pop; function ”=”(S1,S2:Stack) return boolean is begin if S1.Top /= S2.Top then return false; end if; return true; end ”=”; end StackPak;
17
ADA95 for KDA with StackPak; procedure main is MyStack : StackPak.Stack; Empty: StackPak.Stack; begin StackPak.Push(MyStack,Tall); StackPak.Pop(MyStack,Tall2); if (MyStack /= Empty) then MyStack := Empty; end if; end main;
18
ADA95 for KDA Limited private Det er mulig å lage typer slik: type T is limited private; Dette betyr at operatorene =, /= og := ikke automatisk er tilgjengelig for denne typen.
19
ADA95 for KDA Stack eksempel package StackPak is type Stack is limited private; procedure Push(S: in out Stack; X:in integer); procedure Pop(S: in out Stack; X:out integer); function ”=”(S1,S2:Stack) return boolean; private type Cell; type Stack is access Cell; type Cell is record Next: Stack; Value : integer; end record; end StackPak;
20
ADA95 for KDA package body StackPak is procedure Push(S: in out Stack; X:in integer) is begin S := new Cell’(S,X); end Push; procedure Pop(S: in out Stack; X:out integer) is begin X := S.Value; S := S.Next; end Pop; function ”=”(S1,S2:Stack) return boolean is begin ::::::::::::::: end ”=”; end StackPak;
21
ADA95 for KDA Løse enheter Vi kan i ada dele ut funksjoner og prosedyrer i egene file. Dette gjøres ved: 1. Der kroppen til prosedyra skulle vært skrives: procedure X(parametre)is separate; 2. Lag en egen fil: separate(Pakkenavn) procedure X (Parametre) is --osv.
22
ADA95 for KDA Løse enheter Løse enheter i gnat skal hete: Pakkenavn~underprogramnavn.adb Disse filene kompileres automatisk med.
23
ADA95 for KDA Child library units Dette er en teknikk som benyttes dersom vi ønsker å lage en ny pakke som benytter private typer i en pakke, men der den nye koden ikke skal være en del av den gamle pakka.
24
ADA95 for KDA Eksempel package ComplexNum is type Complex is private; ::::::::: end ComplexNum; Package ComplexNum.Underpakke is function a(...) return Complex; end Complex.Underpakke;
25
ADA95 for KDA Bruk av underpakker Dersom vi tar med oss en underrpakke slik: with ComplexNum.Underpakke; Fører dette automatisk til at pakka ComplexNum også blir tatt med.
26
ADA95 for KDA Child library units Det er mulig å lage underpakker som pakker inne i andre pakker: package P1 is package P2 is :::::::::::::::::: end P2; :::::::: end P1;
27
ADA95 for KDA Private Child lib-units EN siste mulighet er å lage private underpakker. Dette gjøres ved å skrive private forran package når vi lager pakka: package P1 is private package P2 is :::::::::::::::::: end P2; :::::::: end P1;
28
ADA95 for KDA Kort oppramsing av synlighetsregler En pakkespesifikasjon behøver ikke benytte with ForreldrePakke; En pakke spesifikasjon kan ikke benytte with Pakke.Barn; En pakkebody kan benytte with Pakke.Barn og/eller Pakke.Bror Ting i en forreldrepakke er synlig i barn. (use ikke nødvendig)
29
ADA95 for KDA Kort oppramsing av synlighetsregler En privat barn er ikke synlig utenfor pakketreet. Private deler og pakkekroppen til barnepakker kan benytte private deler av forreldrepakker. Hele private barnepakker kan benytte private deler av forreldrepakker. Use på en barnepakke fører til use på forreldrepakka også. Use på en forreldrepakke fører til use på alle barnepakker som er inkludert med with.
30
ADA95 for KDA Forandring av navn Det er mulig å bytte ut navnet på eksisterende enheter i ADA. declare procedure aset(X:integer) renames a.set; function rar return integer renames a.get; begin int_io.put(a.get); -- kan skrives som int_io.put(rar); end;
31
ADA95 for KDA På tide med oppgaver igjen Kap 11: 11.1, 11.3, 11.4 (1-4) og 11.5 (1-2) Kap 12: 12.1 og 12.3 Kap 5: 5.4 og 5.5 Kap 6: 6.2, 6.4. 6.6 og 6.8 Kap 7: 7.1 og 7.2 Kap 8: 8.1, 8.3, 8.6 og 8.7 Kap 9: 9.1 (1-3,7), 9.2 (1-2) og 9.3 Kap 10: 10.2, 10.3 og 10.6
Liknende presentasjoner
© 2024 SlidePlayer.no Inc.
All rights reserved.