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

No artigo que apresentamos hoje iremos mergulhar no fascinante mundo de Abstração (ciência da computação), explorando as suas múltiplas facetas e a sua relevância na sociedade atual. Das suas origens ao seu impacto hoje, examinaremos detalhadamente como Abstração (ciência da computação) desempenhou um papel fundamental na vida das pessoas, na história, na cultura, no mundo dos negócios, na tecnologia, ou em qualquer outro campo que você possa imaginar. Através de uma análise exaustiva e enriquecedora, desvendaremos os aspectos mais relevantes e surpreendentes de Abstração (ciência da computação), oferecendo aos nossos leitores uma visão ampla e completa deste emocionante tema.

 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,[1][2][3] 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

Referências

  1. Colburn, Timothy; Shute, Gary (1 de julho de 2007). «Abstraction in Computer Science». Minds and Machines (em inglês) (2): 169–184. ISSN 1572-8641. doi:10.1007/s11023-007-9061-7. Consultado em 25 de março de 2025 
  2. Kramer, Jeff (1 de abril de 2007). «Is abstraction the key to computing?». Commun. ACM (4): 36–42. ISSN 0001-0782. doi:10.1145/1232743.1232745. Consultado em 25 de março de 2025 
  3. Ben-Ari, Mordechai (1 de março de 1998). «Constructivism in computer science education». SIGCSE Bull. (1): 257–261. ISSN 0097-8418. doi:10.1145/274790.274308. Consultado em 25 de março de 2025