domingo, 21 de novembro de 2010

O paradigma de Orientação à Objetos

A algum tempo que penso em escrever algo sobre o paradigma de Orientação à Objetos. A maior motivação foi que na faculdade a matéria de Orientação à Objetos usa Java como linguagem de referência. Eu particularmente não gosto de Java e com isso sempre há debates calorosos entre eu e o professor das aulas de quinta-feira. E como de costume eu sempre tento persuadir outros alunos a estudar Python em vez de Java. Nesses debates consegui convencer a Talita, uma amiga da mesma classe, que Python é muito mais fácil e divertido.

Lembrei que recentemente li um artigo chamado The Object Oriented Paradigm do Sinan Si Alhir e tive que fazer uma resenha sobre ele. A idéia é escrever uma série de artigos sobre programação orientada a objetos, e esse será o passo inicial.

Orientação à objetos é um assunto muito discutido na área de desenvolvimento. Pode ser considerado como o ponto de inflexão na evolução das linguagens de programação. A partir de seus principio as linguagens seguiram novos rumos e passaram a oferecer mais recursos aos desenvolvedores.

Mas como poucos sabem, o conceito de Orientação à Objetos transcende a tecnologia e nos remete a seus criadores, algumas centenas de anos na Grécia antes de Cristo. Alguns dos precursores do pensamento pensamento ocidental como Sócrates, Platão e Aristóteles definiram alguns conceitos da base do paradigma de OO como Abstração, Encapsulamento, Herança e Polimorfismo quando idealizaram a Teoria das Formas.

Para a resolução de um problema (de um modo efetivo), podemos seguir uma "guia de referência" quanto aos passos como entender ou conceitualizar o problema e implementar ou realizar o problema. Entretanto apesar de parecer óbvio o fluxo, agir de acordo com o pressuposto é mais complicado.

Teoria das Formas

Platão foi quem definiu o pensamento inicial auxiliado por Sócrates. Aristóteles, teve Platão como seu tutor (filosófico) e posteriormente junto com seu mestre evoluiu a teoria.
É muito comum atribuir os trabalhos e estudos à períodos que os filósofos vivem, e no primeiro período de Platão, ele trabalhou junto com Sócrates no inicio da obra. Suas motivações estavam a cerca do entendimento da natureza do conhecimento, seguindo uma premissa que algo só poder ser entendido se puder ser definido.

Segundo Sócrates, o método "Socrático" baseia-se em atentar aos significados e definições. O método Socrático consiste em uma dialeto entre o mestre e o aprendiz, e o mestre conduz o aprendiz a reconhecer as verdades relacionadas ao tema de forma progressiva. Isto é, conforme vai adquirindo o conhecimento fundamental sobre o assunto, vai questionando as premissas até chegar as conclusões que levam à verdade. Sócrates aponta como prova de sucesso da Teoria das Formas a aplicação da teoria de Pitágoras, que o quadrado da hipotenusa é igual à soma do quadrado dos catetos. Com isso Sócrates e Platão concluem que o aprendizado está diretamente relacionado com a coleção de idéias (ou Formas) que o aprendiz detém.

A evolução dessa idéia é apontada como a formalização da teoria e acontece no segundo período de Platão. Nessa fase Platão sugere que as Formas ou Idéias são o centro do conhecimento e conhecer uma forma significa entender sua natureza. As Formas são propriedades ou atributos abstratos das coisas em um mundo real. Seguindo o método Socrático de aprendizado, o entendimento ou a propriedade da coleção de atributos, garantem o conhecimento sobre as coisas.

Aristóteles inicia sua contribuição no terceiro período de Platão. Sua contribuição foi a mais significativa quanto à definição da teoria para os propósitos que usamos hoje. Nos dois primeiros períodos de Platão, a teoria foi tratada mais a fundo no âmbito filosófico.

Nesse ponto, Platão redefiniu a o método do dialeto para um "procedimento de coleção e divisão". A coleção entende-se como identificação de uma Forma a partir de um número de Formas específicos e essa forma é dividida na seleção de diferenças em formas mais específicas. Esse pensamento conduz para a proposta que se há uma coisa (objeto) com características (atributos) ele descende de outra coisa e também de seus atributos.

Essas idéias foram trabalhadas por Aristóteles e amplamente aplicadas na Matemática e hoje fazem parte dos pilares de áreas como Matemática e Física como Cálculo e Geometria.

A teoria e o paradigma de Orientação à Objetos

Ao tentar usar a teoria das formas na solução de problemas devemos levar em conta os 3 conceitos fundamentais que são:
Coisas: São os objetos ou entidades que detém as coleções de atributos ou características e comportamentos (o conhecimento).
Relacionamento: Características compartilhadas pelas entidades. As entidades podem ter atributos ou comportamentos comum às entidade relacionadas.
Ocorrências: Caracterísitcas comportamentais que podem ser compartilhadas entre as entidades.

O paradigma de OO foca nas características estruturais e comportamentais das entidades. O "objeto" é o centro da idéia e tudo gira em torno do objeto. Os pricipios de OO são:

Abstração: Formula a representação das entidades (objetos).
Encapsulamento: Empacotamento das características das entidades (ocultar os detalhes)
Herança: Relacionar e reutilizar as representações.
Polimorfismo: Definir variações de representação de uma representação já existente.

Classes e objetos

Objetos por si só já são um encapsulamento das características estruturais de um entidade conhecidos como atributos e comportamentos (operações). não é possível utilizarmos diretamente um objeto, para isso precisamos acessa-lo a partir de uma técnica que abstraia suas características de atributos e comportamentais, como uma Classe.

As Classes servem como descritores dos objetos com implementações comuns aos objetos. Já os Tipos são versões mais avançadas das classes que podem ser usados como classes comuns ou como um interface para a classe com recursos mais avançados.

Classes e objetos podem ter atributos e comportamentos comuns á ambos. Essa interação é chamada de associação ou link. Em geral o relacionamento entre duas classes, acontece no modo que uma classe descenda da outra. Isto é uma classe B descende da classe A, sendo a classe A possui os as referências genéricas e a classe B herda essas referências, e ainda tem referências específicas. À essa ligação chama-se de link.

Conclusão

O paradigma de Orientação à Objetos não se aplica única e exclusivamente à tecnologia de desenvolvimento de sistemas. Suas definições e princípios podem ser aplicados em diversas áreas como a que se propôs por definição o de ensino (estudo do conhecimento). Mas vale lembrar que o conhecimento da base deve ser bem sólido para seu uso e aplicação.

2 comentários:

Unknown disse...

Oh que chique fui citada..rsrs..e de fato cada dia me convenço mais que Python é muito mais fácil que Java, ainda mais tendo que fazer prova, mostrando o tanto que eu sei (ou não sei) em java. Gostei do seu post Mauro mto esclarecedor, da para dar uma clareada, pena que poucos saibam disso ou tem preguiça de ler ;)
bjsss

Mauro Baraldi disse...

Diga lá Talita.

Que bom que gostou, obrigado =)
Estou me programando para escrever alguns artigos sobre Python e OO. te aviso quando publicar.

Bjos.