SlideShare una empresa de Scribd logo
1 de 41
Diseño y Programación
Orientada a Objetos
Herencia
TEMA # 2: Herencia y Polimorfismo
Profesor: MSc. José Luis Alonso
Correo: jl.alonso@ce.pucmm.edu.do
Contenido 1ra parte
• Herencia
• Relaciones que la definen
• Representación en UML
• Implementación en Java
Categorías de objetos
Animal
Mamífero
Cánido
Perro Lobo
Persona
Comerciante
Florista
•iguales características
•igual comportamiento
Objetos
de una
categoría
Animal
Mamífero
Cánido
Perro Lobo
Persona
Comerciante
Florista
Relaciones de herencia
Es–un o es-un-tipo-de: presente
entre dos conceptos cuando uno es
un ejemplar especializado del otro.
Ejemplos:
• Un Perro es un Mamífero
• Un Círculo es una Figura
Generalización/especialización
Herencia
Forma de reutilización del software.
Se crean nuevas clases (hijas,
derivadas) a partir de clases
existentes (base, ancestros).
A través de la herencia las clases
derivadas "heredan", o sea, tienen
acceso a los datos y comporta-
miento de la clase base.
Reperesentación en UML
Propiedades
• No conmutativa
• Transitiva
• Extensiva
Generalaización/
especialización
A
B C
D
Herencia  reutilización
• clase derivada hereda todas las
características y comportamiento,
datos y métodos, de sus ancestros
directos e indirectos.
• clase derivada puede agregar nuevas
características y comportamiento,
datos y métodos.
• clase derivada puede redefinir el
comportamiento, métodos.
Administrador
nombre
NI
dpto
salario
nombre()
…
horario
horario()
Estudiante
carrera
nombre
NI
notas
nombre()
…
Profesor
nombre
dpto
salario
NI
categoría
nombre()
…
Ejemplo
Persona
nombre
NI
nombre()
carrera
Estudiante
notas
…
Administrador
dpto
salario
salario()
…
carrera()
Profesor
dpto
salario
categoría
…
salario()
categ()
horario
horario()
Ejemplo
Persona
nombre
NI
nombre()
carrera
Estudiante
notas
…
carrera()
Trabajador
dpto
salario
salario()
…
Profesor
categoría
categ()
Administrador
horario
horario()
Implementación en Java
class Object
• Clase predefinida
• Padre de toda la jerarquía de
clases
• Ancestro directo o indirecto de
todas las clases
Implementación en Java
public class Person {
private String name;
private String NI;
public Person(String name,String NI){..
public String getName(){..
public String getNI(){..
public void setName(String name){..
public void setNI(String NI){..
public int age(){..
}
public class Student extends Person {
private String course;
private IntArray marks;
public Student(String name, String NI,
String course) {..
public String getCourse(){..
public void setCourse(String
course){..
public void addMark(int mark){..
public float average(){..
}
public class Worker extends Person {
private String depart;
private float salary;
public Worker(String name, String NI,
String dpto, float salary) {..
public String getDpto(){..
public void setDpto(String course){..
public String getSalary(){..
public void setSalary(float salary){..
}
public class Teacher extends Worker {
private String category;
public Teacher(String name, String NI,
String depart, float salary,
String category) {..
public String getCategory(){..
public void setCategory(String
category){..
}
public class Admin extends Worker {
private String schedule;
public Admin(String name, String NI,
String depart, float salary,
String schedule) {..
public String getSchedule(){..
public void setSchedule(String
schedule){..
}
Construcción de objetos de
clases derivadas
public Worker(String name, String
NI, String depart, float
salary) {
super(name,NI);
this.depart= depart;
this.salary= salary;
}
Person(…)
¿Teacher(…)?
Otro uso de super
• Para acceder a la versión heredada de un
miembro redefinido.
• Sintaxis:
super.miembro
Dato Método
Miembros protegidos
• protected
• Pueden ser accedidos por la clase y
sus derivadas, directas e indirectas.
public class Worker extends Person
{
private String depart;
protected float salary;
…
}
public class Teacher extends Worker {
…
public void incExperience(float
amount) {
salary= salary + amount;
}
…
}
Miembros protegidos
Visibilidad en
jerarquías de clases
Los atributos y métodos se
heredan con el mismo nivel de
visibilidad que fueron declarados
en la clase padre. Este nivel de
visibilidad puede ser aumentado, a
través de la redefinición pero nunca
restringido.
Mecanismo del compilador
para responder a un mensaje
Ejemplo Person
name
NI
getName()
course
Student
marks
…
getCourse()
Worker
dpto
salary
getSalary()
…
Teacher
category
getCateg()
Admin
schedule
getSchedule()
Admin a, b;
a = new Admin(..)
…a.getName()…
b= a.clone();
Object
Contenido 2da parte
• Otras relaciones entre clases.
• Compatibilidad de tipos para la
asignación.
–Conversión implícita o hacia arriba
–Conversión explícita o hacia abajo
Otras relaciones …
Utiliza-un: cuando un objeto colabora
con otro para llevar a cabo algunas
funciones. En la implementación, no es
más que funciones miembros del
objeto cliente, que acceden a un objeto
servidor al cual se le hacen solicitudes
en el cuerpo de la función.
Ejemplos:
• Persona utiliza un automóvil
• Estudiante utiliza una PC
Otras relaciones …
Conoce-un o conoce-a: cuando un
objeto, en cualquier momento de su
vida, conoce de la existencia de otro
objeto de otra clase. En la
implementación, no es más que un
miembro del objeto conocedor, que
“apunta” al objeto conocido.
Ejemplos:
• Estudiante conoce a su(s) profesor(es)
• Jugada, Jugador conocen a reloj.
“Utiliza-un” y “Conoce-a”
A B
1 1
Jugada Reloj
Solicita hora
1 1
Compatibilidad de tipos
para la asignación
Conversión implícita o
hacia arriba
• Herencia  “Es-un”
• Instancia de clase derivada es una
instancia de clase base
• Una instancia es compatible para la asig-
nación, con cualquiera de sus ancestros.
• Una instancia puede referenciar una
instancia de cualquier tipo descendiente.
• Lo contrario no es posible, una instancia
de clase base nunca es una instancia de
clase derivada.
Ejemplo
Person p;
Student s= new Student(“Juan”,
“80010111111”, “DPOO”);
p= s;
“Donde cabe un padre
cabe cualquiera de sus
hijos”
s= p
Conversión explícita o
hacia abajo
ERROR!!!
s= (Student)p;
TypeCast
Utilidad de la conversión
hacia arriba
public class PersonCollection {
private Person[] persons;
private int count;
…
Utilidad de la conversión
hacia arriba
public boolean add(Person person)
{
…
persons[count++]= person;
…
}
public class Controler {
private PersonCollection persons;
…
public boolean addAdmin(String name;..)
{ Admin a= new Admin(name,…);
persons.add(a); }
public boolean addTeacher(String name;..)
{ Teacher t= new Teacher(name,…);
persons.add(t); }
…
}
Utilidad de la conversión
hacia arriba
public int find(String name) {
…
if(persons[i].getName().equalsIgnoreCase
(name));
…
}
…
}
Instancias de clases derivadas
tratadas como instancias de
clase base
Operador instanceof
• Permite conocer de qué tipo de clase es un
objeto.
• Sintaxis
<instancia> instanceof <clase>
Operador instanceof
public class PersonCollection {
private Person[] persons;
…
public int countAdmin() {
int c= 0;
for (int i= 0;i < count; i++)
if (persons[i] instanceof Admin)
c++;
return c; }
…
}
Conclusiones
• Herencia: mecanismo de la POO que
garantiza el mayor nivel de reusabilidad
de código. Permite implementar nuevas
clases en función de otras ya existentes.
• Al diseñar los modelos de clases: analizar
cada uno de los conceptos del problema
buscando características y comportamien-
to común, para crear clases ancestrales.
Conclusiones
• Muchas veces se diseñan clases de las
cuales no existirán ejemplares, y cuya
única razón de ser es aportar caracterís-
ticas y comportamiento para la herencia.
• Clases descendientes que no incorporan
nuevo comportamiento ni redefinen el
comportamiento heredado de sus
ancestros son indeseadas.
Motivación Person
name
NI
getName()
course
Student
marks
…
getCourse()
Worker
dpto
salary
getSalary()
Teacher
category
getCateg()
Admin
hour
getHour()
Person p;
p = new Admin(..)
¿…p.pay()…?
pay()
pay() pay()
Estudio Independiente
• Bibliografía: Texto básico. Capítulo 6:
Reusing Classes.
–Inheritance syntax. Pág 261.
–Initializing the base class. Pág 264
–Combining composition and
inheritance. Pág 267.
–protected. Pág 276.
Estudio Independiente
• Caso de estudio: Control de las
publicaciones de una biblioteca.

Más contenido relacionado

La actualidad más candente

Metodos Get y Set, finalmente revelados.
Metodos Get y Set, finalmente revelados.Metodos Get y Set, finalmente revelados.
Metodos Get y Set, finalmente revelados.Juan Carlos Espinoza
 
programacion orientada a objetos
programacion orientada a objetosprogramacion orientada a objetos
programacion orientada a objetosale8819
 
5.1 estructura de una clase.
5.1 estructura de una clase.5.1 estructura de una clase.
5.1 estructura de una clase.K Manuel TN
 
Diagrama de clases
Diagrama de clasesDiagrama de clases
Diagrama de clasesstill01
 
Apunte paradigma orientado a objetos
Apunte paradigma orientado a objetosApunte paradigma orientado a objetos
Apunte paradigma orientado a objetosAlejandro Canosa
 
10 Curso de POO en java - métodos modificadores y analizadores
10 Curso de POO en java - métodos modificadores y analizadores10 Curso de POO en java - métodos modificadores y analizadores
10 Curso de POO en java - métodos modificadores y analizadoresClara Patricia Avella Ibañez
 
Propiedades De La Poo
Propiedades De La PooPropiedades De La Poo
Propiedades De La Pooda4
 
Modelado con clases instancias
Modelado con clases instanciasModelado con clases instancias
Modelado con clases instanciasCarlos Castro
 
Métodos POO
Métodos POOMétodos POO
Métodos POO1da4
 
ProgramacióN Orientada A Objetos
ProgramacióN Orientada A ObjetosProgramacióN Orientada A Objetos
ProgramacióN Orientada A ObjetosPatricio Abad
 
Programacion Orientada a Objetos
Programacion Orientada a ObjetosProgramacion Orientada a Objetos
Programacion Orientada a Objetoschutas666
 
PROGRAMACION ORIENTADA A OBJETO
PROGRAMACION ORIENTADA A OBJETOPROGRAMACION ORIENTADA A OBJETO
PROGRAMACION ORIENTADA A OBJETOAnabel Jaramillo
 

La actualidad más candente (20)

Metodos Get y Set, finalmente revelados.
Metodos Get y Set, finalmente revelados.Metodos Get y Set, finalmente revelados.
Metodos Get y Set, finalmente revelados.
 
programacion orientada a objetos
programacion orientada a objetosprogramacion orientada a objetos
programacion orientada a objetos
 
7 Curso de POO en java - diagrama de clases
7 Curso de POO en java - diagrama de clases7 Curso de POO en java - diagrama de clases
7 Curso de POO en java - diagrama de clases
 
5.1 estructura de una clase.
5.1 estructura de una clase.5.1 estructura de una clase.
5.1 estructura de una clase.
 
Diagrama de clases
Diagrama de clasesDiagrama de clases
Diagrama de clases
 
Apunte paradigma orientado a objetos
Apunte paradigma orientado a objetosApunte paradigma orientado a objetos
Apunte paradigma orientado a objetos
 
10 Curso de POO en java - métodos modificadores y analizadores
10 Curso de POO en java - métodos modificadores y analizadores10 Curso de POO en java - métodos modificadores y analizadores
10 Curso de POO en java - métodos modificadores y analizadores
 
Propiedades De La Poo
Propiedades De La PooPropiedades De La Poo
Propiedades De La Poo
 
Poo en java herencia
Poo en java   herenciaPoo en java   herencia
Poo en java herencia
 
Presentacion5
Presentacion5Presentacion5
Presentacion5
 
8.Clases y objetos Java
8.Clases y objetos Java8.Clases y objetos Java
8.Clases y objetos Java
 
Modelado con clases instancias
Modelado con clases instanciasModelado con clases instancias
Modelado con clases instancias
 
Programacion Orientada a Objetos
Programacion Orientada a ObjetosProgramacion Orientada a Objetos
Programacion Orientada a Objetos
 
Métodos POO
Métodos POOMétodos POO
Métodos POO
 
Programación Orientada a Objetos para Python
Programación Orientada a Objetos para PythonProgramación Orientada a Objetos para Python
Programación Orientada a Objetos para Python
 
ProgramacióN Orientada A Objetos
ProgramacióN Orientada A ObjetosProgramacióN Orientada A Objetos
ProgramacióN Orientada A Objetos
 
Presentacion4
Presentacion4Presentacion4
Presentacion4
 
Programacion Orientada a Objetos
Programacion Orientada a ObjetosProgramacion Orientada a Objetos
Programacion Orientada a Objetos
 
Primeraclaseobjetos clases
Primeraclaseobjetos clasesPrimeraclaseobjetos clases
Primeraclaseobjetos clases
 
PROGRAMACION ORIENTADA A OBJETO
PROGRAMACION ORIENTADA A OBJETOPROGRAMACION ORIENTADA A OBJETO
PROGRAMACION ORIENTADA A OBJETO
 

Similar a T2 herencia

T2 C01 y C02 Herencia y polimorfismo.ppt
T2 C01 y C02 Herencia y polimorfismo.pptT2 C01 y C02 Herencia y polimorfismo.ppt
T2 C01 y C02 Herencia y polimorfismo.pptjose185278
 
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
 
U8.- Programacion Orientada a objetos II (2).pdf
U8.- Programacion Orientada a objetos II (2).pdfU8.- Programacion Orientada a objetos II (2).pdf
U8.- Programacion Orientada a objetos II (2).pdfJCarlosCrespo
 
POO con PHP
POO con PHPPOO con PHP
POO con PHPvinceq
 
JAVA_BASICO_modo_consola_introduccion.pptx
JAVA_BASICO_modo_consola_introduccion.pptxJAVA_BASICO_modo_consola_introduccion.pptx
JAVA_BASICO_modo_consola_introduccion.pptxFamiliaAyluardo
 
_Herencia_Polimorfismo_Polimorfismo.pptx
_Herencia_Polimorfismo_Polimorfismo.pptx_Herencia_Polimorfismo_Polimorfismo.pptx
_Herencia_Polimorfismo_Polimorfismo.pptxFabianAndresNuezPinz
 
Programación Orientada a Objetos en Java
Programación Orientada a Objetos en JavaProgramación Orientada a Objetos en Java
Programación Orientada a Objetos en JavaDaniel Irene
 
Programacion orientada-a-objetos
Programacion orientada-a-objetosProgramacion orientada-a-objetos
Programacion orientada-a-objetosDon Augusto
 
Programación Orientada a Objetos
Programación Orientada a ObjetosProgramación Orientada a Objetos
Programación Orientada a Objetospontifica
 
programacion-orientada-a-objetos-poo_c4774196-cfdb-412e-bae5-210a97d78f8b.pptx
programacion-orientada-a-objetos-poo_c4774196-cfdb-412e-bae5-210a97d78f8b.pptxprogramacion-orientada-a-objetos-poo_c4774196-cfdb-412e-bae5-210a97d78f8b.pptx
programacion-orientada-a-objetos-poo_c4774196-cfdb-412e-bae5-210a97d78f8b.pptxFernando Espinoza Muñoz
 
programacion-orientada-a-objetos-poo_c4774196-cfdb-412e-bae5-210a97d78f8b.pptx
programacion-orientada-a-objetos-poo_c4774196-cfdb-412e-bae5-210a97d78f8b.pptxprogramacion-orientada-a-objetos-poo_c4774196-cfdb-412e-bae5-210a97d78f8b.pptx
programacion-orientada-a-objetos-poo_c4774196-cfdb-412e-bae5-210a97d78f8b.pptxFernando Espinoza Muñoz
 
Herencia y Polimorfismo en Java
Herencia y Polimorfismo en JavaHerencia y Polimorfismo en Java
Herencia y Polimorfismo en JavaAme Linares Vivas
 

Similar a T2 herencia (20)

T2 C01 y C02 Herencia y polimorfismo.ppt
T2 C01 y C02 Herencia y polimorfismo.pptT2 C01 y C02 Herencia y polimorfismo.ppt
T2 C01 y C02 Herencia y polimorfismo.ppt
 
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
 
Tema2
Tema2Tema2
Tema2
 
U8.- Programacion Orientada a objetos II (2).pdf
U8.- Programacion Orientada a objetos II (2).pdfU8.- Programacion Orientada a objetos II (2).pdf
U8.- Programacion Orientada a objetos II (2).pdf
 
POO con PHP
POO con PHPPOO con PHP
POO con PHP
 
JAVA_BASICO_modo_consola_introduccion.pptx
JAVA_BASICO_modo_consola_introduccion.pptxJAVA_BASICO_modo_consola_introduccion.pptx
JAVA_BASICO_modo_consola_introduccion.pptx
 
_Herencia_Polimorfismo_Polimorfismo.pptx
_Herencia_Polimorfismo_Polimorfismo.pptx_Herencia_Polimorfismo_Polimorfismo.pptx
_Herencia_Polimorfismo_Polimorfismo.pptx
 
Reporte
ReporteReporte
Reporte
 
Reporte
ReporteReporte
Reporte
 
Herencia
HerenciaHerencia
Herencia
 
Programación Orientada a Objetos en Java
Programación Orientada a Objetos en JavaProgramación Orientada a Objetos en Java
Programación Orientada a Objetos en Java
 
Semana 3 Herencia en Java
Semana 3   Herencia en JavaSemana 3   Herencia en Java
Semana 3 Herencia en Java
 
Clase y Herencia en VB
Clase y Herencia en VBClase y Herencia en VB
Clase y Herencia en VB
 
Programacion orientada-a-objetos
Programacion orientada-a-objetosProgramacion orientada-a-objetos
Programacion orientada-a-objetos
 
Programación Orientada a Objetos
Programación Orientada a ObjetosProgramación Orientada a Objetos
Programación Orientada a Objetos
 
programacion-orientada-a-objetos-poo_c4774196-cfdb-412e-bae5-210a97d78f8b.pptx
programacion-orientada-a-objetos-poo_c4774196-cfdb-412e-bae5-210a97d78f8b.pptxprogramacion-orientada-a-objetos-poo_c4774196-cfdb-412e-bae5-210a97d78f8b.pptx
programacion-orientada-a-objetos-poo_c4774196-cfdb-412e-bae5-210a97d78f8b.pptx
 
programacion-orientada-a-objetos-poo_c4774196-cfdb-412e-bae5-210a97d78f8b.pptx
programacion-orientada-a-objetos-poo_c4774196-cfdb-412e-bae5-210a97d78f8b.pptxprogramacion-orientada-a-objetos-poo_c4774196-cfdb-412e-bae5-210a97d78f8b.pptx
programacion-orientada-a-objetos-poo_c4774196-cfdb-412e-bae5-210a97d78f8b.pptx
 
Herencia y Polimorfismo en Java
Herencia y Polimorfismo en JavaHerencia y Polimorfismo en Java
Herencia y Polimorfismo en Java
 
Herencia
HerenciaHerencia
Herencia
 
PROGRAMACIÓN ORIENTADA A OBJETOS
PROGRAMACIÓN ORIENTADA A OBJETOSPROGRAMACIÓN ORIENTADA A OBJETOS
PROGRAMACIÓN ORIENTADA A OBJETOS
 

T2 herencia