Herencia. public class Persona { private String nombre; private char sexo; public Persona() { nombre = new String(); sexo = ' '; }

Documentos relacionados
ESCUELA DE CIENCIAS BÁSICAS E INGENIERÍA Ingeniería de Sistemas ASIGNATURA: Lenguaje de Programación I

Derechos de Acceso: COMPOSICION

Herencia y Polimorfismo

10 -Herencia Y Polimorfismo. Programación Orientada a Objetos Proyecto Curricular de Ingeniería de Sistemas

Herencia. Hay clases que comparten gran parte de sus características.

Programación Orientada a Objetos en Java

Por ejemplo, considerando la jerarquía de herencia de Figuras Geométricas de la siguiente figura, es posible hacer uso del concepto de polimorfismo.

Aplicaciones de Escritorio

Práctica No. 5. Estructuras con Memoria Dinámica

HOJA DE EJERCICIOS 3 HERENCIA ENTRE CLASES Y POLIMORFISMO DE MÉTODOS

PROYECTO FIGURAS DIAGRAMA DE FLUJO

Clases y herencia. FJP Unidad 8. Diseño de clases

EJEMPLO EJERCICIO RESUELTO CON POLIMORFISMO, SOBREESCRITURA DE MÉTODOS Y HERENCIA JAVA. CÓDIGO (CU00691B)

Herencia Java y Servicios Web I Master en Ingeniería Matemática

Definición. Mónica E. García García Feb 07

Tema: Funciones Virtuales y Polimorfismo.

Tema: Funciones Virtuales y Polimorfismo.

INTRODUCCION A LA PROGRAMACION EN JAVA

Java Básico. Polimorfismo. Copyright

PRÁCTICA No 4 POO Encapsulación. El alumno conocerá los principios de la encapsulación, y el uso de constructores para la inicialización de datos

UNIVERSIDAD DON BOSCO FACULTAD DE ESTUDIOS TECNOLÓGICOS ESCUELA DE COMPUTACION

Soluciones Ejercicios Tema 1

PROGRAMACIÓN ORIENTADA A OBJETOS 10/02/2009. Examen de Java. Nombre: DNI: Titulación:

INICIACIÓN A LA PROGRAMACIÓN LENGUAJE JAVA con BlueJ

Fundamentos de Programación

Polimorfismo Java y Servicios Web I Master en Ingeniería Matemática

Herencia a través de un ejemplo. Corina Flores Villarroel

UNIVERSIDAD DON BOSCO FACULTAD DE ESTUDIOS TECNOLÓGICOS ESCUELA DE COMPUTACION

PROGRAMACIÓN EN C#.NET Programación Orientada a Objetos en C# Ing. Bruno López Takeyas

Relaciones entre clases

LA CLASE VECTOR DEL API JAVA. MÉTODOS TRIMTOSIZE Y ENSURECAPACITY EJEMPLO Y EJERCICIOS RESUELTOS. (CU00922C)

Código: Salida. Circulo>>(1,2,2.45) Punto >>(1,1)

Programación orientada a objetos. Resumen de Temas Unidad 5: Herencia

Unidad V. Ya veremos qué poner en "algunas_palabras" y "algo_más", por ahora sigamos un poco más.

INTRODUCCIÓN AL PARADIGMA DE LA PROGRAMACIÓN ORIENTADA A OBJETOS CON JAVA

Programación orientada a objetos

Clases en Java. Declaración

PROGRAMACIÓN EN JAVA

! Qué es la POO?! Un paradigma de programación. ! No hay paradigmas mejores ni peores! Todos tienen sus ventajas e inconvenientes

Qué es Java? Un lenguaje de programación Un entorno de desarrollo Un entorno de aplicación Un entorno de despliegue Es similar en sintaxis de C + +.

Ejecución de hebras. En realidad, todas las aplicaciones escritas en Java son aplicaciones multihebra (recuerde el recolector de basura).

Herencia en Java. Agustín J. González Diseño y Programación Orientados a Objetos

Ejercicio 3 Proyecto Intérprete Curso de Spring Framework

JAVA. L.I Gerardo Benavides Pérez

Estructura de un programa en Java

Si necesitamos un grupo de valores constantes pero no está predefinido, podemos usar el tipo enum.

Curso de Java orientado a Android Parte 2

Unidad Didáctica 3. Tipos genéricos. Fundamentos de Programación Departamento de Lenguajes y Sistemas Informáticos

INTERFACE COMPARATOR. DIFERENCIAS ENTRE COMPARATOR Y COMPARABLE. CLASE COLLECTIONS. EJERCICIOS RESUELTOS. (CU00918C)

Prueba N o 1. Programación II

// Método Comunicarse, sera implementado por las clases concretas que hereden de la clase //animal

FACULTAD DE ECONOMIA Y ADMINISTRACION DEPARTAMENTO DE CIENCIAS DE LA COMPUTACION CÁTEDRA PROGRAMACION GENERAL. Trabajo Práctico Nº 4

Examen Teórico Convocatoria de Junio de 2012

Herencia y Clases Abstractas

Clases y Objetos en C++

INTERFACE ITERATOR DEL API JAVA. MÉTODO REMOVE PARA BORRAR OBJETOS EN COLECCIONES. EJERCICIOS Y EJEMPLO RESUELTO. (CU00919C)

PROGRAMACIÓN ORIENTADA A OBJETOS. Java se parece mucho a C pero sin todo lo que nos traía problemas.

Taller de Programación I. Tema 06: Orientación al Objeto en Java (parte 2)

Concurso: Cuánto sabes de JAVA?

PROGRAMACIÓN ORIENTADA A OBJETOS

Taller de Programación I. Tema 10: Herencia en Java

Conceptos más avanzados de Programación Orientada a Objetos

FUNCIONES O MÉTODOS. Algoritmia y Programación

Soluciones Ejercicios Tema 3

Introducción a la Programación Orientada a Objetos (POO)

Programación Orientada a Objetos con Java. Elementos Básicos del Lenguaje Java. Relación entre clases. Ejemplo de Clase: Punto !

Programación Orientada a Objetos (POO)

Métodos. Los métodos pueden ser de un tipo específico como int, double, String, Cuenta, etc. o simplemente no tener algún tipo como void.

o Una clase es un tipo al cual pertenecen objetos o instancias de la clase.

Universidad de Cantabria

Conceptos Básicos. Programación Orientada a Objetos 2

16. Herencia Definición de herencia. 168 A. García-Beltrán y J.M. Arranz

Bloque II. Elementos del lenguaje de programación Java

Carlos Montenegro. Programación Orientada a Objetos Proyecto Curricular de Ingeniería de Sistemas

Lección 2: Creando una Aplicación en Java. 1. Estructura del archivo de una clase. 3. Definiendo clases fundamentos

UML a Java. Paquetes Ejemplo - Paquetes. Clases - Forma Básica. Clases Forma Avanzada- Curso de Arquitecturas de Software

PROGRAMACION ORIENTADA A OBJETOS EN C++

Conceptos Básicos de la Programación Orientada a Objetos con Java

Unidad Didáctica 2. Elementos básicos del lenguaje Java Tipos, declaraciones, expresiones y asignaciones

Java Avanzado Facultad de Ingeniería. Escuela de computación.

Clases Abstractas e Interfaces

Clases. Java: Clases y Objetos. Clases. Clases. Modificadores de clase. Definición de una clase. Cada objeto es un ejemplar de una clase

LTO PRÁCTICA 1. Ejercicio 1 (proyecto prcilindro)

Taller de Programación I. Tema 06: Orientación al Objeto en Java (parte 2)

Tema 7.- Fundamentos de la Programación Orientada a Objetos

Test : Conteste exclusivamente en una HOJA DE LECTURA ÓPTICA, no olvidando marcar que su tipo de examen es A.

NETBEANS JAVA PROGRAMACIÓN ORIENTADA A OBJETOS

18. Interfaces Declaración de una interfaz

Construcciones del Lenguaje Java

Sebastián García Galán

TECNICAS DE PROGRAMACION Universidad Católica Los Angeles de Chimbote METODOS CONSTRUCTORES Y LA REFERENCIA THIS

Conceptos a tratar. Fundamentos de la Programación Orientada a Objetos Ampliación sobre clases y objetos

Programación Orientada a Objetos con Java

Programación Orientada a Objetos con Java

Programación II JAVA Dr. Mario Rossainz López

Ejercicios del tema 7: Clases y objetos

Tema 1. Introducción a la Programación Orientada a Objetos

o Una clase en Java se compone de: o A los anteriores se les conoce también como miembros de la clase.

Estructuras de control selectivas

Programación Orientada a Objetos Clases, métodos, atributos. Concepto de herencia, clases derivadas, tipos de herencia.

Transcripción:

Herencia Al definir una clase, se definen las características o variables y los métodos y conductas que pueden poseer todos los objetos que sean creados a partir de la clase. Sin embargo existen clases que requieren de una definición más especializada, par a poder definir atributos o variables y conductas o métodos que son específicos de los objetos de esas clases más especializadas. Un ejemplo puede ser la clase Persona, esta clase puede tener solamente el nombre de la persona y posiblemente el sexo, con sus respectivos constructores y métodos de acceso y modificación de las variables de instancia, la siguiente pudiera ser una definición de esta clase: public class Persona private String nombre; private char sexo; public Persona() nombre = new String(); sexo = ' '; public String obtennombre() return nombre; public void cambianombre(string nombre) this.nombre = nombre; public char obtensexo() return sexo; public void cambiasexo(char sexo) this.sexo = sexo; public String tostring() return "" + nombre + " " + sexo; Supongamos que queremos definir la clase Alumno, en la cual obviamente tendremos que definir el no mbre y sexo del alumno. Cuando realizamos esto no debemos empezar desde cero, podemos decir que la clase Alumno sería una clase que hereda de la clase Persona. Solamente que la clase Alumno ahora añadirá ciertos atributos que sean solo específicos de la clase Alumno y a su vez, añadiremos los métodos específicos de la clase Alumno, tendríamos lo siguiente: public class Alumno extends Persona private int matricula; public Alumno() super(); matricula = 0; public int obtenmatricula() return matricula;

public void cambiamatricula(int matricula) this.matricula = matricula; public String tostring() return "" + super.tostring() + " " + matricula; Podemos observar en esta clase Hija (clase que hereda), que en el constructor se utiliza el método super(), pero en ninguna parte está definido este método, la palabra super() es utilizada para llamar al constructor vacío de la clase Padre (clase de la cual se está heredando). La palabra extends nos permite dentro de Java definir la herencia, entonces cuando decimos public class Alumno extends Persona, estamos diciendo que la clase Alumno hereda de la clase Persona. Una aplicación que utiliza estas clases sería la siguiente: import java.io.*; public class AplicacionHerencia1 public static void main(string[] args) Persona osvel = new Persona(); osvel.cambianombre("osvel"); osvel.cambiasexo('m'); System.out.println("Persona = " + osvel.tostring()); Alumno israel = new Alumno(); israel.cambianombre("israel"); israel.cambiasexo('m'); israel.cambiamatricula(12345); System.out.println("Alumno = " + israel.tostring()); La cual muestra lo siguiente en ejecución: De esta manera podemos observar como la clase Alumno está heredando de la clase Persona y todos los atributos y métodos de la Persona, están siendo utilizados por el Alumno, ya que automáticamente son de el al heredarlos. Cuando utilizamos clases y sabemos que vamos a utilizar la herencia, es entonces que utilizamos la palabra protected en lugar de private. protected es utilizada para definir que la variable o método donde es usada, será privada para cualquier clase externa, pero será utilizada como si fuera pública para cualquier clase hija. De esta manera la mejor manera de utilizar las clases anteriores serian:

Clase Persona: public class Persona protected String nombre; protected char sexo; public Persona() nombre = new String(); sexo = ' '; public String obtennombre() return nombre; public void cambianombre(string nombre) this.nombre = nombre; public char obtensexo() return sexo; public void cambiasexo(char sexo) this.sexo = sexo; public String tostring() return "" + nombre + " " + sexo; Clase Alumno: public class Alumno extends Persona protected int matricula; public Alumno() super(); matricula = 0; public int obtenmatricula() return matricula; public void cambiamatricula(int matricula) this.matricula = matricula; public String tostring() return "" + super.tostring() + " " + matricula; Sobreescritura de Métodos (comportamiento) Una clase puede definir la manera en la que se hará un específico comportamiento para todos los objetos de la clase que le componen. Cuando una clase Hija quiere cambiar el comportamiento de la manera en la que está

definida en la clase Padre, lo puede hacer solamente volviendo a definir el método (comportamiento) dentro de la clase que hereda, a este concepto se le denomina Sobreescritura de un Método. En el ejemplo anterior supongamos que en la clase Alumno se desea modificar la manera en la que se cambia el nombre, de manera que al cambiar el nombre al alumno se le anteponga las letras "alumn", entonces la clase Alumno quedaría de la siguiente manera: public class Alumno extends Persona protected int matricula; public Alumno() super(); matricula = 0; public int obtenmatricula() return matricula; public void cambiamatricula(int matricula) this.matricula = matricula; public void cambianombre(string nombre) this.nombre = "al " + nombre; public String tostring() return "" + super.tostring() + " " + matricula; La ejecucion quedaria: Polimorfismo Se le llama polimorfismo al tener la llamada a un método por diferentes objetos, esto s ignifica que si por ejemplo tenemos el método crecer() para una clase Animal, también tendremos el método crecer() para una clase Persona, lo mismo para una clase Bacteria, esto quiere decir que la misma conducta puede ser desarrollada por diferentes objetos de diferentes clases. Java sabe a cual método tomar de acuerdo a la declaración del objeto de la clase que esta haciendo la llamada al método. El polimorfismo también actúa por tener un objeto definido como un tipo de clase y creado como un objeto de la clase hija. Por ejemplo supongamos que tenemos la clase Animal y algunas clases hijas que heredan de esta clase como: Vaca, Cerdo y Serpiente, con la siguiente definición: Clase Animal public class Animal private int peso = 0; public void cambiapeso(int peso) this.peso = peso;

public int obtenpeso() return peso; public String habla() return "Los animales no hablan"; Clase Vaca public class Vaca extends Animal public String habla() return "MUU"; Clase Cerdo public class Cerdo extends Animal public String habla() return "OINC"; Clase Serpiente public class Serpiente extends Animal Aplicación Herencia con Polimorfismo import java.io.*; public class AplicacionHerencia1 public static void main(string[] args) Vaca daisy = new Vaca(); Animal animal = new Vaca(); Serpiente serpiente = new Serpiente(); System.out.println("Daisy dice : " + daisy.habla() ); System.out.println("Animal dice : " + animal.habla() ); System.out.println("Serpiente dice : " + serpiente.habla() ); La ejecución de esta aplicación muestra lo siguiente:

En esta aplicación observamos como vaca pertenece a la clase Vaca y el método habla() dice MUU como correspondería a una vaca, luego animal es un objeto de la clase Animal (clase Padre) y al ser creado como Vaca y llamar al método habla() vemos como aunque la clase Animal tiene en el método habla() el decir "Los animales no hablan", dice "MUU" porque fue creado como un objeto de la clase Vaca. Vemos también como el objeto serpiente que es creado como objeto de la clase Serpiente al usar el método habla() dice "Los animales no hablan", ya que no reescribe el método habla() y así es como esta definido en la clase Animal. Al utilizar la herencia debemos tener cuidado cuando creamos los objetos con diferentes clases que la que definimos el objeto, por ejemplo si definimos el objeto serpiente como tipo Serpiente, pero lo creamos con el constructor de Animal() nos dará el siguiente error: Entonces debemos entender que un objeto padre puede ser creado con un constructor del hijo, pero no se puede hacer lo contrario. Clases Abstractas Existen algunas clases que no pueden definir todos los detalles de los comportamientos de todos los objetos que conforman la clase, pero si pueden saber que existe el comportamiento, entonces estas clases se definen como abstractas, ya que los métodos que definen esas conductas serán definidos como abstractos con la palabra abstract. Una aplicación no puede crear instancias (objetos) de una clase que esta definida como abstracta. Cuando se tiene una clase abstracta se espera que haya al menos una clase que herede de esta clase abstracta y defina todos los métodos necesarios para la clase. Por ejemplo la clase Figura, que define los métodos perímetro y área como abstractos, entonces podemos tener la clase Cuadrado y la clase Rectangulo que hereden de esta clase Figura pero que definan ambos métodos. Veamos las clases implicadas en este ejemplo: Clase Figura public abstract class Figura protected int x, y, ancho, alto; public void cambiax(int x) this.x = x; public void cambiay(int y) this.y = y; public void cambiaancho(int ancho) this.ancho = ancho; public void cambiaalto(int alto) this.alto = alto; public abstract float obtenperimetro();

public abstract float obtenarea(); Clase Cuadrado public class Cuadrado extends Figura public float obtenperimetro() return 4 * ancho; public float obtenarea() return ancho * ancho; Clase Rectangulo public class Rectangulo extends Figura public float obtenperimetro() return 2 * ancho + 2 * alto; public float obtenarea() return ancho * alto; Aplicacion Herencia 2 public class AplicacionHerencia2 public static void main(string[] args) Cuadrado c = new Cuadrado(); c.cambiaancho(10); c.cambiaalto(10); Rectangulo r = new Rectangulo(); r.cambiaancho(20); r.cambiaalto(30); System.out.println("Perimetro Cuadrado = " + c.obtenperimetro()); System.out.println("Area Cuadrado = " + c.obtenarea()); System.out.println("Perimetro Rectangulo = " + r.obtenperimetro()); System.out.println("Area Rectangulo = " + r.obtenarea()); La ejecución de esta aplicación muestra lo siguiente:

De esta manera observamos como al definir ambos métodos en la clase Particular esta quita la abstracción.