Forum Pplware

Versão Completa: Interfaces ...
Está de momento a ver uma versão reduzida do nosso conteúdo. Ver versão completa com o formato adequado.
Páginas: 1 2
Boas.

Queria colocar aqui um pedido de ajuda que vos pode parecer desenquadrado ou demasiado vasto, mas uma vez que nunca fiz qualquer tipo de projectos com recurso a Interfaces, em C#, gostaria de saber um pouco mais sobre eles.

Queria pedir-vos que, se vos fosse possivel me dessem umas luzes em relação aos interfaces, com algumas situações práticas da sua implementação.

Obrigado!
Estás a referir-te a Interfaces em Programação Orientada a Objectos? Se sim, não são exclusivos do C#, portanto a noção de interface aplica-se a qualquer linguagem que suporte OO e tenha interfaces.

http://pt.wikipedia.org/wiki/Orienta%C3%..._a_objetos

Segundo a definição, um interface é um contrato em que todas as classes que o implementem têm de o cumprir, ou seja, declararas cabeçalhos de funções que é suposto as classes implementarem.

Deixo um exemplo:

Código:
public interface Carro
    {
        void Andar();
        int obterVelocidade();
        void definirVelocidade(int novaVelocidade);
    }

Agora vamos criar duas classes, que implementem este interface. Uma vez que implementam um interface, têm obrigatoriamente de implementar todos os métodos por ele indicado (a tal noção de contrato):

Código:
class Fiat : Carro
    {
        int velocidade;

        public void Andar()
        {
            Console.WriteLine("Vrumvrum... poc poc poc... vrum");
        }

        public int obterVelocidade()
        {
            return 10;
        }

        public void definirVelocidade(int novaVelocidade)
        {
            this.velocidade = novaVelocidade;
        }
    }

    class Ferrari : Carro
    {
        int velocidade;

        public void Andar()
        {
            Console.WriteLine("VrumvrumVRUUUUUUUUM");
        }

        public int obterVelocidade()
        {
            return 100;
        }

        public void definirVelocidade(int novaVelocidade)
        {
            this.velocidade = novaVelocidade;
        }

        public void ligarArCondicionado()
        {
            Console.WriteLine("Ar condiciionado ligado");
        }
    }

Como vês, ambas as classes Fiat e Ferrari implementam o interface, e têm os 3 métodos definidos por ele. Em adição, a classe Ferrari também tem um método adicional, que não compromete o contrato (o que um interface obriga é que se tenha, pelo menos, aqueles métodos implementados).

Espero que tenhas percebido, com este exemplo, foi o que me lembrei.[/code]
Softclean

O teu exemplo não poderia ser mais claro ... e elucidativo. Obrigado!

Mas agora uma questão.
No Interface, os métodos existentes, não têm conteúdo? São apenas indicações que todas as classes que usem esse Interface têm de possuir aqueles métodos específicos?

Porque não usar os métodos do Interface em cada uma das classes? Ou seja, se tens em cada Classe os métodos, porque não apenas tê-los nas Classes sem existência dum interface? Ou o interface é mais para identificar um conjunto de regras que têm de ser comuns a todas as classes pretendidas?

Obrigado!
Um interface é tipo um contrato. Uma classe que implemente um interface está obrigada a implementar todos os métodos dele. Isto permite que tenhas polimorfismo sem necessitares de derivar classes umas das outras. Podes ter duas classes completamente independentes mas que implementam um determinado interface e, como tal, podem ser usadas por quem precisar apenas do interface, sem obrigar o objecto em si a pertencer a uma familia de classes.
Ok já percebi ... os interfaces criam uma obrigação implicita de todas as classes a ele associadas possuirem os métodos nele declarados.
Agora mais duas perguntas:
1- Os métodos no interface estão devidamente criados e com código, ou são à semelhança das Classes Abstratas, apenas indicações dos Métodos imprescindiveis?
2- Não serão os Interfaces e Classes Abstractas um pouco semelhantes na sua implementação?

Obrigado!
1 - Um interface apenas contem o protótipo de cada função membro que tem que ser implementada. A implementação fica a cargo de cada classe que implemente o interface

2 - Como referi no post anterior, um interface permite que classes sem qualquer relação possam ser usadas, sem haver a necessidade de as derivar de uma mesma origem.

Imagina esta situação: Tens varios tipos de transportes em que cada um deles tem q indicar a sua posição a pedido. Tens carros, aviões, bicicletas, barcos, etc.

Num caso destes, não faria sentido derivar tudo de uma classe comum, mesmo sendo abstrata. Um barco pouco tem em comum com um avião ou uma bicicleta que justifique terem uma classe-pai comum.

Mas se implementares o metodo de localizacao como um interface, entao podes pedir a localizacao a qq um deles, pq o q interessa é q implementam o interface.

Espero ter ajudado a compreenderes melhor
Creio ter percebido melhor os interfaces em si, e as grandes diferenças para com as Classes Abstractas. De qualquer forma, as coisas vão agora todas ao sitio com estudo e prática, certo?

Obrigado!
Corvus, eu estou a seguir este topic, pois sou um pouco curioso em relação à programação.

Referes o seguinte:
"(...)Imagina esta situação: Tens varios tipos de transportes em que cada um deles tem q indicar a sua posição a pedido. Tens carros, aviões, bicicletas, barcos, etc.

Num caso destes, não faria sentido derivar tudo de uma classe comum, mesmo sendo abstrata. Um barco pouco tem em comum com um avião ou uma bicicleta que justifique terem uma classe-pai comum.(...)"

Ou seja, o que eles têm em comum é o facto de transportar pessoas/mercadoria/etc de um ponto A para um ponto B, certo? Sendo assim podia-se ter uma classe-pai pra isso... Ou é melhor separar bem as coisas para não atrapalhar com o resto da programação?
Certo, neste caso poderias criar uma classe-pai extremamente básica (tipo a classe Object de onde derivam todas as outras em certas linguagens).

Mas, só para expor melhor a questão, e se tb desejassemos saber a posição de animais? Ou de uma mercadoria qualquer?

E quando tens mais que um interface implementado numa classe? Vais criar uma classe-pai para essa situação também, sabendo que nem todas as classes-filho vao necessitar de implementar essa funcionalidade?
Mas aí ficava mais confuso e com linhas/"funções" a mais desnecessariamente. Foi por isso que eu perguntei que se nesse exemplo podia-mos ter uma classe-pai (como todos os elementos (carro,mota.barco,etc) servem para levar X de um ponto para o outro) ou se era melhor separar melhor as coisas para evitar "palha"...
Páginas: 1 2
URL's de Referência