-A109D 641 T8MANSHOP2 AUG~jlI PROGRAN O0C AmLNTt VA … · -a109d 641 t8manshop2 aug~jli p87(u) ada...

390
-A109D 641 T8MANSHOP2 AUG~jlI p87(U) ADA JOINT PROGRAN 1/4 AD119 41 O0C AmLNTt VA 2AU GB UNCLASSIFIED F/C 12/5 ML

Transcript of -A109D 641 T8MANSHOP2 AUG~jlI PROGRAN O0C AmLNTt VA … · -a109d 641 t8manshop2 aug~jli p87(u) ada...

Page 1: -A109D 641 T8MANSHOP2 AUG~jlI PROGRAN O0C AmLNTt VA … · -a109d 641 t8manshop2 aug~jli p87(u) ada joint progran 1/4 ad119 41 o0c amlntt va 2au gb unclassified f/c 12/5 ml

-A109D 641 T8MANSHOP2 AUG~jlI p87(U) ADA JOINT PROGRAN 1/4

AD119 41 O0C AmLNTt VA 2AU GB

UNCLASSIFIED F/C 12/5 ML

Page 2: -A109D 641 T8MANSHOP2 AUG~jlI PROGRAN O0C AmLNTt VA … · -a109d 641 t8manshop2 aug~jli p87(u) ada joint progran 1/4 ad119 41 o0c amlntt va 2au gb unclassified f/c 12/5 ml

I1.0llB ~~ Il 11 2.

,III25

MICROCOPY RESOLUTION TEST CHART

Page 3: -A109D 641 T8MANSHOP2 AUG~jlI PROGRAN O0C AmLNTt VA … · -a109d 641 t8manshop2 aug~jli p87(u) ada joint progran 1/4 ad119 41 o0c amlntt va 2au gb unclassified f/c 12/5 ml

UNCLASSIFIED FILE COP'E I When Data Enree; FILE COP,IENTAT ION PAGE READ _s__ucTO_ S

BEFORE COMPLETEING FORM%

A D-A 189 641 2. GOVT ACCESSION NO. 3. RECIPIENT'S CATALOG NUMBER

.a TYPE Of RE.PORT jOQ WgF7 ED

Advanced Ada Workshop, August, 19876. PERFORMING ORG. REPORT NUMBER

7. AUTHOR(s) 8. CONTRACT OR GRANT NUMBER(s)Ada Software Engineering Education and Training Team (ASEET)

9. PERFORMING ORGANIZATION AND ADDRESS 10. PROGRAM ELEMENT. PROJECT. TASK

Ada Software Education and Training Team AREA & WORK UNIT NUMBERS

Ada Joint Program Office, 3E114, ThePentagon, Washington, D.C.20301-3081

11. CONTROLLING OFFICE NAME AND ADDRESS 12. REPORT DATEAda Joint Program Office 3 December. 19863E 114, The Pentaaon 13. NUMBER OF dAUESWashington, DC 20101-3081 380

14. MONITORING AGENCY NAME & aODRESS(Ifdifferer, -m ControllingOffice) 15. SECURITY CLASS (otrn,s,eport)

Ada Joint Program Office UNCLASSIFIED

5a. CASSiFICATION DCwNGRADINGSEDULE

N/A

16. DISTRIBUTION STATEMENT (ofrhisReport)

Approved for public release; distribution unlimited.

17. DISTRIBUTION STATEMENT (of the abstractenteredin Block20. If different from Report)

UNCLASSIFIED DTC18. SUPPLEMENTARY NOTES

19. KEYWORDS (Continue on reverse side if necessary and identify by block number)

Ada Programming language, Ada Training, Education, Training, ComputerPrograms, Ada Joint Program Office, AJPO,

20. ABSTRACT (Continue on reverse side if necessary and identify by block number)

\ This document contains prints of slides presented at the Advanced daWorkshop, Monday, 17 August to Friday, 21 August, 1987. 1,

DD Ium, 1473 EOITION OF I NOV 65 IS OBSOLETE

I JAN 73 S/N 0102-LF-014-6601 UNCLASSIFIEDSECURITY CLASSIPITCAION OF THIS PAGE (Whe(nOarafrnre,d)

Page 4: -A109D 641 T8MANSHOP2 AUG~jlI PROGRAN O0C AmLNTt VA … · -a109d 641 t8manshop2 aug~jli p87(u) ada joint progran 1/4 ad119 41 o0c amlntt va 2au gb unclassified f/c 12/5 ml

0 ;1. .p-

Cf ro (LCd0 4

t4 co

(U ti

0 Q

*F-'0qQc

44 r

Page 5: -A109D 641 T8MANSHOP2 AUG~jlI PROGRAN O0C AmLNTt VA … · -a109d 641 t8manshop2 aug~jli p87(u) ada joint progran 1/4 ad119 41 o0c amlntt va 2au gb unclassified f/c 12/5 ml

Lai

i

a, "a~-mc

dc.

Aft.

Page 6: -A109D 641 T8MANSHOP2 AUG~jlI PROGRAN O0C AmLNTt VA … · -a109d 641 t8manshop2 aug~jli p87(u) ada joint progran 1/4 ad119 41 o0c amlntt va 2au gb unclassified f/c 12/5 ml

APPLIED Ada SOFTWARE ENGINEERING

• Basic Problem

-- Projection to the 1990's

--- A Macro Solution

* A Practical Solution

-- Software Engineering

-- Ada

• Software Engineering

-- Goals

-- Principles

* Why Ada ?

-- Features of Ada

-- Software Engineering

Applications

Page 7: -A109D 641 T8MANSHOP2 AUG~jlI PROGRAN O0C AmLNTt VA … · -a109d 641 t8manshop2 aug~jli p87(u) ada joint progran 1/4 ad119 41 o0c amlntt va 2au gb unclassified f/c 12/5 ml

BASIC PROBLEM

Projection to the 1990's

M Kultiprocessors - Networks andParallel Architectures

* Distributed Databases

H fardware Capabilities

* Software Demands

H fardware Costs

Page 8: -A109D 641 T8MANSHOP2 AUG~jlI PROGRAN O0C AmLNTt VA … · -a109d 641 t8manshop2 aug~jli p87(u) ada joint progran 1/4 ad119 41 o0c amlntt va 2au gb unclassified f/c 12/5 ml

Cm)m

LQ C.)

L~LW

Page 9: -A109D 641 T8MANSHOP2 AUG~jlI PROGRAN O0C AmLNTt VA … · -a109d 641 t8manshop2 aug~jli p87(u) ada joint progran 1/4 ad119 41 o0c amlntt va 2au gb unclassified f/c 12/5 ml

DISTRIBUTED DATABASES

*Central Control Over Data

* inisize Effort in Storing Data

" The Ada Package Store-

Page 10: -A109D 641 T8MANSHOP2 AUG~jlI PROGRAN O0C AmLNTt VA … · -a109d 641 t8manshop2 aug~jli p87(u) ada joint progran 1/4 ad119 41 o0c amlntt va 2au gb unclassified f/c 12/5 ml

HARDWARE CAPABILITIES

* ainframe in a Micro

-- Intel 80286, 80386, 80486, ???

-- Motorola 68000, 68010, 68020, 68030, ???

Screen Resolution

-- Desktop Publishing, CAD/CAM

Storage Devices

-- 100+ MB Hard Disks

-- Access Times - 18 mas to 40 ms

* Opens New Fields of Applications

Page 11: -A109D 641 T8MANSHOP2 AUG~jlI PROGRAN O0C AmLNTt VA … · -a109d 641 t8manshop2 aug~jli p87(u) ada joint progran 1/4 ad119 41 o0c amlntt va 2au gb unclassified f/c 12/5 ml

SOFTWARE DEMANDS

New Users with Consumer Relationships

* Non-Technical Arenas

-- Need Guarantees

-- Demand Reliability

Development is the Key

-- Design is Paramount

--- Simplistic Operations; i.e. TV

-- Costs of Errors

-- Other Considerations

Page 12: -A109D 641 T8MANSHOP2 AUG~jlI PROGRAN O0C AmLNTt VA … · -a109d 641 t8manshop2 aug~jli p87(u) ada joint progran 1/4 ad119 41 o0c amlntt va 2au gb unclassified f/c 12/5 ml

Lfl

@0

0

LLI

CO)

In

LLI"

CD c2CA

Page 13: -A109D 641 T8MANSHOP2 AUG~jlI PROGRAN O0C AmLNTt VA … · -a109d 641 t8manshop2 aug~jli p87(u) ada joint progran 1/4 ad119 41 o0c amlntt va 2au gb unclassified f/c 12/5 ml

A MACRO SOLUTION

G Greater Use of Automation

• Higher Levels of Abstraction

R Reuseability

-- Isolate Commonality

-- Create Workable Abstractions

-- Reuseable Parts Library

* Rapid Prototyping

-- Gain Insight

-- Evaluate Design Expectations

-- Compare Design Alternatives

A solution offered by Edward Lieblein

Page 14: -A109D 641 T8MANSHOP2 AUG~jlI PROGRAN O0C AmLNTt VA … · -a109d 641 t8manshop2 aug~jli p87(u) ada joint progran 1/4 ad119 41 o0c amlntt va 2au gb unclassified f/c 12/5 ml

A PRACTICAL SOLUTION

Software Engineering Myths

Anyone Can Be a Software Engineer

* Automated Tools - Software Engineering

Structured Programming = Software Engineering

Structured Analysis - Software Engineering

Code Re-use - Software Engineering

It Will Make Programming Obsolete

* Wl Will Make It Effortless

* Fantastic Productivity Gains

Ada - Software Engineering

= == =- ==n _ -i m i~iAN& anaaem

Page 15: -A109D 641 T8MANSHOP2 AUG~jlI PROGRAN O0C AmLNTt VA … · -a109d 641 t8manshop2 aug~jli p87(u) ada joint progran 1/4 ad119 41 o0c amlntt va 2au gb unclassified f/c 12/5 ml

SOFTWARE ENGINEERING

A PRACTICAL SOLUTION

* What Is It ?

* Why Is It Needed ?

* The State of the Art

• The State of the Practice

Why Nov ?

Page 16: -A109D 641 T8MANSHOP2 AUG~jlI PROGRAN O0C AmLNTt VA … · -a109d 641 t8manshop2 aug~jli p87(u) ada joint progran 1/4 ad119 41 o0c amlntt va 2au gb unclassified f/c 12/5 ml

F4za

00

4-j 4 -J0

U ci

C)I

x C 0UJ ~ D D Zr

Page 17: -A109D 641 T8MANSHOP2 AUG~jlI PROGRAN O0C AmLNTt VA … · -a109d 641 t8manshop2 aug~jli p87(u) ada joint progran 1/4 ad119 41 o0c amlntt va 2au gb unclassified f/c 12/5 ml

U 4-0-C0

0 00

E 0-

(1) 0

-0c0

Z 0 12

Page 18: -A109D 641 T8MANSHOP2 AUG~jlI PROGRAN O0C AmLNTt VA … · -a109d 641 t8manshop2 aug~jli p87(u) ada joint progran 1/4 ad119 41 o0c amlntt va 2au gb unclassified f/c 12/5 ml

00

C-J

U) 0

rIJF F c o E N- 0 0 0 _- -S ._J0 o -_J I i- (I

* * *

.0

.0

Page 19: -A109D 641 T8MANSHOP2 AUG~jlI PROGRAN O0C AmLNTt VA … · -a109d 641 t8manshop2 aug~jli p87(u) ada joint progran 1/4 ad119 41 o0c amlntt va 2au gb unclassified f/c 12/5 ml

0

0 00.

c o

W a-0 --J 0

0

E EC0.a

0 --

z .0Q-Q) o o.4J- U)=

.._

.-U)mm m mnm

Page 20: -A109D 641 T8MANSHOP2 AUG~jlI PROGRAN O0C AmLNTt VA … · -a109d 641 t8manshop2 aug~jli p87(u) ada joint progran 1/4 ad119 41 o0c amlntt va 2au gb unclassified f/c 12/5 ml

zz

C

0 0) E 0 _

Z Z)

o 0o

z Li~J Ci2

aJ 0 -z H-Zr7.L *

Page 21: -A109D 641 T8MANSHOP2 AUG~jlI PROGRAN O0C AmLNTt VA … · -a109d 641 t8manshop2 aug~jli p87(u) ada joint progran 1/4 ad119 41 o0c amlntt va 2au gb unclassified f/c 12/5 ml

0_

00L.L

C))

Page 22: -A109D 641 T8MANSHOP2 AUG~jlI PROGRAN O0C AmLNTt VA … · -a109d 641 t8manshop2 aug~jli p87(u) ada joint progran 1/4 ad119 41 o0c amlntt va 2au gb unclassified f/c 12/5 ml

LU

0 5 H-

U) LL.

Cz 0

D Q) -0 L1

L)U0 * - H

0FH- -0 o D

o 00

_0 0-0 :D

:D C* o:LI) 0

o

Page 23: -A109D 641 T8MANSHOP2 AUG~jlI PROGRAN O0C AmLNTt VA … · -a109d 641 t8manshop2 aug~jli p87(u) ada joint progran 1/4 ad119 41 o0c amlntt va 2au gb unclassified f/c 12/5 ml

0)

Z 0)

Page 24: -A109D 641 T8MANSHOP2 AUG~jlI PROGRAN O0C AmLNTt VA … · -a109d 641 t8manshop2 aug~jli p87(u) ada joint progran 1/4 ad119 41 o0c amlntt va 2au gb unclassified f/c 12/5 ml

44-1

0 0Co U)0 ci(10 -I-

4 -1 --

CLC

oc

4-j~coi

L0 0 ~00 *n

Page 25: -A109D 641 T8MANSHOP2 AUG~jlI PROGRAN O0C AmLNTt VA … · -a109d 641 t8manshop2 aug~jli p87(u) ada joint progran 1/4 ad119 41 o0c amlntt va 2au gb unclassified f/c 12/5 ml

p U

L. -

00

.- , .

U_ )-%*4 (l.

*ox

- JN)

Page 26: -A109D 641 T8MANSHOP2 AUG~jlI PROGRAN O0C AmLNTt VA … · -a109d 641 t8manshop2 aug~jli p87(u) ada joint progran 1/4 ad119 41 o0c amlntt va 2au gb unclassified f/c 12/5 ml

Lf 01

C',

0 a~

__0' 0.

c" E L

:i 4,--.jc f #j#~-~-0

L) 0

Page 27: -A109D 641 T8MANSHOP2 AUG~jlI PROGRAN O0C AmLNTt VA … · -a109d 641 t8manshop2 aug~jli p87(u) ada joint progran 1/4 ad119 41 o0c amlntt va 2au gb unclassified f/c 12/5 ml

-l)j

0E0

0)

00

E4 3

Z 0©o -

00

C 00-Jr-

Page 28: -A109D 641 T8MANSHOP2 AUG~jlI PROGRAN O0C AmLNTt VA … · -a109d 641 t8manshop2 aug~jli p87(u) ada joint progran 1/4 ad119 41 o0c amlntt va 2au gb unclassified f/c 12/5 ml

- '9- - -~- - - ~------ -

E0 -4-1'

0 c 0

U)) a)4- ) C/L0

E0 0o-x 0 04a) Lc)-E

Page 29: -A109D 641 T8MANSHOP2 AUG~jlI PROGRAN O0C AmLNTt VA … · -a109d 641 t8manshop2 aug~jli p87(u) ada joint progran 1/4 ad119 41 o0c amlntt va 2au gb unclassified f/c 12/5 ml

Cl

00

0

0

U) _0

E 0

a) CU) 0-U))

00 0o E~ cEZ a) 0

E w' a) ' 4

o >,L~ 0 0- 00n n )

Page 30: -A109D 641 T8MANSHOP2 AUG~jlI PROGRAN O0C AmLNTt VA … · -a109d 641 t8manshop2 aug~jli p87(u) ada joint progran 1/4 ad119 41 o0c amlntt va 2au gb unclassified f/c 12/5 ml

4--o

CO a_ 0) 01

Z 0 E~

o WU)

0I ) 0XO -c 0 wc- 6E ) E o

0 -c C0)

0 0 c< Q) <o LL

Page 31: -A109D 641 T8MANSHOP2 AUG~jlI PROGRAN O0C AmLNTt VA … · -a109d 641 t8manshop2 aug~jli p87(u) ada joint progran 1/4 ad119 41 o0c amlntt va 2au gb unclassified f/c 12/5 ml

0

00

j Z

0 . u w - cyNs4

0>CL wg 0,CZ 0

WU C/) -1cZWj * *W 0< z Jm

0 LL CL C/

zo o0 C) ui L C,

W //

0) CC.

&--VCL (I

Page 32: -A109D 641 T8MANSHOP2 AUG~jlI PROGRAN O0C AmLNTt VA … · -a109d 641 t8manshop2 aug~jli p87(u) ada joint progran 1/4 ad119 41 o0c amlntt va 2au gb unclassified f/c 12/5 ml

A PRACTICAL SOLUTION

Ada

Ada and Software Engineering

* They Aren't the Same Thing

* Ada Has Unique Features That

Facilitates Software Engineering

You CAN Write Bad Code in Ada

Ada is NOT the Total Answer

USAISEC

Page 33: -A109D 641 T8MANSHOP2 AUG~jlI PROGRAN O0C AmLNTt VA … · -a109d 641 t8manshop2 aug~jli p87(u) ada joint progran 1/4 ad119 41 o0c amlntt va 2au gb unclassified f/c 12/5 ml

0m) 'II 0

V) 0I

CIE Eo

~CD 0/ C0) z 0

Eo 0 w F-_W

- Co > o zZQ

o E 0 0Ow (m 0 =

0 z

I-U)

Page 34: -A109D 641 T8MANSHOP2 AUG~jlI PROGRAN O0C AmLNTt VA … · -a109d 641 t8manshop2 aug~jli p87(u) ada joint progran 1/4 ad119 41 o0c amlntt va 2au gb unclassified f/c 12/5 ml

4-

E

o --

'44- -0

0o 0

4- 0

E0 _ E-4-1 E -oC

o 0 _00

> 0

4- 0

4-j-4-

C) 0) (0- E )UQ) 0 0 0 (0- LLu

Page 35: -A109D 641 T8MANSHOP2 AUG~jlI PROGRAN O0C AmLNTt VA … · -a109d 641 t8manshop2 aug~jli p87(u) ada joint progran 1/4 ad119 41 o0c amlntt va 2au gb unclassified f/c 12/5 ml

SOFTWARE ENGINEERING

* Goals of Software Engineering

* Principles of Software Engineering

Page 36: -A109D 641 T8MANSHOP2 AUG~jlI PROGRAN O0C AmLNTt VA … · -a109d 641 t8manshop2 aug~jli p87(u) ada joint progran 1/4 ad119 41 o0c amlntt va 2au gb unclassified f/c 12/5 ml

LI

LIAJ

ID

co

Page 37: -A109D 641 T8MANSHOP2 AUG~jlI PROGRAN O0C AmLNTt VA … · -a109d 641 t8manshop2 aug~jli p87(u) ada joint progran 1/4 ad119 41 o0c amlntt va 2au gb unclassified f/c 12/5 ml

0

z

zc

0 0 0 -E

4 J

0 N

o o 0 0

(O < 0 u

cn C)Co J - 9 (CfD* * *

(9

Page 38: -A109D 641 T8MANSHOP2 AUG~jlI PROGRAN O0C AmLNTt VA … · -a109d 641 t8manshop2 aug~jli p87(u) ada joint progran 1/4 ad119 41 o0c amlntt va 2au gb unclassified f/c 12/5 ml

C)U-4'

Q-)

a)

0- Q)

Q))

CC

4- x0

L2 E2-4-1

cn ~ -0~ -

0 0--

00

4U1 -4'a

00

14-- aa) a)

Page 39: -A109D 641 T8MANSHOP2 AUG~jlI PROGRAN O0C AmLNTt VA … · -a109d 641 t8manshop2 aug~jli p87(u) ada joint progran 1/4 ad119 41 o0c amlntt va 2au gb unclassified f/c 12/5 ml

00

0 00

Aft

Page 40: -A109D 641 T8MANSHOP2 AUG~jlI PROGRAN O0C AmLNTt VA … · -a109d 641 t8manshop2 aug~jli p87(u) ada joint progran 1/4 ad119 41 o0c amlntt va 2au gb unclassified f/c 12/5 ml

:3U)C)00

4-i U 0

0

V2 00 V

Z 0 cN-- C) _D'N

0y 0 L ) 0 C

NtI 0 0'IuC) - U)

0 0

_

-j

c4Uj 0 0-

n n0

Am,

Page 41: -A109D 641 T8MANSHOP2 AUG~jlI PROGRAN O0C AmLNTt VA … · -a109d 641 t8manshop2 aug~jli p87(u) ada joint progran 1/4 ad119 41 o0c amlntt va 2au gb unclassified f/c 12/5 ml

E-'E

C 4" 1

4-o >, >C,

(00

UCl

0

00 o4- 0 0,

0 co

0 C_ 0" 0

-0 Co0 - C)_ Uc 0

CO - > .DC0 0 Q 0- Z z

Page 42: -A109D 641 T8MANSHOP2 AUG~jlI PROGRAN O0C AmLNTt VA … · -a109d 641 t8manshop2 aug~jli p87(u) ada joint progran 1/4 ad119 41 o0c amlntt va 2au gb unclassified f/c 12/5 ml

FEATURES OF Ada

Supports Large System Development

Supports Structured Programming

* Supports Top-Dovn Development

Supports Strong Data Typing

* Supports Data Abstraction

Supports Information Riding and

Data Encapsulation

Am& ,•.. . |

Page 43: -A109D 641 T8MANSHOP2 AUG~jlI PROGRAN O0C AmLNTt VA … · -a109d 641 t8manshop2 aug~jli p87(u) ada joint progran 1/4 ad119 41 o0c amlntt va 2au gb unclassified f/c 12/5 ml

-co w - -~ - -

z E

Z0~4--Z0

04--j

z•4-- E4jL0 -D

mjn

0- -4-jiC/D 0co

Page 44: -A109D 641 T8MANSHOP2 AUG~jlI PROGRAN O0C AmLNTt VA … · -a109d 641 t8manshop2 aug~jli p87(u) ada joint progran 1/4 ad119 41 o0c amlntt va 2au gb unclassified f/c 12/5 ml

4-j 0- L.

U) 0 '-4-

0 c U)00

00

-4-, 0 0

4-j

U 0 0-4-4, '-- U

C 0 - 0

-~ 0

0 C:00 0 Q

40 4- 4- 00

aof0

Page 45: -A109D 641 T8MANSHOP2 AUG~jlI PROGRAN O0C AmLNTt VA … · -a109d 641 t8manshop2 aug~jli p87(u) ada joint progran 1/4 ad119 41 o0c amlntt va 2au gb unclassified f/c 12/5 ml

. ) ..... ..

04I

0

L. (D

0) W)

o C

-4

0 00D 0

-0 E. J0 L

LO -n a-0

Page 46: -A109D 641 T8MANSHOP2 AUG~jlI PROGRAN O0C AmLNTt VA … · -a109d 641 t8manshop2 aug~jli p87(u) ada joint progran 1/4 ad119 41 o0c amlntt va 2au gb unclassified f/c 12/5 ml

-4-J

0 - 0

-4--, c

u Q))

-4-4-0

4-1.--0 W

0 CC )4_

< 00

Page 47: -A109D 641 T8MANSHOP2 AUG~jlI PROGRAN O0C AmLNTt VA … · -a109d 641 t8manshop2 aug~jli p87(u) ada joint progran 1/4 ad119 41 o0c amlntt va 2au gb unclassified f/c 12/5 ml

0

C0 0 Q0 E)

(1)1

-4-4--0

V))

<4-J4-j

U) U

< CEL0

0 L-%4

4-'4-

0 0C) Li

Page 48: -A109D 641 T8MANSHOP2 AUG~jlI PROGRAN O0C AmLNTt VA … · -a109d 641 t8manshop2 aug~jli p87(u) ada joint progran 1/4 ad119 41 o0c amlntt va 2au gb unclassified f/c 12/5 ml

0 - 0

U) E

0

0 !)

L- 00) 0

0o <DL

0 H-

cn

Page 49: -A109D 641 T8MANSHOP2 AUG~jlI PROGRAN O0C AmLNTt VA … · -a109d 641 t8manshop2 aug~jli p87(u) ada joint progran 1/4 ad119 41 o0c amlntt va 2au gb unclassified f/c 12/5 ml

~0

-QQC

0

-b-I~ -K .--

0

(I))

0 C:

oo 0

SaQ) E Cm04.- L. -4--

C C CL 0o a, a0L

Page 50: -A109D 641 T8MANSHOP2 AUG~jlI PROGRAN O0C AmLNTt VA … · -a109d 641 t8manshop2 aug~jli p87(u) ada joint progran 1/4 ad119 41 o0c amlntt va 2au gb unclassified f/c 12/5 ml

C)

0 . 0

CDC

L)U

W) Q)_

00 09 Q

E ~

Page 51: -A109D 641 T8MANSHOP2 AUG~jlI PROGRAN O0C AmLNTt VA … · -a109d 641 t8manshop2 aug~jli p87(u) ada joint progran 1/4 ad119 41 o0c amlntt va 2au gb unclassified f/c 12/5 ml

zcm 0I

0 U > .. iQ -0 cc no-0 0~ L.

U)3

(n -i.-, U)

E 0a

m E u2

CJD U) ) 0-on cnU <U)

Page 52: -A109D 641 T8MANSHOP2 AUG~jlI PROGRAN O0C AmLNTt VA … · -a109d 641 t8manshop2 aug~jli p87(u) ada joint progran 1/4 ad119 41 o0c amlntt va 2au gb unclassified f/c 12/5 ml

_3 0

-4-,

0-

ii E

0 0 0

0-E

U) _I

Q).L

0 G U)V ___l

N-)-->,irni -

< U)

Page 53: -A109D 641 T8MANSHOP2 AUG~jlI PROGRAN O0C AmLNTt VA … · -a109d 641 t8manshop2 aug~jli p87(u) ada joint progran 1/4 ad119 41 o0c amlntt va 2au gb unclassified f/c 12/5 ml

0 0O

'-4-- O -.-

25 o (1)-

-o U) D -

co

0 c-

o ._C _

-U _00 -o©U)Q 00 0- ,,

000 _~c

< E -0o* % .-..

Page 54: -A109D 641 T8MANSHOP2 AUG~jlI PROGRAN O0C AmLNTt VA … · -a109d 641 t8manshop2 aug~jli p87(u) ada joint progran 1/4 ad119 41 o0c amlntt va 2au gb unclassified f/c 12/5 ml

-~~~~ ....-.- - _ _ _ _o

z Lz L

00

LUL

z D

LLU

0 0 NO0

Page 55: -A109D 641 T8MANSHOP2 AUG~jlI PROGRAN O0C AmLNTt VA … · -a109d 641 t8manshop2 aug~jli p87(u) ada joint progran 1/4 ad119 41 o0c amlntt va 2au gb unclassified f/c 12/5 ml

U4-00

0_

0 0Wz>

00Ju

U))

0n C:0

00<

Page 56: -A109D 641 T8MANSHOP2 AUG~jlI PROGRAN O0C AmLNTt VA … · -a109d 641 t8manshop2 aug~jli p87(u) ada joint progran 1/4 ad119 41 o0c amlntt va 2au gb unclassified f/c 12/5 ml

0 0

-4-4--0

Q 00C)_

o) 00 00~ U U

Q) --- d4--

E 0 E 0

C ") 0 ) v u -C- 0C V : -0-

2p a-00

< E C

Page 57: -A109D 641 T8MANSHOP2 AUG~jlI PROGRAN O0C AmLNTt VA … · -a109d 641 t8manshop2 aug~jli p87(u) ada joint progran 1/4 ad119 41 o0c amlntt va 2au gb unclassified f/c 12/5 ml

MAJOR FEATURES OF Ada

* Packages * Tasks

* Strong Typing * Exceptions

* Typing Structures * Generics

* Data Abstraction

Page 58: -A109D 641 T8MANSHOP2 AUG~jlI PROGRAN O0C AmLNTt VA … · -a109d 641 t8manshop2 aug~jli p87(u) ada joint progran 1/4 ad119 41 o0c amlntt va 2au gb unclassified f/c 12/5 ml

PACKAGES

* Definition

* Components of a Package

-- Specification

-- Body

*Goals and Principles of Software

Engineering Supported

Page 59: -A109D 641 T8MANSHOP2 AUG~jlI PROGRAN O0C AmLNTt VA … · -a109d 641 t8manshop2 aug~jli p87(u) ada joint progran 1/4 ad119 41 o0c amlntt va 2au gb unclassified f/c 12/5 ml

C

CI

<04

]r"

-- 0

o 0

+ _4-,0o _ +,i

._. -y _ L__ ___

< 0

0Aft

5 . - 0 ,._H.,.'

K) -t: -F- -' '

-K --- 4

.. . ... . . ... .0 Ir ) 0.. .... ..

Page 60: -A109D 641 T8MANSHOP2 AUG~jlI PROGRAN O0C AmLNTt VA … · -a109d 641 t8manshop2 aug~jli p87(u) ada joint progran 1/4 ad119 41 o0c amlntt va 2au gb unclassified f/c 12/5 ml

--- U

0 - ___--

-~ F4~J

0 I

iiItt.~J.~' I,

U0 0

~0C/D r -~ r~-~f ~ L.. i

cr)~20o 0

0 -0L. ~f)0 0

U

(-)o .~0 V

0 ~-- 0 -'-'

Co0 -~-~ 0 '4-

Oo rn0 ~- >~0

- Io~ w ~II

* * * 7Jlit

Page 61: -A109D 641 T8MANSHOP2 AUG~jlI PROGRAN O0C AmLNTt VA … · -a109d 641 t8manshop2 aug~jli p87(u) ada joint progran 1/4 ad119 41 o0c amlntt va 2au gb unclassified f/c 12/5 ml

Ld

p ~LLJ<Z

CL LLLJ*-U

CLD

roo-jo<

... Q ) 0 0

OIJ 0 cn,0o0 0

0 W

Z' C/)Q0 o) a 0

0-0LLLJ (/

Page 62: -A109D 641 T8MANSHOP2 AUG~jlI PROGRAN O0C AmLNTt VA … · -a109d 641 t8manshop2 aug~jli p87(u) ada joint progran 1/4 ad119 41 o0c amlntt va 2au gb unclassified f/c 12/5 ml

A A

IIr

0 :0 J.0:

0 0 0

CY 00~00

0 0(D

a3 - 00000000

0 L0o L_ 0 0 00

Page 63: -A109D 641 T8MANSHOP2 AUG~jlI PROGRAN O0C AmLNTt VA … · -a109d 641 t8manshop2 aug~jli p87(u) ada joint progran 1/4 ad119 41 o0c amlntt va 2au gb unclassified f/c 12/5 ml

E

4-)o co t 0-

- Q c U ) 0

Q)00 :>o) - 4~-J _) - t -c

- 0 u0j ' 0: j

0i C) c )Q)~ E c L 0

-IE1I 0 Q r-, )>0nr. Q) Q) )

C)Eu : :

Page 64: -A109D 641 T8MANSHOP2 AUG~jlI PROGRAN O0C AmLNTt VA … · -a109d 641 t8manshop2 aug~jli p87(u) ada joint progran 1/4 ad119 41 o0c amlntt va 2au gb unclassified f/c 12/5 ml

N U)

4-jJ 0 -0

.+--c-~ 0

o-- -< ::DL O

Page 65: -A109D 641 T8MANSHOP2 AUG~jlI PROGRAN O0C AmLNTt VA … · -a109d 641 t8manshop2 aug~jli p87(u) ada joint progran 1/4 ad119 41 o0c amlntt va 2au gb unclassified f/c 12/5 ml

STRONG TYPING

R aw Materials for Software Engineering

*Effects of Strong Typing

*Goals and Principles of SoftwareEngineering Supported

Page 66: -A109D 641 T8MANSHOP2 AUG~jlI PROGRAN O0C AmLNTt VA … · -a109d 641 t8manshop2 aug~jli p87(u) ada joint progran 1/4 ad119 41 o0c amlntt va 2au gb unclassified f/c 12/5 ml

C CL

L- 0)C

0) 0Cf)00

Z E_0 0

C lC-- z

U) LU

0* zEn xC) 0 z

Q)U

Page 67: -A109D 641 T8MANSHOP2 AUG~jlI PROGRAN O0C AmLNTt VA … · -a109d 641 t8manshop2 aug~jli p87(u) ada joint progran 1/4 ad119 41 o0c amlntt va 2au gb unclassified f/c 12/5 ml

cfU)

00

CJ))EU

Q)l4-ao

0 U0

Q) 4

E 0)

Page 68: -A109D 641 T8MANSHOP2 AUG~jlI PROGRAN O0C AmLNTt VA … · -a109d 641 t8manshop2 aug~jli p87(u) ada joint progran 1/4 ad119 41 o0c amlntt va 2au gb unclassified f/c 12/5 ml

CDDC3 CloCC00

-4 -

))

Page 69: -A109D 641 T8MANSHOP2 AUG~jlI PROGRAN O0C AmLNTt VA … · -a109d 641 t8manshop2 aug~jli p87(u) ada joint progran 1/4 ad119 41 o0c amlntt va 2au gb unclassified f/c 12/5 ml

CC

zo-J

C00

44J

cn U)

Q)

0N-

CL

Page 70: -A109D 641 T8MANSHOP2 AUG~jlI PROGRAN O0C AmLNTt VA … · -a109d 641 t8manshop2 aug~jli p87(u) ada joint progran 1/4 ad119 41 o0c amlntt va 2au gb unclassified f/c 12/5 ml

0 c0

D 4J

4o 0

~0

00C) 0

4-1-U)~ 0 0)

__Q C) %- D

Z 0 0 0.2 ) -4- E4-0

o 0

0-L n

Page 71: -A109D 641 T8MANSHOP2 AUG~jlI PROGRAN O0C AmLNTt VA … · -a109d 641 t8manshop2 aug~jli p87(u) ada joint progran 1/4 ad119 41 o0c amlntt va 2au gb unclassified f/c 12/5 ml

- -E -0

Ox

0

o -Y) +

0 - o *- (1 ,aoL- z L

C E 0 a 0 C: CLO

-I- LLJ IUZ

U)~ E Cal J H- L

0- _j0 -- 0 I

0a) GOL cH- L z

a, -1o- 1<0u ~0

Page 72: -A109D 641 T8MANSHOP2 AUG~jlI PROGRAN O0C AmLNTt VA … · -a109d 641 t8manshop2 aug~jli p87(u) ada joint progran 1/4 ad119 41 o0c amlntt va 2au gb unclassified f/c 12/5 ml

TYPING STRUCTURES

* Discrete Data Types

-- Enumeration

-- Integer

Real Data Types

-- Fixed point ( Absolute Error )

-- Floating Point ( Relative Error )

Composite Types

-- Arrays ( Homogeneous )

-- Records ( Heterogeneous )

Dynamic Types

-- Access Types

Abstract Data Types

-- Private

-- Limited Private

Page 73: -A109D 641 T8MANSHOP2 AUG~jlI PROGRAN O0C AmLNTt VA … · -a109d 641 t8manshop2 aug~jli p87(u) ada joint progran 1/4 ad119 41 o0c amlntt va 2au gb unclassified f/c 12/5 ml

Q-

Q)l

00

> I

