Qual é a definição de" interface " na programação orientada a objetos

Ok, um amigo meu Vai e vem em relação ao que "interface" significa na programação.

Qual é a melhor descrição de uma "interface".

Para mim, uma interface é um modelo de uma classe, esta é a melhor definição?

Author: Gnoupi, 2010-05-19

16 answers

Uma interface é um dos termos mais sobrecarregados e confusos no desenvolvimento.

É na verdade um conceito de abstração e encapsulação. Para uma dada "caixa", declara As "Entradas" e "Saídas" dessa caixa. No mundo do software, isso geralmente significa as operações que podem ser invocadas na caixa (juntamente com argumentos) e, em alguns casos, os tipos de retorno dessas operações.

O que não faz é que não define o que a semântica destes as operações são, embora seja comum (e muito boa prática) documentá-las em proximidade com a declaração (por exemplo, através de comentários), ou para escolher boas Convenções de nomenclatura. No entanto, não há garantias de que estas intenções sejam seguidas.

Aqui está uma analogia: dê uma olhada em sua televisão quando ela está desligada. Sua interface são os botões que tem, as várias tomadas, e a tela. Sua semântica e comportamento são que ele toma entradas (por exemplo, programação de cabo) e tem Saídas (visualização no ecrã, som, etc.). No entanto, quando você olha para uma TV que não está conectada, você está projetando sua semântica esperada em uma interface. Tanto quanto sabes, a televisão pode explodir quando a ligares. No entanto, com base em sua "interface" você pode assumir que não vai fazer qualquer café, uma vez que não tem uma ingestão de água.

Na programação orientada a objectos, uma interface define geralmente o conjunto de métodos (ou mensagens) que uma instância de uma classe que tem a interface pode responder.

O que acrescenta à confusão é que em algumas linguagens, como Java, há uma interface real com a sua semântica específica da linguagem. Em Java, por exemplo, é um conjunto de declarações de métodos, sem implementação, mas uma interface também corresponde a um tipo e obedece várias regras de Digitação.

Noutras línguas, como o C++, não tem interfaces. Uma classe em si define métodos, mas você poderia pensar na interface da classe como o declarações dos métodos não privados. Por causa de como o c++ compila, você obtém arquivos de cabeçalho onde você poderia ter a "interface" da classe sem implementação real. Você também pode imitar interfaces Java com classes abstratas com funções virtuais puras, etc.

Uma interface não é certamente um modelo para uma aula. Um projecto, por uma definição, é um "plano de Acção pormenorizado". Uma interface não promete nada sobre uma ação! A fonte da confusão é que na maioria linguagens, se você tem um tipo de interface que define um conjunto de métodos, a classe que implementa "repete" os mesmos métodos (mas fornece definição), de modo que a interface se parece com um esqueleto ou um contorno da classe.
 138
Author: Uri, 2016-12-18 05:56:41

Considere a seguinte situação:

estás no meio de uma sala grande e vazia, quando um zombie te ataca de repente.

não tens arma.

felizmente, um homem vivo está à porta da sala.

"Rápido!"grita com ele. "Atira-me algo com que possa bater no zombie!"

Agora considere:
Você não especificou (nem se importa) exatamente o que o teu amigo vai escolher atirar. ...Mas não importa, desde que:

  • É algo que pode ser atirado (ele não pode atirar-te o sofá))

  • É algo que você pode agarrar (vamos esperar que ele não atirou um shuriken)

  • É algo que você pode usar para esmagar o cérebro do zumbi (que exclui almofadas e Tal)

Não importa se tens um taco de basebol ou um martelo. desde que se aplicares as tuas três condições, estás bem.

Para resumir:

Quando se escreve uma interface, está-se basicamente a dizer: "Preciso de algo assim..."
 129
Author: Yehuda Shapira, 2013-01-09 19:14:30

Interface é um contrato que você deve cumprir ou dar, dependendo se você é implementador ou um usuário.

 30
Author: Eugene Kuleshov, 2010-05-19 15:37:46
Acho que" planta " não é uma boa palavra para usar. Uma planta diz-nos como construir algo. Uma interface evita especificamente dizer-lhe como construir algo.

Uma interface define como você pode interagir com uma classe, ou seja, que métodos suporta.

 16
Author: Dave Costa, 2010-05-19 15:38:09
Para mim, uma interface é um modelo de uma classe, esta é a melhor definição?
Não. Uma planta normalmente inclui os internos. Mas uma interface é puramente sobre o que é visível no exterior de uma classe ... ou mais precisamente, uma família de classes que implementam a interface. A interface consiste na assinatura de métodos e valores de constantes, e também um "contrato comportamental" (tipicamente informal) entre classes que implementam a interface e outros que o usam.
 7
Author: Stephen C, 2010-05-19 15:39:07
Tecnicamente, Descreveria uma interface como um conjunto de formas (métodos, propriedades, acessores... o vocabulário depende da língua que você está usando) para interagir com um objeto. Se um objeto suporta / implementa uma interface, então você pode usar todas as formas especificadas na interface para interagir com este objeto. [[1]} semanticamente, uma interface também pode conter convenções sobre o que você pode ou não fazer (por exemplo, a ordem em que você pode chamar os métodos) e sobre o que, em retorne, você pode assumir sobre o estado do objeto dado como você interagiu até agora.
 4
Author: Ghislain Fourny, 2010-05-19 15:46:51

Na programação, uma interface define o comportamento que um objecto terá, mas não especificará o comportamento. É um contrato, que vai garantir, que uma determinada classe pode fazer alguma coisa.

Considere este pedaço de código C# aqui:

using System;

public interface IGenerate
{
    int Generate();
}

// Dependencies
public class KnownNumber : IGenerate
{
    public int Generate() 
    {
        return 5;
    }   
}

public class SecretNumber : IGenerate
{
    public int Generate()
    {
        return new Random().Next(0, 10);
    }
}

// What you care about
class Game
{
    public Game(IGenerate generator) 
    {
        Console.WriteLine(generator.Generate())
    }
}

new Game(new SecretNumber());
new Game(new KnownNumber());
A classe de jogo precisa de um número secreto. Por causa de testá-lo, você gostaria de injetar o que será usado como um número secreto (este princípio é chamado de inversão de controle). A classe de jogo quer para ser " de mente aberta "sobre o que realmente irá criar o número aleatório, portanto, ele vai pedir em seu construtor para"qualquer coisa, que tem um método de Geração".

Primeiro, a interface especifica, quais as operações que um objecto irá fornecer. Contém apenas o seu aspecto, mas não é dada qualquer aplicação concreta. Isto é apenas a assinatura do método. Convencionalmente, em interfaces c# são prefixadas com um I. As classes agora implementam a Interface IGenerate. Isto significa que o compilador certificar-se-á de que ambos têm um método, que devolve um int e é chamado Generate. O jogo agora está sendo chamado de dois objetos diferentes, cada um dos quais implementando a interface correta. Outras classes produziriam um erro ao construir o código.

Aqui reparei na analogia que usaste. Uma classe é comumente vista como um modelo para um objeto. Uma Interface especifica algo que uma classe vai precisar fazer, então pode-se argumentar que é realmente apenas um modelo para um classe, mas uma vez que uma classe não precisa necessariamente de uma interface, eu diria que esta metáfora está quebrando. Pense numa interface como um contrato. A classe que "assina" será legalmente exigida (imposta pela polícia do compilador), para cumprir os Termos e Condições do contrato. Isto significa que terá que fazer, o que é especificado na interface. Isto deve-se à natureza estaticamente tipada de algumas linguagens OO, como é o caso de Java ou C#. Em Python no por outro lado, é utilizado outro mecanismo:
import random

# Dependencies
class KnownNumber(object):
    def generate(self):
        return 5

class SecretNumber(object):
    def generate(self):
        return random.randint(0,10)

# What you care about
class SecretGame(object):
    def __init__(self, number_generator):
        number = number_generator.generate()
        print number
Aqui, nenhuma das classes implementa uma interface. Python não se importa com isso, porque a classe SecretGame vai apenas tentar chamar qualquer objeto que seja passado. Se o objeto tem um método gerar (), tudo está bem. Se não, KAPUTT! Este erro não será visto no tempo de compilação, mas no tempo de execução, portanto, possivelmente quando o seu programa já está implantado e em execução. O c# notificava-te muito antes de te aproximares disso.

A razão este mecanismo é usado, ingenuamente afirmado, porque em OO línguas naturalmente funções não são cidadãos de primeira classe. Como você pode ver, KnownNumber e SecretNumber contêm apenas as funções para gerar um número. Não se precisa realmente das aulas. Em Python, portanto, pode-se simplesmente jogá-los fora e escolher as funções por conta própria:

# OO Approach
SecretGame(SecretNumber())
SecretGame(KnownNumber())

# Functional Approach

# Dependencies
class SecretGame(object):
    def __init__(self, generate):
        number =  generate()
        print number

SecretGame(lambda: random.randint(0,10))
SecretGame(lambda: 5)
[9]um lambda é apenas uma função, que foi declarada "em linha, como você vai". Um delegado é o mesmo em C#:
class Game
{
    public Game(Func<int> generate) 
    {
        Console.WriteLine(generate())
    }
}    

new Game(() => 5);
new Game(() => new Random().Next(0, 10));

