Desenvolvimento - Office

O que é Programação Orientada a Objetos (OO Programming - Object Oriented Programming)?

Este artigo tem por objetivo esclarecer algumas dúvidas que ficaram no ar em relação ao artigo anterior do autor.

por Robert Martim



Este artigo tem por objetivo esclarecer algumas dúvidas que ficaram no ar em relação ao artigo publicado em http://www.linhadecodigo.com.br...asp?id_ac=848&pag=1

O objetivo do artigo original era apresentar um dos exemplos contidos no curso o qual apresenta uma encapsulação dos objeto dos objetos do Outlook. O objetivo não era introduzir conceitos como abstrato, herança, parent e child, etc.

Com o objetivo de esclarecer dúvidas, este artigo é um excerto da introdução original do curso. Ele apenas apresenta os conceitos e não se atém a escrita de código algum.

Para qualquer pessoa que tenha feito uma programação básica em VBA, de uma forma ou outra, esta pessoa certamente utilizou um dos objetos disponíveis na biblioteca do Office/Excel ou outro componente qualquer através de uma referência.

Programar com VBA requer manipulação dos mais variados objetos, suas propriedades e métodos para obter o resultado desejado. Contudo, muitos usuários utilizam tais objetos, mas não sabem de onde as propriedades e métodos vêm.

Pegue, por exemplo, o objeto Worksheet:

Figura 1

A figura acima mostra o objeto Worksheet sendo dimensionado. Um objeto é facilmente reconhecido pelo pequeno símbolo logo ao lado de seu nome. Propriedades e métodos também possuem um símbolo específico o qual veremos mais adiante.

Ao dimensionar o objeto todas as propriedades e métodos, públicos, são expostos ao programador quando o “ponto” é inserido após o objeto:

Figura 2

Ao programarmos objetos o que efetivamente fazemos é disponibilizar ferramentas reutilizáveis. Imagine, por exemplo, ter que criar uma rotina para recalcular uma planilha (worksheet)? O mais fácil é termos o objeto worksheet o qual pode ser instanciado e apontado para a classe que contém todo o código que faz o que desejamos. Feito isso, basta executar o método do objeto sem necessidade de reinventá-lo toda vez que precisamos dele.

Abaixo, quebro em subtópicos os pontos sobre o que é e como é feita tal programação.

1.1. A Classe – o abstrato de tudo

A classe nada mais é do que um abstrato. E o que e um abstrato? Abstrato é aquilo que opera fora do âmbito concreto; em outras palavras, é aquilo que possui um alto grau de generalização, para colocar de uma forma bem dicionarística, conforme encontrado no dicionário Houaiss.

Se isso parece estranho, crie uma imagem de uma árvore em sua cabeça. Criou? Esta árvore é o abstrato. Ela somente existe na sua cabeça. Ninguém pode tocá-la, nem você. O máximo que você consegue é abstraí-la em sua mente e mais nada. A classe é isso, um abstrato de um objeto qualquer. Um objeto que não pode ser tocado.

A figura abaixo representa a nossa classe:

Figura 3

1.2. Objetos (object)

E os objetos? O objeto é aquela árvore plantada em frente a sua casa, no Jardim Botânico, no parque, ou as árvores da Amazônia. Os objetos são aqueles que você pode tocar e modificar suas propriedades e métodos.

Por exemplo, a Classe árvore pode indicar qualquer tipo de árvore, pois é um abstrato. Quando pedi que você visualizasse uma árvore, qual árvore você visualizou? Eu visualizei uma jaqueira. Talvez você tenha visualizado um Oiti, ou mangueira, ou até mesmo a jaqueira. O importante é você entender que a Classe de árvore pode ser ter qualquer tipo de árvore existente na face da terra! Não obstante, o objeto árvore só pode ser a mangueira, ou a jaqueira, ou outra árvore qualquer. O objeto não pode ser todas as outras.

Para ligar o objeto árvore à classe árvore, temos o seguinte diagrama:

Figura 4

A Classe, o abstrato, é o inicio de tudo. Sem ela o objeto árvore não existe. Criado o abstrato, podemos então definir com qual árvore iremos trabalhar e como manipularemos as propriedades e métodos da árvore.

1.3. Coleções (Collections)

Coleção significa um conjunto do mesmo objeto. Pegue a primeira árvore e junte-a a um outro objeto igual (outra árvore igual) e você obtém duas árvores na coleção do objeto árvore.

Uma analogia simples é comparar com a plantação de coqueiros. O coqueiro é o um objeto árvore a plantação de coqueiros representa a coleção de coqueiros (árvores iguais).

Observe a figura:

Figura 5

É importante observar que embora a coleção de coqueiros seja igual no âmbito abstrato, cada coqueiro é diferente no âmbito objeto. Por exemplo, cada coqueiro terá uma altura diferente, um peso diferente, idade diferente, e assim por diante. Cada um destes valores refere-se a propriedade do coqueiro. Se você já programou alguma vez em VBA, você já deve ter visto a propriedade Height do objeto Userform. A propriedade Height define a altura do formulário e cada formulário possui uma altura diferente. Discutirei propriedade e métodos mais adiante, mas você já pode ir pensando no que isso significa.

1.4. Pai e Filhos (Parent e Child)

A classe Child é um abstrato assim como a classe Parent. A diferença é que a classe Child possui uma classe acima dela da qual ela pode herdar as propriedades e métodos da classe que é seu Parent.

