Nesse post falaremos um pouco sobre esse paradigma de desenvolvimento tão utilizado e difundido. Ao final do texto voce encontrará links para poder aprofundar seus conhecimentos no assunto, todos 100% gratuitos.
Na programação orientada a objetos (POO), os objetos são organizados de acordo com características em comum, ou seja: classes, métodos e atributos. Dessa forma é mais fácil localizar, reutilizar e realizar a comunicação entre objetos.
A POO, foi desenvolvida para aproximar o mundo real do virtual.
Antes de entendermos um pouco mais sobre esse paradigma, vamos falar de história, e de como um programa era desenvolvido até a disseminação da programação orientada a objetos.
Programação estruturada (modelo procedural): esse modelo consistia numa sequencia de instruções, comandos, rotinas, sub-rotinas ou funções associadas a um nome próprio. Havia muito reaproveitamento de código e diversas partes do código obsoletas que consumiam processamento.
Principais conceitos da programação orientada a objetos
O modelo de análise consistes nas técnicas empregadas de acordo com a POO;
O desenvolvimento e a documentação das técnicas se tornam um projeto, no qual as classes, os atributos, os métodos e as mensagens serão criados;
Os relacionamentos entre as classes criadas se tornam um roteiro para a programação de sistemas de software;
A análise e o projeto tem como principal objetivo identificar o melhor conjunto de objetos a ser utilizado para descrever um software;
O funcionamento do sistema de software se torna possível devido ao relacionamento e a troca de mensagens entre os conjuntos e objetos.
Na POO é implementado um conjunto de classes que definem os objetos presentes no sistema de software. Cada classe determina o comportamento (métodos) e os estados possíveis (atributos) de seus objetos, bem como seu relacionamento com os outros objetos.
Mas para entendermos o que de fato é a programação orientada a objetos, temos que responder a pergunta primordial: o que é um objeto?
Em definição um objeto seria coisa material ou abstrata que pode ser percebida pelos sentidos e descrita por meio de suas características, comportamentos e estado atual. No caso da programação, essas características levam o nome de atributos, os comportamentos de método, e o estado continua sendo o estado.
Um objeto não pode ser simplesmente criado, ele precisa de um modelo para ser seguido. A esse modelo nós damos o nome de classe. Em sua definição seria um conjunto de características de um determinado "objeto" que pode ser utilizada de modelo para criar os objetos.
Outro conceito importante que vai nos auxiliar no entendimento da POO é o de evento. Eventos são interações (parâmetros) internas e externas que auxiliam na execução de um programa.
Pilares da programação orientada a objetos
A POO, possui quatro pilares que a constituem. Esses quatro pilares são: a abstração, o encapsulamento, o polimorfismo e a herança. Abaixo vamos conhecer um pouco de cada um deles.
A abstração é a habilidade de se concentrar nos aspectos essenciais a um contexto qualquer. No processo da abstração as características menos importantes ou acidentais são desconsideradas.
O encapsulamento é um mecanismo que permite proteger todos os métodos e atributos de uma classe. A proteção oferecida pelo encapsulamento é baseada na utilização de modificadores de acesso - mais limitante sobre os atributos aplicados na classe-, disponibilizando métodos internos que modificam os valores dos atributos de classes declaradas.
A partir de modificadores de acesso, o encapsulamento segue para controlar o acesso aos atributos e métodos de uma classe, os atributos podem ser declarados públicos e privados.
Atributos públicos: podem ser acessados ou modificados por todo objeto que:
instância uma classe que contém atributos;
utiliza tais atributos.
Atributos privados: só podem ser acessados ou modificados pelo objeto que está instanciado a classe. O acesso ocorre por meio de um método.
A modularização (ou componentização) é o mecanismo que permite que um sistema de software seja divido em partes que interage, entre si. Tais partes são chamadas de módulos. Desse modo, o código desenvolvido é dividido em módulos independentes que podem ser utilizados por qualquer objeto a qualquer tempo.
O polimorfismo denota uma situação em que o objeto pode comportar-se de maneiras diferentes ao receber uma mensagem. O comportamento do objeto vai depender do modo como ele foi concebido. O polimorfismo é complementado pelos conceitos de herança e sobrecarga de métodos.
Herança
Herança simples: herança entre duas classes;
Herança múltipla: quando uma classe herda características de duas ou mais classes-pai;
Classe-mae: nome dado a classe principal;
Classe-filha: nome dado a classe que herda.
Segundo o conceito de generalização, a classe filha pode repassar seus métodos e atributos a outra classe. E segundo o conceito de especialização a classe deve ser o mais detalhada possível com relação ao objeto que ela classifica.
Tipos de relacionamento
A associação ocorre quando duas classes colaboram entre si. Nesse sentido a associação descreve os vínculos existentes entre as classes que interagem entre si.
Outra forma de relacionar classes é por meio da agregação. A agregação é um relacionamento estrutural por meio do qual parte de uma classe é associada a outra classe e parte dos objetos são associados a outras partes de objetos. Na agregação, uma classe agrega a outra mas mantém sua identidade própria. Por conta disso, a agregação é considerada um tipo especial de associação.
Já a multiplicidade busca estabelecer como as classes que formam uma associação fornecem informações umas as outras. Além disso a multiplicidade permite especificar o nível de dependência entre as classes envolvidas.
Para um conhecimento mais completo sobre o assunto, abaixo deixo o curso em vídeo sobre o assunto. Extremamente bem produzido e explicado:
Além dele, mais alguns links de cursos sobre o assunto: