Paket (2) nautisk_mil : constant Float := * foot; ångström : constant Float := 10.0E-10; mile : constant Float := 5280.

Relevanta dokument
Tentamen Grundläggande programmering

Föreläsning 4: Poster

Månadsnamn september Några deklarationer

Exempel på ett litet Ada-program

TENTAMEN TDDB53. Programmering i Ada för MI (provkod TEN2) den 7 april 2010 kl Institutionen för datavetenskap, IDA Olle Willén mars 2010

Repetition av OOP- och Javabegrepp

Repetition av OOP- och Javabegrepp

KOMPLETTERANDE HEMTENTAMEN TDDB53

Föreläsning 6: Introduktion av listor

KOMPLETTERANDE HEMTENTAMEN 2 TDDB53

Arv: Fordonsexempel. Arv. Arv: fordonsexempel (forts) Arv: Ett exempel. En klassdefinition class A extends B {... }

Att deklarera och att använda variabler. Föreläsning 10. Synlighetsregler (2) Synlighetsregler (1)

GRUNDER I VHDL. Innehåll. Komponentmodell Kodmodell Entity Architecture Identifierare och objekt Operationer för jämförelse

Arrayer (vektorer) Murach s: kap Elektronikcentrum i Svängsta AB

732G Linköpings universitet 732G11. Johan Jernlås. Översikt. Repetition. Felsökning. Datatyper. Referenstyper. Metoder / funktioner

5 Grundläggande in- och utmatning

Föreläsning 2 Objektorienterad programmering DD1332. Typomvandling

Datatyp - mera. Begreppet värde, igen. Ett slags mått på en egenskap, eller något fenomen. Ska ges en bred tolkning!

KOMPLETTERANDE HEMTENTAMEN TDDB53

Föreläsning 7: Filer

TDIU01 - Programmering i C++, grundkurs

Idag. statiska metoder och variabler. private/public/protected. final, abstrakta klasser, gränssnitt, delegering. wrapper classes

Omgivningar. Omgivningar är viktiga eftersom de avgör vilka namn som är synliga och därmed dessas innebörd och de värden som är förknippade med dem.

Föreläsning 11. Arrayer. Arrayer. Arrayer. Lagrar flera värden av samma typ Kan vara primitiva typer eller objekt. Kan ha en array av t.

Visual Basic, en snabbgenomgång

Datatyper och kontrollstrukturer. Skansholm: Kapitel 2) De åtta primitiva typerna. Typ Innehåll Defaultvärde Storlek

Introduktion till objektorientering. Vad är objektorientering egentligen? Hur relaterar det till datatyper? Hur relaterar det till verkligheten?

Föreläsning 2, vecka 8: Repetition

Detta dokument är ett exempel, cirka hälften av en tentamen för TDA545 Objektorienterad programvaruutveckling

Idag. Javas datatyper, arrayer, referenssemantik. Arv, polymorfi, typregler, typkonvertering. Tänker inte säga nåt om det som är likadant som i C.

LÖSNINGSFÖRSLAG Programmeringsteknik För Ing. - Java, 5p

Kontinuerliga listor. Fält (listor) Kontinuerliga listor... Kontinuerliga listor...

Ett problem. Kontrollstrukturer och arrayer. Arrayer. Lösningen. Arrayer och hakparanteser. Exempel int[] results; results = new int[10]; // 0..

Objektorienterad Programmering (TDDC77)

I STONE. I Variabler, datatyper, typkonvertering. I Logiska och matematiska uttryck. I Metoder-returvärde och parametrar. I Villkorssatser if/else

Programmering med Java. Grunderna. Programspråket Java. Programmering med Java. Källkodsexempel. Java API-exempel In- och utmatning.

Programmering, grundkurs, 8.0 hp HI1024, omtentamen, TEN1. Tisdagen den 7 juni 2011,

Exempel. Arrayer. Lösningen. Ett problem. Arrayer och hakparanteser. Arrayer

