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:
- Abstração
- Encapsulamento
- Polimorfismo
- Herança
- Associação
- Agregação
- 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