Ingeniero en Computación José Alfredo Cobián Campos

Slides:



Advertisements
Presentaciones similares
Lenguaje de programación Java
Advertisements

UNIVERSIDAD LATINA (UNILA) ENCAPSULACION Y HERENCIA
HERENCIA.
UNIDAD 2 CLASES Y OBJETOS. CLASE Elementos cabecera y cuerpo de la clase. Cabecera: aporta información fundamental sobre la clase en sí y constituye de.
Capitulo # 4 herencia PROGRAMACION III UNIVERSIDAD
HERENCIA.
Reutilización de código Elementos básicos del lenguaje Java Definición de variables, expresiones y asignaciones Fundamentos de Programación Departamento.
RELACIONES ENTRE CLASES M.C. YOLANDA MOYAO MARTINEZ.
Diagrama de Clases SPI 2016.
2012-BM5A. Introducción Todos los lenguajes de programación son distintos entre si. Sin embargo, pueden ser agrupados según la forma de pensar y estructurar.
Interfaces y Clases Internas ELO329: Diseño y Programación Orientados a Objetos.
PROGRAMACIÓN ORIENTADA A OBJETOS Encapsulamiento y constructores.
PROGRAMACIÓN ORIENTADA A OBJETOS SEGUNDA UNIDAD: “CLASES, OBJETOS Y MÉTODOS” IRVING YAIR SALAS CHÁVEZ ING. EN SISTEMAS COMPUTACIONALES - ITSLP.
Programación orientada a objetos (p.o.o)
Clases y Objetos en Java
Unidad Didáctica 11 Reutilización Versión 1.0.0
PROGRAMACIÓN ORIENTADA A OBJETOS
Ingeniería Directa. Generar código a través de modelos se le conoce como ingeniería directa.
Ingeniero en Computación José Alfredo Cobián Campos
Programación Avanzada
Herencia y Clases Abstractas
Herencia Implementación en Java.
INTRODUCCIÓN A LA PROGRAMACIÓN ORIENTADA A OBJETOS
Programación Orientada a Objetos
EL MUNDO DE LOS OBJETOS PROGRAMANDO EN JAVA.
Figura Rectangulo Elipse Cuadrado Circulo area (): double
Fundamentos de la programación orientada a objetos
Métodos en Java.
Algunas Características de C++ no presentes en C
Medio de tele-comunicación
Clases y Objetos en Java
Funciones y Clases Amigas (Friend)‏ Miembros Estáticos (Static)
Programación orientada a objetos
Algunas Características de C++ no presentes en C
Sonia Rueda Herencia y Polimorfismo
Clases y Objetos en Java
Programación Orientada a Objetos I Unidad 4 Relaciones entre clases: herencia.
Herencia Agustín J. González ELO329.
Herencia en C#.
Desarrollo de Software
HERENCIA.
Interfaces Gráficas de Usuario
DIAGRAMA DE CLASES.
INGENIERIA EN SISTEMAS COMPUTACIONALES
Programación Orientada a Objetos
Conceptos de Objetos, Clases y Otros Modelo Conceptual
Java – programación orientada a objetos programación ii – iee
Programación orientada a objetos en Visual Basic .NET
Interfaces Gráficas de Usuario
Herencia en C++ Agustín J. González ELO329.
Diagrama de Clases Un diagrama de clases esta compuesto por los siguientes elementos: Clase: atributos, métodos y visibilidad. Relaciones: Herencia, Composición,
Tópicos Avanzados de Programación (TAP3501)
Herencia en C++ Agustín J. González ELO329.
Sonia Rueda Herencia y Polimorfismo
Herencia en C++ Agustín J. González ELO329.
Herencia en C++ Agustín J. González ELO329.
Herencia en C++ Agustín J. González ELO329.
Funciones y Clases Amigas (Friend)‏ Miembros Estáticos (Static)
Funciones y Clases Amigas (Friend)‏ Miembros Estáticos (Static)
Unida III: Análisis y Diseño de Sistemas Orientado a Objetos
INTRODUCCIÓN A LA PROGRAMACIÓN ORIENTADA A OBJETOS
Tema 5 H erencia. La herencia es una forma de reutilización de software en la que las clases se crean incorporando los datos (atributos) y el comportamiento.
Herencia Agustín J. González ELO329.
Unida III: Análisis y Diseño de Sistemas Orientado a Objetos
Funciones y Clases Amigas (Friend)‏ Miembros Estáticos (Static)
Herencia en C++ Agustín J. González ELO329.
Clases abstractas e interfaces
Clases y Objetos en Java
FUNDAMENTOS DE LA PROGRAMACION ORIENTADA A OBJETOS
Transcripción de la presentación:

