Conceitos de OOPS em Java – Exemplo de Conceitos de OOPS

Os conceitos de Programação Orientada a Objetos são muito importantes para programação. Sem ter uma ideia sobre os conceitos de OOPS, você não conseguirá projetar sistemas no modelo de programação orientada a objetos.

O que é o Modelo de Programação Orientada a Objetos?

O modelo de programação orientada a objetos gira em torno do conceito de Objetos. O que é um Objeto? Um objeto é uma instância de uma Classe. Ele contém propriedades e funções. Eles são como objetos do mundo real. Por exemplo, seu carro, casa, laptop, etc. são todos objetos. Eles têm algumas propriedades específicas e métodos para realizar alguma ação. O que é uma Classe? A Classe define o modelo dos Objetos. Elas definem as propriedades e funcionalidades dos objetos. Por exemplo, Laptop é uma classe e seu laptop é uma instância dela.

Conceitos de OOPS

Os conceitos principais de OOPS são:

  1. Abstração
  2. Encapsulamento
  3. Polimorfismo
  4. Herança
  5. Associação
  6. Agregação
  7. Composição

Vamos analisar esses conceitos de programação orientada a objetos um por um. Usaremos a linguagem de programação Java para exemplos de código para que você saiba como implementar conceitos de OOPS em Java.

1. Abstração

Abstração é o conceito de esconder os detalhes internos e descrever coisas em termos simples. Por exemplo, um método que adiciona dois inteiros. O processamento interno do método é ocultado do mundo exterior. Existem muitas maneiras de alcançar abstração em programação orientada a objetos, como encapsulamento e herança. Um programa Java também é um ótimo exemplo de abstração. Aqui, o Java cuida da conversão de declarações simples para linguagem de máquina e oculta os detalhes de implementação internos do mundo exterior.

Leitura adicional: O que é Abstração em OOPS?

2. Encapsulamento

Encapsulamento é a técnica usada para implementar abstração em programação orientada a objetos. O encapsulamento é utilizado para restrição de acesso aos membros e métodos da classe. As palavras-chave modificador de acesso são usadas para encapsulamento em programação orientada a objetos. Por exemplo, o encapsulamento em Java é alcançado usando as palavras-chave private, protected e public.

3. Polimorfismo

O polimorfismo é o conceito onde um objeto se comporta de maneira diferente em diferentes situações. Existem dois tipos de polimorfismo – polimorfismo em tempo de compilação e polimorfismo em tempo de execução. O polimorfismo em tempo de compilação é alcançado por meio de sobrecarga de método. Por exemplo, podemos ter uma classe como a seguir.

public class Circle {

	public void draw(){
		System.out.println("Drwaing circle with default color Black and diameter 1 cm.");
	}
	
	public void draw(int diameter){
		System.out.println("Drwaing circle with default color Black and diameter"+diameter+" cm.");
	}
	
	public void draw(int diameter, String color){
		System.out.println("Drwaing circle with color"+color+" and diameter"+diameter+" cm.");
	}
}

Aqui temos vários métodos draw, mas eles têm comportamentos diferentes. Este é um caso de sobrecarga de método porque todos os métodos têm o mesmo nome e argumentos diferentes. Aqui o compilador será capaz de identificar o método a ser invocado em tempo de compilação, por isso é chamado de polimorfismo em tempo de compilação. O polimorfismo em tempo de execução é implementado quando temos uma relação “É-UM” entre objetos. Isso também é chamado de sobrescrita de método porque a subclasse deve sobrescrever o método da superclasse para o polimorfismo em tempo de execução. Se estivermos trabalhando em termos da superclasse, a classe de implementação real é decidida em tempo de execução. O compilador não é capaz de decidir qual método de classe será invocado. Essa decisão é feita em tempo de execução, daí o nome de polimorfismo em tempo de execução ou despacho de método dinâmico.

package com.journaldev.test;

public interface Shape {

	public void draw();
}
package com.journaldev.test;

public class Circle implements Shape{

	@Override
	public void draw(){
		System.out.println("Drwaing circle");
	}

}
package com.journaldev.test;

public class Square implements Shape {

	@Override
	public void draw() {
		System.out.println("Drawing Square");
	}

}

Shape é a superclasse e existem duas subclasses Circle e Square. Abaixo está um exemplo de polimorfismo em tempo de execução.

Shape sh = new Circle();
sh.draw();

Shape sh1 = getShape(); //some third party logic to determine shape
sh1.draw();

Nos exemplos acima, o compilador Java não sabe a classe de implementação real de Shape que será usada em tempo de execução, daí o polimorfismo em tempo de execução.

4. Herança

Herança é o conceito de programação orientada a objetos onde um objeto é baseado em outro objeto. A herança é o mecanismo de reutilização de código. O objeto que está sendo herdado é chamado de superclasse e o objeto que herda a superclasse é chamado de subclasse. Usamos a palavra-chave extends em Java para implementar a herança. Abaixo está um exemplo simples de herança em Java.

package com.journaldev.java.examples1;

class SuperClassA {

	public void foo(){
		System.out.println("SuperClassA");
	}
	
}

class SubClassB extends SuperClassA{
		
	public void bar(){
		System.out.println("SubClassB");
	}
	
}

public class Test {
	public static void main(String args[]){
		SubClassB a = new SubClassB();
		
		a.foo();
		a.bar();
	}
}

5. Associação

Associação é o conceito de POO para definir a relação entre objetos. A associação define a multiplicidade entre objetos. Por exemplo, objetos Professor e Aluno. Existe uma relação de um para muitos entre um professor e alunos. Da mesma forma, um aluno pode ter uma relação de um para muitos com objetos professores. No entanto, ambos os objetos aluno e professor são independentes entre si.

Agregação

Agregação é um tipo especial de associação. Na agregação, os objetos têm seu próprio ciclo de vida, mas existe uma propriedade de propriedade. Sempre que temos uma relação “TEM-UM” entre objetos e propriedade, então é um caso de agregação.

6. Composição

A composição é um caso especial de agregação. A composição é uma forma mais restritiva de agregação. Quando o objeto contido em uma relação “TEM-UM” não pode existir por si só, então é um caso de composição. Por exemplo, Casa tem-um Quarto. Aqui, o quarto não pode existir sem a casa. A composição é considerada melhor do que a herança, leia mais em Composição vs Herança.

Leitura adicional: Composição em Java

Isso é tudo para um resumo rápido sobre conceitos de OOPS.

Você pode examinar mais programas de exemplo em Java em nosso Repositório no GitHub.

Referências: https://docs.oracle.com/javase/tutorial/java/concepts/

Source:
https://www.digitalocean.com/community/tutorials/oops-concepts-java-example