Programación Orientada a Objetos en Java

Slides:



Advertisements
Presentaciones similares
Programación orientada a objetos en Visual Basic .NET
Advertisements

Ayudantía Pre-Actividad 5 Multimedios. Ayudantía Pre-Actividad 5 (1) creación de varias clases, y composición (2) manejo de threads (3) manejo de excepciones.
Curso de java básico (scjp)
Curso de java básico (scjp)
FUNDAMENTALS OF THE JAVA PROGRAMMING LANGUAGE
Curso de Java Capitulo 7: Continuación Poo Profesor:
Curso de Java Capitulo 7: Conceptos sobre poo Profesor:
Definición de Clases y Variables de referencia.
POLIMORFISMO UNIDAD 4.
Herencia en C#.
Lenguaje de programación Java
Clases Extendidas La clase extendida hereda los campos y métodos de la clase de la cual extiende. La clase original se conoce como superclase y la clase.
Arquitectura CLARO-TECNOTREE
Polimorfismo Unidad 4.
Conceptos más avanzados de Programación Orientada a Objetos Programación 2005 Licenciatura de Lingüística y Nuevas Tecnologías.
Inner classes CAPITULO 8.
Capitulo 4 Excepciones.
Herencia y Polimorfismo
UNIVERSIDAD LATINA (UNILA) ENCAPSULACION Y HERENCIA
Aplicación del paradigma orientado a objetos
Características Objeto Relacionales en Oracle
Diseño y programación de
PROGRAMACION ORIENTADA A OBJETOS
Programación Orientada a Objetos en Java
PROGRAMACIÓN EN JAVA Curso-taller inicial de programación en JAVA Facultad de Estadística e Informática TEMA II.
HERENCIA.
Lenguaje de Programación Java Profesor: Mauricio Martínez P. Análisis y Diseño Orientado a Objetos UML: Lenguaje de Modelamiento Unificado Toma de Requerimientos.
Medio de tele-comunicación
Herencia y Polimorfismo en JAVA
Estructura de Datos En C++
Polimorfismo Lenguajes de Programación II Corporación Universitaria del Caribe CECAR.
Lic. Rosemary Torrico Bascopé
Abstracción de los datos y Orientación a Objeto Clase 13.
Clases y objetos La unidad fundamental de programación OO son las clases. Conjunto de métodos y semántica Qué se va a hacer POO Clase: que define la implementación.
Universidad Autónoma del Estado de Hidalgo Instituto de Ciencias Básicas e Ingeniería Área Académica de Computación y Electrónica Licenciatura en Ciencias.
1 Herencia en Java Agustín J. González Diseño y Programación Orientados a Objetos.
6. Herencia. Clases abstractas. Genericidad
1 Interfaces Agustín J. González ELO Introducción En C++ se permite la herencia múltiple; es decir, es posible derivar una clase de dos o más clases.
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.
Jerarquía de Clases: Herencia, Composición y Polimorfismo
Capitulo # 4 herencia PROGRAMACION III UNIVERSIDAD
Diplomado Desarrollo de Aplicaciones en Internet
Abstracción de Datos y Orientación a Objetos.. Vista General. Por qué la abstracción de datos y la programación orientada a objetos. Módulos y módulos.
SCJP SUN CERTIFIED PROGRAMMER FOR JAVA 6. SEMANA DOS ORIENTACION A OBJETOS.
Lenguajes de Programación Tema 3
1 Objetos y Clases en Java ELO-329: Diseño y Programación Orientados a Objetos.
Programación avanzada en Java Miguel Ángel Corella 23 de Septiembre de 2005.
UNIDAD VI Recursos esenciales de Java LSC. Natalia Rodríguez Castellón.
SCJP SUN CERTIFIED PROGRAMMER FOR JAVA 6
Metodología de Programación Ayudantía 5 lelagos.ublog.cl 2009.
Informatica II1 Clases Extendidas La clase extendida hereda los campos y métodos de la clase que ha sido extendida. La clase original se conoce como superclase.
1 Herencia en Java Agustín J. González Diseño y Programación Orientados a Objetos.
Servlets Servlets son módulos que extienden a servidores orientados a request/response, como por ejemplo Servidores Web “java-enabled”. Un servlet puede.
Clases y Objetos en Java ELO329: Diseño y Programación Orientados a Objetos.
Herencia. Introducción La idea básica es poder crear clases basadas en clases ya existentes. Cuando heredamos de una clase existente, estamos re-usando.
Unidad 2.1: INTRODUCCIÓN A LA ORIENTACIÓN A OBJETOS.
Programación orientada a objetos
:: Prof. Yeniffer Peña Programación I Programación Orientada a Objetos Presentación.
Herencia y Clases Abstractas
CONCEPTOS.
Programación orientada a objetos Capítulo 9 Algo mas sobre herencias.
Tipo de relación entre clases Es uno de los aspectos que distinguen el paradigma de orientación a objetos frente a otros paradigmas. Mecanismo que,
Clases “ Es una Abstracción de un elemento del mundo real ”
Programación orientada a objetos La programación orientada a objetos o POO (OOP según sus siglas en inglés) es un paradigma de programación que usa objetos.
:: Prof. Yeniffer Peña Programación I Programación Orientada a Objetos Presentación.
Fundamentos de Programación Departamento de Lenguajes y Sistemas Informáticos Práctica 4 Versión Diseño de tipos Igualdad, representación, código,
Métodos en Java. Estructura de un programa en Java ► La relación con la vida misma la podemos ver en el siguiente comentario: Imaginemos que dos clases.
:: Prof. Yeniffer Peña Programación I Programación Orientada a Objetos Presentación.
INTRODUCCIÓN A LA PROGRAMACIÓN ORIENTADA A OBJETOS Herencia.
Programación en Java Introducción a Java. Reseña histórica Surge en 1991 por Sun Microsystems Desarrollado para electrodomésticos Se buscaba un código.
Transcripción de la presentación:

Programación Orientada a Objetos en Java Unidad 3 Herencia y Polimorfismo

Temario Herencia Reescritura de métodos Polimorfismo Clases abstractas Interfaces

Herencia In object-oriented programming (OOP), Inheritance is a way to compartmentalize and reuse code by creating collections of attributes and behaviors called objects which can be based on previously created objects. In classical inheritance where objects are defined by classes, classes can inherit other classes. The new classes, known as Sub-classes (or derived classes), inherit attributes and behavior of the pre-existing classes, which are referred to as Super-classes (or ancestor classes). The inheritance relationship of sub- and superclasses gives rise to a hierarchy. In Prototype-based programming objects can be defined directly from other objects without the need to define any classes. The inheritance concept was invented in 1967 for Simula. Wikipedia

Herencia en Java Todas las clases son descendientes de la clase Object La cláusula extends especifica el ancestro inmediato de la clase Una subclase o clase derivada hereda todos los campos y métodos de la superclase o clase base Java soporta herencia simple (sólo una clase base) ancestro superclase clase base "hereda de" "extiende" "is a" descendientes subclases clases derivadas

Ejemplo La clase Circulo es derivada de la clase base Figura class Figura { int x, y; public void print() { ... } public void setX(int x) { this.x = x; } public void setY(int y) { this.y = y; } } class Rectangulo extends Figura { int largo, ancho; public void setLargo(int largo) { this.largo = largo; } public void setAncho(int ancho) { this.ancho = ancho; } class App { void f() { Rectangulo r = new Rectangulo(); r.setX(10); r.setY(20); r.setAncho(100); r.setLargo(300); La clase Circulo es derivada de la clase base Figura La clase Circulo hereda métodos setX y setY de clase base Figura

Encapsulamiento Una clase derivada tiene acceso a los miembros public y protected de una clase base, aunque pertenezcan a paquetes diferentes Una clase derivada tiene acceso a los miembros package de una clase base si ambas clases pertenecen al mismo paquete Una clase derivada no tiene acceso a los miembros private de una clase base

Polimorfismo Polymorphism, in the context of object-oriented programming, is the ability of one type, A, to appear as and be used like another type, B. The purpose of polymorphism is to implement a style of programming called message-passing in the literature, in which objects of various types define a common interface of operations for users. In strongly typed languages, polymorphism usually means that type A somehow derives from type B, or type C implements an interface that represents type B. In weakly typed languages types are implicitly polymorphic. Wikipedia

Polimorfismo circulo figura Circulo circulo; circulo = new Circulo(); circulo Figura figura; figura = circulo; figura Compila y ejecuta bien (un círculo es una figura) Restricción: no se puede usar figura para acceder a métodos especializados de Circulo figura.getRadio(); // no compila

Polimorfismo Java permite asignar un objeto a una variable declarada con un tipo de datos ancestro void metodo1(Figura f) { f.print(); ... } void metodo2() { metodo1(new Circulo());

Reescritura de Métodos Method overriding, in object oriented programming, is a language feature that allows a subclass or child class to provide a specific implementation of a method that is already provided by one of its superclasses or parent classes. The implementation in the subclass overrides (replaces) the implementation in the superclass by providing a method that has same name, same parameters or signature, and same return type as the method in the parent class.The version of a method that is executed will be determined by the object that is used to invoke it. If an object of a parent class is used to invoke the method, then the version in the parent class will be executed. If an object of the subclass is used to invoke the method, then the version in the child class will be executed. Wikipedia

Reescritura de Métodos public class DTE { ... public void validar() { } public class Factura extends DTE { super.validar(); Reescritura del método validar() en clase derivada (la firma y el tipo de retorno coinciden con los de la clase base) Invocación a funcionalidad provista en la clase base, para extender en lugar de reemplazar

Dynamic Binding Al invocar un método no static, el tipo real del objeto sobre el que se invoca el método — y no el tipo de la referencia — es utilizado para determinar qué versión del método invocar El tipo del objeto sobre el que se invoca el método se obtiene en tiempo de ejecución, por eso esta funcionalidad recibe el nombre de dynamic binding, o late binding void procesarDTE(DTE dte) { dte.validar(); ... } Dynamic binding: invoca a Factura.validar() si dte es una referencia a una Factura

Compatibilidad de Tipos Java es fuertemente tipeado, exige compatibilidad de tipos en tiempo de compilación: Permite asignar un objeto a una variable de un tipo ancestro Permite asignar un objeto a una variable de un tipo descendiente, pero exige que se explicite este uso, mediante un cast (si el cast falla en ejecución, la máquina virtual lanza un ClassCastException) Factura factura = (Factura) dte; No permite realizar una conversión de un objeto a un tipo que no es ancestro ni descendiente

Identificación de Tipo El método getClass de la clase Object retorna un objeto de tipo Class correspondiente a la clase real a la que pertenece el objeto El operador instanceof indica si un objeto es de una clase determinada o de alguna clase descendiente if (dte instanceof Factura) { Factura factura = (Factura) dte; // uso de factura } Ojo, no abusar de este mecanismo! (hacerlo significa que se está programando de manera tradicional, sin obtener los beneficios de la OOP)

Constructor en Subclases El constructor de una subclase debe invocar algún constructor de la clase base: Explícitamente: usando base() Implícitamente: si no se invoca el constructor de la clase base explícitamente, se invoca el constructor default class DTE { DTE(Empresa emisor, int folio) { ... } ... } class Factura extends DTE { Factura(Empresa emisor, int folio, Empresa receptor) { super(emisor, folio);

Ejemplo Se desea construir una aplicación que permita manejar múltiples ventanas, con diferentes tipos de documentos: cartas, memos, etc. El sistema debe permitir que se imprima la ventana activa, mediante la opción de menú File/Print

Ejemplo: Diseño con Polimorfismo public class Documento { public void print() {...} } public class Carta extends Documento { public class Memo extends Documento { public class MiAplicacion { public void print() { Window w = GUI.getCurrentWindow(); Documento d = obtenerDocumento(w); d.print(); Dynamic binding: se invoca al método print implementado en la clase del objeto referenciado por la variable d, el cual se determina en ejecución

Consideraciones de Diseño Supongamos que en el diseño anterior, la clase Documento no debe instanciarse, sólo se ha creado para construir una jerarquía de clases y hacer uso de los mecanismos de polimorfismo y dynamic binding; ¿cómo impedir que por error se instancie la clase Documento? Supongamos que en el diseño anterior las clases derivadas de Documento deben proveer una implementación del método print() (no tiene sentido programar una implementación default en la clase Documento); ¿cómo obligar a las clases derivadas a proveer una implementación del método print()?

Clases Abstractas Una clase abstracta no puede ser instanciada Puede contener métodos abstractos, a ser implementados en subclases Puede contener métodos concretos public abstract class Documento { ... public abstract void print(); } public class Carta extends Documento { public void print() { Una subclase de una clase abstracta debe: implementar todos los métodos abstractos heredados, o bien ser a su vez declarada abstracta Clase Documento es abstracta: si se intenta instanciarla, se produce un error de compilación Si la clase Carta no provee una implementación del método print(), se produce un error de compilación

Java No Soporta Herencia Múltiple En ocasiones es útil que una clase se pueda ver de varias formas, utilizando polimorfismo En C++, lo anterior se implementa con herencia múltiple, pero esto genera problemas cuando se hereda implementación Para evitar estos problemas, Java no soporta herencia múltiple, pero sí permite que una clase implemente múltiples interfaces

Interfaces In object-oriented languages the term interface is often used to define an abstract type that contains no data, but exposes behaviors defined as methods. A class having all the methods corresponding to that interface is said to implement that interface (furthermore a class can implement multiple interfaces, and hence can be of different types at the same time). An interface is hence a type definition; anywhere an object can be exchanged (in a function or method call) the type of the object to be exchanged can be defined in terms of an interface instead of a specific class. This allows later code to use the same function exchanging different object types; hence such code turns out to be more generic and reusable. Wikipedia

Interfaces An interface is a kind of classifier that represents a declaration of a set of coherent public features and obligations. An interface specifies a contract; any instance of a classifier that realizes the interface must fulfill that contract. Since interfaces are declarations, they are not instantiable. Instead, an interface specification is implemented by an instance of an instantiable classifier, which means that the instantiable classifier presents a public facade that conforms to the interface specification. Note that a given classifier may implement more than one interface and that an interface may be implemented by a number of different classifiers. UML Specification 2.0

Interfaces Una interfaz (interface) es una colección de métodos abstractos y constantes Una interfaz no puede ser instanciada Una clase que implementa una interfaz debe implementar los métodos declarados en ella Una clase puede implementar múltiples interfaces Una interfaz define un tipo de datos que se puede utilizar en la declaración de variables Una variable declarada mediante una interfaz puede referenciar un objeto de alguna clase que implemente la interfaz Java soporta herencia múltiple de interfaces

Definiendo una Interfaz interface Printable { int PORTRAIT = 0; int LANDSCAPE = 1; void print(int orientacion); } Campos son automáticamente public final static Métodos son automáticamente public abstract

Implementando una Interfaz class Libro extends Documento implements Printable { public void print(int orientacion) { // implementación } class Empleado implements Printable { public void print(int orientacion) { ... } class Rectangulo implements Printable {

Usando una Interfaz Capa genérica Capa cliente class ColaImpresion { static void creaJob(Printable p) { … p.print(Printable.PORTRAIT); } Capa cliente ColaImpresion.creaJob(new Empleado(…)); ColaImpresion.creaJob(new Rectangulo(…)); Libro libro = new Libro(); ColaImpresion.creaJob(libro);

Resumen Herencia es un concepto de OOP mediante el cual una clase adquiere las propiedades y los métodos de otra Una variable de un tipo de datos ancestro puede ser utilizada para referenciar una instancia de una clase descendiente Al invocar sobre un objeto un método de instancia que ha sido redefinido en subclases, la máquina virtual invoca el método definido en la clase real del objeto, obtenida en tiempo de ejecución

Resumen Una clase abstracta (abstract) puede contener métodos abstractos Una interfaz (interface) es una colección de métodos abstractos y constantes Las clases abstractas y las interfaces no pueden ser instanciadas Una clase puede extender a una clase, e implementar un número ilimitado de interfaces Si una clase define o hereda métodos abstractos, debe ser declarada abstracta