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

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 bandapublic int getBanda() {return banda;}//@param banda the banda to setpublic void setBanda(int banda) {this.banda = banda;}//@return the sintoniapublic float getSintonia() {return sintonia;}//@param sintonia the sintonia to setpublic void setSintonia(float sintonia) {this.sintonia = sintonia;}//@return the volumepublic int getVolume() {return volume;}//@param volume the volume to setpublic 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 argspublic static void main(String[] args) {//Instancia a classe RadioRadio 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