# Conceitos Básicos de Orientação a Objetos — Parte 1

![](https://cdn.hashnode.com/res/hashnode/image/upload/v1700320009754/e61c42f3-4c43-48a4-92c4-0bb8bcea8d31.jpeg)

Se você está entrando agora no mundo de OO (orientação a objetos), seguem alguns conceitos básicos que você deve saber:

*   **Abstração  
    **Capacidade de nos importar somente com aspectos relevantes em um determinado contexto.
*   **Classe**  
    São como especificações de um objeto que tem *atributos* e *métodos*. Geralmente representam algo abstrato, como um substantivo. Por exemplo: casa, pessoa, veículo.   
    Uma analogia que podemos fazer é que uma classe corresponde à planta baixa de uma casa.

![](https://cdn.hashnode.com/res/hashnode/image/upload/v1700320011457/84124d01-933b-4317-8c20-b799624f420e.png)

Exemplo de classe Pessoa, com atributos e métodos

*   **Objeto  
    **São instâncias da classe, ou seja, uma criação concreta a partir da classe.  
    Se a classe representa a planta baixa de uma casa, o objeto representa a casa construída.
*   **Herança  
    **Conceito que permite que uma classe herde atributos e métodos de uma classe mãe.

![](https://cdn.hashnode.com/res/hashnode/image/upload/v1700320012666/99cc60dc-055e-4ae2-9e4b-57ec47569ca2.png)

Criamos duas extensões da classe Pessoa. Pessoa Física e Pessoa Jurídica herdam todos os atributos e métodos de Pessoa e incluem os seus próprios. Pode-se afirmar que toda Pessoa Física é uma Pessoa, mas nem toda Pessoa é uma Pessoa Física.

Podemos dizer que *Pessoa* é uma **superclasse** ou classe **mãe**. *Pessoa Física* e *Pessoa Jurídica* são **subclasses** ou classes **filhas**.   
Utilizando a herança, podemos evitar repetição de código, centralizando atributos e métodos em classes que fazem sentido estarem relacionadas.

*   **Interface  
    **Contrato entre uma classe e o mundo exterior. Uma interface define métodos que devem ser desenvolvidos (contrato a ser seguido) para quem quiser implementá-la.
*   **Encapsulamento  
    **A ideia do encapsulamento é proteger partes do código, escondendo como funcionam. Desta forma, as mudanças e manutenções futuras ficam facilitadas, pois uma determinada regra não ficará espalhada em vários lugares, mas sim encapsulada em determinado lugar.
*   **Sobrescrita  
    **No exemplo da herança, tanto *Pessoa Física* quanto *Pessoa Jurídica* herdam o método **pagarImposto()**, mas cada tipo de pessoa paga imposto de forma diferente. Dessa forma, as subclasses podem reescrever o método para atender suas necessidades específicas.
*   **Polimorfismo  
    **Capacidade de referenciar um objeto de várias formas. Usando o mesmo exemplo da herança, uma *Pessoa* pode ser referenciada como uma *Pessoa Física* ou *Pessoa Jurídica*. O inverso **não** é verdadeiro, pois toda *Pessoa Jurídica* é uma *Pessoa*, mas nem toda *Pessoa* é uma *Pessoa Jurídica*.

Gostou do texto? Continue lendo [Conceitos Básicos de Orientação a Objetos — Parte 2](https://medium.com/@RafaelSermenho/conceitos-b%C3%A1sicos-de-orienta%C3%A7%C3%A3o-a-objetos-parte-2-5accfe670a6e#.ur8nko5r7). E clique no botão Recommend, logo abaixo.  
Fazendo isso, você ajuda esta história a ser encontrada por mais pessoas. Seu comentário também é bem-vindo.

Aqui estão os links que me inspiraram e que podem lhe ajudar a descobrir um pouco mais sobre o assunto.

[**Lesson: Object-Oriented Programming Concepts (The Java™ Tutorials > Learning the Java Language)**  
*This beginner Java tutorial describes fundamentals of programming in the Java programming language*docs.oracle.com](https://docs.oracle.com/javase/tutorial/java/concepts/ "https://docs.oracle.com/javase/tutorial/java/concepts/")[](https://docs.oracle.com/javase/tutorial/java/concepts/)

[**Introdução à Programação Orientada a Objetos em Java**  
*Nos desenvolvimentos de sistemas, existem alguns fatores importantes como: o entendimento do código, fácil manutenção…*www.devmedia.com.br](http://www.devmedia.com.br/introducao-a-programacao-orientada-a-objetos-em-java/26452 "http://www.devmedia.com.br/introducao-a-programacao-orientada-a-objetos-em-java/26452")[](http://www.devmedia.com.br/introducao-a-programacao-orientada-a-objetos-em-java/26452)
