# Conceitos de Programação Orientada a Objetos(POO)

Neste artigos você irá aprender os conceitos do paradigma de programação mais utilizado no mundo, a Programação Orientada a Objetos, conhecida pela sigla POO. Bem, o conceito de Orientação a Objetos é uma forma de modularizar softwares, ou seja, dividir o software em partes. A orientação a objetos é um modelo de análise, projeto e programação de sistemas de software baseado na composição e interação entre diversas unidades de software chamadas de objetos. Então, na POO teremos alguns conceitos essenciais, vejam-os abaixo:

# Conceitos essenciais

* Classe - Para simplificar, um classe, serve como um projeto de um objeto, ela vai possui métodos e atributos, que serão herdados ao objeto, uma classe define o comportamento dos objetos através de seus métodos, e quais estados ele é capaz de manter através de seus atributos.
** Subclasse - Subclasse é uma nova classe que herda características de sua(s) classe(s) ancestral(is)
* Objeto / Instância de uma classe - Um objeto é capaz de armazenar estados através de seus atributos e reagir a mensagens enviadas a ele, assim como se relacionar e enviar mensagens a outros objetos.
* Atributo - Podemos definir atributo como uma característica de um objeto. Basicamente a estrutura de dados que vai representar a classe. Exemplo: Funcionário: nome, endereço, telefone, CPF...
* Métodos - Definem a habilidades dos objetos. Exemplo: Um Bidu é uma instância da classe Cachorro, que tem a habilidade de latir, implementada por um método de latido
* Herança(generalização) - É o mecanismo pelo qual uma classe(ou sub-classe) possa estender outra classe(super-classe), aproveitando seus comportamentos (métodos) e variáveis possíveis (atributos). Exemplo, mamífero é super-classe de humano
* Associação - é o mecanismo pelo qual um objeto utiliza os recursos de outro. Pode tratar-se de uma associação simples "usa um" ou de um acoplamento "parte de". Por exemplo: Um humano usa um telefone. A tecla "1" é parte de um telefone
Lembre-se, isto são só os conceitos básicos não, vamos entrar em tópicos avançados no começo.

# Criando classes

Vamos praticar um pouco. Se lembra dos modificadores, public, private e protected, usaremos muitos eles para criar classe, vamos começar! Obs: O Java só aceita uma classe de modificador public, então vamos criar uma sem modificador

### Logo acima da sua classe principal, crie uma nova classe chamada MinhaClasse
#### Depois, crie um método chamado imprime

Agora crie um objeto no programa principal

##### Agora compile e teste, veja que logo acima nós chamamos a função soma, mas nós a chamamos da seguinte forma:

Virão que tivemos que dizer que soma faz parte de adicao? Nós temos que fazer isso, sempre que um método faz parte de outra classe, temos que dizer um objetos que pertence a essa classe.
E mais, virão que necessitamos abrir parênteses ao iniciar uma função, oque temos dentre parênteses são parâmetros, são variáveis que pertencem a um método, e depois quando chamamos o método soma, passamos outros números entre parênteses, aquilo eram Argumentos, quando passamos argumentos, estamos argumentando os valores do parâmetros, isto é, afirmando seus respectivos valores.
Das mesma forma que fizemos ao chamar imprime em soma, nós argumentamos que o valor a ser impresso em imprime, no caso a variável imp, e passamos de argumento a variável res