SlideShare una empresa de Scribd logo
1 de 25
Descargar para leer sin conexión
POO
HERENCIA	
  Y	
  
POLIMORFISMO.	
  
Gloria	
  Isabel	
  Bautista	
  Lasprilla
La	
  herencia	
  es	
  una	
  forma	
  de	
  reutilización	
  del	
  software	
  en	
  
la	
  que	
  se	
  crean	
  nuevas	
  clases	
  a	
  partir	
  de	
  clases	
  ya	
  
existentes.
Las	
  nuevas	
  clases	
  se	
  crean	
  por	
  medio	
  de	
  la	
  adopción	
  de	
  los	
  
atributos	
  de	
  las	
  clases	
  existentes,	
  adaptándolos	
  o	
  
mejorándolos	
  con	
  capacidades	
  que	
  las	
  nuevas	
  clases	
  
requieran.
Definición	
  
Ventajas	
  
• La	
  herencia	
  es	
  una	
  la	
  relación	
  existente	
  entre	
  dos	
  clases,
• Se	
  reduce	
  la	
  cantidad	
  de	
  código	
  en	
  cada	
  clase,
• Permite	
  definir	
  nuevas	
  clases	
  utilizando	
  como	
  base	
  clases	
  
ya	
  existentes,
• Esta	
  es	
  una	
  herramienta	
  poderosa	
  que	
  sirve	
  para	
  
producir	
  software	
  confiable,	
  	
  de	
  bajo	
  costo	
  y	
  reutilizable.
De	
  la	
  que	
  se	
  hereda La	
  que	
  hereda
Superclase Subclase
Clase	
  Padre Clase	
  hijo
Clase	
  Base	
   Clase	
  Derivada
La	
  herencia	
  se	
  apoya	
  en	
  el	
  significado	
  de	
  ese	
  concepto	
  en	
  la	
  
vida	
  diaria. Así,	
  las	
  clases	
  básicas (base	
  class) o	
  
fundamentales	
  se	
  dividen	
  en	
  subclases (derived class).
Terminología	
  
Herencia	
  Simple
Circulo
Esfera cilindro
R
R
R
Característica	
  común:	
  Radio	
  
El	
  circulo:	
  La	
  clase	
  base
El	
  cilindro	
  y	
  la	
  esfera:	
  Las	
  clases	
  derivadas
El	
  principio	
  en	
  que	
  se	
  basa	
  la	
  división	
  de	
  clases	
  es	
  la	
  jerarquía,	
  
compartiendo	
  características	
  comunes.
Las	
  flechas	
  apuntan	
  de	
  la	
  clase	
  derivada	
  a	
  la	
  clase	
  base.
¿Cómo	
  derivar	
  una	
  clase	
  
a	
  partir	
  de	
  otra?
Una	
  clase	
  derivada	
  tiene	
  la	
  forma	
  que	
  cualquier	
  otra	
  clase	
  en	
  cuanto	
  
que	
  consta	
  de	
  una	
  declaración	
  y	
  una	
  implementación.	
  La	
  diferencia	
  
estriba	
  en	
  la	
  primera	
  línea	
  de	
  la	
  sección	
  declaratoria.	
  Para	
  una	
  clase	
  
derivada	
  dicha	
  línea	
  se	
  extiende	
  para	
  incluir	
  una	
  especificación	
  de	
  
acceso	
  y	
  un	
  nombre	
  de	
  la	
  clase	
  base	
  y	
  en	
  la	
  siguiente	
  forma:
class nombreClase	
  : acceso-­‐a-­‐clase nombreClaseBase
class Cilindro	
  :	
  public Circulo
{
//aquí	
  se	
  agrega	
  cualquier	
  dato	
  adicional	
  y	
  los	
  miembros	
  función
};
Private, Public , Protected
Acceso	
  a	
  Clase	
  
public,	
  protected y	
  private
La	
  clase	
  base	
  podría	
  heredar	
  a	
  través	
  de	
  herencia	
  public,	
  
protected o	
  private,	
  el	
  uso	
  de	
  la	
  herencia	
  protected y	
  
private es	
  raro	
  y	
  deben	
  utilizarse	
  con	
  mucho	
  cuidado;	
  por	
  lo	
  
general	
  se	
  utiliza	
  la	
  herencia	
  public.
Significa	
  que	
  una	
  clase	
  derivada	
  tiene	
  acceso	
  a	
  los	
  
elementos	
  públicos	
  y	
  protegido	
  de	
  su	
  clase	
  base,	
  la	
  
herencia	
  publica	
  se	
  representa	
  con	
  el	
  especificador	
  
class clasederivada	
  :	
  public clasebase	
  {	
  
public:
//	
  	
  Sección	
  publica
private:
//	
  Sección	
  privada	
  
};
Herencia	
  public
Polimorfismo
• Una	
  de	
  las	
  características	
  más	
  importantes	
  de	
  la	
  
programación	
  orientada	
  a	
  objetos	
  es	
  la	
  capacidad	
  de	
  que	
  
