Orientação a Objetos: Encapsulamento e Interfaces, por Dalai Lama

Lorem Ipsum (bom dia em inglês) meus caros. Hoje vou falar sobre duas coisas mais interligadas do que goiaba e bicho de goiaba: Projeto de interfaces e encapsulamento! É recomendável que você ao menos finja que tenha lido os outros artigos da série.

Na OOP é muito mais importante conhecer a parte teórica do que a prática. Você pode saber como declarar classes, instanciar objetos, executar métodos e ainda sim fazer uma bosta de projeto totalmente inútil. Bom senso é a regra clássica, mas existem uns bons conceitos para estudar e melhorar seu intellisense mental.

Encapsulamento

Esse é um dos princípios na OOP que separam os bons programadores dos programadores inexperientes, ruins ou até mesmo dos palmeirenses (kkkk zuei). A regra é simples: Você deve colocar os métodos nas classes que contém a informação que eles processam. Exemplo maroto:

Em muitas linguagens visuais orientadas a objetos (COF COF DELPHI POR EX COF) cada elemento na tela é um objeto de uma classe distinta. Botões, por exemplo, tem um método responsável pelos cliques que o usuário certamente fará compulsivamente nesses botões. A idéia seria que dentro desse método, você fizesse chamadas para outros objetos que realizam as ações necessárias. Um botão “zipar” por exemplo seria responsável apenas por chamar o(s) objeto(s) que controlam um arquivo zip.

encasulamento kkk nadav

~encasulamento rs nadav~

Mas é claro que muitos programadores ignoram essas boas práticas “totalmente desnecessárias” e vivem na Programação Orientada a Botão, que significa enfiar sorrateiramente toda a lógica e algoritmos de zipar o arquivo dentro do método do botão. Se você entendeu o motivo pelo qual isso é ruim, parabéns, você pode começar a usar seu sabre de luz no próximo artigo. Do contrário, apenas continue lendo que eventualmente o dharma iluminará sua consciência.

Colocar um algoritmo de compressão dentro de um método de um botão não faz o mínimo sentido porque não é a responsabilidade do botão. A única coisa que o botão deve fazer é iniciar uma ação, não ser responsável por como essa ação é executada. Pense no princípio do reúso: se você separar o botão da ação que ele executa, você poderá reutilizar aquela ação em outros contextos. Poderá não ter apenas um botão que zipa coisas. Você poderia por exemplo criar um serviço de backup automático que zipa e envia por email sem intervenção humana.

O encapsulamento é agrupar os dados e métodos por suas responsabilidades.

Interfaces

Uma interface é o conjunto de métodos que você pode executar em um determinado objeto. Se você quiser aprender melhor o termo ou simplesmente impressionar seus amigos, olha só as frases nas quais você poderia encaixar a palavra:

  • “A interface do objeto X é muito confusa, os métodos não fazem sentido.”
  • “Projetamos a interface desse objeto para ter apenas três métodos: abrir, fechar e salvar.”
  • “Melhor usar uma interface parecida com o objeto Y, assim os programadores que já conhecem tal classe se sentirão em casa.”

A interface é o que vai definir se quem lê o seu código fonte vai te achar um trouxa ou um cara bacana. É por ela que as pessoas (incluindo você) vão reutilizar seu código, é a interface que será documentada, é ela que define se o fio vermelho ou o fio azul serão cortados e por aí vai.

mixmax

Encapsulamento e projeto de interface andam juntinhos e tem tudo a ver com definir bem as responsabilidades das classes de objetos. Dicas picantes:

  • Evite classes com mais de uma responsabilidade (“minha classe conecta ao banco, trata HTML e xinga muito no twitter”).
  • Não faça métodos canivete suíço (“esse método que tem 26 parâmetros faz qualquer coisa, os valores padrão são…”).
  • Cuidado com as dependências escrotas (“O objeto que filtra HTML depende da conexão do banco de dados porque tem um método de limpar strings mó legal por lá”).

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

  • http://twitter.com/weslly Weslly

    Não uso interfaces, coisa de gente gostosa e sarada falo mesmo to nei ai

    • http://gaigalas.net Alexandre Gaigalas

      Todo mundo que programa OOP usa interfaces! Contudo, não é obrigatória uma declaração formal explícita dela (interface blabla {}).

  • Eduardo Marcate

    Tem gente que confunde interface de OOP com a “interface de usuário” (os botõezinhos), todo mundo que programa OO usa interface, senão simplesmente nada conversaria, é necessário isso, é implícito isso.

    Quem usa VB e Delphi costuma chamar a programação de orientada a eventos, o que na verdade é orientação a botões, mas com um nome mais bonito (afinal, não tem só botões, tem aqueles controles deslizantes “superlegais” e caixas de seleção…)

    • http://chico.net.br Francisco de Souza Junior

      Mas é mais por causa dos maus programadores que pela ferramenta em si. Pelo menos com Delphi. Delphi é orientado a objetos, o pessoal é que não sabe programar… Agora VB não é OO mesmo. VB tem um paradigma de programação profundamente Alexandre, ou seja, medonho…

      • Eduardo Marcate

        Sim… confesso que quando “programava” em Delphi eu até sabia OO, mas não usava (eu não programava quase nada, era só colocar botões)… já em VB tenho pouca exp. mas acho que OOP não rola, pelo menos não sem muito esforço.

        Só aprendi VB para fazer macros no MS Office, mas por sorte já esqueci tudo isso.

        • http://chico.net.br Bullshico

          Pois é. Mesmo caso comigo no Delphi. hehe. Mas era mais por inexperiência mesmo. Pelo que sei (posso estar enganado), VB não é OO… A única forma de fazer algo parecido com OO nele é através de ActiveX…. Uma coisa um tanto que esquisita! :P

    • Kah Life

      Comentarios ridiculos, é uma pena um frequentador de tal ambiente (Eduardo Marcate) não saber nada, absolutamente nada sobre Delphi…

  • http://pvrehaavok.wordpress.com Mendel

    Ex-programador VB rindo muito dos comentários. :D

  • http://pvrehaavok.wordpress.com Mendel

    P.S.: VB <= 6 tem um tipo de OOP bizarro. É como se fosse programação estruturada orientada a encapsulamento (e botões). Nada de polimorfismo, nada de herança, nada disso que faz a OOP brilhar.

  • MayogaX

    Quando me ensinaram a programar (em 2007) me ensinaram dessa maneira… eu sempre achei estranho e então descobri que estava errado (professores ridículos!)

    O problema é que quando vamos ensinar programação sempre tem o que quer ensinar dessa maneira (orientada a botão) o que enfia glacê (quero saber o que o @Alganet vai colocar no lugar dessa palavra que eu usei… sera que vai ser “pão docê”?)na cabeça dos iniciastes.

    Nunca vi um programador Delphi fazer OOP de verdade… sério ‘-’

    • rafa.spimenta

      Voce nunca deve ter visto (provavelmente) pq nao trabalha numa empresa descente que desenvolve seus sistemas em Delphi ou entao nao tem contato com desenvolvedores de verdade.

      Nao sou muito de comentar, mas é lastimável ver o nível dos cometários das pessoas aqui, dizerem q Delphi é orientado a botões… São pessoas sem embasamento algum, que não conhecem as tecnologias DBX, VCL, datasnap e etc do Delphi, meros pseudos-desenvolvedores.
      sabe o verme do cachorro do dono?
      vcs sao a lumbriga desse verme.

      • DelphiCarambola

        “Nunca vi um programador Delphi fazer OOP de verdade… sério ‘-’ ”

        Desculpa, mas você programa em que MayogaX?

        Google não é dicionario MayogaX, ok?!

      • Anônimo

        Na verdade ninguém aqui disse que o Delphi é orientado a botões, pelo contrário (tanto eu quanto o Francisco dissemos justamente o contrário). Apenas foi dito que é comum desenvolvedores Delphi seguirem essa cultura, da mesma forma que eu posso dizer que desenvolvedores PHP tendem a ser gambiarrentos (embora nem todos sejam).

      • Anônimo

        Ah, e é melhor o senhor parar de fazer vários comentários com o mesmo IP. Estamos de olho.

        • Kah Life

          Não é a mesma pessoa senhor alganet

          • Anônimo

            OK, só esteja ciente da nossa saborosa política de moderação de comentários: http://pla.net.br/politica-de-comentarios/

          • Kah Life

            Empresas, faculdades, lan houses e etc compartilham o mesmo ip na internet… estamos aqui rindo mto desse povo que acha que sabe alguma coisa kkkkk

            forte abraço alganet

          • http://twitter.com/Bullshico Francisco de Souza Junior

            Nós também. :)

          • rafa.spimenta

            Eu vi mais de um comentário maldoso sobre o Delphi, em expecial o da MayogaX falando sobre os desenvolvedores expecificamente.
            Desenvolvedor ruim existe e independe da linguagem.

            Sobre artigo, não era exatamente o que estava procurando sobre interface e abstract class, mas achei muito descontraída a sua forma de tratar o assunto, de fácil aprendizado para iniciantes.

            Obrigado e parabens pelo blog.

          • Thiago_Rodrigo

            Eu já sou contra o que disse. O artigo clareou as ideias aki, fez eu tirar as dúvidas que queria..Continue pesquisando meu caro

            Delphi é Delphi…A tecnologia .NET ta aí facilitando a vida do programador.