Programação Imperativa

Aula 2

Sumário

Nesta aula vamos falar de conceitos introdutórios sobre computadores e abordaremos superficialmente os seguintes tópicos:

Tipos de computador

Existem vários tipos de computadores, uns melhores e mais caros do que outros, mas todos eles funcionam mais ou menos do mesmo modo: todos têm a capacidade de transmitir, guardar, e manipular informação.

De seguida apresenta-se uma lista com alguns tipos de computadores:
Super-computadores
são computadores muito potentes e normalmente só existem em grandes laboratórios de investigação.

Computadores pessoais de secretária (desktop computers)
também costumam ser chamados de PCs (personal computers) e são o tipo de computador que as pessoas costumam ter em casa. Os computadores que vão utilizar nas aulas práticas são deste tipo e estão ligados em rede.

Computadores portáteis
são semelhantes aos computadores pessoais, mas são mais compactos e podem ser facilmente transportados de um lado para o outro.

Personal Digital Assistants (PDAs)
São ainda mais portáteis. Podem-se meter no bolso.

... e até mesmo telemóveis!
também podem ser considerados computadores porque têm uma memória para guardar os telefones dos vossos amigos, têm jogos, máquina de calcular, e alguns até dão para aceder à Internet.

Componentes de um computador

Um computador é constituído pelo computador propriamente dito e por um conjunto de acessórios que tipicamente inclui: O computador propriamente dito tem dois componentes essenciais: processador e memória.

O processador é o componente que manipula a informação e "faz as contas". A memória serve para armazenar informação. Existem dois tipos de memória: RAM e disco. A memória RAM é usada pelo computador para armazenar dados temporariamente. Uma vez desligado o computador, o conteúdo da memória RAM desaparece. Ao contrário da memória RAM, a informação armazenada na memória do disco permanece mesmo quando desligamos o computador. Por esta razão, a memória RAM diz-se volátil e a memória do disco diz-se não volátil.

Características de um computador

Os computadores podem manipular diversos tipos de informação, incluindo:

Como a cadeira de Programação I é uma cadeira introdutória, apenas iremos falar de dados numéricos e de texto.

Uma característica importante dos computadores é a rapidez. Um computador normal é capaz de fazer milhões de operações aritméticas num só segundo! Vocês vão comprovar isto assim que começarem a fazer programas nas aulas práticas.

Programas

Para se manipular informação temos de dizer ao computador exactamente aquilo que ele deve fazer. Para tal temos de especificar um conjunto de instruções a que chamamos de programa. Esse conjunto de instruções ou programa é uma espécie de "receita de cozinha" que pode ser introduzido e armazenado na memória do computador. Depois de armazenado, o programa pode ser executado. Isso desencadeia as seguintes acções:

  1. Um conjunto de informação ou dados, chamados dados de entrada são introduzidos no computador (por exemplo, através do teclado ou rato)
  2. Os dados de entrada são manipulados para produzir determinados resultados chamados dados de saída.
  3. Os dados de saída (e possivelmente os dados de entrada) são guardados num ficheiro em disco ou mostrados no ecrã.

Estes três passos podem ser repetidos muitas vezes. É de salientar também que cada um destes passos tanto pode ser uma tarefa curta e simples como uma tarefa longa e complicada. Os dados de entrada também costumam ser designados de input e os dados de saída de output.

Exemplo: pretende-se programar um computador para calcular a área de um círculo usando a fórmula a = pi*r2, introduzindo um valor numérico para o raio r como dado de entrada.

Para fazer o programa pretendido, temos de dizer ao computador para executar as seguintes tarefas:

  1. Ler o valor numérico para o raio do círculo e guardar esse valor na memória do computador.
  2. Calcular a área utilizando a fórmula e guardar o resultado na memória.
  3. Mostrar o resultado no ecrã.

Cada uma destas tarefas pode necessitar de uma ou mais instruções num programa de computador.

Linguagens de programação

As tarefas 1, 2, 3, especificadas acima foram escritas em Português. Infelizmente, os computadores não entendem linguagens naturais como o Português, apenas entendem linguagens de computador. Do mesmo modo que existem várias linguagens naturais (Português, Inglês, Chinês, etc), também existem várias linguagens de programação de computadores (C, C++, Pascal, Java, etc). Nesta disciplina vamos aprender os fundamentos da programação de computadores usando a linguagem C. Os princípios fundamentais do C são comuns a quase todas as linguagens de programação. O mesmo se passa em relação às linguagens naturais. Quem sabe Português e Espanhol, rapidamente aprende Italiano. Quem tem conhecimentos sólidos de C, rapidamente aprende qualquer outra linguagem de programação.

Compiladores