Os últimos exemplos não são possíveis assim em Java, Uma vez que Java não pode rodar com funções como as outras duas (Python e C#) podem. Lá, as Interfaces são a única maneira de speficiying comportamento desta forma na av.

 3
Author: cessor, 2013-04-11 08:07:53
Pessoalmente, vejo uma interface como um modelo. Se uma interface contém a definição para os métodos foo() e bar (), então você sabe que cada classe que usa esta interface tem os métodos foo () e bar ().
 2
Author: Thomas Winsnes, 2010-05-19 16:06:05
Vamos considerar que um homem (usuário ou objeto) quer algum trabalho a ser feito. Ele entrará em contato com um homem médio(Interface) que terá um contrato com as empresas(objetos do mundo real criados usando classes implementadas). Poucos tipos de obras serão definidos por ele quais empresas irão implementar e dar-lhe resultados. Cada empresa irá implementar o trabalho à sua maneira, mas o resultado será o mesmo. Como este usuário vai obter o seu trabalho feito usando uma única interface. Eu acho que Interface vai agir como parte visível dos sistemas com poucos comandos que serão definidos internamente pelos subsistemas internos de implementação.
 2
Author: Arun N, 2013-01-25 13:59:24

Interface é "que trabalho" um método não"como". É um contrato. Como na fila de prioridades, você sabe o que fazer com ele, mas a implementação subjacente você não sabe. A classe concorda em nunca alterar os "efeitos" das operações existentes, e o Cliente concorda em utilizar o class strictly on the basis of its interface and to ignore any implementation informacao.

Leigo eg.: Pense em ter um controle remoto universal que possa controlar qualquer televisão, se é um velho modelo de tubo ou um que usa um ecrã LCD ou plasma. Pressiona 2, depois 5, depois entra, e qualquer um dos ecrãs irá mostrar o canal 25., mesmo que o mecanismo para fazer isso acontecer é muito diferente dependendo sobre a tecnologia subjacente.

 2
Author: Muddassir Zafar, 2016-12-18 17:18:38

Uma interface separa as operações numa classe das operações internas. Assim, algumas implementações podem fornecer muitas interfaces.

As pessoas costumam descrevê-lo como um "contrato" para o que deve estar disponível nos métodos da classe. Não se trata, de modo algum, de um projecto, uma vez que isso também determinaria a implementação. Uma definição de classe completa pode ser considerada como um modelo.
 1
Author: Puppy, 2010-05-19 15:42:18

Uma interface define o que uma classe que herda dela deve implementar. Desta forma, várias classes podem herdar de uma interface, e por causa dessa hereditariedade, você pode

  • certifique-se de que todos os membros da interface são implementados na classe derivada (mesmo que seja apenas para lançar uma excepção)
  • abstrair a classe em si do chamador (lançar uma instância de uma classe para a interface, e interagir com ela sem precisar de saber o que o derivado real classe IS)

Para mais informações, veja este http://msdn.microsoft.com/en-us/library/ms173156.aspx

 1
Author: Greg Olmstead, 2010-05-19 15:48:28

Na minha opinião, interface tem um significado mais amplo do que o comumente associado a ele em Java. Eu definiria "interface" como um conjunto de operações disponíveis com alguma funcionalidade comum, que permitem controlar/monitorar um módulo.

Nesta definição eu tento cobrir ambas as interfaces programáticas, onde o cliente é algum módulo, e interfaces humanas (GUI, por exemplo).

Como outros já disseram, uma interface tem sempre algum contrato por trás, em termos de entradas e Saídas. A interface não promete nada sobre o "como" das operações; ela só garante algumas propriedades do resultado, dado o estado atual, a operação selecionada e seus parâmetros.
 1
Author: Eyal Schneider, 2010-05-19 16:14:15

Tal como acima, os sinónimos de "contrato" e "protocolo" são adequados.

A interface compreende os métodos e propriedades que você pode esperar para ser exposto por uma classe.

Por isso, se uma classe Cheetos Bag implementa a interface Chip Bag, deve esperar que um Cheetos Bag se comporte exactamente como qualquer outro Chip Bag. (Isto é, expor o método .attemptToOpenWithoutSpillingEverywhere(), etc.)

 1
Author: wlangstroth, 2010-05-19 16:36:58

Uma fronteira através da qual dois sistemas comunicam.

As Interfaces são a forma como algumas línguas OO conseguempolimorfismo ad hoc . Polimorfismo ad hoc é simplesmente funções com os mesmos nomes operando em diferentes tipos.

 0
Author: cheecheeo, 2013-08-10 07:05:59

Definição convencional-uma interface é um contrato que especifica os métodos que precisam ser implementados pela classe que a executa.

A definição de Interface mudou ao longo do tempo. Você acha que Interface só tem declarações de método apenas ? E as variáveis finais estáticas e as definições padrão depois do Java 5.

Interfaces foram introduzidas em Java por causa do problema do diamante com herança múltipla e é isso que eles realmente pretendem tarefa.

As Interfaces são as construções que foram criadas para se livrar do problema da herança múltipla e podem ter métodos abstratos , definições padrão e variáveis finais estáticas.

Http://www.quora.com/Why-does-Java-allow-static-final-variables-in-interfaces-when-they-are-only-intended-to-be-contracts

 0
Author: Vivek Vermani, 2014-08-25 17:50:50