Fundamentos de Programación

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

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

Curso de Java POO: Programación orientada a objetos

POO en Java. Relaciones de composición y Herencia. Composición: clase Círculo. Composición. Herencia: La palabra reservada extends

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

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

PROGRAMACION ORIENTADA A OBJETOS EN C++

Prácticas de Programación

Variables. Una variable no es más que un nombre simbólico que identifica una dirección de memoria: vs.

La Herencia: Teoría (1)

Derechos de Acceso: COMPOSICION

Clases y Objetos en Java. ELO329: Diseño y Programación Orientados a Objetos

Aplicaciones de Escritorio

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

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

Programación orientada a objetos. Resumen de Temas Unidad 4: Sobrecarga

Objeto Clase Atributo / Método Encapsulamiento Mensaje Herencia Polimorfismo Encadenamiento Dinámico

Universidad Autónoma de Tlaxcala. M.C. José Juan Hernández Mora. Primera Sesión

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

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

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

ÍNDICE DEL LIBRO Y DEL EBOOK APRENDER A PROGRAMAR EN JAVA DESDE CERO. CURSO PASO A PASO.

Universidad de Cantabria

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

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

Definición de clases: Herencia, polimorfismo, ligadura dinámica

Programación orientada a objetos. Capítulo 8 Mejora de las estructuras mediante herencia

FUNDAMENTOS DE PROGRAMACIÓN. SEPTIEMBRE 2005

Programación orientada a objetos. Resumen de Temas Unidad 6: Polimorfismo y reutilización

Tema 2. El lenguaje de programación Java (Parte 1)

POO en lenguajes compilados de tipos estáticos (Java y C#)

Agradecimientos. Nota de los autores. 1 Problemas, algoritmos y programas 1

Prácticas de Programación

Programación Orientada a Objetos en Java

4.1 - OBJETOS Y CLASES

Computación Avanzada Clase 3. Mauricio Hidalgo Barrientos

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

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

15. Parámetros o argumentos

Identificadores, palabras reservadas, tipos de datos, operadores aritméticos y el sistema estándar de salida en Java

PARA QUÉ SIRVEN LAS INTERFACES JAVA. IMPLEMENTAR UNA INTERFAZ DEL API. VENTAJAS. EJEMPLOS BÁSICOS. (CU00697B)

Bloque práctico 2: Java

Clases Abstractas e Interfaces

Principios de Computadoras II

Encapsulación: clases y objetos

RESUMEN DE CONCEPTOS BASICOS DE PROGRAMACION JAVA

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

Programación Orientada a Objetos (POO)

class Nombre_Clase extends Nombre_SuperClase { cuerpo de la clase extendida }

Programación Orientada a Objetos

Clases en Java. Declaración de clases en Java 02/09/16. Ing. Roberto Martínez Román - public class Alumno { private int matricula;

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

Programación Orientada a Objetos en Java

Tema 3. Programación orientada a objetos en Java (Parte 1)

Práctica 4: Herencia. Objetivos:

Guía - Taller # 2 (JAVA)

Tema 4 Genericidad en Java. Programación Orientada a Objetos Curso 2013/2014

Ejercicios del tema 7: Clases y objetos

Tema 3: Herencia en C++ Programación Orientada a Objetos Curso 2008/2009 Begoña Moros Valle

Introducción a la Programación Orientada a Objetos

CONTENIDOS. 1. Completar el ejemplo de Herencia: Superclase Persona-Subclase Alumno

Compiladores e Intérpretes Proyecto N 1 Sintaxis de MiniJava Segundo Cuatrimestre de 2015

Programación Orientada a Objetos con Java. Elementos Básicos del Lenguaje Java. Creación de un objeto. Creación de un objeto. Creación de un objeto

Lenguajes de Programación Curso Práctica 4. Herencia. Utilización de interfaces y clases abstractas. 1. Interfaces Clases abstractas 2

Forma Básica Clase Java

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

Tema 2. Técnicas básicas de POO. Técnicas de Programación - Curso 2007/08

PROGRAMACIÓN ORIENTADA A OBJETOS (L40629) Sabino Miranda-Jiménez

Centro Asociado Palma de Mallorca. Antonio Rivero Cuesta

FUNDAMENTOS DE PROGRAMACIÓN Curso: 2013/14 EXAMEN PARA ALUMNOS PRESENTADOS AL PRIMER PARCIAL PRIMERA PARTE. EJERCICIO 1 Cuestiones (1 punto)

En este capitulo se estudiarán los conceptos relacionados a métodos, como lo son sobrecarga, métodos estáticos.

Curso Fundamentos de Informática Lección 7. Programación Orientada a Objetos

1.2. Es Java un lenguaje ideal para aprender a programar? 1.4. Cuáles son las versiones y distribuciones Java y cuál usar?

Introducción a Java LSUB. 30 de enero de 2013 GSYC

Pruebas de unidad con JUnit

POO en Java IV: Herencia (Parte 1)

Estructura de las Aplicaciones Orientadas a Objetos Herencia y Polimorfismo

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

Conceptos de Programación Orientada a Objetos

Tema 3: Tipos y clases

2. Estructura de un programa en Java

Metodología y Tecnología de la Programación

Tema 3: Tipos y clases

Unidad II. Fundamentos de programación en Java. Ing. José Luis Llamas Cárdenas

Java Básico. Métodos estáticos

Tema 7. El sistema de clases

Modulo 11. Clases y Objetos en Java

Experto Universitario en Desarrollo de Aplicaciones para Dispositivos Móviles. Sesión 1: Introducción al Lenguaje Java

Necesidad de la herencia pertenencia variedad is a has a herencia variedad definir una clase modificando una o más clases añadir nuevos miembros

Práctica 3 mtp. metodoloxía e tecnoloxía da programación. Presentar detalles básicos sobre la sintaxis del lenguaje de programación Java.

Unidad Nº V Listas Enlazadas

Curso de Java POO: Programación orientada a objetos

CONCEPTOS BASICOS DEL LENGUAJE JAVA

Transcripción:

Fundamentos de Programación Extensión de clases: herencia y polimorfismo 13.12.2010 José A. Mañas <jmanas@dit.upm.es> Dpto. de Ingeniería de Sistemas Telemá@cos hcp://www.lab.dit.upm.es/~fprg/

extensión de clases class sub extends super {... super sub 13.12.2010 2

class B extends A public class A { private int m; public int getm() { return m; public class B extends A { private int n; public int getn() { return n; 13.12.2010 3

class B extends A 13.12.2010 4

herencia B hereda de A los campos que no sean private los métodos que no sean private class B extends A B puede aportar lo que quiera si no colisiona 13.12.2010 5

ventajas Se evita el código duplicado se escribe en 1 clase y se hereda en otras clases sólo hay que arreglar los errores en la clase madre Se abre la posibilidad de extender el programa sub@pos 13.12.2010 6

jerarquías sub@pos Poligono Triangulo Cuadrilatero Cuadrado Rectangulo Rombo 13.12.2010 7

... es un... Se dice que un triángulo es un polígono un cuadrilátero es un poligono un cuadrado es un cuadrilátero, que es un poligono un rectángulo es un cuadrilátero, que es un poligono un rombo es un cuadrilátero, que es un poligono 13.12.2010 8

inicialización: constructores class B extends A Para inicializar un objeto hay que inicializar antes la parte heredada Los constructores de B empiezan llamando a los constructores de A Bien explícitamente El programador escribe el código de la llamada super(argumentos del constructor de la superclase); Bien implícitamente Si el programado no lo escribe: el compilador lo inyecta super(); 13.12.2010 9

polimorfismo Una variable de @po superclase puede albergar valores de cualquier subclase Triangulo t =...; Poligono p = t; Rectangulo r =...; Cuadrilatero c = r; Poligono p = r; las variables pueden adoptar diferentes formas 13.12.2010 10

polimorfismo ArrayList<Poligono> dibujo= new ArrayList<Poligono>; dibujo.add (new Triangulo(...) ); dibujo.add (new Cuadrado(...) ); dibujo.add (new Cuadrilatero(...) ); for (Poligono p : dibujo) { p.dibuja(); 13.12.2010 11

susbtución - upcas(ng class B extends A Las variables de clase B sólo pueden referirse a objetos de clase B Las variables de clase A pueden referenciar objetos de clase A (normal) pueden referenciar objetos de clase B (upcas&ng) El upcas&ng es 100% seguro y siempre se puede aplicar A vara= new B(); 13.12.2010 12

de qué clase soy? Exactamente soy... System.out.print ( x.getclass() ) ; Pertenezco a la jerarquía de... Soy sub@po de... if (x instanceof Cuadrilatero)... 13.12.2010 13

subir y bajar Subir: upcas&ng Poligono poligono= new Cuadrado() siempre es posible Bajar: downcas&ng Cuadrado cuadrado= (Cuadrado) poligono; hay que hacerlo explícitamente sólo es posible si es cierto si no, se salta un error 13.12.2010 14

ámbitos de visibilidad Los miembros de una clase puede verse... afecta a campos y métodos private sólo dentro del fichero.java no se dice nada sólo dentro del directorio (paquete) protected public dentro del directorio y en las subclases desde cualquier si@o 13.12.2010 15

herencia B hereda de A los miembros (campos y métodos) B puede ocultar campos de A (los no private) B puede redefinir métodos de A (de objeto) class B extends A poco importante B puede aportar lo que quiera si no colisiona 13.12.2010 16

La subclase puede ocultar campos a base de definir campos con el mismo nombre ocultación poco importante Se puede acceder a los elementos de la superclase vía upcas&ng creando una variable de la clase que necesitamos 13.12.2010 17

ocultación poco importante public class A { protected char x = 'a'; A a = new A(); B b = new B(); A ab= new B(); System.out.println(a.x); System.out.println(b.x); System.out.println(ab.x); public class B extends A { protected char x = 'b'; // upcas@ng a b a // se cree que es A 13.12.2010 18

La subclase puede redefinir métodos de objetos a base de definir métodos con la misma signatura mismo nombre mismo número y @po de argumentos igual o más visible (paquete) public igual resultado redefinición signatura overriding 13.12.2010 19

polimorfismo Si class B extends A y B modifica metodo(), y hacemos upcas&ng A ab= new B (); class A { void metodo() {... class B extends A { void metodo() {... si escribimos el compilador cree que nos referimos a pero java ejecuta ab.metodo() A.metodo() B.metodo() 13.12.2010 20

public class A { public String getme() { return "Soy A"; polimorfismo public class B extends A { public String getme() { return "Soy B"; muy importante A a = new A(); B b = new B(); A ab= new B(); System.out.println(a.getMe()); System.out.println(b.getMe()); System.out.println(ab.getMe()); // upcas@ng Soy A Soy B Soy B // sabe que es B 13.12.2010 21

elección dinámica el programa A ab = new B(); ab.getme(); las clases A getme() B extends A el objeto getme() A ab instance of la variable 13.12.2010 22

estábco vs dinámico A ab = new B(); Tipo está@co el que @ene una variable en compilación ab es de @po A Tipo dinámico el del objeto al que se referencia en ejecución ab referencia un objeto de @po B 13.12.2010 23

super Sólo se puede acceder a un método redefinido desde la subclase inmediatamente inferior usando el prefijo super public class B extends A { public String getme() { return super.getme() + "Soy B"; A a = new B(); a.getme(); // upcas@ng Soy A Soy B 13.12.2010 24

super public class Punto2D { private double x, y; public void set(double[] coordenadas) { this.x = coordenadas[0]; this.y = coordenadas[1]; public class Punto3D extends Punto2D { private double z; public void set(double[] coordenadas) { super.set(coordenadas); this.z = coordenadas[2]; 13.12.2010 25 / 18

class Object Todas las clases de Java son extensiones de la clase Object (predefinida) Object x= new cualquiercosa (...); Object proporciona métodos generales public String tostring (); public boolean equals (Object x); 13.12.2010 26

class Object System.out.println(x) sabe imprimir cualquier objeto public class Fraccion { private int num; private int den; public String tostring() { return num + / + den; 13.12.2010 27

Cualquier objeto se puede comparar con cualquier otro class Object public class Object { public class Fraccion { private int num; private int den; public boolean equals(object x) { return x == this; public boolean equals(object x) { if (x == this) return true; if (x == null) return false; if (x.getclass()!= this.getclass()) return false; Fraccion fraccion = (Fraccion)x; return this.num * fraccion.den == this.den * fraccion.num; 13.12.2010 28 / 18

final Una clase final no se puede extender public final class String {... Un método final no se puede redefinir public final String cifra(string texto, String clave); evita sorpresas 13.12.2010 29

conceptos Extensión Herencia superclases y subclases Jerarquías de @pos super@pos y sub@pos Subir y bajar: cas@ng subir: sus@tución o upcas&ng bajar: downcas&ng 13.12.2010 30

conceptos protected Ocultación (un poco secundario) Redefinición Polimorfismo @po está@co vs @po dinámico elección dinámica de método (muy importante) final: clases y métodos 13.12.2010 31

ejercicio 1.1 Dado un mensajero public class Mensajero { public String recita() { return Feliz Navidad ; 1. hacer un refinamiento: mensajero borde que dice Ajo y Agua 2. hacer un refinamiento: mensajero redicho que dice dicen que diga Feliz Navidad 13.12.2010 32

Escribir clases para calcular el perímetro de ejercicio 2.1 Poligono ver@ces... Triangulo Cuadrilatero A, B, C A, B, C, D Rectangulo base, altura Rombo eje1, eje2 13.12.2010 33

ejercicio 3.1 Dada una cola public class Cola { private List<String> datos= new ArrayList<String>(); public Cola() { public void mete(string s) { datos.add(s); public String saca() { return datos.remove(0); hacer un refinamiento que impone un tamaño máximo si la cola está llena, no se inserta nada hacer otro refinamiento donde si la cola está llena, se elimina el primero antes de añadir 13.12.2010 34