diferentes	
  objetos	
  responden	
  a	
  órdenes	
  similares	
  de	
  modo	
  
diferentes.	
  
• Identificador	
  de	
  mensaje	
  y	
  operadores	
  sobrecargados.	
  
• El	
  identificador	
  de	
  mensaje	
  y	
  operador	
  invocan	
  una	
  
operación	
  específica	
  sobre	
  un	
  objeto.	
  
• Cada	
  uno	
  establece	
  la	
  selección	
  del	
  significado	
  uniforme	
  de	
  
la	
  operación	
  en	
  particular	
  que	
  se	
  desea	
  realizar.
• En	
  términos	
  generales,	
  Polimorfismo se	
  define	
  como	
  la	
  
calidad	
  o	
  estado	
  de	
  ser	
  capaz	
  de	
  asumir	
  formas	
  diferentes.
Polimorfismo
(Ejemplo	
  Sobrecarga)
class complejo	
  //Nombre	
  de	
  la	
  clase
{
public :
complejo(	
  double =	
  0.0,	
  double =	
  0.0	
  );	
  //Constructor
complejo	
  operator	
  + (	
  const complejo	
  &	
  )	
  const;	
  //Sobrecarga
private:
double real,	
  imaginario;	
  
};
complejo::complejo(	
  double a,	
  double b	
  )	
  //	
  Constructor	
  de	
  la	
  clase	
  {	
  	
  
real	
  =	
  a;	
  imaginario	
  =	
  b;	
  }
complejo	
  complejo::operator	
  + (const complejo	
  &a)	
  const	
  {	
  
complejo	
  c;	
  //Define	
  un	
  objeto	
  complejo
c.real	
  =	
  real	
  +	
  a.real;	
  //Define	
  de	
  la	
  operación	
  llevada	
  a	
  cabo	
  por	
  el	
  operador
c.imaginario	
  =	
  imaginario+a.imaginario;
return c;	
  //Retorno	
  del	
  valor	
  adquirido }
Donde se sobrecarga el operador es
donde se aplica el polimorfismo.
Ejemplo	
  de	
  Herencia	
  Simple
class Barco	
  {
protected: char*	
  nombre;	
  float	
  peso;	
  
public: //Constructores	
  y	
  demás	
  funciones	
  básicas	
  de	
  Barco.	
  
};	
  
class Carguero:	
  public	
  Barco	
   //	
  Se	
  especifica	
  que	
  hereda	
  de	
  Barco.
{
private: float	
  carga;	
  //faltaría	
  el	
  resto	
  de	
  cosas	
  
};
class	
  Acorazado:	
  public Barco	
  
{	
  
private: int	
  numeroArmas;	
  int	
  Soldados;	
  //	
  El	
  resto	
  de	
  cosas	
  
};
Ejemplo	
  de	
  Herencia	
  Simple
Clase	
  Base:	
  Clase	
  Figura
class Figura{
public:
virtual double obtenerArea()	
  const;
virtual double obtenerVolumen()	
  const;
virtual	
  string obtenerNombre()	
  const =	
  0;
virtual void imprimir()	
  const =	
  0;
};
double Figura::obtenerArea()	
  const
{
return 0.0;
}
double Figura::obtenerVolumen()	
  const
{
return 0.0;
}
Métodos	
  virtual
Haciendo	
  uso	
  del	
  polimorfismo
#include ”Figura.h”
class Punto :	
  public Figura {
public:
Punto(int =	
  0,	
  int =	
  0);
void establecerX(int);
int obtenerX()	
  const;
void establecerY(int);
int obtenerY()	
  const;
virtual string obtenerNombre()	
  const;
virtual void imprimir()	
  const;
private:
int x;
int y;
};
Clase	
  Punto	
  (Hereda	
  de	
  Figura)
Punto::Punto(int valorX,	
  int valorY)	
  
:	
  x(valorX),	
  y(valorY) {
}
void Punto::establecerX(int valorX)
{
x	
  =	
  valorX;
}
int Punto::obtenerX()	
  const
{
return x;
}
void Punto::establecerY(int valorY)
{
y	
  =	
  valorY;
}
int Punto::obtenerY()	
  const
{
return y;
}
string Punto::obtenerNombre()	
  const
{
return "Punto";
}
void Punto::imprimir()	
  const
{
cout<<"["<<obtenerX()<<",	
  "<<obtenerY()<<"]";
}
Clase	
  Punto
#include "Punto.h”
class Circulo:	
  public Punto {
public:
Circulo(int =	
  0,	
  int =	
  0,	
  double =	
  0.0);
void establecerRadio(double);
double obtenerRadio()	
  const;
double obtenerDiametro()	
  const;
double obtenerCircunferencia()	
  const;
virtual double obtenerArea()	
  const;
virtual string obtenerNombre()	
  const;
virtual void imprimir()	
  const;
private:
double radio;
};
Clase	
  Circulo	
  (Hereda	
  de	
  Punto)
