Hélio Engholm Jr

Especializado em Engenharia de Software

HerancaVeja neste artigo a explanação do que é herança no Paradigma Orientado a Objetos além do código fonte que implementa a herança mostrada no diagrama UML da figura 1.

Herança

Herança é um mecanismo onde temos uma classe definida a partir de outra, adicionando todas as funcionalidades e propriedades daquele nela mesma e podendo adicionar outras que se mostrem necessárias. Sua utilização força que a subclasse inclua todos os métodos e propriedades de sua superclasse.

Por outro lado, a utilização da herança permite o override de métodos que pode ser considerado como uma substituição do método original da superclasse  por outr4o especializado na subclasse. Este recurso é prático pois nos permite redefinir as ações do método original da superclasse na subclasse.

Algumas linguagens orientadas a objetos permitem uma única herança.

 

Entidades caixa de agência e gerente operacional 

A análise dos requisitos de nossa prática mostra que o sistema de automação bancária será utilizado por dois tipos de usuários, o caixa da agência e o gerente operacional.

Independente da matriz de responsabilidades e ações que cada um poderá realizar no sistema, sabemos que eles possuem propriedades e métodos idênticos. Deste modo, percebemos que a utilização de herança pode os trazer benefícios de reutilização de código, evitando a duplicação do mesmo durante a implementação do sistema e trazendo todos os benefícios quando da necessidade de se realizar manutenção no sistema.

Analisando os requisitos do sistema notamos pelo menos as seguintes propriedades e métodos idênticos para estas duas entidades:

• Propriedades: Nome, CPF, stringLogin, senha.

• Métodos: Realizar login, alterar dados cadastrais, administrar conta corrente.

 

Nossa análise também nos permite identificar métodos e propriedades que são exclusivos para cada tipo de usuário. No estudo de caso, o caixa da agência pode apenas executar tarefas simples relacionadas a administração de contas corrente e de cadastro de usuários, enquanto o gerente operacional pode realizar todas as funcionalidades do sistema incluindo a de administração de aplicações financeiras e empréstimos bancários.

Para melhorar esta prática, vamos imaginar que o gerente operacional também possui a propriedade salário e imaginar uma situação onde recebe um bônus mensal, possuindo um método aumentaBonus() que é utilizado para aumentar este bonus. Por outro lado, vamos imaginar que é desejado armazenar a educação do caixa da agência.

As partir de todas estas informações, vamos utilizar a herança para definir uma superclasse Empregado e duas subclasses, GerenteOperacional e CaixaAgencia. Para simplificar este exemplo vamos considerar na superclasse:

• Propriedades: Nome, CPF,salário.

• Métodos: Recuperar nome,aumentar salário.

Para a classe GerenteOperacional vamos considerar:

• Propriedades:Bonus.

• Métodos: Aumentar bonus.

Para a classe CaixaAgencia vamos considerar:

• Propriedades:Educacao.

• Métodos: Recuperar educação.

A figura 1 mostra o diagrama de classes que representa a herança proposta neste exemplo. Observe nesta figura que o objeto GerenteOperacional faz overhead do método aumentaSalario(), pois o cálculo deste aumento é diferenciado daquele da superclasse que é utilizado pela entidade CaixaAgencia.

 

Código JAVA para implementação da herança   

Veja a seguir a implementação da herança da figura 6.11 em JAVA, juntamente com um programa de console para testar o código.

Classe Funcionario

package heranca;

public class Funcionario {

public Funcionario(){

salario = 1000;

}

//Membros de dados

String nome=””, CPF=””;

double salario = 0;

//Funcoes membro

public String getNome(){ return nome;}

public double getSalario(){ return salario; }

public void aumentasalario(double aumento){

salario += aumento;

}

}

Classe GerenteOperacional

package heranca;

public class GerenteOperacional extends Funcionario{

double bonus = 100;

public void aumentaBonus(double aumento){

bonus += aumento;

}

public double getSalario(){ return salario + bonus; }

}

Classe CaixaAgencia

package heranca;

public class CaixaAgencia extends Funcionario{

String educacao = “Educacao do caixa”;

public String getEducacao() {  return educacao; }

}

Aplicação de console para o teste

package principal;

import heranca.*;

public class Principal {

public static void main(String[] args) {

System.out.println(“Heranca”);

Funcionario f = new Funcionario();

System.out.println(“Salario do objeto da superclasse:” + f.getSalario());

CaixaAgencia c = new CaixaAgencia();

c.aumentasalario(500);

System.out.println(“Salario do funcionario com aumento de R$500,00:” + c.getSalario());

GerenteOperacional g = new GerenteOperacional();

g.aumentaBonus(350);

System.out.println(“Salario do gerente com aumento do bonus em R$350,00:” + g.getSalario());

}

}

PARA COMPRAR O LIVRO, CLIQUE NA IMAGEM ABAIXO:

Livro Análise e Design

 

 

Link Novatec: http://www.novatec.com.br/livros/analise-design/

Link Livraria Cultura:

http://www.livrariacultura.com.br/scripts/resenha/resenha.asp?nitem=42129370

Livraria Saraiva: 

http://www.livrariasaraiva.com.br/produto/4912029

2 Responses so far.

  1. Muito boa suas dicas, tem uma boa orientação.
    pena que estou estudando c#, e vc escreveu o codigo em java.

    obrigado.

    • admin disse:

      Alexssandro, tudo bem?

      O fato é que a estrutura da linguagem C# é próxima ao Java. Deste modo, os códigos aqui apresentados podem ser utilizados naquela linguagem. Além do que, o que importa são as ideias e conceitos apresentados que podem ser utilizadas em qualquer linguagem orientada a objetos.

      []´s

      Hélio




+ Artigos