Porque Programação Orientada a Objetos?
A forma de escrever código vem evoluindo há décadas para resolver muitos dos problemas apresentados no capítulo anterior. Vários paradigmas de programação têm sido desenvolvidos para melhorar a forma como escrevemos código, visando principalmente tornar o código mais claro, organizado, fácil de manter e menos suscetível a erros (bugs).
Até a década de 60 era muito comum o desenvolvimento de programas utilizando o paradigma de Programação não Estruturada, que resultava em código difícil de entender e manter. Por estes motivos, um código escrito usando tal paradigma é chamado pejorativamente de código espaguete, por ser confuso e não ter uma sequência clara. Muitos dos códigos escrito seguindo este paradigma utilizavam linguagens como Assembly que, apesar de serem legíveis para humanos, não são tão legíveis quanto as linguagens atuais.
Outras formas de desenvolver programas foram então surgindo. Uma evolução natural da Programação não Estruturada foi a Programação Estruturada. Este foi provavelmente o primeiro paradigma de programação que você aprendeu em lógica de programação. Um código estruturado permite visualizar mais facilmente o fluxo lógico de execução de um programa. Com isto, é possível facilmente criar algoritmos visualmente por meio de fluxogramas ou blocos.
|
O paradigma estruturado é também definido como "a atitude de escrever código com a intenção de se comunicar com humanos e não com máquinas" [Structured]. Ou seja, um dos grandes objetivos de um código é que ele seja legível para outros programadores. |
Apesar do paradigma estruturado ter tornado a programação de computadores bem mais simples e o código mais claro, ela ainda peca em muitos pontos como:
-
divisão do problema: um problema muitas vezes pode ser dividido em várias partes para tornar mais fácil sua resolução. A divisão de tais partes de modo que elas trabalhem em conjunto posteriormente deve ser feita de forma adequada.
-
representação da solução de um problema: uma dos grandes desafios em programação é entender o que um determinado código faz, principalmente se ele foi escrito por outra pessoa. A representação de um código de uma forma que seja próxima do problema que ele resolve torna mais fácil identificar se ele faz o que é esperado;
-
reutilização de código, para:
-
evitar ter que ficar reinventando a roda;
-
evitar re-escrever código que você já fez (princípio DRY: Don’t Repeat Yourself = Não Repita Você mesmo) e avitando a famigerada "Programação Copia-e-Cola" 😩 .
-
-
permitir proteger tanto dados quanto determinadas partes do código de serem usados de maneira indevida, o que poderia gerar bugs;
-
etc.
Um dos problemas da alteração indevida de dados surge quando são utilizadas variáveis globais, como no caso do pseudo código apresentado abaixo. O objetivo do algoritmo é solicitar números ao usuário até que ele digite zero para terminar. A cada número digitado o programa deve exibir a soma de todos os números digitados até então. Tente identificar o que está errado com este código.
total = 0
funcao soma_numeros(){
faça {
imprime("Digite um número: ");
leia(numero);
total = total + numero;
mostra_subtotal();
} enquanto (numero != 0);
}
funcao mostra_subtotal() {
imprime("O total calculado até agora é de ", total);
total = 0;
}
A Programação Procedural permite resolver alguns destes problemas (como o apresentado no algoritmo acima), mas nem sempre é simples, efetivo e adaptável a diferentes necessidades.
Assim, surgiu a Programação Orientada a Objetos (POO). Mas antes de explicar como a POO funciona e como ela resolve muitos dos problemas apresentados, vamos olhar o mundo ao nosso redor. Nós estamos cercados de objetos para todos os lados, como prédios, carros, celulares, TVs e livros. Todos estes objetos têm suas características e funcionalidades, como exemplificado na tabela a seguir:
Objeto | Características | Funcionalidades |
---|---|---|
Carro |
Cor: Azul, Ano Fabricação: 2012, Revestimento dos Bancos: couro |
Acelerar, Frenar, Limpar parabrisas, Acender faróis |
TV |
Tamanho: 42", Tela: LCD, Classificação Energética: A |
Ligar/Desligar, Trocar canais, Acionar Timer, Exibir guia de programação |
|
As características de um objeto são qualidades (adjetivos) e as funcionalidades são ações (verbos), assim é fácil distinguí-las. |
Como atualmente é possível criar programas para controlar objetos como carros, TVs, relógios, balanças, porteiros eletrônicos, lâmpadas, portas e muito mais, a POO aproxima a representação de tais objetos em um programa com os mesmo objetos no mundo real.
Mas não se assuste, POO não pode ser usada apenas para tarefas complexas como programação de carros inteligentes. Vamos usar um exemplo mais comum: as lojas virtuais na Internet. Tais lojas possuem sites, que nada mais são do que aplicações (programas) para a Internet. As páginas que permitem busca e exibição de produtos nestes sites são programas normalmente desenvolvidos utilizando-se o pagadigma de orientação a objetos. Para produtos serem exibidos no site, eles precisam ser representados no código escrito pelo programador. Tais produtos são objetos que possuem suas características e funcionalidades reais que devem ser representadas ao desenvolver uma loja virtual.
Na POO, objetos podem ser pessoas, animais e qualquer coisa que precise ser representada para resolver um problema. Por exemplo, na loja virtual, para realização de uma compra, é preciso identificar o cliente. Este é uma pessoa que precisa ter algumas características registradas como nome, sexo, data de nascimento, email e endereço. As funcionalidades desta pessoa podem ser alterar senha e adicionar endereço.
Referências
-
[Spaguetti] Conway, Richard (1978). A primer on disciplined programming using PL/I, PL/CS, and PL/CT. Winthrop Publishers. ISBN 0-87626-712-6
-
[Structured] Cobb, Gary W. (1978). "A measurement of structure for unstructured programming languages". ACM SIGSOFT Software Engineering Notes. 3 (5): 140–147. ISSN 0163-5948. doi:10.1145/953579.811114.
-
[PP] Hunt, Andrew, and David Thomas. O Programador Pragmático: de aprendiz a mestre. Bookman Editora, 2009.