Föreläsning 8 - del 2: Objektorienterad programmering - avancerat

Föreläsning 10 OM DELMÅLSKONTROLLEN ; VARIABLERS SYNLIGHET STRING OCH STRINGBUILDER

TDDE10 TDDE11, 725G90. Gemensam kurswebsida på:

Objektorienterad Programmering (TDDC77)

DAT043 - föreläsning 8

I Skapa Hej.java och skriv programmet. I Kompilera med javac Hej.java. I Rätta fel och repetera tills du lyckas kompilera ditt program

Agenda. Arrayer deklaration, åtkomst Makron Flerdimensionella arrayer Initiering Strängar Funktioner och arrayer. Övningar nu och då

Programmera i C Varför programmera i C när det finns språk som Simula och Pascal??

(Man brukar säga att) Java är... Denna föreläsning. Kompilering av Java. Historik: Java. enkelt. baserat på C/C++ Allmänt om Java

TDDC77 Objektorienterad Programmering

Föreläsning 8 - del 1: Objektorienterad programmering (forts.) - Exempel

F7 - Arrayer. ID1004 Objektorienterad programmering Fredrik Kilander

Outline. Objektorienterad Programmering (TDDC77) Att instansiera en klass. Objekt. Instansiering. Åtkomst. Abstrakt datatyp.

Föreläsning 5: Introduktion av pekare

Dagens program. Programmeringsteknik och Matlab. Objektorienterad programmering. Vad är vitsen med att ha både metoder och data i objekten?

Användarhandledning Version 1.2

732G Linköpings universitet 732G11. Johan Jernlås. Översikt. Repetition. Strukturdiagram. Styra. Algoritmer. Val

Sammansatta datatyper Generics: Parametrisk polymorfism

Övning från förra gången: readword

Parameteröverföring. Exempel. Exempel. Metodkropp

Abstrakt datatyp. -Algoritmer och Datastrukturer- För utveckling av verksamhet, produkter och livskvalitet.

Grundkurs i programmering, 6 hp (725G61) Dugga 2 tillfälle 2

Arrayer. results

Kompilering och exekvering. Föreläsning 1 Objektorienterad programmering DD1332. En kompilerbar och körbar java-kod. Kompilering och exekvering

Översikt över Visual Basic

Uppgift 1 ( Betyg 3 uppgift )

Objektorienterad programmering Föreläsning 4

Föreläsningsanteckningar, Introduktion till datavetenskap HT S4 Datastrukturer. Tobias Wrigstad

Klasser i Java kan ha metoder och egenskaper. Metoder beskriver funktioner som klassen kan utföra. Egenskaper beskriver innehållet i klassen.

Objektorienterad programmering i Java

Objektorienterad Programmering DAT043

TDDC30. Kursledning Kursledare: Jonas Lindgren. Labassistent: Jonas Lindgren Labassistent: Niklas Holma Labassistent: Erik Nilsson

Datastrukturer. föreläsning 3. Stacks 1

Ett objekt... Exempel: Om ni tittar er runt i föreläsningssalen ser in många olika fysiska föremål:

Tentamen ID1004 Objektorienterad programmering October 29, 2013

Objektorienterad programmering. Fält som funktionsresultat. Mer om fält: att uppdatera ett parameterfält. Kontrast: Parametrar av primitiv typ

Det finns en referensbok (Java) hos tentavakten som du får gå fram och läsa men inte ta tillbaka till bänken.

Objektorienterad programmering i Java I

Datastrukturer. Erik Forslin. Rum 1445, plan 4 på Nada

Tentamen OOP

Programmering för språkteknologer II, HT2011. Rum

Digitalitet. Kontinuerlig. Direkt proportionerlig mot källan. Ex. sprittermometer. Elektrisk signal som representerar ljud.

Erfarenheter från labben

TUTORIAL: KLASSER & OBJEKT

Introduktion till MATLAB, med utgångspunkt från Ada

Föreläsning 3-4 Innehåll. Diskutera. Metod. Programexempel med metod

