por ANTONIO MENDES DA SILVA FILHO

Professor do DIN/UEM. Doutor em Ciência da Computação

 

Introdução à Programação Orientada a Objetos

 

Uma das principais características do ser humano quando deparado com um problema é buscar uma solução baseada nas soluções existentes de problemas similares. Entretanto, quando as soluções existentes não são suficientes, busca-se estender essas soluções a fim de solucionar um novo problema. Adicionalmente, o ser humano tem utilizado a abstração como forma de lidar com situações ou problemas de natureza complexa. Note que pode haver diferentes abstrações da mesma realidade, onde cada uma delas oferece uma visão da realidade e serve a propósitos específicos.

Dentro deste contexto, à medida que sistemas crescem, também cresce a complexidade e torna-se mais difícil satisfazer a um número cada vez maior de requisitos desses sistemas, muitas vezes conflitantes. Atualmente, observa-se que a abordagem orientada a objetos tem se mostrado mais adequada, comparativamente às demais, para ser empregada no desenvolvimento de sistemas de software complexos e de grande porte. Neste sentido, a programação orientada a objetos (POO) tem papel fundamental. A programação orientada a objetos foi desenvolvida devido às limitações encontradas nas abordagens anteriores de programação. Para entender o que POO faz, é preciso entender quais são estas limitações e como elas surgiram nas linguagens de programação tradicionais.

Pascal, C, Basic e Fortran são linguagens de programação procedimentais. Isto é, cada declaração na linguagem informa que o computador deve realizar alguma tarefa como, por exemplo, ler um dado de entrada, adicionar uma constante, dividir por algum número e exibir o resultado. Um programa em uma linguagem procedimental é visto como uma lista de instruções.

Vale ressaltar que para programas pequenos, nenhum princípio organizacional (ou paradigma) é necessário. O programador, simplesmente, cria uma lista de instruções e o computador as executa. Entretanto, à medida que os programas se tornam maiores, entender e tratar uma única lista de instruções fica mais difícil. Poucos programadores podem compreender um programa que possua mais de poucas centenas de instruções, a menos que o programa seja quebrado ou dividido em unidades menores, denominadas de funções. Por esta razão, a função foi adotada com uma forma de tornar os programas mais compreensíveis a seus criadores, i.e. os seres humanos. Vale salientar que o termo função é usado tanto na linguagem de programação C++ quanto C. Em outras linguagens, o mesmo conceito pode ser referido como uma subrotina, um subprograma ou um procedimento. Sabe-se que um programa é dividido em funções, e (idealmente, no mínimo) cada função tem uma proposta claramente definida, bem como uma interface bem definida com as outras funções do programa.

A idéia de dividir um programa em funções pode ser adicionalmente estendida através do agrupamento de várias funções em uma entidade maior, denominada módulo. Porém, o princípio é similar, ou seja, um grupo de componentes que executa tarefas específicas. Neste sentido, tem-se que dividir um programa em funções e módulos é um dos fundamentos da programação estruturada. Trata-se de uma disciplina de programação que tem sido utilizada na organização de programas. No entanto, à medida que os programas se tornam maiores e mais complexos, até mesmo a abordagem de programação estruturada começa a mostrar limitações.  Por exemplo, considere a situação em que muitas funções têm acesso a um conjunto de dados. Assim, a forma em que os dados são armazenados torna-se crítica. A organização dos dados não pode ser modificada sem que todas as funções que têm acesso  a eles também seja modificadas. Se novos dados são adicionados, então será necessário modificar todas as funções que têm acesso a esses dados para que elas também possam ter acesso aos novos dados. Tornar-se-á difícil achar tais funções e até mesmo mais difícil modificá-las corretamente.

