Sie sind auf Seite 1von 9

Clase abstracta: es una clase que no est completamente especificada (posee mtodos sin implementar), por lo tanto no se pueden

crear instancias de la misma. Una clase abstracta se usa para servir de clase base a otras clases. En terminologa C++ se dice que una clase abstracta es aquella que posee al menos un mtodo virtual puro.
y y

Virtual: obliga a las clases derivadas a implementar ese mtodo. Puro: no pueden crearse instancias de esa clase. Cuando deseamos definir una abstracion que englobe objetos de distintos tipos y se quiere hacer uso del polimorfismo Una clase abstracta se usa para representar aquellas entidades o mtodos que despus se implementarn en las clases derivadas, pero la clase abstracta en s no contiene ninguna implementacin -- solamente representa los mtodos que se deben implementar. Por ello, no es posible instanciar una clase abstracta, pero s una clase concreta que implemente los mtodos definidos en ella. Las clases abstractas son tiles para definir interfaces, es decir, un conjunto de mtodos que definen el comportamiento de un mdulo determinado. Estas definiciones pueden utilizarse sin tener en cuenta la implementacin que se har de ellos. Pero del que podremos heredar para crear objetos nuevos. Las clases abstractas pueden tener un comportamiento por defecto si es posible algo con sentido; interfaces no pueden. Una clase abstracta puede proporcionar un comportamiento por defecto para TODOS los mtodos o mtodos no, la eleccin del desarrollador; interfaces no pueden. Las clases abstractas pueden tener el estado que es compartida con todas las subclases; interfaces no se especifica el estado. Ofrecemos una superclase abstracta porque necesitamos subclases para proporcionar las caractersticas que faltan. Ventajas de el DOO l Mantenimiento ms fcil. Los objetos se pueden entender como entidades independientes l Los objetos son componentes apropiados reusables l Por algunos sistemas, puede haber una obvia correspondencia entre entidades del mundo real y objetos del sistema Ventajas de herencia Mecanismo de abstraccin que puede ser usado para clasificar entidades l Mecanismo de reutilizacin tanto a nivel de diseo y programacin l El diagrama de herencia es una fuente de conocimiento organizacional acerca del dominio y del sistema

Base de datos OO Una base de datos orientada a objetos es una base de datos que incorpora todos los conceptos importantes del paradigma de objetos:
y y y

Encapsulacin - Propiedad que permite ocultar la informacin al resto de los objetos, impidiendo as accesos incorrectos o conflictos. Herencia - Propiedad a travs de la cual los objetos heredan comportamiento dentro de una jerarqua de clases. Polimorfismo - Propiedad de una operacin mediante la cual puede ser aplicada a distintos tipos de objetos.

En bases de datos orientadas a objetos, los usuarios pueden definir operaciones sobre los datos como parte de la definicin de la base de datos. Una operacin (llamada funcin) se especifica en dos partes. La interfaz (o signatura) de una operacin incluye el nombre de la operacin y los tipos de datos de sus argumentos (o parmetros). La implementacin (o mtodo) de la operacin se especifica separadamente y puede modificarse sin afectar la interfaz. Los programas de aplicacin de los usuarios pueden operar sobre los datos invocando a dichas operaciones a travs de sus nombres y argumentos, sea cual sea la forma en la que se han implementado. Esto podra denominarse independencia entre programas y operaciones.

Ventajas Base de datos OO Mayor capacidad de modelado. El modelado de datos orientado a objetos permite modelar el mundo real de una manera mucho ms fiel. Esto se debe a: o un objeto permite encapsular tanto un estado como un comportamiento o un objeto puede almacenar todas las relaciones que tenga con otros objetos o los objetos pueden agruparse para formar objetos complejos (herencia). Ampliabilidad. Esto se debe a: o Se pueden construir nuevos tipos de datos a partir de los ya existentes. o Agrupacin de propiedades comunes de diversas clases e incluirlas en una superclase, lo que reduce la redundancia. o Reusabilidad de clases, lo que repercute en una mayor facilidad de mantenimiento y un menor tiempo de desarrollo. Lenguaje de consulta ms expresivo. El acceso navegacional desde un objeto al siguiente es la forma ms comn de acceso a datos en un SGBDOO. Mientras que SQL utiliza el acceso asociativo. El acceso navegacional es ms adecuado para gestionar operaciones como los despieces, consultas recursivas, etc. Adecuacin a las aplicaciones avanzadas de base de datos. Hay muchas reas en las que los SGBD tradicionales no han tenido excesivo xito como el CAD, CASE, OIS, sistemas multimedia, etc. en los que las capacidades de modelado de los SGBDOO han hecho que esos sistemas s resulten efectivos para este tipo de aplicaciones. Mayores prestaciones. Los SGBDOO proporcionan mejoras significativas de rendimiento con respecto a los SGBD relacionales. Aunque hay autores que han argumentado que los bancos de prueba usados estn dirigidos a aplicaciones de

