Este é um post disponível para assinantes MVPEste post também está disponível para assinantes da SQL Magazine DIGITAL
ou para quem possui Créditos DevMedia. Clique aqui para saber mais!
ou para quem possui Créditos DevMedia. Clique aqui para saber mais!
Herança e interfaces - Revista SQL Magazine 99
Veremos neste artigo diferentes alternativas de projeto que enfatizam tanto o uso de herança como de interface, de forma que você possa comparar as duas abordagens
SQL Magazine 99
[Artigo disponível no Leitor Digital DevMedia. Clique aqui para acessá-lo]
> Clique aqui para ler todos os artigos da SQL Magazine 99
[Artigo disponível no Leitor Digital DevMedia. Clique aqui para acessá-lo]
> Clique aqui para ler todos os artigos da SQL Magazine 99
Encontrar semelhanças entre classes faz parte de nossas tarefas ao programar utilizando o paradigma da orientação a objetos. Normalmente, programadores expressam semelhanças entre classes utilizando o conceito de hierarquia de classes uma vez que este é um dos primeiros conceitos que aprendemos ao estudarmos a orientação a objetos.
Neste artigo, iremos aproveitar este conhecimento já bastante difundido sobre o uso de hierarquia de classes e explorar a diferença entre seu uso e o uso de interfaces em projetos de software orientados a objetos. Ao enfatizar a definição de interfaces, você entenderá mais precisamente a essência de cada classe. Uma vez determinada a essência, será mais prático e fácil perceber as semelhanças existentes entre as classes de seu projeto.
Criar uma hierarquia de classes prematuramente no projeto pode causar esforço extra quando você precisa desfazê-la. Por outro lado, quando você começa com a definição de interfaces e a partir daí descobre uma boa hierarquia de classes, o processo de refatoração do projeto pode ser mais facilmente efetuado. Isto por que refatorar uma interface para uma hierarquia de classes é mais fácil do que o contrário.
Neste contexto, veremos a partir de agora neste artigo diferentes alternativas de projeto que enfatizam tanto o uso de herança como de interface, de forma que você possa comparar as duas abordagens. Em complemento, apresentaremos alguns trechos de código representando as alternativas orientadas a interface de forma que seja fácil de perceber a diferença em relação a abordagem do uso de herança através do código.
Heranças e interfaces
Você provavelmente aprendeu herança como uma das características iniciais da programação orientada a objetos. Com a herança, uma classe recebe os atributos e métodos de uma classe base. O relacionamento entre a classe base e a classe derivada é referenciado como “é-um” ou, mais especificamente, como “é-um-tipo-de”. Por exemplo, um mamífero “é-um-tipo-de” animal. Através da herança criamos hierarquia de classes.
Você pode já ter escutado algo relacionado a herança aplicada a interfaces. Por exemplo, é dito que uma classe PizzaShop que implementa a interface PizzaOrdering herda a interface. Entretanto, é um certo exagero dizer que PizzaShop “é-um-tipo-de” PizzaOrdering. Ao invés disso, o relacionamento mais aplicável neste contexto é dizer que PizzaShop “disponibiliza-uma” interface PizzaOrdering. Muitas vezes, os módulos que implementam uma determinada interface, por exemplo a interface PizzaOrdering, não são nem mesmos orientados a objetos. Assim, neste artigo usaremos o termo herança apenas quando uma classe derivada herda de uma classe base (como ocorre quando utilizamos o extends em Java). Uma classe “implementa” uma interface se ela possui uma implementação de todos os métodos definidos na interface. Para lidar com este conceito, a linguagem Java faz uso da palavra chave implements.
"
Este é um post disponível para assinantes MVP
Neste artigo, iremos aproveitar este conhecimento já bastante difundido sobre o uso de hierarquia de classes e explorar a diferença entre seu uso e o uso de interfaces em projetos de software orientados a objetos. Ao enfatizar a definição de interfaces, você entenderá mais precisamente a essência de cada classe. Uma vez determinada a essência, será mais prático e fácil perceber as semelhanças existentes entre as classes de seu projeto.
Criar uma hierarquia de classes prematuramente no projeto pode causar esforço extra quando você precisa desfazê-la. Por outro lado, quando você começa com a definição de interfaces e a partir daí descobre uma boa hierarquia de classes, o processo de refatoração do projeto pode ser mais facilmente efetuado. Isto por que refatorar uma interface para uma hierarquia de classes é mais fácil do que o contrário.
Neste contexto, veremos a partir de agora neste artigo diferentes alternativas de projeto que enfatizam tanto o uso de herança como de interface, de forma que você possa comparar as duas abordagens. Em complemento, apresentaremos alguns trechos de código representando as alternativas orientadas a interface de forma que seja fácil de perceber a diferença em relação a abordagem do uso de herança através do código.
Heranças e interfaces
Você provavelmente aprendeu herança como uma das características iniciais da programação orientada a objetos. Com a herança, uma classe recebe os atributos e métodos de uma classe base. O relacionamento entre a classe base e a classe derivada é referenciado como “é-um” ou, mais especificamente, como “é-um-tipo-de”. Por exemplo, um mamífero “é-um-tipo-de” animal. Através da herança criamos hierarquia de classes.
Você pode já ter escutado algo relacionado a herança aplicada a interfaces. Por exemplo, é dito que uma classe PizzaShop que implementa a interface PizzaOrdering herda a interface. Entretanto, é um certo exagero dizer que PizzaShop “é-um-tipo-de” PizzaOrdering. Ao invés disso, o relacionamento mais aplicável neste contexto é dizer que PizzaShop “disponibiliza-uma” interface PizzaOrdering. Muitas vezes, os módulos que implementam uma determinada interface, por exemplo a interface PizzaOrdering, não são nem mesmos orientados a objetos. Assim, neste artigo usaremos o termo herança apenas quando uma classe derivada herda de uma classe base (como ocorre quando utilizamos o extends em Java). Uma classe “implementa” uma interface se ela possui uma implementação de todos os métodos definidos na interface. Para lidar com este conceito, a linguagem Java faz uso da palavra chave implements.
"
A exibição deste artigo foi interrompida.
Este é um post disponível para assinantes MVPEste post também está disponível para assinantes da SQL Magazine DIGITAL
ou para quem possui Créditos DevMedia. Clique aqui para saber mais!
ou para quem possui Créditos DevMedia. Clique aqui para saber mais!
Rodrigo Oliveira Spinola
Doutor e Mestre em Engenharia de Sistemas e Computação (COPPE/UFRJ). Diretor de Operações da Kali Software (www.kalisoftware.com). Editor Chefe das revistas Engenharia de Software Magazine, SQL Magazine e Web Mobile.
O que você achou deste post?
Cursos relacionados
Publicidade