Circulo::Circulo(int valorX,	
  int valorY,	
  double valorRadio):Punto(valorX,	
  valorY)
{
establecerRadio(valorRadio);
}
void Circulo::establecerRadio(double valorRadio)
{
radio	
  =	
  (valorRadio <	
  0.0 ?	
  0.0 :	
  valorRadio);
}
double Circulo::obtenerRadio()	
  const
{
return radio;
}
double Circulo::obtenerDiametro()	
  const
{
return 2 *	
  obtenerRadio();
}
Clase	
  Circulo
double Circulo::obtenerCircunferencia()	
  const {
return 3.14159 *	
  obtenerDiametro();
}
double Circulo::obtenerArea()	
  const {
return 3.14159 *	
  obtenerRadio()	
  *	
  obtenerRadio();
}
string Circulo::obtenerNombre()	
  const {
return "Circulo";
}
void Circulo::imprimir()	
  const {
cout<<"nCentro =	
  ";
Punto::imprimir();
cout<<"nRadio =	
  "<<obtenerRadio();
}
Clase	
  Circulo
#include "Circulo.h"
class Cilindro:	
  public Circulo {
public:
Cilindro(int =	
  0,	
  int =	
  0,	
  double =	
  0.0,	
  double =	
  0.0);
void establecerAltura(double);
double obtenerAltura()	
  const;
virtual double obtenerArea()	
  const;
virtual double obtenerVolumen()	
  const;
virtual string obtenerNombre()	
  const;
virtual void imprimir()	
  const;
private:
double altura;
};
Clase	
  Cilindro	
  (Hereda	
  de	
  Circulo)
Cilindro::Cilindro(int valorX,	
  int valorY,	
  double valorRadio,	
  double valorAltura)
:	
  Circulo(valorX,	
  valorY,	
  valorRadio)	
  {
establecerAltura(valorAltura);
}
void Cilindro::establecerAltura(double valorAltura)	
  {
altura	
  =	
  (valorAltura <	
  0.0 ?	
  0.0 :	
  valorAltura);
}
double Cilindro::obtenerAltura()	
  const {
return altura;
}
double Cilindro::obtenerArea()	
  const {
return 2 *	
  Circulo::obtenerArea()	
  +	
  obtenerCircunferencia()	
  *	
  obtenerAltura();
}
Clase	
  Cilindro
double Cilindro::obtenerVolumen()	
  const
{
return Circulo::obtenerArea()	
  *	
  obtenerAltura();
}
string Cilindro::obtenerNombre()	
  const
{
return "Cilindro";
}
void Cilindro::imprimir()	
  const
{
Circulo::imprimir();
cout<<"nAltura =	
  "<<obtenerAltura();
}
Clase	
  Cilindro
#include "Cilindro.h"
int main()	
  {
Punto punto1(7,	
  11);
Circulo circulo1(22,	
  8,	
  3.5);
Cilindro cilindro1(10,	
  10,	
  3.3,	
  10);
cout<<punto1.obtenerNombre()<<":	
  ";	
  punto1.imprimir();
cout<<"nn";
cout<<circulo1.obtenerNombre()<<":	
  ";	
  circulo1.imprimir();
cout<<"nn";
cout<<cilindro1.obtenerNombre()<<":	
  ";	
  cilindro1.imprimir();
cout<<"nn";
return 0;
}
Un	
  ejemplo	
  de	
  ejecutable
#include <vector>
#include "Cilindro.h"
void virtualViaApuntador(const Figura	
  *);
void virtualViaReferencia(const Figura	
  &);
int main()
{
Punto punto1(7,	
  11);
Circulo circulo1(22,	
  8,	
  3.5);
Cilindro cilindro1(10,	
  10,	
  3.3,	
  10);
/*Crear	
  vector	
  de	
  tres	
  apuntadores	
  de	
  la	
  clase	
  base*/
vector	
  <Figura	
  *>	
  figuraVector(3);
figuraVector[0]	
  =	
  &punto1;
figuraVector[1]	
  =	
  &circulo1;
figuraVector[2]	
  =	
  &cilindro1;
Otro	
  ejemplo	
  de	
  ejecutable
cout<<"nLLAMADAS A	
  FUNCIONES	
  VIRTUALES";
cout<<"nMEDIANTE APUNTADORES	
  DE	
  LA	
  CLASE	
  BASEnn";
for(int i	
  =	
  0;	
  i	
  <	
  figuraVector.size();	
  i++)
virtualViaApuntador(figuraVector[i]);
cout<<"nLLAMADAS A	
  FUNCIONES	
  VIRTUALES";
cout<<"nMEDIANTE REFERENCIAS	
  DE	
  LA	
  CLASE	
  BASEnn";
for(int j	
  =	
  0;	
  j	
  <	
  figuraVector.size();	
  j++)
virtualViaReferencia(*figuraVector[j]);
return 0;
}
void virtualViaApuntador(const Figura	
  *ptrClaseBase)
{
cout<<ptrClaseBase-­‐>obtenerNombre()<<":	
  ";
ptrClaseBase-­‐>imprimir();
cout<<"nArea =	
  "<<ptrClaseBase-­‐>obtenerArea();
cout<<"nVolumen =	
  "<<ptrClaseBase-­‐>obtenerVolumen();
cout<<"nn";
}
void virtualViaReferencia(const Figura	
  &refClaseBase)
{
cout<<refClaseBase.obtenerNombre()<<":	
  ";
refClaseBase.imprimir();
cout<<"nArea =	
  "<<refClaseBase.obtenerArea();
cout<<"nVolumen =	
  "<<refClaseBase.obtenerVolumen();
cout<<"nn";
}
Las	
  funciones	
  virtual