ingeniera donde los SGBDOO son ms adecuados. Tambin est demostrado que los SGBDR tienen un rendimiento Rapidez en el desarrollo de aplicaciones y en su mantenimiento debido a la reutilizacin de clases. y La utilizacin de una BDOO simplifica la conceptualizacin ya que la utilizacin de objetos permite representar de una manera ms natural la informacin que se quiere guardar. y y Mejora el flujo de comunicacin entre los usuarios, los diseadores y los analistas. Simplifican la POO

Desventajas Carencia de un modelo de datos universal. No hay ningn modelo de datos que est universalmente aceptado para los SGBDOO y la mayora de los modelos carecen una base terica. Carencia de experiencia. Todava no se dispone del nivel de experiencia del que se dispone para los sistemas tradicionales. Carencia de estndares. Existe una carencia de estndares general para los SGBDOO. Competencia. Con respecto a los SGBDR y los SGBDOR. Estos productos tienen una experiencia de uso considerable. SQL es un estndar aprobado y ODBC es un estndar de facto. Adems, el modelo relacional tiene una slida base terica y los productos relacionales disponen de muchas herramientas de soporte que sirven tanto para desarrolladores como para usuarios finales. La optimizacin de consultas compromete la encapsulacion. La optimizacin de consultas requiere una compresin de la implementacin de los objetos, para poder acceder a la base de datos de manera eficiente. Sin embargo, esto compromete el concepto de encapsulacin. El modelo de objetos an no tiene una teora matemtica coherente que le sirva de base. Educar a las personas en el paradigma orientado a objetos requiere una cantidad de tiempo considerable, dinero y otro tipo de recursos. y Otra desventaja es que es estrictamente necesaria una forma de comunicacin y una forma de trabajo conjunta entre los sistemas tradicionales y los OODBMS. Esto no existe e implica un costo temporal, monetario y de recursos. y No existe un lenguaje de consulta especfico como SQL, aunque resulta ms fcil realizar consultas complejas a un SMBDOO.

Un mdico almacena la siguiente informacin de sus paciente en un array de registros (como mucho habr 100 pacientes): Nombre, telfono, direccin, y si tiene alergias. Escribir un programa con las siguientes opciones (todas ellas diben realizarse con funciones): a) Introducir los datos interactivamente. Para saber que ya no se van a introducir ms pacientes, el usuario introducir un 0 al solicitarle el nmero de telfono del paciente. b) Imprimir por pantalla toda la informacin. c) Madrid e) Salir.
#include <stdlib.h> #include <conio.h> #include <stdio.h> #include <string.h> #define TAM_NOM 31 #define TAM_DIR 41 #define TAM_ALE 71 #define TAM_PAC 100 typedef struct { char nombre[TAM_NOM]; double telefono; char direccion[TAM_DIR]; char alergias[TAM_ALE]; } reg_paciente; void tecla(); char menu(); void leerdatos(reg_paciente *pacientes, int *tamano); void hayalergias(reg_paciente *pacientes, int tamano); void imprimirtodos(reg_paciente *pacientes, int tamano); void telefono91(reg_paciente *pacientes, int tamano); void main() { char opcion; int tamano; reg_paciente pacientes[TAM_PAC]; system("color f0");

Listar (su

todos telfono

los comienza

pacientes por el

con prefijo

alergias. 91).

d) Crear una lista con el ndice de todos los pacientes que sean de la Comunidad de

printf("\n\n\n\n\n\n\n\n\n\t\t\tINICIO DEL PROGRAMA\n\n\n\n\n\n\n\n"); tecla(); leerdatos(pacientes,&tamano); do { opcion=menu(); switch(opcion) { case '1': imprimirtodos(pacientes,tamano); break; case '2': hayalergias(pacientes,tamano); break; case '3': telefono91(pacientes,tamano); break; case '4': leerdatos(pacientes,&tamano); break; case '0': printf("\nSaliendo..."); break; } tecla(); } while (opcion!='0'); printf("\n\n\n\n\n\n\n\t\t\tFIN DEL PROGRAMA\n\n\n\n\n\n\n"); tecla(); } void tecla() { printf("\nPresiona cualquier tecla para continuar "); getch(); clrscr(); return; } void leerdatos(reg_paciente *pacientes, int *tamano) { char buffer[15]; int i; for (i=0;i<TAM_PAC;i++) {

printf("\n\n\n****PACIENTE NUMERO %2d****",i+1); printf("\nIntroduzca el nombre (no ms de %d caracteres)\n\t",TAM_NOM-1); do { gets(pacientes[i].nombre); } while (strlen(pacientes[i].nombre)==0); printf("\nIntroduzca su telfono (o 0 o cualquier letra para no introducir ms datos)\n\t"); do { gets(buffer); } while (strlen(buffer)==0); pacientes[i].telefono=atof(buffer); if (pacientes[i].telefono==0) { *tamano=i; break; } printf("\nIntroduzca la direccion (no ms de %d caracteres)\n\t",TAM_DIR-1); do { gets(pacientes[i].direccion); } while (strlen(pacientes[i].direccion)==0); printf("\nIntroduzca la descripcion de la alergias (no ms de %d caracteres)\n",TAM_ALE-1); printf("\n****Escriba \"NO\" si el paciente no tiene ninguna alergia****\n\t"); do { gets(pacientes[i].alergias); } while (strlen(pacientes[i].alergias)==0); } return; } char menu() { char respuesta; printf("\n\n\n\n\tMENU DEL PROGRAMA"); printf("\n1.- Imprimir en la pantalla toda la informacion"); printf("\n2.- Listar los pacientes con alergias"); printf("\n3.- Crear una lista de los pacientes con el telefono 91-XXXXXXX"); printf("\n4.- Crear una lista nueva de pacientes"); printf("\n0.- Salir del programa.\n"); do { respuesta=getch(); } while (respuesta<'0' || respuesta>'9'); return respuesta; }

