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 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

Categoria:Engenharia de software Categoria:Programação orientada a objetos