¿Preguntas?
Gloria	
  Isabel	
  Bautista	
  Lasprilla
gbautist@unitecnologica.edu.co
gloria@utbvirtual.edu.co
Bautistalasprilla.gloriaisabel@gmail.com

Más contenido relacionado

La actualidad más candente

Introducción a php
Introducción a phpIntroducción a php
Introducción a phpalan moreno
 
Programacion orientada a objetos Unidad 1-intro al paradigma poo
Programacion orientada a objetos Unidad 1-intro al paradigma pooProgramacion orientada a objetos Unidad 1-intro al paradigma poo
Programacion orientada a objetos Unidad 1-intro al paradigma pooJosé Antonio Sandoval Acosta
 
Estructura fisica y logica de active directory
Estructura fisica y logica de active directoryEstructura fisica y logica de active directory
Estructura fisica y logica de active directoryEduardo J Onofre
 
Curso Java Inicial 5 Relaciones Entre Objetos
Curso Java Inicial   5 Relaciones Entre ObjetosCurso Java Inicial   5 Relaciones Entre Objetos
Curso Java Inicial 5 Relaciones Entre ObjetosEmilio Aviles Avila
 
Propiedades De La Poo
Propiedades De La PooPropiedades De La Poo
Propiedades De La Pooda4
 
Clases y objetos de java
Clases y objetos de javaClases y objetos de java
Clases y objetos de javainnovalabcun
 
Programación Orientada a Objetos - herencia y polimorfismo
Programación Orientada a Objetos - herencia y polimorfismoProgramación Orientada a Objetos - herencia y polimorfismo
Programación Orientada a Objetos - herencia y polimorfismoAlvaro Enrique Ruano
 
Estructura de datos: lista, pilas y colas
Estructura de datos: lista, pilas y colasEstructura de datos: lista, pilas y colas
Estructura de datos: lista, pilas y colasHuascar Génere
 
Programación Orientada a Objetos - Otras relaciones entre clases
Programación Orientada a Objetos - Otras relaciones entre clasesProgramación Orientada a Objetos - Otras relaciones entre clases
Programación Orientada a Objetos - Otras relaciones entre clasesAlvaro Enrique Ruano
 
02 python Programación orientada a objetos y funcional
02 python Programación orientada a objetos y funcional02 python Programación orientada a objetos y funcional
02 python Programación orientada a objetos y funcionalJuan Rodríguez
 
Herencia y Polimorfismo en Java
Herencia y Polimorfismo en JavaHerencia y Polimorfismo en Java
Herencia y Polimorfismo en JavaAme Linares Vivas
 
Programacion Orientada a Objetos en python
Programacion Orientada a Objetos en pythonProgramacion Orientada a Objetos en python
Programacion Orientada a Objetos en pythonwozgeass
 

La actualidad más candente (20)

Introducción a php
Introducción a phpIntroducción a php
Introducción a php
 
Programacion orientada a objetos Unidad 1-intro al paradigma poo
Programacion orientada a objetos Unidad 1-intro al paradigma pooProgramacion orientada a objetos Unidad 1-intro al paradigma poo
Programacion orientada a objetos Unidad 1-intro al paradigma poo
 
Estructura fisica y logica de active directory
Estructura fisica y logica de active directoryEstructura fisica y logica de active directory
Estructura fisica y logica de active directory
 
Curso Java Inicial 5 Relaciones Entre Objetos
Curso Java Inicial   5 Relaciones Entre ObjetosCurso Java Inicial   5 Relaciones Entre Objetos
Curso Java Inicial 5 Relaciones Entre Objetos
 
6 Curso de POO en Java - clases y objetos
6  Curso de POO en Java - clases y objetos6  Curso de POO en Java - clases y objetos
6 Curso de POO en Java - clases y objetos
 
Introduccion a python 3
Introduccion a python 3Introduccion a python 3
Introduccion a python 3
 
Propiedades De La Poo
Propiedades De La PooPropiedades De La Poo
Propiedades De La Poo
 
Clases y objetos de java
Clases y objetos de javaClases y objetos de java
Clases y objetos de java
 
Programación Orientada a Objetos - herencia y polimorfismo
Programación Orientada a Objetos - herencia y polimorfismoProgramación Orientada a Objetos - herencia y polimorfismo
Programación Orientada a Objetos - herencia y polimorfismo
 
