Hoje teremos aqui um convidado especial: a vossa santidade o Dalai Lama explicando pra vocês o sensacional conceito de orientação a objetos no mundo zen da programação! (se você não é programador, não quer ser e/ou tem raiva de quem é aperte Ctrl+W para ver um vídeo educacional).
PRA QUE, ME DIZ
É muito provável que você já saiba usar classes, instanciar objetos e executar métodos, afinal, todos as explicações práticas sobre orientação a objetos se resumem a isso (e todas elas estão tão erradas quanto encoxar a mãe no tanque). Se você não sabe, relaxa que eu explico depois. Importante agora é saber o porquê de tudo isso, a causa primária e origem do universo:
A Orientação a Objetos existe para tornar o código mais fácil de manter -Clarice Lispector
Vocabulário básico:
- OOP
- Object-Oriented Programming, é os jeito que os mano gringo dá a letra no bagulho.
- POO
- Programação Orientada a Objetos, não use essa sigla e caçoe fortemente de quem usa, em inglês poo significa cocozinho.
Bom, agora eu não preciso mais escrever “Programação Orientada a Objetos” em cada menção ao termo. Posso simplesmente escrever OOP para meu único e exclusivo conforto. Então vamos continuar:
O que significa para um software ser fácil de manter:
- Deve ser possível reutilizar código sem copiar/colar.
- Outras pessoas além do autor original devem compreender o código.
- Alterações devem ser simples de serem realizadas.
Já vou falando logo de cara: Você não precisa de OOP pra atingir esses três princípios. Muito antes dela surgir, bons programadores já produziam código organizado o suficiente pra ser simples de alterar, fácil de ler e reutilizável. Muito antes do automóvel surgir as pessoas também percorriam grandes distâncias, mas cavalgar 500km não parece muito esperto se existe uma ferramenta muito melhor pra isso né garotada.
Desculpa Clarice, vou dar uma regada com mel na sua citação:
A Orientação a Objetos é a melhor maneira de tornar o código mais fácil de manter -Clarice Lispector feat Alexandre Gomes Gaigalas
Agora sim.
Princípios
Alguns dos mais longos tutoriais sobre OOP começam comparando objetos do mundo real com OOP. Por isso eles são tão ridículos.
Você até pode fazer as classes dos seus objetos no código terem relações com o mundo real, isso é bom até um certo ponto, mas você nunca deve colocar essa relação acima do princípio-mór: tornar o código mais fácil de manter.
Existem artigos que mostram linhas e mais linhas de código com coisas que você nunca vai usar, nem se trabalhar numa veterinária. Tentarei ser digno e não fazer o leitor de idiota. Não usarei exemplos com mamíferos, coelhos, veículos, cachorros e outras coisas QUE VOCÊ NUNCA VAI APLICAR NO SEU CÓDIGO.
O Básico: Classes e Instâncias
Pra quem não sabe (espero que todo programador lendo isso aqui saiba) em qualquer linguagem de programação existem tipos. Existem tipos de variáveis para armazenar números, texto e mais um monte de coisas.
Esses tipos tem algumas regrinhas de comportamento que definem como eles interagem. Segue abaixo uma lista de coisas que é possível fazer com números:
- somar
- subtrair
- multiplicar
- dividir
(viu como eu sou PROFISSA em matemática, manjo tudo)
Uma lista similar de coisas que você pode fazer com textos:
- converter os caracteres para maiúsculas
- converter os caracteres para minúsculas
- concatenar esse texto com outro
- encontrar uma palavra no meio do texto
Classes são como tipos. São um conjunto de regras de como objetos interagem. Só que são muito mais legais porque quem define as regras é o próprio programador.
Imagine que você é um programador e está construindo um software que busca dentro de vários arquivos zip, e como você curte essa vibe toda de OOP, você decidiu criar uma classe, o DiretorioCompactado. Você define que as instâncias dessa classe podem interagir usando essas operações:
- listar arquivos (para listar tudo que existe dentro de um DiretorioCompactado)
- extrair arquivo (para extrair um único arquivo do DiretorioCompactado)
Voltando rapidinho aos tipos, note que há uma diferença entre o tipo e o valor. Os números 1, 2, 3, 4 e 651951 são todos do mesmo tipo, são todos números. O valor de cada um deles no entanto é diferente. A mesma relação existe entre classe e instância.
Um zip contendo todas as músicas de “The Number of the Beast” do Iron Maiden é um DiretorioCompactado da mesma forma que um zip contendo as fotos da última Playboy. Independentemente disso, você poderá “listar arquivos” em ambos da mesma forma. São duas instâncias diferentes da mesma classe.
Olha que bacana:
- É possível reutilizar o código para outro software, não somente o programa que busca dentro de vários arquivos zip. Por exemplo um player de música que consegue ler mp3 dentro de zips.
- Ao ler a definição da classe, outras pessoas podem entender o que ela faz porque ela se auto-explica (sou um DiretorioCompactado no qual é possível “listar arquivos” e “extrair arquivo”, prazer).
- É mamão-com-açucar modificar a classe para adicionar novos recursos e operações, como por exemplo “adicionar arquivo” (para acrescentar algo no DiretorioCompactado), sem ter que mexer nem no buscador de zips nem no player de música.
Se liga aí que é hora da revisão!
- OOP significa Object-Oriented Programming. E você nunca deve abreviá-la como POO porque isso significa “cocozinho”.
- O objetivo da OOP é tornar o código mais fácil de manter: entender, alterar e reutilizar.
- Os objetos são definidos por classes.
- Uma classe define como você pode interagir com uma instância.
Bônus: O tinhoso se esconde no copiar/colar
Pode não ser claro pra algumas pessoas qual é o problema de copiar e colar código. Vamos lá:
Copiar e colar código é duplicar os bugs em potencial sem ganhar nada por isso. -Arnaldo Jabor
Quando você copia e cola um trecho de código, nenhuma nova funcionalidade é acrescentada. É exatamente o mesmo código e faz a mesma coisa, só que em outro lugar. Todo código possui potencial para ter bugs. É normal programadores escreverem códigos com bugs. E a única maneira de corrigir bugs é alterando código (e cada duplicata dele) para corrigir o problema.
BOM DIVERTIMENTO.




Pingback: Tweets that mention Orientação a Objetos, por Dalai Lama – parte 1 » pla.net.br - -- Topsy.com
Pingback: Orientação a Objetos, por Dalai Lama – parte 1.5 » pla.net.br -
Pingback: Orientação a Objetos: Testes unitários, por Dalai Lama » pla.net.br -