Ingeniero en Computación José Alfredo Cobián Campos Taller de Introducción a la programación con Java DGAPA Junio 2017 Herencia Ingeniero en Computación José Alfredo Cobián Campos cobian@matematicas.unam.mx Facultad de Ciencias

Definición La herencia es un mecanismo que permite la definición de una clase a partir de la definición de otra ya existente. La herencia permite compartir automáticamente métodos y datos entre clases, subclases y objetos.

Usos La herencia está fuertemente ligada a la reutilización del código en la OOP. Esto es, el código de cualquiera de las clases puede ser utilizado sin más que crear una clase derivada de ella, o bien una subclase.

Superclase y Subclases El concepto de herencia conduce a una estructura jerárquica de clases o estructura de árbol, lo cual significa que en la OOP todas las relaciones entre clases deben ajustarse a dicha estructura.

Superclase y Subclases En esta estructura jerárquica, cada clase tiene sólo una clase padre. La clase padre de cualquier clase es conocida como su superclase. La clase hija de una superclase es llamada una subclase.

La herencia es una característica de los lenguajes orientados a objetos la cual nos da la posibilidad de reutilizar código, esto es definir una clase a partir de otra clase común. Supongamos que tenemos la necesidad de registrar caracteristicas y funciones de Empleados y Clientes en un programa cualquiera. Nos damos cuenta que tanto empleados como clientes comparten muchas caracteristicas en comun, nombre direccion edad etc, y seria tonto definirlas en ambas clases, por lo que creamos una clase que comparta sus caracteristicas comunes (variables y metodos) y luego a partir de esa clase creamos las demas, las clases que heredan posteriormente pueden incluir sus propias caracteristicas que la diferencian de las demas, ESTO ES HERENCIA.

Para que una clase herede de otra en java se utiliza la palabra reservada extends. La clase de la cual vamos a heredar no necesita especificar nada para lograrlo, simplemente en la clase en la cual heredaremos especificamos con la palabra extends y luego el nombre de la clase de la cual heredaremos. En esta clase llamaremos al metodo super, el cual nos permite registrar los valores en la superclase a traves de su constructor. La clase de la cual heredan se le llama superclase y la clase que hereda es conocida como subclase, si B hereda de A y C hereda de B, entonces B y C son sublases de la superclase A. B seria descendiente directo de A y C seria descendiente indirecto de A. En java se trabaja lo que se conoce como herencia simple, la cual nos permite unicamente heredar de una sola clase, a diferencia de la herencia multiple que nos permite heredar de varias clases como en C++. Algunas tecnicas permite simular la herencia multiple en java, aunque en mi opinion no se deberia de implementar.

En el manejo de los modificadores de acceso cabe mencionar que: private: Visible unicamente en la clase que se define Sin Modificador: Visible a todas las clases del paquete protected: visible a las subclases y a las clases del paquete public: Visible a todas las clases. Super se utiliza para llamar a variables y metodos de la clase padre. Veamos un ejemplo simple de lo mas basico que explicamos aqui para comprender lo que es la herencia en java.

Clase Persona: public class Persona {     String nombre;     String direccion;     int edad;     public Persona(){         nombre = "";         direccion = "";         edad = 0;     }     public Persona(String n, String d, int e){         nombre = n;         direccion = d;         edad = e;     } }

Clase Empleado: public class Empleado extends Persona{     String puesto;     public Empleado(String nombre, String direccion, int edad,String puesto){         super(nombre,direccion,edad);         this.puesto = puesto;     }     public String getInformacion(){         return "Nombre:"+nombre+"nDireccion:"+direccion+"nEdad:"+edad+"nPuesto:"+puesto+"n";     } }

Clase Cliente: public class Cliente extends Persona{     double credito;     public Cliente(String nombre, String direccion, int edad, double credito){         super(nombre,direccion,edad);         this.credito = credito;     }     public String getInformacion(){         return "Nombre:"+nombre+"nDireccion:"+direccion+"nEdad:"+edad+"nCredito:"+credito+"n";     } }

Clase Principal: public class Main {     public static void main(String args[]){         Empleado e = new Empleado("Jonathan Melgoza","Calle Falsa 123",21,"Administrador");         System.out.println(e.getInformacion());         Cliente c = new Cliente("Jorge Perez","Calle Lejana 321",22,500.0);         System.out.println(c.getInformacion());     } }

Resultado

En conclusion La verdadera potencia de la programación orientada a objetos radica en su capacidad para reflejar la abstracción que el cerebro humano realiza automáticamente durante el proceso de aprendizaje y el proceso de análisis de información. Las personas percibimos la realidad como un conjunto de objetos interrelacionados. Dichas interrelaciones, pueden verse como un conjunto de abstracciones y generalizaciones que se han ido asimilando desde la niñez. Así, los defensores de la programación orientada a objetos afirman que esta técnica se adecua mejor al funcionamiento del cerebro humano, al permitir descomponer un problema de cierta magnitud en un conjunto de problemas menores subordinados del primero.

La capacidad de descomponer un problema o concepto en un conjunto de objetos relacionados entre sí, y cuyo comportamiento es fácilmente identificable, puede ser muy útil para el desarrollo de programas informáticos. B. Jerarquía La herencia es el mecanismo fundamental de relación entre clases en la orientación a objetos. Relaciona las clases de manera jerárquica; una clase padre o superclase sobre otras clases hijas o subclases. Imagen 4: Ejemplo de otro árbol de herencia

Los descendientes de una clase heredan todas las variables y métodos que sus ascendientes hayan especificado como heredables, además de crear los suyos propios. La característica de herencia, nos permite definir nuevas clases derivadas de otra ya existente, que la especializan de alguna manera. Así logramos definir una jerarquía de clases, que se puede mostrar mediante un árbol de herencia. En todo lenguaje orientado a objetos existe una jerarquía, mediante la que las clases se relacionan en términos de herencia. En Java, el punto más alto de la jerarquía es la clase Object de la cual derivan todas las demás clases.

C. Herencia múltiple En la orientación a objetos, se consideran dos tipos de herencia, simple y múltiple. En el caso de la primera, una clase sólo puede derivar de una única superclase. Para el segundo tipo, una clase puede descender de varias superclases. En Java sólo se dispone de herencia simple, para una mayor sencillez del lenguaje, si bien se compensa de cierta manera la inexistencia de herencia múltiple con un concepto denominado interface, que estudiaremos más adelante.

D. Declaración Para indicar que una clase deriva de otra, heredando sus propiedades (métodos y atributos), se usa el término extends, como en el siguiente ejemplo: public class SubClase extends SuperClase { // Contenido de la clase } Por ejemplo, creamos una clase MiPunto3D, hija de la clase ya mostrada MiPunto: class MiPunto3D extends MiPunto { int z; MiPunto3D( ) { x = 0; // Heredado de MiPunto y = 0; // Heredado de MiPunto z = 0; // Nuevo atributo}}

La palabra clave extends se utiliza para decir que deseamos crear una subclase de la clase que es nombrada a continuación, en nuestro caso MiPunto3D es hija de MiPunto. E. Limitaciones en la herencia Todos los campos y métodos de una clase son siempre accesibles para el código de la misma clase. Para controlar el acceso desde otras clases, y para controlar la herencia por las subclase, los miembros (atributos y métodos) de las clases tienen tres modificadores posibles de control de acceso: public: Los miembros declarados public son accesibles en cualquier lugar en que sea accesible la clase, y son heredados por las subclases. private: Los miembros declarados private son accesibles sólo en la propia clase. protected: Los miembros declarados protected son accesibles sólo para sus subclases

Por ejemplo: class Padre { // Hereda de Object // Atributos private int numeroFavorito, nacidoHace, dineroDisponible; // Métodos public int getApuesta() { return numeroFavorito; } protected int getEdad() { return nacidoHace; private int getSaldo() { return dineroDisponible;

class Hija extends Padre { // Definición } class Visita { En este ejemplo, un objeto de la clase Hija, hereda los tres atributos (numeroFavorito, nacidoHace y dineroDisponible) y los tres métodos ( getApuesta(), getEdad() y getSaldo() ) de la clase Padre, y podrá invocarlos. Cuando se llame al método getEdad() de un objeto de la clase Hija, se devolverá el valor de la variable de instancia nacidoHace de ese objeto, y no de uno de la clase Padre.

Sin embargo, un objeto de la clase Hija, no podrá invocar al método getSaldo() de un objeto de la clase Padre, con lo que se evita que el Hijo conozca el estado de la cuenta corriente de un Padre. La clase Visita, solo podrá acceder al método getApuesta(), para averiguar el número favorito de un Padre, pero de ninguna manera podrá conocer ni su saldo, ni su edad (sería una indiscreción, ¿no?).