Programación 3: listas enlazadas
Programación 3: listas enlazadasProgramación 3: listas enlazadas
Programación 3: listas enlazadas
 
14 Curso de POO en java - estructuras condicionales
14 Curso de POO en java - estructuras condicionales14 Curso de POO en java - estructuras condicionales
14 Curso de POO en java - estructuras condicionales
 
Estructura de datos: lista, pilas y colas
Estructura de datos: lista, pilas y colasEstructura de datos: lista, pilas y colas
Estructura de datos: lista, pilas y colas
 
Recursividad
RecursividadRecursividad
Recursividad
 
Encapsulamiento
EncapsulamientoEncapsulamiento
Encapsulamiento
 
5.manejo de excepciones
5.manejo de excepciones5.manejo de excepciones
5.manejo de excepciones
 
P.O.O.
P.O.O.P.O.O.
P.O.O.
 
Programación Orientada a Objetos - Otras relaciones entre clases
Programación Orientada a Objetos - Otras relaciones entre clasesProgramación Orientada a Objetos - Otras relaciones entre clases
Programación Orientada a Objetos - Otras relaciones entre clases
 
02 python Programación orientada a objetos y funcional
02 python Programación orientada a objetos y funcional02 python Programación orientada a objetos y funcional
02 python Programación orientada a objetos y funcional
 
Herencia y Polimorfismo en Java
Herencia y Polimorfismo en JavaHerencia y Polimorfismo en Java
Herencia y Polimorfismo en Java
 
Programacion Orientada a Objetos en python
Programacion Orientada a Objetos en pythonProgramacion Orientada a Objetos en python
Programacion Orientada a Objetos en python
 

Similar a Herencia y polimorfismo

programacion orientada a objetos
programacion orientada a objetosprogramacion orientada a objetos
programacion orientada a objetosale8819
 
Java2-Clases.ppt
Java2-Clases.pptJava2-Clases.ppt
Java2-Clases.ppterosslo
 
programacion orientada a objetos en visual basic net
programacion orientada a objetos en visual basic netprogramacion orientada a objetos en visual basic net
programacion orientada a objetos en visual basic netpp mm
 
Introducción a la programación y la informática. Tema 2
Introducción a la programación y la informática. Tema 2Introducción a la programación y la informática. Tema 2
Introducción a la programación y la informática. Tema 2Andres Garcia Garcia
 
El lenguaje C++ (1).ppt
El lenguaje C++ (1).pptEl lenguaje C++ (1).ppt
El lenguaje C++ (1).pptJOSECASHUUG
 
Programación orientada a objetos (Herencia)
Programación orientada a objetos (Herencia)Programación orientada a objetos (Herencia)
Programación orientada a objetos (Herencia)KareliaRivas
 
instrumentos de trabajo
instrumentos de trabajoinstrumentos de trabajo
instrumentos de trabajojorpical
 
Polimorfismo ppt
Polimorfismo  pptPolimorfismo  ppt
Polimorfismo pptivanvillar7
 
Net1 oop vbnet
Net1 oop vbnetNet1 oop vbnet
Net1 oop vbnetjhordy2000
 
UD2-ConceptosBasicos.pdf
UD2-ConceptosBasicos.pdfUD2-ConceptosBasicos.pdf
UD2-ConceptosBasicos.pdfChiquteRobledo
 
Lenguajes de Programación: Herencia, Polimorfismo Y UML
Lenguajes de Programación: Herencia, Polimorfismo Y UMLLenguajes de Programación: Herencia, Polimorfismo Y UML
Lenguajes de Programación: Herencia, Polimorfismo Y UMLLuis Fernando Aguas Bucheli
 
Investigacion v unidad
Investigacion v unidadInvestigacion v unidad
Investigacion v unidadElena Perz
 

Similar a Herencia y polimorfismo (20)

Tema2
Tema2Tema2
Tema2
 
Poo
PooPoo
Poo
 
Programación C++.pdf
Programación C++.pdfProgramación C++.pdf
Programación C++.pdf
 
programacion orientada a objetos
programacion orientada a objetosprogramacion orientada a objetos
programacion orientada a objetos
 
Java2-Clases.ppt
Java2-Clases.pptJava2-Clases.ppt
Java2-Clases.ppt
 
Java2-Clases.ppt
Java2-Clases.pptJava2-Clases.ppt
Java2-Clases.ppt
 
programacion orientada a objetos en visual basic net
programacion orientada a objetos en visual basic netprogramacion orientada a objetos en visual basic net
programacion orientada a objetos en visual basic net
 
Introducción a la programación y la informática. Tema 2
Introducción a la programación y la informática. Tema 2Introducción a la programación y la informática. Tema 2
Introducción a la programación y la informática. Tema 2
 
El lenguaje C++ (1).ppt
El lenguaje C++ (1).pptEl lenguaje C++ (1).ppt
El lenguaje C++ (1).ppt
 
El lenguaje C++.ppt
El lenguaje C++.pptEl lenguaje C++.ppt
El lenguaje C++.ppt
 
