what is abstraction java learn with examples
Este tutorial explica o que é Abstração em Java junto com exemplos de programação. Você também aprenderá o que é uma classe abstrata e por que ela é usada:
Nesta série JAVA, discutiremos os recursos importantes da programação orientada a objetos (OOP) que também são conhecidos como quatro pilares, ou seja, abstração, encapsulamento, herança e polimorfismo.
O primeiro pilar da OOP é “Abstração”. “Abstração é o processo de seleção de dados para mostrar apenas as informações relevantes para o usuário.”
=> Dê uma olhada no guia para iniciantes em Java aqui.
O que você aprenderá:
Abstração em OOP
Em termos simples, a abstração “exibe” apenas os atributos relevantes dos objetos e “esconde” os detalhes desnecessários.
Por exemplo, quando estamos dirigindo um carro, estamos apenas preocupados em dirigir o carro, como iniciar / parar o carro, acelerar / frear, etc. Não estamos preocupados sobre como o mecanismo real de iniciar / parar ou o processo de aceleração / frenagem funciona internamente. Simplesmente não estamos interessados nesses detalhes.
O que nos preocupa é a visão “abstrata” dessas operações que nos ajudarão a impulsionar o carro e chegar ao nosso destino. Este é um exemplo simples de abstração.
Assim, o carro tem todos os mecanismos e processos em vigor, mas da perspectiva do usuário final, ou seja, a perspectiva do motorista do carro, ele estará interessado apenas na visão abstrata desses processos.
A abstração reduz os esforços de programação e, portanto, a complexidade. Um usuário final que usa o aplicativo não precisa se preocupar com a implementação de um determinado recurso. Ele / ela pode apenas usar os recursos conforme necessário.
Assim, na abstração, lidamos com ideias e não com eventos. Isso significa que ocultamos os detalhes de implementação do usuário e expomos apenas a funcionalidade ao usuário final. Assim, o usuário saberá apenas “o que faz” ao invés de “como faz”.
melhor software de desenvolvimento de jogos para iniciantes
A abstração em OOP pode ser de dois tipos.
# 1) Abstração de dados
Na abstração de dados, criamos principalmente tipos de dados complexos e ocultamos sua implementação. Apenas expomos as operações para manipular esses tipos de dados, sem entrar nos detalhes de sua implementação.
Uma vantagem dessa abordagem é que podemos alterar a implementação a qualquer momento, sem alterar o comportamento exposto ao usuário.
# 2) Abstração de controle
A abstração de controle coleta todas as instruções de controle que fazem parte do aplicativo e as expõe como uma unidade. Este recurso é usado quando temos que executar um recurso funcional usando esta unidade de controle.
A abstração de controle forma a unidade principal da programação estruturada e, usando a abstração de controle, podemos definir funções simples para estruturas complexas.
O que é abstração em Java
Como Java é uma linguagem OOP, a abstração pode ser vista como um dos recursos e blocos de construção importantes da linguagem Java. Em Java, a abstração é implementada usando uma classe e interface abstratas.
Então, como implementamos abstração em Java? Java fornece um modificador sem acesso “abstrato” para implementar abstração. Este modificador abstrato pode ser usado com classes e métodos, mas não com variáveis.
A interface fornece abstração completa, ou seja, fornece apenas protótipos de método e não sua implementação. Uma classe abstrata fornece abstração parcial em que pelo menos um método não deve ser implementado.
Neste tutorial, discutiremos a abstração com classes abstratas em detalhes. Exploraremos as interfaces em detalhes em nossos tutoriais subsequentes.
Exemplo de abstração Java
Vamos considerar o exemplo abaixo.
//abstract class abstract class Car{ abstract void accelerate(); } //concrete class class Suzuki extends Car{ void accelerate(){ System.out.println('Suzuki::accelerate'); } } class Main{ public static void main(String args()){ Car obj = new Suzuki(); //Car object =>contents of Suzuki obj.accelerate(); //call the method } }
Resultado:
O exemplo de abstração simples fornecido acima possui uma classe Car. Nesta classe Car, temos um método abstrato para acelerar (). Então, herdamos essa classe na classe Suzuki. Dentro da classe Suzuki, implementamos o método de aceleração.
O exemplo acima simplesmente mostra a maneira como uma classe abstrata é definida, herdada e usada no programa.
O que é Java Abstract Class
Já mencionamos que Java implementa abstração usando classes e interfaces abstratas. Vamos primeiro explorar tudo sobre a classe abstrata.
Uma classe abstrata pode ser definida como uma classe declarada com a palavra-chave “abstrata” e tem a restrição de não poder ser instanciada.
Uma classe abstrata pode ou não ter qualquer método abstrato (um método sem implementação). No que diz respeito à JVM, uma classe abstrata é uma classe incompleta que não possui um comportamento completo.
A sintaxe geral de uma classe abstrata é fornecida abaixo:
abstract class { public abstract void abstractMethod(); public void normalMethod() { //method body } }
Conforme mostrado na sintaxe da classe abstrata acima, podemos ter métodos abstratos ou não abstratos em uma classe abstrata. A palavra-chave ‘abstrato’ precede a declaração da classe.
Resumindo, uma classe abstrata pode ser descrita conforme mostrado abaixo.
Método abstrato em Java
Um método abstrato é um método precedido por uma palavra-chave 'abstrata' sem qualquer implementação. Um método abstrato é declarado dentro de uma classe abstrata.
Um método abstrato é aquele que torna uma classe incompleta por não possuir uma implementação. Portanto, quando incluímos um método abstrato na classe, naturalmente a classe se torna incompleta.
Podemos usar o método abstrato implementando-o em uma subclasse, ou seja, uma classe herda a classe abstrata e então implementa ou fornece o código para todos os métodos abstratos declarados na classe abstrata substituindo-os.
Portanto, torna-se obrigatório substituir o método abstrato na subclasse. Se o método abstrato não for implementado na subclasse também, então devemos declarar a subclasse também como “abstrata”.
A declaração geral do método abstrato é:
resumo vazio methodName (parameter_list);
Ao escrever o método abstrato, precisamos nos lembrar das seguintes regras:
- Uma classe que contém um ou mais métodos abstratos é uma classe abstrata.
- Algumas outras palavras-chave não devem ser usadas com a palavra-chave abstrata.
Portanto, as seguintes combinações são ilegais em Java.
- final
- nativo abstrato
- estática abstrata
- abstrato privado
- abstrato sincronizado
- strictfp abstrato
Vamos implementar um exemplo de uma classe abstrata e um método abstrato.
//abstract class abstract class Bank{ abstract int getInterestRate(); } //concrete class class Citi extends Bank{ int getInterestRate(){return 7;} } //concrete class class HSBC extends Bank{ int getInterestRate(){return 6;} } class Main{ public static void main(String args()){ Bank b; b = new Citi (); // concrete class object System.out.println('Citi Rate of Interest is: '+b.getInterestRate()+'%'); b = new HSBC (); // concrete class object System.out.println('HSBC Rate of Interest is: '+b.getInterestRate()+'%'); } }
Resultado:
No exemplo acima, temos uma classe Bank. Nesta classe, temos um método abstrato, getInterestRate (). Em seguida, declaramos duas classes - ICICI e BOI que herdam da classe Banco. Ambas as classes implementam o método getInterestRate () retornando suas respectivas taxas de juros.
Então, no método principal, criamos um objeto de banco. Primeiro, o objeto de banco contém um objeto da classe ICICI e exibe a taxa de juros. Em seguida, o objeto BOI é criado e exibe a taxa de juros.
Assim, podemos supor que a classe Banco é uma espécie de esboço ou estrutura que nos permite obter uma taxa de juros. A partir dessa estrutura, podemos criar quantas classes concretas quisermos, e então podemos obter as respectivas taxas de juros para cada objeto do banco (isso é mostrado no método principal).
Qual é o uso de uma classe abstrata em Java
Por que usamos uma classe abstrata quando, na realidade, ela não tem nenhuma implementação própria?
Junto com a resposta à pergunta acima, também ilustraremos como usar uma classe abstrata no exemplo a seguir.
Vamos considerar um exemplo de veículos. Sabemos que os veículos podem ser de vários tipos. Podemos ter carros, scooters, bicicletas, ciclomotores, ônibus, etc. Embora existam muitos tipos de veículos, eles têm algumas propriedades ou atributos que são comuns a todos os veículos, independentemente de seus tipos.
Por exemplo, cada veículo tem um modelo, número de chassi, cor, etc. Cada um deles tem funções como iniciar, parar, acelerar, frear, etc. Agora cada veículo terá as propriedades e métodos acima que são comuns aos outros também. Ao mesmo tempo que somos usuários de veículos, podemos não estar interessados em alguns aspectos.
Por exemplo, se uma pessoa está dirigindo um carro, o que lhe interessa é apenas dar a partida e parar o veículo ou acelerar ou frear o veículo. Ele / ela não estará interessado em saber como o veículo arranca ou pára. Estamos interessados apenas no trabalho abstrato das funções e não em seus detalhes.
Agora, se quisermos representar o sistema de exemplo acima em um aplicativo de software, como o projetamos? Em primeiro lugar, implementaremos alguma abstração. Agora, sabemos que algumas funções são comuns, mas dependendo de cada modelo a implementação dessas funções será diferente.
Para começar, declaramos uma classe abstrata “Veículo”.
Mostramos este sistema abaixo:
perguntas e respostas da entrevista com analista de qualidade pdf
Portanto, teremos uma classe abstrata Vehicle e haverá uma classe concreta representando cada modelo do veículo. Para fins de ilustração, usamos apenas três modelos, ou seja, carro, bicicleta e scooter.
A seguir está a hierarquia de classes do sistema acima.
abstract class Vehicle{ abstract void start () ; abstract void stop (); abstract void accelerate (); abstract void brake (); } class Car extends Vehicle{ void start () { //code here…} void stop () { //code here…} void accelerate () { //code here…} void brake () { //code here…} } class Bike extends Vehicle{ void start () { //code here…} void stop () { //code here…} void accelerate () { //code here…} void brake () { //code here…} } class Scooter extends Vehicle{ void start () { //code here…} void stop () { //code here…} void accelerate () { //code here…} void brake () { //code here…} }
Portanto, teremos uma classe abstrata de veículos e três classes de carro, bicicleta e scooter. Cada uma dessas classes estenderá a classe Vehicle e substituirá cada um dos métodos abstratos.
Assim, em geral, sempre que temos que representar um sistema que tem métodos ou operações comuns para representar, então, para apresentar apenas a perspectiva externa ao usuário, optamos pela abstração. Como resultado, pegamos os métodos comuns e os representamos como métodos abstratos e coletamos esses métodos abstratos em uma classe abstrata comum.
Assim que tivermos o esboço de um sistema representado como uma classe abstrata e as operações como métodos abstratos, podemos derivar qualquer número de classes da classe abstrata fornecida e substituir os métodos abstratos para implementar essas operações para cada classe.
Desta forma, torna-se útil projetar um sistema.
Classe e interface abstratas
Vimos a classe abstrata acima. As interfaces são outros blocos de construção que implementam a abstração. Interfaces são contratos e as classes que implementam a interface devem honrar esses contratos.
Os contratos em interfaces nada mais são do que métodos que não são implementados. Dentro das interfaces, teremos apenas protótipos de métodos. Não haverá uma única implementação de métodos dentro das interfaces.
Se tivermos uma declaração de interface da seguinte forma:
public interface interfaceA{ void myInterfaceMethod (); }
Então, qualquer classe que implemente a interfaceA precisa substituir o ‘myInterfaceMethod’.
Se não substituirmos o método em uma classe, então essa classe é representada como abstrata.
abstract class TestClass implements interfaceA{ // not a compulsion to override myInterfaceMethod. }
Teremos um tutorial separado sobre a interface mais tarde.
A seguir, vamos discutir algumas das diferenças entre classes abstratas e interfaces em Java.
Diferença entre classe abstrata e interface
Aula abstrata | Interface |
---|---|
Uma classe abstrata pode ter membros de dados privados ou protegidos, além dos membros públicos. | Os membros da interface são públicos por padrão. |
Uma classe abstrata pode ter métodos abstratos e / ou não abstratos. | Uma interface só pode ter métodos abstratos. |
O resumo pode ou não conter as variáveis finais. | As interfaces podem ser variáveis finais como variáveis padrão. |
Uma classe abstrata pode ter variáveis finais, estáticas ou não estáticas ou não finais. | As interfaces podem ter apenas variáveis finais e estáticas. |
Uma classe abstrata pode fornecer implementação de interface. | As interfaces não podem implementar uma classe abstrata. |
Uma classe abstrata é herdada usando a palavra-chave “extends”. | A interface é implementada usando a palavra-chave “implementa”. |
Uma classe abstrata pode estender outras classes ou implementar várias interfaces. | A interface só pode implementar outra interface. |
Quando usar classe abstrata e interface em Java
A decisão sobre quando usar a classe abstrata e quando usar interfaces no aplicativo Java deve ser tomada de forma inteligente depois de compreender completamente o problema em questão. Há dois aspectos que devemos considerar, conforme mostrado abaixo.
Classes abstratas com comportamento parcial
Sabemos que as classes abstratas podem não ser totalmente implementadas menos. Eles podem ter comportamento parcial. Por outro lado, as interfaces não possuem nenhuma implementação. Portanto, quando temos que escolher entre uma classe abstrata e uma implementação, precisamos considerar este aspecto de nossa aplicação.
Isso significa que temos que primeiro decidir se o aplicativo que estamos projetando tem alguma implementação parcial comum que possamos separar em uma classe abstrata.
Por exemplo, considere que estamos projetando um aplicativo da web. Para isso, teremos que usar alguma tecnologia web como Servlet, API REST, etc. Agora cada uma dessas tecnologias web possui algumas técnicas ou etapas que devem ser implementadas independentemente da aplicação que estamos desenvolvendo. Em seguida, construímos nosso aplicativo personalizado.
Portanto, neste caso, o código definido que a tecnologia da web deve executar pode ser colocado em uma classe abstrata. Podemos ter uma interface para isso? Não. Isso ocorre porque a interface não pode ter uma implementação.
Contrato apenas interfaces
Sabemos que as interfaces têm contratos ou métodos que fazem parte dela. Esses métodos são apenas protótipos. Temos que implementar essas interfaces em uma classe e, em seguida, substituir os métodos.
como fazer uma cópia de um array java
Agora considere a interface Map do Java Collections Framework. Muitas classes como HashMap, TreeMap e HashTable, etc. implementam essa interface. Cada uma dessas classes possui uma implementação diferente. Eles não têm nenhum comportamento comum que possa ser representado na classe abstrata.
Portanto, o que fazemos é projetar uma interface com protótipos de método e, em seguida, implementar cada uma das classes.
Dessa forma, devemos pesar cada fator corretamente antes de escolher entre uma classe abstrata e uma interface.
Diferença entre abstração e encapsulamento
Vamos discutir algumas das diferenças entre abstração e mais um recurso importante da OOP, ou seja, encapsulamento.
Abstração | Encapsulamento |
---|---|
Processo de obtenção e abstração das informações | Processo de vinculação das informações. |
A técnica de abstração está no nível de design ou interface. | O mecanismo de encapsulamento está no nível de implementação. |
A abstração esconde os detalhes. | O encapsulamento vincula as informações em uma unidade, garantindo a segurança da informação. |
A abstração é implementada usando classes e interfaces abstratas. | Modificadores de acesso, nomeadamente público, privado e protegido e padrão, desempenham um papel no encapsulamento. |
Na abstração, a única visão abstrata é apresentada ao usuário, enquanto dados complexos e detalhados são ocultados do usuário. | No encapsulamento, os dados são agrupados como uma unidade e podem ser protegidos ou tornados acessíveis usando modificadores de acesso e métodos getter e setter. |
perguntas frequentes
Q # 1) A abstração e os dados ocultam o mesmo?
Responda: Não, abstração e ocultação de dados não são a mesma coisa. Mas ambos são recursos importantes da programação orientada a objetos. Embora a abstração seja um processo de ocultar os detalhes do plano de fundo, a ocultação de dados é uma técnica de isolar os dados do acesso direto.
Q # 2) Quais são as vantagens da abstração?
Responda: Algumas vantagens da abstração são fornecidas abaixo:
- Ao ocultar os detalhes do plano de fundo e expor apenas a visualização abstrata ao usuário, a abstração torna o código mais simples e legível.
- Como a abstração protege detalhes desnecessários, ela torna o código menor.
- A manutenção do código pode se tornar complexa e difícil sem abstração.
P # 3) Por que a abstração é tão importante?
Responda: A abstração nos permite ocultar detalhes de fundo que são importantes e podem levar ao caos se vazados para o mundo. Ao ocultar os detalhes do plano de fundo e expor apenas a interface necessária ao usuário, a abstração torna os aplicativos mais simples.
Q # 4) Explique a Abstração com um exemplo em tempo real.
Responda: Existem muitos exemplos de abstração em tempo real, incluindo formas geométricas, veículos, etc. Outro exemplo é o ATM (Caixa Automático). O caixa eletrônico oferece suporte a operações como retirada de dinheiro, verificação de saldo, transferência de dinheiro, etc. Mas não temos conhecimento de como essas operações funcionam internamente.
Recebemos apenas um monitor com interface de usuário para selecionar e executar as operações necessárias.
Q # 5) Podemos alcançar Abstração sem Encapsulamento?
Responda: A abstração protege os detalhes de implementação e o encapsulamento oculta os detalhes do objeto. O objeto é a forma abstrata do mundo real e seus detalhes são ocultados usando encapsulamento. Portanto, o encapsulamento é necessário para a abstração.
Conclusão
Neste tutorial, discutimos a abstração em Java em detalhes. Abstração é uma técnica de ocultar detalhes desnecessários do usuário. O usuário tem acesso apenas aos detalhes relevantes. Operações de veículos ou operações de ATM são exemplos clássicos de abstrações no mundo real.
Quando usamos ATM, estamos interessados apenas em realizar operações como saque de dinheiro, etc, sem ter que saber os detalhes sobre como exatamente essa operação é realizada internamente.
Java fornece abstração por meio de classes e interfaces abstratas. Enquanto as interfaces fornecem 100% de abstração, as classes abstratas fornecem abstração parcial. A escolha entre interfaces e classes abstratas deve ser feita em função da aplicação a ser desenvolvida e também das informações a serem expostas ao usuário.
Também discutimos os métodos abstratos neste tutorial junto com as diferenças entre classes abstratas e interfaces.
=> Verifique TODOS os tutoriais Java aqui.
Leitura recomendada
- Interface Java e tutorial de classe abstrata com exemplos
- Java Integer e classe Java BigInteger com exemplos
- Tutorial da classe Java Scanner com exemplos
- O que é Java Vector | Tutorial da classe Java Vector com exemplos
- Java Enum: Tutorial de enumeração Java com exemplos
- Java Basics: Java Syntax, Java Class e Core Java Concepts
- Tutorial JAVA para iniciantes: mais de 100 tutoriais práticos em vídeo Java
- Java Iterator: Aprenda a usar Iteradores em Java com exemplos