Abstração (ciência da computação)

 Nota: Se procura abstrair, veja Abstração.

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[editar | editar código-fonte]

No 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."); 	} } 

Ligações externas[editar | editar código-fonte]