Abstração (ciência da computação)
Este artigo não cita fontes confiáveis. (Março de 2011) |
Em ciência da computação, a abstração é a habilidade de concentrar nos aspectos essenciais de um contexto, ignorando características menos importantes ou acidentais. Em modelagem ou programação orientada a objetos, uma classe é uma abstração de entidades existentes no contexto de um software, como exemplo, imaginamos a abstração referente a classe Animais, que se divide em várias sub-classes, como: Anfíbios, Répteis e Mamíferos, que contém objetos de sub-classe como Ser-humano, Jacaré e outros.
Uma classe abstrata é desenvolvida para representar entidades e conceitos abstratos. A classe abstrata é sempre uma superclasse que não possui instâncias. Ela define um modelo (template) para uma funcionalidade e fornece uma implementação incompleta - a parte genérica dessa funcionalidade - que é compartilhada por um grupo de classes derivadas. Cada uma das classes derivadas, completa a funcionalidade da classe abstrata adicionando um comportamento específico.
Exemplo prático da classe
editarNo exemplo abaixo, implementado em Java, a classe abstrata Eletrodomestico a qual será instanciada por outra classe filha (classe estendida):
public abstract class Eletrodomestico {
private boolean ligado;
private int voltagem;
/* métodos abstratos
* não possuem corpo, da mesma forma que as assinaturas de método de uma interface
*/
public abstract void ligar();
public abstract void desligar();
/* método construtor
* Classes Abstratas também podem ter métodos construtores, porém não podem ser usados para instanciar um objeto diretamente
*/
public Eletrodomestico(boolean ligado, int voltagem) {
this.setLigado(ligado);
this.setVoltagem(voltagem);
}
/* métodos concretos
* Uma classe abstrata pode possuir métodos não abstratos
*/
public void setVoltagem(int voltagem) {
this.voltagem = voltagem;
}
public int getVoltagem() {
return this.voltagem;
}
public void setLigado(boolean ligado) {
this.ligado = ligado;
}
public boolean isLigado() {
return ligado;
}
}
A classe filha (sub-classe Radio, uma classe estendida de Eletrodomestico):
//sub-classe (classe estendida):
public class Radio extends Eletrodomestico {
//atributos...
public static final short AM = 1;
public static final short FM = 2;
private int banda;
private float sintonia;
private int volume;
//metodos do classe Radio...
//metodo construtor...
public Radio(int voltagem) {
super(true, voltagem);
setBanda(Radio.FM);
setSintonia(0);
setVolume(0);
}
//@return the banda
public int getBanda() {
return banda;
}
//@param banda the banda to set
public void setBanda(int banda) {
this.banda = banda;
}
//@return the sintonia
public float getSintonia() {
return sintonia;
}
//@param sintonia the sintonia to set
public void setSintonia(float sintonia) {
this.sintonia = sintonia;
}
//@return the volume
public int getVolume() {
return volume;
}
//@param volume the volume to set
public void setVolume(int volume) {
this.volume = volume;
}
//implementação dos métodos abstratos
public void desligar() {
super.setLigado(false);
setSintonia(0);
setVolume(0);
}
public void ligar() {
super.setLigado(true);
setSintonia(88.1f);
setVolume(25);
}
//abaixo teríamos todos os métodos construtores (get e set)...
}
A classe de Aplicação:
package aula_abstrata;
public class aplicacaoAbstrata {
//@param args
public static void main(String[] args) {
//Instancia a classe Radio
Radio radio1 = new Radio(110);
/*
* chamando os métodos abstratos implementados
* dentro de cada classe ( Radio)
*/
radio1.ligar();
System.out.print("e o Rádio está ");
System.out.println(radio1.isLigado() ? "ligado." : "desligado.");
}
}