Programación orientada a objetos (Herencia)
Programación orientada a objetos (Herencia)Programación orientada a objetos (Herencia)
Programación orientada a objetos (Herencia)
 
instrumentos de trabajo
instrumentos de trabajoinstrumentos de trabajo
instrumentos de trabajo
 
Polimorfismo ppt
Polimorfismo  pptPolimorfismo  ppt
Polimorfismo ppt
 
Polimorfismo
PolimorfismoPolimorfismo
Polimorfismo
 
Net1 oop vbnet
Net1 oop vbnetNet1 oop vbnet
Net1 oop vbnet
 
UD2-ConceptosBasicos.pdf
UD2-ConceptosBasicos.pdfUD2-ConceptosBasicos.pdf
UD2-ConceptosBasicos.pdf
 
5poo
5poo5poo
5poo
 
Tema5
Tema5Tema5
Tema5
 
Lenguajes de Programación: Herencia, Polimorfismo Y UML
Lenguajes de Programación: Herencia, Polimorfismo Y UMLLenguajes de Programación: Herencia, Polimorfismo Y UML
Lenguajes de Programación: Herencia, Polimorfismo Y UML
 
Investigacion v unidad
Investigacion v unidadInvestigacion v unidad
Investigacion v unidad
 

Más de Gloria Isabel Bautista Lasprilla (13)

Complejidad computacional 1
Complejidad computacional 1Complejidad computacional 1
Complejidad computacional 1
 
Profesora Asociada Facultad de Ingeniería UTB
Profesora Asociada Facultad de Ingeniería UTBProfesora Asociada Facultad de Ingeniería UTB
Profesora Asociada Facultad de Ingeniería UTB
 
Complejidad computacional selección
Complejidad computacional   selecciónComplejidad computacional   selección
Complejidad computacional selección
 
El apuntador this
El apuntador this El apuntador this
El apuntador this
 
Poster - presentación
Poster - presentaciónPoster - presentación
Poster - presentación
 
Recorridos en ABB
Recorridos en ABB Recorridos en ABB
Recorridos en ABB
 
Abb árboles de búsqueda binaria
Abb árboles de búsqueda binariaAbb árboles de búsqueda binaria
Abb árboles de búsqueda binaria
 
Definición de clases en POO
Definición de clases en POODefinición de clases en POO
Definición de clases en POO
 
Poo presentacion
Poo presentacionPoo presentacion
Poo presentacion
 
Presentacion encuentro gloria bautista
Presentacion encuentro   gloria bautistaPresentacion encuentro   gloria bautista
Presentacion encuentro gloria bautista
 
Herencia y polimorfismo
Herencia y polimorfismoHerencia y polimorfismo
Herencia y polimorfismo
 
Modelo curricular por ciclos propedéuticos, programas técnicos y tecnológicos
Modelo curricular por ciclos propedéuticos, programas técnicos y tecnológicosModelo curricular por ciclos propedéuticos, programas técnicos y tecnológicos
Modelo curricular por ciclos propedéuticos, programas técnicos y tecnológicos
 
Articulación Educación Media con Superior
Articulación Educación Media con SuperiorArticulación Educación Media con Superior
Articulación Educación Media con Superior
 

