Ada Reference Manual (Ada 2022)Legal Information
Contents   Index   References   Search   Previous   Next 

7.1 Package Specifications and Declarations

1
A package is generally provided in two parts: a package_specification and a package_body. Every package has a package_specification, but not all packages have a package_body.

Syntax

2
package_declaration ::= package_specification;
3/3
package_specification ::= 
    package defining_program_unit_name
        [aspect_specificationis
      {basic_declarative_item}
   [private
      {basic_declarative_item}]
    end [[parent_unit_name.]identifier]
4
If an identifier or parent_unit_name.identifier appears at the end of a package_specification, then this sequence of lexical elements shall repeat the defining_program_unit_name.

Legality Rules

5/2
A package_declaration or generic_package_declaration requires a completion (a body) if it contains any basic_declarative_item that requires a completion, but whose completion is not in its package_specification.

Static Semantics

6/2
The first list of basic_declarative_items of a package_specification of a package other than a generic formal package is called the visible part of the package. The optional list of basic_declarative_items after the reserved word private (of any package_specification) is called the private part of the package. If the reserved word private does not appear, the package has an implicit empty private part. Each list of basic_declarative_items of a package_specification forms a declaration list of the package.
7
An entity declared in the private part of a package is visible only within the declarative region of the package itself (including any child units — see 10.1.1). In contrast, expanded names denoting entities declared in the visible part can be used even outside the package; furthermore, direct visibility of such entities can be achieved by means of use_clauses (see 4.1.3 and 8.4).

Dynamic Semantics

8
The elaboration of a package_declaration consists of the elaboration of its basic_declarative_items in the given order. 
9
NOTE 1   The visible part of a package contains all the information that another program unit is able to know about the package.
10
NOTE 2   If a declaration occurs immediately within the specification of a package, and the declaration has a corresponding completion that is a body, then that body has to occur immediately within the body of the package. 

Examples

11
Example of a package declaration: 
12
package Rational_Numbers is
13
   type Rational is
      record
         Numerator   : Integer;
         Denominator : Positive;
      end record;
14
   function "="(X,Y : Rational) return Boolean;
15
   function "/"  (X,Y : Integer)  return Rational;  --  to construct a rational number
16
   function "+"  (X,Y : Rational) return Rational;
   function "-"  (X,Y : Rational) return Rational;
   function "*"  (X,Y : Rational) return Rational;
   function "/"  (X,Y : Rational) return Rational;
end Rational_Numbers;
17
There are also many examples of package declarations in the predefined language environment (see Annex A). 

Contents   Index   References   Search   Previous   Next 
Ada-Europe Ada 2005 and 2012 Editions sponsored in part by Ada-Europe