OOP Objekt-orienterad programmering

Föreläsning 2. Täcker material från lektion 1, 2, 3 och 4:

Lösningar för tenta 3 DAT043,

Lösningsförslag: Instuderingsfrågor, del D

kl Tentaupplägg

Objektorienterad Programmering (TDDC77)

Typsystem. Typsystem... Typsystem... Typsystem... 2 *

Föreläsning 3-4 Innehåll

Klassdeklaration. Metoddeklaration. Parameteröverföring

Tentamen ID1004 Objektorienterad programmering April 7, 2015

Typsystem. DA2001 (Föreläsning 23) Datalogi 1 Hösten / 19

Introduktion till Datalogi DD1339. Föreläsning 3 29 sept 2014

Objektorienterad programmering Föreläsning 10. Copyright Mahmud Al Hakim Sorteringsalgoritmer

Introduktion. Klasser. TDP004 Objektorienterad Programmering Fö 2 Objektorientering grunder

Programmeringsteknik I

Sockets: server. with Ada.Command_Line; use Ada.Command_Line; with Ada.Exceptions; use Ada.Exceptions; with Ada.Text_IO; use Ada.

Transkript:

Paket (2) with LängdKonstanter; use LängdKonstanter; procedure Main is Ett huvudprogram som infogar detta paket: Paket (1) Ett paket med en praktisk uppsättning konstanter: package LängdKonstanter is -- Alla värden uttryckta i meter: inch : constant Float := 0.0254; foot : constant Float := 12.0 * inch; mile : constant Float := 5280.0 * foot; fermi : constant Float := 10.0E-15; ångström : constant Float := 10.0E-10; nautisk_mil : constant Float := 6076.0 * foot; -- au : Astronomisk enhet au : constant Float := 1.4960E+11; ljusår : constant Float := 9.4607E+15; end LängdKonstanter; längd : Float; -- i meter. Put(längd * foot, 0, 3, 0); Put("fot."); New_Line; end Main; procedure Main is inch : constant Float := 0.0254; foot : constant Float := 12.0 * inch; mile : constant Float := 5280.0 fermi : constant Float := 10.0E-15; ångström : constant Float := 10.0E-10; nautisk_mil : constant Float := 6076.0 au : constant Float := 1.4960E+11; ljusår : constant Float := 9.4607E+15; längd : Float; -- i meter. Put(längd * foot, 0, 3, 0); Put("fot."); New_Line; end Main; Det fungerar som om det från början hade stått Paket (3) Ett paket som definierar några typer och konstanter: package TwoDimTypes is type Point is record x, y: Float; type Circle is record center : Point; radius : Float; type Rectangle is record upper_left : Point; width : Float; height : Float; Origo : constant Point := (0.0, 0.0); UnitCircle : constant Circle := (Origo, 1.0); end TwoDimTypes; Paket (4) Ett användande huvudprogram. Det gör with på paketet, men inte use! with TwoDimTypes; procedure ppp is P1, P2 : TwoDimTypes.Point; Rect : TwoDimTypes.Rectangle; C1 : TwoDimTypes.Circle := TwoDimTypes.UnitCircle; end ppp; Paketet tas med, men dess innehåll är inte direkt synligt! Man måste då ange paketnamn. före varje namn ur paketet! use ser till att paketet öppnas så att alla dess beståndsdelar blir direkt synliga. Skrivsättet paketnamn.paketkomponent är nödvändigt bara när olika paket innehåller komponenter med samma namn!