Page 74: -A109D 641 T8MANSHOP2 AUG~jlI PROGRAN O0C AmLNTt VA … · -a109d 641 t8manshop2 aug~jli p87(u) ada joint progran 1/4 ad119 41 o0c amlntt va 2au gb unclassified f/c 12/5 ml

0 4- -

~0 U)

~0-

E )U L 0U

:D- Q00 C

c -4--) 0 C)U

LIE0-c E<I ~I 1 E

C,-) 0 *>*

Page 75: -A109D 641 T8MANSHOP2 AUG~jlI PROGRAN O0C AmLNTt VA … · -a109d 641 t8manshop2 aug~jli p87(u) ada joint progran 1/4 ad119 41 o0c amlntt va 2au gb unclassified f/c 12/5 ml

00 000 1

> 00

0) 104% . ' I I

Q0 L.

0 ~ : <cLJJ WW

0 LL]LU

L ) -c0 )Lu a

1(f) a)U 0(

Page 76: -A109D 641 T8MANSHOP2 AUG~jlI PROGRAN O0C AmLNTt VA … · -a109d 641 t8manshop2 aug~jli p87(u) ada joint progran 1/4 ad119 41 o0c amlntt va 2au gb unclassified f/c 12/5 ml

Vl)

< L- 0

0 0- 0 <D-CL

WU zI2D

-4-) UJ L-4-j mm i

Q ) LJ LI W V

0D)0

0-4-- Q-LQm _0

C: 0)0 -)C

L.Lj C) CLiD W1 1c0-4j I DLJ

Page 77: -A109D 641 T8MANSHOP2 AUG~jlI PROGRAN O0C AmLNTt VA … · -a109d 641 t8manshop2 aug~jli p87(u) ada joint progran 1/4 ad119 41 o0c amlntt va 2au gb unclassified f/c 12/5 ml

0 4-j

N0 E0 .0

0 a) -;-0 0 0

4-Q 0 N -4-j E

0 0 0 0d

4-j0. 0.)

-0~

X *

a) LUC0) -a

U)i W Of

lID

Page 78: -A109D 641 T8MANSHOP2 AUG~jlI PROGRAN O0C AmLNTt VA … · -a109d 641 t8manshop2 aug~jli p87(u) ada joint progran 1/4 ad119 41 o0c amlntt va 2au gb unclassified f/c 12/5 ml

.. .. ....

00_ 0

.. ~,0

cn Io- 0CD CD1

.- CCD

0 CD

40 _ E0

ocEL 0 -4-'L

*-D L z ol uJ

L. Ld z0 0 () DI LL

Of.M w 0 0LU w -

III L()U

Page 79: -A109D 641 T8MANSHOP2 AUG~jlI PROGRAN O0C AmLNTt VA … · -a109d 641 t8manshop2 aug~jli p87(u) ada joint progran 1/4 ad119 41 o0c amlntt va 2au gb unclassified f/c 12/5 ml

LL -r "R.

(0 -

h~F -CC-Q4

F- a c

o) o 0

CI) 0_ O- S.

0 :D

-V)cz) C)

Page 80: -A109D 641 T8MANSHOP2 AUG~jlI PROGRAN O0C AmLNTt VA … · -a109d 641 t8manshop2 aug~jli p87(u) ada joint progran 1/4 ad119 41 o0c amlntt va 2au gb unclassified f/c 12/5 ml

-0 0 c

Z)0 0

oV)

w m m

bJ= J

0L j z

>->

0< -

0~ ~ ~ 00 :DC

Ql) L-

(..)< 0J 9-I- N0 V) C) Glo 0 0L

0 aJ0 C\ () .0 II 0Ld Mc- rv- cu y Or . L).. -

SV) XLLJJJQ I L.J )->- - zo-LL D<.F~. zOZH-

>. 0< <

a CL a- D- EZLO <<05

45 -61-1 ' 41-.U)

Page 81: -A109D 641 T8MANSHOP2 AUG~jlI PROGRAN O0C AmLNTt VA … · -a109d 641 t8manshop2 aug~jli p87(u) ada joint progran 1/4 ad119 41 o0c amlntt va 2au gb unclassified f/c 12/5 ml

DATA ABSTRACTION

* Definition

* Goals and Principles of SoftwareEngineering Supported

* Baskin-Robbins Ice Cream Example

Page 82: -A109D 641 T8MANSHOP2 AUG~jlI PROGRAN O0C AmLNTt VA … · -a109d 641 t8manshop2 aug~jli p87(u) ada joint progran 1/4 ad119 41 o0c amlntt va 2au gb unclassified f/c 12/5 ml

0

0 4-jI

*F 0

0--

00

0 0:

00>

E E 4-a

E(I) Q0 () 0

00C,) E)0

N- >0 > 0 0u Q))

-JJ WU n

Page 83: -A109D 641 T8MANSHOP2 AUG~jlI PROGRAN O0C AmLNTt VA … · -a109d 641 t8manshop2 aug~jli p87(u) ada joint progran 1/4 ad119 41 o0c amlntt va 2au gb unclassified f/c 12/5 ml

C C

E -_0

EE

-j- _ -

a_

Aft,

Page 84: -A109D 641 T8MANSHOP2 AUG~jlI PROGRAN O0C AmLNTt VA … · -a109d 641 t8manshop2 aug~jli p87(u) ada joint progran 1/4 ad119 41 o0c amlntt va 2au gb unclassified f/c 12/5 ml

Ld

DLLU LLU

0 Z ZC) L

: D 0- :D

00L.L>

m () z Q)

cjj00 _0

0. c 0C))

-Y

00

Page 85: -A109D 641 T8MANSHOP2 AUG~jlI PROGRAN O0C AmLNTt VA … · -a109d 641 t8manshop2 aug~jli p87(u) ada joint progran 1/4 ad119 41 o0c amlntt va 2au gb unclassified f/c 12/5 ml

-C

LUI:2

(1)2;

U J D-0IN :

zL z

LLJD LU

OLO00

4- C)>- 1 U)L 4-

nyV 0-

Page 86: -A109D 641 T8MANSHOP2 AUG~jlI PROGRAN O0C AmLNTt VA … · -a109d 641 t8manshop2 aug~jli p87(u) ada joint progran 1/4 ad119 41 o0c amlntt va 2au gb unclassified f/c 12/5 ml

* dh

LujLuJ mm

-z

LI)Iw X LLJD

UJ ) m 0 0*- 0::

uLu

Lu m00LL IDz D L

ma ) D -L, DUc) 0 Uc ot

Db~ >~*<oc

-a-

Page 87: -A109D 641 T8MANSHOP2 AUG~jlI PROGRAN O0C AmLNTt VA … · -a109d 641 t8manshop2 aug~jli p87(u) ada joint progran 1/4 ad119 41 o0c amlntt va 2au gb unclassified f/c 12/5 ml

(I

=)LLJ

LLJ2L

D4- 0

Lii

V) y-V Li

M) Z

0 ~ - 0>-0

o CLCC0. 0

Page 88: -A109D 641 T8MANSHOP2 AUG~jlI PROGRAN O0C AmLNTt VA … · -a109d 641 t8manshop2 aug~jli p87(u) ada joint progran 1/4 ad119 41 o0c amlntt va 2au gb unclassified f/c 12/5 ml

- ----- ------ -- --

a))-C

w~~ 0zbD

LLii

cr-n 0 0

III a 0-zL L

(-) -mDA*~ .. 0 LJXa)~0 L >

w: LIJ Z V)v n -. c 0 S

~0

0 c

Page 89: -A109D 641 T8MANSHOP2 AUG~jlI PROGRAN O0C AmLNTt VA … · -a109d 641 t8manshop2 aug~jli p87(u) ada joint progran 1/4 ad119 41 o0c amlntt va 2au gb unclassified f/c 12/5 ml

LLL.

~mLLJ W:DLLJcM

m zDD zo Z

> L r

CL LLC

-LL LLJ

V) CxI. V*r Li.Jw

ED V Li L.m z L

-0 0-00D(D Z (L

a CL- 0C cC

>. >,

Page 90: -A109D 641 T8MANSHOP2 AUG~jlI PROGRAN O0C AmLNTt VA … · -a109d 641 t8manshop2 aug~jli p87(u) ada joint progran 1/4 ad119 41 o0c amlntt va 2au gb unclassified f/c 12/5 ml

.4; m

-I-,I

0L6io

4)LL

Lii mOL, .. 0 I:

0 0

.VI J

0 X

U LL CLZw W n 0

Page 91: -A109D 641 T8MANSHOP2 AUG~jlI PROGRAN O0C AmLNTt VA … · -a109d 641 t8manshop2 aug~jli p87(u) ada joint progran 1/4 ad119 41 o0c amlntt va 2au gb unclassified f/c 12/5 ml

TASKS

*Def inition

*Goals and Principles of Software

Engineering Supported

Example

Page 92: -A109D 641 T8MANSHOP2 AUG~jlI PROGRAN O0C AmLNTt VA … · -a109d 641 t8manshop2 aug~jli p87(u) ada joint progran 1/4 ad119 41 o0c amlntt va 2au gb unclassified f/c 12/5 ml

0

-Q) 00-44-j

-0 0

-cn0 4-j -

0

CI)) 0Q)-4-1

C)UE4> Q

EU) U) 00~- -4-7Uc >N 00

CL CLH-cC

Page 93: -A109D 641 T8MANSHOP2 AUG~jlI PROGRAN O0C AmLNTt VA … · -a109d 641 t8manshop2 aug~jli p87(u) ada joint progran 1/4 ad119 41 o0c amlntt va 2au gb unclassified f/c 12/5 ml

00

00 z0 C40

U) 0) L

0L

z- Z o~ 0

flD Lz 2 LU _

LL0 _0~ 0~

Z )V-00 LI C

0 C DLZO 0

LUo~2> 0 C :

) L.00G *v

0L_ (D

Page 94: -A109D 641 T8MANSHOP2 AUG~jlI PROGRAN O0C AmLNTt VA … · -a109d 641 t8manshop2 aug~jli p87(u) ada joint progran 1/4 ad119 41 o0c amlntt va 2au gb unclassified f/c 12/5 ml

0* z

A-w

00

00

0 00 -:;

0I E : (9C- LL -L

Y- 03= (z >,) 0oz :)- -

01 z :3 :D:: -0 -- ,< 0. sr0i Lj- . LC) 0 C, -- 0- ~<ZO

Q ~ c 0

Page 95: -A109D 641 T8MANSHOP2 AUG~jlI PROGRAN O0C AmLNTt VA … · -a109d 641 t8manshop2 aug~jli p87(u) ada joint progran 1/4 ad119 41 o0c amlntt va 2au gb unclassified f/c 12/5 ml

EXCEPTIONS

* Definition

* Goals and Principles of Software

Engineering Supported

Types of Exceptions in Ada

-- Pre-defined Exceptions

-- User-defined Exceptions

* Example

Page 96: -A109D 641 T8MANSHOP2 AUG~jlI PROGRAN O0C AmLNTt VA … · -a109d 641 t8manshop2 aug~jli p87(u) ada joint progran 1/4 ad119 41 o0c amlntt va 2au gb unclassified f/c 12/5 ml

00c00

U) 0

_0 C

0 Q0%+

0 Q) 0

-0 Q)Q

U))

U)_

E 0E

U) Q0 0

0 00 U)

4-1 Q) Q)

%4-->Co 00 --

Lii 00 Q) 4* * * *

Page 97: -A109D 641 T8MANSHOP2 AUG~jlI PROGRAN O0C AmLNTt VA … · -a109d 641 t8manshop2 aug~jli p87(u) ada joint progran 1/4 ad119 41 o0c amlntt va 2au gb unclassified f/c 12/5 ml

0:U0

0 U0

0 U 0

0~ 0Q

00)Cf) c -z 0 0-Co

~CI

0 0

C0 0- 01 4N-4--

C).N -aD-' 0 1'

0 Q) C) U CL 00) 000 C- E

'4- 00QCD L 0

O c (n

0-O 0 C CD - G n ~(n Q 0

C) V) 0 -

Page 98: -A109D 641 T8MANSHOP2 AUG~jlI PROGRAN O0C AmLNTt VA … · -a109d 641 t8manshop2 aug~jli p87(u) ada joint progran 1/4 ad119 41 o0c amlntt va 2au gb unclassified f/c 12/5 ml

-C-

E o

cn~c cn

~) 0 0 0

0

E~-C

Am.-

Page 99: -A109D 641 T8MANSHOP2 AUG~jlI PROGRAN O0C AmLNTt VA … · -a109d 641 t8manshop2 aug~jli p87(u) ada joint progran 1/4 ad119 41 o0c amlntt va 2au gb unclassified f/c 12/5 ml

AD-AL89 641 AUIyhi

~C U 8RAAWOXS 98A 7(l 9U) ADA JOINT PROGRAM 2/4

IJHCLASSIFIED F/G 12/5 ML

Page 100: -A109D 641 T8MANSHOP2 AUG~jlI PROGRAN O0C AmLNTt VA … · -a109d 641 t8manshop2 aug~jli p87(u) ada joint progran 1/4 ad119 41 o0c amlntt va 2au gb unclassified f/c 12/5 ml

I- ~ 2.2

t-

-11 I 2 -0

II11 - III

i.25 1., 1.6

MICROCOP Y PSOLUIiON 1IS, CHAO

iR

Page 101: -A109D 641 T8MANSHOP2 AUG~jlI PROGRAN O0C AmLNTt VA … · -a109d 641 t8manshop2 aug~jli p87(u) ada joint progran 1/4 ad119 41 o0c amlntt va 2au gb unclassified f/c 12/5 ml

CL

4) 4)

0

C o3:

r' CILc 0 0

c) *LJ3J Z: D0L

C) al~ m0E-CLCC1

Page 102: -A109D 641 T8MANSHOP2 AUG~jlI PROGRAN O0C AmLNTt VA … · -a109d 641 t8manshop2 aug~jli p87(u) ada joint progran 1/4 ad119 41 o0c amlntt va 2au gb unclassified f/c 12/5 ml

0 (D

*0*L 7- L 0

w Euj

C)

0~0c L

W

Page 103: -A109D 641 T8MANSHOP2 AUG~jlI PROGRAN O0C AmLNTt VA … · -a109d 641 t8manshop2 aug~jli p87(u) ada joint progran 1/4 ad119 41 o0c amlntt va 2au gb unclassified f/c 12/5 ml

GENERICS

* Definition

* Goals and Principles of Software

Engineering Supported

* Example of Generic Unit Use

In li III I I AND.ii

Page 104: -A109D 641 T8MANSHOP2 AUG~jlI PROGRAN O0C AmLNTt VA … · -a109d 641 t8manshop2 aug~jli p87(u) ada joint progran 1/4 ad119 41 o0c amlntt va 2au gb unclassified f/c 12/5 ml

I-

00

83 L

a4-J

CC

C-7J EI_y -- -4 - - - - - -) 0 .

U a-E L

-I-,_ _ ~ I

I,!C <--''

Page 105: -A109D 641 T8MANSHOP2 AUG~jlI PROGRAN O0C AmLNTt VA … · -a109d 641 t8manshop2 aug~jli p87(u) ada joint progran 1/4 ad119 41 o0c amlntt va 2au gb unclassified f/c 12/5 ml

C-)-

C!)>

0) -0 -

Z Q)

N- Q)

QN U

ry v)

0Am0

Page 106: -A109D 641 T8MANSHOP2 AUG~jlI PROGRAN O0C AmLNTt VA … · -a109d 641 t8manshop2 aug~jli p87(u) ada joint progran 1/4 ad119 41 o0c amlntt va 2au gb unclassified f/c 12/5 ml

LUIWI

o LUwcn 0 :0-z LU0L

Cf2 LU0

Cf) 0

<) CC 0ho'

0 L0 CL: U -

F- LUz I- L

0 I-

V C

Page 107: -A109D 641 T8MANSHOP2 AUG~jlI PROGRAN O0C AmLNTt VA … · -a109d 641 t8manshop2 aug~jli p87(u) ada joint progran 1/4 ad119 41 o0c amlntt va 2au gb unclassified f/c 12/5 ml

-j M

LUd0H

Z

- :3-4-

LLLUo L

U)I ) L

a) CL a

>% LUJ LLJHHi

0 ~~ ~ 0L< <U 1

L. L 0ULU

-Auk 3 ) - _ H f

Page 108: -A109D 641 T8MANSHOP2 AUG~jlI PROGRAN O0C AmLNTt VA … · -a109d 641 t8manshop2 aug~jli p87(u) ada joint progran 1/4 ad119 41 o0c amlntt va 2au gb unclassified f/c 12/5 ml

Ld

LLc0 <

CL <HO

U))

a- Ld<H

< Z.-: z

W) Ll Lj C.C3 LZJ C)

00) ~j C- *%10-) C) D C

C. 00LL

-0 . .- V- L< <

Page 109: -A109D 641 T8MANSHOP2 AUG~jlI PROGRAN O0C AmLNTt VA … · -a109d 641 t8manshop2 aug~jli p87(u) ada joint progran 1/4 ad119 41 o0c amlntt va 2au gb unclassified f/c 12/5 ml

-~~~~ ~ - ------ ---------- - - - I . *1~

SUMMARY

* Basic Problem

-- Projection to the 1990's

-- A Macro Solution

A A Practical Solution

-- Software Engineering

-- Ada

* Software Engineering

-- Goals

-- Principles

• Why Ada ?

-- Features of Ada

-- Software Engineering

Applications

Page 110: -A109D 641 T8MANSHOP2 AUG~jlI PROGRAN O0C AmLNTt VA … · -a109d 641 t8manshop2 aug~jli p87(u) ada joint progran 1/4 ad119 41 o0c amlntt va 2au gb unclassified f/c 12/5 ml

z

C4 z ZZ LLJ M

<~ 0

C) ~DQOL < ZWV

Lz 2Oo jry F OUJ LHD x * *L * * *

Q<

Page 111: -A109D 641 T8MANSHOP2 AUG~jlI PROGRAN O0C AmLNTt VA … · -a109d 641 t8manshop2 aug~jli p87(u) ada joint progran 1/4 ad119 41 o0c amlntt va 2au gb unclassified f/c 12/5 ml

Uo <0d M

U) MQL :7jZ V<k

Wn:D ZI X0 ZV) CLOOE

*) *- 0 *- * *2zEL

Page 112: -A109D 641 T8MANSHOP2 AUG~jlI PROGRAN O0C AmLNTt VA … · -a109d 641 t8manshop2 aug~jli p87(u) ada joint progran 1/4 ad119 41 o0c amlntt va 2au gb unclassified f/c 12/5 ml

0 0z

U) V)H-- E_4U

U) 04 z Z lm 0 0 z

C) __JO Q Z<Q V

E- t < 0 LL < C)L

Page 113: -A109D 641 T8MANSHOP2 AUG~jlI PROGRAN O0C AmLNTt VA … · -a109d 641 t8manshop2 aug~jli p87(u) ada joint progran 1/4 ad119 41 o0c amlntt va 2au gb unclassified f/c 12/5 ml

Cl))ZZ 0

< MLz ZZW

C12 ~ D.OjN MOZZO< Ofu-zOf:D O 0 - -I LL < L)DLQ< * LL * *

Page 114: -A109D 641 T8MANSHOP2 AUG~jlI PROGRAN O0C AmLNTt VA … · -a109d 641 t8manshop2 aug~jli p87(u) ada joint progran 1/4 ad119 41 o0c amlntt va 2au gb unclassified f/c 12/5 ml

0<

LUJ

HLL <~Z o <Q< b**

Page 115: -A109D 641 T8MANSHOP2 AUG~jlI PROGRAN O0C AmLNTt VA … · -a109d 641 t8manshop2 aug~jli p87(u) ada joint progran 1/4 ad119 41 o0c amlntt va 2au gb unclassified f/c 12/5 ml

zz

0 o zo OWZP= P= Ld b

QL < *

Page 116: -A109D 641 T8MANSHOP2 AUG~jlI PROGRAN O0C AmLNTt VA … · -a109d 641 t8manshop2 aug~jli p87(u) ada joint progran 1/4 ad119 41 o0c amlntt va 2au gb unclassified f/c 12/5 ml

Ada Generics

Part of the

Advanced Ada Workshop

Sponsored by theAda Software Engineering Education & Training Team

(ASEET)

John BaileySoftware Metrics, Inc.

703-533-8300Jbailey at Ada20

18 August 198?

Page 117: -A109D 641 T8MANSHOP2 AUG~jlI PROGRAN O0C AmLNTt VA … · -a109d 641 t8manshop2 aug~jli p87(u) ada joint progran 1/4 ad119 41 o0c amlntt va 2au gb unclassified f/c 12/5 ml

Outline

1. RationaleAre generics really necessary in Ada?What can they do?

2. Syntax and SemanticsGeneric parametersInstantiationCompared with other Ada units

3. ExamplesSee how simple they can be.See how useful they can be.See how complicated they can be.

4. LimitationsSome generalization is not easy.Some generalization Is not possible.

5. Advanced UsageRetrofitting genericsGeneralization Judgement calls

. . ... .......... ... .. .. . - -- -- ,.., ,. . lkb ,m m m nl I

Page 118: -A109D 641 T8MANSHOP2 AUG~jlI PROGRAN O0C AmLNTt VA … · -a109d 641 t8manshop2 aug~jli p87(u) ada joint progran 1/4 ad119 41 o0c amlntt va 2au gb unclassified f/c 12/5 ml

1. Rationale

Are generics really necessary?

Ada language goals:Encapsulation of processing desiredEncapsulation of resources (objects) desiredUser-defined types desiredStrong, static type checking desiredUnnecessary language features not desiredReusability desired

Other languages answer some of these goals, but not all.

FortranEncapsulation of processing supportedEncapsulation of resources (mostly)No user-defined typesNo static type checkingI/O routines part of language definitionSome reusability support

PascalEncapsulation of processing supportedNo encapsulation of resourcesUser-defined typesStrong, static type checking (with loopholes)I/O routines part of language definitionNo reusability support

SmalltalkEncapsulation of processing supportedEncapsulation of resources supportedUser-defined types supportedNo static type checkingOnly primitive I/O language-definedExcellent reusability support

Page 119: -A109D 641 T8MANSHOP2 AUG~jlI PROGRAN O0C AmLNTt VA … · -a109d 641 t8manshop2 aug~jli p87(u) ada joint progran 1/4 ad119 41 o0c amlntt va 2au gb unclassified f/c 12/5 ml

Generics Are Solution

Some of the above goals appear to be in conflict:

Reusability vs. Strong static type checking -- ?

type UserType is new Integer;procedure Increment (X : in out UserType) Isbegin

X:= X + 1;end Increment;

Cannot reuse Increment anywhere else.

* Strong checking vs. Minimal language -- ?

type User_Type is new Integer;X: UserType;I : Integer;Put (X); - for strong checking, thesePut (I); - must be distinct "Put's"

Pascal solves this with "magic" I/O procedures- extended language

Write (X);Write (I);Write (X, I);Write ('The answer is ', X,' or', I);

Smalltalk provides primitive I/O with each new typeMight not be wanted.Does not provide static checkingThis allows great flexibility but can lead to

runtime errors that could have beenavoided by compilation-time checking

Page 120: -A109D 641 T8MANSHOP2 AUG~jlI PROGRAN O0C AmLNTt VA … · -a109d 641 t8manshop2 aug~jli p87(u) ada joint progran 1/4 ad119 41 o0c amlntt va 2au gb unclassified f/c 12/5 ml

The Case for Generics

Ada generics allow excellent compromise

Minimal additional complexity

Encapsulation of processingGeneric subprograms

Encapsulation of resources (objects)Generic packages

User-defined types desiredStrong, static type checking desired

Unnecessary language features avoidedI/O not part of language (rather, partof the standard environment)

Reusability supportedReasonable flexibilityCapability to separate essential detail

of an algorithm or object fromproblem-specific detail

(Hint: that last point Is the essence of generic programming)

ink.. •••m ~ iH•ii H H•

Page 121: -A109D 641 T8MANSHOP2 AUG~jlI PROGRAN O0C AmLNTt VA … · -a109d 641 t8manshop2 aug~jli p87(u) ada joint progran 1/4 ad119 41 o0c amlntt va 2au gb unclassified f/c 12/5 ml

I - ... . -. I

What can Generics Do?

Consider the rationale for programming anything:

A programmed solution:Generalizes over several occurrencesAppropriate if similar processing,

but with varying values

Typical programs contain:

* Conceptual "chunks" related to the generalproblem class:AlgorithmsObjects or classes of objects

* Details about the specific problemSpecific typesSpecific routines, such as error recoverySpecific data flow designs

- At run time, a specific case is handledValues specific to a given run are usedSame program is "reused" with next set

of values

Likewise, generic programming uses:

* Conceptual chunks, object classes

* Problem-specifics

" Run-time specifics

Page 122: -A109D 641 T8MANSHOP2 AUG~jlI PROGRAN O0C AmLNTt VA … · -a109d 641 t8manshop2 aug~jli p87(u) ada joint progran 1/4 ad119 41 o0c amlntt va 2au gb unclassified f/c 12/5 ml

Traditional Programming - Diagram

Algorithms, Objects, Resources

- Intertwined with - -

Problem-specific declarations

package Useful-Object is

type Specific_Type is (Something_or_other);

procedure DoSomething (To: Specific_Type);

function StatusOf (AnObjectOf : Specific-Type)return PredefinedTypeerhaps;

end UsefulObject;

Page 123: -A109D 641 T8MANSHOP2 AUG~jlI PROGRAN O0C AmLNTt VA … · -a109d 641 t8manshop2 aug~jli p87(u) ada joint progran 1/4 ad119 41 o0c amlntt va 2au gb unclassified f/c 12/5 ml

Generic Programming - Diagram

application-domain application-domainalgorithms object classes

problem-specific declarations

problem-specific processing

Instantlations of the application-domainchunks (above the dashed line)

generic

type Formal_Type is private;

package General-Object is

procedure DoSomething (To: FormalType);

function Status-Of (AnObjectOf : Formal-Type)return PredefinedTypePerhaps;

end GeneralObject;

type Specific-Type is (Somethingor other);

package Useful-Object Is newGeneral-Object (SpecificType);

Page 124: -A109D 641 T8MANSHOP2 AUG~jlI PROGRAN O0C AmLNTt VA … · -a109d 641 t8manshop2 aug~jli p87(u) ada joint progran 1/4 ad119 41 o0c amlntt va 2au gb unclassified f/c 12/5 ml

Another Quick Example

Frequently, the following occurs in Ada programs:

package GlobalTypes istype Useful Is (This, That, TheOther);

end Global Types;

with GlobalTypes;package Service is

procedure Operation(On : Global_Types.Useful);

end Service;

with GlobalTypes;with Service;procedure User is

MyObject : GlobalTypes.Useful;begin

Service.Operation (MyObject);end User;

Cannot separately use Service without also usingGlobal-Types due to visibility requirements.

Page 125: -A109D 641 T8MANSHOP2 AUG~jlI PROGRAN O0C AmLNTt VA … · -a109d 641 t8manshop2 aug~jli p87(u) ada joint progran 1/4 ad119 41 o0c amlntt va 2au gb unclassified f/c 12/5 ml

Alternative, Equivalent Program

package Global_Types istype Useful is (Whatever);

end GlobalTypes;

- no context clausegeneric

type Formal is private;package GeneralService is

procedure Operation (On : Formal);end GeneralService;

with Service;with Global_Types;procedure User Is

MyObject : GlobalTypes.Useful;package Service Is new

GeneralService (GlobalTypes. Useful);begin

Service.Operation (MyObject);end User;

Now, GeneralService can be reused withoutGlobal_Types.

Just as a program becomes a specific case for agiven run, a generic program is InstantiatedInto a specific case for a given program.

