En este módulo, vamos a aplicar todos los conceptos aprendidos a lo largo del curso para construir un proyecto completo en Ada. Este proyecto servirá como una culminación de tus conocimientos y habilidades en Ada, y te proporcionará una experiencia práctica en el desarrollo de software utilizando este lenguaje.
Objetivos del Proyecto
- Integrar conceptos básicos y avanzados de Ada.
- Desarrollar un sistema funcional y modular.
- Implementar buenas prácticas de programación.
- Utilizar técnicas de depuración y optimización.
Descripción del Proyecto
Vamos a desarrollar un sistema de gestión de biblioteca. Este sistema permitirá a los usuarios realizar las siguientes operaciones:
- Agregar nuevos libros.
- Buscar libros por título o autor.
- Listar todos los libros disponibles.
- Eliminar libros del sistema.
Estructura del Proyecto
El proyecto se dividirá en varios módulos para mantener el código organizado y modular. La estructura del proyecto será la siguiente:
LibraryManagement/ ├── src/ │ ├── main.adb │ ├── book.ads │ ├── book.adb │ ├── library.ads │ └── library.adb └── README.md
Paso 1: Definir el Tipo de Datos Book
Primero, definiremos un tipo de datos Book que representará un libro en nuestra biblioteca.
Archivo: book.ads
package Book is
type Book_Type is record
Title : String (1 .. 100);
Author : String (1 .. 100);
ISBN : String (1 .. 13);
end record;
procedure Print_Book (B : in Book_Type);
end Book;Archivo: book.adb
package body Book is
procedure Print_Book (B : in Book_Type) is
begin
Put_Line ("Title: " & B.Title);
Put_Line ("Author: " & B.Author);
Put_Line ("ISBN: " & B.ISBN);
end Print_Book;
end Book;Paso 2: Definir el Módulo de Biblioteca
A continuación, definiremos el módulo Library que gestionará una colección de libros.
Archivo: library.ads
with Book;
package Library is
type Library_Type is limited private;
procedure Initialize (L : out Library_Type);
procedure Add_Book (L : in out Library_Type; B : in Book.Book_Type);
procedure List_Books (L : in Library_Type);
procedure Remove_Book (L : in out Library_Type; ISBN : in String);
private
type Book_Array is array (Natural range <>) of Book.Book_Type;
type Library_Type is record
Books : Book_Array (1 .. 100);
Count : Natural := 0;
end record;
end Library;Archivo: library.adb
with Ada.Text_IO; use Ada.Text_IO;
with Book;
package body Library is
procedure Initialize (L : out Library_Type) is
begin
L.Count := 0;
end Initialize;
procedure Add_Book (L : in out Library_Type; B : in Book.Book_Type) is
begin
if L.Count < L.Books'Length then
L.Count := L.Count + 1;
L.Books(L.Count) := B;
else
Put_Line ("Library is full.");
end if;
end Add_Book;
procedure List_Books (L : in Library_Type) is
begin
for I in 1 .. L.Count loop
Book.Print_Book (L.Books(I));
New_Line;
end loop;
end List_Books;
procedure Remove_Book (L : in out Library_Type; ISBN : in String) is
begin
for I in 1 .. L.Count loop
if L.Books(I).ISBN = ISBN then
for J in I .. L.Count - 1 loop
L.Books(J) := L.Books(J + 1);
end loop;
L.Count := L.Count - 1;
exit;
end if;
end loop;
end Remove_Book;
end Library;Paso 3: Implementar el Programa Principal
Finalmente, implementaremos el programa principal que interactuará con el usuario y utilizará los módulos Book y Library.
Archivo: main.adb
with Ada.Text_IO; use Ada.Text_IO;
with Book;
with Library;
procedure Main is
L : Library.Library_Type;
B : Book.Book_Type;
Choice : Character;
begin
Library.Initialize (L);
loop
Put_Line ("Library Management System");
Put_Line ("1. Add Book");
Put_Line ("2. List Books");
Put_Line ("3. Remove Book");
Put_Line ("4. Exit");
Put ("Enter your choice: ");
Get (Choice);
case Choice is
when '1' =>
Put ("Enter Title: ");
Get_Line (B.Title);
Put ("Enter Author: ");
Get_Line (B.Author);
Put ("Enter ISBN: ");
Get_Line (B.ISBN);
Library.Add_Book (L, B);
when '2' =>
Library.List_Books (L);
when '3' =>
Put ("Enter ISBN to remove: ");
Get_Line (B.ISBN);
Library.Remove_Book (L, B.ISBN);
when '4' =>
exit;
when others =>
Put_Line ("Invalid choice. Please try again.");
end case;
end loop;
end Main;Ejercicios Prácticos
-
Agregar Validaciones:
- Modifica el procedimiento
Add_Bookpara verificar que el ISBN no esté duplicado antes de agregar un nuevo libro.
- Modifica el procedimiento
-
Buscar Libros:
- Implementa un procedimiento
Search_Booken el móduloLibraryque permita buscar libros por título o autor.
- Implementa un procedimiento
-
Persistencia de Datos:
- Implementa la funcionalidad para guardar y cargar la lista de libros desde un archivo.
Conclusión
En este módulo, hemos construido un proyecto completo en Ada, aplicando conceptos básicos y avanzados del lenguaje. Este proyecto te ha proporcionado una experiencia práctica en el desarrollo de software modular y bien estructurado. Asegúrate de revisar y practicar los ejercicios adicionales para reforzar tus conocimientos y habilidades en Ada. ¡Felicidades por completar el curso!
Curso de Programación en Ada
Módulo 1: Introducción a Ada
Módulo 2: Conceptos Básicos
- Variables y Tipos de Datos
- Operadores y Expresiones
- Estructuras de Control
- Bucles en Ada
- Subprogramas: Procedimientos y Funciones
Módulo 3: Tipos de Datos Avanzados
Módulo 4: Programación Modular
Módulo 5: Concurrencia y Programación en Tiempo Real
Módulo 6: Temas Avanzados
Módulo 7: Mejores Prácticas y Optimización
- Estilo de Código y Mejores Prácticas
- Depuración y Pruebas
- Optimización del Rendimiento
- Consideraciones de Seguridad
