A Programação Orientada a Objetos é um paradigma de programação, talvez o mais famoso. Ser um paradigma de programação quer dizer que POO é um padrão para escrever códigos, como um conjunto de regras e conceitos seguidos para programar um código.
Nesse sentido, POO possui regras e conceitos para criar códigos que representam relações entre objetos distintos, por exemplo, programar um jogo que relaciona características de um jogador, e suas ações, com as de um inimigo. Assim, POO se baseia em dois conceitos primários - Classes e Objetos.
Classe é um molde criado pelo programador que serve exclusivamente para criar (instanciar) objetos. Dessa forma, tudo o que um objeto possui de características e ações são definidas em sua classe, e todo objeto de uma classe representa um exemplar dessa classe.
As características de um objeto são chamadas de atributos, e representam o conjunto de informações acerca de um objeto, listadas dentro de sua classe. As ações que um objeto pode executar são chamadas de métodos, também listados dentro da classe.
Para visualizar esse assunto, podemos tirar exemplos de objetos cotidianos. Se pensarmos em uma cadeira, nossa mente projeta um objeto com pés, assento e encosto, logo, pés, assento e encosto são atributos de uma cadeira - ela não "faz pés", ela possui pés; e, dentro do que uma cadeira pode fazer, podemos considerar sustentar um peso em seu assento como sua ação, portanto, "sustentar peso em seu assento" é o método de uma cadeira.
Assim, de acordo com a linha do nosso exemplo, toda cadeira possuirá os elementos citados, o que muda entre os tipos de cadeiras pode ser a altura, o número de pés, ou o ângulo do encosto.
Uma classe que serve como molde para os tipos de cadeiras, deve então, listar todos esses atributos e métodos. Já os objetos (exemplares) criados a partir dessa classe terão, para cada um dos atributos, um valor próprio, particular de cada exemplar, e poderão executar todos métodos listados na classe.
Atributos:
número de pés
ângulo do encosto
altura
Métodos:
Sustentar Peso
cadeira alta
número de pés = 4
ângulo do encosto = 85º
altura = 1.30 m.
cadeira de escritório
número de pés = 5
ângulo do encosto = 85º
altura = 0.60 m.
cadeira de bar
número de pés = 3
ângulo do encosto = 0º
altura = 1.20 m.
cadeira de praça
número de pés = 2
ângulo do encosto = 89º
altura = 0.60 m.
Declaração da classe "Cadeira"
Declaração de quatro objetos diferentes da classe "Cadeira"
Podemos ver exemplos mais práticos dessa lógica em diversos jogos que nos dão a opção de escolher um personagem ou objeto com que jogar. No FIFA, por exemplo, todos os jogadores possuem os mesmos atributos - velocidade, drible, passe, defesa, entre outros -, mas o valor de cada um deles é diferente para cada jogador. Isso significa que no código do jogo, todos os jogadores são objetos de uma classe Jogador de Futebol, que lista os atributos que eles possuem.
Todos os três possuem o mesmo atributo drible, mas o valor desse atributo é diferente para cada um dos três
Até aqui, definimos o que são classes e objetos, e como montamos essas estruturas. Mas aonde entram as relações entre objetos distintos?
Os atributos listados até aqui dizem respeito apenas a própria cadeira, mas se adicionarmos o atributo peso suportável, passamos a ter cadeiras com informações que impactam a relação com outros objetos. Nesse exemplo do peso suportável, esse atributo irá permitir a cadeira executar o método Sustentar Peso, enquanto a pessoa ou o objeto que estiver apoiado na cadeira pesar menos que o atributo.
O esquema a seguir descreve essa relação através de um pseudocódigo:
Se aplicarmos a mesma ideia usando o exemplo dos jogadores de futebol, poderíamos usar o atributo drible para, numa disputa por bola, decidir qual jogador saíra da disputa com a posse de bola.