Introdução
Vistos os posts anteriores sobre Introdução a Informática (iniciando com Introdução a Informática – Parte 01), agora vamos focar em processamento de dados e programação.
Processamento de Dados
Embora o termo “processamento de dados” esteja intimamente relacionado a “programação”, eu não preciso necessariamente escrever um programa para processar dados. Vamos ver primeiro o que significa “processamento de dados”:
Processamento de dados é uma série de atividades executadas ordenadamente, que resultará em uma espécie de arranjo de informações, onde inicialmente são coletadas informações, ou dados, que passam por uma organização onde no final será o objetivo que o usuário ou sistema pretende utilizar.[1] A obtenção inicial de dados, informações ou propriamento e seu processamento pode ou não ser realizada através de métodos computacionais e tecnológicos, assim como qualquer outra forma de escrita e catalogação. Exemplo: Um álbum de figurinhas é uma forma de processamento de dados, pois a entrada foram dados aleatórios, onde organizados, formaram informações pertinente ao tema desejado.[1] Contudo, para melhor definição, são usados o computadores para realização de tais tarefas, ele é uma máquina que possui um sistema de coleta de dados, um processador, e ferramentas para manipulação das informações.[2][3]
Em suma, uma planilha eletrônica criada usando um aplicativo como o Microsoft Excel, é capaz de fazer processamento de dados. Você define colunas para preenchimento de informações, e colunas calculadas com fórmulas matemáticas, somatórias e afins, e até mesmo cria gráficos baseado nas informações fornecidas pelo usuário ao editar as células da planilha. Mas você não precisou escrever um programa de computador, você no máximo usou algumas funcionalidades disponíveis mediante assistentes visuais da interface do programa. O Microsoft Excel em si é um Software (ou programa de computador), um aplicativo projetado para ser uma ferramenta de criação e edição de planilhas eletrônicas.
Programação
Para atender necessidades específicas, onde um aplicativo não atende aos requisitos necessários, seja por flexibilidade, capacidade ou tipo de processamento desejado, podemos optar por “fazer um software”. Bem, é nesse ponto que as possibilidades ficam literalmente infinitas. Recomendo a leitura complementar do post “A melhor linguagem de programação“, e todas as referências no final deste post 😀 A definição dos 5 passos para a criação de um programa — de um modo geral — descrita na Wikipedia serve como uma luva:
- Reconhecer a necessidade de um programa para resolver um problema ou fazer alguma coisa.
- Planificar o programa e selecionar as ferramentas necessárias para resolver o problema.
- Escrever o programa na linguagem de programação escolhida.
- Compilação: tradução do código fonte legível pelo homem em código executável pela máquina, o que é feito através de compiladores e outras ferramentas.
- Testar o programa para ter a certeza de que funciona; se não, regressar ao passo 3
Essa abordagem em passos pode muito bem resultar no uso de uma ferramenta ou aplicativo que não envolva codificar ou compilar um programa. Num primeiro momento você acha que precisa construir um programa para resolver um problema ou atender uma necessidade, porém ao procurar as ferramentas necessárias para resolvê-lo, você encontra um aplicativo ou utilitário pronto. Se não for esse o caso, a escolha da linguagem e recursos necessários para resolver o problema passa a fazer parte do problema.
Quem conhece profundamente uma linguagem de programação, consegue resolver de um jeito ou de outro praticamente qualquer necessidade, exceto quando existem restrições ou requisitos são atendidos pela linguagem ou exigidos no projeto.
Para sair um pouco da teoria, vamos partir de uma necessidade específica, que poderia inclusive ser atendida por uma aplicação de mercado já existente, mas que será resolvida usando um programa de computador, que será escrito em várias linguagens. Os objetivos do programa são realizar a tarefa proposta. Para você ter ideia da quantidade de linguagens de programação que poderiam ser utilizadas, recomendo que você visite o site “The Hello World Collection” — Nessa página existem exemplos de um programa minusculo, onde o objetivo é simplesmente retornar ao usuário ou imprimir na tela a mensagem “Hello World”, escrita em muitas, muitas linguagens de programação — inclusive AdvPL.
Problema proposto
Em uma escola X, o professor Y quer calcular a média da nota da classe inteira, para cada prova bimestral que ele aplica, em cada classe que ele leciona. Após corrigir as provas, ele têm as notas de todos os alunos gravadas em um arquivo de texto, onde cada linha desse arquivo corresponde a nota de um dos alunos, representados por um numero de 0 a 100, sem ponto ou vírgula. O programa de computador deve ser capaz de ler todas as notas deste aquivo, contar quantas linhas tem no arquivo, e calcular a média das notas — somando todas as notas e dividindo pelo número de alunos (linhas) , gerando um resultado inteiro. Vamos partir de um arquivo chamado “notas.txt”, que contém 30 linhas, correspondendo as notas de 30 alunos de uma sala:
87 82 66 85 100 49 83 96 44 54 86 42 65 43 41 85 47 53 84 68 51 77 95 67 85 98 85 48 68 51
Agora, vamos ver como poderíamos fazer isso com algumas aplicações e linguagens de programação — interpretadas, compiladas, em Windows, em Linux, etc !!!
Microsoft EXCEL
Nem precisamos criar um programa. Simplesmente utilizamos o Microsoft Excel, criamos uma planilha em branco, abrimos o arquivo notas.txt usando o bloco de notas do Windows, copiamos o conteúdo inteiro do arquivo para a área de transferência do Windows, posicionamos na primeira linha da primeira coluna da nova planilha vazia, e colamos o conteúdo. Pronto, 30 linhas com a coluna “A” preenchida com a nota. Selecionamos as 30 células desta coluna com o mouse — clicando na célula A1 e arrastando até a A30 — e usamos a aba “Fórmulas”, opção AutoSum -> Average. Pronto, na célula A31 aparece a média da soma das notas, informando o valor 69,5. Podemos editar a célula e alterar a expressão usada para calcular a média, e obter o resultado inteiro — veja abaixo:
BATCH SCRIPT ( CMD – Windows )
Eu fiquei surpreso, mas esta operação pode ser feita por exemplo usando o “Prompt de Comando” (CMD) do sistema operacional, criando um arquivo de lote (ou Batch Script), por exemplo chamado de “calcnota.bat” — Teste realizado com Windows 10.
@echo off echo Calculando Notas -- Arquivo NOTAS.TXT set tot=0 set lines=0 set media=0 for /f %%a in (notas.txt) do set /a "lines+=1" for /f %%a in (notas.txt) do set /a "tot+=%%a" set /a media = %tot%/%lines% echo Alunos ........... %lines% echo Soma das notas ... %tot% echo Media da classe .. %media% echo. pause
Resultado obtido:
Python
Python é uma linguagem orientada a objetos e interpretada — você escreve o fonte e chama o aplicativo que interpreta e executa o script. Precisa ter o Python instalado e configurado na máquina. Teste realizado com Python 3.8.0
filepath = 'notas.txt' with open(filepath) as fp: cnt = 0 notas = 0 media = 0 line = fp.readline() while line: if len(line) > 0 : notas += int(line) cnt += 1 line = fp.readline() media = notas / cnt print("Alunos ........... {}".format(cnt)) print("Soma das notas ... {}".format(notas)) print("Media da Classe .. {}".format(media))
E, o resultado obtido:
HARBOUR
O Harbour é um projeto aberto, que deu continuidade a linguagem Clipper, que requer compilação, e gera um código de máquina — ou aplicação executável. O programa abaixo compilou e rodou em uma VM Linux com Ubuntu Server 16 LTS, usando HARBOUR 3.2.0
Function CalcNota() Local cfilestr, clinha , nMedia Local nAlunos := 0 Local nSomaNota := 0 Local nLinha := 1 cfilestr := memoread('notas.txt') While !empty( clinha := memoline(cFilestr,,nLinha) ) nSomaNota += val(alltrim(clinha)) nAlunos++ nLinha++ Enddo nMedia := int( nSomaNota / nAlunos ) qout("Alunos ........... "+str(nAlunos)) qout("Soma das notas ... "+str(nSomaNota)) qout("Media da Classe .. "+str(nMedia)) Return
Resultado obtido:
AdvPL
O código abaixo, escrito em AdvPL, roda em qualquer servidor Protheus , qualquer versão, qualquer build, Windows ou Linux. O resultado é mostrado no console do servidor. Como o AdvPL possui a mesma “base” comum de sintaxe e comportamentos do Clipper, o fonte é quase idêntico ao fonte para Harbour — exceto pela USER FUNCTION ser apenas FUNCTION, e o uso da função conout() ao invés da QOut()
User Function CalcNota() Local cfilestr, clinha , nMedia Local nAlunos := 0 Local nSomaNota := 0 Local nLinha := 1 cfilestr := memoread('notas.txt') While !empty( clinha := memoline(cFilestr,,nLinha) ) nSomaNota += val(alltrim(clinha)) nAlunos++ nLinha++ Enddo nMedia := int( nSomaNota / nAlunos ) conout("Alunos ........... "+str(nAlunos)) conout("Soma das notas ... "+str(nSomaNota)) conout("Media da Classe .. "+str(nMedia)) Return // RESULTADO OBTIDO NO CONSOLE DO SERVIDOR Alunos ........... 30 Soma das notas ... 2085 Media da Classe .. 69
Pontos comuns dos códigos
Cada um desses códigos basicamente realiza as mesmas operações, ou realizam de forma muito parecida. Leitura de um arquivo texto do disco, contagem de linhas, determinar o valor de cada linha, somar os valores em uma variável, dividir o valor das somas pela quantidade de linhas, e mostrar os valores apurados e o resultado da divisão inteira.
Melhorias
Todos os fontes estão corretos e funcionam. MAS, todos eles partem da premissa que o arquivo informado existe, que as notas informadas em cada linha do arquivo não contenham números informados errados — com letras ou espaços no meio dos números ou números maiores que 100. Logo, uma linha informada errada no arquivo pode gerar um valor que altera a média da classe. Como o objetivo do post é mostrar as diferenças e semelhanças entre diferentes linguagens de programação, eles servem para o propósito. Porém uma versão “final” dessa funcionalidade precisaria de mais algumas linhas e instruções, para prever e tratar eventuais erros nas informações disponibilizadas para este processo.
Um outro ponto interessante, é que todos estes programas foram criados para trabalhar com apenas um arquivo de texto por vez, com um nome fixo, e nenhum deles usou uma interface gráfica para mostrar o resultado. Como se trata apenas de um teste, exemplo ou prova de conceito, isso não é um problema. Mas, se a pessoa que vai usar esse programa não é você mesmo, existem muitos pontos a serem considerados.
Portabilidade e restrições
O exemplo feito em BATCH roda apenas no Windows. Todos os programas exigem que o usuário crie uma pasta na máquina para colocar o script e o arquivo. Java roda em qualquer máquina, desde que você tenha instalado o “JRE” ( Java Runtime Environment). Python exige que o usuário tenha na máquina dele o Python instalado — com uma versão compatível com o programa que você criou. O Harbour no linux gera um aplicativo executável, mas existe uma dependência com a LIB do Harbour, que deve ser disponibilizada junto do aplicativo ou o usuário tem que instalar um módulo do Harbour na máquina dele. O programa AdvPL pode ser disponibilizado como fonte ou como “patch”, mas exige que o usuário tenha uma instalação funcional do Protheus Server, e como o programa mostra o resultado na tela de console do servidor, não fica nada prático para set utilizado.
Conclusão
Existem muitas formas e muitas linguagens que podem ser utilizadas para atender a uma determinada necessidade. É fundamental para um desenvolvedor especializar-se em uma delas, mas conhecer as demais alternativas, para melhor avaliar suas escolhas.
No próximo post, vamos ver mais alguns fontes, escritos em outras linguagens, para realizar esse mesmo processamento.
Espero que este conhecimento lhe seja útil, e desejo a todos TERABYTES DE SUCESSO !!!
Referências
- PROCESSAMENTO DE DADOS. In: WIKIPÉDIA, a enciclopédia livre. Flórida: Wikimedia Foundation, 2019. Disponível em: <https://pt.wikipedia.org/w/index.php?title=Processamento_de_dados&oldid=55149314>. Acesso em: 15 mai. 2019.
- SOFTWARE. In: WIKIPÉDIA, a enciclopédia livre. Flórida: Wikimedia Foundation, 2019. Disponível em: <https://pt.wikipedia.org/w/index.php?title=Software&oldid=57078725>. Acesso em: 31 dez. 2019.
- PROGRAMAÇÃO DE COMPUTADORES. In: WIKIPÉDIA, a enciclopédia livre. Flórida: Wikimedia Foundation, 2019. Disponível em: <https://pt.wikipedia.org/w/index.php?title=Programa%C3%A7%C3%A3o_de_computadores&oldid=56636002>. Acesso em: 4 nov. 2019.