Clases abstractas e interfaces



Documentos relacionados
EXAMEN FINAL Metodología y Programación Orientada a Objetos. Curso Cuatrimestre de otoño. 17 de Enero de 2011

Curso de Java POO: Programación orientada a objetos

2.2.- Paradigmas de la POO

Relaciones entre clases: Diagramas de clases UML

Programación en Java. Programación en OO

Programación Orientada a Objetos en Java

Introducción a la Programación Orientada a Objetos

1. Qué tipos de relación hay entre las siguientes clases?

POLIMORFISMO "una interfaz, múltiples métodos".

Caso práctico Alquiler de películas en un vídeo-club

PHP y MySQL. Inicio: - Herencia - Palabra clave Final - Polimorfismo - Type Hinting - Abstracción de clases

Programación Orientada a Objetos con Java

15. Parámetros o argumentos

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

Tutorial de UML. Introducción: Objetivos: Audiencia: Contenidos:

SOLUCION PARCIAL TASK SCHEDULER. Task Scheduler

Ejercicio 1 (3 puntos).-

Java: Clases Abstractas e Interfaces

Java Inicial (20 horas)

Notación UML para modelado Orientado a Objetos

Se podrá afiliar en cualquiera de los cajeros automáticos de nuestra red en todo el país.

Patrones Creacionales Builder. Patrones Creacionales Abstract Factory. Patrones Creacionales Singleton. Patrones Creacionales Prototype

Modularización Relación de ejercicios

Patrones para persistencia (I) Ingeniería del Software II

Uso de excepciones en Java

Pruebas de unidad con JUnit

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

Red de Recargas Centro de Clearing

class Nombre_Clase extends Nombre_SuperClase { cuerpo de la clase extendida }

MANUAL DE AYUDA TAREA PROGRAMADA COPIAS DE SEGURIDAD

efactura Online La fibra no tiene competencia

Curso de Python Inicial

Programación Orientada a Objetos en C#.NET CAPÍTULO 8 E V E N T O S. Ing. Bruno López Takeyas, M.C.

DIAGRAMA DE CLASES EN UML

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

Introducción a Protégé

NORMA 34.14(SEPA) 05/11/2013

Patrones de Diseño. Patrón estructural Composite. Técnicas de Programación - Curso 2008/09 (Esther Guerra Sánchez)

Prof. Dr. Paul Bustamante

Programación Avanzada Ingeniería Civil en Computación

Factory method (Gamma et al.)

Benemérita Universidad Autónoma del Estado de Puebla

GUIA PROGRAMACIÓN ORIENTADA A OBJETOS

Como Usar la Nueva Tarjeta de Débito EDD

Manual instalación Windows 8. Instalar Windows 8 paso a paso

DISEÑO DE COMPONENTES DE SOFTWARE *

Apuntes de ACCESS. Apuntes de Access. Campos de Búsqueda:

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

Herencia e Interfaces

INDICE. 1. Introducción El panel Entities view El panel grafico Barra de botones Botones de Behavior...

MANUAL APLICACIÓN. SOFTWARE GESTIÓN DE CLÍNICAS DENTALES

Históricos Impresión de Facturas

Para añadir un presupuesto nuevo, seleccionaremos en el apartado Presupuestos la opción en la parte superior Añadir.


CURSO INSTALACION E IMPLEMENTACION ALOJA SOFTWARE HOTEL MODULO 02: Datos Adicionales de configuración [1]

Constructores y Destructores