Os computadores não entendem directamente a linguagem C, apenas entendem uma linguagem chamada linguagem máquina. Esta linguagem varia de computador para computador dependendo do tipo de processador. É possível fazer programas directamente em linguagem máquina mas quase ninguém o faz porque isso é uma tarefa um pouco morosa e complicada. Um programa em linguagem máquina é incompreensível e tem mais ou menos o seguinte aspecto:

      00000010011101110111
      00000010010110000101
      00000101111011010100

A linguagem máquina é constituída por 0s e 1s porque os computadores são máquinas electrónicas. Como tal, aquilo que eles entendem directamente são sinais electrónicos. Esses sinais electrónicos têm dois estados: ligado e desligado (0 e 1). O facto de o computador só trabalhar com dois símbolos não limita aquilo que pode fazer. As pessoas também só trabalham com 23 letras mas o número de palavras e de frases que conseguimos escrever com essas 23 letras é ilimitado. Os 0s e 1s da linguagem máquina são códigos que representam instruções, números, letras, e variáveis. Por exemplo, o conjunto de 0s e 1s que vimos à pouco são códigos que poderão representar o seguinte.

      LOAD   I
      ADD    5
      STORE  K

Estas 3 instruções são uma variante simbólica das instruções em linguagem máquina. A variante simbólica chama-se linguagem assembly e é claramente mais perceptível que uma sequência de 0s e 1s. Apesar de ser mais perceptível que a sequência de 0s e 1s, não é tão clara como:

      k = i + 5

Esta última instrução já é parecida com a notação matemática a que estamos habituados. As instruções de linguagens como o C, C++, Pascal e Java, são deste estilo. Estas linguagens chamam-se linguagens de alto nível porque estão a um nível relativamente distante dos detalhes internos do computador. Ao contrário destas, a linguagem máquina e a sua variante simbólica (o assembly) chamam-se linguagens de baixo nível.

É muito mais simples de se programar utilizando uma linguagem de programação de alto nível. Assim, o que se costuma fazer é utilizar um programa especial que traduz automaticamente programas escritos em linguagens como o C para a linguagem máquina que o computador entende. Esses tradutores chamam-se compiladores.

A figura acima ilustra o trabalho do compilador. O ficheiro ola.c é um programa escrito em linguagem C. O ola.c é submetido ao compilador, e este traduz o ola.c para o ficheiro ola.exe que é composto por instruções em linguagem máquina.

A linguagem máquina e o assembly não são universais, variando de processador para processador. Essa é uma das grandes vantagens de se programar numa linguagem de alto nível. Além dessa vantagem, existem outras:

Sistemas operativos

Um computador só funciona se tiver um sistema operativo (actualmente, os sistemas operativos mais conhecidos e usados são o MSDOS/Windows e o Linux, mas existem outros). Um sistema operativo é constituído por um conjunto de programas que fazem de interface entre o hardware do computador (disco, memória, rato, teclado, unidade de processamento) e os outros programas de aplicação (compiladores, editores de texto, programas de desenho, folhas de cálculo, sistemas de bases de dados, jogos, browsers para aceder à Internet).

O sistema operativo controla e coordena a utilização do hardware pelos vários programas de aplicação. O objectivo do sistema operativo é fornecer um ambiente de trabalho para que os outros programas e utilizadores possam funcionar. Nas aulas práticas iremos trabalhar com o sistema operativo Linux.

A base do Linux foi escrita por Linus Torvalds em 1991. Nessa altura, Linus Torvalds era um estudante na Universidade de Helsinkia, Finlândia. O próprio Linus colocou o código da versão inicial do Linux na Internet de borla de modo a que outras pessoas pudessem utilizá-lo e melhorá-lo. Foi precisamente isso que aconteceu e continua a acontecer nos dias de hoje. Actualmente existem milhões de pessoas que utilizam o Linux, e existem milhares de pessoas que contribuem voluntariamente para desenvolver e aperferiçoá-lo cada vez mais.

O Linux é um sistema operativo baseado no sistema UNIX. O UNIX por sua vez foi inventado por Ken Thompson e Dennis Ritchie em 1969. Originalmente, o UNIX foi escrito em linguagem assembly. Em 1972 Dennis Ritchie e Brian Kernighan inventaram a linguagem C e um ano mais tarde, Ken Thompson reescreveu o UNIX em C.

Outras disciplinas...

No 2º ou 3º ano vão ter a disciplina de arquitectura de computadores. Nessa disciplina vão aprender mais sobre os detalhes internos do funcionamento de computadores e da programação em linguagens de baixo nível.

No 3º ano também vão ter uma disciplina inteiramente dedicada a sistemas operativos. Nessa altura vão ter oportunidade de aprender a fundo como é que funciona um sistema operativo.