¿Por qué estamos implementando, por ejemplo ICloneable o IDisposable. No estoy preguntando qué hacen ICloneable o IDisposable, pero quiero aprender cuál es una buena razón para implementar estas interfaces en lugar de solo escribir un método que elimine o clone nuestros objetos.¿Por qué estamos implementando interfaces?
Respuesta
El uso de interfaces mantiene constante el uso de esas piezas de funcionalidad. De esta forma, cuando otra clase desee/necesite usar su clase, puede actuar sobre ella como un objeto desechable y clonable, sin preocuparse por los detalles de su implementación en particular.
Entre otras razones, lea sobre el bloque using
.
Creo que se utiliza para deshacerse de los objetos no referenciados. Pero no estaba preguntando :) gracias por tu tiempo :) – Tarik
Porque es posible que desee que el mismo código funcione en instancias de clases diferentes. Por ejemplo, una rutina de limpieza de formularios desea iterar sobre todos los componentes y eliminarlos. Para que pueda hacer esto, necesita referirse a los componentes a través de un tipo: una clase base común o una interfaz. La herencia única significa que una clase base común no siempre es factible (supongamos que mi formulario tiene un FileStream y un botón, ¿qué clase base común podrían tener para que la rutina de limpieza los accediera?); de ahí las interfaces.
Al implementar una interfaz bien conocida, puede tener un polimorfismo, que le permite escribir código genérico que puede actuar en cualquier instancia de una clase que implemente una interfaz determinada.
Puede consultar el Wikipedia article on polymorphism para más.
Phoebus dio una gran respuesta, pero para agregar un poco más.
Te obliga a escribir los métodos que se esperan para clonar o hacer algo que pueda eliminarse. Si tuviera que escribir solo el método, ¿siempre incluiría todos los métodos necesarios o la firma sería siempre la misma?
Si hay un nuevo marco, y agregan algo, para ayudar a garantizar que las operaciones se realizan correctamente, al tener interfaces, entonces te obliga a implementar cualquier cambio nuevo, ya que tu aplicación ya no se compilará.
En resumen, la interfaz separa la implementación y define la estructura, y este concepto es muy útil en los casos en que necesita que la implementación sea intercambiable. Aparte de eso, una interfaz es muy útil cuando la implementación cambia con frecuencia.
La interfaz se puede utilizar para definir una plantilla genérica y luego una o más clases abstractas para definir implementaciones parciales de la interfaz.
Las interfaces solo especifican la declaración de método (implícitamente pública y abstracta) y pueden contener propiedades (que también son implícitamente públicas y abstractas). La definición de interfaz comienza con la interfaz de palabra clave. Una interfaz como la de una clase abstracta no puede ser instanciada.
Agregando a más sabiduría de la interfaz, las interfaces se pueden usar como contratos entre el código del consumidor y el código del servicio. En lugar de decir que este es el objeto con el que trataremos, con las interfaces es el acuerdo, así es como se ve el objeto que devuelvo.En el código, podría ser algo como:
código de servicio
public IEnumerable<int> GetNumbers(){ return new []{1,2,3,4,5}; }
código de cliente:
var result = serviceProxy.GetNumbers();
Aquí el código de servicio puede cambiar la aplicación de devolver cualquier clase que satisface IEnumerable sin romper el código de cliente .
Además de todo esto, tiene otras aplicaciones como IoC DI, Prueba de unidades, Mocking de objetos. Todo esto cosecha beneficios de bondad polimórfica.
Una interfaz separa lo que se hace de cómo se hace. Los clientes manejan el tipo de interfaz, sin tener que saber cuál es la clase de implementación, porque pueden confiar en el contrato que aplica.
Esto es importante para situaciones que generan proxies dinámicos. Los clientes no necesitan saber que están tratando con un proxy, lo que le da la libertad de inyectar cualquier comportamiento que necesite. Es una técnica común para la programación orientada a aspectos.
- 1. Implementando interfaces en C++
- 2. ¿Por qué estamos usando átomos en reposo?
- 3. implementando interfaces después del hecho
- 4. ¿Implementando propiedades de interfaz en interfaces?
- 5. Constructores en clases internas (implementando interfaces)
- 6. ¿Por qué estamos comprobando si (celda == nil) en UITableViewController?
- 7. ¿Por qué implementamos las interfaces recursivamente?
- 8. Averigüe qué banderas estamos construyendo en Setup.hs
- 9. ¿Por qué crear clases e interfaces abstractas?
- 10. ¿Por qué las interfaces no son [Serializable]?
- 11. ¿Por qué debería crear interfaces en PHP?
- 12. ¿Por qué necesitamos interfaces en Java?
- 13. Implementando IIdentity, ¿qué es AuthenticationType?
- 14. ¿Cómo saber qué versión de ADT estamos usando en eclipse?
- 15. ¿Qué estamos ampliando al crear un método de extensión genérico?
- 16. ¿Por qué estamos instalando Ruby 1.9.2/1.9.3 gems en una carpeta 1.9.1?
- 17. ¿Por qué no requerimos interfaces en lenguajes dinámicos?
- 18. ¿Por qué JDK Dynamic Proxy solo funciona con interfaces?
- 19. ¿por qué las interfaces en lenguajes dinámicos/de tipo suelto?
- 20. ¿Por qué no hay interfaces finales en Java?
- 21. ¿Por qué Java prohíbe la herencia de interfaces internas?
- 22. ¿Por qué las interfaces C# no pueden contener campos?
- 23. Por qué las propiedades no son declarables en las interfaces
- 24. ¿Por qué XmlSerializer serializa clases abstractas pero no interfaces?
- 25. ¿Por qué hay interfaces en tipos de referencia .Net?
- 26. Patrón de repositorio: ¿por qué necesitamos interfaces exactamente?
- 27. C# ¿Cómo generar un objeto implementando diferentes interfaces dinámicamente en tiempo de ejecución?
- 28. por eso que necesitamos interfaz en lugar de la clase y lo que estamos logrando desde la interfaz
- 29. CoffeeScript, implementando 'implements'
- 30. Implementando ToArgb()
Estaba pensando lo mismo a veces pero no estaba muy seguro porque habría algo más, pero tenía razón en lo que pensaba :) Muchas gracias. – Tarik