elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: (TUTORIAL) Aprende a emular Sentinel Dongle By Yapis


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación General
| | |-+  Java
| | | |-+  Interfaces en Java
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Interfaces en Java  (Leído 4,039 veces)
Bob1098

Desconectado Desconectado

Mensajes: 87


Ver Perfil
Interfaces en Java
« en: 6 Enero 2016, 23:45 pm »

Hola, me preguntaba cual es el uso real y práctico de las interfaces en java, es decir, únicamente se utilizan para hacer una "esquemilla" de las clases en java?. No comprendo el sentido que tienen, no es más rápido y cómodo definir los métodos directamente en la clase en lugar de declararlos (no definirlos) previamente en una interfaz?

Espero que alguien pudiera resolverme esta dudilla tonta.

Un saludo.


En línea

jsDotx3

Desconectado Desconectado

Mensajes: 10


Think Different


Ver Perfil WWW
Re: Interfaces en Java
« Respuesta #1 en: 7 Enero 2016, 02:13 am »

Las interfaces en Java se ocupan para definir variables de uso constantes (no cambiarán su valor jamás, por ejemplo, cuando defines el valor de un producto que jamás va a variar). Puedes fácilmente declarar en una de las clases con la propiedad final, pero, por buenas prácticas en POO es que se realiza este método. Básicamente, mantiene un esquema como dices tú.


En línea

«La envidia no mata, pero mortifica»
Bob1098

Desconectado Desconectado

Mensajes: 87


Ver Perfil
Re: Interfaces en Java
« Respuesta #2 en: 7 Enero 2016, 15:50 pm »

Entiendo, gracias por la ayuda :)

Un saludo.
En línea

Pablo Videla


Desconectado Desconectado

Mensajes: 2.274



Ver Perfil WWW
Re: Interfaces en Java
« Respuesta #3 en: 7 Enero 2016, 16:00 pm »

Mira los cambios ahora en java 8 para las interfaces.

https://yasnameza.wordpress.com/2015/01/11/una-de-las-novedades-de-java-8/
En línea

Bob1098

Desconectado Desconectado

Mensajes: 87


Ver Perfil
Re: Re: Interfaces en Java
« Respuesta #4 en: 8 Enero 2016, 18:50 pm »

Mira los cambios ahora en java 8 para las interfaces.

https://yasnameza.wordpress.com/2015/01/11/una-de-las-novedades-de-java-8/
Interesante aportacion.

Gracias. Un saludo

Enviado desde mi SM-G920F mediante Tapatalk
En línea

Chuidiang

Desconectado Desconectado

Mensajes: 161



Ver Perfil WWW
Re: Interfaces en Java
« Respuesta #5 en: 13 Enero 2016, 21:46 pm »

Hola:

Como bien dices, no es cómodo hacer interfaces y hacer que las clases implementen las interfaces. Por eso no hay que hacerlo siempre, sólo cuando sea necesario o preveas que va a ser necesario. ¿Y cuando es necesario?  Pues hay muchos ocasiones en que son necesarias, pero básicamente se puede reducir a un único motivo: que vas a llamar a un método que preveas que puede cambiar en algún momento. Me explico.

Imagina que tienes una clase con un método print(texto) que saca el texto por pantalla, algo tan tonto como esto

Código:
public class UnaClase {
   public void print(String texto) {
        System.out.println(texto);
   }
}

Todo bien hasta ahora, no es necesario interface ni nada. Pero mientras haces el programa resulta que piensas que quizás más adelante necesites sacar el texto por la impresora, tendrías que cambiar el método por algo asi

Código:
public class UnaClase {
   public void print(String texto) {
        // lo que sea que haya que hacer en java para sacar el texto por impresora.
   }
}

pues bien, si en tu programa a veces quieres sacar el texto por impresora, a veces por pantalla, es cuando una interface puede ayudarte. Haz dos clases, una para impresora, otra para pantalla, que implementen ambas una misma interface con el metodo print(texto). Luego, puedes hacer cosas como esta

Código:
public void unMetodo(LaInterface laInterface) {
   // aqui el codigo que calcule el texto que quieras sacar por pantalla/imprimir
   laInteface.print(texto);
}

¿qué hace ese código? ¿saca por pantalla o imprime en la impresora?. Pues depende de la clase concreta que le pases al llamar al metodo

Código:
a.unMetodo(new ClaseQueImprime());
a.unMetodo(new ClaseQueSacaPorPantalla());

y si mas adelante quieres guardar ese texto en base de datos, te bastaría una tercera clase que implemente la interface y solo tienes que pasarsela al metodo. has conseguido un método (trozo de código) que puede sacar por pantalla, imprimir o meter en base de datos  sin necesidad de retocarlo.

Resumiendo, una interface tiene sentido cuando preveas al menos dos clases distintas que la van a implementar y que vas a querer poder intercambiar una por otra de forma transparente, sin tocar codigo.

