Las interfaces son para hacer una abstracción (un arquetipo) de la abstracción (las clases) de la realidad (los objetos).
Las interfaces deben especificar los términos del contrato sin proporcionar la implementación proporcionada por las clases.
Las interfaces son especificaciones:
Las interfaces son artefactos de tiempo de diseño para especificar el comportamiento inmóvil del concepto, ya que es solo y estático.
Las clases son artefactos de tiempo de implementación para especificar la estructura móvil de la realidad a medida que interactúa y se mueve.
¿Qué es una interfaz?
Cuando observas a un gato puedes decir que es un animal que tiene cuatro patas, una cabeza, un tronco, una cola y pelo. Puedes ver que puede caminar, correr, comer y maullar. Y así.
Acaba de definir una interfaz con sus propiedades y sus operaciones. Como tal, no ha definido ningún modus operandi, sino solo características y capacidades sin saber cómo funcionan las cosas: ha definido habilidades y distinciones.
Como tal, todavía no es una clase, aunque en UML la llamamos clase en un diagrama de clases porque podemos definir miembros privados y protegidos para comenzar a tener una visión profunda del artefacto. No se confunda aquí porque en UML una interfaz es algo ligeramente diferente a una interfaz en C #: es como un punto de acceso parcial al átomo de abstracción. Como tal, dijimos que una clase puede implementar múltiples interfaces. Como tal, es lo mismo, pero no, porque las interfaces en C # se usan para abstraer la abstracción y para limitar esta abstracción como un punto de acceso. Son dos usos diferentes. Así, una clase en UML representa una interfaz de acoplamiento completo a una clase de programación, mientras que una interfaz UML representa una interfaz de desacoplamiento de una sección de una clase de programación. En efecto, el diagrama de clases en UML no se ocupa de la implementación y todos sus artefactos están al nivel de la interfaz de programación. Si bien asignamos clases UML a clases de programación, es una transposición de abstracción abstracta a abstracción concreta. Hay una sutileza que explica la dicotomía entre el campo del diseño y el campo de la programación. Entonces, una clase en UML es una clase de programación desde el punto de vista de una interfaz de programación considerando cosas internas ocultas.
Las interfaces también permiten simular herencia múltiple cuando no está disponible de una manera incómoda. Por ejemplo, la clase cat implementará la interfaz cat que se deriva de la interfaz animal. Esta clase de gato también implementará estas interfaces: caminar, correr, comer y hacer un sonido. Esto compensa la ausencia de herencia múltiple a nivel de clase, pero cada vez necesitas reimplementar todo y no puedes factorizar la realidad en el mejor de los casos como lo hace la realidad misma.
Para entender eso podemos referirnos a la codificación de objetos Pascal donde se define en una unidad la interfaz y las secciones de implementación. En la interfaz se definen los tipos y en la implementación se implementa el tipo:
unit UnitName;
interface
type
TheClass = class
public
procedure TheMethod;
end;
implementation
class procedure TheClass.TheMethod;
begin
end;
Aquí, la sección de interfaz coincide con el diseño de la clase UML, mientras que los tipos de interfaces son, por lo tanto, otras cosas.
Entonces, en nuestro negocio tenemos una palabra, interfaz , para nombrar dos cosas distintas pero similares, y es una fuente de confusión.
También en C #, por ejemplo, las interfaces de programación permiten compensar la ausencia de polimorfismo genérico verdadero en tipos abiertos sin realmente tener éxito en el objetivo porque perdió la habilidad fuertemente tipada.
Después de todo, las interfaces son necesarias para permitir que los sistemas incompatibles se comuniquen sin preocuparse por la implementación y la gestión de los objetos en la memoria como se introdujo con el Modelo de Objetos Comunes (Distribuido).
¿Qué es una clase?
Después de definir una reducción de la realidad desde un punto de vista externo, puedes describirla desde una perspectiva interna: esta es la clase en la que defines el procesamiento de datos y la gestión de mensajes para permitir que la realidad que has encapsulado cobre vida e interactúe gracias a los objetos que utilizan instancias.
Entonces en UML realizas una inmersión fractal en las ruedas de la maquinaria y describes los estados, las interacciones y así sucesivamente para poder implementar la abstracción del fragmento de la realidad que quieres manejar.
Como tal, una clase abstracta es de alguna manera el equivalente de una interfaz desde el punto de vista del compilador.
Más información
Protocolo (programación orientada a objetos)
C #: interfaces
C # - Clases