Lenguaje C++ Segunda parte Intro. a UML, sobrecarga, polimorfismo, herencia y Templates Ana Lila...

60
Lenguaje C++ Lenguaje C++ Segunda parte Segunda parte Intro. a UML, Intro. a UML, sobrecarga, sobrecarga, polimorfismo, herencia y polimorfismo, herencia y Templates Templates Ana Lila Laureano- Ana Lila Laureano- Cruces Cruces Elena Cruz Miguel Elena Cruz Miguel

Transcript of Lenguaje C++ Segunda parte Intro. a UML, sobrecarga, polimorfismo, herencia y Templates Ana Lila...

Page 1: Lenguaje C++ Segunda parte Intro. a UML, sobrecarga, polimorfismo, herencia y Templates Ana Lila Laureano-Cruces Elena Cruz Miguel.

Lenguaje C++Lenguaje C++Segunda parteSegunda parte

Intro. a UML, sobrecarga, Intro. a UML, sobrecarga, polimorfismo, herencia y polimorfismo, herencia y

TemplatesTemplates

Ana Lila Laureano-CrucesAna Lila Laureano-Cruces

Elena Cruz MiguelElena Cruz Miguel

Page 2: Lenguaje C++ Segunda parte Intro. a UML, sobrecarga, polimorfismo, herencia y Templates Ana Lila Laureano-Cruces Elena Cruz Miguel.

Modelado VisualModelado Visual

Es modelado usando una notación Es modelado usando una notación gráfica estándarizadagráfica estándarizada

Captura las partes esenciales de un Captura las partes esenciales de un sistemasistema

Abstrae la complejidadAbstrae la complejidad El análisis de casos de uso es una El análisis de casos de uso es una

técnica para capturar el proceso del técnica para capturar el proceso del negocio desde la perspectiva del negocio desde la perspectiva del usuariousuario

Page 3: Lenguaje C++ Segunda parte Intro. a UML, sobrecarga, polimorfismo, herencia y Templates Ana Lila Laureano-Cruces Elena Cruz Miguel.

UMLUML

Lenguaje Unificado de ModeladoLenguaje Unificado de Modelado Estandar para el modelado de Estandar para el modelado de

aplicaciones Orientados a Objetosaplicaciones Orientados a Objetos Es una sintaxis, no una metodologíaEs una sintaxis, no una metodología Proporciona una gran gama de Proporciona una gran gama de

diagramas y la semántica asociada a diagramas y la semántica asociada a esta.esta.

Page 4: Lenguaje C++ Segunda parte Intro. a UML, sobrecarga, polimorfismo, herencia y Templates Ana Lila Laureano-Cruces Elena Cruz Miguel.

Booch, Rambaugh y Jacobson adoptaron Booch, Rambaugh y Jacobson adoptaron los siguentes objetivos:los siguentes objetivos:

Representar sistemas completos, en Representar sistemas completos, en lugar de solamente la parte de software, lugar de solamente la parte de software, usando conceptos orientados a objetos.usando conceptos orientados a objetos.

Establecer una relación explícita entre Establecer una relación explícita entre conceptos y código ejecutable.conceptos y código ejecutable.

Crear un lenguaje de modelado que Crear un lenguaje de modelado que pudiera ser usado por humanos y pudiera ser usado por humanos y máquinas.máquinas.

Page 5: Lenguaje C++ Segunda parte Intro. a UML, sobrecarga, polimorfismo, herencia y Templates Ana Lila Laureano-Cruces Elena Cruz Miguel.

VentajasVentajas

UML es el lenguaje estándar para UML es el lenguaje estándar para visualizar, especificar, construir y visualizar, especificar, construir y documentar los productos de un documentar los productos de un sistema de softwaresistema de software

UML se puede usar con todos los UML se puede usar con todos los procesos, a lo largo del ciclo de vida procesos, a lo largo del ciclo de vida de desarrollo y a través de diferentes de desarrollo y a través de diferentes tecnologías de implementacióntecnologías de implementación

Page 6: Lenguaje C++ Segunda parte Intro. a UML, sobrecarga, polimorfismo, herencia y Templates Ana Lila Laureano-Cruces Elena Cruz Miguel.

DiseñoDiseño

Diagramas Asociados:Diagramas Asociados: - Diagrama de Objetos- Diagrama de Objetos - Diagrama de Clases- Diagrama de Clases - Diagrama de Estados- Diagrama de Estados - Diagrama de Actividades- Diagrama de Actividades - Diagrama de Secuencia- Diagrama de Secuencia - Diagrama de Componentes- Diagrama de Componentes

Fundamental en el diseño y

Documentación de un sistema

Page 7: Lenguaje C++ Segunda parte Intro. a UML, sobrecarga, polimorfismo, herencia y Templates Ana Lila Laureano-Cruces Elena Cruz Miguel.

Conceptos sobre ClasesConceptos sobre Clases Describe un grupo de objetos conDescribe un grupo de objetos con propiedades similares, con relaciones propiedades similares, con relaciones

comunes y con semántica común (mismos comunes y con semántica común (mismos atributos y patrones de comportamiento)atributos y patrones de comportamiento)

La clase de un objeto es una propiedad La clase de un objeto es una propiedad implícita de sí mismoimplícita de sí mismo

Al agrupar los objetos en clases se Al agrupar los objetos en clases se abstrae el problema, lo que da al modelo abstrae el problema, lo que da al modelo su potencia y capacidad de generalizarsu potencia y capacidad de generalizar

Page 8: Lenguaje C++ Segunda parte Intro. a UML, sobrecarga, polimorfismo, herencia y Templates Ana Lila Laureano-Cruces Elena Cruz Miguel.

Diagramas de ClaseDiagramas de Clase

• • Atributos: es una propiedad del Atributos: es una propiedad del elemento, que es compartida por elemento, que es compartida por todos los objetos, y describe una todos los objetos, y describe una característica.característica.

• • Operaciones: es la implementación Operaciones: es la implementación de un servicio que muestra el de un servicio que muestra el comportamiento de la clase.comportamiento de la clase.

Page 9: Lenguaje C++ Segunda parte Intro. a UML, sobrecarga, polimorfismo, herencia y Templates Ana Lila Laureano-Cruces Elena Cruz Miguel.

Un diagrama de clases se compone Un diagrama de clases se compone de un rectangulo dividido en tres de un rectangulo dividido en tres seccionessecciones

NombreDeClase

Sección de atributos

Sección de operaciones

Page 10: Lenguaje C++ Segunda parte Intro. a UML, sobrecarga, polimorfismo, herencia y Templates Ana Lila Laureano-Cruces Elena Cruz Miguel.

Usuario

-nombre-edad-fechaNacimiento

+agregarUsuario+borrarUsuario+modificarUsuario

Nombre de la clase

Atributos ocaracterísticas

Comportamiento uoperaciones

visibilidad

- son privados+ son públicos

Page 11: Lenguaje C++ Segunda parte Intro. a UML, sobrecarga, polimorfismo, herencia y Templates Ana Lila Laureano-Cruces Elena Cruz Miguel.

Sintaxis compactaSintaxis compacta

UsuarioAutentificaUsuario

Navegabilidad

Indica el sentido valido de recorrido

Asociación

Indica cómo esta relacionada una clase con otra

Page 12: Lenguaje C++ Segunda parte Intro. a UML, sobrecarga, polimorfismo, herencia y Templates Ana Lila Laureano-Cruces Elena Cruz Miguel.

SobrecargaSobrecarga

Page 13: Lenguaje C++ Segunda parte Intro. a UML, sobrecarga, polimorfismo, herencia y Templates Ana Lila Laureano-Cruces Elena Cruz Miguel.

SobrecargaSobrecarga

La sobrecarga permite definir varias La sobrecarga permite definir varias funciones que:funciones que: Tienen el mismo nombreTienen el mismo nombre El número de parámetros que reciben es El número de parámetros que reciben es

distintodistinto Los tipos de datos de retorno son igualesLos tipos de datos de retorno son iguales Los tipos de datos de los parámetros Los tipos de datos de los parámetros

pueden ser distintospueden ser distintos

Page 14: Lenguaje C++ Segunda parte Intro. a UML, sobrecarga, polimorfismo, herencia y Templates Ana Lila Laureano-Cruces Elena Cruz Miguel.

SobrecargaSobrecarga

int compara(int v1,int v2)int compara(int v1,int v2) {{

if(v1>v2)if(v1>v2) return(1);return(1);

else if(v1<v2)else if(v1<v2) return(-1);return(-1);

elseelse return(0);return(0);

}}

Page 15: Lenguaje C++ Segunda parte Intro. a UML, sobrecarga, polimorfismo, herencia y Templates Ana Lila Laureano-Cruces Elena Cruz Miguel.

SobrecargaSobrecarga

int compara(char *v1,char *v2)int compara(char *v1,char *v2) {{

for(int i=0;i<strlen(v1);i++)for(int i=0;i<strlen(v1);i++) if(v1[i]==v2[i])if(v1[i]==v2[i])

continue;continue; else if(v1[i]<v2[i])else if(v1[i]<v2[i])

return(-1);return(-1); elseelse

return(0);return(0);

return (if(strlen(v1)==strlen(v2)?0:-1;return (if(strlen(v1)==strlen(v2)?0:-1; }}

Page 16: Lenguaje C++ Segunda parte Intro. a UML, sobrecarga, polimorfismo, herencia y Templates Ana Lila Laureano-Cruces Elena Cruz Miguel.

Sobrecarga con funcionesSobrecarga con funciones Si se utilizan parámetros con valores Si se utilizan parámetros con valores

default, la función puede representarse default, la función puede representarse con un conjunto de funciones:con un conjunto de funciones:

void funcion( int a = 50, float f = 23.45, char c = void funcion( int a = 50, float f = 23.45, char c = 'q' );'q' );

El conjunto de funciones equivalentes es:El conjunto de funciones equivalentes es:void funcion ( );void funcion ( );

void funcion( int );void funcion( int );

void funcion ( int, float );void funcion ( int, float );

void funcion ( int, float, char );void funcion ( int, float, char );

Page 17: Lenguaje C++ Segunda parte Intro. a UML, sobrecarga, polimorfismo, herencia y Templates Ana Lila Laureano-Cruces Elena Cruz Miguel.

Sobrecarga de Sobrecarga de OperadoresOperadores

La sobrecarga del operador se asocia La sobrecarga del operador se asocia con la semanticacon la semantica

Se mantiene la presedencia y Se mantiene la presedencia y asociatividad en los operadoresasociatividad en los operadores

Se pueden definir formas de prefijos y Se pueden definir formas de prefijos y postfijos del mismo operador postfijos del mismo operador

Page 18: Lenguaje C++ Segunda parte Intro. a UML, sobrecarga, polimorfismo, herencia y Templates Ana Lila Laureano-Cruces Elena Cruz Miguel.

Sobrecarga con Sobrecarga con Operadores Operadores

Operadores que pueden ser sobrecargadosOperadores que pueden ser sobrecargados RelacionalesRelacionales

>, <, <=, >=, !=, ==>, <, <=, >=, !=, == AritméticosAritméticos

+, -, *, /, %, ^+, -, *, /, %, ^ A nivel de bitsA nivel de bits

&, |, ~, !, <<, >>, &, |, ~, !, <<, >>, AsignaciónAsignación

=, +=, -=, *=, /=, %=, ^=, &=, |=, <<=, >>==, +=, -=, *=, /=, %=, ^=, &=, |=, <<=, >>= OtrosOtros

, &&, ||, ++, --, ->, [ ], ( ), new, delete, &&, ||, ++, --, ->, [ ], ( ), new, delete

Page 19: Lenguaje C++ Segunda parte Intro. a UML, sobrecarga, polimorfismo, herencia y Templates Ana Lila Laureano-Cruces Elena Cruz Miguel.

EjemploEjemplo Sobrecarga del operador + entre numeros Sobrecarga del operador + entre numeros

imaginarios.imaginarios.

Imaginario Imginario::operator + (Imaginario i)Imaginario Imginario::operator + (Imaginario i)

{{Imaginario mi = *this;Imaginario mi = *this;

return Imaginario( im.p_real + i.p_real, return Imaginario( im.p_real + i.p_real,

im.p_imaginaria + im.p_imaginaria + i.p_imaginaria );i.p_imaginaria );

}}

Page 20: Lenguaje C++ Segunda parte Intro. a UML, sobrecarga, polimorfismo, herencia y Templates Ana Lila Laureano-Cruces Elena Cruz Miguel.

PolimorfismoPolimorfismo

Page 21: Lenguaje C++ Segunda parte Intro. a UML, sobrecarga, polimorfismo, herencia y Templates Ana Lila Laureano-Cruces Elena Cruz Miguel.

PolimorfismoPolimorfismo

Muchas formasMuchas formas A un mismo mensaje distinto A un mismo mensaje distinto

comportamientocomportamiento

Page 22: Lenguaje C++ Segunda parte Intro. a UML, sobrecarga, polimorfismo, herencia y Templates Ana Lila Laureano-Cruces Elena Cruz Miguel.

Overriding o Redefinición Overriding o Redefinición de Funcionesde Funciones

Overriding es redefinir una función en Overriding es redefinir una función en una clase derivada:una clase derivada: mismo nombre de la función.mismo nombre de la función. mismo tipo y número de argumentos.mismo tipo y número de argumentos. mismo tipo de retorno en una clase mismo tipo de retorno en una clase

derivada.derivada.

Page 23: Lenguaje C++ Segunda parte Intro. a UML, sobrecarga, polimorfismo, herencia y Templates Ana Lila Laureano-Cruces Elena Cruz Miguel.

EjemploEjemplo

class Userclass User

{{

public:public:

......

virtual int getPermissions() const;virtual int getPermissions() const;

......

}}

class Employee :public Userclass Employee :public User

{ ... }{ ... }

int Employee::getPermissions() constint Employee::getPermissions() const

{{

cout << “ Permisos Empleado\n”cout << “ Permisos Empleado\n”

}}

igual númeroy tipo deargumentos

igual tipo deretorno

Page 24: Lenguaje C++ Segunda parte Intro. a UML, sobrecarga, polimorfismo, herencia y Templates Ana Lila Laureano-Cruces Elena Cruz Miguel.

Sobrecarga y Sobrecarga y sobreescriturasobreescritura

La sobrecarga se refiere a crear funciones del La sobrecarga se refiere a crear funciones del mismo nombre, pero con diferente tipo y mismo nombre, pero con diferente tipo y número de argumentos y valor de retorno número de argumentos y valor de retorno dentro de una misma clase derivada o subclase.dentro de una misma clase derivada o subclase. Las funciones resultantes son independientes Las funciones resultantes son independientes

entre sí.entre sí. La redefinición redefine una función en la clase La redefinición redefine una función en la clase

derivada con mismo tipo y número de derivada con mismo tipo y número de argumentos, y valor de retorno.argumentos, y valor de retorno. Las funciones resultantes se sobreescriben Las funciones resultantes se sobreescriben

entre sí.entre sí.

Page 25: Lenguaje C++ Segunda parte Intro. a UML, sobrecarga, polimorfismo, herencia y Templates Ana Lila Laureano-Cruces Elena Cruz Miguel.

PolimorfismoPolimorfismo El polimorfismo es una de las características El polimorfismo es una de las características

centrales de la programación orientada a centrales de la programación orientada a objetos, junto con el encapsulamiento y la objetos, junto con el encapsulamiento y la herencia.herencia.

Significa que un objeto responderá a una Significa que un objeto responderá a una función de acuerdo a la definición propia que función de acuerdo a la definición propia que tiene para ese método.tiene para ese método.

Page 26: Lenguaje C++ Segunda parte Intro. a UML, sobrecarga, polimorfismo, herencia y Templates Ana Lila Laureano-Cruces Elena Cruz Miguel.

Polimorfismo en C++Polimorfismo en C++

El polimorfismo en C++ trabaja sobre El polimorfismo en C++ trabaja sobre métodos heredados y/o redefinidos métodos heredados y/o redefinidos ( overriden ).( overriden ).

Page 27: Lenguaje C++ Segunda parte Intro. a UML, sobrecarga, polimorfismo, herencia y Templates Ana Lila Laureano-Cruces Elena Cruz Miguel.

EjemploEjemplo

class Userclass User { ...{ ... virtual int getPermissions() const;virtual int getPermissions() const; }}

class Employee :public Userclass Employee :public User{ ... }{ ... }int Employee::getPermissions() constint Employee::getPermissions() const{{ cout << “ Permisos Empleado\n” }cout << “ Permisos Empleado\n” }

Page 28: Lenguaje C++ Segunda parte Intro. a UML, sobrecarga, polimorfismo, herencia y Templates Ana Lila Laureano-Cruces Elena Cruz Miguel.

EjemploEjemplo

User user1, *user2;User user1, *user2;

Employee employee1;Employee employee1;

user2 = &employee;user2 = &employee;

user1.getPermissions(); user1.getPermissions(); // User.// User.

employee1.getPermissions(); employee1.getPermissions(); // Employee.// Employee.

Page 29: Lenguaje C++ Segunda parte Intro. a UML, sobrecarga, polimorfismo, herencia y Templates Ana Lila Laureano-Cruces Elena Cruz Miguel.

Ejemplo - ( 3 de 3 ) Ejemplo - ( 3 de 3 )

int main(void )int main(void )

{{

Usuario *persons[]={new Usuario(2),Usuario *persons[]={new Usuario(2),

new Empleado(15),new Administrador(500)};new Empleado(15),new Administrador(500)};

showPermissions( persons );showPermissions( persons );

}}

void showPermissions( Usuario *usuarios[] )void showPermissions( Usuario *usuarios[] )

{{

for( int i = 0; i < 3; i++ )for( int i = 0; i < 3; i++ )

usuarios[i]->getPermisos();usuarios[i]->getPermisos();

cout << endl;cout << endl;

}}

Page 30: Lenguaje C++ Segunda parte Intro. a UML, sobrecarga, polimorfismo, herencia y Templates Ana Lila Laureano-Cruces Elena Cruz Miguel.

Clases AbstractasClases Abstractas

Una clase abstracta es aquella que Una clase abstracta es aquella que define funciones virtuales puras.define funciones virtuales puras.

Las funciones virtuales puras se Las funciones virtuales puras se definen como:definen como:

virtual void print() const = 0;virtual void print() const = 0;

Page 31: Lenguaje C++ Segunda parte Intro. a UML, sobrecarga, polimorfismo, herencia y Templates Ana Lila Laureano-Cruces Elena Cruz Miguel.

Herencia en C++Herencia en C++

Page 32: Lenguaje C++ Segunda parte Intro. a UML, sobrecarga, polimorfismo, herencia y Templates Ana Lila Laureano-Cruces Elena Cruz Miguel.

HerenciaHerencia

Propiedad que permite crear nuevas Propiedad que permite crear nuevas clases a partir de las clases clases a partir de las clases existentesexistentes

Conserva las propiedades de la clase Conserva las propiedades de la clase original y añade nuevas original y añade nuevas característicascaracterísticas

Usado para la resolución de Usado para la resolución de problemas complejosproblemas complejos

Page 33: Lenguaje C++ Segunda parte Intro. a UML, sobrecarga, polimorfismo, herencia y Templates Ana Lila Laureano-Cruces Elena Cruz Miguel.

RecomendacionesRecomendaciones

Buscar categorías, propiedades Buscar categorías, propiedades comunes y distintas que nos comunes y distintas que nos permitan clasificar los objetos.permitan clasificar los objetos.

Page 34: Lenguaje C++ Segunda parte Intro. a UML, sobrecarga, polimorfismo, herencia y Templates Ana Lila Laureano-Cruces Elena Cruz Miguel.

Clase Base y Clase Clase Base y Clase DerivadaDerivada

Se le llama Clase Base a la clase de Se le llama Clase Base a la clase de la cuál van a heredar las demás.la cuál van a heredar las demás.

Se llama clase derivada a las clases Se llama clase derivada a las clases creadas a partir de una clase base.creadas a partir de una clase base.

Page 35: Lenguaje C++ Segunda parte Intro. a UML, sobrecarga, polimorfismo, herencia y Templates Ana Lila Laureano-Cruces Elena Cruz Miguel.

Clase DerivadaClase Derivada

Una clase derivada hereda todos los Una clase derivada hereda todos los miembros de la clase base y miembros de la clase base y puede puede accederacceder a los miembros públicos a los miembros públicos ((publicpublic) y protegidos () y protegidos (protectedprotected) de ) de la clase o clases base, como si fueran la clase o clases base, como si fueran miembros de ella misma. Una clase miembros de ella misma. Una clase derivada derivada nono tiene acceso a los tiene acceso a los miembros privados (miembros privados (privateprivate) de la ) de la clase base.clase base.

Page 36: Lenguaje C++ Segunda parte Intro. a UML, sobrecarga, polimorfismo, herencia y Templates Ana Lila Laureano-Cruces Elena Cruz Miguel.

EjemploEjemplo

PersonaPersona Propiedades comunesPropiedades comunes

NombreNombre Fecha de nacimientoFecha de nacimiento GeneroGenero Estado civilEstado civil

Page 37: Lenguaje C++ Segunda parte Intro. a UML, sobrecarga, polimorfismo, herencia y Templates Ana Lila Laureano-Cruces Elena Cruz Miguel.

EmpleadoEmpleado Características adicionalesCaracterísticas adicionales

SueldoSueldo Número empleadoNúmero empleado AreaArea

Page 38: Lenguaje C++ Segunda parte Intro. a UML, sobrecarga, polimorfismo, herencia y Templates Ana Lila Laureano-Cruces Elena Cruz Miguel.

AlumnoAlumno Características adicionalesCaracterísticas adicionales

MatriculaMatricula LicenciaturaLicenciatura

Page 39: Lenguaje C++ Segunda parte Intro. a UML, sobrecarga, polimorfismo, herencia y Templates Ana Lila Laureano-Cruces Elena Cruz Miguel.

Jerarquía de ClasesJerarquía de Clases

Persona

Empleado Estudiante

Administrativo Académico

Page 40: Lenguaje C++ Segunda parte Intro. a UML, sobrecarga, polimorfismo, herencia y Templates Ana Lila Laureano-Cruces Elena Cruz Miguel.

Modelado UMLModelado UML

ClaseBase

Sección de atributos

Sección de funciones

ClaseDerivada

Sección de atributos

Sección de funciones

Page 41: Lenguaje C++ Segunda parte Intro. a UML, sobrecarga, polimorfismo, herencia y Templates Ana Lila Laureano-Cruces Elena Cruz Miguel.

Modelado UMLModelado UMLPersona

- nombre- edad- fechaNacimiento

Sección de funciones

Empleado

- idEmpleado- sueldo- area

Sección de funciones

Diagrama de clases

Page 42: Lenguaje C++ Segunda parte Intro. a UML, sobrecarga, polimorfismo, herencia y Templates Ana Lila Laureano-Cruces Elena Cruz Miguel.

SintaxisSintaxis

Para la declaración de clases Para la declaración de clases derivadas, encontramos después del derivadas, encontramos después del nombre de la clase derivada, dos nombre de la clase derivada, dos puntos (:) , y luego alguna de las puntos (:) , y luego alguna de las siguientes palabras clave:siguientes palabras clave: publicpublic privateprivate protectedprotected

Page 43: Lenguaje C++ Segunda parte Intro. a UML, sobrecarga, polimorfismo, herencia y Templates Ana Lila Laureano-Cruces Elena Cruz Miguel.

class class basebase{{ //Cuerpo de la clase base  //Cuerpo de la clase base };};

class class derivadaderivada :[public/private/..] :[public/private/..] basebase{{ //Cuerpo de la clase derivada //Cuerpo de la clase derivada}; };

Page 44: Lenguaje C++ Segunda parte Intro. a UML, sobrecarga, polimorfismo, herencia y Templates Ana Lila Laureano-Cruces Elena Cruz Miguel.

Constructores de Clases Constructores de Clases DerivadasDerivadas

Cuando una clase base tiene un constructor y una Cuando una clase base tiene un constructor y una clase derivada también, al crear el objeto, se clase derivada también, al crear el objeto, se llama primero al constructor de la clase base, y llama primero al constructor de la clase base, y cuando la ejecución de éste termina, se llama al cuando la ejecución de éste termina, se llama al constructor de la clase derivada.constructor de la clase derivada.

Gracias a que el constructor de la clase base es Gracias a que el constructor de la clase base es llamado, es posible inicializar la clase base, desde llamado, es posible inicializar la clase base, desde el constructor de la clase derivada. Esto se logra el constructor de la clase derivada. Esto se logra pasando una lista de los constructores de las pasando una lista de los constructores de las clases base, con sus respectivos parámetros. clases base, con sus respectivos parámetros.

Page 45: Lenguaje C++ Segunda parte Intro. a UML, sobrecarga, polimorfismo, herencia y Templates Ana Lila Laureano-Cruces Elena Cruz Miguel.

Ejemplo PERSO.HEjemplo PERSO.H#ifndef PERSO_H#ifndef PERSO_H#define PERSO_H#define PERSO_H

#include<iostream.h>#include<iostream.h>#include<string.h>#include<string.h>#include<stdlib.h>#include<stdlib.h>

class persona{class persona{ public:public: persona::persona(char *n,int e){persona::persona(char *n,int e){

nombre=new char[strlen(n)+1];nombre=new char[strlen(n)+1]; edad=e;edad=e;

}} const char *LeerNombre(char *n) const;const char *LeerNombre(char *n) const; int LeerEdad() const{int LeerEdad() const{ return edad;return edad; }} protected:protected: char *nombre;char *nombre; int edad;int edad;};};

Page 46: Lenguaje C++ Segunda parte Intro. a UML, sobrecarga, polimorfismo, herencia y Templates Ana Lila Laureano-Cruces Elena Cruz Miguel.

class empleado:public persona{class empleado:public persona{ public:public: empleado::empleado(char *n,int e,float s):persona(n,e){empleado::empleado(char *n,int e,float s):persona(n,e){

salarioanual=s;salarioanual=s; }} float leersalario() const;float leersalario() const; protected:protected: float salarioanual;float salarioanual;};};

class alumno:public persona{class alumno:public persona{ public:public: alumno::alumno(char *n,int e,double m):persona(n,e){alumno::alumno(char *n,int e,double m):persona(n,e){

matricula=m;matricula=m; }} double leermatricula() const;double leermatricula() const; protected:protected: double matricula;double matricula;};};

#endif#endif

Page 47: Lenguaje C++ Segunda parte Intro. a UML, sobrecarga, polimorfismo, herencia y Templates Ana Lila Laureano-Cruces Elena Cruz Miguel.

Principal.cppPrincipal.cpp

#include<iostream.h>#include<iostream.h>#include"perso.h"#include"perso.h"#include<conio.h>#include<conio.h>

void main()void main(){ { int edad;int edad; system("cls");system("cls"); alumno edoo("mario",24,20021);alumno edoo("mario",24,20021); edad=edoo.LeerEdad();edad=edoo.LeerEdad(); cout<<edad;cout<<edad; getch();getch();}}

Page 48: Lenguaje C++ Segunda parte Intro. a UML, sobrecarga, polimorfismo, herencia y Templates Ana Lila Laureano-Cruces Elena Cruz Miguel.

TemplatesTemplatesIntroducciónIntroducción

la programación clásica la programación clásica diferenciación entre los datos y su diferenciación entre los datos y su

manipulación, es decir, entre los datos y manipulación, es decir, entre los datos y el conjunto de algoritmos para el conjunto de algoritmos para manejarlos.  manejarlos. 

Los datos eran tipos muy simples Los datos eran tipos muy simples generalmente los algoritmos estaban generalmente los algoritmos estaban

agrupados en funciones orientadas de agrupados en funciones orientadas de forma muy específica a los datos que forma muy específica a los datos que debían manejar.debían manejar.

Page 49: Lenguaje C++ Segunda parte Intro. a UML, sobrecarga, polimorfismo, herencia y Templates Ana Lila Laureano-Cruces Elena Cruz Miguel.

IntroducciónIntroducción

La POO introdujo nuevas facilidades:La POO introdujo nuevas facilidades: Extender el concepto de dato, Extender el concepto de dato, permitiendo tipos más complejos a los permitiendo tipos más complejos a los

que se podía asociar la operaciones que se podía asociar la operaciones necesarias. necesarias. 

AdemásAdemás La posibilidad de ocultación de La posibilidad de ocultación de

determinados detalles internos irrelevantes determinados detalles internos irrelevantes para el usuario para el usuario

y la capacidad de herenciay la capacidad de herencia

Page 50: Lenguaje C++ Segunda parte Intro. a UML, sobrecarga, polimorfismo, herencia y Templates Ana Lila Laureano-Cruces Elena Cruz Miguel.

Programación genéricaProgramación genérica

Se dieron cuenta que Se dieron cuenta que frecuentemente las manipulaciones frecuentemente las manipulaciones contienen un denominador común contienen un denominador común que se repite bajo apariencias que se repite bajo apariencias diversasdiversas criterios de ordenacióncriterios de ordenación validacionesvalidaciones

Page 51: Lenguaje C++ Segunda parte Intro. a UML, sobrecarga, polimorfismo, herencia y Templates Ana Lila Laureano-Cruces Elena Cruz Miguel.

Los algoritmos deben ser Los algoritmos deben ser parametrizados al máximo.parametrizados al máximo.

Expresados de la forma más Expresados de la forma más independiente posible de detalles independiente posible de detalles concretosconcretos

permitiendo la posibilidad de servir permitiendo la posibilidad de servir para una mayor variedad posible de para una mayor variedad posible de tipos y estructuras de datos.tipos y estructuras de datos.

Page 52: Lenguaje C++ Segunda parte Intro. a UML, sobrecarga, polimorfismo, herencia y Templates Ana Lila Laureano-Cruces Elena Cruz Miguel.

Algoritmo genérico que permita Algoritmo genérico que permita representar algoritmos con ciertas representar algoritmos con ciertas características comunes características comunes

Definición de los tipos: a que tipos Definición de los tipos: a que tipos pueden aplicarse este algoritmopueden aplicarse este algoritmo

Y sus reglas de uso, independiente.Y sus reglas de uso, independiente.

Page 53: Lenguaje C++ Segunda parte Intro. a UML, sobrecarga, polimorfismo, herencia y Templates Ana Lila Laureano-Cruces Elena Cruz Miguel.

Las plantillas, que se introdujeron Las plantillas, que se introdujeron con la versión del Estándar de Julio con la versión del Estándar de Julio de 1998de 1998

Page 54: Lenguaje C++ Segunda parte Intro. a UML, sobrecarga, polimorfismo, herencia y Templates Ana Lila Laureano-Cruces Elena Cruz Miguel.

La idea central a resaltar aquí es que La idea central a resaltar aquí es que una una plantillaplantilla genera la definición de genera la definición de una clase o de una función mediante una clase o de una función mediante uno o varios parámetros.  A esta uno o varios parámetros.  A esta instancia concreta de la clase o instancia concreta de la clase o función se la denomina una función se la denomina una especializaciónespecialización o o especialidadespecialidad de de la plantilla.la plantilla.

Page 55: Lenguaje C++ Segunda parte Intro. a UML, sobrecarga, polimorfismo, herencia y Templates Ana Lila Laureano-Cruces Elena Cruz Miguel.

C++ utiliza una palabra clave específica C++ utiliza una palabra clave específica templatetemplate para declarar y definir funciones para declarar y definir funciones y clases genéricas.  y clases genéricas. 

En estos casos actúa como un especificador En estos casos actúa como un especificador de tipo y va unido al par de ángulos de tipo y va unido al par de ángulos < >< > que delimitan los argumentos de la que delimitan los argumentos de la plantilla:plantilla: template <T> void fun(T& ref);      // template <T> void fun(T& ref);      //

declaración de función genéricadeclaración de función genérica template <T> class C {/*...*/};     // declaración template <T> class C {/*...*/};     // declaración

de clase genéricade clase genérica

Page 56: Lenguaje C++ Segunda parte Intro. a UML, sobrecarga, polimorfismo, herencia y Templates Ana Lila Laureano-Cruces Elena Cruz Miguel.

#include #include #include #include #include #include class ObjetoGenerico {class ObjetoGenerico { public:public: virtual void Dibuja() {};virtual void Dibuja() {}; };};

class Circulo : public ObjetoGenerico {class Circulo : public ObjetoGenerico { int x, y, r;int x, y, r; public:public: Circulo(int xi=100, int yi=100, int ri=100) Circulo(int xi=100, int yi=100, int ri=100) { x=xi ; y=yi; r=ri;}{ x=xi ; y=yi; r=ri;} void Dibuja() void Dibuja() { circle(x, y, r); }{ circle(x, y, r); } };};

Page 57: Lenguaje C++ Segunda parte Intro. a UML, sobrecarga, polimorfismo, herencia y Templates Ana Lila Laureano-Cruces Elena Cruz Miguel.

class Elipse : public ObjetoGenerico {class Elipse : public ObjetoGenerico {int x, y, rx, ry;int x, y, rx, ry;public:public:Elipse(int xi=100, int yi=100, int rxi=60, int ryi=80)Elipse(int xi=100, int yi=100, int rxi=60, int ryi=80) { x=xi; y=yi; rx=rxi; ry=ryi; }{ x=xi; y=yi; rx=rxi; ry=ryi; }void Dibuja() void Dibuja() { ellipse(x, y, 0, 360, rx, ry) ; }{ ellipse(x, y, 0, 360, rx, ry) ; }};};class Rectangulo : public ObjetoGenerico {class Rectangulo : public ObjetoGenerico {int xizq, yarriba, ancho, alto;int xizq, yarriba, ancho, alto;public:public:Rectangulo(int xi=10, int yi=10, int an=40, int al=60)Rectangulo(int xi=10, int yi=10, int an=40, int al=60){ xizq=xi; yarriba=yi;ancho=an; alto=al; }{ xizq=xi; yarriba=yi;ancho=an; alto=al; }void Dibuja()void Dibuja() { rectangle(xizq, yarriba, xizq+ancho, yarriba+alto); }{ rectangle(xizq, yarriba, xizq+ancho, yarriba+alto); }};};

Page 58: Lenguaje C++ Segunda parte Intro. a UML, sobrecarga, polimorfismo, herencia y Templates Ana Lila Laureano-Cruces Elena Cruz Miguel.

class Nodo {class Nodo {ObjetoGenerico *figura;ObjetoGenerico *figura;Nodo *sig;Nodo *sig;public:public:Nodo(ObjetoGenerico *fig)Nodo(ObjetoGenerico *fig) { figura=fig; }{ figura=fig; }Nodo * RecuperaSiguiente()Nodo * RecuperaSiguiente() { return sig; }{ return sig; }void PonerSiguiente(Nodo *nodosig)void PonerSiguiente(Nodo *nodosig) { sig=nodosig; }{ sig=nodosig; }void Muestra()void Muestra() { figura->Dibuja(); }{ figura->Dibuja(); }};};

Page 59: Lenguaje C++ Segunda parte Intro. a UML, sobrecarga, polimorfismo, herencia y Templates Ana Lila Laureano-Cruces Elena Cruz Miguel.

class Lista {class Lista {Nodo *cabeza;Nodo *cabeza;public:public:Lista()Lista(){ cabeza=new Nodo(NULL); cabeza->PonerSiguiente(NULL); }{ cabeza=new Nodo(NULL); cabeza->PonerSiguiente(NULL); }void Insertar (ObjetoGenerico *fig);void Insertar (ObjetoGenerico *fig);void Desplegar();void Desplegar();};};void Lista::Insertar(ObjetoGenerico *fig)void Lista::Insertar(ObjetoGenerico *fig){{ Nodo *aux;Nodo *aux; For(aux=cabeza; aux->RecuperaSiguiente()!=NULL; aux=aux-For(aux=cabeza; aux->RecuperaSiguiente()!=NULL; aux=aux-

>RecuperaSiguiente());>RecuperaSiguiente()); Nodo *nuevo = new Nodo(fig);Nodo *nuevo = new Nodo(fig); nuevo->PonerSiguiente(NULL);nuevo->PonerSiguiente(NULL); aux->PonerSiguiente(nuevo);aux->PonerSiguiente(nuevo);}}void Lista::Desplegar()void Lista::Desplegar(){ Nodo *aux;{ Nodo *aux;for(aux=cabeza->RecuperaSiguiente(); aux!=NULL; aux=aux-for(aux=cabeza->RecuperaSiguiente(); aux!=NULL; aux=aux-

>RecuperaSiguiente())>RecuperaSiguiente())aux->Muestra();aux->Muestra();}}

Page 60: Lenguaje C++ Segunda parte Intro. a UML, sobrecarga, polimorfismo, herencia y Templates Ana Lila Laureano-Cruces Elena Cruz Miguel.

void main()void main() {{ int graphdriver = DETECT, graphmode;int graphdriver = DETECT, graphmode; initgraph(&graphdriver, &graphmode, "..\\bgi");initgraph(&graphdriver, &graphmode, "..\\bgi"); Lista ListaFig;Lista ListaFig; Circulo *c1 = new Circulo(50,50,80);Circulo *c1 = new Circulo(50,50,80); ListaFig.Insertar(c1);ListaFig.Insertar(c1); Elipse *e1 = new Elipse;Elipse *e1 = new Elipse; ListaFig.Insertar(e1);ListaFig.Insertar(e1); Rectangulo *r1 = new Rectangulo(30,50);Rectangulo *r1 = new Rectangulo(30,50); ListaFig.Insertar(r1);ListaFig.Insertar(r1); ListaFig.Desplegar();ListaFig.Desplegar(); closegraph();closegraph(); }}