OOP y C++ Un lenguaje para Programadores Carlos PLATERO Indice 0.- OOP 1.-. Objetivos, palabras clave, reglas prácticas, consejos 2.- CLASES Y OBJETOS. Extensión del concepto de estructura en C 3.- HERENCIA. Los objetos heredan propiedades de los padres 4.- OPERADORES 5.- EJEMPLOS 2/56 0.1 Análisis orientado a objetos(1/4) Estudio y especificación del problema a resolver Tipos de objetos Entidades externas: consumen información Cosas: parte del dominio del problema Ocurrencias o sucesos Papeles que juegan las personas Unidades organizativas Análisis orientado a objetos(2/4) Características de un objeto Información retenida: su información ha de ser recordada Servicios necesarios: debe tener atributos Múltiples atributos Atributos comunes Operaciones comunes Producen y consumen información 3/56 4/56 Modelo de Análisis orientado a objetos (3/4) Identificación de los objetos Identificación de estructuras Definición de temas Definición entre atributos e instancias Definición de conexiones entre operaciones y mensajes Modelo de Análisis orientado a objetos (4/4) Descripción del objeto 1. Nombre del objeto 2. Descripción de atributos 3. Entrada externa al objeto 4. Salida externa del objeto 5. Descripción de métodos 6. Conexiones de instancias 7. Conexiones de mensajes 5/56 6/56 1
0.2. Diseño orientado a objetos(1/2) Crea una representación del espacio del problema del mundo real y la hace corresponder con el ámbito de la solución, que es el SW Abstracción, ocultamiento y modularidad Objetos, métodos y mensajes: ocultación y modularidad Diseño orientado a objetos(2/2) Estrategia de diseño 1. Identificar las abstracciones de datos para cada subsistema 2. Identificar los atributos de cada abstracción 3. Identificar las operaciones de cada abstracción 4. Identificar las comunicaciones entre objetos 5. Probar el diseño con guiones 6. Aplicar herencia donde sea apropiado 7/56 8/56 0.3 Formas de escribir SW Luchar por un diseño estable Claridad en el reparto de tareas Utilizar herramientas con sentido común Utilizar menos programadores Combatir fiebre de prestaciones Emplear métodos formales Comenzar las pruebas cuando se escribe la primera línea de código 1.- Introducción. 1.1.- Objetivos. 1.2.- Palabras clave. 1.3.- Definiciones. 1.4.- Reglas prácticas. 1.5.- Bibliografía. 9/56 10/56 1.1.- Objetivo 1.2.- Palabras clave. COMPARATIVA C, C++. asm catch class delete CONCEPTO DE CLASE. CONCEPTO DE HERENCIA. friend inline new operator private protected public template this throw try virtual 11/56 12/56 2
1.3.- Definiciones.(1/2) Clase 1.3.- Definiciones.(2/2) Evolución de una estructura en C, contiene variables y funciones miembro que las manipulan. Funciones Miembro (Procedimientos y mensajes) Por defecto se declaran como privadas, negando a entidades exteriores el acceso a los datos. Objeto Clase cpersona -> Clase cpolítico Es la realización física de una clase Declaración, inicialización,utilización y destrucción 13/56 14/56 1.4.- Reglas prácticas. Algo como idea individual -> OBJETO Si dos clases tienen algo común-> C. BASE Declarar variables en el momento de usarlas Utilizar new delete en vez de malloc() free() Evitar el uso de macros Programa= objetos que interactúan. 1.5.- Bibliografia. Bjarne Stroustrup, C++, ADDISON- WESLEY/ DIAZ DE SANTOS Fco. Javier Ceballos, Programación orientada a objetos con C++,RA-MA Angel Franco, Desarrollo Avanzado de Aplicaciones Windows con Borland 4.0 y ObjectWindows 2.0. 15/56 16/56 INDICE 1.-. Objetivos, palabras clave, reglas prácticas, consejos 2.- CLASES Y OBJETOS. Extensión del concepto de estructura en C 3.- HERENCIA. Los objetos heredan propiedades de los padres 4.- OPERADORES 5.- EJEMPLOS 2.1 Declaración de una clase. 2.2 Definición de las funciones miembro. 2.3 Constructor 2.4 Declaración del objeto. 2.5 Llamadas a las funciones miembro. 2.6 Sobrecarga de constructores. 2.7 Destructor. 2.8 Control de acceso. 2.9 Matriz de objetos. 2.10 Referencia. 2.11 Constructor copia. 17/56 18/56 3
2.1.- Declaración de una clase. (ver ejemplo 1) 2.2.- Definición de las funciones miembro. 19/56 20/56 2.3.- Constructor 2.4.-Declaración del objeto. 21/56 22/56 2.6.- Sobrecarga de constructores. 2.5.- Llamada a las funciones miembro pt1.mostrar(); pt1.ocultar(); ppunto->mostrar(); ppunto->ocultar(); 23/56 24/56 4
2.7 Destructor. Solo puede haber uno. 2.8. Control de acceso(1/2). 25/56 26/56 2.8. Control de acceso(2/2). 2.9. Matriz de objetos(1/4). 27/56 28/56 2.9. Matriz de objetos(2/4). 2.9. Matriz de objetos(3/4). 29/56 30/56 5
2.9. Matriz de objetos(4/4). 2.10. Referencia (1/3). Es un nombre alternativo, alias o sinónimo para un objeto. int y=10; int &x=y; Una referencia no es una copia de la variable referenciada, sino que es la misma variable con otro nombre. 31/56 32/56 2.10. Referencia (2/3). 2.10. Referencia (3/3). Paso por valor Paso por referencia. 33/56 34/56 2.11. Constructor copia (1/2). 2.11. Constructor copia (2/2). Sirve para crear un objeto a partir de otro ya existente. Acepta como argumento una referencia a su propia clase. C++ proporciona uno si no se define explícitamente. 35/56 36/56 6
INDICE 1.-. Objetivos, palabras clave, reglas prácticas, consejos 2.- CLASES Y OBJETOS. Extensión del concepto de estructura en C 3.- HERENCIA. Los objetos heredan propiedades de los padres 4.- OPERADORES 5.- EJEMPLOS 3.1.- Clase Base. 3.2.- Clase Derivada. 3.3.- Control de Acceso. 3.4.- Constructor y Destructor. 3.5.- Redefinición de funciones miembro. 3.6.- Definición de nuevas funciones. 3.7.- Llamadas a funciones miembro. 3.8.- Polimorfismo. 3.9.- Herencia Multiple. 37/56 38/56 3.1.- Clase base. (ver ejemplo2) Punto clase base PuntoMejorado clase derivada 39/56 40/56 3.2.- Clase derivada. 3.3.- Control de acceso. Clase Base funciones miembro -> protected, private, public objetos -> public Clase Derivada funciones miembro -> protected, public clase base. protected, public, private si misma. objetos -> public clase base public si misma. 41/56 42/56 7
3.4.-Constructor y destructor. 3.5.- Redefinición de funciones miembro. 43/56 44/56 3.6.- Definición de nuevas funciones. 3.7.-Llamadas a funciones miembro. 45/56 46/56 3.8.- Polimorfismo. (ver ejemplo 3) Figura 3.8.- Polimorfismo (2/2). Se añade el concepto clase abstracta o virtual. Es la clase base de varias clases hijas comunes. E lipse Circulo Rectángulo Cuadrado No se pueden crear objetos de clases abstractas. Si se pueden crear punteros y referencias. Se añade el concepto funciones virtuales. Son aquellas que tendran distintas versiones. 47/56 48/56 8
3.9.- Herencia múltiple. INDICE Circulo Figura Rectangulo 1.-. Objetivos, palabras clave, reglas prácticas, consejos 2.- CLASES Y OBJETOS. Extensión del concepto de estructura en C 3.- HERENCIA. Los objetos heredan propiedades de los padres 4.- OPERADORES RectRedondo 5.- EJEMPLOS 49/56 50/56 4.1.- Introducción. 4.2.- Sobrecarga de operadores binarios. 4.2.1.- El operador suma (+). 4.2.2.- El operador producto (*). 4.2.3.- El operador asignación (=). 4.3.-Operadores como función friend. 4.4.- La clase string. 4.1.- Introducción (1/2). Se permite introducir operaciones con objetos. Redefinición de operadores unarios Redefinición de operadores binarios. Palabras clave: operator, friend 51/56 52/56 4.1.- Introducción (2/2). OPERADORES A REDEFINIR (40). (ver ejemplo 4) 4.2.- Sobrecarga de operadores binarios. Un operador binario @ aplicado a dos objetos X e Y, se simboliza X @ Y es equivalente a las llamadas siguientes: X.operator@(Y); // usando operator como función miembro operator@(x,y); // usando operator como función friend 53/56 54/56 9
4.2.1.- El operador suma (+). 4.2.2.- El operador producto (*). 55/56 56/56 4.2.3.- El operador asignación (=). 4.3.-Operadores como función friend (1/3) Una función friend (amiga) de una clase comparte los datos miembro públicos y privados de la clase, pero no es miembro de la clase. La función friend no pertenece a la clase, por tanto no tiene la relacción de pertenencia :: La función debe recibir todos los argumentos, ya que no contiene el puntero this. 57/56 58/56 4.3.-Operadores como función friend (2/3) 4.3.-Operadores como función friend (3/3) 59/56 60/56 10
4.4.- La clase string (1/2). (ver ejemplo 5) 4.4.- La clase string (1/2). Operaciones. 1.- Sumar objetos string 2.- Sumar un objeto string y una cadena de caracteres. 3.- Sumar un objeto string y una cadena char* 4.- Extraer pedazos de un objeto string y asignarlo a otro objeto string. -función miembro substr() 5.- Convertir un objeto string a cadena de caracteres -función miembro c_str() 61/56 62/56 PODEIS DESPERTAR! ZZZ... 63/56 11