Por que eu devo ler este artigo:Esse artigo apresenta uma comparação entre o paradigma de programação estruturado e o orientado a objetos. Para isso, implementaremos um exemplo seguindo estes dois paradigmas e assim destacaremos as vantagens e facilidades que a Orientação a Objetos fornece ao desenvolvedor em termos de leitura, compreensão, manutenção e evolução do código.

Certamente, a programação estruturada é o primeiro paradigma que muitos desenvolvedores se deparam ao iniciar seus estudos. Tal paradigma leva a programas que são conhecidos por estruturarem as suas funcionalidades em sub-rotinas, geralmente levando à criação de sistemas caracterizados por conter grandes blocos de código-fonte ou sub-rotinas sem organização dos dados.

Por outro lado, a programação orientada a objetos sinaliza para uma maneira mais apropriada de realizar a correta divisão de um programa em conceitos (classes), permitindo que cada classe centralize em si todos os dados relativos ao conceito que ela representa, além de reunir todas as funcionalidades que pertencem a ela. Por exemplo, o conceito de pessoa origina a classe Pessoa, e esta contém atributos como nome, idade e CPF, além de todas as operações (métodos) que são realizadas acessando ou modificando o mesmo conceito.

Em muitas instituições de ensino ainda se começa a aprender programação com o estudo de linguagens que não são orientadas a objetos, ou pior, em muitas vezes se utilizam linguagens orientadas a objetos, mas os programas são criados da mesma forma que no paradigma estruturado.

A programação orientada a objetos é conhecida hoje por ser a sucessora do paradigma estruturado, porém não se deve descartar totalmente o conhecimento sobre esse antigo paradigma, pois ainda podemos chegar a situações onde deve-se dar manutenção a programas estruturados, ou ainda alguns determinados problemas de processamento em lote que podem ter uma melhor performance ao adotar o paradigma estruturado, uma vez que a quantidade de chamadas a métodos é reduzida.

De forma geral, os ganhos das linguagens de programação orientadas a objetos são concentrados na legibilidade do código, na facilidade de manutenção e expansão e na programação simplificada, como ocorre com a linguagem Java, que é interpretada, adicionando assim vantagens como ser independente de plataforma e ter uma sintaxe simples e legível, sem implicar negativamente na performance.

Além disso, a programação orientada a objetos é a escolha natural em qualquer projeto de desenvolvimento de software, onde deseja-se modelar as entidades do mundo real manipulando-se informações das mesmas e realizando operações sobre os dados, o que facilita a análise e o projeto de software, em comparação com o paradigma de programação estruturado.

Dito isso, neste artigo serão mostrados vários exemplos de programação estruturada e sua conversão para a programação orientada a objetos, destacando as vantagens da programação orientada a objetos.

Primeiro exemplo (Programação Estruturada)

Para começar, apresentaremos um exemplo onde se deseja calcular o total de um pedido de venda feito em uma loja, que é uma situação corriqueira a ser solucionada por programação. Nesse exemplo, manipularemos dados de clientes, vendedores, produtos e do próprio pedido, incluindo os seus itens.

O objetivo é, a partir de uma série de dados, processar todos os itens de um pedido de venda e escrever um pequeno relatório incluindo o total do pedido. Vamos escrever esse programa na linguagem Java de forma orientada a objetos, mas primeiro apresentaremos uma versão “estruturada”, onde todo o processamento se concentra em um grande bloco de código.

Listagem 1. Aplicação exemplo – versão estruturada (primeira parte).

  01. package Exemplo1;
  02.
  03. public class Programa1 {
  04.
  05.    private static int[] codigoProdutos;
  06.    private static String[] nomeProdutos;
  07.    private static float[] valorProdutos;
  08.    private static int[] estoqueProdutos;
  09.    private static int[] codigoClientes;
  10.    private static String[] nomeClientes;
  11.    private static String[] enderecoClientes;
  12.    private static int[] codigoProdutosVendidos;
  13.    private static int[] qtdeVendidaProdutos;
  14.    private static int[] codigoVendedores;
  15.    private static String[] nomeVendedores;
  16.    private static float[] percentualComissaoVendedores;
  17.    private static int codigoClienteVenda;
  18.    private static int codigoVendedorVenda;

Na Listagem 1 foram apresentadas todas as variáveis do programa, contendo informações importantes sobre os produtos, clientes, o pedido e seus itens, os vendedores e demais dados do pedido, muitas vezes na forma de vetores.

Nas linhas 5, 6, 7 e 8 são apresentados os dados dos produtos existentes na loja, caracterizados pelas variáveis codigoProdutos, nomeProdutos, valorProdutos e estoqueProdutos. Todas essas variáveis são vetores de mesmo tamanho, sendo que os elementos de mesmo índice em cada um desses vetores se referem ao mesmo produto.

O mesmo comportamento ocorre para as variáveis codigoClientes, nomeClientes e enderecoClientes (linhas 9, 10 e 11). Em seguida, os códigos dos produtos vendidos no pedido são mantidos na variável codigoProdutoVendidos (linha 12) e as quantidades de cada item são mantidas na variável qtdeVendidaProdutos (linha 13). Por sua vez, os códigos, nomes e percentuais de comissão de cada vendedor são atribuídos, respectivamente, às variáveis codigoVendedores, nomeVendedores e percentualComissaoVendedores (linhas 14, 15 e 16).

Por fim, o código do cliente que fez a compra é mantido na variável codigoClienteVenda (linha 17) e o código do vendedor que realizou a venda é mantido na variável nomeVendedorVenda (linha 18).

Na Listagem 2 é apresentado o método para popular essas variáveis para a aplicação exemplo, gerando nosso conjunto de dados.

Listagem 2. Aplicação exemplo – versão estruturada (segunda parte).

  19.   private static void criarDadosTeste() {
  20.     codigoProdutos = new int[] { 1, 2, 3, 4 };
  21.     nomeProdutos = new String[] { "Mesa", "Cadeira", "Fogão", "Sofá" };
  22.     valorProdutos = new float[] { 500, 150, 1000, 2000 };
  23.     estoqueProdutos = new int[] { 10, 20, 5, 4 };
  24.     codigoClientes = new int[] { 1, 2, 3 };
  25.     nomeClientes = new String[] { "João", "Carlos", "Carina" };
  26.     enderecoClientes = new String[] { "Rua X, 100", "Rua Y, 200", "Rua Z, 400" };
  27.     codigoProdutosVendidos = new int[] { 1, 2, 3 };
  28.     qtdeVendidaProdutos = new int[] { 1, 6, 1 };
  29.     codigoVendedores = new int[] { 1, 2 };
  30.     nomeVendedores = new String[] { "Ademar", "Rosália" };
  31.     percentualComissaoVendedores = new float[] { 0.1f, 0.2f };
  32.     codigoClienteVenda = 2;
  33.     codigoVendedorVenda = 1;
  34.   }

Em aplicações reais, teríamos muito mais dados a serem carregados no sistema e os mesmos seriam obtidos a partir de um banco de dados, porém carregar dados fixos é conveniente para a nossa aplicação exemplo, pois manipular um pequeno número de clientes, produtos e vendedores torna a aplicação exemplo mais didática. Continuando a declaração da classe Programa1, na Listagem 3, é apresentado o método main(), responsável por realizar a venda, deduzindo os itens vendidos do estoque, e exibir um relatório na tela.

Listagem 3. Aplicação exemplo – versão estruturada (terceira parte).

  35.   public static void main(St ... 

Quer ler esse conteúdo completo? Seja um assinante e descubra as vantagens.
  • 473 Cursos
  • 10K Artigos
  • 100 DevCasts
  • 30 Projetos
  • 80 Guias
Tenha acesso completo