a minimalistic ada-tutorial filea minimalistic ada-tutorial christian forler bauhaus-university...

32
A Minimalistic Ada-Tutorial Christian Forler Bauhaus-University Weimar October 18, 2011

Upload: buikien

Post on 20-Aug-2019

226 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: A Minimalistic Ada-Tutorial fileA Minimalistic Ada-Tutorial Christian Forler Bauhaus-University Weimar October 18, 2011

A Minimalistic Ada-Tutorial

Christian Forler

Bauhaus-University Weimar

October 18, 2011

Page 2: A Minimalistic Ada-Tutorial fileA Minimalistic Ada-Tutorial Christian Forler Bauhaus-University Weimar October 18, 2011

Ada-Compiler

GNAT GPL Ada compiler from Ada Core(http://libre.adacore.com/libre/).

Enables all warnings: -W und -Wall.

Enable overflow checking: -gnato

Using Ada’05: -gnat05

Example: # gnatmake -W -gnat05 -gnato foobar.adb

Output gnatmake usage: # gnatmake -help

Page 3: A Minimalistic Ada-Tutorial fileA Minimalistic Ada-Tutorial Christian Forler Bauhaus-University Weimar October 18, 2011

Package Specification

Package Specification

File extension .ads

(Un)Like a header file (.h) in C/C++

Contains:

New (sub-)typesFunction/procedure signaturesPrivate part

Example

package Foobar i stype Age i s p r i va te ;funct ion T o S t r i n g (A : Age ) return S t r i n g ;

pr i va tetype Age i s new N a t u r a l ;

end Foobar ;

Page 4: A Minimalistic Ada-Tutorial fileA Minimalistic Ada-Tutorial Christian Forler Bauhaus-University Weimar October 18, 2011

Package Body

Package Body

File extension .adb

Contains implementation of specified functions and procedures

Example

with Ada . Text IO ;package body Foobar i s

funct ion T o S t r i n g (A : Age ) return S t r i n g i sbegin

return A’ Img ; −− gnatend T o S t r i n g ;

end Foobar ;

Page 5: A Minimalistic Ada-Tutorial fileA Minimalistic Ada-Tutorial Christian Forler Bauhaus-University Weimar October 18, 2011

Basic Types

package B a s i c T y p e s i sI : I n t e g e r ; −− s i g n ed i n t e g e rN : N a t u r a l ; −− uns i gned i n t e g e r ;P : P o s i t i v e ; −− uns i gned i n t e g e r > 0M : mod 2∗∗32 ;B : Boolean := True ;S : S t r i n g := ” H e l l o World ! ” ;C : C h a r a c t e r := ’A ’ ;subtype Age i s N a t u r a l range 0 . . 1 3 0 ;type C o l o r i s ( Red , Green , Ye l low ) ;

R e d C o l o r : constant C o l o r := Red ;end B a s i c T y p e s ;

Page 6: A Minimalistic Ada-Tutorial fileA Minimalistic Ada-Tutorial Christian Forler Bauhaus-University Weimar October 18, 2011

Arrays and Records

type P o i n t i s recordX : I n t e g e r := 1 ;Y : I n t e g e r := 2 ;

end record ;

A : array ( 0 . . 1 0 ) of I n t e g e r :=(2 => 23 , 4=> 16#2a#, others => 2#11 00 #);

P : P o i n t ;

−− AccessA( 7 ) := 1 0 ;A ( 0 . . 3 ) := A ( 6 . . 9 ) ;P . X := 4 ;

Page 7: A Minimalistic Ada-Tutorial fileA Minimalistic Ada-Tutorial Christian Forler Bauhaus-University Weimar October 18, 2011

Operators

Operators

Logical (and, or, xor, not)

Relation (/=, =, <, <=, >, >=)

Arithmetic (+, -, *, /, mod, rem, **)

Assignment is :=

Page 8: A Minimalistic Ada-Tutorial fileA Minimalistic Ada-Tutorial Christian Forler Bauhaus-University Weimar October 18, 2011

Function

package Sum i sfunct ion Add ( L : I n t e g e r ;

R : I n t e g e r := 1) return I n t e g e r ;end Sum ;

package body Sum i sfunct ion Add ( L : I n t e g e r ;

R : I n t e g e r := 1) return I n t e g e r i sR e s u l t : I n t e g e r ;

beginR e s u l t := L + R ;return R e s u l t ;

end Add ;end Sum ;−− UsageC := Add (A, B ) ; −− I n t e g e r o r subtype o f I n t e g e rC := Add (R => B, L => A ) ;C := Add (A ) ;

Page 9: A Minimalistic Ada-Tutorial fileA Minimalistic Ada-Tutorial Christian Forler Bauhaus-University Weimar October 18, 2011

Procedure

−− S i gn a t u r eprocedure Copy ( Src : i n I n t e g e r ; Dest : out I n t e g e r ) ;−− Imp l ementa t i onprocedure Copy ( Src : i n I n t e g e r ; Dest : out I n t e g e r ) i sbegin

Dest := Src ;end Copy ;

Copy (A, B ) ; −− B can be u n i n i t i a l i z e d

Parameter Types

in: Right side parameter

out: Left side parameter

in out: Left and right side parameter

Page 10: A Minimalistic Ada-Tutorial fileA Minimalistic Ada-Tutorial Christian Forler Bauhaus-University Weimar October 18, 2011

Using Packages

with and use clause

with: Provides visibility for the public part of packagespecification.

use: Using the namspace of a visible package specification.

Example

with Ada . Text IO ;use Ada . Text IO ;

procedure H e l l o W i t h u s e i sbegin

Put ( ” H e l l o World ! ” ) ;New Line ;

end H e l l o W i t h U s e ;

Page 11: A Minimalistic Ada-Tutorial fileA Minimalistic Ada-Tutorial Christian Forler Bauhaus-University Weimar October 18, 2011

Package Renaming

with Ada . Text IO ;

procedure H e l l o W i t h u s e i spackage A t i renames Ada . Text IO ;−− use At i ;

beginA t i . P u t L i n e ( ” H e l l o World ! ” ) ;−−Put L ine (” He l l o World ! ” ) ;

end H e l l o W i t h U s e ;

Page 12: A Minimalistic Ada-Tutorial fileA Minimalistic Ada-Tutorial Christian Forler Bauhaus-University Weimar October 18, 2011

A C Program in Ada

package Weak Typing i sfunct ion Get Time ( D i s t a n c e , Speed : N a t u r a l )

return N a t u r a l ;. . .

end Weak Typing ;

−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−

with Weak Typing ; use Weak Typing ;procedure Test Weak Typing i s

Speed : N a t u r a l := 1 0 ;D i s t a n c e : N a t u r a l := 1 0 0 ;Time : N a t u r a l ;

beginT := Get Time ( S ,D) ;S := D/T ;Run ( S ) ;

end Test Weak Typing ;

Page 13: A Minimalistic Ada-Tutorial fileA Minimalistic Ada-Tutorial Christian Forler Bauhaus-University Weimar October 18, 2011

A C Program in Ada (cont’d)

Page 14: A Minimalistic Ada-Tutorial fileA Minimalistic Ada-Tutorial Christian Forler Bauhaus-University Weimar October 18, 2011

Strong Typing

Specification

package S t r o n g T y p i n g i stype Time i s new N a t u r a l ;type Speed i s new N a t u r a l ;type D i s t a n c e i s new N a t u r a l ;funct ion Get Time (D : D i s t a n c e ; S : Speed )

return Time ;end S t r o n g T y p i n g ;

S : Speed := 1 0 ;D : D i s t a n c e := 1 0 0 ;T : Time ;

beginT := Get Time ( S ,D) ; −−> Syntax E r r o rS := D/T −−> Syntax E r r o rRun ( S ) ;

Page 15: A Minimalistic Ada-Tutorial fileA Minimalistic Ada-Tutorial Christian Forler Bauhaus-University Weimar October 18, 2011

The Ada Approach

Specification

package S t r o n g T y p i n g i stype Time T i s new N a t u r a l ;type Speed T i s new N a t u r a l ;type D i s t a n c e T i s new N a t u r a l ;funct ion Get Time ( D i s t a n c e : D i s t a n c e T ;

Speed : Speed T )return Time T ;

end S t r o n g T y p i n g ;

S : Speed T := 1 0 ;D : D i s t a n c e T := 1 0 0 ;T : Time T ;

beginT := Get Time ( Speed => S , D i s t a n c e => D) ;S := Speed T ( N a t u r a l (D) / N a t u r a l (T ) ) ;Run ( S ) ;

Page 16: A Minimalistic Ada-Tutorial fileA Minimalistic Ada-Tutorial Christian Forler Bauhaus-University Weimar October 18, 2011

Private Types & Operator Overloading

package P o i n t i stype P o i n t i s p r i va te ;

procedure Put ( Item : P o i n t ) ;funct ion ”+” ( L e f t : P o i n t ; R i g h t : P o i n t ) return P o i n t ;funct ion ”=” ( L e f t : P o i n t ; R i g h t : P o i n t ) return Boolean ;funct ion To Point (X : I n t e g e r ; Y : I n t e g e r ) return P o i n t ;

pr i va te−− Only v i s i b l e / a c c e s i b l e i n the package bodytype P o i n t i s record

X : I n t e g e r ;Y : I n t e g e r ;

end record ;end P o i n t ;

Page 17: A Minimalistic Ada-Tutorial fileA Minimalistic Ada-Tutorial Christian Forler Bauhaus-University Weimar October 18, 2011

If-else Statement

with Ada . Text IO ;use Ada . Text IO ;

procedure Test i sAnswer : C h a r a c t e r ;

beginPut ( ”a , b , o r c ?” ) ;Get ( Answer ) ;i f Answer = ’ a ’ then

P u t L i n e ( ”A” ) ;e l s i f Answer = ’ b ’ then

P u t L i n e ( ”B” ) ;e l s e

P u t L i n e ( ”C” ) ;end i f ;

end Test ;

Page 18: A Minimalistic Ada-Tutorial fileA Minimalistic Ada-Tutorial Christian Forler Bauhaus-University Weimar October 18, 2011

Case-Statement

type Day i s (Mon , Tue , Wen, Thu , F r i , Sat , Sun ) ;case ( Today ) i s

when Mon . . Thu => Work ;when F r i =>

Work ;Pa r t y ;

when Sat | Sun => Pa rt y ;end case ;

Notes

All cases must be covered!

If not: syntax error! (Compiler helps you to discover flaws.)

Default clause: when others.

Don’t use it! (Except for very special situations.)

Page 19: A Minimalistic Ada-Tutorial fileA Minimalistic Ada-Tutorial Christian Forler Bauhaus-University Weimar October 18, 2011

Loop

loopWork ;Eat ;S l e e p ;Day = Day+1;i f I s H o l i d a y ( Day ) then

ex i t ;end i f ;

end loop ;

Page 20: A Minimalistic Ada-Tutorial fileA Minimalistic Ada-Tutorial Christian Forler Bauhaus-University Weimar October 18, 2011

For- and While-Loop

f o r I i n 1 . . N loopSum := Sum+I ;

end loop ;

whi le A /= B loopi f A < B then

A := A+1;e l s e

A := A−1;end i f ;

end loop ;

Page 21: A Minimalistic Ada-Tutorial fileA Minimalistic Ada-Tutorial Christian Forler Bauhaus-University Weimar October 18, 2011

Define Exceptions

package Dbz i sD i v s i o n B y Z e r o e r r o r : exception ;

type P o i n t i s p r i va te ;

funct ion To Point (A : I n t e g e r ; B : I n t e g e r ) return P o i n t ;

funct ion ”/” (A : P o i n t ; B : P o i n t ) return P o i n t ;

pr i va tetype P o i n t i s record

X : I n t e g e r ;Y : I n t e g e r ;

end record ;end Dbz ;

Page 22: A Minimalistic Ada-Tutorial fileA Minimalistic Ada-Tutorial Christian Forler Bauhaus-University Weimar October 18, 2011

Define Exceptions (cont’d)

package body Dbz i sfunct ion To Point (A : I n t e g e r ; B : I n t e g e r ) return P o i n t i s

P : P o i n t := (X => A, Y=> B ) ;begin

return P ;end To Point ;

funct ion ”/” (A : P o i n t ; B : P o i n t ) return P o i n t i sP : P o i n t ;

begini f B . X=0 or B . Y=0 then

r a i s e D i v s i o n B y Z e r o E r r o r ;e l s e

P . X := A . X / B . X ;P . Y := A . Y / B . Y ;

end i f ;return P ;

end ”/” ;end Dbz ;

Page 23: A Minimalistic Ada-Tutorial fileA Minimalistic Ada-Tutorial Christian Forler Bauhaus-University Weimar October 18, 2011

Raise Exception

with Dbz ; use Dbz ;procedure R a i s e E x c e p t i o n i s

A : P o i n t := To Point ( 4 , 5 ) ;B : P o i n t := To Point ( 0 , 1 ) ;C : P o i n t ;

beginC := A/B ;

end R a i s e E x c e p t i o n ;

Output

raised DBZ.DIVSION BY ZERO ERROR : dbz.adb:12

Page 24: A Minimalistic Ada-Tutorial fileA Minimalistic Ada-Tutorial Christian Forler Bauhaus-University Weimar October 18, 2011

Nice Attributes

with Ada . Text IO ; use Ada . Text IO ;with Ada . I n t e g e r T e x t I O ; use Ada . I n t e g e r T e x t I O ;

procedure T i c k s i stype Foo i s ar ray ( 4 . . 9 ) of N a t u r a l ;X : Foo := ( 1 , 2 , 3 , 4 , 5 , 6 ) ;

beginPut (X’ F i r s t ) ; −− p r i n t 4Put (X’ L a s t ) ; −− p r i n t 9Put (X’ Length ) ; −− p r i n t 6New Line ;f o r I i n X’ Range loop

P u t L i n e (X( I ) ’ Img ) ;end loop ;

end T i c k s ;

Page 25: A Minimalistic Ada-Tutorial fileA Minimalistic Ada-Tutorial Christian Forler Bauhaus-University Weimar October 18, 2011

Nice Attributes (cont’d)

with Ada . Text IO ; use Ada . Text IO ;with Ada . I n t e g e r T e x t I O ; use Ada . I n t e g e r T e x t I O ;

procedure T i c k s 2 i stype C o l o r i s ( Red , Blue , Ye l low ) ;

−− s t r i n g to n a t u r a lN : N a t u r a l := Natura l ’ Value ( ”10” ) ;

beginPut ( Natura l ’ F i r s t ) ; −−p r i n t 0New Line ;−−p r i n t 16#7FFFFFFF#Put ( Natura l ’ Last , Base => 1 6 ) ;New Line ;P u t L i n e ( Color ’ Pred ( Blue ) ’ Img ) ; −−p r i n t REDP u t L i n e ( Color ’ Succ ( Blue ) ’ Img ) ; −−p r i n t YELLOW

end T i c k s 2 ;

Page 26: A Minimalistic Ada-Tutorial fileA Minimalistic Ada-Tutorial Christian Forler Bauhaus-University Weimar October 18, 2011

Generic Types Specification

gener ictype Base Type i s mod <>;

M u l t i p l y e r , Adder : Base Type ;O u t p u t D i v i s o r : Base Type := 1 ;

package LCG i sprocedure I n i t i a l i z e ( Seed : Base Type ) ;funct ion Random return Base Type ;

end LCG ;

Page 27: A Minimalistic Ada-Tutorial fileA Minimalistic Ada-Tutorial Christian Forler Bauhaus-University Weimar October 18, 2011

Generic Types Implementation

package body LCG i sS t a t e : Base Type := Base Type ’ F i r s t ;

procedure I n i t i a l i z e ( Seed : Base Type ) i sbegin

S t a t e := Seed ;end I n i t i a l i z e ;

funct ion Random return Base Type i sbegin

S t a t e := S t a t e ∗ M u l t i p l y e r + Adder ;return S t a t e / O u t p u t D i v i s o r ;

end Random ;end LCG ;

Page 28: A Minimalistic Ada-Tutorial fileA Minimalistic Ada-Tutorial Christian Forler Bauhaus-University Weimar October 18, 2011

Generic Types Using

with Ada . Text IO , LCG ;

procedure Test LCGs i stype M31 i s mod 2∗∗31 ;package MS Rand i s new LCG

( Base Type => M31 ,M u l t i p l y e r => 214013 ,Adder => 2531011 ,O u t p u t D i v i s o r => 2∗∗1 6 ) ;

beginMS Rand . I n i t i a l i z e ( 2 3 ) ;f o r I i n 1 . . 10 loop

Ada . Text IO . P u t L i n e (M31 ’ Image ( MS Rand . Random ) ) ;end loop ;

end Test LCGs ;

Page 29: A Minimalistic Ada-Tutorial fileA Minimalistic Ada-Tutorial Christian Forler Bauhaus-University Weimar October 18, 2011

Further Information

Ada Distilled by Richard Riehle (ebook)

Ada 95: The Craft of Object-Oriented Programming by JohnEnglish (online textbook)

Course homepage for Software Development for Safe andSecure Systems

Ada 2005 by John Barnes (ISBN:0321340787).

Ada wiki(http://en.wikibooks.org/wiki/Ada_Programming).

...

Page 30: A Minimalistic Ada-Tutorial fileA Minimalistic Ada-Tutorial Christian Forler Bauhaus-University Weimar October 18, 2011

The End.

Questions?

Page 31: A Minimalistic Ada-Tutorial fileA Minimalistic Ada-Tutorial Christian Forler Bauhaus-University Weimar October 18, 2011

It’s Your Turn

Tasks

1 Write a specification for a private point type.

2 Implement the specification.

3 Write a application using your point type package.