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_Book
para verificar que el ISBN no esté duplicado antes de agregar un nuevo libro.
- Modifica el procedimiento
-
Buscar Libros:
- Implementa un procedimiento
Search_Book
en el móduloLibrary
que 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