Partes de un programa en Java. A. Ejemplo de un Programa en Java /* Programa Ejemplo de Java: Muestra una Ventana Archivo: Ejemplo1.

Qué es Google Calendar? Qué se puede hacer en Google Calendar?

Manual de software. Dynamic Cloud. 10/2014 MS-Dynamic_Cloud v1.2

Programación orientada a objetos

Universidad de Cantabria

TEMA 7: DIAGRAMAS EN UML

Programación Avanzada SOLUCIÓN EXAMEN FEBRERO 2011

Relaciones entre Clases Programación Avanzada Prim FCC-Buap Profesor: M. C. Miguel Rodríguez Hernandez

Introducción a Java LSUB. 15 de enero de 2015 GSYC

Manual de usuario Noticias y Accesos Directos en Facultades ÍNDICE

Curso de Doctorado: Tecnologías de Objetos

Ingeniería de Software II Tema 2: Diseño

V Manual de Portafirmas V.2.3.1

Modelado Estático Avanzado (Generalizaciones) Diseño de Software Avanzado Departamento de Informática

CATÁLOGO CATÁLOGO CATÁLOGO CATÁLOGO CATÁLOGO

Manual de uso de la plataforma para monitores. CENTRO DE APOYO TECNOLÓGICO A EMPRENDEDORES -bilib

Herencia. 3.- Herencia. Declaración de una clase derivada en Delphi. Jerarquía de clases

Estructuras de Datos y Algoritmos Tecnólogo en Informática

Incidencias: Todas las incidencias que ocurrirán durante el apadrinamiento de un niño se deben registrar para poder buscar soluciones.

ENVIO SMS A TRAVÉS DE WEB

Person IP CRM Manual MOBILE

Para crear una actividad, pulsamos sobre la pestaña actividades

Conversor de audios y vídeos.

FARMACODE software específico para farmacias

Ejercicios - Persistencia en Android: ficheros y SQLite

Kaldeera Advanced Forms 2009 Guía del usuario

Novedades en Gestión de Expedientes (9 junio 2015)

BANCO CENTRAL DE RESERVA DEL PERÚ

Solución al Examen de Prácticas de Programación (Ingeniería Informática)

GUÍA RED SOCIAL FACEBOOK

ÍNDICE

El protocolo IMAP ofrece la descarga de correos en modo sólo lectura, es decir descarga sólo una copia del correo y no permite el borrado.

SYMBALOO 1º.- QUÉ ES? 2º.-Darse de alta en Symbaloo

En cualquier caso, tampoco es demasiado importante el significado de la "B", si es que lo tiene, lo interesante realmente es el algoritmo.

Manual CMS Mobincube

La forma inteligente de proteger su dinero cuando viaja al extranjero

Contabilidad y Estados Financieros Programas de Gestión

Clases y funciones amigas: friend

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

7 ESQUEMA DE CODIFICACIÓN DE CUENTAS

Derechos de Acceso: COMPOSICION

Compartir carpetas en XP

Transcripción:

Clases abstractas e interfaces Clases abstractas Una clase abstracta es una clase que no se puede instanciar se usa únicamente para definir subclases Cuándo es una clase abstracta? En cuanto uno de sus métodos no tiene implementación (en Java, el método abstracto se etiqueta con la palabra reservada abstract). Cuándo se utilizan clases abstractas? Cuando deseamos definir una abstracción que englobe objetos de distintos tipos y queremos hacer uso del polimorfismo. Figura es una clase abstracta (nombre en cursiva en UML) porque no tiene sentido calcular su área, pero sí la de un cuadrado o un círculo. Si una subclase de Figura no redefine area(), deberá declararse también como clase abstracta. OOP Principios de diseño: Java - 16 - Fernando Berzal

public abstract class Figura protected double x; protected double y; public Figura (double x, double y) this.x = x; this.y = y; public abstract double area (); public class Circulo extends Figura private double radio; public Circulo (double x, double y, double radio) super(x,y); this.radio = radio; public double area () return Math.PI*radio*radio; public class Cuadrado extends Figura private double lado; public Cuadrado (double x, double y, double lado) super(x,y); this.lado = lado; public double area () return lado*lado; OOP Principios de diseño: Java - 17 - Fernando Berzal

Interfaces Una interfaz es una clase completamente abstracta (una clase sin implementación) En el ejemplo anterior, si no estuviésemos interesados en conocer la posición de una Figura, podríamos eliminar por completo su implementación y convertir Figura en una interfaz: public interface Figura public double area (); En Java, las interfaces se declaran con la palabra reservada interface de manera similar a como se declaran las clases abstractas. En la declaración de una interfaz, lo único que puede aparecer son declaraciones de métodos (su nombre y signatura, sin su implementación) y definiciones de constantes simbólicas. Una interfaz no encapsula datos, sólo define cuáles son los métodos que han de implementar los objetos de aquellas clases que implementen la interfaz. OOP Principios de diseño: Java - 18 - Fernando Berzal

public class Circulo implements Figura private double radio; public Circulo (double radio) this.radio = radio; public double area () return Math.PI*radio*radio; public class Cuadrado implements Figura private double lado; public Cuadrado (double lado) this.lado = lado; public double area () return lado*lado; En Java, para indicar que una clase implementa una interfaz se utiliza la palabra reservada implements. La clase debe entonces implementar todos los métodos definidos por la interfaz o declararse, a su vez, como una clase abstracta (lo que no suele ser especialmente útil): abstract class SinArea implements Figura OOP Principios de diseño: Java - 19 - Fernando Berzal

Herencia múltiple de interfaces Una clase puede implementar varios interfaces simultáneamente, pese a que, en Java, una clase sólo puede heredar de otra clase (herencia simple de implementación, múltiple de interfaces). public abstract class Figura public abstract double area (); public interface Dibujable public void dibujar (); public interface Rotable public void rotar (double grados); public class Circulo extends Figura implements Dibujable public class Cuadrado extends Figura implements Dibujable, Rotable OOP Principios de diseño: Java - 20 - Fernando Berzal

El principio de segregación de interfaces Robert C. Martin: C++Report, 1996 Los clientes de una clase no deberían depender de interfaces que no utilizan. PROBLEMA: Estamos implementando un sistema de seguridad en el cual controlamos varias puertas. Algunas de esas puertas van conectadas a un programa temporizador que las bloquea automáticamente pasado cierto tiempo: Ahora bien, deseamos que el temporizador controle también otros dispositivos (como una alarma que se dispara automáticamente), por lo que aplicamos el principio de inversión de dependencias: OOP Principios de diseño: Java - 21 - Fernando Berzal

Como Java sólo permite herencia simple (de implementación), hemos hecho que Puerta herede de la clase abstracta ClienteTemporizador para que PuertaTemporizada pueda funcionar con un temporizador. Como consecuencia, todas las puertas, necesiten o no temporizador, dependen del interfaz que utilizan los clientes de Temporizador. Contaminación de la interfaz: Cuando se añade un método a una clase base simplemente porque una de sus clases derivadas lo necesita. ß La interfaz de la clase base es más compleja de lo que tiene que ser, al incluir métodos que no están directamente relacionados con ella [complejidad innecesaria] ß Lo que se añade a la clase base tiene que estar disponible en todas sus clases derivadas (y funcionar correctamente, si queremos respetar el principio de sustitución de Liskov). ß Si tuviésemos que actualizar la interfaz que han de usar los clientes de Temporizador, tendríamos que modificar también la implementación de Puerta [fragilidad]. La clave: Los clientes de un objeto de tipo T no necesitan una referencia al objeto de tipo T para acceder a él: basta con una referencia a uno de sus tipos base, o bien una referencia a un objeto auxiliar que delegue las llamadas necesarias en el objeto original de tipo T. OOP Principios de diseño: Java - 22 - Fernando Berzal

Separación por herencia múltiple (cuando todas las clases base menos una son interfaces) class PuertaTemporizada extends Puerta implements ClienteTemporizador Separación por delegación (cuando habría que heredar simultáneamente de varias clases) class PuertaTemporizada extends Puerta adaptador = new AdaptadorPT (this); temporizador.registrar(adaptador); OOP Principios de diseño: Java - 23 - Fernando Berzal

Ejemplo: Banca electrónica Un sistema de banca electrónica debe tener varias interfaces de usuario para que los clientes del banco puedan efectuar operaciones (en un cajero automático, por teléfono y por Internet) Sea cual sea el medio escogido, el cliente ha de poder ejecutar varias transacciones: Realizar depósitos (ingresar dinero en su cuenta). Retirar efectivo (sacar dinero de su cuenta). Realizar transferencias de dinero. Consultar el saldo y los últimos movimientos. Recargar el móvil OOP Principios de diseño: Java - 24 - Fernando Berzal

Solución A Interfaz contaminado Cada tipo de transacción utiliza algunos métodos que las demás transacciones no siempre utilizan Un nuevo tipo de transacción introducirá cambios en InterfazUsuario que afectarán al funcionamiento de los demás tipos de transacciones. OOP Principios de diseño: Java - 25 - Fernando Berzal

Solución B Adaptadores OOP Principios de diseño: Java - 26 - Fernando Berzal

Solución C Segregación de interfaces OOP Principios de diseño: Java - 27 - Fernando Berzal