Resumo do Artigo:

Object Orientation

(Herança e Polimorfismo)

Heitor Augustus Xavier Costa


1. Abstração

Os objetos armazenam dados e possuem interface definida que determina o seu comportamento.

 

2. Encapsulamento

            É a característica do objeto de esconder seus dados e suas operações dos outros objetos. As operações e os dados são encapsulados em um módulo chamado classe que pode ser visto como um pattern para criar objetos (instanciação). O usuário não se preocupa com a implementação dos métodos, mas apenas com a interface da classe, alcançando um alto grau de desacoplamento, uma vez que é possível alterar a implementação de um método sem alterar a interface.

            Segundo Edward Bernard: "Abstração e encapsulamento são definições distintas, porém estão fortemente relacionadas. Abstração é uma técnica que ajuda a identificar quais informações devem ser visíveis e quais não devem ser. Encapsulamento é a técnica para encapsular a informação de modo a esconder o que deve ser escondido e fazer visível o que deve ser visível."

 

3. Herança e Polimorfismo

Herança é um mecanismo importante quando um grupo de classes apresenta a mesma interface, mas a implementação interna dos métodos é diferente.

Polimorfismo é uma característica em orientação a objetos que usa a hierarquia de objetos.

 

4. Comentários

O paper deixa muito a desejar na apresentação de Herança e Polimorfismo, possibilitando um entendimento errado para um leitor mais desatento. Portanto, tentou-se abordar os dois conceitos mais profundamente, embora de maneira rápida.

Herança é um mecanismo que ajuda definir relações de subtipo e reusar código. Contudo herança e subtipo são mecanismos distintos e devem ter construtores diferentes nas linguagens de programação. Herança é um conceito muito poderoso, uma vez que possibilita que os desenvolvedores maximizem o uso dos métodos (comportamento) e dos dados (estrutura) dos objetos existentes. Pode-se entender herança, sob a ótica de linguagem de programação orientada a objetos, como sendo um mecanismo para construir classes a partir de classes existentes.

O mecanismo de herança pode ser classificado de três maneiras independentes:

Estático ou Dinâmico;

Implícito ou Explícito;

por Objeto ou por Grupo.

A maioria das linguagens que utilizam o paradigma de orientação a objetos são: i) estáticas (a herança é estabelecida em tempo de compilação); ii) implícitas (o comportamento de um objeto depende da sua classe, que não pode ser alterada) e iii) por grupo (as características de herança são especificadas para uma classe, não para objetos específicos).

Existem dois tipos de herança por grupo:

Simples: quando há uma relação de hierarquia de uma ou mais classes com apenas um outra classe. Ou seja, uma ou mais classes (subclasses) herdam atributos e/ou operações de uma única classe (super classe);

Múltipla: quando há uma relação de hierarquia de uma classe com duas ou mais classes. Ou seja, uma classe (subclasse) herda atributos e/ou operações de duas ou mais classes (superclasses).

A herança múltipla pode impactar em uma das características de orientação a objetos: encapsulamento e pode introduzir complexidade nas linguagens orientadas a objetos. No mundo real, existem situações onde uma classe pode derivar de duas ou mais classes, com o uso da herança múltipla evita-se redundância e repetição de código, contudo torna-se mais difícil semanticamente entender o relacionamento entre elas.

Por outro lado, a herança múltipla introduz complexidade e ambigüidade que não são desejáveis. A maior dificuldade ocorre quando as superclasses definem os mesmos métodos, fazendo com que se tenha uma maneira de decidir qual método deve ser herdado. Essa decisão pode ser tomada na implementação ou fazendo com que os métodos das superclasses tenham assinatura (corresponde ao nome do método e aos tipos de cada parâmetro) distinta para que todos os métodos sejam herdados sem conflito ou, ainda, redefinindo na subclasse os métodos que estão conflitando.

A seguir é apresentado um exemplo de herança simples e herança múltipla no mesmo diagrama de classes, mostrando que é possível ter os dois tipos de herança.

Polimorfismo é a habilidade de diferentes objetos receberem a mesma mensagem e comportar-se de maneira diferente. Polimorfismo implica em criar uma interface pela qual serão recebidas mensagens determinando o comportamento do objeto.

Operação

 

 

Imprimir Arquivo

Arquivo texto

Arquivo de imagem

Arquivo binário

Polimorfismo também suporta passagem de tipos diferentes de objetos como parâmetro nas mensagens enviadas a outros objetos.


 

[Voltar]           [e-mail]