Herencia y polimorfismo

  • 1. POO HERENCIA  Y   POLIMORFISMO.   Gloria  Isabel  Bautista  Lasprilla
  • 2. La  herencia  es  una  forma  de  reutilización  del  software  en   la  que  se  crean  nuevas  clases  a  partir  de  clases  ya   existentes. Las  nuevas  clases  se  crean  por  medio  de  la  adopción  de  los   atributos  de  las  clases  existentes,  adaptándolos  o   mejorándolos  con  capacidades  que  las  nuevas  clases   requieran. Definición  
  • 3. Ventajas   • La  herencia  es  una  la  relación  existente  entre  dos  clases, • Se  reduce  la  cantidad  de  código  en  cada  clase, • Permite  definir  nuevas  clases  utilizando  como  base  clases   ya  existentes, • Esta  es  una  herramienta  poderosa  que  sirve  para   producir  software  confiable,    de  bajo  costo  y  reutilizable.
  • 4. De  la  que  se  hereda La  que  hereda Superclase Subclase Clase  Padre Clase  hijo Clase  Base   Clase  Derivada La  herencia  se  apoya  en  el  significado  de  ese  concepto  en  la   vida  diaria. Así,  las  clases  básicas (base  class) o   fundamentales  se  dividen  en  subclases (derived class). Terminología  
  • 5. Herencia  Simple Circulo Esfera cilindro R R R Característica  común:  Radio   El  circulo:  La  clase  base El  cilindro  y  la  esfera:  Las  clases  derivadas El  principio  en  que  se  basa  la  división  de  clases  es  la  jerarquía,   compartiendo  características  comunes. Las  flechas  apuntan  de  la  clase  derivada  a  la  clase  base.
  • 6. ¿Cómo  derivar  una  clase   a  partir  de  otra? Una  clase  derivada  tiene  la  forma  que  cualquier  otra  clase  en  cuanto   que  consta  de  una  declaración  y  una  implementación.  La  diferencia   estriba  en  la  primera  línea  de  la  sección  declaratoria.  Para  una  clase   derivada  dicha  línea  se  extiende  para  incluir  una  especificación  de   acceso  y  un  nombre  de  la  clase  base  y  en  la  siguiente  forma: class nombreClase  : acceso-­‐a-­‐clase nombreClaseBase class Cilindro  :  public Circulo { //aquí  se  agrega  cualquier  dato  adicional  y  los  miembros  función }; Private, Public , Protected
  • 7. Acceso  a  Clase   public,  protected y  private La  clase  base  podría  heredar  a  través  de  herencia  public,   protected o  private,  el  uso  de  la  herencia  protected y   private es  raro  y  deben  utilizarse  con  mucho  cuidado;  por  lo   general  se  utiliza  la  herencia  public.
  • 8. Significa  que  una  clase  derivada  tiene  acceso  a  los   elementos  públicos  y  protegido  de  su  clase  base,  la   herencia  publica  se  representa  con  el  especificador   class clasederivada  :  public clasebase  {   public: //    Sección  publica private: //  Sección  privada   }; Herencia  public
  • 9. Polimorfismo • Una  de  las  características  más  importantes  de  la   programación  orientada  a  objetos  es  la  capacidad  de  que   diferentes  objetos  responden  a  órdenes  similares  de  modo   diferentes.   • Identificador  de  mensaje  y  operadores  sobrecargados.   • El  identificador  de  mensaje  y  operador  invocan  una   operación  específica  sobre  un  objeto.   • Cada  uno  establece  la  selección  del  significado  uniforme  de   la  operación  en  particular  que  se  desea  realizar. • En  términos  generales,  Polimorfismo se  define  como  la   calidad  o  estado  de  ser  capaz  de  asumir  formas  diferentes.
  • 10. Polimorfismo (Ejemplo  Sobrecarga) class complejo  //Nombre  de  la  clase { public : complejo(  double =  0.0,  double =  0.0  );  //Constructor complejo  operator  + (  const complejo  &  )  const;  //Sobrecarga private: double real,  imaginario;   }; complejo::complejo(  double a,  double b  )  //  Constructor  de  la  clase  {     real  =  a;  imaginario  =  b;  } complejo  complejo::operator  + (const complejo  &a)  const  {   complejo  c;  //Define  un  objeto  complejo c.real  =  real  +  a.real;  //Define  de  la  operación  llevada  a  cabo  por  el  operador c.imaginario  =  imaginario+a.imaginario; return c;  //Retorno  del  valor  adquirido } Donde se sobrecarga el operador es donde se aplica el polimorfismo.
  • 11. Ejemplo  de  Herencia  Simple class Barco  { protected: char*  nombre;  float  peso;   public: //Constructores  y  demás  funciones  básicas  de  Barco.   };   class Carguero:  public  Barco   //  Se  especifica  que  hereda  de  Barco. { private: float  carga;  //faltaría  el  resto  de  cosas   }; class  Acorazado:  public Barco   {   private: int  numeroArmas;  int  Soldados;  //  El  resto  de  cosas   };
  • 12. Ejemplo  de  Herencia  Simple Clase  Base:  Clase  Figura class Figura{ public: virtual double obtenerArea()  const; virtual double obtenerVolumen()  const; virtual  string obtenerNombre()  const =  0; virtual void imprimir()  const =  0; }; double Figura::obtenerArea()  const { return 0.0; } double Figura::obtenerVolumen()  const { return 0.0; } Métodos  virtual Haciendo  uso  del  polimorfismo
  • 13. #include ”Figura.h” class Punto :  public Figura { public: Punto(int =  0,  int =  0); void establecerX(int); int obtenerX()  const; void establecerY(int); int obtenerY()  const; virtual string obtenerNombre()  const; virtual void imprimir()  const; private: int x; int y; }; Clase  Punto  (Hereda  de  Figura)
  • 14. Punto::Punto(int valorX,  int valorY)   :  x(valorX),  y(valorY) { } void Punto::establecerX(int valorX) { x  =  valorX; } int Punto::obtenerX()  const { return x; } void Punto::establecerY(int valorY) { y  =  valorY; } int Punto::obtenerY()  const { return y; } string Punto::obtenerNombre()  const { return "Punto"; } void Punto::imprimir()  const { cout<<"["<<obtenerX()<<",  "<<obtenerY()<<"]"; } Clase  Punto
  • 15. #include "Punto.h” class Circulo:  public Punto { public: Circulo(int =  0,  int =  0,  double =  0.0); void establecerRadio(double); double obtenerRadio()  const; double obtenerDiametro()  const; double obtenerCircunferencia()  const; virtual double obtenerArea()  const; virtual string obtenerNombre()  const; virtual void imprimir()  const; private: double radio; }; Clase  Circulo  (Hereda  de  Punto)
  • 16. Circulo::Circulo(int valorX,  int valorY,  double valorRadio):Punto(valorX,  valorY) { establecerRadio(valorRadio); } void Circulo::establecerRadio(double valorRadio) { radio  =  (valorRadio <  0.0 ?  0.0 :  valorRadio); } double Circulo::obtenerRadio()  const { return radio; } double Circulo::obtenerDiametro()  const { return 2 *  obtenerRadio(); } Clase  Circulo
  • 17. double Circulo::obtenerCircunferencia()  const { return 3.14159 *  obtenerDiametro(); } double Circulo::obtenerArea()  const { return 3.14159 *  obtenerRadio()  *  obtenerRadio(); } string Circulo::obtenerNombre()  const { return "Circulo"; } void Circulo::imprimir()  const { cout<<"nCentro =  "; Punto::imprimir(); cout<<"nRadio =  "<<obtenerRadio(); } Clase  Circulo
  • 18. #include "Circulo.h" class Cilindro:  public Circulo { public: Cilindro(int =  0,  int =  0,  double =  0.0,  double =  0.0); void establecerAltura(double); double obtenerAltura()  const; virtual double obtenerArea()  const; virtual double obtenerVolumen()  const; virtual string obtenerNombre()  const; virtual void imprimir()  const; private: double altura; }; Clase  Cilindro  (Hereda  de  Circulo)
  • 19. Cilindro::Cilindro(int valorX,  int valorY,  double valorRadio,  double valorAltura) :  Circulo(valorX,  valorY,  valorRadio)  { establecerAltura(valorAltura); } void Cilindro::establecerAltura(double valorAltura)  { altura  =  (valorAltura <  0.0 ?  0.0 :  valorAltura); } double Cilindro::obtenerAltura()  const { return altura; } double Cilindro::obtenerArea()  const { return 2 *  Circulo::obtenerArea()  +  obtenerCircunferencia()  *  obtenerAltura(); } Clase  Cilindro
  • 20. double Cilindro::obtenerVolumen()  const { return Circulo::obtenerArea()  *  obtenerAltura(); } string Cilindro::obtenerNombre()  const { return "Cilindro"; } void Cilindro::imprimir()  const { Circulo::imprimir(); cout<<"nAltura =  "<<obtenerAltura(); } Clase  Cilindro
  • 21. #include "Cilindro.h" int main()  { Punto punto1(7,  11); Circulo circulo1(22,  8,  3.5); Cilindro cilindro1(10,  10,  3.3,  10); cout<<punto1.obtenerNombre()<<":  ";  punto1.imprimir(); cout<<"nn"; cout<<circulo1.obtenerNombre()<<":  ";  circulo1.imprimir(); cout<<"nn"; cout<<cilindro1.obtenerNombre()<<":  ";  cilindro1.imprimir(); cout<<"nn"; return 0; } Un  ejemplo  de  ejecutable
  • 22. #include <vector> #include "Cilindro.h" void virtualViaApuntador(const Figura  *); void virtualViaReferencia(const Figura  &); int main() { Punto punto1(7,  11); Circulo circulo1(22,  8,  3.5); Cilindro cilindro1(10,  10,  3.3,  10); /*Crear  vector  de  tres  apuntadores  de  la  clase  base*/ vector  <Figura  *>  figuraVector(3); figuraVector[0]  =  &punto1; figuraVector[1]  =  &circulo1; figuraVector[2]  =  &cilindro1; Otro  ejemplo  de  ejecutable
  • 23. cout<<"nLLAMADAS A  FUNCIONES  VIRTUALES"; cout<<"nMEDIANTE APUNTADORES  DE  LA  CLASE  BASEnn"; for(int i  =  0;  i  <  figuraVector.size();  i++) virtualViaApuntador(figuraVector[i]); cout<<"nLLAMADAS A  FUNCIONES  VIRTUALES"; cout<<"nMEDIANTE REFERENCIAS  DE  LA  CLASE  BASEnn"; for(int j  =  0;  j  <  figuraVector.size();  j++) virtualViaReferencia(*figuraVector[j]); return 0; }
  • 24. void virtualViaApuntador(const Figura  *ptrClaseBase) { cout<<ptrClaseBase-­‐>obtenerNombre()<<":  "; ptrClaseBase-­‐>imprimir(); cout<<"nArea =  "<<ptrClaseBase-­‐>obtenerArea(); cout<<"nVolumen =  "<<ptrClaseBase-­‐>obtenerVolumen(); cout<<"nn"; } void virtualViaReferencia(const Figura  &refClaseBase) { cout<<refClaseBase.obtenerNombre()<<":  "; refClaseBase.imprimir(); cout<<"nArea =  "<<refClaseBase.obtenerArea(); cout<<"nVolumen =  "<<refClaseBase.obtenerVolumen(); cout<<"nn"; } Las  funciones  virtual
  • 25. ¿Preguntas? Gloria  Isabel  Bautista  Lasprilla gbautist@unitecnologica.edu.co gloria@utbvirtual.edu.co Bautistalasprilla.gloriaisabel@gmail.com