. . .. n (k~~~~m ,mmw mmmm m •m

Page 126: -A109D 641 T8MANSHOP2 AUG~jlI PROGRAN O0C AmLNTt VA … · -a109d 641 t8manshop2 aug~jli p87(u) ada joint progran 1/4 ad119 41 o0c amlntt va 2au gb unclassified f/c 12/5 ml

Another Reason Generics are Unavoidable

With only predefined types, reusability is simplified:

function Math Operation (X : Real) return Real;

If users only have type Real for floating point,the above function Is always usable

However:

Ada allows user-defined types, such as:

type LowPrecision is digits 3;type HighPrecision Is digits 7;

And, Ada requires strong static type checking, soIf Math-Operation were needed for both ofthe above types, two functions would be needed:

function MathOperation (X : LowPrecision)return LowPrecision;

function MathOperation (X : High_Precision)return HighPrecision;

Generics solve this problem:

generictype Real Is digits o;

function MathOperation (X : Real) return Real;

Page 127: -A109D 641 T8MANSHOP2 AUG~jlI PROGRAN O0C AmLNTt VA … · -a109d 641 t8manshop2 aug~jli p87(u) ada joint progran 1/4 ad119 41 o0c amlntt va 2au gb unclassified f/c 12/5 ml

Analogy with Programming

Typical programming:

A programmed solution can be written once and "used'several times. The following motivate thecreation of a programmed solution:

Reusability:Similar processing will be required repeatedly.

Reliability:Testing and verification can be performedto help ensure all runs will be correct.

Readability:By allowing variables to stand for specificvalues during run time, the programcan be understood in the abstract.

Maintainability:Making a change in the program will applyto all usages.

Page 128: -A109D 641 T8MANSHOP2 AUG~jlI PROGRAN O0C AmLNTt VA … · -a109d 641 t8manshop2 aug~jli p87(u) ada joint progran 1/4 ad119 41 o0c amlntt va 2au gb unclassified f/c 12/5 ml

- -| II I - . ".

Generic Programming:

All the same arguments can be applied to genericprogramming.

Reusability:Similar program components neededrepeatedly, but different enough topreclude run time parameterization.

Reliability:A properly tested generic need not beretested each time it Is used.

Readability:By supressing problem-specific detailthe higher-level concept can be understood.

Maintainability:By helping to avoid repetition, the (hopefullysingle) location where a change Is requiredIs easier to determine.

Page 129: -A109D 641 T8MANSHOP2 AUG~jlI PROGRAN O0C AmLNTt VA … · -a109d 641 t8manshop2 aug~jli p87(u) ada joint progran 1/4 ad119 41 o0c amlntt va 2au gb unclassified f/c 12/5 ml

Simplified View

Just as types are templates for describing objects,

Generics are merely templates for other program units.

Generic packages

Generic subprogramsGeneric proceduresGeneric functions

There are no generic tasks- a task Is already an object of a type.- a generic package can contain a task

A generic (template) is instantiated by adeclaration just as an object Is an "instance"of a type (template).

This Instantlation Is accomplished by the compiler,and not (necessarily) at run time.

The effect of Ada generics can be obtained througheditor-like substitution (but this is not thesmartest Implementation of them)

Sometimes likened to assembly language Macros.

........ . 1 L -*~A . ., m m ,l m

Page 130: -A109D 641 T8MANSHOP2 AUG~jlI PROGRAN O0C AmLNTt VA … · -a109d 641 t8manshop2 aug~jli p87(u) ada joint progran 1/4 ad119 41 o0c amlntt va 2au gb unclassified f/c 12/5 ml

Simple Examples

If you can write an Ada package, procedure, or function(you can, can't you?)then you can write an Ada generic:

procedure Easy isbegin

Textlo.PutLine ("pie");end Easy;

-- a call to Easy:Easy;

Generic version:

genericprocedure Easyiisbegin

Textlo.PutLine ("pie");end Easy;

-- first an Instantlation:procedure EasyInstance Is new Easy;

- then a call:EasyInstance:

Note the need to Instantiate first, then treat as a

regular procedure.

The above generic is a trivial case with no parameters.

It's possible (but not too likely) that such a simplegeneric might be useful.

....... .... ... . .. dill,,, m, m n mnnm Ask.

Page 131: -A109D 641 T8MANSHOP2 AUG~jlI PROGRAN O0C AmLNTt VA … · -a109d 641 t8manshop2 aug~jli p87(u) ada joint progran 1/4 ad119 41 o0c amlntt va 2au gb unclassified f/c 12/5 ml

The preceeding example must have been in the scopeof package Textlo.

Or, it could have been a library unit with its owncontext clause:

with Textlo;genericprocedure Easy isbegin

Text lo.Put Line ("pie");end Easy;

Generics are one of the possible library units.

Recalling the Ada grammar:

Library_Unit ::=

subprogramdeclaration

packagedeclaration

genericdeclaration

generic_instantlation

subprogram-body

Page 132: -A109D 641 T8MANSHOP2 AUG~jlI PROGRAN O0C AmLNTt VA … · -a109d 641 t8manshop2 aug~jli p87(u) ada joint progran 1/4 ad119 41 o0c amlntt va 2au gb unclassified f/c 12/5 ml

Note that a generic instantlation can also be a libraryunit.

Given the foregoing, the following two lines alsoform a library unit:

with Easy;procedure Easy_instance is new Easy;

And a user could be:

with EasyInstance;procedure User Isbegin

Easy-Instance;end User;

Resulting in "pie" being printed.

These trivial cases should Illustrate the hiddensimplicity In the declaration and use ofAda generics.

Page 133: -A109D 641 T8MANSHOP2 AUG~jlI PROGRAN O0C AmLNTt VA … · -a109d 641 t8manshop2 aug~jli p87(u) ada joint progran 1/4 ad119 41 o0c amlntt va 2au gb unclassified f/c 12/5 ml

More Useful Example

Normally, one or more parameters would be usedto allow a variety of Instances to be declared.

genericPrompt : String := "A>";

procedure IssuePrompt;

with Text Io;procedure IssuePrompt isbegin

Textlo.Put (Prompt);end IssuePrompt;

Note, the context clause could have preceeded thespec but It isn't needed until the body.

Note that the separate spec and body is Required

with generic subprograms, unlike regular subprograms.

The following Is Not allowed:

with Textlo;generic

Prompt : String := "A>";procedure IssuePrompt isbegin

Textlo.Put (Prompt);end IssuePrompt;

Page 134: -A109D 641 T8MANSHOP2 AUG~jlI PROGRAN O0C AmLNTt VA … · -a109d 641 t8manshop2 aug~jli p87(u) ada joint progran 1/4 ad119 41 o0c amlntt va 2au gb unclassified f/c 12/5 ml

Instantiations

The above could be instantiated with the following:

with IssuePrompt;with Textlo;function UserReply return String Is

procedure Prompt is newIssuePrompt ("What is your wish? ");

Buffer : String (1..80);Length: Natural;

beginPrompt;Textlo.GetLine (Buffer, Length);return Buffer (1 ..Length);

end User-Reply;

with IssuePrompt;with Textlo;function UserReply (To_Question: String := "")

return String Isprocedure Prompt is new

IssuePrompt (To_Question);Buffer : String (1..80);Length: Natural;

beginPrompt;Textlo.GetLine (Buffer, Length);return Buffer (1..Length);

end User-Reply;

Page 135: -A109D 641 T8MANSHOP2 AUG~jlI PROGRAN O0C AmLNTt VA … · -a109d 641 t8manshop2 aug~jli p87(u) ada joint progran 1/4 ad119 41 o0c amlntt va 2au gb unclassified f/c 12/5 ml

Continued...

Respl : constant String := User-Reply; -what's wrong?

Resp2 : constant String := User-Reply ("Why? ");

Resp3 : constant String := User-Reply;

What Is your wish?

Why?

A>

Page 136: -A109D 641 T8MANSHOP2 AUG~jlI PROGRAN O0C AmLNTt VA … · -a109d 641 t8manshop2 aug~jli p87(u) ada joint progran 1/4 ad119 41 o0c amlntt va 2au gb unclassified f/c 12/5 ml

Another Example

Generic formal type parameter (any floating point type)followed by an object parameter of that type:

generictype Real is digits o;Max : Real := Real'Last;

procedure Useless;

procedure Useless IsLocal : Real := Max / 2.0;

beginif RearLast > Max then

Local := Real'Last / 2.0;end if;

end Useless;

with Useless;procedure UselessUser Is

type Coarse Is digits 3;procedure Zip Is new Useless

(Real => Coarse,Max => 10.0);

procedure Zap Is new Useless (Coarse);procedure Zot Is new Useless (Float, -1.0);

beginZip;

end UselessUser;

Page 137: -A109D 641 T8MANSHOP2 AUG~jlI PROGRAN O0C AmLNTt VA … · -a109d 641 t8manshop2 aug~jli p87(u) ada joint progran 1/4 ad119 41 o0c amlntt va 2au gb unclassified f/c 12/5 ml

Object Parameters - Detail

As with subprogram parameters, generic formalparameters can have modes:

Mode in is the default.

genericObjl : Integer;ObJ2 : in Integer;

procedure Testing;

procedure Testing Isbegin

Objil := Obj2; - no!end Testing;

Page 138: -A109D 641 T8MANSHOP2 AUG~jlI PROGRAN O0C AmLNTt VA … · -a109d 641 t8manshop2 aug~jli p87(u) ada joint progran 1/4 ad119 41 o0c amlntt va 2au gb unclassified f/c 12/5 ml

In Parameters

Mode In parameters act as constants.

Mode in parameters are passed values (as with Inparameters of subprograms).

with Testing;procedure Test is

X, Y : Integer := 29;procedure Fee Is new Testing (3 + X, 7);procedure Fie Is new Testing (X, Y);

beginFee;

end Test;

Mode in parameters are given values as in assignment(unlike subprogram in parameters - see later).

with Testing;procedure Test is

X : Integer; -- unitializedprocedure Bomb is new Testing (X, X);

beginBomb; - erroneous

end Test;

Page 139: -A109D 641 T8MANSHOP2 AUG~jlI PROGRAN O0C AmLNTt VA … · -a109d 641 t8manshop2 aug~jli p87(u) ada joint progran 1/4 ad119 41 o0c amlntt va 2au gb unclassified f/c 12/5 ml

Default Evaluation

Defaults are evaluated at time of Instantlation(Not at time of elaboration of generic)

package DeclarationShell is

function Num return Integer;

genericVal : Integer := Num;

procedure Demo;

end DeclarationShell;

package body DeclarationShell is

Local : Integer := 0;

function Num return Integer isbegin

Local := Local + 1;return Local;

end Num;

procedure Demo is separate;

end DeclarationShell;

with Textlo;separate (DeclarationShell)procedure Demo Isbegin

Textlo.PutLine (Integer'lmage (Val));end Demo;

I f a i i il l I II II I I I

Page 140: -A109D 641 T8MANSHOP2 AUG~jlI PROGRAN O0C AmLNTt VA … · -a109d 641 t8manshop2 aug~jli p87(u) ada joint progran 1/4 ad119 41 o0c amlntt va 2au gb unclassified f/c 12/5 ml

So,...

with DeclarationShell;procedure Show is

procedure Demo Isnew DeclarationShel.Demo;

procedure Demol isnew DeclarationShell.Demo;

beginDemo;Demol;

end Show;

output:

12

Not:

1

1

Page 141: -A109D 641 T8MANSHOP2 AUG~jlI PROGRAN O0C AmLNTt VA … · -a109d 641 t8manshop2 aug~jli p87(u) ada joint progran 1/4 ad119 41 o0c amlntt va 2au gb unclassified f/c 12/5 ml

Mode in out

Mode In out parameters must be passed variables, notvalues (same as In out subprogram parameters)

Formal objects of mode in out are aliases for theiractual counterparts.

Can be confusing - and Is usually not recommended.

The evaluation of the variable represented by a namesupplied as the actual parameter to an in outgeneric formal object parameter occurs once

Therefore, If some expression In the name evaluationchanges after the Instantlation, no change Is madeto the object represented by the formal name.

Aft.m mmimllli

Page 142: -A109D 641 T8MANSHOP2 AUG~jlI PROGRAN O0C AmLNTt VA … · -a109d 641 t8manshop2 aug~jli p87(u) ada joint progran 1/4 ad119 41 o0c amlntt va 2au gb unclassified f/c 12/5 ml

Test your knowledge!

declare

Y : array (1..5) of Character := "kitty";

Index : Integer := 1;

genericX : In out Character;

procedure Gen;

procedure Gen isbegin

Index := 5;X := 'W';Put (String (Y));

end;

procedure P is new Gen (Y (Index));

beginP;

end;

What would happen If the object passed dependedon the value of a discriminant?

f.L., ,=.=

Page 143: -A109D 641 T8MANSHOP2 AUG~jlI PROGRAN O0C AmLNTt VA … · -a109d 641 t8manshop2 aug~jli p87(u) ada joint progran 1/4 ad119 41 o0c amlntt va 2au gb unclassified f/c 12/5 ml

Is this Reasonable?

declaretype Furniture is (Bed, Couch, Table);type Style (F : Furniture := Bed) Is record

case F iswhen Bed =>

FourPoster: Boolean;when Couch =>

Convertible : Boolean;when Table =>

Legs : Integer;end case;

end record;S : Style;generic

X : in out Boolean;procedure Gen;

procedure Gen Isbegin

S := (Table, 4);- what Is the value of X ??

end;

procedure P Is new Gen (S.FourPoster);

beginP;

end;

Would the above be allowed?

Page 144: -A109D 641 T8MANSHOP2 AUG~jlI PROGRAN O0C AmLNTt VA … · -a109d 641 t8manshop2 aug~jli p87(u) ada joint progran 1/4 ad119 41 o0c amlntt va 2au gb unclassified f/c 12/5 ml

Other points

Mode out Is not available.What would that mean, anyway?

Formal objects are not static, so they can't be usedin the generic in case alternatives, type ranges,floating point precisions, etc.

declaregeneric

X : Integer;procedure Gen (Val : Integer);

procedure Gen (Val : Integer) Isbegin

case Val iswhen X =>

when others =>

end case;end Gen;

procedure P is new Gen (X => 5);begin

P (Val => 8);end;

You guessed It, this Is Illegal, too!

Page 145: -A109D 641 T8MANSHOP2 AUG~jlI PROGRAN O0C AmLNTt VA … · -a109d 641 t8manshop2 aug~jli p87(u) ada joint progran 1/4 ad119 41 o0c amlntt va 2au gb unclassified f/c 12/5 ml

Parametric Confusion

When the subprograms have parameters, the syntaxcan be confusing.

Generic formals preceed specification but parameterlist follows Instantlation.

Subsequent parameters to Instance also follow,but name is instance name now not generic name.

So, the text never quite matches up, as withsubprograms!

declaregeneric

GenFormal : Integer;procedure G (ProcFormal : Boolean);

procedure G (ProcFormal : Boolean) isbegin

Put (Gen_Formal);Put (ProcFormal);

end G;

procedure P Is new G (Gen-Formal => 3);begin

P (ProcFormal => False);end;

Page 146: -A109D 641 T8MANSHOP2 AUG~jlI PROGRAN O0C AmLNTt VA … · -a109d 641 t8manshop2 aug~jli p87(u) ada joint progran 1/4 ad119 41 o0c amlntt va 2au gb unclassified f/c 12/5 ml

Enough on objects... Type Parameters!

The real power of generics is revealed throughthe use of type (and subprogram - later) parameters

Type Parameters

type T is digits <>; -- any floating point type

type T is delta <>; - any fixed point type

type T is range <>; -- any Integer type

type T is (<>); -- any discrete type, which-- includes integer types

Note allowable operations on above, such as 'First,'Last, 'Succ, 'Pred, "*" $+ , etc. , areavailable only as appropriate (minimumassumptions)

generictype Counter is (0);

function GenF (X : Counter) return Counter;

function GenF (X : Counter) return Counter isbegin

return X + 1; - oopsend GenF;

As

Page 147: -A109D 641 T8MANSHOP2 AUG~jlI PROGRAN O0C AmLNTt VA … · -a109d 641 t8manshop2 aug~jli p87(u) ada joint progran 1/4 ad119 41 o0c amlntt va 2au gb unclassified f/c 12/5 ml

Private Formal Parameters

type T Is private;

Good news: any type except a limitedtype will match this formal.

Bad news: you can only declare objects,assign values to objects, and testfor equality (just those operationsyou would expect to be able toperform on a private type).

type T is limited private;

Good news: any type including a limitedtype will match this formal.

Bad news: you can only declare objectsand nothing else (just whatyou would expect to be able todo with a limited private type).

Remember, object parameters are given values byassignment, so can't have limited private objectparameters (rats!).

genericFile : Textlo.File_Type;

procedure Oops;

Page 148: -A109D 641 T8MANSHOP2 AUG~jlI PROGRAN O0C AmLNTt VA … · -a109d 641 t8manshop2 aug~jli p87(u) ada joint progran 1/4 ad119 41 o0c amlntt va 2au gb unclassified f/c 12/5 ml

Static Uses Not Allowed

declare

genericX :Integer;

package Static_Uses_Illegal Is

type Length Is range 1.. X;

type Precision Is digits X;

N : constant := X;

end StaticUsesIllegal;

package S is new StaticUses_Illegal (3);

beginnull;

end;

Page 149: -A109D 641 T8MANSHOP2 AUG~jlI PROGRAN O0C AmLNTt VA … · -a109d 641 t8manshop2 aug~jli p87(u) ada joint progran 1/4 ad119 41 o0c amlntt va 2au gb unclassified f/c 12/5 ml

Surprise

declaresubtype Small is Integer range 1.10;X : Integer := 27;generic

S : in Small;procedure Gen;procedure Gen isbegin

Put ("All OK");

end Gen;procedure P Is new Gen (X);

beginP;

end;

-- will raise ConstraintError at time of Instantiation

declaresubtype Small Is Integer range 1.10;X : Integer := 27;generic

S : in out Small;procedure Gen;procedure Gen Isbegin

Put ("All OK");end Gen;procedure P is new Gen (X);

beginP;

end;

-- will execute OK - in spite of apparent error

2

Page 150: -A109D 641 T8MANSHOP2 AUG~jlI PROGRAN O0C AmLNTt VA … · -a109d 641 t8manshop2 aug~jli p87(u) ada joint progran 1/4 ad119 41 o0c amlntt va 2au gb unclassified f/c 12/5 ml

Different Integer Types

Ada allows user defined Integer types:

type Dimension Is range 0.. 100;

This is really a derived type, and therefore a distincttype from type Standard.Integer.

Therefore, a utility that worked with Integers wouldnot work with type Dimension:

function IsPrime (P : Integer) return Boolean;

D : Dimension := 27;

If Is_Prime ( D ) then ... -- would not compile

One solution:

If Is-Prime ( Integer ( D ))then... -- OK

Generic solution:

generictype IntLike Is range <>;

function IsPrime ( P : Int_Like) return Boolean;

function PrimeDimension is newIsPrime ( IntLike => Dimension);

if PrimeDimension ( P => D) then ... --OK

3

Page 151: -A109D 641 T8MANSHOP2 AUG~jlI PROGRAN O0C AmLNTt VA … · -a109d 641 t8manshop2 aug~jli p87(u) ada joint progran 1/4 ad119 41 o0c amlntt va 2au gb unclassified f/c 12/5 ml

Other Numeric Generic Parameters

Similarly, a generic could manipulate floating orfixed point numeric objects of user-defined types.

function Sqrt (X : Float) return Float;

Would only work with values of type Float:

type Precise is digits 9;Measurement : Precise := 2.33442_545;

beginAns : Sqrt (Measurement); -- would not compileAns := Sqrt (Float (Measurement)); -- OK, but ugh

Better to make Sqrt generic:

generictype Precision is digits <>;

function GenSqrt (X : Precision) return Precision;

function Sqrt is new GenSqrt (Precise);

M := Sqrt (Measurement);

Note that you Don't say:

function Sqrt is new GenSqrt (9);

4

Page 152: -A109D 641 T8MANSHOP2 AUG~jlI PROGRAN O0C AmLNTt VA … · -a109d 641 t8manshop2 aug~jli p87(u) ada joint progran 1/4 ad119 41 o0c amlntt va 2au gb unclassified f/c 12/5 ml

Fixed Point Does Not Give an Alternative

Recall that there is no general purpose fixed pointtype so all fixed point types (except Duration) areuser-defined.

function Sqrt (X : NoGlobal_FixedType)

So, fixed point routines must be generic if notin the scope of the fixed point declarations theywill operate on:

generictype Fixed Is delta <>;

function GenFixedSqrt (F : Fixed) return Fixed;

And, instantiations would look as you would expect:

type Fix Is delta 0.01;function FixSqrt Is new GenFixedSqrt (Fix);

Note, again, that the syntax of the Instantlation

Is not:

function FixSqrt Is new GenFixedSqrt (0.01);

5

Page 153: -A109D 641 T8MANSHOP2 AUG~jlI PROGRAN O0C AmLNTt VA … · -a109d 641 t8manshop2 aug~jli p87(u) ada joint progran 1/4 ad119 41 o0c amlntt va 2au gb unclassified f/c 12/5 ml

Enumeration Types Can Also Be Passed

If a generic needs to know about an enumerationtype, there is a generic formal parameter forany discrete type.

Note that integer types are also considered discretetypes, so an Instantlation can pass either anenumeration type or an integer type.

generictype Things Is (<);

function Number_Of_Things return Integer;

function NumberOfThings return Integer isbegin

returnThings'Pos (Things'Last) -Things'Pos (Things'First) + 1;

end NumberOfThings;

function Two is newNumber_Of_Things (Boolean);

function LookOut is newNumberOfThings (Integer);

function BarelyMakeIt is newNumber_Of_Things (Positive);

uuuun l n lnlglnl~ J mml nU6

Page 154: -A109D 641 T8MANSHOP2 AUG~jlI PROGRAN O0C AmLNTt VA … · -a109d 641 t8manshop2 aug~jli p87(u) ada joint progran 1/4 ad119 41 o0c amlntt va 2au gb unclassified f/c 12/5 ml

Review of Simple Parameters

To pass Use the form

Integer type Int is range <>;

Floating type Fit is digits <>;

Fixed type Fix is delta <>;

Discrete type Enum is (<>);

(integers are also discrete)

7

Page 155: -A109D 641 T8MANSHOP2 AUG~jlI PROGRAN O0C AmLNTt VA … · -a109d 641 t8manshop2 aug~jli p87(u) ada joint progran 1/4 ad119 41 o0c amlntt va 2au gb unclassified f/c 12/5 ml

Access Type Parameters

generictype IntPtr Is access Integer;

package Probably_NotTooUseful is ...

When one parameter depends on another:

package Access_Example Is

type Candy is (MM, Mars, Hershey);type Pointer is access Candy;

generictype Blind is limited private;type Ptr Is access Blind;

package Lists is

type List is limited private;-- must be limited Why?

procedure Make (L : in out List);-- etc.

privatetype List Is

recordData: Blind; -- because of thisLink : Ptr;

end record;end Lists;

package CandyChain is new Lists(Blind => Candy,

Ptr => Pointer

end AccessExample;

8

Page 156: -A109D 641 T8MANSHOP2 AUG~jlI PROGRAN O0C AmLNTt VA … · -a109d 641 t8manshop2 aug~jli p87(u) ada joint progran 1/4 ad119 41 o0c amlntt va 2au gb unclassified f/c 12/5 ml

Structured Types

How do you pass an array to a generic?

generictype Arr Is private;ObJ : Arr;

procedure Try;

S : String (1 .. 5) := "kitty";

procedure Nice-Try Is new Try (String, S);

procedure Try isbegin

Obj( 1 ) := 'w';end Try;

Sorry - no dice

To be treated as an an array, the structure of an objectmust be "known" to the generic:

41L .... .

Page 157: -A109D 641 T8MANSHOP2 AUG~jlI PROGRAN O0C AmLNTt VA … · -a109d 641 t8manshop2 aug~jli p87(u) ada joint progran 1/4 ad119 41 o0c amlntt va 2au gb unclassified f/c 12/5 ml

How To Teach Your Generic About Arrays

generictype IntArray is array

(integer range <>) of Integer;procedure SortArray (Arr : in out Int_Array);

procedure SortArray (Arr : in out IntArray) isTemp : Integer;

beginfor I In Arr'First + 1.. Arr'Last loop

for J in Arr'First . I - 1 loopif Arr (I) < Arr (J) then

Temp := Arr (J);Arr (J) := Arr (I);Arr (I) := Temp;

end if;end loop;

end loop;end SortArray;

type List Is array (Integer range <>) of Integer;

procedure S Is new SortArray (List);

L : List (1.5) := (3, 2, 4, 7, -3);

beginS (L);

Here, the component type had to be Integer, and theindex range had to be an unconstrained range ofInteger.

10

Page 158: -A109D 641 T8MANSHOP2 AUG~jlI PROGRAN O0C AmLNTt VA … · -a109d 641 t8manshop2 aug~jli p87(u) ada joint progran 1/4 ad119 41 o0c amlntt va 2au gb unclassified f/c 12/5 ml

More Flexibility Possible

Above, the Index type was Integer and thecomponent type was type Integer.

Here, the Index type is a range of any integer typeand the component type is also any integer type.

generictype Index is range <>;type Component is range <>;type IntArray is array (Index) of Component;

procedure SortArray (Arr : In out IntArray);procedure Sort_Array (Arr : In out Int_Array) is

Temp : Component;begin

for I in Arr'First + 1 . Arr'Last loopfor J In Arr'First.. I - 1 loop

if Arr (I) < Arr (J) thenTemp := Arr (J);Arr (J) := Arr (I);Arr (I) := Tdmp;

end if;end loop;

end loop;end SortArray;type Short is range 1.. 5;type Dimension is new Integer range 0.. 100;type List Is array (Short) of Dimension;procedure S Is new SortArray

(Short, Dimension, List);L: List := (2, 5, 4, 6, -3);

beginS(L)

12

. ... .......... . . inm m AIR, m

Page 159: -A109D 641 T8MANSHOP2 AUG~jlI PROGRAN O0C AmLNTt VA … · -a109d 641 t8manshop2 aug~jli p87(u) ada joint progran 1/4 ad119 41 o0c amlntt va 2au gb unclassified f/c 12/5 ml

Even More Flexibility

An array must be indexed by a discrete type, but notnecessarily an integer type - an enumerated typeIs also OK.

Also, the component type can be anything (but ifassignment is needed in the generic, then it cannotbe limited).

generictype Index is (<>);type Component is private;type IntArray is array (Index) of Component;

procedure Sort-Array (Arr : in out Int_Array);

procedure SortArray (Arr : in out IntArray) isTemp : Component;

beginfor I in Index'Succ (Arr'First) . . Arr'Last loop

for J in Arr'First. . Index'Pred (I) loopif Arr (I) c Arr (J) then

Temp := Arr (J);Arr (J) := Arr (I);Arr (I) := Temp;

end if;end loop;

end loop;end SortArray;type List is array (Boolean) of Float;procedure S is new Sort_Array

(Boolean, Float, List);L : List (4.5, 2.6945);

beginS(L);

14

Page 160: -A109D 641 T8MANSHOP2 AUG~jlI PROGRAN O0C AmLNTt VA … · -a109d 641 t8manshop2 aug~jli p87(u) ada joint progran 1/4 ad119 41 o0c amlntt va 2au gb unclassified f/c 12/5 ml

Constrained vs. Unconstrainted Arrays

Note that the first example used an unconstrained typefor the formal array parameter and was instantiatedwith an unconstrained actual array type.

The next two examples showed a constrained arraytype parameter and actual type.

There is NO array parameter to generics that allowseither an unconstrained or constrained array typeto be passed to it.

Typically, if you would like to allow either, make thegeneric handle unconstrained arrays, and make the userdeclare constrained array types based on namedunconstrained types, which are the ones used for theinstantiation.

type Short Is range 1 . . 5;type List is array (Short) of Things;

The above is really shorthand for

type Anon is new Integer; -- or other parent typesubtype Short is Anon range 1 . . 5;

type AnonList is array (Anon range <>) of Things;subtype List is AnonList (Short);

So, just don't take shortcuts In declaring the user

array types.

15

Page 161: -A109D 641 T8MANSHOP2 AUG~jlI PROGRAN O0C AmLNTt VA … · -a109d 641 t8manshop2 aug~jli p87(u) ada joint progran 1/4 ad119 41 o0c amlntt va 2au gb unclassified f/c 12/5 ml

No Generic Record Types

Would be nice, but the syntax and rules would haveto be quite complex.

For example,

generictype First Component is private;type Second_Component is private;type Rec is record

Namel : FirstComponent;Name2 : SecondComponent;

end record;procedure Nice-Try;

How would you handle different sized record structures?

How would you handle initialized components?

What would you do with such general records oncethey were passed to the generic?

Food for thought...

16

Page 162: -A109D 641 T8MANSHOP2 AUG~jlI PROGRAN O0C AmLNTt VA … · -a109d 641 t8manshop2 aug~jli p87(u) ada joint progran 1/4 ad119 41 o0c amlntt va 2au gb unclassified f/c 12/5 ml

Exceptions Raised by the Instance

Exceptions can be raised and propagated by an instanceduring processing.

These must be handled by the user of the instance:

genericprocedure Action;

procedure Action isError : exception;

begin

end Action;

procedure Act1 is new Action;procedure Act2 is new Action;procedure Act3 is new Action;

begin

Act1;Act2;Act3;

exceptionwhen Actl.Error =>when Act2.Error =>when Act3.Error =>

17

Page 163: -A109D 641 T8MANSHOP2 AUG~jlI PROGRAN O0C AmLNTt VA … · -a109d 641 t8manshop2 aug~jli p87(u) ada joint progran 1/4 ad119 41 o0c amlntt va 2au gb unclassified f/c 12/5 ml

No Exception Parameters To a Generic

Can't pass an exception to a generic to be raised:

generic

WhenTrouble : exception; -- nope

procedure Sort•...

exceptionwhen others =>

raise WhenTrouble;end Sort;

My_Exception : exception;

procedure S is new Sort (MyException);

beginS;

exceptionwhen My_Exceptlon => -- this Isn't possible

whatever...end;

18

Page 164: -A109D 641 T8MANSHOP2 AUG~jlI PROGRAN O0C AmLNTt VA … · -a109d 641 t8manshop2 aug~jli p87(u) ada joint progran 1/4 ad119 41 o0c amlntt va 2au gb unclassified f/c 12/5 ml

But, There Is Something Just As Useful

Passing a subprogram to a generic is possible:

generic

with procedure CallMeSometime;procedure GeneralStuff;

procedure GeneralStuff Isbegin

CallMeSometime;

end GeneralStuff;

procedure WaitForCall isbegin

Put ("I've been called!");end WaitForCall;

procedure Myinstance is newGeneralStuff (WaitForCall);

begin

Myjnstance;-- WaitForCall could now be called-- by the Instance

19

Page 165: -A109D 641 T8MANSHOP2 AUG~jlI PROGRAN O0C AmLNTt VA … · -a109d 641 t8manshop2 aug~jli p87(u) ada joint progran 1/4 ad119 41 o0c amlntt va 2au gb unclassified f/c 12/5 ml

Subprogram Parameters

Replaces the dynamic passing of subprogramssuch as In standard Pascal.

Enables more complete type checking, i.e., typesof parameters to passed subprogram can bechecked against calls to It.

Pascal problem:

program P;type

Color = (Red, Green, Blue);var

Bucket : Color;

procedure Print (C : Color);begin

case C ofRed : write ('Red');Green : write ('Green');Blue : write ('Blue');

end;end;

procedure Proc (P : procedure):begin

P (Bucket); (* OK *)'P (5); (* runtime error *)

end;

beginProc (Print);

Page 166: -A109D 641 T8MANSHOP2 AUG~jlI PROGRAN O0C AmLNTt VA … · -a109d 641 t8manshop2 aug~jli p87(u) ada joint progran 1/4 ad119 41 o0c amlntt va 2au gb unclassified f/c 12/5 ml

Ada Solution

declare

type Color is (Red, Green, Blue);Bucket : Color:= Green;

procedure Print (C : Color) Isbegin

Textlo.Put (Color'Image (C));end Print;

genericwith procedure P (Val : Color);

procedure GenProc;

procedure GenProc isbegin

P (Bucket); -- OKP (5); -- compile time error

end GenProc;

procedure Proc is new GenProc (Print);

beginProc;

end;

I • n il I I n m ia ,, m 2

Page 167: -A109D 641 T8MANSHOP2 AUG~jlI PROGRAN O0C AmLNTt VA … · -a109d 641 t8manshop2 aug~jli p87(u) ada joint progran 1/4 ad119 41 o0c amlntt va 2au gb unclassified f/c 12/5 ml

......- -- - - I --- ___ -

Sending the Parameter Types, Too

One of the most common uses of subprogram parameters

to generics is to provide the generic with operations on

user-supplied types.

Some operations are Implied by the generic formal

parameter:

type T is private;

allows values of this type to be assigned

to variables and compared for equality

type T is (<>);

matches any discrete type

allows use of 'First, 'Last, 'Succ, 'Pred, 'Image,

'Value, 'Pos, 'Val, "<", ">", as well as above.

type T is range <>;

matches any integer type

since integer types are also discrete types,

allows all of the above plus the integer operations

such as + # e1, etc.

type Ar Is array (Index) of Component;

allows Indexing, slicing, assigning, equating

(which are special for arrays), 'Length, 'First,

'Last, etc.

3

Page 168: -A109D 641 T8MANSHOP2 AUG~jlI PROGRAN O0C AmLNTt VA … · -a109d 641 t8manshop2 aug~jli p87(u) ada joint progran 1/4 ad119 41 o0c amlntt va 2au gb unclassified f/c 12/5 ml

When Additional Operations are Needed

For example, with array, private, and limited privatetypes, the generic cannot perform text output of valueswithout help from the user:

type Handle Is access Integer;Ptr : Handle := new Integer'(57);

function Handle_Image (L : Handle) return String isbegin

return Integer'Image (L.all);end Handle-Image;

generictype Any is limited private;with function StringOf (X : Any) return String;

procedure GenProc (Obj : Any);

procedure GenProc (Obj : Any) isbegin

Put ("This is GenProc processing... ");Put (StringOf ( Obj));

end GenProc;

procedure Example Is new GenProc(Handle, Handle-Image);

procedure Interesting is new GenProc(Integer, Integer'Image);

beginExample (Ptr);Interesting (75);

end;

4

Page 169: -A109D 641 T8MANSHOP2 AUG~jlI PROGRAN O0C AmLNTt VA … · -a109d 641 t8manshop2 aug~jli p87(u) ada joint progran 1/4 ad119 41 o0c amlntt va 2au gb unclassified f/c 12/5 ml

Default Subprogram "Values"

As with generic object and value parameters (and unlikegeneric type parameters - why?) generic subprogramparameters can be supplied by defaults.

For example, consider the following:

with Text_lo;package Shell is

generictype Any is limited private;with procedure Print (Val : Any)

package AnyLists is

type AnyList is ...

procedure Put (L : AnyList);-- the body would call the generic-- parameter Print procedure

end Any_Llsts;

package CharLists Is new Any_Lists(Character, Text_lo.Put);

end Shell;

.,...4=

Page 170: -A109D 641 T8MANSHOP2 AUG~jlI PROGRAN O0C AmLNTt VA … · -a109d 641 t8manshop2 aug~jli p87(u) ada joint progran 1/4 ad119 41 o0c amlntt va 2au gb unclassified f/c 12/5 ml

With judicious naming of the generic subprogramparameter, a default might be possible:

with Textlo;package Shell Is

generictype Any is limited private;with procedure Put (Val : Any) is <>;

package AnyLists is

type Any_List is...

procedure Put (L : Any_List);-- the body would call the generic-- parameter Put procedure

end Any_Lists;

package CharLists is new AnyListst (Character);

-- what's missing?

end Shell;

Remember - the resolution of the default takes place atthe point of Instantiation (not at the genericdeclaration). Otherwise, it would be trivial.

6

Page 171: -A109D 641 T8MANSHOP2 AUG~jlI PROGRAN O0C AmLNTt VA … · -a109d 641 t8manshop2 aug~jli p87(u) ada joint progran 1/4 ad119 41 o0c amlntt va 2au gb unclassified f/c 12/5 ml

Speaking of Point of Declaration vs. Instantiation...

Also remember that global references from within ageneric refer to those at the point of declaration notthose at the point of instantiation. But, defaultreferences refer to matching names from the point ofinstantiation. Confused?

with Text lo;use Text_lo;package Shell is

Global : Integer := 17;

genericwith procedure Put (Val : Integer) is <>;

procedure Demo;

end Shell;

package body Shell is

procedure Demo isbegin

Put (Global);end Demo;

end Shell;

i Ii ml m Im •7

Page 172: -A109D 641 T8MANSHOP2 AUG~jlI PROGRAN O0C AmLNTt VA … · -a109d 641 t8manshop2 aug~jli p87(u) ada joint progran 1/4 ad119 41 o0c amlntt va 2au gb unclassified f/c 12/5 ml

with Shell;package Inner is

Global : Integer := 39;

procedure Put (I : Integer);

procedure User is new Demo;end Inner;

with Textlo;package body Inner is

procedure Put (I : Integer) Isbegin

Text lo.Put("Surprise!" & Integer'lmage (I));

end Put;end Inner;

Inner.User;

What gets printed?

So, generic instantiation is not simple text substitution.

L8

Page 173: -A109D 641 T8MANSHOP2 AUG~jlI PROGRAN O0C AmLNTt VA … · -a109d 641 t8manshop2 aug~jli p87(u) ada joint progran 1/4 ad119 41 o0c amlntt va 2au gb unclassified f/c 12/5 ml

Exercise

Modify the Sorting example from before so that the usercan optionally change whether the sort is ascending ordescending.

NAs before:

generictype IntArray is array

(Integer range <>) of Integer;procedure SortArray (Arr : in out IntArray);

procedure SortArray (Arr : in out IntArray) isTemp: Integer;

beginfor I in Arr'First + 1 . . Arr'Last loop

for J in Arr'First. . I - 1 loopif Arr (I) < Arr (J) then

Temp := Arr (J);Arr (J) := Arr (I);Arr (I) := Temp;

end If;end loop;

end loop;end SortArray;

Make minimal changes to satisfy requirement.

I l i i • 9

Page 174: -A109D 641 T8MANSHOP2 AUG~jlI PROGRAN O0C AmLNTt VA … · -a109d 641 t8manshop2 aug~jli p87(u) ada joint progran 1/4 ad119 41 o0c amlntt va 2au gb unclassified f/c 12/5 ml

Solution

generictype IntArray Is array

(Integer range <>) of Integer;with function "-c" (Left, Right : Integer)

return Boolean is <>;procedure SortArray (Arr : in out Int_Array);

procedure SortArray (Arr : in out Int_Array) isTemp : Integer;

beginfor I in Arr'First + 1.. Arr'Last loop

for J in Arr'First.. I - 1 loopif Arr (I) < Arr (J) then

Temp := Arr (J);Arr (J) := Arr (I);Arr (I) := Temp;

end if;end loop;

end loop;end SortArray;

Instances could be declared:

type List Is array (Integer range <>) of Integer;

procedure Ascending1 is new Sort-Array(List, "<");

procedure Ascending2 is new Sort-Array (List);

procedure Descending is new Sort-Array(List, >")

10

Page 175: -A109D 641 T8MANSHOP2 AUG~jlI PROGRAN O0C AmLNTt VA … · -a109d 641 t8manshop2 aug~jli p87(u) ada joint progran 1/4 ad119 41 o0c amlntt va 2au gb unclassified f/c 12/5 ml

Nesting of Generics

It can be useful to export a generic utility from ageneric package. Don't clutch:

generictype Element is private;with function "<" (Left, Right : Element)

return Boolean is <>;package Sorted_BinaryTrees Is

type Tree is private;

procedure Insert(X : Element; Into "in out Tree);

genericwith procedure Operate (X : Element);

procedure SearchAndOperate (T : Tree);

end SortedBinaryTrees;

(The body is, of course, "trivially obvious to even themost casual reader"...

Exercise: Give an example instantlation of the abovegenerics. (Not the body.)

Page 176: -A109D 641 T8MANSHOP2 AUG~jlI PROGRAN O0C AmLNTt VA … · -a109d 641 t8manshop2 aug~jli p87(u) ada joint progran 1/4 ad119 41 o0c amlntt va 2au gb unclassified f/c 12/5 ml

A Simple Solution

package IntTrees isnew Sorted_Binary_Trees (Integer);

procedure Put_lnt (X : Integer) is

beginTextlo.Put ( Integer'lmage (X));

end PutInt;

procedure PrintInOrder is newIntTrees.SearchAndOperate (Putjlnt);

2

Page 177: -A109D 641 T8MANSHOP2 AUG~jlI PROGRAN O0C AmLNTt VA … · -a109d 641 t8manshop2 aug~jli p87(u) ada joint progran 1/4 ad119 41 o0c amlntt va 2au gb unclassified f/c 12/5 ml

Other Type Parameters

As with arrays, unconstrained types are allowed forprivate and limited types using the customary syntax:

generictype Furniture (Upholstered : Boolean)

Is private;package P is

Table : Furniture (False);Couch : Furniture (True);

end P;

Note that a default for the discriminant is Not allowed.

This means that an unconstrained object cannotbe declared (unlike typical discriminated records)

Incidentally, a type mark must be used in a genericpart, and not a subtype:

genericsubtype Short Is Integer range -6,;

procedure NotAChance;

. . .. ... .-- -- w in _ l~mm ) n mar m , lm m m3

Page 178: -A109D 641 T8MANSHOP2 AUG~jlI PROGRAN O0C AmLNTt VA … · -a109d 641 t8manshop2 aug~jli p87(u) ada joint progran 1/4 ad119 41 o0c amlntt va 2au gb unclassified f/c 12/5 ml

More on Unconstrained Types

Peculiar situations can arise when matching a private orlimited type with an actual type which is unconstrained.

If the actual type is unconstrained:

an unconstrained arrayan unconstrained record without a default

discriminant

then you can't declare an object of that type inside thegeneric (which includes allocators without initial values)

unless the object is a constant, meaning the initial valuemust have been supplied by the Instantiation.

4

Page 179: -A109D 641 T8MANSHOP2 AUG~jlI PROGRAN O0C AmLNTt VA … · -a109d 641 t8manshop2 aug~jli p87(u) ada joint progran 1/4 ad119 41 o0c amlntt va 2au gb unclassified f/c 12/5 ml

generictype T is private;

package Experiment IsVal : T;type Ptr Is access T;P : Ptr := new T;

end Experiment;

type Boo is array (Boolean range <>) of Integer;package P Is new Experiment (Boo); -- will fail

type Rec (B : Boolean) is recordnull;

end record;package Q is new Experiment (Rec); -- will fail

generictype T is private;Init : T;

package Experiment IsVal : T := Init; -- still a problemtype Ptr Is access T;P : Ptr := new T'(In It); -- this helps

end Experiment;

type Boo Is array (Boolean range <>) of Integer;I : Boo (False.. True) := (6, 12);package P is new Experiment (Boo, I);' -- will fail

type Rec (B : Boolean) is recordnull;

end record;R : Rec (False) := Rec'(B => False);package 0 Is new Experiment (Rec, R); -- will fail

5

Page 180: -A109D 641 T8MANSHOP2 AUG~jlI PROGRAN O0C AmLNTt VA … · -a109d 641 t8manshop2 aug~jli p87(u) ada joint progran 1/4 ad119 41 o0c amlntt va 2au gb unclassified f/c 12/5 ml

generictype T is private;[nit : T;

package Experiment isVal : constant T := Init; -- OKtype Ptr Is access T;P : Ptr := new T'(Init);

end Experiment;

type Boo is array (Boolean range <>) of Integer;I : Boo (False.. True) := (6, 12);package P is new Experiment (Boo, I); -- OK

type Rec (B : Boolean) is recordnull;

end record;R : Rec (False) := Rec'(B => False);package 0 is new Experiment (Rec, R); -- OK

6

Page 181: -A109D 641 T8MANSHOP2 AUG~jlI PROGRAN O0C AmLNTt VA … · -a109d 641 t8manshop2 aug~jli p87(u) ada joint progran 1/4 ad119 41 o0c amlntt va 2au gb unclassified f/c 12/5 ml

Retrofitting Generics

Look familiar?

package Counter istype Count is limited private;procedure Increment (C : in out Count);procedure Reset (C : out Count);

private...end Counter;

package Trees istype Tree is limited private;procedure Get (T : out Tree);function Is_Leaf (T : Tree) return Boolean;procedure Split (T : in out Tree;

Left, Right : out Tree);procedure Return (T : in out Tree);

private...end Trees;

with Trees;package Piles is

type Pile is limited private;function Empty (P : Pile) return Boolean;procedure Put (T : in out Trees.Tree;

On : in out Pile);procedure Initialize (P : in out Pile);procedure Get (T : out Trees.Tree;

From : in out Pile);private...end Piles;

with Trees, Piles, Counter;procedure CountLeaves is...

7

Page 182: -A109D 641 T8MANSHOP2 AUG~jlI PROGRAN O0C AmLNTt VA … · -a109d 641 t8manshop2 aug~jli p87(u) ada joint progran 1/4 ad119 41 o0c amlntt va 2au gb unclassified f/c 12/5 ml

Generalization

generictype Object is limited private;

package GeneralPiles istype Pile is limited private;function Empty (P : Pile) return Boolean;procedure Put (T : in out Object;

On : in out Pile);procedure Initialize (P : in out Pile);procedure Get (T "out Object;

From : in out Pile);private...end Piles;-- package Is the same except for substitution-- of Object for Trees.Tree

with Trees, General_Piles, Counter;procedure CountLeaves is...

package TreePiles isnew GeneralPiles (Trees.Tree);

-- can be the same otherwise

Note that this generalization was made easy due to thelack of assumptions that the original components madeabout each other's types.

Clue: private and limited private types assist in futuregeneralizations of your program components.

-- m: i l i II I l I8

Page 183: -A109D 641 T8MANSHOP2 AUG~jlI PROGRAN O0C AmLNTt VA … · -a109d 641 t8manshop2 aug~jli p87(u) ada joint progran 1/4 ad119 41 o0c amlntt va 2au gb unclassified f/c 12/5 ml

What if the types aren't private?

Generalizations are still possible, but require morecomplicated generic parts.

package ExportArray istype Global_Array Is array (1. .10) of Integer;

with Export Array;package Needs_ToSeeGIobalArray is

procedure Sort(Ar : In out ExportArray.GlobalArray);

To generalize the above:

generictype GA is array (1..10) of Integer;

package NeedsToSeeGlobalArray isprocedure Sort (Ar : in out GA);

Or better would be:

generictype Index_Range is range <>;type GA is array (Index-Range) of Integer;

package NeedsToSee...

But would need to ensure that the body of the packagedid not depend on literals unique to the original arraytype (i.e., that the range went from 1 to 10).

.. ........... . .... . = mmmm mm mm ( mml mmmm m mml 9

Page 184: -A109D 641 T8MANSHOP2 AUG~jlI PROGRAN O0C AmLNTt VA … · -a109d 641 t8manshop2 aug~jli p87(u) ada joint progran 1/4 ad119 41 o0c amlntt va 2au gb unclassified f/c 12/5 ml

Simple Generic

Given a single state-machine Implementation of stacks,the customary way to Introduce many stacks Is to turnit Into an abstract data type:

Simple stack package:

package Stack Isprocedure Push (I : Integer);procedure Pop (I : out Integer);function Empty return Boolean;function Full return Boolean;

end Stack;

Conventional way to convert to many stacks:

package Stacks istype Stack Is private;procedure Push (I : Integer; On : in out Stack);procedure Pop

(I : out Integer; From : In out Stack);function Empty (S : Stack) return Boolean;function Full (S : Stack) return Boolean;

private...end Stacks;

User code:

S : Stacks.Stack;I : Integer;

beginPush (25, S);Pop (I, S);

- , nmmmmm~mmm w nnlu nnum lnnm A sklllln I ' ' n m m

N H

Page 185: -A109D 641 T8MANSHOP2 AUG~jlI PROGRAN O0C AmLNTt VA … · -a109d 641 t8manshop2 aug~jli p87(u) ada joint progran 1/4 ad119 41 o0c amlntt va 2au gb unclassified f/c 12/5 ml

-- I - - - - -- - - -

Many Stacks, "Generically"

Review the original single stack:

package Stack Isprocedure Push (I : Integer);procedure Pop (I : out Integer);function Empty return Boolean;function Full return Boolean;

end Stack;

Illustration of generic method (not necessarilyrecommended, just for example):

genericpackage Stack is

procedure Push (I : Integer);procedure Pop (I : out Integer);function Empty return Boolean;function Full return Boolean;

end Stack;

No change to the body in this conversion! (Unlike thebody of the private type example.)

User code:

package S1 Is new Stack;package S2 Is new Stack;I : Integer;

beginS1.Push (25);S1.Pop (I);

-,,..,4=2

Page 186: -A109D 641 T8MANSHOP2 AUG~jlI PROGRAN O0C AmLNTt VA … · -a109d 641 t8manshop2 aug~jli p87(u) ada joint progran 1/4 ad119 41 o0c amlntt va 2au gb unclassified f/c 12/5 ml

Generic Implementations

What happens when a generic Is elaborated?

What happens when an instantlation Is elaborated?

It depends...

Suppose an Initialization block appears at the end of ageneric package body:

with Textlo;package body Stack Is

beginTextlo.Put ("Stack Instance elaborated");

end Stack;

Then, each of the following will cause the above Putstatement to execute:

package S1 is new Stack;package S2 Is new Stack;

In the case of packages (not generics) there would onlybe one logical package and only one elaborationinitialization would occur.

This emphasizes the fact that there are as many logicalpackages (or subprograms) as there are instantlationsof a generic package (or subprogram).

3

Page 187: -A109D 641 T8MANSHOP2 AUG~jlI PROGRAN O0C AmLNTt VA … · -a109d 641 t8manshop2 aug~jli p87(u) ada joint progran 1/4 ad119 41 o0c amlntt va 2au gb unclassified f/c 12/5 ml

Logical or Physical?

Debate over whether an Implementation should actuallycreate physical copies of a generic for each Instance orsomehow "code share" among all the Instances.

Code sharing Is more the way a procedure or functionbehaves (re-entrant).

Physical expansion (cody copying) is more the way amacro expansion behaves.

There are advantages and disadvantages of each:

Physical Expansion, Pro:

Object code executes faster because all the workis done at compile time and no context switching isneeded among the Instances of the same generic code.

Implementation Is simpler.

Physical Expansion, Con:

Space requirements for object code can become areal problem if there a lot of Instances.

Recompllation of a generic spec Is always requiredeven If Just the body changes. (Why?)

.,,==,=.n== ==m == nuB m =a ~ lm nn m 1 !! I I

Page 188: -A109D 641 T8MANSHOP2 AUG~jlI PROGRAN O0C AmLNTt VA … · -a109d 641 t8manshop2 aug~jli p87(u) ada joint progran 1/4 ad119 41 o0c amlntt va 2au gb unclassified f/c 12/5 ml

- -.-.l _ l , p • -- r -

Code Sharing, Pro:

Significant savings in object code size.

Generic bodies can be changed without recompilingthe specs (and therefore the instantlatlons).

Code Sharing, Con:

Execution can be slower due to run timeinstantiations.

Implementation Is more difficult.

So, which is it? There Is a "best" answer:

For a development compiler, on a host machine, wheremaintenance, modification, and recompilation is likelyand turnaround time Is more Important that saving afew milliseconds at run time, you want a code sharingcompiler.

For a target compiler, In a time-critical application,where execution efficiency Is more Important thatrecompllation efficiency, you want a code copyingcompiler.

It's 11:00 ... Do you know what your compier isdoing?

(Do you know what the different vendors offer?)

5

Page 189: -A109D 641 T8MANSHOP2 AUG~jlI PROGRAN O0C AmLNTt VA … · -a109d 641 t8manshop2 aug~jli p87(u) ada joint progran 1/4 ad119 41 o0c amlntt va 2au gb unclassified f/c 12/5 ml

More Retrofitting - Make the following general:

*. package Project issubtype Line is String (1.80);subtype Word is String (1..80);type BreakChars is (' ', '-', '.', ,');

end Project;

with Project; use Project;procedure Next-Word (From : in out Line; Into : out Word) isbegin

Into := (others => ');for C in 1 .. 80 loop

- find first non-BreakChars letter in Fromend loop;for W in C.. 80 loop

- copy contiguous non-BreakChars to Intoend loop;for R in W+1 .. 80 loop

- left justify remaining letters in From- and set rest to a Blank

end loop;end NextWord;

with NextWord;with Project; use Project;with Text_lo;procedure Main is

lnput_Line : Line;Length : Natural;A_Word : Word;

begin ... - initializations, file openingswhile not Textlo.End Of File (InFile) loop

Input-Line := (others => ");GetLine (InFile, InputLine, Length);loop

NextWord (From => lnputLine, Into => A-Word);exit when AWord = (others =>PutLine (AWord);

end loop;end loop;

end Main;

6

Page 190: -A109D 641 T8MANSHOP2 AUG~jlI PROGRAN O0C AmLNTt VA … · -a109d 641 t8manshop2 aug~jli p87(u) ada joint progran 1/4 ad119 41 o0c amlntt va 2au gb unclassified f/c 12/5 ml

package Project issubtype Line is String (1..80);subtype Word is String (1..80);type BreakChars is (' ,'-, ", ,),

end Project;

generictype Line is array (Positive range <>) of Character;type Word is array (Positive range <>) of Character;BreakChars : String;

package NextWordPackage isprocedure NextWord

(From .in out Line; Into : out Word);end NextWordPackage;

package body NextWordPackage isprocedure NextWord

(From : in out Line; Into : out Word) isbegin

Into := (others => BreakChars (BreakChars'First));

with NextWord;with Project; use Project;with Textlo;procedure Main is

Input_.Line: Line;Length : Natural;A-Word : Word;package Words is new

begin - initializations, file openingswhile not Textlo.EndOfFile (InFile) loop

Input_- Line := (others => ");Get-Line (In-File, Input-Line, Leng'h);loop

Next Word (From => Input_Line, Into => A-Word);exit when AWord = (others => 'PutLine (AWord);

end loop;end loop;

end Main;

7

Page 191: -A109D 641 T8MANSHOP2 AUG~jlI PROGRAN O0C AmLNTt VA … · -a109d 641 t8manshop2 aug~jli p87(u) ada joint progran 1/4 ad119 41 o0c amlntt va 2au gb unclassified f/c 12/5 ml

Unwrapping Ada® Packages

LCDR Melinda MoranComputer Science Department

U. S. Naval AcademyAnnapolis, MD 21401

(301) 267-2797AV 281-2797LINDY@USNA

Adas is a registered trademark of the U S Governmet Ada Joint Program Office

' -mmimiimnnl ib~mmii'll

Page 192: -A109D 641 T8MANSHOP2 AUG~jlI PROGRAN O0C AmLNTt VA … · -a109d 641 t8manshop2 aug~jli p87(u) ada joint progran 1/4 ad119 41 o0c amlntt va 2au gb unclassified f/c 12/5 ml

Ada Program Structure

O 4 Basic Program Units:

E(Packages

O Subprograms

0 Tasks

= Generic Units

Page 193: -A109D 641 T8MANSHOP2 AUG~jlI PROGRAN O0C AmLNTt VA … · -a109d 641 t8manshop2 aug~jli p87(u) ada joint progran 1/4 ad119 41 o0c amlntt va 2au gb unclassified f/c 12/5 ml

Packages, a Powerful Tool forSoftware Engineering:

OAbstraction0 both data and process abstraction supported0 layers of abstraction supportedO faciltate managing complezity by allowing

division of problem into layers of abstractionwith 7 +/ - 2 components each

nformation Hidingo irrelevant information hiddenO only information relevent to each level of

abstracLon is visible and accessible at thaty levelModularity

o1 facilitate creation of libraries ofsoftware modules which can be reusedto implement many systems

o facilitate easily modified systems wherepackages can easily be added and subtracted

Bi"Localizationo facilitate creation of very cohesive packages

whIch car, be less tightly coupled

0 Uniformity0 Completeness2"Con irmab ii Ity

O communication only through visibleinterface minimizes debugging problemsby minimizing "ripple* effects

0 clear definition of interfaces simplifiestesting problems

Page 194: -A109D 641 T8MANSHOP2 AUG~jlI PROGRAN O0C AmLNTt VA … · -a109d 641 t8manshop2 aug~jli p87(u) ada joint progran 1/4 ad119 41 o0c amlntt va 2au gb unclassified f/c 12/5 ml

PACKAGES

Definition: collection of computationalresources, which may encapsulate datatypes, data objects, subprograms, tasksand even other packages.

Purpose: to express and enforce user'slogical abstractions within the language.

Applications/Common Usages:

o Encapsulate related data types, constants orobjects.

o Encapsulate related program units.0 Embody an Abstract Data Type.0 Embody an Abstract-state Machine.0 Encapsulate tasks.*

ilnfo taken from Software Engineering with Ada by Grady Boochwith exception of "] --

Page 195: -A109D 641 T8MANSHOP2 AUG~jlI PROGRAN O0C AmLNTt VA … · -a109d 641 t8manshop2 aug~jli p87(u) ada joint progran 1/4 ad119 41 o0c amlntt va 2au gb unclassified f/c 12/5 ml

Structure of a Package

0 Composed of 2 parts

0 Specificationo define the package interface with c2bfl

modules-- tre types Kid =-Aces if offerso define the portion of the package vlslb*e

to other moduleso must be compild bfoe prog=r units

which ume ito may cantain a -privat portion

0 Bodyo contAs lrIlmmrtation detas of1Ohw 8

the d c-age hfi Its contrac wtth thecliont modules

0 aciMttes "Iorm@Uofl hdt~ - hieirrlevo Wnorrmaton ft=m cient

o protects data Wv~nxtres and opea athonsIt encsuate s fr=n Indver twit ormaidoous tam periMn7 by chent module

o1 my I* aspetely copie at a atetft U Weetiwi

o0 may bereplaced with diferntkvp41 Ment~n wWttflr!CoMplt'r ippW to OtIW ndulss as kft

spa~~~~ Mictlp~ ~ wda1 my Mo b~ ~In t gm setaiwa ny

cotains types or object4 dclartiono may cotain a secumo of t auo

statefmts and an excption handler

Page 196: -A109D 641 T8MANSHOP2 AUG~jlI PROGRAN O0C AmLNTt VA … · -a109d 641 t8manshop2 aug~jli p87(u) ada joint progran 1/4 ad119 41 o0c amlntt va 2au gb unclassified f/c 12/5 ml

pwtmuar~~z.~ awlIn meamepinaa*.vzez cam : aI ~)

CIO

vitA T Zap - 2=1 mu-aft bier IRML-in LAI

EM I OW~~l 4USCR I- Mb int W I(27):

b"La

MT clmz I

m(3g

WC azp Le

gatMT(Ec)

M (,es IrWKMas~

wiendw Sefainwktal . Imsi stw obeg"

mT(mM I

Page 197: -A109D 641 T8MANSHOP2 AUG~jlI PROGRAN O0C AmLNTt VA … · -a109d 641 t8manshop2 aug~jli p87(u) ada joint progran 1/4 ad119 41 o0c amlntt va 2au gb unclassified f/c 12/5 ml

AD-AI.89 641 AfjjERffW XHPUITi97) ADA JOINT PROGYAN 3/4

UNCL*SSZIED F/C L2/3 HI.

Page 198: -A109D 641 T8MANSHOP2 AUG~jlI PROGRAN O0C AmLNTt VA … · -a109d 641 t8manshop2 aug~jli p87(u) ada joint progran 1/4 ad119 41 o0c amlntt va 2au gb unclassified f/c 12/5 ml

1.0

I O _1 _ __2 -

MICROCOPY RLSOLU1ION ItY1 CHAR'

Page 199: -A109D 641 T8MANSHOP2 AUG~jlI PROGRAN O0C AmLNTt VA … · -a109d 641 t8manshop2 aug~jli p87(u) ada joint progran 1/4 ad119 41 o0c amlntt va 2au gb unclassified f/c 12/5 ml

-- Unit Name: Basic 10-- Author: LCDR MORAN-- Date: 4 AUG 1987-- Function: Provides user ability to do input and output of- character, string, integer, and floating point

-- data types.

package Baslce9 is

procedure New Line;-- advances cursor to next line on the screen

procedure Get(Item : out character)l-- reads a single character from the keyboard

procedure GetLine(Item : out character);-- reads a single character and carriage return from the keyboard

procedure Put(Item : in character);-- outputs a single character to the screen

procedure PutLine(Item : in character);-- outputs a single character to the screen and advances the cursor-- to the next line on the screen

procedure GetcItem : out string);-- reads a string of characters from the keyboard

procedure GetLine(Item I out string);-- reads a string of characters and a carriage return from the keyboard

procedure Put(Item : in string);

-- outputs a string of characters to the screen

procedure Put Line(Item : in string);-- outputs a string of characters to the screen and advances the cursor-- to the next line on the screen

procedure Get(Item : out integer):-- reads an integer from, the keyboard

procedure Get Line(Item : out integer);-- reade an integer and a carriage return from the keyboard

procedure Put(Item : In integer);

-- outputs an integer to the screen

procedure Put.Line(Item : in Integer);-- outputs an integer to the screen and advances the cursor to the-- next line on the screen

procedure Get(Item t out float);

-- reads a floating point value from the keyboard

procedure GetLine(Item t out float);-- reads a floating point value and a carriage return from the keyboard

procedure Put(Item : in float);-- outputs a floating point value to the screen

procedure Put Line(Item : in float);-- outputs a floating point value to the screen and advances the cursor

to the next line on the screen

end Basic_10;

Page 200: -A109D 641 T8MANSHOP2 AUG~jlI PROGRAN O0C AmLNTt VA … · -a109d 641 t8manshop2 aug~jli p87(u) ada joint progran 1/4 ad119 41 o0c amlntt va 2au gb unclassified f/c 12/5 ml

@3~0 -30.4 .

-9 .3 a,-0

*z a3 13 0 a 3 U .C; .3 CL C0 C 2*2 5 4 C LS

I - C 03 -1 -L - .01 0 ., 0- .3 a. -1

21 G a a c~ a a 0- a a 0 2L. ! * a . 1. c . c L. .3 .- Z3 _ , _. _ , - . S -. a: - zm m3 13 a .V * s 1 0c 3 -0 In V "a is 1 n - I 0a

Cl a3 II - C 0 4* C -a r .3 C .3 S r 3 C .3c

0 0* - 0 a. I . 0 I 0 0 000

C2 -L C- SL 0L SL 0*- 2L 0 - 4*.0.4 c2 - 0 -. a. - a. .. 4 0 . C2 3.4 a. . A. .3.

I I I I IIS SI SI

41 3 4 33 S . .3 5 0 S 03 S 0 0 0

0 0 1 0 0

0.a 0.0 . . 0 0. 0.C- C

-00

.3 I313 a 1 0-Do- ao c !a

C; a;O *C 0 ooc .

-10 1 a CS. e .C Ic a L

1 !0 cV -; 2 - a. 2. 1. 3 - z 2 o - C .

Wn -u 0 U a 0Ca S. S0 1 L . L

.C 4 .3 CL 0 .0. S.C C3 L0CSCu . *4.

102 CL. @

Page 201: -A109D 641 T8MANSHOP2 AUG~jlI PROGRAN O0C AmLNTt VA … · -a109d 641 t8manshop2 aug~jli p87(u) ada joint progran 1/4 ad119 41 o0c amlntt va 2au gb unclassified f/c 12/5 ml

package COMPLEX Istype COMPLEX-NUMBER is record

REAL-PART FLOAT,IMAGINARY-PART: FLOAT,

end record;function "- (A,B in COMPLEX-NUMBER) return COMPLEX-NUMBER;function"-" (A,B In COMPLEX-NUMBER) return COMPLEX-NUMBER;

end COMPLEX;

package body COMPLEX isfunction "-" (A,B. In COMPLEX-NUMBER) return COMPLEXNUMBER is

RESULT COMPLEXNUMBER;begin

RESULT.REALPART:= A.REAL..PART - B.REALPART,RESULT. IMAGINAPYPAPT := A.IMAGINARYPAPT + B.IMAGINAPYPART;return RESULT,

end;

function "-" (A,B- In COMPLEX-NUMBER) return COMPLEX-NUMBER IsRESULT COMPLEXNUMBEP;

beginRESULT.REALPART := A.REALPART - B.REALPART;RESULT.IMAGINARYPART:= A.IMAGINARYPART - B.IMAGINAPYPART,return RESULT;

end;end COMPLEX;

Page 202: -A109D 641 T8MANSHOP2 AUG~jlI PROGRAN O0C AmLNTt VA … · -a109d 641 t8manshop2 aug~jli p87(u) ada joint progran 1/4 ad119 41 o0c amlntt va 2au gb unclassified f/c 12/5 ml

package FRACTIONS Istype FRACTION Is record

NUMERATOR :NATURAL;DENOMINATOR :NATURAL;

end record;function " (A,B In FRACTION) return FRACTION;function (A,B In FRACTION) return FRACTION;

end FRACTIONS,

package body FRACTIONS Isfunction *" (A,B: in FRACTION) return FRACTION is

RESULT. FRACTION;begin

RESULT.NUMERATOR:=. (A.NUMERATOR * B.DENOMINATOR)(B.NUMERATOR *A.DENOMINATOR);

RESULT.DENOMINATOR : A.DENOMINATOR + B.DENOMINATOR;return RESULT,

end;

function "-* (A,B In FRACTION) return FRACTION IsRESULT: FRACTION;

beginRESULT.NUMERATOR:= (A.NUMERATOR * B.DENOMINATOR) -

(B.NUMERATOR * A.DENOMINATOR);RESULT.DENOIINATOR;: A.DENOMINATOR B.DENOMINATOR;return RESULT;

end;end FRACTIONS;

Page 203: -A109D 641 T8MANSHOP2 AUG~jlI PROGRAN O0C AmLNTt VA … · -a109d 641 t8manshop2 aug~jli p87(u) ada joint progran 1/4 ad119 41 o0c amlntt va 2au gb unclassified f/c 12/5 ml

*wsiiimi rnulg mmdl

with COMPLEX, FRACTIONS;use COMPLEX, FRACTIONS;procedure ARITHMETIC Is

X: FRACTION:= (3,4);Y: FRACTION := (5,6);FRACTION-RESULT: FRACTION:= (1, 1);

A: COMPLEXNUMBER := (5,7);B. COMPLEXNUMBER := (8,9);COMPLE)X.RESULT: COMPLEXNUMBER:= (0,0);

beginFRACTION.RESULT:= X + Y;COMPLEXRESULT:= A + B;

FRACTIONRESULT : X - Y;COMPLEXRESULT:= A - B;

end;

Page 204: -A109D 641 T8MANSHOP2 AUG~jlI PROGRAN O0C AmLNTt VA … · -a109d 641 t8manshop2 aug~jli p87(u) ada joint progran 1/4 ad119 41 o0c amlntt va 2au gb unclassified f/c 12/5 ml

Packages with No Body

package CALENDAR istype DAY is (MONDAY, TUESDAY, WEDNESDAY. THURSDAY, FRIDAY.

SATURDAY. SUNDAY),type MONTH is (JANUARY, FEBRUARY, MARCH, APRIL, MAY, JUNE.

JULY. AUGUST. SEPTEMBER. OCTOBER. NOVEMBER,DECEMBER):

type YEA'. is range 0 .. INTEGER'LAST;end CAL;-. jAR:

package METRICEARTHCONSTANTS isEQUATORIAL-RADIUS : constant :- 6378.145: -- kmGRAVITATION-CONSTANT: constant:- 3.986012e5; -- km'*3/secs2SPEED-UNIT : constant :- 7.90536828; -- km/secTIME.UNIT : constant :- 806.8118744: -- sec

end METRICEARTHCONSTANTS;

IMETR ICEA RTHCONST ANTS package taken from. Software Engineeringwith Ada by Grady Boochi

Page 205: -A109D 641 T8MANSHOP2 AUG~jlI PROGRAN O0C AmLNTt VA … · -a109d 641 t8manshop2 aug~jli p87(u) ada joint progran 1/4 ad119 41 o0c amlntt va 2au gb unclassified f/c 12/5 ml

page F-30wuith TYPES;use TYPES;package GIGI_GRAPHICS.PKG is

procedure SETSCREENSCALE(left,righttop,bottom: in integer);procedure CLEARSCREEN;procedure SETSCREENCOLOR(color :in colortype);procedure SETREVERSEVIDEO;procedure SETNORlIALVIDEO;procedure FREEZESCREEN(ticks :in integer);procedure MOVECURSORABS(xcoord,ycoord : in integer);procedure SETCLRSORAT(xcoord,ycoord :in integer);procedure MOVECURSORREL(xincr,yincr :in integer);procedure QtlERYCURSORPOSC~ccoord,ycoord :out integer);procedure SAVELASTIMOVELOC;procedure RESTORELASTMOVELOC;procedure PUTDOT;procedure DRAWLZNETO(xcoord,ycoord :in integer);procedure DRAtPOLYLINE(coordarray :in coordarraytype;

num _of..coord~pairs :in integer);

procedure DRAWCIRCLE(xcoord~yc*oord~radius in integer);procedure SETSHADINCEZEFL114E(y_value: in integer);procedure SETSHAD13CCHAR(shadin&_char :in character);procedure SETSHADINGON;procedure SETSHADINGOFF;procedure SAVELASTDRAWLOC;procedure RESTORELASTDRAWLOC;procedure SETWRITINGCOLOR~color :in colortype);procedure SETWRIT INCG':ODE (mode : in modety pe)procedure SETTEXTSIZE(size in integer);procedure SETTEXTPATHi(angle in integer);procedure SETTEXTHEIGIIT(height :in integer);procedure SETITALICSMIGLE(angle in integer);procedure SETflLINlKOFF;procedure SETBLINKON;procedure SAVETEXTATTRIBUTES;procedure RESTORETEXTATTRIBUTES;procedure OUTPtIT(integer _val : in integer);procedure OUTPUT(text _ val: in string);procedure OUTPUT(char val :in characcer);

end GIGI _GRAPUICS_PKC;

Page 206: -A109D 641 T8MANSHOP2 AUG~jlI PROGRAN O0C AmLNTt VA … · -a109d 641 t8manshop2 aug~jli p87(u) ada joint progran 1/4 ad119 41 o0c amlntt va 2au gb unclassified f/c 12/5 ml

page F-31with TEXTHANDLER;use TEXTHANDLER;package body GIGI_GRAPHICSPKG is

-- current screen scale boundsCLEFT integer :- 0; -- current left x-axis value

CRIGHT integer :- 767; -- current right x-axis valueCTOP : integer :- 0; -- current top y-axis valueCBOTTO1M : integer :- 479; -- current bottom y-axis value

-current cursor position

CP_X : integer : 0; -- current position, x-valueCPY: integer : 0; -- current position, y-value

task SEMAPHORE is

entry SEIZE;

entry RELEASE;end SEMAPHORE;

task body SEMAPHORE is

INUSE : boolean :- false;begin

loopselect

when not IN USE ->

accept SEIZE doINUSE :- true;

end SEIZE;

orwhen INUSE ->

accept RELEASE doIN USE :- false;

end RELEASE;

end select;end loop ;

end SEMAPHORE;

-- - - --- -- -- -- -- -- -- -- --- -- -- -mm-- - -- -- -- -- --

Page 207: -A109D 641 T8MANSHOP2 AUG~jlI PROGRAN O0C AmLNTt VA … · -a109d 641 t8manshop2 aug~jli p87(u) ada joint progran 1/4 ad119 41 o0c amlntt va 2au gb unclassified f/c 12/5 ml

page F-32

function INBOUNDS(xcoord,ycoord in integer) return boolean isxvalid, yvalid : boolean;

begin-- check if xcoord between left and right screen scale boundsif ((xcoord >- cleft) and (xcoord <- cright)) or

((xcoord <- cleft) and (xcoord >- cright)) thenxvalid := true;

elsexvalid : false;

end if ;

-- check if ycoord between top and bottom screen scale boundsif ((ycoord >- ctop) and (ycoord <- cbottom)) or

((ycoord <- ctop) and (ycoord >- cbottom)) thenyvalid := true;

elseyvalid : false;

end if ;if (xvalid) and (yvalid) then

return true;else

return false;end if;

end ;

procedure CLEARSCREEN isT TEXT;

beginT := TO_TEXT(esc) & "Pp" & "S(E)" & esc & "\";

PUT(T);end ;

procedulre SETSCREENCOLOR(color in colortype) isx : integer;T : text;

beg inx := colortype'pos(color); -- xordinal position of color chosen

-- see colortype in types packageT : TOTEXT(esc) & Pp" & "5s(I" & integer'image(x) & ")"

& esc & "\";PUT(T);

end;

procedure SETREVERSEVIDEO isT TEXT;

beginT : TOTEXT(esc) & "Fp" & "S(1)" & esc 4PUT(T);

end ;

......... ............... . . . . , ,,, .- -.- - ---- - --,- - - - - - - - - - - - - - -

Page 208: -A109D 641 T8MANSHOP2 AUG~jlI PROGRAN O0C AmLNTt VA … · -a109d 641 t8manshop2 aug~jli p87(u) ada joint progran 1/4 ad119 41 o0c amlntt va 2au gb unclassified f/c 12/5 ml

Specification Structure

0 2 Parts

0 Visible portiono extends from beginning

of package specificationup to word "private"

O Client modules can "see"and use the types,objects, subprograms inthis section

o Resources in this partof the spec are said to beexported

Page 209: -A109D 641 T8MANSHOP2 AUG~jlI PROGRAN O0C AmLNTt VA … · -a109d 641 t8manshop2 aug~jli p87(u) ada joint progran 1/4 ad119 41 o0c amlntt va 2au gb unclassified f/c 12/5 ml

E Private portion0I Part or the specification

that follows the word"private"

[3 Types declared in thisportion of the spec canbe seen "textually" buttheir structuralcomponents are notaccessible to/corruptibleby the client

0 Declaration of types asprivate facilitates useof abstraction whereclient operates withlogical properties of thetype and cannot accessthe details of its physicalimplementation

0- Private types can only bedeclared in the visiblepart of a package; theirimplementation is in theprivate part of the package

0I 2 categories of private type0 private types - can use

operations declared in visiblepart of pkg spec, assignmentoperator, eq. and inequality op.

0 limited private types- sameas for private types exceptassignment, eq and inequalityoperations unavailable

),mm,,,mmm ~ ~ IM.hmm N H mm m

Page 210: -A109D 641 T8MANSHOP2 AUG~jlI PROGRAN O0C AmLNTt VA … · -a109d 641 t8manshop2 aug~jli p87(u) ada joint progran 1/4 ad119 41 o0c amlntt va 2au gb unclassified f/c 12/5 ml

pacmago .3c!om% Is

type Frtacriof IS ty;o !s :

Nu.,eralrt: In,*q~e,-

Dwctenomntr PSIF.~OSN.0:lnlg" .1; ur Frion; -

fu*'ctfl on gp. FrW l r~on) return fn~egon;

tumarlott Vlaxereat longr; 0: y:-qor returnon return goracrion

f-C.0 V..~t w~2~~ Frec-lo,) return Fracl I on;

ftl'ec Ion Nut(. y Frcrionl reftun Int ; func-rion yot(. y; ract'an; return Faom;

IWIC-IoOance(. Fr: .-ron) reurn 16,090, *tncfion *'1

M. y: Frac-lor) return Fraoieon;

functIin (A y: Frc-*on, return, trjc-!on; fi~~n ~ y rcfn rtr cI.

fun Ifan *x y rtIC ) *fr P-'-in WC(O E .rSdlV oc m eru bid"

funltion -uai(. y Fc"ni FretuN to~an ufclc n 1:UC~ fraC-,tta return 000104n;

f~tCtifA -1-(X, y: Froc-lon; return Fraci-lc; *s-*(9 yf1? -SCi. ( Frea -er retrn WI w- aeI "e Io c Cer I snS

tc1'fon Eaeue(A: r,,!,,) return F-oioan; printe ous~- rc!Q) rtr Fa-l

futctton Pracx. t Fr~a P.-en o roturm ;nte.n; f1y9*Io FrciloTj - a-ctrvunTT;funcclion *1-tofrac V, P njcr- - return Oid;fmrqm~~a-o~:rtr Z-f

tut-o Roacex FracSV1 m retrnFer-on;prfv-'

O..a'.naror: 1;l..sa rolrd;

sa Ftac'ions;

Figure 1-7 Paci c'- i ge

pacxege. body Frc-fcn fs

coca 'Or um-f om way *%.e~r3c-!cf

func!fam qummr(x. FI~ct20n eofrt n toqr Isbegin

return C. oSerator;

- coca #or tonclifon wa~y 3ono-coca 'or fumcflon wany It

fuflct :n '(.y; F actan) rotrwn Orjet!On IS01: ne gar;

0n -%

-cre Or t,nio waye~ni-,~I~Z

- Coce rocr tonmtifl bOOy qo-

fvl f~z tc- n~~yttC

foc rn z.Wi'. Y: Frzc-!n, returm xCofefl Isbog I n

end ~-code 'or tN cr:on tody -

- OCd 'or .Nrcfn way )

fumdcTion r b orcc retur' In 0'er Is

rotur, 4nre/Cntend Plic-ro-t;

tune-', nro .c- fnlw.en' reru,, F,c-:on is

returnf

end rrOu

Page 211: -A109D 641 T8MANSHOP2 AUG~jlI PROGRAN O0C AmLNTt VA … · -a109d 641 t8manshop2 aug~jli p87(u) ada joint progran 1/4 ad119 41 o0c amlntt va 2au gb unclassified f/c 12/5 ml

package KEYMANAGERistype KEY is private;procedure GETKEY(K -cut KEY);function Y< (X,Y KEY) return BOOLEAN;

privatetype KEY is new INTEGER range 0.. INTEGER'LAST,

end KEY-MANAGER; _

package body KEY-MANA ER isNEXTKEY : KEY:= 1 -- own variable - exists between

-- procedure callsprocedure GETKEY(K ,o3t KEY) isbegin

K :: NEXT.KEY; 7NEXT..XEY := NEXTKEY + I

end GETKEY,

function "<*(X.Y : KEY) ft4rn BOOLEAN isbegin

return INTEGER(X)<ISIWER(Y),end Yend KEY-MANAGER; "

[Taken from Programming with Ada by Peter Wegneri

If

Page 212: -A109D 641 T8MANSHOP2 AUG~jlI PROGRAN O0C AmLNTt VA … · -a109d 641 t8manshop2 aug~jli p87(u) ada joint progran 1/4 ad119 41 o0c amlntt va 2au gb unclassified f/c 12/5 ml

package 3BR is

type NUMBERS is rang* 0 . 9

procedure TAKE (ANUMBER ont NUMBERS);

procedure StRve (NUMBER in NUMBERS);function NOV SERVING return NUMBERS;

and 5-9;

package body 5_1 is

SELV-A-MATIC :NUMBERS :- ;

procedure TAKE (A-NUMBER :eot NUMBERS) is

beginA NUMBER SERVAN-ATtC;

SERVA4-MATIC SgRYA&MATXC - 1;

sad TAKE;

procedure SERVE (NUMBER :in NUMBERS) is separate;

function Nou SERVING return NUMBERS is *oerate;

and BR;

with B R;

procedere ICE CREAM is

YOUR NUMBER :NUMBERS;

begin

TAKE (YOUR NUMBER);

loop

if NOW SERVING - YOURNUMBER then

SERVE (YOUR NUMBER);

exit;

end if;

end loop;

end ICE-CREAM;

with B B;

procedure ICE-CREAM is

YOUR NUMBER NUMBERS;

begin

TAKE (YOURNUMBER);loop

if NOV SERVING I YOUR NUMBER then

SERve (YOUR.NUMBERz);

exit;

elseYOUR NUMBER YOUR-NUMBER - 1;

oud it;

snd loop;

and ICE CREAM;

Page 213: -A109D 641 T8MANSHOP2 AUG~jlI PROGRAN O0C AmLNTt VA … · -a109d 641 t8manshop2 aug~jli p87(u) ada joint progran 1/4 ad119 41 o0c amlntt va 2au gb unclassified f/c 12/5 ml

package B. is

type NUMBERS is private;

procedure TAKE (ANUMBE : out NUMBERS);

procedure SERVE (NUMBER : in NUMBERS);

function NOW SERVING return NUMBERS;

private

type NUMBERS is range 0 99;

dad B-1;

vith a-1;see BR ;procedure ICE CREAM is

YOUR NUMBE : NUHBERS;

begin

TARE (TOUR NUMBER);

loop

if NOV SERVING - YOUR NUMBER them

SERVE (TOUtRNUmiNE);

azit.ale*

YOUR NUMBER :- NOW SERVING;

ud if;

ead Loop;

end lCE CREAM;

package BR is

type NUMBERS is limited private;

procedure TAKE (A NUMBER : out NUMBEIS);procedure SERVE (NUMBR: is NUMBERS);

functiou NOV SERVING return NUMBERS;

fumctiou "-" (LEFT. RICET : in NUMBERS)

ratera BOOLEAN;function CLOSE ENOUGs (A NUMBER in NUMBERS)

rotor BOOLEAN;

type NUMBERS is raig O .. 99;

sad -1;

vich BR;use BR;

procedure ICECREAX is

YOURNUMBER NUMBERS;

procedure GO TOUQ is separate;

TAKE (TOUR NUMBE);it NOV SEING - TOUNUMIER them

SEVE (YOUR NUMBR);

eloif CLOSECENOUGE (TOUR NUMBER) then

while NOV SERVING /- TOURNUMBER loopmull; unit your turn

end loop;SERVE (YOURNUMBER);

elseGO TODQ;

end if;

end ICE CREAM;

-ds,.=. .,..

Page 214: -A109D 641 T8MANSHOP2 AUG~jlI PROGRAN O0C AmLNTt VA … · -a109d 641 t8manshop2 aug~jli p87(u) ada joint progran 1/4 ad119 41 o0c amlntt va 2au gb unclassified f/c 12/5 ml

Implications of Using theSpecification's Private Section

O Forces recompilation of specificationand any client modules if the datastructure used to implement a typechanges.

o Can be avoided if data structure neededfor a package can be internal to thebody of the package but this disablesclient's ability to declare multipleobjects of a particular type. Habermanand Perry refer to "open type" and"unique object" solutions.

O Can be avoided by making private type an"access" (pointer) type

Page 215: -A109D 641 T8MANSHOP2 AUG~jlI PROGRAN O0C AmLNTt VA … · -a109d 641 t8manshop2 aug~jli p87(u) ada joint progran 1/4 ad119 41 o0c amlntt va 2au gb unclassified f/c 12/5 ml

0

I(-I! .*d L U

01 -; -

cc- 2 E 2 z

C= r I

o t-2 .5CL c E- Z 3

o ~ ~ ~ ~ ~ -2 ar~* ~ ~ ..

o~z V -

-- --- - - = -

s S

.. SjIx 2 2 z a.7

uj C,

Z2

774

2'2

-3 SL :L

0 0.2

As ~ - --~ L. 'a- 'V

C .~ C22

-6

Page 216: -A109D 641 T8MANSHOP2 AUG~jlI PROGRAN O0C AmLNTt VA … · -a109d 641 t8manshop2 aug~jli p87(u) ada joint progran 1/4 ad119 41 o0c amlntt va 2au gb unclassified f/c 12/5 ml

0% 0% 0-0 % -

999994 00 0 0%r. r 0%

we 0 0 000 r-4 r4 -4 0fu000)4.1 0 4.1V. M 00idi00 0 00 00 04MV0 r r. $4 i$~4 $4 0 00 k.dk-4C

4n.V W4 r4 4b44k QQQ lk p N A A N

0 $0

0

5.44

I0 000 00 0000% V.5 455. 5444 54.5

C 0.0

to0 m c-- 3c0 go09C -4C0 .4 Hx a 0

04 -r 0 0 0 V0 P ) -0V0 00-4-4-4- k 0-4V "4 0 0

0 -- I"4. VV VOw V0 4.0 Z A00 0 %,o VV 0 0 $ 4 01

V0 4 0 0 go N0$a *-N m e -4 N k * go, 0w-mm 4 4 1 0~.41 o-. X" 00 4.1k

to0 r. AwC Ow~ %moH go 00. "p -4 0 00000 0-4 go go%.w o 0 0f

04 0oV s0 445 O"41 *.05 E0 5

a0>, 0 0 41. 0-00 040 W4 000 41 $4 00 0000. %- b b-b%$4 *w 0 -40 $

-P 4 X X0 X X r4 X4 0..04 *. V0 0 V 540 ja %-w :2 0~ 00 V r

0.. ei4 a 4 .. X. 15 Ce z . es 2 .2' We V' 1 00 0 00a0 W44 a *f +1 0 V A O0Er $4 6=04 P>m 4 V X Zi c~ 0c We~ pa. 0 E- -4 VV

044 0 XX OX r 0 00-V V 4 Ca $ -4 -C4 CX C4 C CCC C - 9C0 c$44DO 544 00X0 ooX 00b'41 0o door.

Ow-HE L*- 041 00- %-9- -- - - -A0 41 , 9- " r

0-4 V 0 0 0 0 ::0 0 0 ( V U0 V0 0 0 0.466 v 4 0 c c6 +Ic N 'V c05 c c "4"4 9C$ O

0 0 0 4) 00V go~ 4%4 " 4.4 %4 U14 U 44 44 U44 44 > VZrZ V

Page 217: -A109D 641 T8MANSHOP2 AUG~jlI PROGRAN O0C AmLNTt VA … · -a109d 641 t8manshop2 aug~jli p87(u) ada joint progran 1/4 ad119 41 o0c amlntt va 2au gb unclassified f/c 12/5 ml

QCa'baQe aoo2 rr&I=rtCnI L.

;-P0 rra.ction NCOc is arrav%1..2 ot inreqors-

IacKaqe LntIGT is& ftSw ruxtLU. Lnzwger_13(&nteqeri4

runction fakeractin.N. 0 x inteqerp return Fraction isF a Fraction;00qin

ii D Ift 0 thenF a- new FractionNoom:

*- or tractionst %. 0. the numerator carries the negative signmot. x4 D '% 0 tnr.

PCI) s-N:

*no tit~return Pt

OI soraise Zeroi~enomanatorE-rors

eno It*:

'unction MjmerA a Fraction) return inteqew- as

return A(1)saend hwser;

runction DewaoeA a Fractioni return integer is009&n

return A(2)tend LIenoo:

proceoure Put(A t in Fraction, isoeoin

lnt_1O.Put(~aNemr%%),4);Teu't10.Put Cu/"P1

Int.10. PuAt(Den.. iX) *I);Text1O. Put (*h tlerie a;

eno Put$

tunction aCD(X. Y t Integer) return Integer isbegin

ti V - 0 thenreturn ka

return iGCD(Y.A 000 '1):end ti I

Ono SCIDa

Pr.LCCLur* SfepoA. t 3 anl out Intoeri-,

arocedure S~e4pd, v e sn out integer)i inTemp S Inteverfoeg in

Page 218: -A109D 641 T8MANSHOP2 AUG~jlI PROGRAN O0C AmLNTt VA … · -a109d 641 t8manshop2 aug~jli p87(u) ada joint progran 1/4 ad119 41 o0c amlntt va 2au gb unclassified f/c 12/5 ml

tam 1wactidmUma Is

- ~ia- MSEM Ieu lamte t- 0 uag..O:ae

tintim~~ l~taim3 3 2a Ma~ e Fraction L&F I fractions

-v $;o - Vzetim wafts- wfractiam 0, 6 h smmwmtor Crriamft aa "V @Lousi

if 0 4S =IP.MBtC~ 1- -91V.Dimlmtr s- -0:

V.-umt~ I- no

am aeetims

fintia. W~w(X t freatm) getarn integer isbein

roetg 1. Smarmtor;

ftwatim Dee(li acstion) return lataga is

ve~ I . Denmiatour

Izw Pat (Z a in fttim) isbein

TMEs I0.let(/):rut !O-fveenumz,i),

function a(x. I aInatw) in~lteger 19bein

If T -a tbmretur Is

frtarb WM(II a" T):

peireO6"MM ~(Z. T a In Mt 1atW),

aeoneave &no (Z. TI In mat iate) I0

TWO I- Ii1 I- Tot

Cumatim memme I Fraction) return Traction isa. 6 3 Intger

9 MW(MMr X))v a.me(mmuI)I.S 09tm

SOMPOD) I

ami uom

ftnation veciproall (: Fract ion) -etmn Fract ion is

Page 219: -A109D 641 T8MANSHOP2 AUG~jlI PROGRAN O0C AmLNTt VA … · -a109d 641 t8manshop2 aug~jli p87(u) ada joint progran 1/4 ad119 41 o0c amlntt va 2au gb unclassified f/c 12/5 ml

function 0+ (X, T Fraction) return Fraction ISbegin

return Reduce Uabaftactio(rmor(X) -Daum (T) +Wwr (T) o* ns(Z),

and 6+0 1

efuntion O-(X t action) returnt Fraction isbegin

bsn(x)*Don(Y)) )

func ion '(X : acation) return Fraction inbegin

return R.educe( smkeFraction (ar (X) aowemr () , Damu(x) scumnn(y))and 1*01g

function a/O(2,, T 2 Fraction) Return Fraction isbegin

return Reduce( (X*%ciLrocn.L(T)) itend 0/0

function Equal (X, I : Fraction) retun boolesin isbegin

return rmorM *Dean=(M - MnrM*oa Xand Iqual.

function mc*(X, T Fraction) return bolen isbegin

return -c(Xein1 W' sr()*Csnow(X);and 6-u;

function 6 -O(2. T Fraction) return beeson Lubegin

return ptaer(x) eOmn(y) 3- saary) O (X) I

function 2wesoimam t1 Fractin) ae nlest Inbegin lsmvW))/

f~~tJ- -tW Weni( W I ~ u Fraction is

begingem beteti(Ilo

an resm lawro/atew,

and Fratiu

Page 220: -A109D 641 T8MANSHOP2 AUG~jlI PROGRAN O0C AmLNTt VA … · -a109d 641 t8manshop2 aug~jli p87(u) ada joint progran 1/4 ad119 41 o0c amlntt va 2au gb unclassified f/c 12/5 ml

package MANAGER istype PASSWORD is private;NULLPASSWORD constant PASSWORD;function GET return PASSWORD;function ISVALID(P in PASSWORD) return BOOLEAN;

privatetype NODE;type PASSWORD is access NODE,

end MANAGER;

package body MANAGER istype NODE is range 0.. 7000

end MANAGER,

- , " +, o . ,.= !}.'. -" - - ' ' .- / - , I -- ,'

Page 221: -A109D 641 T8MANSHOP2 AUG~jlI PROGRAN O0C AmLNTt VA … · -a109d 641 t8manshop2 aug~jli p87(u) ada joint progran 1/4 ad119 41 o0c amlntt va 2au gb unclassified f/c 12/5 ml

0 Reason private types must be includedin private part of the specificationrather than put in the body of a packageis that compiler needs to be able todetermine how much storage to allocatefor instances of private types declaredby client modules.

O "Inclusion of private data types in thepackage specification implies that achange in representation of the privatedata type will require recompilation ofthe program unit which contains thepackage specification, thus violating theprinciple that package specifications arerecompiled only when there arespecification changes which affect theuser. This appears to be a very heavyprice to pay for the simplification incompiling and loading that is achievedby including private declarations in thespec if ication part. "[Taken from Programmingwith Ada by Peter Wegner]

Page 222: -A109D 641 T8MANSHOP2 AUG~jlI PROGRAN O0C AmLNTt VA … · -a109d 641 t8manshop2 aug~jli p87(u) ada joint progran 1/4 ad119 41 o0c amlntt va 2au gb unclassified f/c 12/5 ml

Using a Package

O via textual inclusion in theclient module

C package has NOT teen separately

compfled

0 package is visible in clientfrom the point it is first declared

0 spec and body do not have to be

textually contiguous in client but

spec must come first

Page 223: -A109D 641 T8MANSHOP2 AUG~jlI PROGRAN O0C AmLNTt VA … · -a109d 641 t8manshop2 aug~jli p87(u) ada joint progran 1/4 ad119 41 o0c amlntt va 2au gb unclassified f/c 12/5 ml

[] via context specification using

the "with" clause

o package has been separately compiled

and is made visible via the *with* clause

0 this method supports ideas of modularity

and localization better than textual

inclusion method

o must prefix references to items with

the package's name and a period

G necessitates prefix form of notation

for use of an overloaded operator

such as 4+* or '-, etc.

0 can use 'renames" clause to allow

use of operators in infix form

0 can use *USE* clause to gain direct

visibility to items in the package

o use of "USE" clase can create

ambiguity and pollute the name space

Cl Both methods import ALLelements-of the visible part

of a package -- no selectiveimportation such as inModula 2 -- argues forcarefully segmenting packagesto achieve same effect

Page 224: -A109D 641 T8MANSHOP2 AUG~jlI PROGRAN O0C AmLNTt VA … · -a109d 641 t8manshop2 aug~jli p87(u) ada joint progran 1/4 ad119 41 o0c amlntt va 2au gb unclassified f/c 12/5 ml

procedure COMPLEXLCOMPUTATIONS isprocedure ONE,procedure TWO;package COMPLEX is...procedure ONE is...procedure TWO is...package body COMPLEX is...

X, Y, Z • COMPLEX.COMPLEXNUMBER;begin

Z := COMPLEX.+"(X,Y);end;

with COMPLEX.procedure COMLELCOMPUTIATIONS is

procedure ONE;procedure TWO.procedure ONE is...procedure TWO is ...

X, Y, Z COMPLEX.COMPLEXNUMBER;beginZ : COMPLEX."+'(XY);

end;

with COMPLEX, use COMPLEX,procedure COMPLEXCOMPUTATIONS is

procedure ONE,procedure TWO;procedure ONE is...procedure TWO is ...

X, Y, Z : COMPLEX.NUMBER;beginZ:=X+Y;

end,

Affil

Page 225: -A109D 641 T8MANSHOP2 AUG~jlI PROGRAN O0C AmLNTt VA … · -a109d 641 t8manshop2 aug~jli p87(u) ada joint progran 1/4 ad119 41 o0c amlntt va 2au gb unclassified f/c 12/5 ml

PaCkage GOLF-INFO Is

type G-CLFCLUB is (DPI VER, IRON, PUJTTER, WEDGE, MASH!E);type GOLF-SCCPE is range I 2CC;type HCLENLM1EE. is range 1 1 8,type HANDICAP Is range 0.. 36,type SCCRE-DA.A 1s array (HC'rLENrL5E) or GCLF-SCCRE,PAR...YR..CrCUR5E : constant GCLF-5CCORE := 72;PAP-V.ALUES: constant (5C'_RL.DATA:

(I =) 5, 2 > 3, 3 = > ', 4 = 4, 5 > 3, 6 > ~

13=> 4, 1-4 5, 15=> 3, 16=> 4, 17=> 4, 18=>_;

procedure CrUTTT CRECRE:in SCCRE-DA-1ATOTAL.- out GOL-SC.RE);

end GOCLF! NFO;

package body GCLFINF0 Is

procedu*re "Ct.PUITE-TCTAL-SCRE(-CCRES. In 5CORLDA7A,TOTAL. out GOLF-50GRE) is

b eg, nTOTAL := 0;-for FiCLE In FCLELr8ER loop

TOTAL :=TOTAL + 5CCRES(HOLE);end loop;

end;

end GOLF-INFO;

[Taken fromn Ada. An7 Introduction by Henr/ Ledgari1

Page 226: -A109D 641 T8MANSHOP2 AUG~jlI PROGRAN O0C AmLNTt VA … · -a109d 641 t8manshop2 aug~jli p87(u) ada joint progran 1/4 ad119 41 o0c amlntt va 2au gb unclassified f/c 12/5 ml

with GOLF-INFO, TEXTIO;use GOLF-INFO, TEXTIO;procedure KEEP-SCORE is

MY-SCORES SCOREDATA;TOTALSCORE GOLFSCORE;

begin

PUT(Let's have the scores for each hole.");ror HOLE In HOLE-NUMBER loop

NEW-LINE;PUT(HOLE); PUT( ");GET(MYSCORES(HOLE);

end loop;

COMPUTLTOT AL_5CORE(MY._SCORES, TOTALSCORE);NEW-LINE;PUT('Your total Is *); PUT(TOTALSCOREJ);

NEW_..LINE,It TOTAL-SCORE < PAR-FOPCOURSE then

PUT(PARFORCOURSE - TOTALSCORE); PUT(" Under Par");elsIt TOTAL-SCORE = PAREFORCOURSE then

PUT("An Even Par");else

PUT(TCTAL.SCCPE - PAP,.FO._COUR5E); PUTC Over Par);end it;

end KEEPSCORE;

[Taken trom Ada: An Introduction by Henry Ledoardi

Page 227: -A109D 641 T8MANSHOP2 AUG~jlI PROGRAN O0C AmLNTt VA … · -a109d 641 t8manshop2 aug~jli p87(u) ada joint progran 1/4 ad119 41 o0c amlntt va 2au gb unclassified f/c 12/5 ml

procedure OUTER ispackage HEIGHT is

ID INTEGER,VALUE FLOAT,

end HEIGHT.

package WEIGHT isID :INTEGER,VALUE: FLOAT,

end WEIGHT,

procedure INNER isuse HEIGHT, WEIGHT,

beginHEIGHT.VALUE := 65.3.WEIGHT.VALUE = HEIGHT .VALUE,VALUE := 63.5; -- unqualified name causes ambiguity

end INNER,

beginVALUE 6,3.5 -- illegal because outside scope of USE

-- statement so name must be qualifiedend;

[Example taken from Programming with Ada by Peter Wegnerl

L As

Page 228: -A109D 641 T8MANSHOP2 AUG~jlI PROGRAN O0C AmLNTt VA … · -a109d 641 t8manshop2 aug~jli p87(u) ada joint progran 1/4 ad119 41 o0c amlntt va 2au gb unclassified f/c 12/5 ml

PROGRAM 3.8 Modula-2 Version of Program 3.7

(.This definition module is a separate compiland and iscompiled before the program ReverseName is compiled..)

DEFINITION MODULE Stacks;* SSEG:=8; e)('This is a compiler directive required by the particular operating system being

used. It assigns a segment number of a definition module. In general, this isnot required. *)

EXPORT QUALIFIED~ (°type -) Stack,

(aproc -) Empty.

(-proc -) Pop,(a proc -) Push,

(- proc -) Initialize,(-proc -) Remove;

TYPE Stack; (- Representational details hidden -)

PROCEDURE Empty(S: Stack) : BOOLEAN;(-Returns true if stack is empty..)

PROCEDURE Pop(VAR S Stack) CHAR:(- Strips top element off stack. *)

PROCEDURE Push(VAR S. Stack; X. CHAR);

(, Adds element to top of stack. e)

PROCEDURE Initialize(VAR S. Stack);(- Sets stack to empty. e)

PROCEDURE RemoveVAR S. Stack);(* Removes stack from memory. -)

END Stacks...... ..............................

L1..

Page 229: -A109D 641 T8MANSHOP2 AUG~jlI PROGRAN O0C AmLNTt VA … · -a109d 641 t8manshop2 aug~jli p87(u) ada joint progran 1/4 ad119 41 o0c amlntt va 2au gb unclassified f/c 12/5 ml

u-A

L 0 u-

UU -

- ** LLI

"a u 0 x

-J 4c IL.UwM .. 0.

z 0 0

0 0 U) 3z N Z z 4c z a

z*w CL D -004 0 E. k E Oc5

-) 0 U) . 0. --

c z i. 0 0 ; CC L5 cc C w* j W ) wj uj U) 0 l _j -

E 0 0 z C UJ L6- uj 'U1, u* i IU c 0 0. Eu 3: LuLL

-J U. U. Ue oQ o i CI. uj z zU

IL. -MLU

cm

-C T

0I

CL E00 u

M .20

U *

-~- j

li - Ai2a U)I

>~ E c

e . ~~ . U~ > C

.t < :-J.aE >- w* q. " 0

u 0 LL m E rz 0a n i L . r o L. u~W

uj 2Oa 0.222 a o- u*o;0= E cm -0 vi 00 -u uK CCr uC

-a a 06 0 0 0 0. 0 85 5

0 IL < ) c-j x I I c -- a'0, ujI I L L

Page 230: -A109D 641 T8MANSHOP2 AUG~jlI PROGRAN O0C AmLNTt VA … · -a109d 641 t8manshop2 aug~jli p87(u) ada joint progran 1/4 ad119 41 o0c amlntt va 2au gb unclassified f/c 12/5 ml

MODULE ReverseName; ( This is the program. a)

(In Modula-2. all reserved words must be given in uppercase. a

FROM Staciks IMPORT Empty. Pop. Initialize, Remove, Stack.

FROM InOut IMPORT WriteString. WriteL-n. Write, Read, EOL:

PROCEDURE Find Middle (VAR S. Stack). CHAR,(a We use an algorithm different from that in Program 3.7.a

VAR LocalStack: Stack,ch :CHAR.-

BEGINlnitialize(LocalS tack):REPEAT

ch: -Pop(S);-Push(Local Stack, ch);

UNTIL ch-ch:=Pop(S);Push (LocalS tack. ch).(* Now we restore the stack S to its original form. a

WHILE NOT Empty(LocalS tack) 00Push (S, Pop(L ocalS tack));

END;RETURN ch

END FindMiddle;-

VAR Name :ARRAYE1. .401 OF CHAR;A :Stack:

R r r o~r~a Ir OL)eC'L

Page 231: -A109D 641 T8MANSHOP2 AUG~jlI PROGRAN O0C AmLNTt VA … · -a109d 641 t8manshop2 aug~jli p87(u) ada joint progran 1/4 ad119 41 o0c amlntt va 2au gb unclassified f/c 12/5 ml

Limitations onStructure Specifications in Ada

0] No support for declaration of structuregraph interconnections at specificationlevel

0 Can include this information withcomments as an alternative

package C isrequired(DE);is required by (At);procedure C I ( .);procedure C2( ...

end package C;

[Taken from System Design with Ada by R.IA. Buhr]

. .... ....... ..... . . ,la =mm ma

Page 232: -A109D 641 T8MANSHOP2 AUG~jlI PROGRAN O0C AmLNTt VA … · -a109d 641 t8manshop2 aug~jli p87(u) ada joint progran 1/4 ad119 41 o0c amlntt va 2au gb unclassified f/c 12/5 ml

Package Applications

0 Encapsulate related data types,constants or objects.

0 only objects and types exported, no pgm units0 package body may or may not be present0 facilitates consistency by factoring out

common elements used by may modules

0 Encapsulate related program units.0 only program units exported, no objects

and types

0 Embody an Abstract Data Type (ADT)o objects, types, and program units exported0 state information not maintained in body of

the pkg0 supports abstraction and information hiding

0 Embody an Abstract-state machine.0 objects, types, and program units exported0 state information maintained in body of pkg

C Encapsulate tasks.*0 often used purely to enclose task(s) because

they cannot be separately compiled

VY

.ni

u

Page 233: -A109D 641 T8MANSHOP2 AUG~jlI PROGRAN O0C AmLNTt VA … · -a109d 641 t8manshop2 aug~jli p87(u) ada joint progran 1/4 ad119 41 o0c amlntt va 2au gb unclassified f/c 12/5 ml

oac:xage TRIGPK- is

function FACTORIAL(n: in integer) return.ca-:

-- returns n' as a float inc point value

function SIMPLIFYianale_ in-degrees : in integer) return intecer:

-- returns an equivalent angle (in degrees) for ANGLEIN.DEGREES

-- which is positive and between 0 and 360

function RADIANS(degrees : in integer) return float:- returns radian value for DESREES

function SIN(anglein degrees z in intecer) return flcat;- returns the sine of PNGLEIN DEGREES

function C3S(ange _ir._degrees : in intece-) -e-rn-- returns the cosine of ANGLE INDE3PEES

end TRIG_PKG:

package body TRIG PKG is

FACT arrav(O.. 5, of f'oat

(i.0.1.0.2.0.6.0.24.0,

120. r.720. 0,5040.0,40320. 0,362980. 0,

3628800.0,39916800.0,479001600. o,

6227020800. O,8717829 12Zo. 0,1307674368000. 0:

funct:on FACTORIAL(n: in integer) return float isx : float := 1.0;

begi nif n ( 0 then

-- if r, is NEGATIVE return ZERO to indci:-e EO_ -

return 0.0;

elsif ((n >= 0) ard (n <=15)) thenreturn FACT(n);

elsif n ) 15 t.enfor i in 1..n 1,-op

x := x float(i';

end loop:return x;

end if;

end;

Page 234: -A109D 641 T8MANSHOP2 AUG~jlI PROGRAN O0C AmLNTt VA … · -a109d 641 t8manshop2 aug~jli p87(u) ada joint progran 1/4 ad119 41 o0c amlntt va 2au gb unclassified f/c 12/5 ml

function sI~IV.n~idg~s:in inc~nger) return intwgwr is

angle integer

angle ;angle~indeqrws rem 30

if angle (0 thenangle ;-360 - angle;

end if;return angle:

*nd ;

,unc-:ion RQDrANSeqrwvs: in-i ntae- r,-g.irn -clat is

pi:float :- 3. l-1326z:begi1n

return' ( (~i /float (l180) ? :oat (amq-aes;end;

f tnction S:N(an~eixn~eqr. I in ittene l-e-: 1- i

sum : float :- 0.0:angle : intege-;

temo~anq..e :inteqe-;

te'no angle:- S t l PL: :n14 temo aq, S la0 t."*n

anqle to,,oangle - !e0:

angqle tomo _anale:end if;

fon I in 0..7 locoSum :- Sum ?,. oat'- i) *

end loco;

-Account for use of only first anc secoDnd quadrant ang~es

-- in eofflutat ionif te-o angle ) 180 the,

return (-sum);

*Sreturn Sum;and if;

and;

f'nc-on -_S nmq~eLr_!q-es :in intwer) r-..n~n '!oat is

sm:f'oat :- 0. *;

angle : intoeo-:temo-anqle Int.eqlr;

begintemp angle ; S:PLIP anleiwndeqrees);if twma~anqe >- 180 then

-- First and second quadrant anltt -ised forn c-itnostat.on

-- bMC-3Ul Ch)mG',tjtiOn iS te aCC~jrate

angle :~te~oanqhtr -180:

.an ql teoi~nqLui:end I f;

for i in 0_ 7 lonO

sum :- slim - fb(W-i ( (RmorANs(.anqle.-'./ ( F.ACT~a. 1 ) C

end loco:

-- AC=Ount for uwse Of On1'Y ftr-t aro seco3nd a-iddrant anr~ws

-- in comoutat ioni' temo anqle >- 180 tnen

rot urn (-Sum Ialso

e t urn Su~m:

end i'1;

nd;

end TRIG-O4(G:

Page 235: -A109D 641 T8MANSHOP2 AUG~jlI PROGRAN O0C AmLNTt VA … · -a109d 641 t8manshop2 aug~jli p87(u) ada joint progran 1/4 ad119 41 o0c amlntt va 2au gb unclassified f/c 12/5 ml

-'V . ...-- -- -"--.. - -.

with TR:G PKG. GGI_ GRAPHIS S_PW. T YPES:

use TRSGOXG. GIGI GRPaw!C_OKG. Tv0FES:

package TURTLES is

subtype ANGLE is integer range 0..360:

type TURTLE is private;

TURTLE CONTROLS --

- PEN CONTROLSprocedure UP(myturtle : in out TURTLE):procedure DOWN(myturtle : in out TURTLE):function PEN IS-DOWN(myturtle : in turtle) return boclean;

procedure NEWPEN(myturtle : in out TURTE: colour : in CCLC RTYE):

- MOVEMENT CONTROLSprocedure NORTH(myturLe : in out TURTLE):procedure SOUTH(myturtle : in out TURTLE);procedure EAST(myturtle : in out TURTLE):procedure WEST(myturtle : in out TURTLE):

procedure MOVE(myturtle : in out TURTLE; r : in integer);procedure TURN(myturtle : in out TURTLE; a : in ANGLE):

procedure TURNTO(myturtle : in out TUR=LF: a : in ANGLE;

orivatetype POS:-=ON is (oen_up,oen_don):

type PEN is record

oenoosition : POSITION;pen_colour : COLORTYPE;

end record;

subtype XCOORD is integer range 0..768;subtype YCOORD is integer range 0..479;

tyoe POINT is recordx : XCOORD;

y : YCOORD;

end record;

tyme TURTLE is record

pen status : PEN := (pendown,white);headino : ANGLE 0;

location : POINT :=(350,20);

end record;

J TURTLES;

Page 236: -A109D 641 T8MANSHOP2 AUG~jlI PROGRAN O0C AmLNTt VA … · -a109d 641 t8manshop2 aug~jli p87(u) ada joint progran 1/4 ad119 41 o0c amlntt va 2au gb unclassified f/c 12/5 ml

----- - --- - ----------- - - --------------------------- - - -- - -- - -------

package body TURTLES is

-- TURTLE PEN CONTROLS --

procedure SET PEN COLOUR(mturtle : in out TURTLE; colour : in COLORTYPE);procedure SET PEN_COLOUR(myturtle : in out TURTLE; colour : in COLORTYPE) isbegin

myturtle. pen status. pen colour := colour;end;

procedure NEW PEN(myturtle : in out TURTLE; colour : in CCLRT'e_. , isbegin

SETPENCOLOUR(myt,,rtle,color) ;end;

function PEN_IS_DOWN(myturtle : in TURTLE) return boolean isbegin

if mytur e. ._en-staaus.oenoosi-i-.on = pendown t.ienreturn t--ue:

elsereturn fal.se:

end i f:end;

edure UP(myturtle : in out TURTLE) isbL-lin

myturtle. penstatus. Denposit .on := pen_up;end;

procedure DOWN(myturtle : in out TURTLE) is

.vturtle. oen status. pen position := pen down:

-Ask

Page 237: -A109D 641 T8MANSHOP2 AUG~jlI PROGRAN O0C AmLNTt VA … · -a109d 641 t8manshop2 aug~jli p87(u) ada joint progran 1/4 ad119 41 o0c amlntt va 2au gb unclassified f/c 12/5 ml

-- -IF - - -- - -- - -- _--_ - -

-DRAWING and UN-DRAWING th~e TURTLE -

rocedure TRANSFORM(myturtle :in TURTLE; x :in integer; y :in inteSger;newx :out XCDORD; newy :out YCOORD;theta :in ANGLE);

rocedure TRANSFOPM(myturtle in TURTLE; x in integer; y :in integer;new-x out XCOORD: newy :out YCOORD;theta :in ANGLE) is

eginnowx mfyturtle. location.x 4-

inteqer(f.oat(x)*C0S(theta) float,',./)*S:N(tneta'newy my1ur.le.11ocation.y +

innecer(fl oat (x)*S:N(thet a) + >at .'*CCIS (,'et amd;

rocedure DRAWTURTLE(myt'rre :in TUR7LE):rocedure DRAWjTURTLE(mytaur:e : in TURT LE) is

x,y :integer;egin

SETWRTINGMCDE~relace);SETWRTINGCOLOR (mytrle.e"_sa'. ec.~SETCRSRAT(myi;.rte. ocar.-on. m.m iy>r a. :~~nTRANSFORM (mytute., -1-8, x,, yurtI. mead:rncDRAWL INET (x, y I:TRANSFORM (mturtis, 24,0. x,v.

AWLINETO(xc,y);RANSFORM(myturs 1., 0. 18,9 X-y,

myt urt Ie. head ing);DRAWLINETO(x, y);TRANSFORM (myt urt le, 0, 0, ,

mytuirtleheading);DRAWLINETO (x, y);cT(7L'RSDRAT(myturtle. location. x,myturtle. locat!.on.y):.

.n, *4.

- AJite UNDRAW TURTLE (myturtle :in TURTLE':

"---'ure UNDRAWTURTLmyturtle :in TURTLE) is

:'z7W,1 I r INGMODE (er.3se);

SETCURSORAT (nyturt 1.. locat ion. x, myt urt le. locat ion. y);TRANSFORM~myturtlO,-1x,y,ryturtle.headi-ng);DRAW1 'NETC (x, y) ;TRAI j M (myt urt 1.e, 2 4, 0, x, y,

myt urt 1ie. head ing)DR%; -INETO (x, y) ;

TRANSFOPM Oyt urt Is, 0, 18,01 ,myt urt 1ia. head ing);

DRAWLINETO(x, y);IWNSFORM (myturts, 0, 0, xvy9

myturtle.heading);DRAWL INETO (,y) ;SETCURSORAT (myturt is. locat ion. x, myturt 1.. locat ion. y);

Page 238: -A109D 641 T8MANSHOP2 AUG~jlI PROGRAN O0C AmLNTt VA … · -a109d 641 t8manshop2 aug~jli p87(u) ada joint progran 1/4 ad119 41 o0c amlntt va 2au gb unclassified f/c 12/5 ml

-- 7UR'rLE MOVE.rENT C3147RCLS --

procedure MOVEmyturtlw : L out TURTLE; mn in integer) isbeg in

UNDRAWTURTLE .mytur-tl*);if PFNISDOWN(myturtlw) than

SETWftITINGMODE~roplae);SETWRITINGCOLOR (myturt is. gn status. pen colour);DRAWLINIETO(intge.( FI~()CS.Otrl~oc~c)

float (mytuitw. locatton.0~ ),integer( float (n)*SN(myturt.le.heading,-

float (myturt le. location. y) ))

MOVECURSOR~AS(intger.( float (n)-COS (mytuv-tl. Iadirmg)-float )aytuit I.. llocat,.on. x) ),

integer( float (n)*SIN~nmyturtle.headling)-.end if;float (myturtle. location. y) )2

GUERYCURSCRPOS(mfyt 4re I. location. x,..iyturt.9. :ecat~on. v)DRAW-TURTLE )ryturt Is);

end;

procvdAre TURNmy.~r.n: : in 3ut TUR-'.Z: a : in QNGLZ Lsbegi n

UNDRAW ITURTILE )ryturt*);

DRAW TURTLE (mvtur7 I.)jend;

prtcedure TURN TOrnvr rtla in o-t TUqTLZ: a in ANGLE- isbeg in

UNORAW TURTLEnlyturte);mytArtl*.heaing :. a;DRAWURTL(rnyturtIe,,

end;

pr-3cmdurm NORTH4(rnyturte Io in out TURTLE) isbegin

TURNrTO(myturt:e,?o);MO'JE(rytur-t X, I);

end;

procedure SCUTHrnyturtle zin out TURTLE) isbegin

TURN -TO~myturt!e, 2'O);MOVE (.,y turt ,a. I);

end;

procedure EAST~myturtlo in out TUIRTL_ isbeg in

TURN TO (myt urt . w.MOVE (nyt urt 1.. I);

end;

2rocwauro 'TS(ryure:a in ou TURTLI ~Sbegin

TURN TO(myturt :.' 16);MOVE ( myt urt , 0. 12

and:

-------------------------------------------------------------

beg in

SETSCREENSCALE(O.760, 470.0);CLEARSCREEN;

SETCURSORAT (0, 0);and TURTLES;

Page 239: -A109D 641 T8MANSHOP2 AUG~jlI PROGRAN O0C AmLNTt VA … · -a109d 641 t8manshop2 aug~jli p87(u) ada joint progran 1/4 ad119 41 o0c amlntt va 2au gb unclassified f/c 12/5 ml

L.

0 u u .

0 U3 LI C

Z=I- I u 0-

9- 0. .

0l 0 w 0

-u I U

-- ~~~~~ u z a I- -zSS -

I. L AA A

LI a

> 3 1 -P - P - -

C , Cz . I. m ) - U.

_j 2 - uI ui * IL) ' U) a 10 w r

M w U) w > 0n I T_I P.- I - 1 )->

LI m L C I- I I- 0 Ln

.4 - Z - LIX Li Z m

w j. a0 I x U) 0I 3 - a >0I (- c~ En 0 9- 0

me, w Li9 0

0 CLI .0 m0 00 u q). : c 0 u

- >. C I I . U C do

CL .0 C'

II-0 0

CL CL CL Cu l l (D a

Ci ix I. h.w

- i - >

I wa u1 u 0 0

Uw w x LI C j LI a

C? L L 1 1 01 C c

a)I al at - W x

0 0 w>u

.X L L 0 W cu a W Ca Ca 0 v

M. I Ca C ? W c?C? ?L - 0

Page 240: -A109D 641 T8MANSHOP2 AUG~jlI PROGRAN O0C AmLNTt VA … · -a109d 641 t8manshop2 aug~jli p87(u) ada joint progran 1/4 ad119 41 o0c amlntt va 2au gb unclassified f/c 12/5 ml

package Termi nal0r iverPackage is

task Ternminal_..river isentry Read..Character(C :out Character):entry Wr ite-..Character(C in Character):entry Reset;entry ShutDown:

end Terminal-.Driver;

end Termlnal-DriverPackage:

with QueuePackage. LowLevel_10, System-,use LowLevel_10;

package body Terminal...DriverPackage is

task body Terminal..Driver is

-- Group all of the machine dependent C -s:!-ts together

ConsoleI.nputVector constant System. A.-:.sS :2 8#60#;Canso leOutputVector :constant System.A.Tss 8#64#:EnableInterrupts : Integer :x 8#100#:Write TimeOut :constant Duration :a .:NumberOfLines: constant :a 2;LineLength: constant :- 132:

task type Device..Reader isentry Interrupt;

*entry StartUpOone:,for Interrupt useat Cons a Ienpu t_.Vecto

end Device-.Reader;

task type Devi ceWri ter isentry Interrupt;entry StartUp~one;for Interrupt use at Consoe..Output...Ve~t0:

end Device-Writer;

package CharQueuePackage isnew Queue22:e(Charactf'1use CharQueuePackage;

type DriverStateBlock isrecord

InputCharBuffer, OutputChar~uffer5lockingQueue(Number-OfLines-LiCa-ength);

CurReader Device-Reader:CurWriter Device Writer;

end record;

type RetToBlock is access DriverState~lock:CurState: RefToBlock;

task body DeviceReader isTempInput : Character;

beginaccept Startjp~one:SendControl(Console-KeyboardControl. Enable....nterructs):loop

accept Interrupt doReceiveControl (Console.Keyboard...ata. TempInput):

end Interrupt;Aope(CurStat2. outc~,ar~uffer Tm!rU

end loop:end 3ec e ,,e

Page 241: -A109D 641 T8MANSHOP2 AUG~jlI PROGRAN O0C AmLNTt VA … · -a109d 641 t8manshop2 aug~jli p87(u) ada joint progran 1/4 ad119 41 o0c amlntt va 2au gb unclassified f/c 12/5 ml

T enp C utpu C, aracter;begin

accept StartUpOone;Send-Contra I(Con so IePi-interControl , Enab Ie...Interrupts):accept Interrupt; -- spuri'ous interrupt caused by Send _Controlloop

Remove(CurState.OutputCharuffer. TempOutput);Send-.Control(ConsolePrinterData, TempOutput):select

accept Interrupt;or

delay Write_Time_Out:end select:

end loop:end Device-Writer:

procedure Shut~own~ld isbegin

abort CurState.CurReader;abort CurState.CurWriter;DestroyQueue(CurState. InputChar~uffer);Des troyQueue( CurS tate .QOutputCiarSuf far)

end Shut~own~ld;

procedure StartUp isbegin

CurState :- new DriverStateBlock;Init_.Queue(CurStata. IrputCharguffer);InitQueue(CurState.QutputCnar~uffer);Cu rState.Cu rRe ader.S tar tUoDo noCurState .CurWriter. StartUoCone;

end StartUp;begin

StartUp:

ConsoleOperations:loop

selectaccept ReadCharacter(C :out Character) do

Remove(CurState.InputCharfluffer. C);end ReadCharacter:

oraccept WriteCharacter(C :in Character) do

Append(CurState.OutputChar~uffer, C):end WriteCharacter;

oraccept Reset do

Shut~ownl d:StartUp:

end Reset:or

accept ShutDown:Shut~ownl d:exit ConsoleOperations:

orterminate:

end select;end loop ConsoleOperations;

exceptionwhen others a>

Shut~own~l d:

end TerminalDriver;

r'.d Tq- i-a' C-- jer Package; ~ ~ ~ ~ K

Page 242: -A109D 641 T8MANSHOP2 AUG~jlI PROGRAN O0C AmLNTt VA … · -a109d 641 t8manshop2 aug~jli p87(u) ada joint progran 1/4 ad119 41 o0c amlntt va 2au gb unclassified f/c 12/5 ml

Teaching Packages

0 Start at the PACKAGE level andthen introduce the syntax byexample -- NOT at the syntaxlevel and then intro packages-- good way to produce Fortranprograms written in Ada

0- Give students preconstructedpackages and have them builddefined products with them

O Have students play "client"package and package developer

0 Have students develop a largerscale system with packages thatmust interface

O Have students build a systemwhich has a heirarchical structureof packages

0 Have students do a package andreplace its implementation andobserve results

Page 243: -A109D 641 T8MANSHOP2 AUG~jlI PROGRAN O0C AmLNTt VA … · -a109d 641 t8manshop2 aug~jli p87(u) ada joint progran 1/4 ad119 41 o0c amlntt va 2au gb unclassified f/c 12/5 ml

0- Give students package with "open"data structure in the spec andhave them corrupt its integrityand then challenge them to dothe same thing with a packagewith the data structure in theprivate part of the spec

0l Data structures course very easyvehicle for introducing packagesunder topic of abstraction

0 Digital design course offersopportunity to intro packagesto encapsulate abstract-statemachines and tasks

Page 244: -A109D 641 T8MANSHOP2 AUG~jlI PROGRAN O0C AmLNTt VA … · -a109d 641 t8manshop2 aug~jli p87(u) ada joint progran 1/4 ad119 41 o0c amlntt va 2au gb unclassified f/c 12/5 ml

UL

Ao

(D,

-4 .

*- 0

'0l

coilC co

Page 245: -A109D 641 T8MANSHOP2 AUG~jlI PROGRAN O0C AmLNTt VA … · -a109d 641 t8manshop2 aug~jli p87(u) ada joint progran 1/4 ad119 41 o0c amlntt va 2au gb unclassified f/c 12/5 ml

z C

C0Z N(E > z

CU)C l

I LU

>LL LUC. C

Ix w

0

Page 246: -A109D 641 T8MANSHOP2 AUG~jlI PROGRAN O0C AmLNTt VA … · -a109d 641 t8manshop2 aug~jli p87(u) ada joint progran 1/4 ad119 41 o0c amlntt va 2au gb unclassified f/c 12/5 ml

z

0

z 0 w F

14 LL c!) W

I- Xz-1

<1 00 Im CD>-<r a x - N

F- 0 um Iu

mi a.W> a naW C z x

im 0 0

F-

Page 247: -A109D 641 T8MANSHOP2 AUG~jlI PROGRAN O0C AmLNTt VA … · -a109d 641 t8manshop2 aug~jli p87(u) ada joint progran 1/4 ad119 41 o0c amlntt va 2au gb unclassified f/c 12/5 ml

0 )U) Ix (t) H a H

ci 0) 1- L

(r wx w wU) I Ji () c

2: (E c! w x T

Z : H 0 (.X

0c LU (E LUCLI "Ci 0. > H H

H N 0

0 0 LU

H f0 m

z

Page 248: -A109D 641 T8MANSHOP2 AUG~jlI PROGRAN O0C AmLNTt VA … · -a109d 641 t8manshop2 aug~jli p87(u) ada joint progran 1/4 ad119 41 o0c amlntt va 2au gb unclassified f/c 12/5 ml

Wi Itr

i Z Li F- LiCm 0 J zu

>U() I '

w z

Ul) I- I-Li ( 0 0 I

a- Li. LL

0 1 L

w a w 0iL .

i OW 0oH W

Ir-

U) CO

Page 249: -A109D 641 T8MANSHOP2 AUG~jlI PROGRAN O0C AmLNTt VA … · -a109d 641 t8manshop2 aug~jli p87(u) ada joint progran 1/4 ad119 41 o0c amlntt va 2au gb unclassified f/c 12/5 ml

I-0')

-3 W

H cr 0 W W1m: LL > LwC MZ

z -I

I:1 - Z WW ZIt

Z > LL w w ZV~ LL x 00IlLLI-

CD a. a Z

I- co , 0 >- ZII xM 0oit

Q n" w" L o ) Ln(]I-- U)WO ZZU

C co 0 W 0 HU- -IO 0 [

W0 Wa.O > C w

) ca 0o

J C i

Page 250: -A109D 641 T8MANSHOP2 AUG~jlI PROGRAN O0C AmLNTt VA … · -a109d 641 t8manshop2 aug~jli p87(u) ada joint progran 1/4 ad119 41 o0c amlntt va 2au gb unclassified f/c 12/5 ml

0

a. 0 (1)

F- LU C U(I) It ( r1 1

C r - CEmz:) W, 0 WO xW

u :z F- a a.() Cm z a. C w 1 I

W Z x~ WO) (1 0F- 0 .W W 0 C () F- It()

X: z am z a z W .a. IC 1 Cm 0

Cl) w a 1 3a L 0<r. Im u u. wLIJ 0 0J

WOW cm 0 rm c z .cz

C0) m w c .JI ILOa 0 >m (J 0 - zu z i m awz cm E F14 H (E w w z C

Wm m~ LU j ) - 0:F- x c 0 F- C UF- X

(j) cmM <C " w 0LL c

u x w u0 u WI a UJ I-a CI I C

Page 251: -A109D 641 T8MANSHOP2 AUG~jlI PROGRAN O0C AmLNTt VA … · -a109d 641 t8manshop2 aug~jli p87(u) ada joint progran 1/4 ad119 41 o0c amlntt va 2au gb unclassified f/c 12/5 ml

m --Iz H "I

OY. WI z

F - I

0- O) LUO n

Z s" I-. I--

0 Q.J

13z

in wcW Z 0

a. 0 14 C0

z 0

C LC)

o 0: > UZ (I '"II- I

w a C J(C

i I--

I0 H -3 LL <1H ZL_ I- Q

0>u

LL

Page 252: -A109D 641 T8MANSHOP2 AUG~jlI PROGRAN O0C AmLNTt VA … · -a109d 641 t8manshop2 aug~jli p87(u) ada joint progran 1/4 ad119 41 o0c amlntt va 2au gb unclassified f/c 12/5 ml

I W> C>

IjI- 1- u

11- x w z

F- U z WZc

(X CLIm H Z - CC)F- 1-- .

* (w (E (1

CD I > 4K 4

W > LL u a0 Im m0 0L1 0UZ

z C0> > > W

x W F- w -I a 00 0

1WO-U (JO wu LWJ C LL WLLW w Wx x

F- W I-

Page 253: -A109D 641 T8MANSHOP2 AUG~jlI PROGRAN O0C AmLNTt VA … · -a109d 641 t8manshop2 aug~jli p87(u) ada joint progran 1/4 ad119 41 o0c amlntt va 2au gb unclassified f/c 12/5 ml

.WES Ur

CD Saw

IL C .

PO .; 091

u

01 laaa

me zmiam

Amok

+

Page 254: -A109D 641 T8MANSHOP2 AUG~jlI PROGRAN O0C AmLNTt VA … · -a109d 641 t8manshop2 aug~jli p87(u) ada joint progran 1/4 ad119 41 o0c amlntt va 2au gb unclassified f/c 12/5 ml

(I) (ILL

F-IU-F

-i LL V) F- -ZY0C U. C ~'0) rHt)

F- WoCCOaC WC

U). W)V)u)(fl w w E)r Ww uW i a. xw I W C.)Z

n It-U) w c 0 >1-(IIW Q) Qz LLJ 0w )Z U Z Z '

I J W Z W H, w(

0 0 u.F- Z LL '

Page 255: -A109D 641 T8MANSHOP2 AUG~jlI PROGRAN O0C AmLNTt VA … · -a109d 641 t8manshop2 aug~jli p87(u) ada joint progran 1/4 ad119 41 o0c amlntt va 2au gb unclassified f/c 12/5 ml

CL

II

CL C

0 CL

Page 256: -A109D 641 T8MANSHOP2 AUG~jlI PROGRAN O0C AmLNTt VA … · -a109d 641 t8manshop2 aug~jli p87(u) ada joint progran 1/4 ad119 41 o0c amlntt va 2au gb unclassified f/c 12/5 ml

i i - ! .c! _ , -

GB )

ci, ) '

ic

,i~lll[ I I

Page 257: -A109D 641 T8MANSHOP2 AUG~jlI PROGRAN O0C AmLNTt VA … · -a109d 641 t8manshop2 aug~jli p87(u) ada joint progran 1/4 ad119 41 o0c amlntt va 2au gb unclassified f/c 12/5 ml

zJin cDWW Lii

0~~~~ (ZHHLJz ZWLLL F- 1Z 0 WF

ir H (4U) Ha0 IUC(. - W Z

F- co -. j Z 1C a ax ) CO W II x WCLd rI uL it F-

a. u Jz wo0rm x z w X0 H (Z 0 Lw 0Lwi 3 VC>a. > -OrC

H (:r n w - 0 Q U)F- G1) 0W WUCJ J U)

C C (j)U)WL u WO 1 WIa:I MU) c C LuI x

w :3 C z JU4 l u v LI Iv wu U1) U) 0 U) 0)itUx ) (1)wd Ci <1~ a:o oi (X0a0( I

Im - a. - LL LL Ci U F I-

I I I I I I I

z0 I

3-I wF- W F-Ci M Im- <E <m z w w z0 V. .j 1

w Ca m0.C. 0ai z ai 0 x tZ.jm w j0 W 0

w wCL) F- (z

Page 258: -A109D 641 T8MANSHOP2 AUG~jlI PROGRAN O0C AmLNTt VA … · -a109d 641 t8manshop2 aug~jli p87(u) ada joint progran 1/4 ad119 41 o0c amlntt va 2au gb unclassified f/c 12/5 ml

task [type] [is(entry_declaration)(representation clause)

end [task simple_name] I

task body task_simplename is(declarative_part]

begin[sequence of statements]

[exceptionexception handler(exception-handler}]

end (task_simple_name];

14

Page 259: -A109D 641 T8MANSHOP2 AUG~jlI PROGRAN O0C AmLNTt VA … · -a109d 641 t8manshop2 aug~jli p87(u) ada joint progran 1/4 ad119 41 o0c amlntt va 2au gb unclassified f/c 12/5 ml

UI)rw a. z

>.I- I-I- I- < C

IC U)C.Z Z i(I )C I

a. H w 10CDZ • _ .,'I" I-I - • * mj (J - - -

I 0 C • * W 3 ZZ .J 0 m I Z D 0 0i .J a. x -" 3 u

C (I~ cr w 0mL ) 0 C.) I0 0 0- Z 0 0 C. U Z

SZ z "I"() M

xC 0 0 .CL a: U). z J>

wW I a.~ -U

Z I-I iW 0 -P- . W i, u m

Q)O C. ZLU m ) I 0 w

w I (r j

Page 260: -A109D 641 T8MANSHOP2 AUG~jlI PROGRAN O0C AmLNTt VA … · -a109d 641 t8manshop2 aug~jli p87(u) ada joint progran 1/4 ad119 41 o0c amlntt va 2au gb unclassified f/c 12/5 ml

SIMPLEST FORM OF TASK ENTRY

ACCEPTTASK TI is

ENTRY ENTRYl;END Ti;

TASK BODY TI isB EGI NLOOP

ACCEPT ENTRYI Do<SOS>

END ENTRYI;<SOS>

END LOOP;END TI;

--WAIT FOREVER FOR CALL To ENTRYL

16

Page 261: -A109D 641 T8MANSHOP2 AUG~jlI PROGRAN O0C AmLNTt VA … · -a109d 641 t8manshop2 aug~jli p87(u) ada joint progran 1/4 ad119 41 o0c amlntt va 2au gb unclassified f/c 12/5 ml

-- o,,.,_ - -

0 CIM w

0 .o W L

do=% 0 9 . .. H

I "rW 0 ,)

x U) WW W0 *W z x

0f cC J0J

v m- J JZO

Ima.w C C.

z 0. E0cn, _)i- -" 0 i

f- - I U) < 0

Cl " I 1 0 (JSZ M ciWZ 0-.1 Ct w4O O 0zW

F- F- co J wQ

'4 > 14 0 Z 0 (I(j)m Io m , z

.. . ..W~w C mW Z

Page 262: -A109D 641 T8MANSHOP2 AUG~jlI PROGRAN O0C AmLNTt VA … · -a109d 641 t8manshop2 aug~jli p87(u) ada joint progran 1/4 ad119 41 o0c amlntt va 2au gb unclassified f/c 12/5 ml

>- ww j I

0% aWl 0 U

WX 0 z.

o- F- o Jwz w

0. 0Ime 0 Z11 z 0

F- ml .ua o 0U)CV I .(J).0

0 CL u z l w

I- F-U u caJ w0 wDl z 110 w IJ.I

ww) w ) jm w X :c z iI

w -I

Page 263: -A109D 641 T8MANSHOP2 AUG~jlI PROGRAN O0C AmLNTt VA … · -a109d 641 t8manshop2 aug~jli p87(u) ada joint progran 1/4 ad119 41 o0c amlntt va 2au gb unclassified f/c 12/5 ml

0

0 W10 w~

I-

w wI0i. CL C>- >- wFe- F-CE -