En java encontrarás muchos ejemplo. Por ejemplo, ¿qué hace un JButton de java cuando lo pulsas?. Nada, solo llamar al método actionPerformed() de la interface ActionListener que se le pase en el metodo addActionListener()

Código:
unJButton.addActionListener(unaClaseQueImplementaActionListener);

los de java han conseguido hacer un JButton que hace lo que el programador quiera que haga sin necesidad de recompilar el Jbutton cada vez y sin saber siquiera cómo se llama la clase java que el programador va a realizar.

Se bueno.
En línea

4dr14n31t0r

Desconectado Desconectado

Mensajes: 85



Ver Perfil
Re: Interfaces en Java
« Respuesta #6 en: 19 Enero 2016, 12:46 pm »

El mejor ejemplo que se me ocurre para ilustrar la gran utilidad que tienen las interfaces en java es la interfaz Comparable.

Esta interfaz solo tiene un metodo que se llama compareTo. Por otro lado, cuando tu haces una lista de objetos (Por ejemplo, List<Integer> lista = new ArrayList<>()) y la llenas, puedes usar un metodo estatico de la clase Collections que se llama sort (Se utiliza asi: Collections.sort(lista); y cuando imprimes los elementos de la lista veras que estan ordenados). Esto lo que hace es ordenar la lista de menor a mayor, pero... ¿Como sabe ese metodo cuando un objeto es mayor que otro? Porque del mismo modo que he dicho List<Integer> lista = new ArrayList<>() (En cuyo caso solo habria que restar los 2 Integers) tambien podria haber dicho List<String> lista = new ArrayList<>()(En cuyo caso te lño ordenaria alfabeticamente) o List<CualquierClase> lista = new ArrayList<>().
Bueno pues lo que hace el metodo sort es utilizar, de la clase que va entre signo de mayor y menor, el metodo compareTo para saber si es mayor o menor que otro. Sin embargo yo podria haber hecho la clase CualquierClase sin sobreescribir el compareTo y sin implementar Comparable. Para eso no hace falta implementar Comparable, ya que podria crear un metodo compareTo directamente, pero tambien podria NO haberlo hecho. Entonces, ¿Como sabe el metodo sort si una clase tiene dentro un metodo que se llama compareTo de forma segura? Por las interfaces.
Lo que realmente hace es comprobar si esa clase implementa Comparable(lo que garantiza que tenga un compareTo), y entonces usa compareTo para saber si uno es mayor o menor que otro.

PD: Para comprobar que una clase implementa Comparable simplemente intenta darle a una variable declarada del tipo de la Interface un objeto de la lista. Si da error no implementa. Un ejemplo:
Código:
class ClaseQueImplementaInterface implements InterfaceCualquiera{
}
Código:
class ClaseQueNoImplementa{
}
Código:
public void funcionQueHaceAlgo(InterfaceCualquiera i){
//codigo
}
Código:
ClaseQueImplementaInterface obj = new ClaseQueImplementaInterface();
funcionQueHaceAlgo(obj)//Esto no da error de compilación

ClaseQueNoImplementa obj2 = new ClaseQueNoImplementa();
funcionQueHaceAlgo(obj2)//Esto, sin embargo, si da error de compilación

//Tambien se pueden crear objetos de la siguiente forma:
InterfaceCualquiera obj3 = new ClaseQueImplementaInterface();
//Esto provoca que, si la clase tiene metodos que no estan declarados en la interface, no se puedan usar

Cuando estudiando por mi cuenta me topé con las iterfaces, me encontré con que tenía la misma duda que tú, asi que te comprendo perfectamente. Como habrás podido notar hay muchas cosas raras en java que se ven un poco innecesarias (Por ejemplo, para declarar e implementar un constructor éste debe tener el mismo nombrte que la clase, lo que suena un poco redundante porque ya se sabe, al estar dentro de esa clase, que el constructor es de esa clase) pero al final lo agradeceras que sea asi porque el codigo queda mucho mas claro y es mas facil organizarse, aunque parezca una tonteria.
En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Cómo crear interfaces gráficas con Look And Feel en Java « 1 2 »
Java
Casidiablo 15 67,775 Último mensaje 11 Diciembre 2011, 19:58 pm
por jorgemora
interfaces y applet de (java)
Java
HackeadorPrimeriso 2 3,067 Último mensaje 30 Noviembre 2006, 22:38 pm
por Ragnarok
alguien tiene códigos de interfaces gráfica en java con IDE Netbeans?
Ejercicios
XpandyX 2 12,490 Último mensaje 15 Mayo 2012, 07:20 am
por curioson86
INTERFACES
Java
Pirat3net 3 3,541 Último mensaje 27 Mayo 2011, 14:27 pm
por NetJava
Interfaces de usuario en Java y mejor IDE para desarrollo en java
Java
Azazel 0 2,843 Último mensaje 30 Octubre 2017, 23:36 pm
por Azazel
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines