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