18. Interfaces Declaración de una interfaz

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

5. Sentencias selectivas o condicionales

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

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

8. Sentencia return y métodos

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

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

15. Parámetros o argumentos

Las plantillas permiten definir funciones genéricas.

PROGRAMACION ORIENTADA A OBJETOS EN C++

GUÍA DE ESTILO EN JAVA

Elementos de un programa en C

4. Operadores Operador asignación

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

Modulo 11. Clases y Objetos en Java

Interfaces y Clases Internas. ELO329: Diseño y Programación Orientados a Objetos

Todo programa en 'C' consta de una o más funciones, una de las cuales se llama main.

Clases Abstractas e Interfaces

Centro Asociado Palma de Mallorca. Antonio Rivero Cuesta

Introducción a la Programación Orientada a Objetos

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

INTRODUCCIóN A LA PROGRAMACIóN APUNTES DE JAVA APUNTES DE JAVA

9. Objetos y clases Clases

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

Tema: Introducción al IDE de Microsoft Visual C#.

Objetivos de la sesión. Aplicación de consola 7/30/11. Código con que se inicia un programa en Visual C# (aplicación de consola)

Desde los programas más simples escritos en un lenguaje de programación suelen realizar tres tareas en forma secuencial.

Patrones de Diseño. Patrón estructural Composite. Técnicas de Programación - Curso 2007/08

Programación Orientada a Objetos (POO)

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

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

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

Tema 4: Corrección y Robustez en C++ Programación Orientada a Objetos Curso 2008/2009 Begoña Moros Valle

Tema 7: Polimorfismo. Índice

Un identificador le da nombre único a un elemento en un programa (Variables, procedimientos, etc.). No puede contener operadores como + - * /

Una Clase: define un grupo de objetos que tienen propiedades similares y se comportan de manera similar.

2. Estructura de un programa en Java

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

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

Funciones como Subprogramas en C++

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

LENGUAJE. Tema 2 Elementos de un programa

Descripción y Contenido del Curso. Programación C++ Capacity Academy.

Tema 3: Programación orientada a objetos (I)

RESUMEN DE CONCEPTOS BASICOS DE PROGRAMACION JAVA

Aquí se declaran los. Aquí se declaran los métodos de la clase. *Atributos de la clase

Tutorial de C# Delegados y Eventos. Por: Óscar López, M.Sc.

Desarrollo de aplicaciones con JAVA, JCreator, JDeveloper NetBeans

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

GUIA 2: Repaso sobre uso de C#. Funciones, métodos y arreglos.

Las clases como tipos de datos definidos por el usuario

La Herencia: Teoría (1)

1. Sobrecarga de operadores. 2. Métodos operadores unarios Operador de incremento (prefijo)

Apuntadores en C y C++

Práctica 2: Java Remote Method Invocation (RMI)

Guía - Taller # 2 (JAVA)

Tema 4. Excepciones en Java

Caracteres y Cadenas Conversión de Datos Funciones y procedimientos Archivos cabecera. Fundamentos de programación

James Gosling, creador de Java

UNIVERSIDAD DE LOS ANDES NUCLEO UNIVERSITARIO RAFAEL RANGEL (NURR) DEPARTAMENTO DE FISICA Y MATEMATICA AREA COMPUTACION TRUJILLO EDO.

FACULTAD DE INGENIERÍA

Modelo de Objetos Distribuidos

Clase adicional 2. Estructuras básicas de control. Temas

Programación Orientada a Objetos con Java

- Compilar y ejecutar programas en Java - Estructura básica de una clase - El comando javac - El comando java - Introducción al IDE de desarrollo

Java en 3 horas. Ampliación de Sistemas Operativos. Rodrigo Santamaría

Lo que necesitaremos para programar en Java, será un editor de texto o IDE y la JDK.

FUNDAMENTOS DE PROGRAMACIÓN. SEPTIEMBRE 2005

FUNCIONES PHP: DECLARACIÓN Y LLAMADAS. PARÁMETROS, RETURN. EJERCICIOS EJEMPLOS RESUELTOS. (CU00827B)

class Nombre_Clase extends Nombre_SuperClase { cuerpo de la clase extendida }

Agenda..NET C# Laboratorio #1

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

PROGRAMACION ORIENTADA A OBJETOS Ingenieria Informática Final Febrero 2006/07

Programación Orientada a Objetos. Java: Excepciones

11. Algunas clases estándar de Java (II)

Principios de Computadoras II

PROYECTO FIGURAS DIAGRAMA DE FLUJO

Tema: Punteros a Objetos. Puntero this.

Soluciones Ejercicios Tema 3

Programación estructurada (Introducción a lenguaje C)

Guía práctica de estudio 05: Diagramas de flujo

Patrón Fábrica Abstracta. Julio Ariel Hurtado Alegría Ingeniería de Software II 2015

Java en 2 horas. Rodrigo Santamaría

Lenguaje C Elementos de un Programa. Ing. Hugo Fdo. Velasco Peña Universidad Nacional 2006

Programación Orientada a Objetos. Java: Excepciones

POLIMORFISMO. import java.util.*; class Instrumento { public void tocar() { System.out.println("Instrumento.tocar()"); public String tipo() {

Instrucciones de control

QUÉ ES UNA CLASE JAVA? ATRIBUTOS (PROPIEDADES O CAMPOS), CONSTRUCTOR Y MÉTODOS. (CU00623B)

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

Tema 3: Genericidad en Java. Tema 3: Genericidad en Java. Objetivos y Bibliografía. Modelos de Datos Genéricos

NIVEL 15: ESTRUCTURAS RECURSIVAS BINARIAS

Introducción a Java (II) Dr. (c) Noé Alejandro Castro Sánchez

Hoja 4: Solución. public String tostring() { return "("+getx()+", "+gety()+")"+" Lado: "+getlx();

Repaso de las características más importantes de la programación Java y su adaptación a Android

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

Práctica 3. Paso de parámetros entre subrutinas. 3. Consideraciones sobre el paso de parámetros

ALGORITMICA Y PROGRAMACION POR OBJETOS I

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

Transcripción:

Programación orientada a objetos con Java 191 18. Interfaces Objetivos: a) Definir el concepto de interfaz b) Interpretar el código fuente de una aplicación Java donde aparecen interfaces c) Construir una aplicación Java sencilla, convenientemente especificada, que declare y utilice una interfaz Una interfaz es una especie de plantilla para la construcción de clases. Normalmente una interfaz se compone de un conjunto de declaraciones de cabeceras de métodos (sin implementar, de forma similar a un método abstracto) que especifican un protocolo de comportamiento para una o varias clases. Además, una clase puede implementar una o varias interfaces: en ese caso, la clase debe proporcionar la declaración y definición de todos los métodos de cada una de las interfaces o bien declararse como clase abstract. Por otro lado, una interfaz puede emplearse también para declarar constantes que luego puedan ser utilizadas por otras clases. Una interfaz puede parecer similar a una clase abstracta, pero existen una serie de diferencias entre una interfaz y una clase abstracta: Todos los métodos de una interfaz se declaran implícitamente como abstractos y públicos. Una clase abstracta no puede implementar los métodos declarados como abstractos, una interfaz no puede implementar ningún método (ya que todos son abstractos). Una interfaz no declara variables de instancia. Una clase puede implementar varias interfaces, pero sólo puede tener una clase ascendiente directa. Una clase abstracta pertenece a una jerarquía de clases mientras que una interfaz no pertenece a una jerarquía de clases. En consecuencia, clases sin relación de herencia pueden implementar la misma interfaz. 18.1. Declaración de una interfaz La declaración de una interfaz es similar a una clase, aunque emplea la palabra reservada interface en lugar de class y no incluye ni la declaración de variables de instancia ni la implementación del cuerpo de los métodos (sólo las cabeceras). La sintaxis de declaración de una interfaz es la siguiente: public interface IdentificadorInterfaz { // Cuerpo de la interfaz... Una interfaz declarada como public debe ser definida en un archivo con el mismo nombre de la interfaz y con extensión.java. Las cabeceras de los métodos declarados en el cuerpo de la interfaz se separan entre sí por caracteres de punto y coma y todos son declarados implícitamente como public y abstract (se pueden omitir). Por su parte, todas las constantes incluidas en una interfaz se declaran implícitamente como public, static y final (también se pueden omitir) y es necesario inicializarlas en la misma sentencia de declaración. Por ejemplo, la interfaz Modificacion declara la cabecera de un único método:

192 A. García-Beltrán y J.M. Arranz * Declaracion de la interfaz Modificacion public interface Modificacion { void incremento(int a); que se almacena en el archivo fuente Modificacion.java y que, al compilarse: $>javac Modificacion.java genera un archivo Modificacion.class. Al no corresponder a una clase que implementa un método main, este archivo no puede ejecutarse con el intérprete de Java. Segundo ejemplo: la interfaz constantes declara dos constantes reales con el siguiente código fuente: * Declaracion de la interfaz Constantes public interface Constantes { double valormaximo = 10000000.0; double valorminimo = -0.01; que se almacena en el archivo fuente Constantes.java y que, al compilarse, genera un archivo Constantes.class Tercer ejemplo: la interfaz Numerico declara una constante real y dos cabeceras de métodos con el siguiente código fuente: * Declaracion de la interfaz Numerico public interface Numerico { double EPSILON = 0.000001; void estableceprecision(float p); void establecemaximo(float m); que se almacena en el archivo fuente Numerico.java y que, al compilarse, genera un archivo Numerico.class. 18.2. Implementación de una interfaz en una clase Para declarar una clase que implemente una interfaz es necesario utilizar la palabra reservada implements en la cabecera de declaración de la clase. Las cabeceras de los métodos (identificador y número y tipo de parámetros) deben aparecer en la clase tal y como aparecen en la interfaz implementada. Por ejemplo, la clase Acumulador implementa la interfaz Modificacion y por lo tanto debe declarar un método incremento:

Programación orientada a objetos con Java 193 * Declaracion de la clase Acumulador public class Acumulador implements Modificacion { private int valor; public Acumulador (int i) { valor = i; public int davalor () { return valor; public void incremento (int a) { valor += a; Esta cabecera con la palabra implements... implica la obligación de la clase Acumulador de definir el método incremento declarado en la interfaz Modificacion. El siguiente código muestra un ejemplo de uso de la clase Acumulador. * Demostracion de la clase Acumulador public class PruebaAcumulador { public static void main (String [] args) { Acumulador p = new Acumulador(25); p.incremento(12); System.out.println(p.daValor()); La compilación y posterior ejecución del código anterior origina la siguiente salida por pantalla: $>javac PruebaAcumulador.java $>java PruebaAcumulador 37 La clase Acumulador tendría también la posibilidad de utilizar directamente las constantes declaradas en la interfaz si las hubiera. Para poder emplear una constante declarada en una interfaz, las clases que no implementen esa interfaz deben anteponer el identificador de la interfaz al de la constante. 18.3. Jerarquía entre interfaces La jerarquía entre interfaces permite la herencia simple y múltiple. Es decir, tanto la declaración de una clase, como la de una interfaz pueden incluir la implementación de otras interfaces. Los identificadores de las interfaces se separan por comas. Por ejemplo, la interfaz Una implementa otras dos interfaces: Dos y Tres.

194 A. García-Beltrán y J.M. Arranz public interface Una implements Dos, Tres { // Cuerpo de la interfaz... Las clases que implementan la interfaz Una también lo hacen con Dos y Tres. Otro ejemplo: pueden construirse dos interfaces, Constantes y Variaciones, y una clase, Factura, que las implementa: // Declaracion de la interfaz Constantes public interface Constantes { double valormaximo = 10000000.0; double valorminimo = -0.01; // Declaracion de la interfaz Variaciones public interface Variaciones { void asignavalor(double x); void rebaja(double t); // Declaracion de la clase Factura public class Factura implements Constantes, Variaciones { private double totalsiniva; public final static double IVA = 0.16; public double siniva() { return totalsiniva; public double coniva() { return totalsiniva * (1+IVA); public void asignavalor(double x) { if (valorminimo<x) totalsiniva=x; else totalsiniva=0; public void rebaja(double t) { totalsiniva *= (1-t/100); public static void main (String [] args) { factura a = new factura(); a.asignavalor(250.0); System.out.println("El precio sin IVA es: " + a.siniva()); System.out.println("El precio con IVA es: " + a.coniva()); System.out.println("Rebajado durante el mes de mayo un 20%"); a.rebaja(20); System.out.println("Rebajado sin IVA es: " + a.siniva()); System.out.println("Rebajado con IVA es: " + a.coniva()); Si una interfaz implementa otra, incluye todas sus constantes y declaraciones de métodos, aunque puede redefinir tanto constantes como métodos. Nota: Es peligroso modificar una interfaz ya que las clases dependientes dejan de funcionar hasta que éstas implementen los nuevos métodos.

Programación orientada a objetos con Java 195 Una clase puede simultáneamente descender de otra clase e implementar una o varias interfaces. En este caso la seccion implements se coloca a continuación de extends en la cabecera de declaración de la clase. Por ejemplo: public class ClaseDescendiente extends ClaseAscendiente implements Interfaz {... 18.4. Utilización de una interfaz como un tipo de dato Al declarar una interfaz, se declara un nuevo tipo de referencia. Pueden emplearse identificadores de interfaz en cualquier lugar donde se pueda utilizar el identificador de un tipo de dato (o de una clase). El objetivo es garantizar la sustituibilidad por cualquier instancia de una clase que la implemente. Por ejemplo, puede emplearse como tipo de un parámetro de un método: public class Calculos { public void asignacion(variaciones x); {... Sólo una instancia de una clase que implemente la interfaz puede asignarse al parámetro cuyo tipo corresponde al identificador de la interfaz. Esta facultad se puede aprovechar dentro la propia interfaz. Por ejemplo: public interface Comparable { // La instancia que llama a esmayor (this) y el parametro otra // deben ser de la misma clase o de clases que implementen esta interfaz // La funcion devuelve 1, 0, -1 si this es mayor, igual o menor que otra public int esmayor(comparable otra); En algún caso puede ser útil declarar una interfaz vacía como, por ejemplo: public interface Marcador { Esta declaración es totalmente válida ya que no es obligatorio incluir dentro de una interfaz la declaración de una constante o la cabecera de un método. La utilidad de estas interfaces reside en la posibilidad de ser empleadas como tipos de dato para especificar clases sin necesidad de obligar a éstas a implementar algún método en concreto. Una interfaz no es una clase pero se considera un tipo en Java y puede ser utilizado como tal.