O computador, como todo componente eletrônico, só entende sinais de carga elétrica sequenciadas, um choquinho após o outro. Dividido em diversos tipos de componentes físicos que se comportam de forma diferente ao estímulo elétrico, pode-se determinar a ação de um equipamento eletrônico alterando-se o sequenciamento destas peças pela ação de chaves (componentes eletrônicos) que desviam o fluxo de energia. Esta definição da sequência de chaves, que determina por onde e quando a corrente elétrica vai passar resultando em um comportamento previsto do sistema elétrico, é chamada de programação.
Os primeiros programadores definiam e alteravam estas chaves diretamente com fios em placas. A evolução permitiu que a programação pudesse ser feita por sequenciamento lógico de números que poderiam ser transferidos para os computadores através de cartões perfurados ou textos digitados que alteravam o estado das chaves sem o programador ter que manusear o equipamento diretamente. Programas pré-concebidos traduziam palavras (em inglês), textos inteligíveis, em comandos em linguagem da máquina (números). Estes programas são os compiladores. Endereços de memória que contém dados recebem nomes pelo programador (variáveis). Programar passou, então, a ser redigir um texto obedecendo certas regras de sintaxe, submeter o texto a um compilador que faz a tradução para a linguagem que a máquina consegue processar.
Por certo tempo, programação consistia em sequenciar comandos e atribuir “endereços” (números ou índices), a eles. Para se repetir uma sequencia de comandos, ou seja, fazer uma iteração, utilizava-se um comando para desviar o processamento para o endereço do primeiro comando da sequencia. Os comandos eram basicamente: leia, armazene na variável, faça a conta, grave (na tela, disco ou impressora) e desvie para o endereço tal, além do comando de condição SE (IF - se o valor for tanto, pule para o endereço tal). Era a programação indexada. Tudo era controlado por números e o programador tinha que pensar como máquina. Um exemplo, era a linguagem Basic:
10 CLS
20 INPUT “DIGITE UM VALOR PARA A: “ A
30 INPUT “DIGITE UM VALOR DIFERENTE PARA B “ B 40 IF A=B GOTO 30
50 IF A>B GOTO 80
60 PRINT “O VALOR A E´ MENOR DO QUE B” 70 GOTO 90
80 PRINT “O VALOR A E´ MAIOR DO QUE B” 90 PRINT “FIM DE PROCESSAMENTO”
Com a criação dos comandos do tipo declaração (statement): enquanto (while), repita-até que (repeat until), caso (case) e para-faça (for do); o sequenciamento de comandos passou a apresentar o formato de uma contrução lógica, dispensando a numeração das linhas de programação. Os comandos passaram a ser agrupados em blocos, chamados de sub-rotinas, ou procedimentos (procedures e functions), que recebem um nome e podem ser utilizados como novos comandos. Esta era a programação estruturada, procedural ou procedimental. O próprio programa passa a ser visto como um grande bloco formado por blocos menores e comandos. Por exemplo, um programa para calcular fatorial em linguagem turbo pascal.
Program Fatorial; Var
Numero : integer;
Function Calcula_Fatorial(n: integer) : integer; Begin If n>1 then Calcula_Fatorial := n*Calcula_Fatorial(n-1) Else Calcula_Fatorial := 1; End; Begin repeat Clrscr;
Write(‘Digite um número inteiro positivo (zero para terminar): ‘); Readln(Numero);
If Numero>=0 then
Writeln(‘O fatorial de ‘, Numero, ‘ é ‘, Calcula_Fatorial(Numero)) Else
Writeln(‘Valor inválido’); Until Numero=0;
Writeln(‘Fim de processamento.’); End.
A grande revolução na arte da programação de computadores foi quando alguém percebeu que o homem não deve pensar como máquina para escrever um programa, mas deve fazer o computador comportar-se como gente e compreender comandos humanos. Criou-se uma técnica de raciocínio em que o programa de computador podia ser visto como um objeto que se comporta como aquilo que conhecemos na vida real.
Tem qualidades, aspectos, características ou, genericamente, atributos. Tem comportamento. Pode ser móvel ou não, fazer coisas.
É formado por objetos menores (até o átomo, ou menor) que possuem também atributos e comportamentos
Quando esta técnica se transformou em uma linguagem, criou-se a programação orientada a objetos. Ela utiliza uma nova forma de fazer programas, não jogou fora todos os aspectos positivos da programaçao procedimental e estruturada, mas evoluiu estes conceitos. Os procedimentos e funções são chamados de métodos quando estão dentro de um objeto. As variáveis internas ao objeto são chamadas de propriedades ou atributos.
O conjunto de valores das propriedades formam o estado do objeto. Mensagens são ações de dispositivos externos (teclado, mouse, placa de rede, scanner, outros programas) ou de outros objetos que provocam mudanças de estado. Algumas mudanças do estado do objeto podem determinar uma situação em que algum método deve ser executado (ação). Por exemplo, um clique do mouse sobre um objeto botão muda a propriedade “Clicado” de falso para verdadeiro. O seu novo estado pode desencadear uma sequencia de comandos ou métodos. Mudanças de estado que fazem uma ação são chamadas de eventos. Neste exemplo, o clique do mouse aciona um evento chamado “OnClick” (se existir).
A partir disto, um programa deixou de ser um simples sequenciamento de comandos para ser uma série de ações que provocam mudanças de estado que podem desencadear outras ações.
7.1.1 Tipos de dados e variáveis
Durante o seu processamento, um programa deve necessitar de dados para efetuar cálculos e tratamentos e devolver informação ao usuário. Estes dados são introduzidos por qualquer meio, como digitação, envio de parâmetros por outro objeto ou leitura em um arquivo, depois armazenados em áreas da memória do computador chamadas de variáveis. Os valores armazenados nas variáveis podem ser utilizados através de seu endereço físico na memória (por apontadores ou pointers) ou, mais comum, por um nome atribuído á variável.
Da mesma forma que não se somam bananas com maçãs, o programa não costuma misturar tipos diferentes de dados em suas operações. O programador deve ter conhecimento dos tipos possíveis de dados para não provocar erros no processamento. Linguagens de programação são ditas tipadas quando exigem que as variáveis a serem utilizadas sejam pré-definidas como seu nome e tipo, como no pascal. São não tipadas quando as variáveis são definidas no momento de sua utilização, assumindo um determinado tipo de acordo com o valor atribuído a ela.
TI para concursos
De forma geral, define-se como numérico os valores que serão utilizados para cálculos algébricos. São de tipo lógico as variáveis que assumem apenas dois estados, verdadeiro ou falso, ou equivalente (0 ou 1, v ou t, sim ou não etc). São alfanuméricas as variáveis que não são destinadas a cálculos, mas somente operações de comparações, buscas, concatenações ou simples exibição. São de tipo apontador, variáveis que armazenam endereços de memória.
Dependendo da linguagem de programação, as variáveis numéricas podem se subdividir em reais ou inteiras, e também em outras variações destes dois tipos, como inteiro não negativo, monetário, inteiro longo etc. O tipo alfanumérico também pode receber variações como memorando (texto), ou texto formatado.
Existem também outros tipos de armazenamento de dados na memória, que são agrupamentos de variáveis:
Vetor – conjunto de variáveis identificado por um nome e números inteiros positivos (começando em zero) para cada elemento. A parte numérica do nome da variável fica entre parênteses ou colchetes à direita do nome. Para se referir a uma posição do vetor, a parte numérica pode ser resultado de uma operação matemática. Um vetor que utiliza mais do que um número (dimensões) para identificar cada uma de suas posições (separados por vírgulas) é chamado de matriz.
Registro – grupo de variáveis de vários tipos, identificado por um nome. Cada variável dentro de um registro é chamada de campo.
Lista – conjunto de registros ligados por apontadores, usado em conjunto de dados hierárquicos em que a relação entre os dados não precisa ser representada em forma de matrizes, ou para armazenar dados de uma tabela na memória para algum tratamento especial.
Fila – sequência de dados ordenados, em que o primeiro dado que entra na fila deve ser o primeiro a sair (FIFO – First in first out ou LILO - Last in last out)
Deque – fila em que os elementos podem ser inseridos ou removidos de qualquer extremo.
Pilha – sequência de dados em que o último valor adicionado deve ser o primeiro a sair (LIFO - Last in first out ou FILO - First in last out)