Paket (7) Detta är bodyn ( kroppen ) till paketet Pack. Här finns subrutinerna i sin fullständighet! Filen skall ha namnet paketnamn.adb. package body Pack is the_year : Natural) return is return (the_day, the_month, the_year); end Make; procedure GetNext(the_date : in out ) is end GetNext; Paket (8) Fortsättninen av Pack s body: procedure GetNextWeekday(the_weekday : in out Weekday) is end GetNextWeekday; function IsLeapyear(the_year : Natural) return Boolean is end IsLeapYear; Paket (5) Ett annat paket Pack som definierar såväl typer och konstanter som subrutiner! Paketet skall då bestå av två filer. Först paketets specifikation: package Pack is type Weekday is (Monday, Tuesday, Wednesday, Thursday, Friday, Saturday, Sunday); subtype DayNr is integer range 1.. 31; subtype MonthNr is integer range 1.. 12; type is record Day : DayNr; Month : MonthNr; Year : Natural; Paket (6) Fortsättning: I paketspecifikationen kan bara subrutiners specifikation förekomma! StartOfWeek : constant Weekday := Weekday first; StartOf2000 : constant := (1, 1, 2000); the_year : Natural) return ; procedure GetNext(the_date : in out ); procedure GetNextWeekday(the_weekday : in out Weekday); function IsLeapyear(the_year : Natural) return Boolean; function ToString(the_date : ) return String; end Pack;

Paket (9) Slutet av Pack s body. Den första funktionen ToString finns inte i paketets specifikation. Den är då användbar (synlig) bara i denna paketbody! function ToString(n : Natural) return String is S : String := Image(n); return S(2.. S Last); end ToString; function ToString(the_date : ) return String is return ToString(the_date.Day) & / & ToString(the_date.Month) & & ToString(the_date.Year); end ToString; end Pack; Paket (10) En ny variant: Detta paket har även en privat del i specifikationen: package Pack2 is type Weekday is (Monday, Tuesday, Wednesday, Thursday, Friday, Saturday, Sunday); Paket (11) Den privata delen av Pack2 gömmer datatypens utseende för användande program: function IsLeapyear(the_year : Natural) return Boolean; function ToString(the_date : ) return String; function DayOf(the_date : ) return DayNr; function MonthOf(the_date : ) return MonthNr; function YearOf(the_date : ) return Natural; private type is record Day : DayNr; Month : MonthNr; Year : Natural; end Pack2; subtype DayNr is integer range 1.. 31; subtype MonthNr is integer range 1.. 12; type is private; -- Bara typens namn!! StartOfWeek : constant Weekday := Weekday first; StartOf2000 : constant := (1, 1, 2000); the_year : Natural) return ; procedure GetNext(the_date : in out ); procedure GetNextWeekday(the_weekday : in out Weekday); Paket (12) Synlighet mellan paket och användande program. Paketets specifikation publik del privat del Användande program Vet alltså bara om vad som finns i paketets publika del! Paketets body Inget del av paketet vet alltså något om vad som finns i det användande programmet!