Tais circunstâncias exigem uma forma de restringir o acesso ao dado, esconder ele de todas exceto algumas poucas funções críticas. Isto dará proteção aos dados, simplificará a manutenção bem como implicará em outros benefícios. Neste sentido, considera-se importante a introdução de programação orientada a objetos (POO). A idéia por trás das linguagens de programação orientadas a objetos, ou linguagens OO, é combinar em uma única entidade tanto os dados quanto as funções que operam sobre estes dados. Tal entidade é denominada objeto. As funções de um objeto, chamadas funções membro em C++, tipicamente, oferecem uma única forma de acesso a seus dados.

Assim, caso torne-se necessário ler dados em um objeto, então basta chamar a função membro desse objeto. Ela lerá os dados e retornará o valor a quem invocou a função. Perceba que os dados não podem ser acessados diretamente. Os dados são ocultados. Assim, os dados estão seguros quanto a alteração acidental. Dados e funções são ditos ser encapsulados em uma única entidade, denominada objeto. A encapsulação de dados e ocultação de dados são aspectos importantes na descrição de linguagens orientada a objetos. Além disso, se o programador precisar modificar o(s) dado(s) de um objeto, ele terá de saber exatamente quais funções interage com aquele objeto (i.e., funções membro). Outras funções não podem ter acesso ao(s) dado(s). Como resultado, obtém-se simplificação na escrita, bem como na depuração e manutenção do programa. Neste contexto, um programa C++, tipicamente, consiste de muitos objetos, os quais se comunicam entre si através da chamada de funções membro do(s) outro(s) objeto(s). Aqui, chamar a função membro de um objeto é referido como enviar uma mensagem para o objeto.

Diante do exposto acima, é fácil perceber que a programação orientada a objetos é uma abordagem de programação que serve de elo entre os problemas existentes e as soluções computacionais apresentadas no campo da programação. Cabe, entretanto, ressaltar que antes da POO havia um obstáculo conceitual para os programadores quando eles tentavam adaptar as entidades reais às restrições impostas pelas linguagens e técnicas de programação tradicionais. Numa situação real, o ser humano tende a raciocinar em termos dos objetos ou entidades reais.

Todavia, é importante lembrar que antes da POO, os programadores eram ensinados a raciocinar os problemas em termos de blocos de código ou procedimentos e da forma que esses atuavam sobre os dados. Observe que essas duas abordagens são distintas e constituem um problema se há necessidade de desenvolver um sistema complexo e/ou de grande porte.

Ainda, ao longo das últimas décadas, tem-se verificado um crescimento tanto na complexidade quanto no tamanho dos sistemas computacionais. Neste contexto, a POO apresenta-se como uma abordagem de programação que permite os programadores raciocinar e solucionar problemas em termos de objetos, os quais estão diretamente associados às entidades ou ‘coisas’ reais. Como resultado desse mapeamento natural, utilizando a POO, um programador pode concentrar-se nos objetos que compõem o sistema, ao invés de tentar vislumbrar o sistema como um conjunto de procedimentos e dados. Vale salientar que a POO é uma forma natural e lógica pela qual os seres humanos e, especificamente, os programadores raciocinam. Os benefícios resultantes de empregar a POO como abordagem de programação não se restringe a raciocinar e resolver problemas em termos de objetos ou entidades reais, mas também a reutilização de código. Além disso, conceitos adicionais como classes, encapsulamento, polimorfismo e herança são introduzidos.

Além da identificação de uma abordagem de desenvolvimento adequada à implementação de sistemas de software, há ainda a necessidade de selecionar uma linguagem de programação. Uma sugestão é utilizar a linguagem C++ desenvolvida nos Laboratórios da Bell por Bjarne Stroustrup. Outra alternativa seria a linguagem Java. Todavia, esse artigo teve o objetivo apenas de discutir apenas questões pertinentes ao paradigma de orientação a objetos.

Leitores interessados no tópico podem consultar: 
 

 
 

clique e acesse todos os artigos publicados...

http://www.espacoacademico.com.br - Copyright © 2001-2004 - Todos os direitos reservados