Skip to content

Oculte seu código

Em muitos códigos de software que somos obrigados a dar manutenção, percebemos certa confusão nas classes no quesito manutenção, por exemplo, uma classe interfere na regra de outra classe e isso fica exposto ou uma classe deixa exposta sua principal regra de negócio dando possibilidade a um cliente (instrução que utiliza a classe) de modifica-la. O objetivo deste artigo é explicar o que significa ocultamento de código e também demonstrar as vantagens.

A empresa onde eu trabalho adquiriu recentemente o livro chamado CODE COMPLETE escrito por Steve McConnell. Então resolvi ler e apreciar a obra que parecia ter boas dicas para desenvolvimento de software.

Uma parte do livro me chamou a atenção sobre a importância do ocultamento do código. Abaixo irei esclarecer o que é ocultamento de código na ideia de McConnell e sua importância para um projeto de software.

Muitas vezes programamos classes, subsistemas ou pacotes sem pensar no seu conceito, o que deve ser interno e o que é externo aos clientes. O que precisamos saber é que outros objetos quando interage com a classe desenvolvida não necessita saber de todo o seu detalhe e muito menos de sua existência interna. O que o cliente precisa saber é apenas os eventos necessários para as chamadas para que o processo funcione corretamente.

A orientação a objeto tem tudo haver com ocultamento de código. Macoratti em um artigo diz: “O termo orientação a objetos significa organizar  o mundo real como uma coleção de objetos que incorporam estrutura de dados e um conjunto de operações que manipulam estes dados”.

No mundo real quando vamos falar de uma porta, por exemplo, estamos falando em termo de objeto e não de seu detalhe interno. O que sabemos da porta é o suficiente para sabermos sua utilidade em nossas vidas. Uma porta tem a função básica de: abrir, fechar e ser dispositivo de segurança para pessoas mal intencionadas. Mas e se as pessoas em vez de falar porta falam-se especificamente seu detalhe, por exemplo: Por favor, abra o produto desenvolvido que possuí os elementos carbono, oxigênio e hidrogênio, possui uma maçaneta, é utilizada para segurança e tem a cor amarela. Outras pessoas poderiam não interpretar muito bem o texto, por que nem todas as portas são feitas de madeiras, outras são feitas de ferro e pessoas como eu nem saberia dizer quais os elementos que compõe a madeira. Por isso, não é importante saber do que a porta é feita e qual o seu detalhe, apenas temos que saber que aquele objeto faz parte do grupo porta e tem suas funções de utilidade.

Imagina você utilizar uma classe, pacote ou componente onde os detalhes estão expostos? Isso com certeza dificultariam sua compreensão em relação o que será útil para saber e o que é apenas “coisa” do sistema. Pior ainda é ter uma classe grande e que é responsável por declarar regra de outras classes, o que deixa o código mais inchado e mal projetado.

Ocultar os detalhes de uma regra é importante e traz qualidade. McConnell informa que se em uma classe existir 30 métodos e desses vinte cinco (25) forem internos ao sistema, então deixe estes privados a classe. Existem portas feitas de madeira e outras feitas de ferro, não é necessário criar uma classe chamada “PortaDeMadeira” e outra “PortaDeFerro” e implementar cada classe separadamente, até por que existiria clone de código, pois em alguns aspectos as duas portas fazem as mesmas coisas.

McConnell também diz que abstração é a capacidade de empregar um conceito enquanto se ignora com segurança alguns de seus detalhes. Uma bola de futebol é uma abstração detalhada de um produto de couro e que possui uma câmera de ar internamente. A maior vantagem de utilizar abstração é que ela permite a você ignorar detalhes irrelevantes. O que pode ser feito no exemplo das classes porta de madeira e porta de ferro é utilizar abstração. Abstraia as informações genéricas em relação ao objeto porta e crie uma classe chamada “Porta” com seus detalhes em comum. As classes “PortaDeMadeira” e “PortaDeFerro” herdarão da classe “Porta”. Isso fará com que seja necessário detalhar apenas o que é especifico de cada classe, já que o que é comum estará na classe pai. Perceba que no desenvolvimento de software abstração e herança trabalham juntas. Isso é um belo exemplo de ocultação de código.

Lembre, oculte o maior numero possível de detalhe do sistema. No exemplo da porta tente abstrair em níveis de classes os detalhes genéricos da porta, por exemplo, abstraia as informações dos elementos que compõe a porta, em seguida a maçaneta, a cor e por ultimo a funcionalidade de segurança da casa. Veja que juntando todos esses níveis é formado um objeto porta e com isso podemos construir as funcionalidades básicas de abrir e fechar. Outro ponto positivo é que caso a maçaneta passe por manutenção, apenas a classe “Maçaneta” passará por manutenção, pois a classe “Porta” não implementa este detalhe, ela é apenas usuária.

Muitos softwares são construídos no nível dos elementos da porta: carbono, oxigênio e hidrogênio no mesmo local da classe mais especifica. Isso torna um sistema complexo e de difícil entendimento. Ocultar o código, utilizar abstração e herança fazem um software organizado e facilidade na hora da manutenção.

Pessoal, obrigado pela leitura e espero que tenham gostado. Duvidas ou discussões sobre o assunto envie um comentário.

Fontes:

Macoratti, http://www.macoratti.net/oo_conc2.htm

Wikipedia, http://pt.wikipedia.org/wiki/Orienta%C3%A7%C3%A3o_a_objetos

McConnell, Steve McConnel – Code Complete 2º edição 2005.

Published inQualidade de software

Be First to Comment

Deixe uma resposta

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *