lenguaje c++ segunda parte intro. a uml, sobrecarga, polimorfismo, herencia y templates ana lila...
TRANSCRIPT
![Page 1: Lenguaje C++ Segunda parte Intro. a UML, sobrecarga, polimorfismo, herencia y Templates Ana Lila Laureano-Cruces Elena Cruz Miguel](https://reader034.vdocuments.pub/reader034/viewer/2022052301/551cf4355503463f7a8b5571/html5/thumbnails/1.jpg)
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](https://reader034.vdocuments.pub/reader034/viewer/2022052301/551cf4355503463f7a8b5571/html5/thumbnails/2.jpg)
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](https://reader034.vdocuments.pub/reader034/viewer/2022052301/551cf4355503463f7a8b5571/html5/thumbnails/3.jpg)
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](https://reader034.vdocuments.pub/reader034/viewer/2022052301/551cf4355503463f7a8b5571/html5/thumbnails/4.jpg)
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](https://reader034.vdocuments.pub/reader034/viewer/2022052301/551cf4355503463f7a8b5571/html5/thumbnails/5.jpg)
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](https://reader034.vdocuments.pub/reader034/viewer/2022052301/551cf4355503463f7a8b5571/html5/thumbnails/6.jpg)
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](https://reader034.vdocuments.pub/reader034/viewer/2022052301/551cf4355503463f7a8b5571/html5/thumbnails/7.jpg)
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](https://reader034.vdocuments.pub/reader034/viewer/2022052301/551cf4355503463f7a8b5571/html5/thumbnails/8.jpg)
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](https://reader034.vdocuments.pub/reader034/viewer/2022052301/551cf4355503463f7a8b5571/html5/thumbnails/9.jpg)
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](https://reader034.vdocuments.pub/reader034/viewer/2022052301/551cf4355503463f7a8b5571/html5/thumbnails/10.jpg)
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](https://reader034.vdocuments.pub/reader034/viewer/2022052301/551cf4355503463f7a8b5571/html5/thumbnails/11.jpg)
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](https://reader034.vdocuments.pub/reader034/viewer/2022052301/551cf4355503463f7a8b5571/html5/thumbnails/12.jpg)
SobrecargaSobrecarga
![Page 13: Lenguaje C++ Segunda parte Intro. a UML, sobrecarga, polimorfismo, herencia y Templates Ana Lila Laureano-Cruces Elena Cruz Miguel](https://reader034.vdocuments.pub/reader034/viewer/2022052301/551cf4355503463f7a8b5571/html5/thumbnails/13.jpg)
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](https://reader034.vdocuments.pub/reader034/viewer/2022052301/551cf4355503463f7a8b5571/html5/thumbnails/14.jpg)
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](https://reader034.vdocuments.pub/reader034/viewer/2022052301/551cf4355503463f7a8b5571/html5/thumbnails/15.jpg)
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](https://reader034.vdocuments.pub/reader034/viewer/2022052301/551cf4355503463f7a8b5571/html5/thumbnails/16.jpg)
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](https://reader034.vdocuments.pub/reader034/viewer/2022052301/551cf4355503463f7a8b5571/html5/thumbnails/17.jpg)
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](https://reader034.vdocuments.pub/reader034/viewer/2022052301/551cf4355503463f7a8b5571/html5/thumbnails/18.jpg)
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](https://reader034.vdocuments.pub/reader034/viewer/2022052301/551cf4355503463f7a8b5571/html5/thumbnails/19.jpg)
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](https://reader034.vdocuments.pub/reader034/viewer/2022052301/551cf4355503463f7a8b5571/html5/thumbnails/20.jpg)
PolimorfismoPolimorfismo
![Page 21: Lenguaje C++ Segunda parte Intro. a UML, sobrecarga, polimorfismo, herencia y Templates Ana Lila Laureano-Cruces Elena Cruz Miguel](https://reader034.vdocuments.pub/reader034/viewer/2022052301/551cf4355503463f7a8b5571/html5/thumbnails/21.jpg)
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](https://reader034.vdocuments.pub/reader034/viewer/2022052301/551cf4355503463f7a8b5571/html5/thumbnails/22.jpg)
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](https://reader034.vdocuments.pub/reader034/viewer/2022052301/551cf4355503463f7a8b5571/html5/thumbnails/23.jpg)
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](https://reader034.vdocuments.pub/reader034/viewer/2022052301/551cf4355503463f7a8b5571/html5/thumbnails/24.jpg)
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](https://reader034.vdocuments.pub/reader034/viewer/2022052301/551cf4355503463f7a8b5571/html5/thumbnails/25.jpg)
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](https://reader034.vdocuments.pub/reader034/viewer/2022052301/551cf4355503463f7a8b5571/html5/thumbnails/26.jpg)
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](https://reader034.vdocuments.pub/reader034/viewer/2022052301/551cf4355503463f7a8b5571/html5/thumbnails/27.jpg)
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](https://reader034.vdocuments.pub/reader034/viewer/2022052301/551cf4355503463f7a8b5571/html5/thumbnails/28.jpg)
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](https://reader034.vdocuments.pub/reader034/viewer/2022052301/551cf4355503463f7a8b5571/html5/thumbnails/29.jpg)
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](https://reader034.vdocuments.pub/reader034/viewer/2022052301/551cf4355503463f7a8b5571/html5/thumbnails/30.jpg)
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](https://reader034.vdocuments.pub/reader034/viewer/2022052301/551cf4355503463f7a8b5571/html5/thumbnails/31.jpg)
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](https://reader034.vdocuments.pub/reader034/viewer/2022052301/551cf4355503463f7a8b5571/html5/thumbnails/32.jpg)
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](https://reader034.vdocuments.pub/reader034/viewer/2022052301/551cf4355503463f7a8b5571/html5/thumbnails/33.jpg)
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](https://reader034.vdocuments.pub/reader034/viewer/2022052301/551cf4355503463f7a8b5571/html5/thumbnails/34.jpg)
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](https://reader034.vdocuments.pub/reader034/viewer/2022052301/551cf4355503463f7a8b5571/html5/thumbnails/35.jpg)
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](https://reader034.vdocuments.pub/reader034/viewer/2022052301/551cf4355503463f7a8b5571/html5/thumbnails/36.jpg)
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](https://reader034.vdocuments.pub/reader034/viewer/2022052301/551cf4355503463f7a8b5571/html5/thumbnails/37.jpg)
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](https://reader034.vdocuments.pub/reader034/viewer/2022052301/551cf4355503463f7a8b5571/html5/thumbnails/38.jpg)
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](https://reader034.vdocuments.pub/reader034/viewer/2022052301/551cf4355503463f7a8b5571/html5/thumbnails/39.jpg)
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](https://reader034.vdocuments.pub/reader034/viewer/2022052301/551cf4355503463f7a8b5571/html5/thumbnails/40.jpg)
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](https://reader034.vdocuments.pub/reader034/viewer/2022052301/551cf4355503463f7a8b5571/html5/thumbnails/41.jpg)
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](https://reader034.vdocuments.pub/reader034/viewer/2022052301/551cf4355503463f7a8b5571/html5/thumbnails/42.jpg)
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](https://reader034.vdocuments.pub/reader034/viewer/2022052301/551cf4355503463f7a8b5571/html5/thumbnails/43.jpg)
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](https://reader034.vdocuments.pub/reader034/viewer/2022052301/551cf4355503463f7a8b5571/html5/thumbnails/44.jpg)
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](https://reader034.vdocuments.pub/reader034/viewer/2022052301/551cf4355503463f7a8b5571/html5/thumbnails/45.jpg)
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](https://reader034.vdocuments.pub/reader034/viewer/2022052301/551cf4355503463f7a8b5571/html5/thumbnails/46.jpg)
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](https://reader034.vdocuments.pub/reader034/viewer/2022052301/551cf4355503463f7a8b5571/html5/thumbnails/47.jpg)
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](https://reader034.vdocuments.pub/reader034/viewer/2022052301/551cf4355503463f7a8b5571/html5/thumbnails/48.jpg)
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](https://reader034.vdocuments.pub/reader034/viewer/2022052301/551cf4355503463f7a8b5571/html5/thumbnails/49.jpg)
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](https://reader034.vdocuments.pub/reader034/viewer/2022052301/551cf4355503463f7a8b5571/html5/thumbnails/50.jpg)
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](https://reader034.vdocuments.pub/reader034/viewer/2022052301/551cf4355503463f7a8b5571/html5/thumbnails/51.jpg)
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](https://reader034.vdocuments.pub/reader034/viewer/2022052301/551cf4355503463f7a8b5571/html5/thumbnails/52.jpg)
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](https://reader034.vdocuments.pub/reader034/viewer/2022052301/551cf4355503463f7a8b5571/html5/thumbnails/53.jpg)
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](https://reader034.vdocuments.pub/reader034/viewer/2022052301/551cf4355503463f7a8b5571/html5/thumbnails/54.jpg)
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](https://reader034.vdocuments.pub/reader034/viewer/2022052301/551cf4355503463f7a8b5571/html5/thumbnails/55.jpg)
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](https://reader034.vdocuments.pub/reader034/viewer/2022052301/551cf4355503463f7a8b5571/html5/thumbnails/56.jpg)
#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](https://reader034.vdocuments.pub/reader034/viewer/2022052301/551cf4355503463f7a8b5571/html5/thumbnails/57.jpg)
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](https://reader034.vdocuments.pub/reader034/viewer/2022052301/551cf4355503463f7a8b5571/html5/thumbnails/58.jpg)
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](https://reader034.vdocuments.pub/reader034/viewer/2022052301/551cf4355503463f7a8b5571/html5/thumbnails/59.jpg)
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](https://reader034.vdocuments.pub/reader034/viewer/2022052301/551cf4355503463f7a8b5571/html5/thumbnails/60.jpg)
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(); }}