void imprimirtodos(reg_paciente *pacientes, int tamano) { int i,contimpresos=0; printf("\n\t"); if (tamano>0) { for (i=0;i<tamano;i++) { printf("\n\t%5d\t%20s\t\t%9.0f\t",i+1,pacientes[i].nombre,pacientes[i].telefono); printf("\n\t\t%40s\t",pacientes[i].direccion); printf("\n\t\t%40s\t",pacientes[i].alergias); contimpresos++;/*CUENTA EL NUMERO DE LOS QUE SE VAN IMPRIMENDO*/ if ((contimpresos)%10==0) { printf("\n\t *** Presione cualquier tecla para continuar. *** "); getch(); } } } if (contimpresos==0) printf("\n\t No hay ningun dato que mostrar en la pantalla.\t "); printf("\n\t"); return; }

void telefono91(reg_paciente *pacientes, int tamano) { int i,contimpresos=0; printf("\n\t"); if (tamano>0) { for (i=0;i<tamano;i++) { if (pacientes[i].telefono>=910000000 && pacientes[i].telefono<920000000) { printf("\n\t%5d\t%20s\t\t%9.0f\t",i+1,pacientes[i].nombre,pacientes[i].telefono); printf("\n\t\t%40s\t",pacientes[i].direccion); printf("\n\t\t%40s\t",pacientes[i].alergias); contimpresos++;/*CUENTA EL NUMERO DE LOS QUE SE VAN IMPRIMENDO*/ if ((contimpresos)%10==0) { printf("\n\t *** Presione cualquier tecla para continuar. *** "); getch(); } } } }

if (contimpresos==0) printf("\n\t No hay ningun dato que mostrar en la pantalla.\t "); printf("\n\t"); return; } void hayalergias(reg_paciente *pacientes, int tamano) { int i,contimpresos=0; printf("\n\t"); if (tamano>0) { for (i=0;i<tamano;i++) { if (strcmp(pacientes[i].alergias,"NO")!=0 && strcmp(pacientes[i].alergias,"no")!=0 && strcmp(pacientes[i].alergias,"No")!=0) { printf("\n\t%5d\t%20s\t\t%9.0f\t",i+1,pacientes[i].nombre,pacientes[i].telefono); printf("\n\t\t%40s\t",pacientes[i].direccion); printf("\n\t\t%40s\t",pacientes[i].alergias); contimpresos++;/*CUENTA EL NUMERO DE LOS QUE SE VAN IMPRIMENDO*/ if ((contimpresos)%10==0) { printf("\n\t *** Presione cualquier tecla para continuar. *** "); getch(); } } } } if (contimpresos==0) printf("\n\t No hay ningun dato que mostrar en la pantalla.\t "); printf("\n\t"); return; } class Habitacion { public: void AgregarPaciente( Paciente* ); Paciente* SacarPaciente( const char* nombre ); bool EstaPaciente( const char* nombre ); private: int camas; Set<Paciente*> pacientes; }; class Hospital { public: void IngresarPaciente( const char* nombre, const char* enfermedad, const char* numISS ); void DarAltaPaciente( const char* nombre ); Habitacion* BuscarHabitacion( const char* enfermedad ); private: Set<Paciente> pacientes; Set<Habitacion> habitaciones;

}; float Medico::CalcularPago( ) { float valor=0; Servicio* serv; valor = numHoras*valorHora; while( servicios.nextElement( ) ) { serv = (Servicio*) servicios.get( ); valor += serv->getValor( ); } } void Hospital::Pagar( Medico& med ) { pagosPendientes.add( med, med.CalcularPago( ) ); med.BorrarCuenta( );

Das könnte Ihnen auch gefallen