Os conceitos de Programação Orientada a Objetos são muito importantes para a 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. 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 de 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 examinar 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 os conceitos de POO em Java.
1. Abstração
A abstração é o conceito de ocultar os detalhes internos e descrever as coisas em termos simples. Por exemplo, um método que adiciona dois inteiros. O processamento interno do método é oculto do mundo exterior. Existem muitas maneiras de alcançar a abstração em programações orientadas a objetos, como encapsulamento e herança. Um programa Java também é um ótimo exemplo de abstração. Aqui, o Java cuida de converter 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 POO?
2. Encapsulamento
Encapsulamento é a técnica usada para implementar abstração na programação orientada a objetos. O encapsulamento é utilizado para restrição de acesso aos membros da classe e métodos. As palavras-chave de modificador de acesso são usadas para encapsulamento na programação orientada a objetos. Por exemplo, o encapsulamento em Java é alcançado usando as palavras-chave private
, protected
e public
.
3. Polimorfismo
Polimorfismo é o conceito onde um objeto se comporta de maneira diferente em situações diferentes. 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 sobrecarga de método. Por exemplo, podemos ter uma classe como abaixo.
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 múltiplos métodos de 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 tem que 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 consegue decidir qual método de classe será invocado. Esta decisão é feita em tempo de execução, daí o nome 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 em que 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. Utilizamos 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 OOPS para definir o relacionamento 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 há uma propriedade de propriedade. Sempre que temos um relacionamento “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 um relacionamento “HAS-A” 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 conferir 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