La descarga está en progreso. Por favor, espere

La descarga está en progreso. Por favor, espere

Programación Orientada a Objetos

Presentaciones similares


Presentación del tema: "Programación Orientada a Objetos"— Transcripción de la presentación:

1 Programación Orientada a Objetos
Herencia Programación Orientada a Objetos

2 Agenda Herencia Concepto Tipos Jerarquía

3 Herencia: Concepto Es una relación entre clases en la cual una clase comparte la estructura y comportamiento definido en otra clase (Grady Booch) La clase de la cual se deriva otra clase se denomina clase base, superclase o clase padre. Una clase derivada de una súperclase recibe también el nombre de subclase o clase hija. Clase Base Superclase Clase Padre El propósito principal de la herencia es el de organizar mejor las clases que componen una determinada realidad, y poder agruparlas en función de atributos y comportamientos comunes a la vez que cada una se especializa según sus particularidades. Cabe aclarar además que hay dos tipos de herencias: Herencia Simple: una clase derivada puede heredar sólo de una clase base (los lenguajes .NET soportan este tipo de herencia) Herencia Múltiple: una clase derivada puede heredar de una o más clases base (C++ es un ejemplo de lenguaje que soporta este tipo de herencia). Clase Derivada Subclase Clase Hija

4 Herencia: Concepto La subclases heredan propiedades de su superclase.
Una subclase, respecto de su superclase: Agrega nuevas propiedades Modifica propiedades heredadas +Volar()

5 Tipos de herencia Simple
Sólo puede tener un ascendiente, es decir una subclase puede heredar datos y métodos de una única clase así como añadir o quitar comportamientos de la clase base.

6 Tipos de herencia Múltiple
Es la prioridad de una clase de poder tener más de un ascendiente inmediato, o lo que es igual, adquirir datos y métodos de más de una clase. Animal Aves Mamíferos Reptiles Ornitorrinco

7 Jerarquías de herencia
Generalización (Factorización) Se detectan clases con un comportamiento común Ejemplo: Libro y Revista son Publicaciones Especialización (Abstracción) Se detecta que una clase es un caso especial de otra Ejemplo: Rectángulo es un tipo de Polígono

8 Ejercicio Caso 1 Caso 2 Caso 3 Caso 4 Caso 5 Caso 6
Todo electrodoméstico se enciende y apaga. El Horno microondas además abre y cierra su puerta. Caso 1 Una persona que dedicada a los bienes raíces tiene a la venta casas, negocios y fincas. Caso 2 Un Camión tiene Patente. Un Conductor tiene un camión el cual conduce. Caso 3 Los Archivos Multimedia pueden ser Imágenes o Música. Las imágenes pueden ser a Color o Blanco y Negro. Caso 4 Un Avión tiene Fuselaje, Alas y Motores. Caso 5 Una Abeja vuela y tiene aguijón Caso 6

9 Ejercicio Caso 1 Caso 2 Caso 3
Todo Electrodoméstico se enciende y apaga. El Horno microondas además abre y cierra su puerta. Caso 1 Una persona que dedicada a los bienes raíces tiene a la venta casas, negocios y fincas. Caso 2 Un Camión tiene Patente. Un Conductor tiene un camión el cual conduce. Caso 3

10 Ejercicio Caso 5 Caso 6 Caso 4
Los Archivos Multimedia pueden ser Imágenes o Música. Las imágenes pueden ser a Color o Blanco y Negro. Caso 4 Un Avión tiene Fuselaje, Alas y Motores. Caso 5 Una Abeja vuela y tiene aguijón Caso 6

11 Herencia en Java Para crear una subclase a partir de una superclase, en Java la subclase debe declararse: public class NombreSubClase extends NombreSuperClase public class Alumno extends Persona

12 Herencia en Java Visibilidad:
Los miembros privados de la superclase no son visibles desde la subclase Los miembros públicos de la superclase son visibles y siguen siendo públicos en la subclase Si una clase se declara como final no se puede heredar de ella

