Mostrando postagens com marcador abstração. Mostrar todas as postagens
Mostrando postagens com marcador abstração. Mostrar todas as postagens

terça-feira, 20 de julho de 2010

[Java] Abstração e métodos abstratos


Normalmente quando pensamos em classes associamos à possível criação de objetos daquele tipo. Porém exitem casos em que não necessitamos de classes para a criação de objetos daquele tipo. Classes com este propósito são as chamadas classes abstratas. Classes abstratas são comumente utilizadas para servir como "ponto de encontro" entre duas ou mais classes diferentes, porém com algumas características e métodos semelhantes. Para tornar mais claro o entendimento, considere o diagrama UML abaixo:


Neste exemplo a classe abstrata Empregado serviu como ponto de encontro para as classes Assalariado, Comissionado e Horista. Foi omitido do diagrama os métodos get/set.

Uma classe abstrata é composta por PELO MENOS 1 método abstrato. Um método abstrato é aquele que não possui implementação e declarado com a palavra-chave abstract. Toda classe abstrata deve ser declarada usando a palavra-chave abstract. As subclasses de uma classe abstrata DEVEM implementar TODOS os métodos abstratos.

Veja o abaixo a implementação do diagrama UML do exemplo.
// Classe Abstrata
public abstract class Empregado {
private String nome;
private String sobrenome;
private String cpf;
public Empregado(){ }
public Empregado(String n, String s, String c){...}
public String getNome(){...}
public void setNome(String n){...}
public String getSobrenome(){...}
public void setSobrenome(String s){...}
public String getCpf(){...}
public void setCpf(String c){...}
//Método Abstrato
public abstract double salario();
}
//Classe Assalariado
public class Assalariado extends Empregado {
private double salario;

public double getSalario() {...}
public void setSalario(double s) {...}

//Implementa o método abstrato
public double salario() {
return getSalario();
}

}
//Classe Comissionado
public class Comissionado extends Empregado {

private double totalVenda;
private double taxaComissao;
public double getTotalVenda() {...}
public void setTotalVenda(double tv) {...}
public double getTaxaComissao() {...}
public void setTaxaComissao(double tc) {...}

//Implementa o método abstrato
public double salario() {
return getTotalVenda() * getTaxaComissao();
}
}
//Classe Horista
public class Horista extends Empregado {
private double precoHora;
private double horasTrabalhadas;
public double getPrecoHora() {...}
public void setPrecoHora(double ph) {...}
public double getHorasTrabalhadas() {...}
public void setHorasTrabalhadas(double ht) {...}

//Implementa o método abstrato
public double salario() {
return getPrecoHora() * getHorasTrabalhadas();
}
}

Apesar das classes abstratas não puderem ser instanciadas é possível declarar variáveis da classe abstrata para armazenar referências de qualquer classe concreta (contanto que seja uma subclasse dela). E só! :)

terça-feira, 16 de fevereiro de 2010

[Java] Conceitos de modelagem: abstração, encapsulamento e pacote


Neste post serão apresentados os conceitos de abstração, encapsulamento e pacote.

Abstração

Abstração é o processo ou resultado de generalização por redução do conteúdo da informação. Em programação orientada a objetos o processo de abstração possibilita esconder do usuário toda complexidade de implementação de um conceito, deixando visível apenas uma interface de serviços para ser utilizada.

Encapsulamento

Encapsulamento significa separar o programa em partes, o mais isoladas possível. A idéia é tornar o software mais flexível, fácil de modificar, mais fácil de reutilizar e de criar novas implementações. Para ficar mais simples de entender, um motorista sabe como dirigir um ônibus, porém ele não precisa saber de como funciona um ônibus por dentro para dirigí-lo.

Uma vantagem do encapsulamento é que pode-se modificar a implementação de um trecho encapsulado sem que os usuários da classe em questão sejam afetados. Outra vantagem é que o encapsulamento protege o acesso direto aos atributos de uma instância fora da classe onde estes foram declarados. Esta proteção consiste em se usar modificadores de acesso mais restritivos sobre os atributos definidos na classe.


Pacote

Em java, pacote é uma maneira de organizar as classes em "namespace". Esta funcionalidade serve para o programador organizar as classes pertencentes a uma mesma categoria ou que possuem a uma mesma funcionalidade. Fornecem também a gerência do namespace, como a proteção do acesso.