2010-02-16 18 views
13

Tengo una pregunta bastante básica:Clase frente a interfaz

¿Cuándo deberíamos decidir usar Interface o Class para una clase específica?

Por ejemplo: dice que tenemos 2 clases, Cliente y Médico.

En herencia (clase): podríamos establecer estas 2 clases para heredar de la clase padre Persona.

¿No podríamos hacer lo mismo con la interfaz? Dice que tenemos InterfacePerson y que tanto el Cliente como el Doctor implementen la interfaz?

Por lo tanto, esto lleva a: ¿cuándo decidimos usar uno sobre el otro y viceversa?

Respuesta

1

En pocas palabras, utiliza las clases cuando no está involucrado código/aplicación e interfaces cuando se es solo descripciones de interfaz. Cuando se refiera a objetos en su código, prefiera referirse a las interfaces, ya que hace que sea más fácil reemplazar la implementación real (o agregar más y diferentes implementaciones).

Y sí, es probable que Docor y Customer/Patient implementen o extiendan Person.

13
  • Lea la wikipedia article

  • Leer un libro, a continuación, leer los capítulos sobre programación orientada a objetos nuevo

  • En su ejemplo, Person debe ser una clase, ya que contiene detalles de implementación que son común a ambos, un Doctor y un Customer.

  • interfaces no tienen (y no es necesario) los detalles de implementación - que sólo denotan lo objetos que implementan ellos están haciendo. No cómo. ¿Por qué es esto útil? Porque cuando está utilizando el objeto no le importa cómo va a hacer su trabajo.

Vamos a echar un vistazo a un ejemplo sencillo - Existe una interfaz Comparable (en Java por lo menos). Es indica que sus implementadores se pueden comparar entre sí.Lo que puede tener dos clases:

class Doctor implements Comparable {..} 

class Customer implements Comparable {..} 

Ahora usted puede tener un método común que tiene cualquier conjunto de objetos que implementan Comparable y llaman comparable1.compareTo(comparable2), porque que saben que pueden realizar la comparación - es denotado por su interfaz.

0

En C#, la herencia múltiple se puede lograr a través de la interfaz solamente. Según su requisito de negocio si existe la necesidad de que su clase necesite herencia múltiple yendo de frente, entonces use la Interfaz o use clase.

También todos los miembros de Interfaces deben tener definición en clase, es decir, los miembros de la interfaz son miembros imprescindibles.

0

clase sugiere que objeto que hereda de la clase base es una especie de esta clase

si se utiliza la interfaz sólo muestra que su clase tienen un comportamiento común que interfaz describe

1

clase principal es el que se tienen propiedades mínimas simples comunes a todas sus subclases.

Pero la interfaz es un contrato que le dice a sus implantes que proporcionen si no es una clase abstracta.

Y la Una diferencia importante entre una clase y la interfaz es que

herencia de clases dará relación entre dos subclases comunes.

Donde la implementación de la interfaz proporciona una relación entre dos clases poco comunes.

2

Lo primero que debe recordar, las clases pueden crearse instancias, las interfaces no pueden.

En segundo lugar, una clase solo puede extender UNA clase. Las interfaces no están limitados por esto y por lo que pueden tener la herencia múltiple como tal

public class foo extends Person implements Man, Mammal 

foo es una Persona. También es un Hombre y un Mamífero;

El único problema es que las interfaces no pueden tener variables o implementaciones de métodos en las que una clase (o clase abstracta, por ejemplo) puede hacerlo.

Generalmente, me gustaría pegarme con las interfaces y evitar las clases abstractas si es posible.

0

Piense en la interfaz como un contrato. La clase puede comprometerse con el contrato (implementar la interfaz)

Supongamos que tiene clase Persona con subclases Médico y Paciente. Entonces tendría una interfaz tratable con el método getSymptoms() implementado por Patient e interface Treating with method cure (Treatable) implementado por Doctor. Lo más probable es que la cura (tratable) llame a getSymptoms() en algún momento ...

10
  • Interface - describir el comportamiento
  • Class - hacer el comportamiento

Una clase que se extiende otra clase hereda el comportamiento. Por otro lado, la implementación de una interfaz solo dice que necesita comportarse de esa manera, pero la clase todavía tiene que saber cómo hacerlo.

Además de las limitaciones de herencia simple, el código que utiliza interfaces es más fácil de refactorizar y probar, p. proporcionar una implementación simulada para un objeto de acceso a la base de datos en pruebas unitarias.

Entonces, la verdadera respuesta es, depende de su diseño.

Puede ser que use interfaces para describir el comportamiento y abstraiga las clases principales para implementar el comportamiento que pueden heredar las subclases. O tal vez las subclases son tan diferentes que cada una implementa la interfaz a su manera.

2

En el modelado de objetos, no se debe usar la herencia para las personas y sus roles. Uno debería modelarlos con dos objetos asociados. Es decir, usando composición en lugar de herencia.

De alguna manera, de tres alternativas, se discuten las dos incorrectas: herencia e interfaces para modelar partidos y roles.

Una clase es una plantilla para un conjunto de objetos. Esos objetos tienen comportamiento, (y típicamente) estado y características. Con respecto al comportamiento, cada objeto tiene una interfaz (implícita) ya: el conjunto de métodos que se pueden invocar externamente en ella.

La pregunta es, ¿por qué debería crear una interfaz llamada, un subconjunto de la interfaz ya proporcionada por un objeto?

  1. Uno quiere representar un subconjunto de comportamiento para diferentes clases de objetos pueden tratarse polimórfica.
  2. Uno quiere restringir el comportamiento posible de un objeto expuesto a otro, a un subconjunto de su interfaz (implícita) porque el objeto está actuando en un contexto diferente.
Cuestiones relacionadas