Orientação a Objetos, por Dalai Lama – parte 1

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).

Presta atenção que eu sei que você não manja nada de Orientação a Objetos seu danado

Presta atenção que eu sei que você não manja nada de Orientação a Objetos seu danado


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.

Entender agora você motivo usar OOP para

Entender agora você motivo usar OOP para?

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.
cacete de documentação nem o capeta entende essa gambiarra

cacete de documentação nem o capeta entende essa gambiarra

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.

Alexandre Gaigalas

Desenvolvedor PHP há tanto tempo que nem lembra direito há quanto tempo é desenvolvedor, o que talvez seja Alzheimer precoce.

Website - Twitter - Facebook - More Posts

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

  • http://twitter.com/ars_nihili André

    A Orientação a Objetos é a melhor maneira de tornar o código mais fácil de manter -Clarice Lispector feat Alexandre Gomes Gaigalas

    Não acho que seja A melhor. Eu particularmente sou chegado nas linguagens funcionais, até porque se a linguagem não funcionar fica difícil de programar né rsrsrs

    beijos, te amo
    ops, foi sem querer

    • http://gaigalas.net Alexandre Gaigalas

      Uma função é geralmente mais simples de projetar e escrever do que um objeto, até mesmo um método dentro de um objeto… o que geralmente dá a ilusão de que programação funcional é melhor.

      Agora pega um sistema com aquela cacetada de funções que dependem umas das outras em vários níveis. Você muda uma única função e um monte de coisa quebra. A OOP tem mecanismos embutidos pra lidar com esse tipo de problema (herança, polimorfismo, baixo acoplamento, padrões de projeto, etc…)

      Olha, os melhores softwares que eu já vi escritos somente em funções geralmente pegam emprestado vários conceitos de OOP. O GTK+ acho que é o melhor exemplo. Duvido muito que uma base grande de código consiga manter-se sem a noção de que determinados grupos de dados devem respeitar um determinado comportamento ;) e essa é a alma da OOP.

      • http://twitter.com/ars_nihili André

        Mas o GTK+ é escrito em C, ou seja, é uma implementação orientada a objeto em uma linguagem procedural.

        Com funcional eu quero dizer linguagens como Haskell e em até certo ponto Lisp, linguagens que tem como ideal funções “pequenas”, com um objetivo bem definido e sem efeitos colaterais. O programa então é feito unindo essas várias funções. A ideia é que como cada função é pequena e tem um objetivo definido, é fácil testá-las individualmente.

        No entanto, nunca vi um grande projeto feito com essas linguagens, não sei como elas se comportam em comparação a linguagens orientadas a objetos. Como meus programas fogem do que é de praxe no mercado, são mais voltados a number-crushing, me dou melhor com linguagens funcionais.

        PS: Quase ia me esquecendo. Haskell também tem classes, mas ele as usa de um ponto de vista diferente que a maioria das outras linguagens, que usa classes como sinônimo de tipo. Em Haskell o que existe são classes de tipos, então a classe “Num” engloba os tipos “Int”, “Double”, “Complex”, “Rational”, etc. É parecido, mas não exatamente a mesma coisa que herança.

        • http://gaigalas.net Alexandre Gaigalas

          Objetos também devem ser criados de pequenos métodos com objetivo bem definido (embora estes sim podem alterar estado, OOP usa bastante o conceito de estado).

          Uma prática muito comum pra quem programa em OOP é utilizar testes unitários automatizados. Quanto melhor for o código (métodos menores, atômicos), mais simples é testá-lo! Uma das partes da série de artigos falará sobre isso…

          O fato de funções ou métodos serem pequenos acredito ser uma boa prática de programação em qualquer paradigma ou linguagem. É uma questão de bom senso.

          Ah, e sobre aqulio que você me perguntou no msn, eles entregam o vibrador direto na sua casa, numa embalagem discreta e tal.. pode comprar! BEIJO GATO

          ops errei apagar

          • http://twitter.com/ars_nihili André

            Ai… me entregou =x

            Nessa vida orientada a objetos, esse é o objeto que mais gosto.

  • 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 -