Instituto Tecnológico de la Laguna Análisis y Diseño Orientado a Objetos 7.1 INTRODUCCIÓN Existe gran variedad de bases de datos disponibles, desde el sistema de bases de datos relacional puro hasta el sistema de bases de datos orientado a objetos puros. RDBS Puro DB2 RDBS con algo de too SyBase Oracle ODB para un RDB OpenODB Persistencia ODB Estático O2 Objectivity OD1 Ontos POET ODB Activo GenStone Itasca Matisse IDB UniSQL Figura # 1Clasificación de los Sistemas de Base de Evolución de la tecnología de bases de datos. Durante las tres décadas pasadas las tecnologías de los sistemas de información han pasado por cuatro generaciones en su evolución y la quinta generación se encuentra en desarrollo. La transición de una generación a la siguiente ocurre debido a la necesidad resultante del incremento en la complejidad en las aplicaciones y al costo de implementación, mantenimiento y actualización de las aplicaciones. Generaciones de Bases de Datos I. Sistema administradores de archivos. Basados en el manejo de archivos separados. II. Sistemas de base de datos jerárquicos. III. Sistema de Base de datos CODASYL Los dos anteriores se basan en la compartición de un sistema de base de datos integrado por muchos usuarios en un ambiente de aplicación IV. Bases de Datos relacionales La simplicidad del modelo de datos permitió el desarrollo de lenguajes de consulta como SQL, QUEL y QBE. V. Se caracteriza por el enriquecimiento del modelo de datos así como de un conjunto de funciones para implementar los requerimientos de las aplicaciones actuales. La evolución de los sistemas de bases de datos es similar a la evolución de los lenguajes de programación, los cuales van desde el lenguaje máquina, lenguaje ensamblador hasta los lenguajes de alto nivel, esta evolución tiende a facilitar el trabajo de programación en aplicaciones mas complejas, pero requiere la introducción de lenguajes sofisticados de procesamiento, como son los ensambladores y compiladores. Paola Romero Guillén 191 Instituto Tecnológico de la Laguna Análisis y Diseño Orientado a Objetos A continuación se hace un estudio de las ventajas y desventajas de una base de datos convencional a una base de datos orientada a objetos. Las bases de datos orientadas a objetos son una herramienta poderosa para los desarrolladores de software. Este tipo de bases de datos proporcionan un soporte completo para el modelo de programación orientado a objetos usado en lenguajes como C++ y Java. Este modelo es intuitivo, modela muy bien las relaciones y es muy conveniente para grandes proyectos de software. Las bases de datos convencionales son buenas manejando grandes cantidades de datos, comparten datos entre programas y realizan búsquedas rápidas basadas por valor. Pero la desventaja es que no tienen un buen modelo de las relaciones entre datos, todo es representado como series de tablas bidimensionales. Una base de datos orientada a objetos combina la semántica del lenguaje de programación orientada a objetos con el manejo de datos y la facilidad de realizar búsquedas como las del sistema de base de datos convencional. Esto facilita el manejo de grandes cantidades de datos y el modelado de las relaciones entre ellos. Si una base de datos orientado a objetos es integrada con un lenguaje de programación orientado a objetos, entonces esta deberá soportar la semántica del lenguaje, las relaciones establecidas en el programa deberán automáticamente ser representadas en la base de datos cuando los objetos sean almacenados. Modelo de programación orientado a objetos El modelo natural de objetos y sus relaciones fue un factor primordial en el diseño de los lenguajes como Simula, C++ y Java. Hoy las técnicas orientadas a objetos son siempre vistas como una forma moderna de ingeniería de software. El uso inteligente del modelo de programación orientado a objetos resulta en programas mejor estructurados y fáciles de entender. Una base de datos que soporte el modelo de programación orientado a objetos debe cumplir con los siguientes aspectos: Clases y objetos. Encapsulación. Herencia. Polimorfismo. Tipos de datos definidos por el usuario. Modelar las relaciones entre objetos. Sistema de base de datos convencional Los sistemas de bases de datos son diseñados para manejar grandes cantidades de datos y tienen las siguientes características: Almacenamiento permanente. Búsquedas rápidas. Comparte objetos entre programas. Manejo sofisticado de errores para operaciones de bases de datos. Los sistemas de bases de datos relacionales son sistemas estándar que actualmente son usados en la mayoría del software desarrollado. Estas bases de datos utilizan series de tablas bidimensionales. El modelo relacional define estructuras, operaciones y principios de diseño usados con esas tablas. Pero el crecimiento de la complejidad en los programas modernos y el incremento del uso de modelos dinámicos de datos han colocado a las bases de datos tradicionales en su limite. Las principales desventajas de usar bases de datos tradicionales son: Paola Romero Guillén 192 Instituto Tecnológico de la Laguna Análisis y Diseño Orientado a Objetos Tipos de datos limitados. Modelado de relaciones entre datos limitado. No agrupan código con datos. Tienen una limitada manipulación de datos. Tienen una pobre integración con los lenguajes de programación. No manejan transacciones grandes. Sistema de Base de datos orientada a objetos Una base de datos orientada a objetos es una base de datos que soporta completamente el modelo orientado a objetos, esta diseñada para expresar las relaciones entre datos y al igual que las bases de datos convencionales, es diseñada para manejar grandes cantidades de datos y realizar búsquedas rápidas basadas por valor. 7.2 POET La persistencia es una extensión del lenguaje el cual permite a los programadores almacenar y acceder objetos. Poet escogió implementar la persistencia como una extensión de C++, la cual es portable, eficiente, fácilmente extensible y particularmente, maneja una buena expresión de relaciones entre objetos. La extensión esta limitada a la declaración de la sintaxis para las clases persistentes, pero proporciona un precompilador el cual convierte las clases persistentes a código C++ y una librería de clases que implementa la base de datos orientada a objetos. En Poet una clase es persistente si esta es definida usando la palabra “persistent”. Cada objeto de una clase persistente tiene la habilidad de almacenarse a sí mismo en una base de datos. Poet, además, maneja correctamente todos los aspectos de identidad y comportamiento de los objetos. Poet proporciona una base de datos orientada a objetos con un soporte completo para la semántica de C++. Es una herramienta poderosa y fácil de usar. Cuando se dice que Poet es orientado a objetos significa que puede soportar las siguientes características: Encapsulamiento. Herencia. Polimorfismo. Tipos de datos definidos por el usuario. Identidad. Modelado natural de relaciones entre objetos. Cuando se dice que es una base de datos es porque proporciona las siguientes características: Gran capacidad de almacenamiento. Búsquedas rápidas basadas por valor. Comparte objetos entre programas. Manejo sofisticado de errores en operaciones de bases de datos. Y cuando se dice que Poet es una base de datos orientada a objetos es porque soporta: Resolución de referencias en el programa. Relaciones uno a muchos. Búsquedas basadas por valor con almacenamiento de resultados. Índices. Manejo inteligente de objetos. Miembros transitorios. El modelo relacional es simple y elegante, pero es fundamentalmente diferente al modelo de objetos. Las bases de datos relacionales no fueron diseñadas para almacenar objetos. Se ha mostrado que las bases de datos relacionales están pobremente adaptadas para expresar los atributos básicos de los objetos, como encapsulamiento, herencia, polimorfismo, identidad, referencias entre objetos y tipos de datos definidos por el usuario. Paola Romero Guillén 193 Instituto Tecnológico de la Laguna Análisis y Diseño Orientado a Objetos Finalmente, una base de datos orientada a objetos simplifica de gran manera el manejo de objetos, debido a que ellas soportan directamente el modelo de objetos. Las compañías que proporcionan sistemas de bases de datos orientadas a objetos han comenzado a definir un estándar para este tipo de tecnología. Ellos están organizados en el Object Database Management Group (ODMG) y la primera versión de este estándar ha sido publicado en septiembre 1993. El estándar ODMG-93 establece lo esencial para la programación de bases de datos orientadas a objetos, especialmente lo que debe cumplir el modelo orientado a objetos y el lenguaje de programación orientada a objetos. Después de haber mostrado una pequeña introducción acerca del Poet y para que nos sirve se presentan una serie de pasos para exponer el manejo del Poet como implementación de nuestro problema. 1. Conocimiento de clases persistentes que son: • • • • Esp_Producto Esp_Cliente Venta Factura 2. Diagrama de clases habilitado en RRose C++ 3. Registrar el modelo de la siguiente forma: menu Tools/Poet/Registrer Current Model Figura # 2 4. Crear la base de datos y diccionario para el modelo: • Menu Tools/Poet/Create Poet Dictionary and empty Data Base • Seleccionar nombre dado al modelo Figura # 3 5. Creación de archivos .hcd en Rrose C++: • • Seleccionar Menu Tools/Poet/Create HCD Dar clic en el nombre del modelo // POET header file for 'PProy' model. Paola Romero Guillén Figura # 4 194 Instituto Tecnológico de la Laguna Análisis y Diseño Orientado a Objetos // Generated by POET Rose Link. #include "poet.hxx" // forward persistent persistent persistent persistent declaraions: class Factura; class Especificacion; class Espcliente; class Venta; persistent class Espcliente { private: PtString num_cte; PtString nombre; PtString RFC; PtString domicilio; protected: public: }; Espcliente& operator=(const Espcliente& espc); int Espcliente(const Espcliente & espc); int Espcliente(); int ~Espcliente(); PtString getClave(); int Imprimir_Esp(); persistent class Factura { private: PtString nombre; useindex nombreIX; PtDate fecha; int terminada; Factura& operator=(const Factura& fact); int Factura(Factura fact); protected: public: depend lset<Venta*> Espcliente pCliente; }; ventas; int Factura(); virtual int ~Factura(); virtual void suma_art(Especificacion* pEsp2, int cantidad); void esCompletada(); long total(); void entra_cliente(PtString numero); indexdef nombreIX : Factura { nombre; Paola Romero Guillén 195 Instituto Tecnológico de la Laguna Análisis y Diseño Orientado a Objetos }; persistent class Especificacion { private: PtString nombre; long precio; PtString clave; int Especificacion(const Especificacion & esp); Especificacion& operator=(const Especificacion& esp); protected: public: }; int Especificacion(); virtual int ~Especificacion(); int Imprimir_Esp(); PtString getClave(); long getPrecio(); persistent class Venta { private: int cantidad; Venta & operator=(const Venta & pventa); int Venta(const Venta& pventa); protected: public: Especificacion* }; pEsp; int Venta(); int ~Venta(); long getsubtotal(); Paola Romero Guillén 196 Instituto Tecnológico de la Laguna Análisis y Diseño Orientado a Objetos 7.3 COMPILADOR PTXX Figura # 5 Ahora que tiene todas las declaraciones de las clases en archivos con extensión *.hcd, se ejecuta el compilador PTXX, el cual hará lo siguiente: Crea el diccionario de las clases, usando las declaraciones de las clases persistentes. Crea declaraciones de clases en C++ de las clases persistentes, para que el compilador pueda interpretarlas. Crea información extendida en tiempo de ejecución para las clases que Poet conoce como cargar, almacenar, y las búsquedas. Crea clases que permiten el acceso a las clases en la base de datos y para la realización de búsquedas. Cuando los archivos .hcd del proyecto sean compilados. El PTXX genera tres tipos de archivos: .HXX, .CXX y .PTX. Nombre Diccionario de clases Clase Factory Archivo de cabecera para la clase Factory Formato Propósito Una base de datos que Esquema de la base de describe las clases que datos. están en tu base de datos. Archivo .CXX Describe como construir y manejar los objetos. Archivo .PTX Clases Query, AllSet. Ondemand y set para las clases persistentes. Declaración de la clase Archivo .HXX Definición de clases de Archivo .OCD objetos Como usarse PTXX lo mantiene automáticamente. Compilar y ligar al programa. Este es automáticamente incluido por la declaración del archivo cabecera en el archivo. No se necesitan incluir. Representación Incluidos en los estándar de C++ de las códigos fuente de la declaraciones en los aplicación. archivos .HCD Representación PTXX lo realiza cuando precompilada de los construye el esquema archivos .HCD para la base de datos y el diccionario de las clases. Tabla # 1 Paola Romero Guillén 197 Instituto Tecnológico de la Laguna Análisis y Diseño Orientado a Objetos El Developer’s Workbench permite crear proyectos para manejar los archivos *.HCD. se presenta a continuación una serie de pasos que guiaran en la realización de un proyecto en Poet. 1.Crear un proyecto seleccionando: Menu File/New Workbook El nombre del servidor deberá ser siempre LOCAL cuando se use una edición personal, quiere decir que será estrictamente usada por un solo usuario. Figura # 6 2. Crear el proyecto para el modelo, seleccione: Menu Project/New... Figura # 7 3. Agregar los archivos .hcd, seleccione: Menu Project/Add item.. Dar clic en Cancel Figura # 8 4. Se guarda el proyecto seleccionando:l Menu Project/save as.. Figura #9 Paola Romero Guillén 198 Instituto Tecnológico de la Laguna Análisis y Diseño Orientado a Objetos 5. Modificación de opciones en: Menu Options/Directories Una vez creado el proyecto se modifican las opciones del mismo, para agregar todas las rutas de donde Poet buscara los archivos “include” Figura # 10 6. Ejecutar el compilador PTXX para crear base de datos y archivos factory en: Builder/Build All Figura # 11 7.Abrir base de datos: Menu File/Open Database.. Elegir Menu Objects/Browser Extent El Extent muestra las clases en un panel del lado izquierdo de la ventana, cuando una de esas clases es seleccionada, se enlistan los objetos para esa clase del lado derecho. Figura # 12 Dar doble clic en el objeto seleccionado y despliega sus especificaciones Aquí nos muestra las especificaciones del objeto seleccionado Figura # 13 Paola Romero Guillén 199 Instituto Tecnológico de la Laguna Análisis y Diseño Orientado a Objetos 7.4. COMPILACIÓN EN VISUAL C++ Una vez que se tienen generados todos los archivos y la base de datos junto con su diccionario, el paso siguiente será crear un proyecto en Visual C++, el cual creará el ejecutable para manejar la base de datos. Pasos para compilar en C++ 1. Se crea un Workspace en Visual C++, seleccionando en el menú principal File\New. En la pestaña Workspace proporcione el nombre en Workspace Name y la ruta donde se creará en Location. 2. Click derecho sobre el Workspace creado y en el menú seleccione Add New Project. En la pestaña Project se selecciona el proyecto de tipo 32 Console, se especifica el nombre del proyecto en Project Name y se selecciona la opción de Add to current Workspace. Figura # 13 3. Se crean dos carpetas dentro del proyecto, llamadas Source Files y Header Files. 4. En el menú Project se selecciona la opción Project\Settings.. para agregar las rutas de acceso de donde se tomaran los archivos “include”. Figura # 14 5. Agregar los archivos necesarios para el proyecto: El archivo que abrirá y cerrará la base de datos (PoetApp.cxx, PoetApp.hxx). El archivo principal de la aplicación –interface- (MenuApp.cxx, MyApp.cxx, MenuApp.hxx). Archivos adicionales para manejar tipos de datos y entrada de los mismos (Conio.cxx, Goodies.hxx). Archivos *.cpp que tendrán las definiciones de las funciones miembro de las clases persistentes que han sido declaradas en los archivos *.HXX. Nota: Los archivos con extensión .CXX se agregan a la carpeta Source Files. Los archivos con extensión .HXX se agregan a la carpeta Header Files. Paola Romero Guillén 200 Instituto Tecnológico de la Laguna Análisis y Diseño Orientado a Objetos 6. Se selecciona en el menú principal Build\Build ProyectV.exe. En ese momento Visual C++, agrega al proyecto los archivos “include” necesarios para los archivos existentes en el proyecto, en una carpeta llamada External Dependencies, los archivos agregados son aquellos con extensión .CXX, .PTT, .PTX para cada clase persistente de la base de datos, además de todos los .HXX que se encuentran en la carpeta INC del Poet (Poet.hxx, ptcomp.hxx, etc.). 7. Seleccione los archivos con las extensiones .PTT,.CXX y .PTX de cada una de las clases para moverlos de la carpeta External Dependencies al Proyecto y queden fuera de las carpetas. Figura # 16 Figura # 15 8. Los archivos con extensión .CXX tienen un icono diferente a los demás, este icono indica que los archivos son agregados a la construcción del archivo ejecutable, seleccione cada uno de ellos y de un clic derecho con el mouse, elija Settings..., y en la ventana que aparece seleccione la opción que dice Exclude File From Build, en ese momento el icono será modificado, y con esto se asegura que los únicos archivos para la construcción serán los .CPP. Figura # 17 9. Compile nuevamente para construir el archivo ejecutable. Seleccione del menú Build\Build ProjectV.exe. Paola Romero Guillén 201 Instituto Tecnológico de la Laguna Análisis y Diseño Orientado a Objetos Una vez compilado el proyecto se puede correr el ejecutable y de esa manera visualizar la aplicación terminada del caso de uso del proceso de desarrollo el cual fue Facturación Versión 1. Paola Romero Guillén 202