13 Ejemplo public class Persona { public String ID; public String nombre; public Persona() { ID = " "; nombre = ""; } public void setID(String r){ ID= r; public String getID(){ return ID; public void setNombre (String n){ nombre = n; public String getNombre(){ return nombre; public class Alumno extends Persona { public String rolUCV; public Alumno() { rolUCV = “ "; } public void setRolUCV(String r){ rolUCV = r; public String getRolUCV(){ return rolUCV; public String quiénSoy(){ return ID+ nombre + rolUCV;

14 Miembros heredados Una subclase hereda de su superclase (por el momento): Variables de instancia públicas Métodos públicos Todos los anteriores pueden ser utilizados en la subclase “como si hubieran sido declarados en ella”.

15 Miembros no heredados Una subclase no hereda:
Propiedades privadas Constructores Destructores Los miembros no heredados no pueden aparecer en el código de la subclase

16 Ejemplo public class Persona { private String ID; private String nombre; public Persona() { ID = " "; nombre = ""; } public void setID(String r){ ID= r; public String getID(){ return ID; public void setNombre (String n){ nombre = n; public String getNombre(){ return nombre; public class Alumno extends Persona { private String rolUCV; public Alumno() { rolUCV = “ "; } public void setRolUCV(String r){ rolUCV = r; public String getRolUCV(){ return rolUCV; public String quiénSoy(){ return ID+ nombre + rolUCV;

17 Miembros no heredados: variables de instancia privadas
Las variables privadas no son heredadas, por lo que no pueden aparecer en el código de la subclase. Sin embargo se puede hacer uso indirecto de ellas en la subclase, a través de los métodos públicos de manipulación implementados en la respectiva superclase.

18 Ejemplo public class Persona { private String ID; private String nombre; public Persona() { ID = " "; nombre = ""; } public void setID(String r){ ID= r; public String getID(){ return ID; public void setNombre (String n){ nombre = n; public String getNombre(){ return nombre; public class Alumno extends Persona { private String rolUCV; public Alumno() { rolUCV = “ "; } public void setRolUCV(String r){ rolUCV = r; public String getRolUCV(){ return rolUCV; public String quiénSoy(){ return getID()+ getNombre() + rolUCV;

19 Miembros no heredados: constructores
Los constructores no son heredados, por lo que cada subclase debe tener su(s) propio(s) constructor(es). Sin embargo en los constructores se puede invocar al constructor de la superclase con la instrucción: super( lista parámetros ) La instrucción super debe ser la primera instrucción del constructor.

20 Ejemplo public class Persona { private String ID; private String nombre; public Persona(String r, String n) { ID = r; nombre = n; } public void setID(String r){ ID= r; public String getID(){ return ID; public void setNombre (String n){ public String getNombre(){ return nombre; public class Alumno extends Persona { private String rolUCV; public Alumno() { super(“ ”, “N/A”); rolUCV = “ "; } public void setRolUCV(String r){ rolUCV = r; public String getRolUCV(){ return rolUCV; public String quiénSoy(){ return getID()+ getNombre() + rolUCV;

21 Ejemplo public class Persona { private String ID; private String nombre; public Persona(String r, String n) { ID = r; nombre = n; } public void setID(String r){ ID= r; public String getID(){ return ID; public void setNombre (String n){ public String getNombre(){ return nombre; public class Alumno extends Persona { private String rolUCV; public Alumno(String r, String n) { super(r, n); rolUCV = “ "; } public void setRolUCV(String r){ rolUCV = r; public String getRolUCV(){ return rolUCV; public String quiénSoy(){ return getID()+ getNombre() + rolUCV;

22 Miembros no heredados: constructores
Todo subclase debe incluir una referencia super a algún constructor de la superclase. Si no se incluye la referencia super, Java incluye automáticamente una referencia al constructor sin parámetros de la superclase. Sin embargo, es válido solamente cuando el constructor no existe en la superclase. Es decir incluye: super()

23 Ejemplo: Clases equivalentes
public class Alumno extends Persona { private String rolUCV; public Alumno(String r, String n) { super( ); rolUCV = “ "; } public void setRolUCV(String r){ rolUCV = r; public String getRolUCV(){ return rolUCV; public String quiénSoy(){ return getID()+ getNombre() + rolUCV; public class Alumno extends Persona { private String rolUCV; public Alumno() { rolUCV = “ "; } public void setRolUCV(String r){ rolUCV = r; public String getRolUCV(){ return rolUCV; public String quiénSoy(){ return getID()+ getNombre() + rolUCV;

24 Ejercicio Un videojuego tiene Personajes. Cada personaje tiene un nombre (String) y un nivel propio de energía (int). Además, implementan el método alimentarse, que recibe por parámetro una cantidad de energía (int) con el que incrementa el nivel propio de energía. Los personajes pueden ser: Guerreros: tienen además un arma (String). Al momento de la instanciación reciben su nombre, arma y nivel propio de energía inicial. Los guerreros tienen un método combatir que recibe por parámetro la cantidad de energía a gastar en el ataque, la cual es descontada de su nivel propio de energía. El método combatir retorna el arma y la cantidad de energía del ataque concatenados. Magos: tienen además un poder (String). Al momento de la instanciación reciben su nombre y poder. Los magos son siempre creados con un nivel propio de energía igual a 100. Proveen un método encantar, que disminuye en 2 unidades el nivel propio de energía y que retorna el poder del mago.

25 Sobreescritura de métodos
Un método declarado e implementado en una súperclase puede ser reimplementado en una subclase. Esto se denomina sobreescritura de métodos. Conceptualmente significa que la subclase realiza la misma operación de la súper clase, pero de un modo distinto. Esto es un caso de polimorfismo

26 Sobreescritura de métodos
public class Persona { private String ID; private String nombre; public Persona(String r, String n) { ID = r; nombre = n; } public String getID(){ return ID; public String getNombre (){ return nombre; public String identificarse (String n){ return ID + nombre; //Otros miembros de la clase public class Alumno extends Persona { private String carrera; public Alumno(String r, String n, String c){ super(r, n); carrera = c; } public String identificarse (String n){ return getID() + getNombre()+ carrera; //Otros miembros de la clase

27 Sobreescritura de métodos
Persona a = new Persona(“100”, “Matías”); System.out.println( a.identificarse() ); Alumno b = new Alumno(“100”, “Matías”, “Computación”); System.out.println( b.identificarse() ); public String identificarse(){ return ID + nombre; } public String identificarse(){ return getID() + getNombre() + carrera; }

28 Miembros protegidos de una clase
El modificador de visibilidad protected, permite declarar visibilidad “protegida” en variables de instancia y métodos dentro de un paquete. Los miembros de una clase con visibilidad protegida son sólo accesibles desde la misma clase o desde cualquier subclase de ella (no son accesibles desde otras clases en otros paquetes). Por lo tanto, una subclase hereda de su superclase: Variables de instancia protegidas y públicas Métodos protegidos y públicos

29 Miembros protegidos de una clase
public class Persona { protected String ID; protected String nombre; public Persona(String r, String n) { ID = r; nombre = n; } public String getID(){ return ID; public String getNombre (){ return nombre; public String identificarse (String n){ return ID + nombre; //Otros miembros de la clase public class Alumno extends Persona { private String carrera; public Alumno(String r, String n, String c){ super(r, n); carrera = c; } public String identificarse (String n){ return ID + nombre + carrera; //Otros miembros de la clase

30 Clases abstractas Contexto: se está desarrollando una aplicación que trabaja con CD’s, DVD’s y discos de vinilo. Problema: se establece que a pesar de tener sus propios atributos, todos ellos disponen de código, sello discográfico y autor. Se desea evitar duplicidad de código. Decisión: se determina la conveniencia de crear la clase “ProductoMusical”, que agrupa las propiedades comunes de los tres tipos de productos.

31 Clases abstractas En el ejemplo anterior la clase productoMusical es abstracta (no representa entidades presentes en el dominio). Esta condición se específica en el diseño, declarando la clase como abstracta. Una clase abstracta no puede ser instanciada, ha sido diseñada sólo para ser extendida. public abstract class ProductoMusical { private int código; private String sello; ... }

32 Clases abstractas Otro ejemplo: un software trabaja con distintas figuras geométricas, todas ellas polígonos, con algunas propiedades en común (ej. cantidad de lados). Polígono

33 Clases abstractas public abstract class Poligono{
protected int lados; public void setLados(int l) { lados= l; } //Otros miembros de la clase public class Cuadrado extends Poligono{ provate int longitud; public void setLongitud(int l) { longitud= l; } //Otros miembros de la clase

34 Clases abstractas Supongamos que en el ejemplo anterior todos los polígonos deben proveer un método de cálculo de área. Conflicto de “fuerzas” en diseño: Todos los polígonos deben proveer el método, por lo tanto debiese “aparecer” a nivel de la superclase Polígono. La operación del método depende de cada polígono concreto (ej. área de cuadrado: lado2 , área de triángulo base * altura /2, etc.), por lo tanto no puede establecerse una lógica común a nivel de superclase. Solución: declarar método como abstracto en la superclase. Polígono

35 Métodos abstractos Un método abstracto es un método que se declara en una superclase, pero sin proveer implementación. La implementación de un método abstracto se difiere para sus subclases. Una clase que declara uno o más métodos abstractos es necesariamente abstracta (y debe ser declarada como tal). Si una subclase no provee implementación para un método abstracto que hereda de su superclase, es necesariamente abstracta (y debe ser declarada como tal).

36 Métodos abstractos public abstract class Poligono{
protected int lados; public void setLados(int l) { lados= l; } public abstract double getArea(); //Otros miembros de la clase public class Cuadrado extends Poligono{ provate int longitud; public void setLongitud(int l) { longitud= l; } public double getArea(){ return longitud*longitud; //Otros miembros de la clase

37 Ejercicio Se solicita desarrollar una agenda digital. El sistema debe permitir almacenar contactos e información personal de dichos contactos, tal como dirección, teléfono, correo electrónico, fecha de nacimiento, etc. Los contactos estarán agrupados en: Familiar: almacenará un parentesco Amigos: almacenará el lugar dónde se conocieron Trabajo: almacenará el nombre de la empresa Además, el sistema debe permitir la calendarización de eventos, tales como reuniones y tareas. El sistema debe permitir crear una agenda laboral y otra agenda personal. Cuando inicie el sistema, debe ofrecer un menú para que el usuario pueda agregar sus contactos y sus eventos por agenda. Y, al final el sistema debe imprimir todos los contactos y los eventos de ambas agendas.


Descargar ppt "Programación Orientada a Objetos"

Presentaciones similares


Anuncios Google