In Ada, child packages are a powerful feature that allows you to extend the functionality of a parent package. They help in organizing code into a hierarchical structure, making it more modular and easier to manage. This section will cover the basics of child packages, how to create them, and their benefits.
Key Concepts
- Parent Package: The main package that can be extended by child packages.
- Child Package: A package that extends the functionality of a parent package.
- Visibility: Child packages have access to the public entities of their parent packages.
Creating Child Packages
Syntax
To create a child package, you need to follow a specific naming convention and structure. Here is the basic syntax:
-- Parent package specification
package Parent_Package is
-- Public declarations
end Parent_Package;
-- Parent package body
package body Parent_Package is
-- Implementation of public declarations
end Parent_Package;
-- Child package specification
package Parent_Package.Child_Package is
-- Public declarations specific to the child package
end Parent_Package.Child_Package;
-- Child package body
package body Parent_Package.Child_Package is
-- Implementation of public declarations
end Parent_Package.Child_Package;Example
Let's create a simple example to illustrate the concept of child packages.
Parent Package
-- File: parent_package.ads
package Parent_Package is
procedure Greet;
end Parent_Package;
-- File: parent_package.adb
package body Parent_Package is
procedure Greet is
begin
Ada.Text_IO.Put_Line("Hello from Parent Package!");
end Greet;
end Parent_Package;Child Package
-- File: parent_package.child_package.ads
package Parent_Package.Child_Package is
procedure Greet_Child;
end Parent_Package.Child_Package;
-- File: parent_package.child_package.adb
package body Parent_Package.Child_Package is
procedure Greet_Child is
begin
Ada.Text_IO.Put_Line("Hello from Child Package!");
end Greet_Child;
end Parent_Package.Child_Package;Using Child Packages
To use the child package, you need to with and use both the parent and child packages in your main program.
-- File: main.adb
with Parent_Package;
with Parent_Package.Child_Package;
use Parent_Package;
use Parent_Package.Child_Package;
procedure Main is
begin
Greet; -- Calls the procedure from Parent_Package
Greet_Child; -- Calls the procedure from Child_Package
end Main;Benefits of Child Packages
- Modularity: Child packages help in breaking down large packages into smaller, more manageable units.
- Encapsulation: They allow for better encapsulation of related functionalities.
- Reusability: Code in child packages can be reused across different parts of the application.
- Maintainability: Easier to maintain and update specific parts of the code without affecting the entire package.
Practical Exercise
Exercise
- Create a parent package named
Math_Operationswith a procedureAddthat adds two integers and prints the result. - Create a child package named
Math_Operations.Advancedwith a procedureMultiplythat multiplies two integers and prints the result. - Write a main program to call both
AddandMultiplyprocedures.
Solution
Parent Package
-- File: math_operations.ads
package Math_Operations is
procedure Add(X, Y : Integer);
end Math_Operations;
-- File: math_operations.adb
package body Math_Operations is
procedure Add(X, Y : Integer) is
begin
Ada.Text_IO.Put_Line("Sum: " & Integer'Image(X + Y));
end Add;
end Math_Operations;Child Package
-- File: math_operations.advanced.ads
package Math_Operations.Advanced is
procedure Multiply(X, Y : Integer);
end Math_Operations.Advanced;
-- File: math_operations.advanced.adb
package body Math_Operations.Advanced is
procedure Multiply(X, Y : Integer) is
begin
Ada.Text_IO.Put_Line("Product: " & Integer'Image(X * Y));
end Multiply;
end Math_Operations.Advanced;Main Program
-- File: main.adb
with Math_Operations;
with Math_Operations.Advanced;
use Math_Operations;
use Math_Operations.Advanced;
procedure Main is
begin
Add(3, 4); -- Calls the Add procedure from Math_Operations
Multiply(3, 4); -- Calls the Multiply procedure from Math_Operations.Advanced
end Main;Summary
In this section, we learned about child packages in Ada, how to create them, and their benefits. Child packages allow for better modularity, encapsulation, reusability, and maintainability of code. We also went through a practical example and exercise to reinforce the concepts. In the next section, we will explore private types and private packages, which further enhance the encapsulation capabilities in Ada.
Ada Programming Course
Module 1: Introduction to Ada
Module 2: Basic Concepts
- Variables and Data Types
- Operators and Expressions
- Control Structures
- Loops in Ada
- Subprograms: Procedures and Functions
Module 3: Advanced Data Types
Module 4: Modular Programming
Module 5: Concurrency and Real-Time Programming
Module 6: Advanced Topics
Module 7: Best Practices and Optimization
- Code Style and Best Practices
- Debugging and Testing
- Performance Optimization
- Security Considerations
