Apesar de ter surgido na década de 60 esta metodologia passou a ser utilizada amplamente a partir da década de 90 quando surgiu a linguagem de programação JAVA que ficou popularizada pelo simples fato de se poder programar para todas as plataformas da mesma maneira, o que até então não era possível, um programa feito em ambiente Windows só poderia ser instalado em seu ambiente de origem, mas, com a criação de uma maquina virtual chamada Java Virtual Machine (JVM) que funciona como um Sistema Operacional à parte pôde-se então ter a liberdade de programar de forma que os programas possam ser aceitos tanto em máquinas com sistemas operacionais da Microsoft quanto da Apple basta apenas que o computador com qualquer um dos sistemas citados tenha instalado sua versão da JVM.

Junto com a necessidade de se ter um programa híbrido veio à tona o velho conceito de Programação Orientada a Objetos que até então não se tinha uma absorção tão intensa das empresas de tecnologia da época, então pensamos se temos um programa que possamos utiliza-lo em diversas plataformas por que não ter partes desse programa sendo utilizado por vários outros programas? Esta é uma das especialidades da POO a reutilização de código então a metodologia se expandiu criou forças e mais adeptos a este modelo de programação outras linguagens surgiram e outras se adaptaram para suprir a necessidade dos seus utilizadores.

A Programação Orientada a Objetos (POO) é uma forma especial de programar onde nos aproximamos mais do mundo real trazendo para a programação o conceito de 'Objetos'. Assim como no mundo real tratamos muitos elementos tanto material quanto imaterial como objetos no mundo da programação não é diferente e até mesmo mais amplo, pois com POO praticamente tudo pode ser considerado um objeto, por exemplo, uma pessoa, um carro, um planeta e até mesmo sua conta bancária pode ser objeto.

O objetivo deste modelo é simplesmente abstrair dados do mundo real e transportar os dados relevantes para o mundo virtual com as mesmas características (atributos, ações, modo de fabricação). Um exemplo prático: 

Temos uma caneta, nós sabemos que uma caneta tem suas características como tamanho, cor, peso (estes são os atributos da caneta), escrever, cair, quebrar, vazar (estas são as ações que uma caneta pode realizar) então da mesma forma que sabemos que a caneta pode conter todas estas características no mundo real podemos fazer com que a caneta tenha estas mesmas características no mundo da programação.

"Uma observação importante é que não são todas as linguagens de programação que usam POO como padrão de programação algumas linguagens nasceram com o modelo enraizado como JAVA, C++, C# e Objetive-C, já outras sofreram adaptações para se adequar ao modelo como o PHP, Javascript."

A principal característica da POO é o reaproveitamento de componentes (objetos) assim economizando tempo e consequentemente dinheiro, o fato é que ao se programar orientado objetos usamos meios que podemos dividir nosso projeto em pequenas partes e utilizar estas partes em projetos distintos podendo assim chegar a um resultado comum isto se dá ao fato de termos técnicas chamadas de ‘refatoração’. Seguindo boas práticas de programação e alguns padrões e convenções da linguagem escolhida para se programar pode-se ter como resultados códigos limpos de fácil entendimento e abrangente usabilidade o que é o objetivo do modelo.

Principais conceitos da Programação Orientada e Objetos:

Classe (atributos e métodos)

Classe é a arquitetura ou o molde do objeto, para que se possa ter um objeto temos que ter a classe caso contrário é impossível se ter um objeto, é na classe que teremos as características dos objetos como atributos (propriedade) e métodos (ações), a classe nada mais é do que um contêiner de informações que o objeto ao ser criado consulta através de mensagens seus atributos e seus métodos, falaremos mais sobre classes e como criá-las em tópicos mais adiante.

Objeto

Objeto é o produto final, com a classe criada a partir dela podemos instanciar um objeto, são os objetos que dirão o rumo do nosso programa, através de mensagens falarão o caminho que o programa irá seguir, existem várias maneiras de se instanciar um objeto que também veremos em tópicos posteriores.

Encapsulamento

Encapsulamento é como se fosse um dispositivo de segurança, o encapsulamento é uma forma de esconder dados privativos ou protegidos do nosso objeto para que terceiros não tenham acesso, exemplo: Eu tenho meu nome e tenho CPF, meu nome qualquer outra pessoa pode saber, mas meu CPF somente eu posso saber exceto se eu permitir que outras pessoas saibam meu CPF, esta forma de ocultar meu CPF na POO se chama encapsulamento.

Herança

Herança, o próprio nome já diz é a habilidade de herdar características de outros objetos da mesma forma que no mundo real herdamos características físicas, bens materiais e imateriais de nossos antecedentes.

Sobrecarga

Sobrecarga é um meio de termos ações com o mesmo nome em nossas classes, por regra o JAVA, por exemplo, não permite que haja métodos (ações) com nomes iguais exceto que se aplique sobrecarga a esse método no PHP este procedimento não existe sendo assim impossível que se tenha sobrecarga, veremos mais em tópicos adiante.

Polimorfismo

O Polimorfismo caracteriza-se pela criação de métodos com assinaturas iguais, mas implementações distintas. Desta forma, o resultado executado depende do objeto que chamou o método, nos aprofundaremos mais adiante neste assunto.

Interface

O objetivo de uma interface é servir como modelo para implementação de classes, a utilização é um tanto quanto complexa, mas dominando o seu uso, pode-se obter resultados bastante satisfatórios.

Essa é a primeira parte da série de artigos falando sobre orientação a objetos que teremos aqui no site. Fique ligado.