Paket (13) - deklaration av generiskt paket: generic type is private; package KöPack is type Kö is private; procedure Köa(E : ; K : in out Kö); procedure Hämta(K : in out Kö; E : in out ; ÄrTom : in out Boolean); private Max : constant := 1000; type IndexTyp is 1.. Max; type Lista is array(indextyp) of ; type Kö is record Sista : := 0; Element : Lista; end KöPack; En body också, förstås. Men den visas inte här. KöPack är ett sk generiskt paket, ett ofullständigt och i sig oanvändbart paket, som fungerar som en mall för att skapa riktiga paket. Typnamnet ska betraktas som en slags parameter. Paket (14) - Instatiering av generiskt paket: Paketmallen KöPack KöPack är bara en mall för hur andra paket ska skapas - det kan inte användas som det är. Typnamnet är bara ett parameternamn och måste ersättas med ett verkligt typnamn i en kopia av mallen. Det gör man med t ex dessa konstruktioner, sk instantieringar: package IntKöande is new KöPack(); package Köande is new KöPack(); Man får då två nya, verkliga paket, med namnen IntKöande resp Köande, där har ersatts av de verkliga typnamnen resp. Det verkliga paketet IntKöande Det verkliga paketet Köande De här paketen är vad man kallar instanser av KöPack och de kan nu användas som vanliga paket. Paket (15) - Instantiering av generiskt paket, exempel: with KöPack; procedure MyMain is type is -- enligt förut, t ex -- Instanser av mallen anpassade för -- s resp s skapas: package IntKöande is new KöPack(); package Köande is new KöPack(); use IntKöande, Köande; -- En kövariabel för vardera typen. Eftersom -- typnamnet Kö finns i båda paketen måste man -- ange vilket pakets Kö som avses: INTKÖ : IntKöande.Kö; DATEKÖ : Köande.Kö; D : := (8, 2, 2006); -- Ett datum; -- Nu kan - och -värden köas! -- Typen på parametrarna avgör vilken -- av de två Köa-procedurerna som väljs: Köa(12, INTKÖ); Köa(D, DATEKÖ); Paket (16) - Sammanfattning Ett paket innehåller helt enkelt en samling deklarationer. finns i en eller två egna filer för sig. Filens/filernas förnamn skall vara detsamma som paketets namn. består av två filer om den innehåller subrutiner, en enda fil om den inte innehåller subrutiner: - i paketets specfikationsfil (.ads) finns vid behov specifikationer (enbart!) av subrutiner, plus andra former av deklarationer. Denna fil finns alltid. - i paketets body-fil (.adb) skall subrutinerna från specifikationsfilen finnas i fullständig form. - bodyfilen kan dessutom innehålla andra deklarationer. kan inkluderas i ett annat program med with, och dess synliga innehåll kan sedan göras direkt åtkomligt med use. vet aldrig någonting om det program i vilket det inkluderas. kan också ha en privat - osynlig - del i specifikationen. kan dessutom vara generiskt. Det program som inkluderar ett paket vet ingenting om innehållet i paketets body. Det är alltid osynligt. vet heller inget om innehållet i paketspecifikationens eventuella privata del. kan alltså bara utnyttja det som finns i paketspecifikationens synliga del. måste skapa en konkret kopia (en instans) om paketet är generiskt. Endast en konkret paketinstans kan use:as.

Typen String (1) Den är en sk unconstrained array (array med obestämda indexgränser)! Tänkt deklaration (om den inte redan funnes!): type String is array(positive range <>) of Character; Strängliteraler: "Summa: " Strängvariabler: har (den underförstådda) typen array(1.. 7) of Character; QM : String := "? "; kan sedan bara ges nya strängvärden med exakt 2 tecken. S1 : String(1.. 12); kan bara ges strängvärden med exakt 12 tecken: S1 := "Pettersson "; Subtyper: subtype NameType is String(1.. 30); subtype ThreeLetter is String(1.. 3); Typen String (2) - operationer S2 : String (1.. 11); Ch : Character; T3 : ThreeLetter; Konkatenering (hopslagning) med operatorn & S2 := "Hej och " & "hå!"; put("vanligaste bokstaven är " & Ch); Slicing - delföljd av tecken: put(s2(index.. index + 4)); T3 := S2(3.. 5); T3 := S2(S2 last - 2.. s2 last); S2 := S2(2.. s2 last) & s2(1); S2(5.. 7) := " & "; Alla jämförelser (=, /=, <, ) kan också användas! NB! En generalisering: Konkatenering, slicing och jämförelser kan användas på alla endimensionella arraytyper med element av enkel typ! Typen String (3)- subrutiner Variabler, konstanter, subtyper måste ha fixerad längd! Men parametrar till subrutiner, värden av funktioner tillåts vara av den obegränsade typen String! function Clip(s : String) return String is for index in reverse s range loop if s(index) /= then return s(1.. index); end if; end loop; return ""; end Clip; Kan nu anropas med strängar av olika längd: Clip("Hejsan ") Clip("OK") Värdena har oförutsägbar längd - icke fix. Men tilldelning av värdet till en variabel funkar bara om längden av värdet stämmer med variabelns deklarerade längd! Text := Clip("Hejsan "); -- tveksamt! Däremot fungerar alltid t ex Put(Clip("Hejsan ")); eftersom Put s parameter också är en obegränsad String!