Volte novamente ao coqueiro. O coco é um objeto que pertence ao coqueiro. Se o coqueiro é quem dá coco e não o contrário; então, o coqueiro é pai (Parent) e o coco é o filho (Child). O filho também possuirá suas propriedades e métodos distintos do pai, mas também herdará características do pai, isto é, o coco herdará propriedades e métodos do pai (assim como os filhos herdam traços dos pais, mas possuem suas características próprias – suas propriedades e métodos próprios).

1.5. Propriedades, métodos e eventos

Propriedades

Propriedades são as características do objeto. Por exemplo, a altura (Height[1]) do coqueiro é uma propriedade, a largura (Width) é outra assim como o nome (Name) que identifica o coqueiro seria uma terceira propriedade.

Método

Um exemplo de método é o crescimento. Por exemplo, poderíamos criar uma função e chamá-la de Grow. A função receberia um argumento em centímetros que instruiria o objeto a crescer tantos centímetros.

Evento

Um evento é aquilo que ocorre com o objeto durante sua vida. Por exemplo, se o coqueiro é cortado, o corte é um evento. Se o coqueiro morre, a morte do coqueiro é um evento. Quando um evento ocorre, um outro procedimento pode ser executado se assim for desejado. Por exemplo, se o coqueiro morre, o evento morte pode iniciar uma rotina que chama os outros coqueiros para o velório.

Para colocar no contexto do Excel, quando clicamos com o botão direito um evento ocorre (BerforeRightClick). Nós temos a opção de capturar o evento e fazer alguma coisa ou simplesmente ignorá-lo, mas o evento ocorreu e isso é o que importa. Assim como o evento da morte do coqueiro. Se haverá velório ou não, não importa. O que interessa é que ele morreu, isto é, o evento ocorreu. O que você faz com ele será decisão sua.

1.6. Encapsulação (Encapsulation)

Encapsulação é o processo de colocar algo dentro de uma cápsula, isto é, encapsulação é o processo de encapsular algo. O nosso coqueiro, o objeto coqueiro, mantém suas partes, isto é suas propriedades e métodos, dentro de uma cápsula. As partes do objeto serão visíveis ou não e tudo dependerá do escopo de cada parte do objeto. Por exemplo, o objeto coco possui a propriedade água, mas esta propriedade esta escondida dentro do coco. Por outro lado, a propriedade casca está visível e pode ser manipulada pelo usuário.

Encapsular, basicamente, quer dizer “esconder” algo no contexto de programação orientada por objetos. Para expor ou esconder as propriedades e métodos de um objeto devemos utilizar as palavras-chave Private ou Public. Propriedade e métodos não definidos explicitamente como Private em uma classe são tratadas como públicas.

1.7. Polimorfismo

Polimorfismo quer dizer que seu código deve ser capaz de assumir o papel para ele definido em qualquer situação sem ambigüidade.

Por exemplo, se você deseja adicionar um coqueiro a coleção de coqueiros, você não deve criar um código o qual resolve para o método como segue:

coqueiros.coqueiro.Adicionar

O motivo para evitar este tipo de nomenclatura é que, embora possa ser fácil para você compreender, todos os programadores sabem que para adicionar algo você usa o método Add. Portanto, o método Adicionar somente terá significado para você. Se você chamar o método de Add todos saberão o que ele teoricamente deve fazer, mas poucos saberão o que o método Adicionar faz.

Da mesma forma, ao definir a altura do seu coqueiro, você não quererá uma propriedade chamada altura. O correto é nomear como Height, pois todos sabem o que é Height de um objeto (mesmo que o método de implementação seja diferente), mas é improvável que alguém, além de você, saiba o que é a propriedade altura.

1.8. Reutilização

Talvez a parte mais bela da criação de objetos seja a reutilização. Você já notou quantas vezes você faz referência ao objeto Range no Excel? Ou ao objeto Application? Ou ainda aos objetos Worksheet e Workbook?

Pois bem, ao criar o seu objeto a intenção é exatamente esta: poder reutilizar o objeto em outros locais dentro do seu projeto ou até mesmo em outros projetos. A reutilização é tão importante que existem empresas especializadas na criação destes componentes.

Conclusão

Este artigo reproduz a introdução aos conceitos de OOP, mas não apresenta nenhum exemplo de código para utilização no Excel. Para um exemplo de encapsulação e aplicação de um método veja o artigo http://www.linhadecodigo.com.br...asp?id_ac=848&pag=1

[1] Para quem conhece alguns de meus trabalhos, boa parte procuro utilizar o texto em português. Contudo, criação de classes requer atenção, pois existem milhares de propriedade e métodos os quais são identificados através do nome. Por exemplo, a propriedade Name refere-se ao nome do objeto e é internacionalmente reconhecida assim. Da mesma forma, o método Add é reconhecido como o método para adicionar algo a uma coleção. Assim sendo, todas as propriedades e métodos criados neste módulo serão em inglês. Você notará o benefício durante a implementação da classe.

Robert Martim

Robert Martim - Formado e Pós-Graduado em Finanças pela Universidade de Londres, Reino Unido. Diretor de TI da Faircourt Capital Limited (Reino Unido). Fornece suporte pro bono em TI à entidade de caridade Nigeriana NIDOE (Nigerians in Diaspora Organisation Europe) desde 2001. Colaborador ativo do fórum Excel Avançado do site www.juliobattisti.com.br, onde divide seu conhecimento e experiência com outros membros do espaço.
Autor do livro Excel e VBA na Modelagem Financeira: Uma abordagem prática.