Desenvolvimento - Sistemas

Programação Orientada a Objetos

O objetivo desse artigo é para desenvolvedores que desconhecem programação orientada a objeto, onde apresento as características básicas de programação orientada a objeto e espero dar o ponta pé inicial para o leito no aprofundamento desse assunto.

por Renato Mattos



O objetivo desse artigo é para desenvolvedores que desconhecem programação orientada a objeto, apresento as características básicas de programação orientada a objeto e espero dar o ponta pé inicial para o leito no aprofundamento desse assunto. Programação orientada a objeto implementa o conceito de: Abstração, classe, objeto, encapsulamento, herança e polimorfismo.

A orientação a objetos apesar de estar fortemente presente hoje nas linguagens de programação é um conceito antigo na computação, onde surgiu na área acadêmica.

A POO (Programação Orientada a Objetos) e a POE (Programação Orientada a Eventos) são facilmente confundidas, mas lembre-se a POO contém a POE, mas a POE não contém a POO, um objeto pode existir mesmo que não exista nenhum evento associado a ele, mas um evento não pode existir se não houver um objeto a ele associado.

ABSTRAÇÃO

Quando surgiram os primeiros computadores, a preocupação dos programadores era em busca da maior eficiência com o pouco uso de memória devido às limitações do hardware da época. Os programas consistiam em um único bloco, pois a divisão em vários blocos consumia mais recursos. Com a evolução do hardware a preocupação é na eficiência do desenvolvimento, isto é o tempo de trabalho dos programadores.

Para otimizar o tempo de desenvolvimento foi elaborado varias técnicas e metodologias, onde em geral é muito usado a estratégia de "dividir para conquistar",ou seja, implica em resolver um grande problema dividindo-o em vários problemas menores. Esse método aumenta a pontecialidade do reuso de código. Essa técnica é realizada por meio de modularização, o que além de resolver problemas complexos facilita o entendimento dos programas e viabiliza o reuso de códigos.

Assim entra a abstração o que é um conceito fundamental para conseguir uma boa modularização. A abstração é fundamental para o raciocínio e resolução de problemas, devemos nos importar com os aspectos relevantes do problema em questão. Em programas bem modularizados, cada modulo representa uma abstração existente no contexto do problema.Essa técnica é empregada em sua forma mais simples por funções e procedimentos parametrizados, criando funções genéricas onde resolvem um subproblema.

Poderíamos ficar falando só sobre abstração de dados, o que considero o mais importante para se construir programa bem modularizados e conseqüentemente orientados a objetos. O aspecto mais importante é como dado um problema criar sua abstração, ou seja, quais aspectos são relevantes e como representá-los. Conhecer as técnicas para implementar uma abstração é menos relevante, pois não garante a construção de um bom aplicativo.

O.O claro que o leitor já deve ter escutado esse termo e para muito pode ser assustador e complexo, no entanto não é, a aplicação da técnica não é complexo e atualmente traz muitas vantagens para o desenvolvimento e esse conceito é o utilizado nas novas linguagens de programação.Onde temos o JAVA e .NET totalmente orientados a objetos. E já temos bancos de dados também O.O , onde para mim será a nova arquitetura usada num futuro próximo.

Então para os desenvolvedores manterem-se atualizados devem regaçar as mangas, respirar fundo e cair de cabeça neste assunto. Espero que este artigo seja o pontapé inicial para muitos em programação orientada a objetos.

OBJETO

Um objeto é tudo aquilo que existe.Poderia ser um cliente, um carro, um relógio. Em termo computacional um objeto é a representação de algo que existe. Você deve abstrair um "objeto" real para representá-lo computacionalmente, como, por exemplo, construir o objeto carro.

Os objetos são incrivelmente úteis, pois transformam a engenharia de software em algo semelhante a blocos de concretos para construção. Assim quem utiliza não precisa entender como o bloco foi construído e isso se chama encapsulamento.

Para entender melhor o que seria um objeto vamos usar como exemplo um rádio. Existem várias coisas que você pode fazer com esse objeto, como: ligar ou desligar, escutar o som, aumentar o volume, escolher uma estação. E você não precisa entender como tudo funciona para poder executar essas atividades.

Na engenharia de software os objetos funcionam basicamente da mesma maneira. Uma vez que tenha um objeto, você pode usar, pedir que ele faça coisas sem ter que entender como seus detalhes internos estão implementados.

Em geral os objetos possuem as seguintes características:

  • Identidade
  • Estado
  • Comportamento

ENCAPSULAMENTO

O conceito básico por trás da orientação a objeto é o encapsulamento.O que é muito simples de entender. A todo o momento estamos trabalhando com "algo" encapsulado. Como por exemplo, o uso do componente Common Dialog, usamos as propriedades e métodos desse componente, mas não vemos como esta implementado. O uso de dll, ocx, API sempre utilizamos e não sabemos como esta implementada, ou seja, o código esta encapsulado.

MÉTODOS E PROPRIEDADES

Você utiliza os objetos através dos seus métodos e propriedades.Os métodos são algo que você pede para o objeto fazer como: aumentar o som do Rádio ou criar um novo cliente. As propriedades descrevem as características do objeto.Como por exemplo: para um objeto pessoa o nome, endereço, telefone seriam as propriedades. E o que você pode fazer com essa pessoa seria um método.

VISIBILIDADE

Algumas partes do seu objeto serão privadas, enquanto outras serão publicas. Os métodos e propriedades publicas serão a interface do seu objeto com o usuário. É o que você espera que o desenvolvedor utilize do seu objeto.

CLASSE

Na construção de software é usado o termo CLASSE, o que na verdade seria o objeto abstrato construído computacionalmente.Quando o aplicativo é executado você vai utilizar essa classe dando assim "vida" ao objeto. Você constrói a classe onde fica seu código e vai fazer uso dessa classe declarando uma variável dessa classe que quando executado o programa a variável será uma instancia dessa classe onde chamamos de objeto. Em geral "criamos classes" e "instanciamos objetos". A criação de uma classe é feita em tempo de projeto, quando você esta codificando o seu software, o que envolve a escrita do código fonte. O objeto é criado em tempo de execução, quando é feita uma instancia da classe é criado um objeto. A classe é como se fosse um molde, você constrói o molde e depois utiliza para fazer diversos objetos.

HERANÇA

A herança é usada para criar objetos que tem "tudo que outro objeto tinha, mas também possui alguns detalhes próprios". A herança nos permite pegar uma classe e utilizar ou alterar suas propriedades e métodos incluindo nossas propriedades, métodos.

Um exemplo seria, pegamos uma classe Pessoa, onde possui como propriedades: nome, endereço, telefone, cpf e etc. Incluímos essa classe pessoa na nossa classe Funcionário, dessa forma aproveitamos todas as propriedades de pessoa e incluímos as propriedades especificas de funcionário, como: data de admissão, cargo, salário e etc.

POLIMORFISMO

Conceito mais difícil de ser compreendido, no entanto não é nada complicado entendê-lo. Significa que um objeto pode ser tratado como se fosse um tipo diferente de objeto, desde que seja com bom senso.Isso esta muito relacionado com o conceito de herança. Podemos por exemplo tratar o objeto Funcionário como sendo o objeto Pessoa, pois o objeto Funcionário herda todos as propriedades e métodos do objeto pessoa. O contrário não pode ser feito, pois o objeto Funcionário possui características que o objeto pessoa não tem.

Dessa forma quando se ouve falar de polimorfismo se trata de que um objeto pode se comportar como se fosse outro objeto.

Renato Mattos

Renato Mattos - Diretor de Desenvolvimento Foco Sistemas.