Pergunta

É contrato para interface como objeto é a classe?

O que é a necessidade de diferenciar as coisas idênticas como este, a partir do código para o código de execução? Eu meio que começa a idéia por trás de nomear uma classe uma classe ea classe execução instanciado um objeto, mas no geral, é que a única razão para estes termos semi-redundantes?

Foi útil?

Solução

Não é verdade. Há quatro termos aqui, então eu vou passar por cima de cada um deles:

Interface

Uma interface é uma classe abstrata (em linguagens como Java, onde não há herança múltipla, às vezes há outras restrições, como um tipo de dados em separado) que se destina a ser usado como uma base comum para acessar uma série de semelhante objetos -behaving. Conceitualmente, não há nenhuma exigência para a abstração, mas, normalmente, uma interface terá pelo menos um método abstrato. Uma interface é um método para o seu programa para se comunicar com um número de classes semelhantes, cada um com diferentes semântica, mas o mesmo propósito geral.

Contract

Um contrato é o acordo implícito que você faz entre os usuários e implementadores de uma classe ou interface. Por exemplo, pré-condições e pós-condições (invariantes são geralmente um contrato no prazo de implementação da classe - geralmente, coisas como a relação entre membros internos não precisam ser expostos). A especificação de um valor de retorno ou um argumento também pode ser parte do contrato. Ele representa basicamente como usar a função / classe / interface, e geralmente não é totalmente representável em qualquer idioma (alguns idiomas, como Eiffel, permitem que você coloque contratos explícitos, mas mesmo estes não podem sempre totalmente detalhar os requisitos ). Quando você implementar uma interface ou derivar de uma classe, você está sempre tendo que atender aos requisitos de interface, ou, ao substituir uma classe não-abstrata, a comportar-se bastante similar que um visualizador externo não notar a diferença (esta é a Liskov substituição Princípio;. um objecto derivado deve ser capaz de substituir a base com nenhum diferença no comportamento do ponto de vista do lado de fora)

Class

A classe não precisa de um monte de ultrapassar, uma vez que claramente tenham utilizado anteriormente. Uma classe é o tipo de dados, e em algumas línguas é um super de interfaces (que não têm nenhuma definição formal, como em C ++), e em outros é independente (como em Java).

objeto

Um objecto é um exemplo de um tipo de classe (ou de qualquer tipo não-classe, geralmente). A definição exata de um objeto é muito específico para a linguagem, mas a definição geral é a coisa real referido por várias referências / ponteiros para a mesma coisa - por exemplo, em algumas linguagens como Java, == compara se duas variáveis ??são o mesmo objeto, não necessariamente se são semanticamente o mesmo. Objetos são independentes de classes ou interfaces - que representam uma única instância. Outra maneira de pensar nisso é que classe ou interface é o molde, e o objeto é o objeto físico que sai do molde (uma vez analogia ruim, mas é o melhor que pode vir acima com agora).

Outras dicas

Não, não realmente. Uma classe é um modelo que você definir. Cada objeto que instancia essa classe segue o modelo. Eles não estão realmente redundante termos, porque as duas coisas não são idênticos. Você pode pensar em uma classe como um tipo de dados definido pelo usuário. Classes e objectos são diferentes uns dos outros na exacta mesma maneira que o tipo de dados primitivo int é diferente do valor literal 3.

Uma interface define um conjunto de métodos que todas as classes de execução devem apoiar. A própria interface é o contrato que você define para as classes de execução. Ele apenas diz que qualquer classe que implementa a interface, deve ter conjunto de métodos públicos dessa interface.

Bem, eu acho ... se um especifica interface de um contrato de uma classe especifica uma instância (ou múltipla) (s) de um objeto particular.

A terminologia é menos importante do que a aplicação embora.

Na verdade, uma interface é um contrato, quando um objeto é uma instância de uma classe -. São coisas diferentes que não têm muito em comum

A interface fornece apenas uma fachada para objetos, ou uma garantia para o chamador que o objeto pode fazer alguma operação, mesmo sem conhecê-lo de implementação.

Por exemplo, você pode ter duas classes que implementam a mesma interface / contrato, mas fazer coisas totalmente diferentes (mesmo que o sentido de fazê-las pode ser o mesmo).

Tome a interface IDisposable por exemplo: Cada objeto pode liberar os recursos que ele usa, mas pode fazê-lo de muitas maneiras diferentes, ele pode optar por não liberar nada. É a escolha do objeto.

Pelo menos esta seria a POV em .NET

Para completar as respostas anteriores, uma palavra sobre interfaces:

Se a classe é mais do que um modelo para um objeto (por causa de suas características globais independentes de quaisquer instâncias), a interface pode ser também ser descrito como um ponto de vista

A classe que implementa vários interface:

  • completar o contrato que precisa respeitar
  • permitir que o usuário veja todas as instâncias dessa classe do ponto de vista do único representado pela interface implementada.

"ponto de vista" significa que você pode, utilizando um objeto, concentrando-se unicamente no contrato de definir por essa interface.

É nesse aspecto uma interface é uma "classe abstrata", como em uma "abstração" (algo que leva depois de algumas das características de uma classe, mas deixar alguns outros fora). No mundo Java, um folhas de interface realmente muito fora, uma vez que só podem ser aplicadas para definir contrato, por exemplo, não para métodos estáticos ou funções.

"Classe" e "objeto" representam duas coisas diferentes; eles estão relacionados, mas o que eles representam é diferente, muito forte.

A melhor maneira de descrever isso é olhar para estática. Uma classe pode ter membros estáticos, que são completamente separado de qualquer instância dessa classe. Objetos dessa classe pode ou não usar esses membros estáticos; mas a instância do objecto dessa classe é completamente separados de todos os usos estáticos dessa classe (ou deve ser, no mínimo).

Ou acha do padrão Singleton. Armazenar uma instância do objecto de classe de um assessor classe estática é uma prática comum, e mostra a diferença. Você se refere ao classe estática acessor para obter a instância objeto de uma única classe; se o membro estático class não tem um instância do objeto para se referir a, a class cria o instância do objeto .

Dito de outra forma; um objeto é uma instância de uma classe; mas uma classe pode ser mais que apenas um modelo a partir do qual os objetos são instanciado. membros estáticos de classes têm uma representação na memória que é completamente independente do objeto instâncias dessas classes.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top