I I:

F-D F- <E F

z <E m

QDA. Cm .- 11)Z

0.. j -I- W )V-44 1E I- a ILu u a w a

W-l u w l w 0 CEOLI<E 0<E~3 WrO > S u j0 CL uC 01

F- O- L) ZIJ w Q

11z z 1 Dw z0www w 0)ijm w

z cLU F

Page 264: -A109D 641 T8MANSHOP2 AUG~jlI PROGRAN O0C AmLNTt VA … · -a109d 641 t8manshop2 aug~jli p87(u) ada joint progran 1/4 ad119 41 o0c amlntt va 2au gb unclassified f/c 12/5 ml

TASK TI IsENTRY ENTRYI;

END TI;

TASK BODY TI isBEGIN

LOOP

ACCEPT ENTRYI; -- 'SYNC' CALL ONLY<SOS>

END LOOP;END TI;

--WAIT FOREVER FOR CALL TO ENTRYI

--EVEN IF ENTRYI HAS PARAMETERS ASSOCIATED WITHIT, THE ACCEPT BLOCK DOES NOT HAVE TO HAVE ASEQUENCE OF STATEMENTS

20

Amlh

Page 265: -A109D 641 T8MANSHOP2 AUG~jlI PROGRAN O0C AmLNTt VA … · -a109d 641 t8manshop2 aug~jli p87(u) ada joint progran 1/4 ad119 41 o0c amlntt va 2au gb unclassified f/c 12/5 ml

SELECT STATEMENT

USED BY THE TASK TO ALLOW OPTIONS

SIMPLEST FORM IS THE SELECTIVE WAIT (WAIT FOREVER)

TASK Ti isENTRY ENTRY1;ENTRY ENTRY2;

END T1;

TASK BODY T1 ISBEGIN

LOOPSELECT

ACCEPT ENTRY1 DO

END ENTRYl;<SOS>

ORACCEPT ENTRY2 DO

<SOS>END ENTRY2;<SOS>

--AS MANY 'OR' AND ACCEPT CLAUSES AS NEEDED

END SELECT;END LOOP;

END TI;-- WAIT FOR EITHER ENTRYI OR ENIRY2

21

Page 266: -A109D 641 T8MANSHOP2 AUG~jlI PROGRAN O0C AmLNTt VA … · -a109d 641 t8manshop2 aug~jli p87(u) ada joint progran 1/4 ad119 41 o0c amlntt va 2au gb unclassified f/c 12/5 ml

SELECTIVE WAIT WITH ELSE (DON'T WAIT AT ALL)

TASK Ti isENTRY ENTRY1;

END TI;

TASK BODY TI usBEGIN

LOOPSELECT

ACCEPT ENTRYI Do<SOS>

END ENTRYI;<SOS>

ELSE<SOS>

END SELECT;END LOOP;

END TI;

IF THERE IS NOT A CALLER WAITING RIGHT NOW,DO THE ELSE PARt.

22

Page 267: -A109D 641 T8MANSHOP2 AUG~jlI PROGRAN O0C AmLNTt VA … · -a109d 641 t8manshop2 aug~jli p87(u) ada joint progran 1/4 ad119 41 o0c amlntt va 2au gb unclassified f/c 12/5 ml

SELECTIVE WAIT WITH ELSE, MILTIPLEACCEPTS

TASK TI IsENTRY ENTRYI;ENTRY ENTRY2;

END T1;

IASK BODY TI isBEGIN

LOOPSELECT

ACCEPT ENfRYI DO<SOS>

END ENTRYI;<SOS>

ORACCEPT ENTRY2 DO

-- AS MANY 'OR' AND 'ACCEPT' CLAUSES AS NEEDED

ELSE<SOS>;

END SELECT;END LOOP"

END TI;

23

Page 268: -A109D 641 T8MANSHOP2 AUG~jlI PROGRAN O0C AmLNTt VA … · -a109d 641 t8manshop2 aug~jli p87(u) ada joint progran 1/4 ad119 41 o0c amlntt va 2au gb unclassified f/c 12/5 ml

SELECT WITH DELAY ALTERNATIVE(WAIT A FINITE TIME)

TASK BODY TI IsBEGIN

LOOPSELECT

ACCEPT ENTRYI DO ....[ORACCEPT ENTRY2 ..... I

ORDELAY 15.0; -- SECONDS<SOS>;

END SELECT;END LOOP;

END TI;

IF ENTRYI CALLED WITHIN 15 SECONDS,

THEN YOU ACCEPT THE CALL. OTHERWISE,AFTER 15 SECONDS YOU WILL DO SOMETHING.

24

Page 269: -A109D 641 T8MANSHOP2 AUG~jlI PROGRAN O0C AmLNTt VA … · -a109d 641 t8manshop2 aug~jli p87(u) ada joint progran 1/4 ad119 41 o0c amlntt va 2au gb unclassified f/c 12/5 ml

'DELAY' RULES

YOU MAY HAVE SEVERAL ALTERNATIVESWITH A DELAY STATEMENT.

SINCE DELAYS CAN BE STATIC, THE SHORTESTDELAY ALTERNATIVE WILL RE SELECTED.

ZERO AND NEGATIVE DELAYS ARE LEGAL.

You MAY NOT HAVE AN ELSE PART WITH

A DELAY, SINCE THE DELAY WOULD NEVERBE ACCEPTED.

25

Page 270: -A109D 641 T8MANSHOP2 AUG~jlI PROGRAN O0C AmLNTt VA … · -a109d 641 t8manshop2 aug~jli p87(u) ada joint progran 1/4 ad119 41 o0c amlntt va 2au gb unclassified f/c 12/5 ml

'DELAY' RULES

YOU MAY HAVE SEVERAL ALTERNATIVESWITH A DELAY STATEMENT.

SINCE DELAYS CAN BE STATIC, THE SHORTESTDELAY ALTERNATIVE WILL RE SELECTED.

ZERO AND NEGATIVE DELAYS ARE LEGAL.

YOU MAY NOT HAVE AN ELSE PART WITHA DELAY, SINCE THE DELAY WOULD NEVERBE ACCEPTED.

25

Page 271: -A109D 641 T8MANSHOP2 AUG~jlI PROGRAN O0C AmLNTt VA … · -a109d 641 t8manshop2 aug~jli p87(u) ada joint progran 1/4 ad119 41 o0c amlntt va 2au gb unclassified f/c 12/5 ml

-.[_. .. -' - .--w -+ -,.. .~ . - -.-- I - , ___.. .... + . . .. .. .- -

SELECT WITH DELAY ALTERNATIVE(WAIT A FINITE TIME)

TASK BODY Ti is

BEGINLOOP

SELECTACCEPT ENTRYI DO ....

[ORACCEPT ENTRY2 ..... I

ORDELAY <EXPRESSION>;

<SOS>;O R

DELAY <EXPRESSION>;<SOS>;

-- SHORTEST DELAY WILL GET CHOSEN

END SELECT;END LOOP;

END TI;

26

Page 272: -A109D 641 T8MANSHOP2 AUG~jlI PROGRAN O0C AmLNTt VA … · -a109d 641 t8manshop2 aug~jli p87(u) ada joint progran 1/4 ad119 41 o0c amlntt va 2au gb unclassified f/c 12/5 ml

GUARDS CAN BE USED ON ANY ACCEPTSTATEMENT

WHEN SOMECONDITION =>ACCEPT ENTRYl ......

IF THERE IS NO GUARD, THE ACCEPT STATEMENTIS SAID TO BE OPEN.

IF THERE IS A GUARD, AND THE WREN CONDITIONIS TRUE, THE ACCEPT IS ALSO OPEN.

FALSE GUARD STATEMENTS ARE SAID TO BE CLOSED.

OPEN ALTERNATIVES ARE CONSIDERED. IF THERE ISMORE THAN ONE, THEN ONE IS SELECTED ARBITRARILY.

IF THERE ARE NO OPEN ALTERNATIVES (AND NO ELSEPART), THE EXCEPTION PROGRAMERRO1R IS RAISED.

27

Page 273: -A109D 641 T8MANSHOP2 AUG~jlI PROGRAN O0C AmLNTt VA … · -a109d 641 t8manshop2 aug~jli p87(u) ada joint progran 1/4 ad119 41 o0c amlntt va 2au gb unclassified f/c 12/5 ml

I H 95-

TERMINATION

WHEN A TASK HAS COMPLETED ITS SEQUENCE

OF STATEMENTS, ITS STATUS IS COMPLETED

ADDITIONALLY, THERE IS AN OPTION THATALLOWS A TASK TO TERMINATE.

SELECTACCEPT ENTRYl DO .....

[ORACCEPT ENTRY2 DO ..... I

ORTERMINATE;

END SELECT;

THIS MAY NOT BE USED WITH EITHER THE

THE DELAY OR AN ELSE CLAUSE.

SINCE THIS IS USED ONLY WITH A 'WAIT FOREVER'TASK, THIS OPTION ALLOWS A TASK THAT ISWAITING FOREVER TO TERMINATE IF ITS PARENTIS ALSO READY TO QUIT.

28

Page 274: -A109D 641 T8MANSHOP2 AUG~jlI PROGRAN O0C AmLNTt VA … · -a109d 641 t8manshop2 aug~jli p87(u) ada joint progran 1/4 ad119 41 o0c amlntt va 2au gb unclassified f/c 12/5 ml

r4

EHLz

((U

7-4.

[Li 'U

(UU

Page 275: -A109D 641 T8MANSHOP2 AUG~jlI PROGRAN O0C AmLNTt VA … · -a109d 641 t8manshop2 aug~jli p87(u) ada joint progran 1/4 ad119 41 o0c amlntt va 2au gb unclassified f/c 12/5 ml

w0 .n

M- U

w ~w >>) x- rZ LL

W Z z x.J>- I-I 0 w

Wn W- ID0w

ciw F

ci C 0 0 0W ~W imn m

ED II W a-z z J I U~

t ZW J ->I CLH4 .i* W) wi

u.4 EU ZU) L) 0

W LL >~ U- u I

U) E)- xa.>C-0U) W C

I- Z LL ZE ~u -0 J w U

ZZ W Ur I-taW C U) coI -~ 0 ZI- U) a.IF- m W>

LU 0 m0 10 'I - I- I-

<ErI-

Page 276: -A109D 641 T8MANSHOP2 AUG~jlI PROGRAN O0C AmLNTt VA … · -a109d 641 t8manshop2 aug~jli p87(u) ada joint progran 1/4 ad119 41 o0c amlntt va 2au gb unclassified f/c 12/5 ml

W ~U) WSW WW, IlI ~,

w I w I .J0 W I Z w 00I-. Z -I-Z W

0 1 nE 0 : z-

W L (D .- <[Li. Z: ZW 1 11 W

O 1 0 -

W w ) X CZOW c 0 Z

wj a- a. P4 -M H

1 0- o 3 w LJ - x -X

(O LO 0

Q W 0 oa x

Z it U)I C I .M C P4 <1 I di

I -I Z)

Jl- U)LL I

I I I I u I hI 0

IlI I I a I w I- J

1> Wa.

0 w O

z a. w Z: IY.Q 04 0 0

a w J w zw

Page 277: -A109D 641 T8MANSHOP2 AUG~jlI PROGRAN O0C AmLNTt VA … · -a109d 641 t8manshop2 aug~jli p87(u) ada joint progran 1/4 ad119 41 o0c amlntt va 2au gb unclassified f/c 12/5 ml

CL

z 0 w w -

U) W I - u C)

z (E ~ H - 1 0) LU

ClE WOW) z U:. u

00 LLu0U)0 wUH U L w

00 U) (r z00-Q W H JZ

0.E x 0 JWLU Wfl F-uU)C c

U) J 0 w0

w m-ZW xrit1- MUZ X C x (j)

I >w I io w r14 )> i U) i

cr. w I X:a. w 0a. I o (E U 3

3 W W Xaw 0 >

Su a0W w r LX z z

E a.W 0

Page 278: -A109D 641 T8MANSHOP2 AUG~jlI PROGRAN O0C AmLNTt VA … · -a109d 641 t8manshop2 aug~jli p87(u) ada joint progran 1/4 ad119 41 o0c amlntt va 2au gb unclassified f/c 12/5 ml

- - -~.Y--~-- ~ -~ --- - ----- - - -

zI-'

o II- I-

fr- -~L) IWWCD', 10

WIow

W Zz

oWOO N

I-CD

zww m~WW Wuu~

(Jo '-4

W~z 1-CDw 0~mJ~

IOCOmI~I WW0.1- (11-10 UwU

Co w

Page 279: -A109D 641 T8MANSHOP2 AUG~jlI PROGRAN O0C AmLNTt VA … · -a109d 641 t8manshop2 aug~jli p87(u) ada joint progran 1/4 ad119 41 o0c amlntt va 2au gb unclassified f/c 12/5 ml

TASK SEMAPHORE isENTRY P; --GET RESOURCEENTRY V; --RELEASE

END SEMAPHORE;

TASK BODY SEMAPHORE isAVAILABLE :BOOLEAN :=TRUE;

B EG I NLOOP

SELECTWHEN AVAILABLEACCEPT P DO

AVAILABLE :=FALSE;END P,

ORWHEN NOT AVAILABLEACCEPT V DO

AVAILABLE :=TRUE;END V; -

ORTERMINATE;

END LOOP;END SEMAPHORE;

32.1

Page 280: -A109D 641 T8MANSHOP2 AUG~jlI PROGRAN O0C AmLNTt VA … · -a109d 641 t8manshop2 aug~jli p87(u) ada joint progran 1/4 ad119 41 o0c amlntt va 2au gb unclassified f/c 12/5 ml

TASK SPECIAL ORS ISENTRY ASSTGN ( OBJECT : IN SOME TYPE );ENTRY RETRIEVE ( OBJECT : OUT SOMETYPE);

END SPECIAL_OPS;

TASK BODY SPECIALUPS ISTHEOBJECT : SOMETYPE;BEGIN

LOOPSELECTACCEPT ASSIGN(OBJECT:IN SOMETYPE)DO

THE OBJECT := OBJECT;END A-SIGN;

ORACCEPT RETRIEVE(OBJECT:OUT SOMETYPE)DO

OBJECT := THEOBJECT;EN!) RETRIEVE;

OR

TERMINATE;END SELECT;

END LOOP;END SPECIALOPs;

33

Page 281: -A109D 641 T8MANSHOP2 AUG~jlI PROGRAN O0C AmLNTt VA … · -a109d 641 t8manshop2 aug~jli p87(u) ada joint progran 1/4 ad119 41 o0c amlntt va 2au gb unclassified f/c 12/5 ml

Ir LLz w>- F- W

w 0It (:J ->0 xC <1

(I (I)-- ) > (F- WI a. Hj Hi

(E Ci .J LL F'I F- I (

ED a wWIZ x W U) > . 1

.4 J z I Ji Z- OZ

U GI) wa

> - x Zw w Z H 0

Z I Wr w - UW F-w

I IX I-

Page 282: -A109D 641 T8MANSHOP2 AUG~jlI PROGRAN O0C AmLNTt VA … · -a109d 641 t8manshop2 aug~jli p87(u) ada joint progran 1/4 ad119 41 o0c amlntt va 2au gb unclassified f/c 12/5 ml

CALL AND WAIT FOREVER

To CALL AN ENTRY, SPECIFY THFTASK NAME AND THEN THE FNTRY NAME

BEGIN

Ti. ENTRYl( DATA )

35

Page 283: -A109D 641 T8MANSHOP2 AUG~jlI PROGRAN O0C AmLNTt VA … · -a109d 641 t8manshop2 aug~jli p87(u) ada joint progran 1/4 ad119 41 o0c amlntt va 2au gb unclassified f/c 12/5 ml

TIMED ENTRY CALL(WAIT FOR A FINITE TIME)

SELECTTI.ENTRYI(DATA);

OR <SOS>

DELAY 60;<SOS>

END SELECT;

YOU CANNOT USE AN 'OR' TO CALL TWO (OR MORE)TASK ENTRIES!!!

THIS WOULD BE EQUIVALENT TO STANDING IN TWO

DIFFERENT LINES AT ONCE-

36

Job...,.

Page 284: -A109D 641 T8MANSHOP2 AUG~jlI PROGRAN O0C AmLNTt VA … · -a109d 641 t8manshop2 aug~jli p87(u) ada joint progran 1/4 ad119 41 o0c amlntt va 2au gb unclassified f/c 12/5 ml

CONDITIONAL ENTRY CALLS(DON'T WAIT AT ALL)

SELECTTI.ENTRYI(DATA);<SOS>

ELSE<SOS>

END SELECT;

NOTICE THE 'ORTHOGONAL ITY' OR THE

SELECT STATEMENT. IT IS USED INEITHER A TASK ENTRY CALL OR ANACCEPT STATEMENT.

ALSO NOTICE THAT INSTEAD OFI ACCEPT"••BEGIN... END ACCEPT;

IT IS'ACCEPT...DO .... END ENTRYNAME;

WHY???

37

Page 285: -A109D 641 T8MANSHOP2 AUG~jlI PROGRAN O0C AmLNTt VA … · -a109d 641 t8manshop2 aug~jli p87(u) ada joint progran 1/4 ad119 41 o0c amlntt va 2au gb unclassified f/c 12/5 ml

w zJW H)WaZW

W -ZW Z

wu HZ W ZO0

M) > LL 0ZZ 0a 0H~ LUZ

o)II Z LL y

z IW ) (EZW C F

1-:3 j m L Z 0tY- L.L mI-c

wI

I I I

z 1-

'3:w 0U I--

1'- - W

Page 286: -A109D 641 T8MANSHOP2 AUG~jlI PROGRAN O0C AmLNTt VA … · -a109d 641 t8manshop2 aug~jli p87(u) ada joint progran 1/4 ad119 41 o0c amlntt va 2au gb unclassified f/c 12/5 ml

zc

Z CDLLLJF - > C ZQ

ui w I.-

z w

Uw w r w zF- Ca) W >- I

F-W W W4

W I - L)0

1i 1- 0: 0>i II >D 0I~

0U wCU (0 c! -

0. OWO0D 1_4NZ

Page 287: -A109D 641 T8MANSHOP2 AUG~jlI PROGRAN O0C AmLNTt VA … · -a109d 641 t8manshop2 aug~jli p87(u) ada joint progran 1/4 ad119 41 o0c amlntt va 2au gb unclassified f/c 12/5 ml

SYNCHRONIZATION OF DATA

TASK SYNC IsENTRY UPDATE ( DATA : IN DATA TYPE);ENTRY READ ( DATA :OUT DATATYPE);

END SYNC;

TASK BODY SYNC isLOCAL : DATATYPE;BEG I N

LOOP

SELECTACCEPT UPDATE(DATA rN DATATYPE) DO

LOCAL := DATA;END UPDATE;

ORTERMINATE;

END SELECT;

SELECTACCEPT READ (DATA OUT DATATYPE) DO

DATA := LOCAL;END READ;

ORTERMINATE;

END SELECT;

END LOOP;END SYNC;

40

Page 288: -A109D 641 T8MANSHOP2 AUG~jlI PROGRAN O0C AmLNTt VA … · -a109d 641 t8manshop2 aug~jli p87(u) ada joint progran 1/4 ad119 41 o0c amlntt va 2au gb unclassified f/c 12/5 ml

FAMILIES OF ENTRIES

TYPE URGENCY is (LOW, MEDIUM, HIGH);

TASK MESSAGE isENTRY RECEIVE(URGENCY) (DATA : DATATYPE);

END MESSAGE;

TASK BODY MESSAGE isBEGIN

LOOPSELECT

ACCEPT RECEIVE(HIGH) (DATA:DATA_TYPE) DO

END RECEIVE;OR

WHEN RECEIVE(HIGH)'COUNT = 0 =>ACCEPT RECEIVE(MEDIUM) (DATA:DATA_TYPE) DO

END RECEIVE;OR

WHEN RECEIVE(HIGH)'COUNT+RECEIVE(MEDIUM)'COU TO =>ACCEPT RECEIVE(LOW) (DATA:DATATYPE) DO

END'RECEIVE;OR

DELAY 1-0; -- SHORT WAITEND MESSAGE;

41

Page 289: -A109D 641 T8MANSHOP2 AUG~jlI PROGRAN O0C AmLNTt VA … · -a109d 641 t8manshop2 aug~jli p87(u) ada joint progran 1/4 ad119 41 o0c amlntt va 2au gb unclassified f/c 12/5 ml

SAME THING, WITH NO GUARDS

TYPE URGENCY Is (LOW, MEDIUM, HIGH);

TASK MESSAGE isENTRY RECEIVE(URGENCY) (DATA : DATATYPE);

END MESSAGE;

TASK BODY MESSAGE is

BEG INLOOP

SELECTACCEPT RECEIVE(HIGH) (DATA:DATATYPE) DO

END RECEIVE;ELSE

SELECTACCEPT RECEIVE(MEDIUM) (DATA:DATATYPE) DO

END RECEIVE;ELSE

SELECTACCEPT RECEIVE(LOW) (DATA:DATATYPE) DO

END RECEIVE;OR

DELAY 1.0; -- SHORT WAITEND SELECT;

END SELECT;END SELECT;

END MESSAGE;

41.1

Page 290: -A109D 641 T8MANSHOP2 AUG~jlI PROGRAN O0C AmLNTt VA … · -a109d 641 t8manshop2 aug~jli p87(u) ada joint progran 1/4 ad119 41 o0c amlntt va 2au gb unclassified f/c 12/5 ml

i _ I ll L-6*

REPRESENTATION SPECIFICATIONS

LENGTH CLAUSE

T'STORAGESIZE

TASK TYPE T1 isENTRY ENTRY 1;FOR T1'STORAGE SIZE USE

2000"SYSTEM.STORAGE_UNIT);END 11;

THE PREFIX T DENOTES A TASK TYPE.

THE SIMPLE EXPRESSION MAY BE STATIC, AND IS USEDTO SPECIFY THE NUMBER OS STORAGE IINITS Tf SERESERVED OR FOR EACH ACTIVATION (NOT THE CODE) OFTHE TASK.

42

Page 291: -A109D 641 T8MANSHOP2 AUG~jlI PROGRAN O0C AmLNTt VA … · -a109d 641 t8manshop2 aug~jli p87(u) ada joint progran 1/4 ad119 41 o0c amlntt va 2au gb unclassified f/c 12/5 ml

ADDRESS CLAUSE

TASK TYPE TI ISENTRY ENTRY1;FOR T1 USE AT 16#167A#;

END Ti;

IN THIS CASE, THE ADDRESS SPECIFIES THE ACTUALLOCATION IN MEMORY WHERE THE MACHINE CODEASSOCIATED WITH Ti WILL BE PLACED.

TASK TI ISENTRY ENTRYI;FOR ENTRY_1 USE AT 16#40#;

END TI;

IF THIS CASE, ENTRY_1 WILL BE MAPPED TO HARDWAREINTERRUPT 64.

ONLY IN PARAMETERS CAN BE ASSOCIATED WITHINTERRUPT ENTRIES.

AN INTERRUPT WILL ACT AS AN ENTRY CALL ISSUED BYTHE HARDWARE, WITH A PRIORITY HIGHER THAN ANYUSER-DEFINED TASK.

DEPENDING UPON THE IMPLEMENTATION, THERE CAN BEMANY RESTRICTIONS UPON THE TYPE OF CALL TO THEINTERRUPT, AND UPON THE TERMINATE ALTERNATIVES.

NOTE: YOU CAN DIRECTLY CALL AN INTERRUPT ENTRY.

43

---- ,=.,==......=, =.m. i m ail

Page 292: -A109D 641 T8MANSHOP2 AUG~jlI PROGRAN O0C AmLNTt VA … · -a109d 641 t8manshop2 aug~jli p87(u) ada joint progran 1/4 ad119 41 o0c amlntt va 2au gb unclassified f/c 12/5 ml

TASKS AT DIFFERENT PRIORITIES

GIVEN 5 TASKS, 3 OF VARYING PRIORITY, I TO BE INTERRUPTDRIVEN, AND 1 THAT WILL BE TIED TO THE CLOCK.

PROCEDURE HEAVYSTUFF is

TASK HIGHPRIORITY IsPRAGMA PRIORITY(50); -- OR AS HIGH AS SYSTEM ALLOWSENTRY POINT;

END HIGH-PRIORITY;

TASK MEDIUMPRIORITY ISPRAGMA PRIORITY(25);ENTRY POINT;

END MEDIUMPRIORITY;

TASK LOWPRIORITY IsPRAGMA PRIORITY(1);ENTRY POINT;

END LOWPRIORITY;

TASK INTERRUPT DRIVEN ISENTRY POINT;FOR POINT USE AT 16061i; --INTERRUPT 97

END INTERRUPTDRIVEN;

TASK CLOCKDRIVEN is-- THERE ARE TWO WAYS TO DO TH 1

-- FIRST WAY IS TO HAVE ANOTHER TASK MONITOR-- THE CLOCK, AND CALL CLOCKDRIVEN.CALL-- EVERY TIME UNIT.ENTRY CALL;

--SECOND WAY IS TO ACTUALLY TIE CALL TO AN-- CLOCK INTERRUPT, AND LET CALL DETERMINE WHEN-- HE WISHES TO PERFORM AN ACTIONFOR CALL USE AT 16932 ; -- ASSUME INTERRUPT 5,

-- IS A CLnCK INTERRuPTEND CLOCK DRIVEN;

END HEAVY_STUF;

43.1

Page 293: -A109D 641 T8MANSHOP2 AUG~jlI PROGRAN O0C AmLNTt VA … · -a109d 641 t8manshop2 aug~jli p87(u) ada joint progran 1/4 ad119 41 o0c amlntt va 2au gb unclassified f/c 12/5 ml

TASK QUEUE isENTRY INSERT(DATA IN DATA TYPE);ENTRY REMOVE(DATA :OUT DATA-TYPE);

END QUEUE;

TASK BODY QUEUE isHEADTAIL : INTEGER := 0;Q : ARRAY (1..100) OF DATATYPE;BEG! N

LOOPSELECT

WHEN TAIL - HEAD + 1 /: 0 AND THENTAIL - HEAD + 1 1= 100 =>

ACCEPT INSERT(DATA : IN DATATYPE) DOIF HEAD = 0 THEN HEAD := 1; END IF;IF TAIL = 100 THEN TAIL 0; END IF;TAIL := TAIL + 1;Q(TAIL) := DATA;

END INSERT;OR

WHEN HEAD /= 0 =>ACCEPT REMOVE(DATA :OUT DATA-TYPE) DO

DATA := Q(HEAD);IF HEAD =TALL THEN

HEAD 0;TAIL 0;

ELSE

HEAD HEAD + 1;IF HEAD > 100 THEN HEAD 1; END IF;

END IF;END REMOVE;

ORTERMINATE;

END SELECT;END LOOP;

END QUEUE;

44

- mANN&

Page 294: -A109D 641 T8MANSHOP2 AUG~jlI PROGRAN O0C AmLNTt VA … · -a109d 641 t8manshop2 aug~jli p87(u) ada joint progran 1/4 ad119 41 o0c amlntt va 2au gb unclassified f/c 12/5 ml

TASK TYPE QUEUE is

ENTRY INSERT(DATA : IN DATA TYPE);ENTRY REMOVE(DATA :OUT DATATYPE);

END QUEUE;

TASK BODY QUEUE isHEAD,TAIL : INTEGER := 0;Q : ARRAY (1..100) OF DATATYPE;BEGIN

LOOPSELECTWHEN TAIL - HEAD 1 /= 0 AND THEN

TAIL - HEAD + 1 1 100 =>ACCEPT INSERT(DATA : IN DATATYPE) Do

IF HEAD = 0 THEN HEAD := 1; END IF;

IF TAIL = 100 THEN TAIL : 0 ; END IF;

TAIL := TAIL + 1;Q(TAIL) := DATA;

END INSERT;OR

WHEN HEAD /= 0 >

ACCEPT REMlOVE(DATA :Oi1T DATATYPE) DoDATA := Q(HEAD);I F HEAD = TAIL THEN

HEAD 0;TAIL : 0;

ELSEHEAD HEAD + 1;IF HEAD > 100 THEN HEAD 1; CND IF;

END IF;END REMOVE,

ORTERMINATE;

END SELECT;END LOOP;

END (UEUE;

MYQUEUE, Y0UR_)dJEUE :,il , --

Page 295: -A109D 641 T8MANSHOP2 AUG~jlI PROGRAN O0C AmLNTt VA … · -a109d 641 t8manshop2 aug~jli p87(u) ada joint progran 1/4 ad119 41 o0c amlntt va 2au gb unclassified f/c 12/5 ml

AD-A18964 A4/ OFIC RLINTOM VA 21 AUG 87

UNCLAS S IIED F/G L2/3 ML

- nR

Page 296: -A109D 641 T8MANSHOP2 AUG~jlI PROGRAN O0C AmLNTt VA … · -a109d 641 t8manshop2 aug~jli p87(u) ada joint progran 1/4 ad119 41 o0c amlntt va 2au gb unclassified f/c 12/5 ml

I II

III I1.8Si1.25 14 .

MWCROCOPY RLSCLUIIGN IfI1 CHARI

Page 297: -A109D 641 T8MANSHOP2 AUG~jlI PROGRAN O0C AmLNTt VA … · -a109d 641 t8manshop2 aug~jli p87(u) ada joint progran 1/4 ad119 41 o0c amlntt va 2au gb unclassified f/c 12/5 ml

GE,;ER ICDATA TYPE PRIVATE;QUEUE_SIZE: POSITIVE = 100;

PACKAGE QUEUEPACK is

TASK QUEUE isENTRY INSERT(DATA : IN DATATYPE);ENTRY REMOVE(DATA :OUT DATATYPE);

END QUEUE;

PACKAGE BODY QUEUEPACK isTASK BODY QUEUE is

HEADTAIL : INTEGER := 0;Q : ARRAY (1..QUEUESIZE) OF DATATYPE;BEGIN

LOOPSELECT

WHEN TAIL - HEAD + 1 / 0 AND THENTAIL - HEAD + 1 /= QUEUE SIZE =>

ACCEPT INSERT(DATA : IN DATATYPE) DOIF HEAD = 0 THEN HEAD := 1; END IF;

IF TAIL = QUEUESIZE THEN TAIL := 0; END IF;

TAIL := TAIL + 1;Q(TAIL) DATA;

END INSERT;ORWHEN HEAD /= 0 =>ACCEPT REMOVE(DATA :OUT DATATYPE) DO

DATA := Q(HEAD);IF HEAD = TAIL THEN

HEAD 0;TAIL 0;

ELSEHEAD HEAD + 1;IF HEAD> QUEUESIZE THEN HEAD 1; END iF;

END IF;

END REMOVE;OR

TERMINATE;

END SELECT;END LOOP;

END QUEUE;

PACKAGE NEW QUEUE IS NEW QUEUE PACK(MY RE'CORD, 250);PACKAGE OLD-QUEUE IS NEW OUEUEPACK(INTEGER);

46

Page 298: -A109D 641 T8MANSHOP2 AUG~jlI PROGRAN O0C AmLNTt VA … · -a109d 641 t8manshop2 aug~jli p87(u) ada joint progran 1/4 ad119 41 o0c amlntt va 2au gb unclassified f/c 12/5 ml

PROCEDURE INSERT INTEGER (DATA IN INTEGER ) RENAMESOLDQUEUE-INSERT;

PROCEDURE REMOVE INTEGER (DATA :OUT INTEGER ) RENAMESOLDQUEUE.REMOVE;

47

Page 299: -A109D 641 T8MANSHOP2 AUG~jlI PROGRAN O0C AmLNTt VA … · -a109d 641 t8manshop2 aug~jli p87(u) ada joint progran 1/4 ad119 41 o0c amlntt va 2au gb unclassified f/c 12/5 ml

PROCEDURE SPIN (R RESOURCE) isBEGIN

LOOPSELECT

R.SEIZE;RETURN;

ELSENULL; --BISY WAITING

END SELECT;END LOOP;

END;

-OR--

PROCEDURE SPIN (R RESOURCE) isBEG IN

R.SEIZE;RETURN;

EN D

48

Page 300: -A109D 641 T8MANSHOP2 AUG~jlI PROGRAN O0C AmLNTt VA … · -a109d 641 t8manshop2 aug~jli p87(u) ada joint progran 1/4 ad119 41 o0c amlntt va 2au gb unclassified f/c 12/5 ml

0 z z 00 0 0 0LL Z Z LL

w *0 0 0 C3

z I w a:0 0U a-w ea.i

Lu oS

05) ItW Ir WWF-- UCn ) ) ~U)

Nz

C. 0

Page 301: -A109D 641 T8MANSHOP2 AUG~jlI PROGRAN O0C AmLNTt VA … · -a109d 641 t8manshop2 aug~jli p87(u) ada joint progran 1/4 ad119 41 o0c amlntt va 2au gb unclassified f/c 12/5 ml

I

>

LL 0

ala > I.

W

eI-,

0.+.

LI

0 0. u

o @soso.

0l 0 Co

o WI." 0 0g2 of Z soC

CCw ~

Page 302: -A109D 641 T8MANSHOP2 AUG~jlI PROGRAN O0C AmLNTt VA … · -a109d 641 t8manshop2 aug~jli p87(u) ada joint progran 1/4 ad119 41 o0c amlntt va 2au gb unclassified f/c 12/5 ml

LU

U

c

U.r

I =0 %

Is, El u

N L IL)

z00 a

Na. LflA cou0o

Page 303: -A109D 641 T8MANSHOP2 AUG~jlI PROGRAN O0C AmLNTt VA … · -a109d 641 t8manshop2 aug~jli p87(u) ada joint progran 1/4 ad119 41 o0c amlntt va 2au gb unclassified f/c 12/5 ml

>

0

Im L6.

>3>

0.>3

0 0 Cz

0 L0L

WILL. C9> LLiJU L

C Z 0

4*ZS 0 0

C C

az a. a 5,

Page 304: -A109D 641 T8MANSHOP2 AUG~jlI PROGRAN O0C AmLNTt VA … · -a109d 641 t8manshop2 aug~jli p87(u) ada joint progran 1/4 ad119 41 o0c amlntt va 2au gb unclassified f/c 12/5 ml

A.

>2

BoUJ

Ijw

UdL

C IL

On 000J ac

-~cl

Saw

Page 305: -A109D 641 T8MANSHOP2 AUG~jlI PROGRAN O0C AmLNTt VA … · -a109d 641 t8manshop2 aug~jli p87(u) ada joint progran 1/4 ad119 41 o0c amlntt va 2au gb unclassified f/c 12/5 ml

UJ

Czlaaa

c L Bo

UOUJ

L aWos.II *1I

U. 'o

A~w

Page 306: -A109D 641 T8MANSHOP2 AUG~jlI PROGRAN O0C AmLNTt VA … · -a109d 641 t8manshop2 aug~jli p87(u) ada joint progran 1/4 ad119 41 o0c amlntt va 2au gb unclassified f/c 12/5 ml

'U

I-B

U.

CZ

I-BB zsb %0 11 ho

U.g Lfn

WIWu

IL I

C ~ mo

L CLw L. c 0ap Go

end

Page 307: -A109D 641 T8MANSHOP2 AUG~jlI PROGRAN O0C AmLNTt VA … · -a109d 641 t8manshop2 aug~jli p87(u) ada joint progran 1/4 ad119 41 o0c amlntt va 2au gb unclassified f/c 12/5 ml

sof

LUJ

%00

LLLU

00L)

EE> %

Ul CM,

i Ia coa P- C

oco Co

Page 308: -A109D 641 T8MANSHOP2 AUG~jlI PROGRAN O0C AmLNTt VA … · -a109d 641 t8manshop2 aug~jli p87(u) ada joint progran 1/4 ad119 41 o0c amlntt va 2au gb unclassified f/c 12/5 ml

-% LW

oz 0

o>

E

> 0

E U

EU L&Oz

ep*1.1 lawl

I -~ I. e

o >. EIZ E I

--

EI.LI U-

%0 =06 a

Lno

ml a few

a coc

cu L

L Co

Page 309: -A109D 641 T8MANSHOP2 AUG~jlI PROGRAN O0C AmLNTt VA … · -a109d 641 t8manshop2 aug~jli p87(u) ada joint progran 1/4 ad119 41 o0c amlntt va 2au gb unclassified f/c 12/5 ml

U.

I U

> co

0

a n0

E 00

low o

Page 310: -A109D 641 T8MANSHOP2 AUG~jlI PROGRAN O0C AmLNTt VA … · -a109d 641 t8manshop2 aug~jli p87(u) ada joint progran 1/4 ad119 41 o0c amlntt va 2au gb unclassified f/c 12/5 ml

0 I

. iJ la-

0 0 a

> E E

E >

J %0 CD0 LL - C 06

0 wLn IV1

a no am

Page 311: -A109D 641 T8MANSHOP2 AUG~jlI PROGRAN O0C AmLNTt VA … · -a109d 641 t8manshop2 aug~jli p87(u) ada joint progran 1/4 ad119 41 o0c amlntt va 2au gb unclassified f/c 12/5 ml

0 z z 00 0 0 0LLZ xXLL

0 uS6 66

z z awI

1/ 0 cl )Q 1

c t w > : >:F-cw 0 G0a

c L L a. w .(I (j) 0 w w w w

z (au u u

C ww F-W WI-cnj W U)U)

0Im N

Ca Z0LC)

Page 312: -A109D 641 T8MANSHOP2 AUG~jlI PROGRAN O0C AmLNTt VA … · -a109d 641 t8manshop2 aug~jli p87(u) ada joint progran 1/4 ad119 41 o0c amlntt va 2au gb unclassified f/c 12/5 ml

LL U. LJJW

z z00

a&as of&

M 0

am Waa *a

0~ N

mm Ci >~

02 z0

c a Caw SIISz-a

Page 313: -A109D 641 T8MANSHOP2 AUG~jlI PROGRAN O0C AmLNTt VA … · -a109d 641 t8manshop2 aug~jli p87(u) ada joint progran 1/4 ad119 41 o0c amlntt va 2au gb unclassified f/c 12/5 ml

> Sj

oak I Cr C ia

CLU> : 7 C

In w0or>3 C- 0 LM 0

z L6 cv~L. r0U.

c U 0 u a s 2 +Li4 a o c

0z 0 1.L LU0

*0 >3 ccI0 CL cyI of1 o sf

> 0W 0 sob

S0 wC C LM

Cc so--

04'9 Ci cUa

UCW0 C t.z s 0

2 1 1 c C

go = 8

4

Page 314: -A109D 641 T8MANSHOP2 AUG~jlI PROGRAN O0C AmLNTt VA … · -a109d 641 t8manshop2 aug~jli p87(u) ada joint progran 1/4 ad119 41 o0c amlntt va 2au gb unclassified f/c 12/5 ml

- - 7 ---

w Oa U.1> Bo

*LC> IS

loo Wo1 S

w)- Lfl

z .ZE .. W.

L U

fU z oou.0 w we 1 0 )mz1

z C c u .. 1 >)~c I=

W mi c m >zuz

O'LL Wc U L o

NC so0 ow0 C o

0g z0uJ

coo u .w UIc g

0U> 2 aAd C 4a.gEq..

IAmo

Page 315: -A109D 641 T8MANSHOP2 AUG~jlI PROGRAN O0C AmLNTt VA … · -a109d 641 t8manshop2 aug~jli p87(u) ada joint progran 1/4 ad119 41 o0c amlntt va 2au gb unclassified f/c 12/5 ml

Ld

UULi z

C C0 z zo0:x 0 00 0 0(T0

Z LL X1 XLL x Z

0 H-

C- 0 QW Q nQW1aH W L H WH L

0r ~C3

CZE xL CL4 -W -4W

0. HU DC Li Li C

0 (J WO 10 w

imz zu 0Cx CD9 x

Page 316: -A109D 641 T8MANSHOP2 AUG~jlI PROGRAN O0C AmLNTt VA … · -a109d 641 t8manshop2 aug~jli p87(u) ada joint progran 1/4 ad119 41 o0c amlntt va 2au gb unclassified f/c 12/5 ml

Ix

w 2

cw II

liaa

L gz 0

I- >

IV cxwY

00.. - l laN0 c ON-

84%O z N Z Lf wLaJ 0Z C C W w

c c

c' i

a a

Page 317: -A109D 641 T8MANSHOP2 AUG~jlI PROGRAN O0C AmLNTt VA … · -a109d 641 t8manshop2 aug~jli p87(u) ada joint progran 1/4 ad119 41 o0c amlntt va 2au gb unclassified f/c 12/5 ml

UL

Li~ N a

W U4,

0

O OU .- 11W

Cc U

Z z owi

a E

..too On

Page 318: -A109D 641 T8MANSHOP2 AUG~jlI PROGRAN O0C AmLNTt VA … · -a109d 641 t8manshop2 aug~jli p87(u) ada joint progran 1/4 ad119 41 o0c amlntt va 2au gb unclassified f/c 12/5 ml

0 u1=

mll

cu 0

01 u

f41 I-wU Lfl

$001w W

91 %0

N C9

Z w %1

seaN az g0- 14N

Page 319: -A109D 641 T8MANSHOP2 AUG~jlI PROGRAN O0C AmLNTt VA … · -a109d 641 t8manshop2 aug~jli p87(u) ada joint progran 1/4 ad119 41 o0c amlntt va 2au gb unclassified f/c 12/5 ml

ko IP

0) o L In

2 C L CD

Ln'

U0)C

PW 41 41las,

bM La

w c~

z = il 0

c -M~z '4a..

.zgas C

P"C'Uc

Page 320: -A109D 641 T8MANSHOP2 AUG~jlI PROGRAN O0C AmLNTt VA … · -a109d 641 t8manshop2 aug~jli p87(u) ada joint progran 1/4 ad119 41 o0c amlntt va 2au gb unclassified f/c 12/5 ml

W 2: 0: u(0) 0 0

wi z wi

0I I-4 ON-

z i

0 Wi Q UQWV) H- z Wij Wd

( It 0 ~ U) Q a

z > D 1 ~>> :a U OCx 0) 0 1 0C

<r ) 0D a. c. a-0. C 0. cr

(i) WW (3uW wu u U (r)uOu

<r H H IX 1-414 > C w> >

i-- n c > ) (.3 ) t

Page 321: -A109D 641 T8MANSHOP2 AUG~jlI PROGRAN O0C AmLNTt VA … · -a109d 641 t8manshop2 aug~jli p87(u) ada joint progran 1/4 ad119 41 o0c amlntt va 2au gb unclassified f/c 12/5 ml

00b

urnn

cz

I uU.)_ V. laa,>Ln c

U.1 c laa, la

LMJ0z U.1

WL E ILM 0 0

o Iff -

E as U 0sW CW

UU WC mbIMCE I UL

LflIL 'Uu o - lea

wI E CC U. E a0 0 Pa E.y z 0 ais = 0 2l Pe

cMLfl4cW *1c U0

Pan a In- o a1 I." u

Page 322: -A109D 641 T8MANSHOP2 AUG~jlI PROGRAN O0C AmLNTt VA … · -a109d 641 t8manshop2 aug~jli p87(u) ada joint progran 1/4 ad119 41 o0c amlntt va 2au gb unclassified f/c 12/5 ml

CD

urn L

toJ.~ ~ on

41L % mm o t Ll*u

(d C UJOgCLLJ

:" cp CZU1=0U1

Uw L E.O mu I

a. ZCC E Um i

US ~UJ W Uj' LWAU U'

Mo II 00 L Zbm

LW 01 = C

E wI 1"'* CL.-o AO

.0 =0C I m nU 1loo m lof'mx o

Il-r CZL+LJVLU E %

Page 323: -A109D 641 T8MANSHOP2 AUG~jlI PROGRAN O0C AmLNTt VA … · -a109d 641 t8manshop2 aug~jli p87(u) ada joint progran 1/4 ad119 41 o0c amlntt va 2au gb unclassified f/c 12/5 ml

Lfl

w. o

Um I :u

L.

CZ- C

LLW Uj z u

mZ z

IMX X L

z z

u m I moo

CE*Z oft E

z I~ "

low oi7 C *

IagzNw

Page 324: -A109D 641 T8MANSHOP2 AUG~jlI PROGRAN O0C AmLNTt VA … · -a109d 641 t8manshop2 aug~jli p87(u) ada joint progran 1/4 ad119 41 o0c amlntt va 2au gb unclassified f/c 12/5 ml

C

0 cu

o b0

CL mobemb

goe IgoLUL CCI-W 1 0 /Lu

%0~f mm L.0

Z CZ on a'LU%0G

01 C

0- +lg

Page 325: -A109D 641 T8MANSHOP2 AUG~jlI PROGRAN O0C AmLNTt VA … · -a109d 641 t8manshop2 aug~jli p87(u) ada joint progran 1/4 ad119 41 o0c amlntt va 2au gb unclassified f/c 12/5 ml

IN-z z

- a.i 1- .

(1)1 0>0.

F- .-- .JHWi z ZCF-) ()Z

0D > 0 H (J) ~>>

I . ->. a.u..0 c

H www. I I.-

z F- W WI- W I-C. W(D Q.W Q inW

aI (I wW E9()z

x L U) rW (1) mWa > CCLm aaw

U) a.- i- I-I- I w w W

W w uu mu uWO0 W H'H WH

F- H > > -> >Z F 0 r iJz r>

".l 0w w "WWCY.C a u)cncr. n c0C- U) 0.

Page 326: -A109D 641 T8MANSHOP2 AUG~jlI PROGRAN O0C AmLNTt VA … · -a109d 641 t8manshop2 aug~jli p87(u) ada joint progran 1/4 ad119 41 o0c amlntt va 2au gb unclassified f/c 12/5 ml

0 C

EsmE- C (

cz LF)U.)

lol l,E- z C

LU to C olCw . >si 0 c

%1 . lo -c L6 UJ.1.1 C wow. I to

I Zz low .

C to Po IlIu L uCI~ z COC ZC u C

jut Uota IlUL 1.1. c% CL r M zMcol w LL CLU .. z O &

0. ..wI -p a.Cz m Z 0No 0. L. L Zaccz CL 41 * 0"O c It"

Go LM 01 CLZ

a.. a co Lcp

CL1 1 .0

Page 327: -A109D 641 T8MANSHOP2 AUG~jlI PROGRAN O0C AmLNTt VA … · -a109d 641 t8manshop2 aug~jli p87(u) ada joint progran 1/4 ad119 41 o0c amlntt va 2au gb unclassified f/c 12/5 ml

X 4a

low 0

L Z

c w (u.

I'4W1 Z I-ZDh.Cu Ul of ~

ago.

41 C M

CZ 41I.a'U :

II- + JU C o

Page 328: -A109D 641 T8MANSHOP2 AUG~jlI PROGRAN O0C AmLNTt VA … · -a109d 641 t8manshop2 aug~jli p87(u) ada joint progran 1/4 ad119 41 o0c amlntt va 2au gb unclassified f/c 12/5 ml

.z

In C Mu

II LU

II wa

C C_

Z Iy

ZC Z& S L6

C9u mCo CL CcU1-

uLp CCCLS 0.u

SuC Cz~a soSPNIi Q

IMai

Page 329: -A109D 641 T8MANSHOP2 AUG~jlI PROGRAN O0C AmLNTt VA … · -a109d 641 t8manshop2 aug~jli p87(u) ada joint progran 1/4 ad119 41 o0c amlntt va 2au gb unclassified f/c 12/5 ml

U.

pm

Pol 0

sC O

le

LVe

Cz a

Ca a sol

2 aaAss,

Page 330: -A109D 641 T8MANSHOP2 AUG~jlI PROGRAN O0C AmLNTt VA … · -a109d 641 t8manshop2 aug~jli p87(u) ada joint progran 1/4 ad119 41 o0c amlntt va 2au gb unclassified f/c 12/5 ml

u-

a. z(1) H-

(E wI-I- z

w z w0 z

z w z (E

ED I U)J

z wz

Ml Z"II'I

zco 0w w a

J J -I.

0 0 JmH 0

cl) cl

Page 331: -A109D 641 T8MANSHOP2 AUG~jlI PROGRAN O0C AmLNTt VA … · -a109d 641 t8manshop2 aug~jli p87(u) ada joint progran 1/4 ad119 41 o0c amlntt va 2au gb unclassified f/c 12/5 ml

M-P

F-zwz

0

U~00

z0

.

0U)

Page 332: -A109D 641 T8MANSHOP2 AUG~jlI PROGRAN O0C AmLNTt VA … · -a109d 641 t8manshop2 aug~jli p87(u) ada joint progran 1/4 ad119 41 o0c amlntt va 2au gb unclassified f/c 12/5 ml

w

w

LL ClLLm w

zz~co

,-Czw

-Jz J41

Page 333: -A109D 641 T8MANSHOP2 AUG~jlI PROGRAN O0C AmLNTt VA … · -a109d 641 t8manshop2 aug~jli p87(u) ada joint progran 1/4 ad119 41 o0c amlntt va 2au gb unclassified f/c 12/5 ml

LLO-J

C D )

Iz

wemWu U

j u

U

Page 334: -A109D 641 T8MANSHOP2 AUG~jlI PROGRAN O0C AmLNTt VA … · -a109d 641 t8manshop2 aug~jli p87(u) ada joint progran 1/4 ad119 41 o0c amlntt va 2au gb unclassified f/c 12/5 ml

IN-CLASS EXERCISE

LET US DESIGN THE TASK SPECIFICATIONS FOR THE FOLLOWING

SENARIO.

THREE TASKS HAVE ACCES TO A TYPE KNOWN AS MESSAGETYPE.

TASKI PRODUCES MESSAGES. TASK_2 CAN RECEIVE MESSAGES,HOLD THEM IN A BUFFER (IF NECESSARY), AND SENDS THEM TO

TASK_3 WHEN THE DATE/TIME FIELD (PART OF MESSAGETYPE)SAYS TO.

TASK TASK_1 is

END TASKI;

TASK TASK_2 is

END TASK_2;

TASK TASK_3 Is

END TASK_3;

83

Page 335: -A109D 641 T8MANSHOP2 AUG~jlI PROGRAN O0C AmLNTt VA … · -a109d 641 t8manshop2 aug~jli p87(u) ada joint progran 1/4 ad119 41 o0c amlntt va 2au gb unclassified f/c 12/5 ml

TASKING EXERCISE

WRITE A MAIN PROGRAM AND TWO TASKS TO SIMULATE A HOUSE ALARMSYSTEM. THE MAIN PROGRAM IS AN INPUT SIMULATOR TO THETASKS. ONE TASK KEEPS TRACK OF THE STATUS OF THE HOUSE.ANOTHER IS THE ACTUAL ALARM SYSTEM.

TASK 1: THE HOUSE STATUS (TASK NAME :HOUSE)THREE ENTRIES => OK, NOTOK, WRITE

THE ENTRIES OK AND NOTOK SET OR RESET A FLAG THATDETERMINES THE STATUS OF THE HOUSE. NOTOK WILL ALSO SET AVARIABLE TO TELL YOU WHICH ALARM IS CURRENTLY GOING OFF.BOTH OK AND NOTOK SHOULD PRINT OUT A MESSAGE VERIFYING THATTHEY WERE CALLED. THE WRITE ENTRY WILL PRINT THE STATUS OFTHE HOUSE. IF THERE IS AN ALARM CURRENTLY GOING OFF, WRITEWILL TELL YOU THE ALARM NUMBER.

TASK 2: THE ALARM SYSTEM (TASK NAME: ALARM)THREE ENTRIES => FIRE, INTRUDER, SHUTOFF

THE ALARM SYSTEM WILL ACCEPT ANY OF THE THREE ENTRYCALLS FROM THE INPUT SIMULATOR. IF THERE ARE NO ENTRY CALLSWITHIN 5 SECONDS, IT WILL CALL HOUSE.WRITE TO DISPLAY THESTATUS. FIRE AND INTRUDER EACH HAVE A PARAMETER INDICATIONTHE ALARM LOCATION. FIRE LOCATIONS ARE '1' THRU '9'.INTRUDER LOCATIONS ARE 'A' THRU 'Z'. FIRE AND INTRUDERSHOULD CALL HOUSE.NOTOK (AND TELL THE HOUSE WHERE THE ALARMIS SOUNDING), AND THEN PRINT OUT A MESSAGE

MAIN PROGRAM

THE MAIN PROGRAM WILL READ IN CHARACTERS FPOM THEKEYBOARD. IF THE CHARACTER IS A '1' THRU '9', CALL THE FIREALARM. IF THE CHARACTER IS A 'A' THRU 'Z' THEN IT CALLS THEINTRUDER ALARM. IF THE CHARACTER IS A '0'(ZERO), THE HOHSEIS RESET TO OK. IF THE CHARACTER IS A '', THEN THE ALARMIS SHUTDOWN, AND THE PROGRAM ENDS. ALL OTHER CHARACTERS DONOTHING.

THE HOUSE STATUS SHOULD BE OK TO START.

84

Page 336: -A109D 641 T8MANSHOP2 AUG~jlI PROGRAN O0C AmLNTt VA … · -a109d 641 t8manshop2 aug~jli p87(u) ada joint progran 1/4 ad119 41 o0c amlntt va 2au gb unclassified f/c 12/5 ml

run cookie

The house is ok

The house is ok

&Invalid character. Try aqain

The house is ok

GHouse alarm set to not OK at location GIntruder in room G

The house is not ok ..alarm is off at location G

The house is not ok ..alarm is off at location G

4House alarm set to not OK at location 4Fire Alarm # 4 has been set off.

The house is not ok ..alarm is off at location 4

House alarm reset to OK.

The house is ok

The house is ok

The alarm has been turned off

85

Page 337: -A109D 641 T8MANSHOP2 AUG~jlI PROGRAN O0C AmLNTt VA … · -a109d 641 t8manshop2 aug~jli p87(u) ada joint progran 1/4 ad119 41 o0c amlntt va 2au gb unclassified f/c 12/5 ml

wi.N TEXT 10;usE TEXTJO;

PROCEDURE COOKIE is

CHAR : CHARACTER;

TASK HOUSE isENTRY OK,ENTRY NOT OK (WHERE:CHARACTER);ENTRY WRITE;

END HOUSE

TASK ALARM isENTRY FIRE (LOCATION:CHARACTER);ENTRY INTRUDER (LOCATION:CHARACTER);ENTRY SHUTOFF;

END ALARM

86

Page 338: -A109D 641 T8MANSHOP2 AUG~jlI PROGRAN O0C AmLNTt VA … · -a109d 641 t8manshop2 aug~jli p87(u) ada joint progran 1/4 ad119 41 o0c amlntt va 2au gb unclassified f/c 12/5 ml

TASK BODY HOUSE isTYPE CONDITION is (OK, NOT OK);ALARM STATUS : CONDITION :; OK;ALARMLOCATION : CHARACTER;

BEGINLOOP

SELECT

ACCEPT OK DOALARM STATUS : OK;PUT_LTNE(fHOUSE ALARM RESET TO OK.');

END OK;i OROR ACCEPT NOT OK (WHERE:CHARACTER)

DOALARM _TATUS :N NOT OK;ALARM-LOCATION :- WfERE;PUT_LTNE('HousE ALARM SET TO NOT OK AT*&

'LOCATION 9 & ALARMLOCATION);END NOTOK;

ORACCEPT WRITE DO

NEW LINE;CASE ALARM STATUS IsWHEN OK =>PUT LINE('THE HOUSE IS OK');WHEN NOT OK => PUT_LINE

('THE HOUSE IS NOT OKu&-.ALARM IS OFF AT LOCATION "&ALARMLOCATION);

END CASE;NEW LINE;

END WRITE;OR

TERMINATE;

END SELECT;END LOOP;

END HOUSE ;

87

Page 339: -A109D 641 T8MANSHOP2 AUG~jlI PROGRAN O0C AmLNTt VA … · -a109d 641 t8manshop2 aug~jli p87(u) ada joint progran 1/4 ad119 41 o0c amlntt va 2au gb unclassified f/c 12/5 ml

TASK BODY ALARM is

BEGINLOOP

SELECTACCEPT FIRE (LOCATION:CHARACTER) Do

HOUSE.NOT-OK(LOCATION);PUT (*FIRE ALARM # ");PUT (LOCATION);PUT LINE (' HAS BEEN SET OFF-*);

END FIRE;OR

ACCEPT INTRUDER (LOCATION:CHARACTER) DoHOUSE.NOTOK(LOCATION);PUT ('INTRUDER IN ROOMPUT (LOCATION);NEW LINE;

END INTRUDER;OR

ACCEPT SHUTOFF;PUT_LINE ('THE ALARM HAS BEEN TURNED OFF*);

EXIT;OR

DELAY 5.0;HOUSE.WRITE;

END SELECT;.

END LOOP;

END ALARM;

88

Page 340: -A109D 641 T8MANSHOP2 AUG~jlI PROGRAN O0C AmLNTt VA … · -a109d 641 t8manshop2 aug~jli p87(u) ada joint progran 1/4 ad119 41 o0c amlntt va 2au gb unclassified f/c 12/5 ml

BEGIN --MAINLOOP

GET (CHAR);SKIPLINE;CASE CHAR is

WHEN '1' .. '9' > ALARM.FIRE (CHAR);WHEN 'A' .. 'Z' => ALARM.INTRUDER (CHAR);WHEN 'A' >'Z' - ALARM.INTRUDER (CHAR);WHEN => HOUSE.OK;WHEN 'I' > ALARM.SHUTOFF;WHEN OTHERS => PUT_LINE

('INVALID CHARACTER. TRY AGAIN');END CASE;EXIT WHEN CHAR =

END LOOP;

END COOKIE;

89

Page 341: -A109D 641 T8MANSHOP2 AUG~jlI PROGRAN O0C AmLNTt VA … · -a109d 641 t8manshop2 aug~jli p87(u) ada joint progran 1/4 ad119 41 o0c amlntt va 2au gb unclassified f/c 12/5 ml

Tutorial on Ada* Exceptions

by

Major Patricia K. Lawlis

lawlis%asu@csnet-relay

Air Force Institute of Technology (AFIT)and

Arizona State University (ASU)

21 August 1987

*Ada Is a registered trademark of the U.S. Government - Ada Joint ProgramOffice

Page 342: -A109D 641 T8MANSHOP2 AUG~jlI PROGRAN O0C AmLNTt VA … · -a109d 641 t8manshop2 aug~jli p87(u) ada joint progran 1/4 ad119 41 o0c amlntt va 2au gb unclassified f/c 12/5 ml

Student Handout, "Ada Applications Proc ammer -AdvancedAda Software Engineering", USAF Teclhnical Training School,Keesler Air Force Base, July 1986.

" J. G. P. Barnes, Programming in Ada, 2nd edition,Addison-Wesley, 1984.

" Grady Booch, Software Engineering with Ada,Benjamin/Cummings, 1983.

" Theodore F. Elbert, Embedded Programming in Ada, VanNostrand Reinhold, 1986.

" Putnam P. Texel, Introductory Ada: Packages forProgramming, Wadsworth, 1986.

" ANSI/MIL-STD-1815A, "Military Standard - Ada ProgrammingLanguage" (LRM), U. S. Department of Defense, 22 January1983.

i mu aimllli l i I I I2

Page 343: -A109D 641 T8MANSHOP2 AUG~jlI PROGRAN O0C AmLNTt VA … · -a109d 641 t8manshop2 aug~jli p87(u) ada joint progran 1/4 ad119 41 o0c amlntt va 2au gb unclassified f/c 12/5 ml

=> Overview

* Naming an exception

Creating an exception handler

* Raising an exception

* Handling exceptions

• Turning ott exception checking

* Tasking exceptions

* More examples

t ANN3

Page 344: -A109D 641 T8MANSHOP2 AUG~jlI PROGRAN O0C AmLNTt VA … · -a109d 641 t8manshop2 aug~jli p87(u) ada joint progran 1/4 ad119 41 o0c amlntt va 2au gb unclassified f/c 12/5 ml

* What is an exception

* Ada exceptions

* Comparison

- the American way

- using exceptions

Page 345: -A109D 641 T8MANSHOP2 AUG~jlI PROGRAN O0C AmLNTt VA … · -a109d 641 t8manshop2 aug~jli p87(u) ada joint progran 1/4 ad119 41 o0c amlntt va 2au gb unclassified f/c 12/5 ml

• A run time error

" An unusual or unexpected condition

* A condition requiring special attention

* Other than normal processing

1S

Page 346: -A109D 641 T8MANSHOP2 AUG~jlI PROGRAN O0C AmLNTt VA … · -a109d 641 t8manshop2 aug~jli p87(u) ada joint progran 1/4 ad119 41 o0c amlntt va 2au gb unclassified f/c 12/5 ml

* An exceptioti has a name

- maybe predefined

- may be declared

* The exception is raised

- may be raised implicitly by run time system

- may be raised explicitly by raise statement

• The exception is handled

- exception handler may be placed in any frame

- exception propagates until handler is found

if no handler anywhere, process .aborts

,,,,, I ... ,,,.. .. ,6

Page 347: -A109D 641 T8MANSHOP2 AUG~jlI PROGRAN O0C AmLNTt VA … · -a109d 641 t8manshop2 aug~jli p87(u) ada joint progran 1/4 ad119 41 o0c amlntt va 2au gb unclassified f/c 12/5 ml

package StackPackage is

type StackType is limited private;

procedure Push (Stack in out Stack-Type;Element in ElementType;OverflowFlag out boolean);

end StackPackage;

with Text_(O;with StackPackage; use StackPackage;procedure FlagWaving is

Stack "Stack_Type;Element "ElementType;Flag "boolean;

begin

Push (Stack, Element, Flag);if Flag then

Text_lO.Put ("Stack overflow");

end if;

end FlagWaving;

-.

Page 348: -A109D 641 T8MANSHOP2 AUG~jlI PROGRAN O0C AmLNTt VA … · -a109d 641 t8manshop2 aug~jli p87(u) ada joint progran 1/4 ad119 41 o0c amlntt va 2au gb unclassified f/c 12/5 ml

package StackPackage is

type Stack_Type is limited private;StackOverflow,StackUnderflow : exception;

procedure Push (Stack "in out Stack_Type;Element: in Element_Type);

-- may raise StackOverflow

end Stack_Package;

with Text_10;with Stack_Package; use Stack_Package;procedure MoreNatural is

Stack : Stack_Type;Element : ElementType;

begin

Push (Stack, Element);

exceptionwhen StackOverflow =>

TextlO. Put ("Stack overflow");

end MoreNatural;7a

Page 349: -A109D 641 T8MANSHOP2 AUG~jlI PROGRAN O0C AmLNTt VA … · -a109d 641 t8manshop2 aug~jli p87(u) ada joint progran 1/4 ad119 41 o0c amlntt va 2au gb unclassified f/c 12/5 ml

0 Overview

=> Naming an exception

* Creating an exception handler

* Raising an exception

* Handling exceptions

* Turning off exception checking

* Tasking exceptions

* More examples

-- ,, ,, , ,ra n mmn m lnmlmmnni m I ~ mmm N8

Page 350: -A109D 641 T8MANSHOP2 AUG~jlI PROGRAN O0C AmLNTt VA … · -a109d 641 t8manshop2 aug~jli p87(u) ada joint progran 1/4 ad119 41 o0c amlntt va 2au gb unclassified f/c 12/5 ml

0 Predefined exceptions

• Declaring exceptions

0 I/0 exceptions

.9

Page 351: -A109D 641 T8MANSHOP2 AUG~jlI PROGRAN O0C AmLNTt VA … · -a109d 641 t8manshop2 aug~jli p87(u) ada joint progran 1/4 ad119 41 o0c amlntt va 2au gb unclassified f/c 12/5 ml

* In package STANDARD (also see chap 11 of LRM)

* CONSTRAINTERROR

violation of range, index, or discriminant constraint...

" NUMERICERROR

execution of a predefined numeric operation cannotdeliver a correct result

• PROGRAMERROR

attempt to access a program unii which has not yetbeen elaborated...

" STORAGEERROR

storage allocation is exceeded...

* TASKINGERROR

exception arising during intertask communication

Page 352: -A109D 641 T8MANSHOP2 AUG~jlI PROGRAN O0C AmLNTt VA … · -a109d 641 t8manshop2 aug~jli p87(u) ada joint progran 1/4 ad119 41 o0c amlntt va 2au gb unclassified f/c 12/5 ml

exception_declaration identifierlist exception;

* Exception may be declared anywhere an object declarationis appr6priate

* However, exception is not an object

- may not be used as subprogram parameter, recordor array component

- has same scope as an object, but its effect mayextend beyond its scope

Example:

procedure Calculation is

Singular : exception;Overflow, Underflow :exception;

begin

end Calculation;

Page 353: -A109D 641 T8MANSHOP2 AUG~jlI PROGRAN O0C AmLNTt VA … · -a109d 641 t8manshop2 aug~jli p87(u) ada joint progran 1/4 ad119 41 o0c amlntt va 2au gb unclassified f/c 12/5 ml

" Exceptions relating to file processing

* In predefined library unit 10_EXCEPTIONS(also see chap 14 of LRM)

• TEXT_10, DIRECT_10, and SEQUENTIAL_10 with it

package 10_EXCEPTIONS is

NAMEERROR exception;USEERROR :exception; --attempt to use

--invalid operation

STATUSERROR : exception;MODEERROR :exception;DEVICEERROR :exception;ENDERROR exception; --altempt to read

--beyond end of fileDATAERROR exception; --attempt to input

--wrong typeLAYOUTERROR :exception; --for text processing

end 10_EXCEPTIONS;

12

Page 354: -A109D 641 T8MANSHOP2 AUG~jlI PROGRAN O0C AmLNTt VA … · -a109d 641 t8manshop2 aug~jli p87(u) ada joint progran 1/4 ad119 41 o0c amlntt va 2au gb unclassified f/c 12/5 ml

Overview

Naming an exception

=> Creating an exception handler

Raising an exception

Handling excepiions

Turning oif exception checking

Tasking exceptions

More examples

13

Page 355: -A109D 641 T8MANSHOP2 AUG~jlI PROGRAN O0C AmLNTt VA … · -a109d 641 t8manshop2 aug~jli p87(u) ada joint progran 1/4 ad119 41 o0c amlntt va 2au gb unclassified f/c 12/5 ml

• Defining an exception handler

* Restrictions

* Handler example

14

Page 356: -A109D 641 T8MANSHOP2 AUG~jlI PROGRAN O0C AmLNTt VA … · -a109d 641 t8manshop2 aug~jli p87(u) ada joint progran 1/4 ad119 41 o0c amlntt va 2au gb unclassified f/c 12/5 ml

• Defining an exception handler

• Restrictions

" Handler example

14

Page 357: -A109D 641 T8MANSHOP2 AUG~jlI PROGRAN O0C AmLNTt VA … · -a109d 641 t8manshop2 aug~jli p87(u) ada joint progran 1/4 ad119 41 o0c amlntt va 2au gb unclassified f/c 12/5 ml

I~i PMRdL

*Exception condition is "'caught" and "handled" by an exception

handler

*Exception handler may appear at the end of any frame (block,

subprogram, package or task body)

begin

exception- - exception handler(s)

end;

Form similar to case statement

exceptionhaldler --when exception-choice (I exception-choice) =>

sequence of-statements

exception..Shoice :=exception_namne Iothers

Page 358: -A109D 641 T8MANSHOP2 AUG~jlI PROGRAN O0C AmLNTt VA … · -a109d 641 t8manshop2 aug~jli p87(u) ada joint progran 1/4 ad119 41 o0c amlntt va 2au gb unclassified f/c 12/5 ml

Exception condition is "caught" and "handled" by an exception

handler

Exception handler may appear at the end of any frame (block,

subprogram, package or task body)

begin

exception-- exception handler(s)

end;

Form similar to case statement

exceptionhandler ::=when exception_choice (I exception_c hoice) =>

sequence ofstatements

exception_choice *:= exception-name Iothers

15

Page 359: -A109D 641 T8MANSHOP2 AUG~jlI PROGRAN O0C AmLNTt VA … · -a109d 641 t8manshop2 aug~jli p87(u) ada joint progran 1/4 ad119 41 o0c amlntt va 2au gb unclassified f/c 12/5 ml

• Exception handlers must be at the end of a frame

* Nothing but exception handlers may lie between exceptionand end of frame

• A handler may name any visible exception declared orpredefined

* A handler includes a sequence of statements

- response to exception condition

• A handler for others may be used

-must be the last handier in the frame

- handles all exceptions not listed in previoushandlers of the frame(including those not in scope of visibility)

- can be the only handler in the frame

16

Page 360: -A109D 641 T8MANSHOP2 AUG~jlI PROGRAN O0C AmLNTt VA … · -a109d 641 t8manshop2 aug~jli p87(u) ada joint progran 1/4 ad119 41 o0c amlntt va 2au gb unclassified f/c 12/5 ml

procedure Whatever is

ProblemCondition exception;

begin

exception

when ProblemCondition =>Fix_It;

when CONSTRAINTERROR =>Report_It;

when others =>Punt;

end Whatever;

17

Page 361: -A109D 641 T8MANSHOP2 AUG~jlI PROGRAN O0C AmLNTt VA … · -a109d 641 t8manshop2 aug~jli p87(u) ada joint progran 1/4 ad119 41 o0c amlntt va 2au gb unclassified f/c 12/5 ml

Overview

* Naming an exception

• Creating an exception handler

=> Raising an exception

* Handling exceptions

* Turning off exception checking

* Tasking exceptions

* More examples

18

Page 362: -A109D 641 T8MANSHOP2 AUG~jlI PROGRAN O0C AmLNTt VA … · -a109d 641 t8manshop2 aug~jli p87(u) ada joint progran 1/4 ad119 41 o0c amlntt va 2au gb unclassified f/c 12/5 ml

" How exceptions are raised

0 Effects of raising an exception

" Raising example

19

Page 363: -A109D 641 T8MANSHOP2 AUG~jlI PROGRAN O0C AmLNTt VA … · -a109d 641 t8manshop2 aug~jli p87(u) ada joint progran 1/4 ad119 41 o0c amlntt va 2au gb unclassified f/c 12/5 ml

* Implicitly by run time system

- predefined exceptions

• Explicitly by raise statement

raisestatement ::= raise [exception-name];

the name of the exception must be visible at thepoint of the raise statement

a raise statement without an exception name isallowed only within an exception handler

20

Page 364: -A109D 641 T8MANSHOP2 AUG~jlI PROGRAN O0C AmLNTt VA … · -a109d 641 t8manshop2 aug~jli p87(u) ada joint progran 1/4 ad119 41 o0c amlntt va 2au gb unclassified f/c 12/5 ml

* Control transfers to exception handler at end of frame(if one exists)

a Exception is lowered

" Sequence of statements in exception hander is executed

" Control passes to end of frame

If frame does not contain an appropriate exception handler,the exception is propagated

21

Page 365: -A109D 641 T8MANSHOP2 AUG~jlI PROGRAN O0C AmLNTt VA … · -a109d 641 t8manshop2 aug~jli p87(u) ada joint progran 1/4 ad119 41 o0c amlntt va 2au gb unclassified f/c 12/5 ml

h . * . . . . .. ... . . . . . . . -

procedure Whatever isProblemCondition exception;

RealBadCondition "exception;

begin

if ProblemArises thenraise ProblemCondition;

end if;

if Serious_Problem thenraise RealBad Condition;

end if;

exception

when ProblemCondition =>Fix_It;

when CONSTRAINTERROR =>ReportIt;

when others =>Punt;

end Whatever;

22

Page 366: -A109D 641 T8MANSHOP2 AUG~jlI PROGRAN O0C AmLNTt VA … · -a109d 641 t8manshop2 aug~jli p87(u) ada joint progran 1/4 ad119 41 o0c amlntt va 2au gb unclassified f/c 12/5 ml

rr

*overview

* Naming an exception

* Creating an exception handler

* Raising an exception

=> Handling exceptions

" Turning off exception checking

• Tasking exceptions

* More examples

23

i i II I I I I I il I IIII I IIIAI II.

Page 367: -A109D 641 T8MANSHOP2 AUG~jlI PROGRAN O0C AmLNTt VA … · -a109d 641 t8manshop2 aug~jli p87(u) ada joint progran 1/4 ad119 41 o0c amlntt va 2au gb unclassified f/c 12/5 ml

" How exception handling can be useful

* Which exception handler is used

* Sequence of statements in exception handler

* Propagation

0 Propagation example

24

Page 368: -A109D 641 T8MANSHOP2 AUG~jlI PROGRAN O0C AmLNTt VA … · -a109d 641 t8manshop2 aug~jli p87(u) ada joint progran 1/4 ad119 41 o0c amlntt va 2au gb unclassified f/c 12/5 ml

Normal processing could continue if

- cause of exception condition can be "repaired"

- alternative approach can be used

- operation can be retried

* Degraded processing could be. better than termination

- for example, safety-critical systems

* If termination is necessary, "clean-up" can be done first

2'

Page 369: -A109D 641 T8MANSHOP2 AUG~jlI PROGRAN O0C AmLNTt VA … · -a109d 641 t8manshop2 aug~jli p87(u) ada joint progran 1/4 ad119 41 o0c amlntt va 2au gb unclassified f/c 12/5 ml

* If exception is raised during normal execution, system looksfor an exception handler at the end of the frame in which theexception occurred

* If exception is raised during elaboration of the declarativepart of a frame

- elaboration is abandoned and control goes to theend of the frame with the exception sti(f raised

exception part of the frame is not searched for anappropriate handler

effectively, the calling unit will be searched for anappropriate handler

if elaboration of library unit, program execution isabandoned

-- all library units are elaborated with themain program

If exception is raised in exception handler

- handler may contain block(s) with handler(s)

. if not handled locally within handler, control goesto end of frame with exception raised

26

IIAlI I

Page 370: -A109D 641 T8MANSHOP2 AUG~jlI PROGRAN O0C AmLNTt VA … · -a109d 641 t8manshop2 aug~jli p87(u) ada joint progran 1/4 ad119 41 o0c amlntt va 2au gb unclassified f/c 12/5 ml

• Handier completes the execution of the frame

- handler for a function should usually contain areturn statement

* Statements can be of arbitrary complexity

- can use most any language construct that makessense in that context

- cannot use goto statement to transfer into ahandler

- if handler is in a block inside a loop, could use exitstatement

* Handler at end of package body applies only to packageinitialization

Page 371: -A109D 641 T8MANSHOP2 AUG~jlI PROGRAN O0C AmLNTt VA … · -a109d 641 t8manshop2 aug~jli p87(u) ada joint progran 1/4 ad119 41 o0c amlntt va 2au gb unclassified f/c 12/5 ml

* Occurs if no handler exists in frame where exception is raised

" Also occurs if raise statement is used in handler

• Exception is propagated dynamically

- propagates from subprogram to unit calling it(not necessarily unit containing its declaration)

- this can result in propagation outside its scope

* Propagation continues until

- an appropriate handler is found

- exception propagates to main program (still withno handler) and program execution is abandoned

28

Page 372: -A109D 641 T8MANSHOP2 AUG~jlI PROGRAN O0C AmLNTt VA … · -a109d 641 t8manshop2 aug~jli p87(u) ada joint progran 1/4 ad119 41 o0c amlntt va 2au gb unclassified f/c 12/5 ml

procedure DoNothing is

procedure Has_It is

Some_Problem exception;

begin

raise SomeProblem;

exceptionwhen SomeProblem =>

Clean_Up;raise;

end HasIt;

procedure Callsit isbegin

Has_It;

end Calls_It;

begin -- DoNothing

CallsIt;

exceptionwhen others => Fix_Everything;

end Do_Nothing;

Page 373: -A109D 641 T8MANSHOP2 AUG~jlI PROGRAN O0C AmLNTt VA … · -a109d 641 t8manshop2 aug~jli p87(u) ada joint progran 1/4 ad119 41 o0c amlntt va 2au gb unclassified f/c 12/5 ml

O0it

" Overview

* Naming an exception

* Creating an exception handler

* Raising an exception

• Handling exceptions

=> Turning off exception checking

* Tasking exceptions

* More examples

30

Page 374: -A109D 641 T8MANSHOP2 AUG~jlI PROGRAN O0C AmLNTt VA … · -a109d 641 t8manshop2 aug~jli p87(u) ada joint progran 1/4 ad119 41 o0c amlntt va 2au gb unclassified f/c 12/5 ml

* Overhead vs efficiency

• Pragma SUPPRESS

* Check identifiers

• . . n i n n- - m l ll I NN II IIL

Page 375: -A109D 641 T8MANSHOP2 AUG~jlI PROGRAN O0C AmLNTt VA … · -a109d 641 t8manshop2 aug~jli p87(u) ada joint progran 1/4 ad119 41 o0c amlntt va 2au gb unclassified f/c 12/5 ml

* Exception checking imposes run time overhead

- interactive applications will never notice- real-time applications have legitimate concerns

but must not sacrifice system safety

* When efficiency counts

- first and foremost, make program work- be sure possible problems are covered by exception

handlers- check if efficient enough - stop if it is

- if not, study execution profile-- eliminate bottlenecks-- improve algorithm

avoid "cute" tricks

- check if efficient enough - stop if it is- if not, trade-offs may be necessary- some exception checks may be expendable since

debugging is done

- however, every suppressed check poses newpossibilities for problems

-- must re-examine possible problems-- must re-examind exception handlers

- always keep in mind-- problems will happen-- critical applications must be able to

deal with these problems32

Page 376: -A109D 641 T8MANSHOP2 AUG~jlI PROGRAN O0C AmLNTt VA … · -a109d 641 t8manshop2 aug~jli p87(u) ada joint progran 1/4 ad119 41 o0c amlntt va 2au gb unclassified f/c 12/5 ml

Improving the a 4yn~h-is far better - and easier inthe long run - than s~ippressing checks

32a

Page 377: -A109D 641 T8MANSHOP2 AUG~jlI PROGRAN O0C AmLNTt VA … · -a109d 641 t8manshop2 aug~jli p87(u) ada joint progran 1/4 ad119 41 o0c amlntt va 2au gb unclassified f/c 12/5 ml

Only allowed immediately within a declarative part or

immediately within a package specification

pragma SUPPRESS (identifier [,J ON =>] name]);

- identifier is that of the check to be omitted(next slide lists identifiers)

. name is that of an object, type, or unit for whichthe check is to be suppressed

-- if no name is given, it applies to theremaining declarative region

An implementation is free to ignore the suppress directivefor any check which may be impossible or too costly tosuppress

Example:

pragma SUPPRESS (INDEX_CHECK, ON => Index);

33

Page 378: -A109D 641 T8MANSHOP2 AUG~jlI PROGRAN O0C AmLNTt VA … · -a109d 641 t8manshop2 aug~jli p87(u) ada joint progran 1/4 ad119 41 o0c amlntt va 2au gb unclassified f/c 12/5 ml

* These identifiers are explained in more detail in chap 11 ofthe LRM

• Check identifiers for suppression of CONSTRAINTERRORchecks

ACCESSCHECKDISCRIMINANTCHECKINDEXCHECKLENGTHCHECKRANGECHECK

" Check identifiers for suppression of NUMERICERROR checks

DIVISION CHECKOVERFLOWCHECK

• Check identifier for suppression of PROGRAMERROR checks

ELABORATION-CHECK

" Check identifier for suppression of STORAGEERROR check

STORAGECHECK

• m • . . ..

Page 379: -A109D 641 T8MANSHOP2 AUG~jlI PROGRAN O0C AmLNTt VA … · -a109d 641 t8manshop2 aug~jli p87(u) ada joint progran 1/4 ad119 41 o0c amlntt va 2au gb unclassified f/c 12/5 ml

I | 1in .

" Overview

* Naming an exception

* Creating an exception handler

* Raising an exception

• Handling exceptions

" Turning off exception checking

=> Tasking exceptions

* More examples

35

II im mmm llikm

Page 380: -A109D 641 T8MANSHOP2 AUG~jlI PROGRAN O0C AmLNTt VA … · -a109d 641 t8manshop2 aug~jli p87(u) ada joint progran 1/4 ad119 41 o0c amlntt va 2au gb unclassified f/c 12/5 ml

* Exception handling is trickier for tasks

* Exceptions during task rendezvous

* Tasking example

Page 381: -A109D 641 T8MANSHOP2 AUG~jlI PROGRAN O0C AmLNTt VA … · -a109d 641 t8manshop2 aug~jli p87(u) ada joint progran 1/4 ad119 41 o0c amlntt va 2au gb unclassified f/c 12/5 ml

b Rules are not really different, just more involved

- local exceptions handled the same within frames

If exception is raised

" during elaboration of task declarations

- the exception TASKINGERROR will be raised at thepoint of task activation

- the task will be marked completed

* during execution of task body (and not resolved there)

- task is completed

- exception is not propagated

* during task rendezvous

this is the really tricky part

37

Page 382: -A109D 641 T8MANSHOP2 AUG~jlI PROGRAN O0C AmLNTt VA … · -a109d 641 t8manshop2 aug~jli p87(u) ada joint progran 1/4 ad119 41 o0c amlntt va 2au gb unclassified f/c 12/5 ml

• If the called task terminates abnormally

exception TASKINGERROR is raised in calling task at thepoint of the entry call

* If the calling task terminates abnormally

no exception propagates to the called task

• If an exception is raised in called task within an accept (andnot handled there locally)

the same exception is raised in the calling task at the pointof the entry call(even if exception is later handled outside of the accept inthe called task)

• If an entry call is made for entry of a task that becomescompleted before accepting the entry,

exception TASKINGERROR is raised in calling task at thepoint of the entry call

Page 383: -A109D 641 T8MANSHOP2 AUG~jlI PROGRAN O0C AmLNTt VA … · -a109d 641 t8manshop2 aug~jli p87(u) ada joint progran 1/4 ad119 41 o0c amlntt va 2au gb unclassified f/c 12/5 ml

procedure Critical-Code is

Failure exception;

task Monitor isentry DoSomething;

end Monitor;task body Monitor is

begin

accept DoSomething do

raise Failure;

end DoSomething;

exception -- exception handled herewhen Failure =>

Term inationMessage;

end Monitor;

begin -- CriticalCode

Monitor.DoSomething;

exception -- same exception will be handled herewhen Failure =>

CriticalProblemMessage;

end CriticaiCode;39

Page 384: -A109D 641 T8MANSHOP2 AUG~jlI PROGRAN O0C AmLNTt VA … · -a109d 641 t8manshop2 aug~jli p87(u) ada joint progran 1/4 ad119 41 o0c amlntt va 2au gb unclassified f/c 12/5 ml

, Overview

* Naming an exception

* Creating an exception handler

* Raising an exception

• Handling exceptions

* Turning off exception checking

* Tasking exceptions

=> More examples

-Alm.

Page 385: -A109D 641 T8MANSHOP2 AUG~jlI PROGRAN O0C AmLNTt VA … · -a109d 641 t8manshop2 aug~jli p87(u) ada joint progran 1/4 ad119 41 o0c amlntt va 2au gb unclassified f/c 12/5 ml

* Interactive data input

" Propagating exception out of scope and back in

• Keeping a task alive

41

Page 386: -A109D 641 T8MANSHOP2 AUG~jlI PROGRAN O0C AmLNTt VA … · -a109d 641 t8manshop2 aug~jli p87(u) ada joint progran 1/4 ad119 41 o0c amlntt va 2au gb unclassified f/c 12/5 ml

with Text_10; use Text10i;

procedure Getinput (Number out integer) is

' -_type inputTyPe is integer range o.1 00;

package tnt_10i is new Integerjo (Input-Type);

InNumber -.InputType;

begin -- Get_Input

loop -- to try again after incorrect input

begin -- inner block to hold exception handler

put ("Enter a number 0 to I00O);

Int -io.get (In_-Number);Number: In_-Number;exit; .- to exit loop after correct Input

exceptionwhen DATAERROR ICONSTRAINTERROR =

put ("Try again, tat fingers!");Skipj-ine; -- must clear buffer

end; -- inner block

end loop;

end GetjlnPut;

Page 387: -A109D 641 T8MANSHOP2 AUG~jlI PROGRAN O0C AmLNTt VA … · -a109d 641 t8manshop2 aug~jli p87(u) ada joint progran 1/4 ad119 41 o0c amlntt va 2au gb unclassified f/c 12/5 ml

declarepackage Container is

procedure HasHandler;procedure RaisesException;

end Container;

procedure Notin_Package is

beginContainer. Raises-Exception;

exceptionwhen others => raise;

end Notin_Package;

package body Container isCrazy :exception;procedure HasHandler is

beginNotin_Package;

exceptionwhen Crazy => TellEveryone;

end HasHandler;procedure RaisesException is

beginraise Crazy;

end Raises_Exception;end Container;

beginContainer. HasHandler;

end;43

Page 388: -A109D 641 T8MANSHOP2 AUG~jlI PROGRAN O0C AmLNTt VA … · -a109d 641 t8manshop2 aug~jli p87(u) ada joint progran 1/4 ad119 41 o0c amlntt va 2au gb unclassified f/c 12/5 ml

task Monitor isentry Do_Something;

end Monitor;

task body Monitor isbegin

loop -- for never-ending repetition

selectaccept DoSomething do

begin -- block for exception handler

raise Failure;

exceptionwhen Failure => Recover;

end; -- block

end DoSomething; -- exception must be-- lowered before exiting

end select;

end loop;

exceptionwhen others =>

TerminationMessage;end Monitor;

Page 389: -A109D 641 T8MANSHOP2 AUG~jlI PROGRAN O0C AmLNTt VA … · -a109d 641 t8manshop2 aug~jli p87(u) ada joint progran 1/4 ad119 41 o0c amlntt va 2au gb unclassified f/c 12/5 ml

~-s ..- ~ t4

- IAAQCk. ~~- ~'- C

- ~ IcK7~a- C-; ~ c~ /&~~-~

p

/

Page 390: -A109D 641 T8MANSHOP2 AUG~jlI PROGRAN O0C AmLNTt VA … · -a109d 641 t8manshop2 aug~jli p87(u) ada joint progran 1/4 ad119 41 o0c amlntt va 2au gb unclassified f/c 12/5 ml