Paradimas de Programação
Paradimas de Programação
Paradimas de Programação
Introdução
Prefácio
O presente manual, visa dar apoio e acompanhamento aos estudantes do curso de engenharia de
software da Universidade São Tomás de Moçambique no decurso da cadeira de Paradigmas de
programação. O Docente disponibiliza este material como forma de suprir a deficiência de obras
bibliográficas na cadeira de Paradigmas de Programação e guarda expectativas de que os
estudantes explorem-o como uma guia de consulta às aulas. Usuários do presente manual não
deverão basear-se unicamente neste material como forma de desenvolverem as suas faculdades
académicas durante o seu curso, sendo recomendável a consulta da bibliografia que o docente
apresenta no programa temático da cadeira.
Epígrafe
Objectivos
PLANO DE AULA
Curso: Licenciatura em Engenharia de Software
Disciplina: Paradigmas de Programação
Ano: 2007 II Semestre
Turma: 3PESW / 3LESW
2. OBJECTIVOS ESPECÍFICOS
No fim deste tema, o aluno deve ser capaz de:
i. Definir o conceito de linguagem de programação
ii. Classificar os tipos de linguagem de programação
iii. Explicar o processo de evolução das linguagens de programação
iv. Descrever o papel das linguagens de programação no desenho de software
Como podemos denotar, o computar trata-se de uma máquina electrónica programável, que
usando instruções dum programa específico, aceita dados de entrada, processa-os,
armazena-os e produz um resultado de saída. Sendo está máquina programável, torna-se
necessário a existência dum mecanismo para a sua instrução, usando uma língua que esta possa
entender. A língua usada para a instrução do computador, denomina-se Linguagem de
Programação, portanto pode-se definir:
Esta linguagem é mais rápida que as linguagens do alto nível, porém o seu uso na
codificação de problemas da vida corrente é inadequado, devido:
Bernardino Eugénio Bila Pág. 6/50
Paradigmas de Programação
Linguagens de Alto Nível: próximas das linguagens utilizadas por humanos para
expressar problemas e algoritmos. Cada instrução duma linguagem do alto nível
corresponde a várias declarações numa linguagem do baixo nível
Os programas em linguagem de alto nível são muito mais fáceis de serem desenvolvidos,
entendidos e depurados por diversas razões:
Facilidade de auto-documentadas;
A estrutura do programa pode ser desenvolvida para reflectir a estrutura do
problema real;
Uso de nomes significtivos para variáveis e subrotinas;
A solução do problema não necessita conhecer os detalhes do funcionamento do
hardware (detalhes do baixo nível).
Programas escritas em linguagem de alto nível são de fácil legibilidade em cada
passo da execução.
O ambiente de desenvolvimento nas linguagens de alto nível, normalmente provê
facilidades para a depuração, como visualização dos valores das variáveis, da
pilha. Além disso o compilador pode incluir instruções na geração de código para
detectar erros em tempo de execução, como overflow numéricos e violação de
limites de vectores e matrizes;
A utilização de linguagens de baixo nível é indicada para funções que precisam
implementar instruções de máquina específicas que não são suportadas por
linguagens de alto nível, embora a grande maioria das linguagens de alto nível
apresentam uma biblioteca que permite implementar instruções de baixo nível
directamente em seus programas.
Estas linguagens actualmente são usadas somente quando as linguagens de alto nível não
satisfizerem as necessidades ou não forem suportadas.
As linguagens especializadas: são caracterizadas pela forma sintáctica não usual porque
foram desenvolvidas para aplicação específica. Centenas de linguagens especializadas
estão em uso actualmente. Dentre elas podemos destacar a linguagem Lisp desenvolvida
especialmente para manipular símbolos e listas, Prolog desenvolvida para tratar e
representar conhecimentos, Smalltalk criada para representar os dados em forma de
objectos, sendo a primeira a ser puramente orientada a objectos, APL desenvolvida para
manipular vectores, e a linguagem Forth desenvolvida para desenvolver softwares para
microprocessadores.
LINGUAGENS DE PROGRAMAÇÃO
ANO LINGUANGEM
1957 FORTRAN
1958 ALGOL
1960 LISP
1960 COBOL
1962 APL
1962 SIMULA
1964 BASIC
1964 PL/1
1966 ISWIM
1970 Prolog
1972 C
1975 Pascal
1975 Scheme
1977 OPS5
1978 CSP
1978 FP
1980 dBase II
1983 Smalltalk 80
1983 Ada
1983 Parlog
1984 Standard ML
1986 C++
1986 CLP(R)
1986 Eiffel
1988 CLOS
1988 Mathematica
1988 Oberon
1990 Haskell
1991 Visual Basic 1.0
1992 Visual Basic 2.0 Seis meses depois Visual Basic 3.0
1995 Visual Basic 4.0
1995 Delphi
1995 Java
1997 Visual Basic 5.0
1998 Visual Basic 6.0
2002 Plataformas Visual Studio.NET (Visual Basic.Net, C#.Net,...)
.... ....
PLANO DE AULA
Curso: Licenciatura em Engenharia de Software
Disciplina: Paradigmas de Programação
Ano: 2007 II Semestre
Turma: 3PESW / 3LESW
1. CONTEÚDOS
i. Processadores de linguagens
ii. Processo de interpretação
iii. Processo de tradução-compilação
2. OBJECTIVOS ESPECÍFICOS
No fim deste tema, o aluno deve ser capaz de:
i. Definir o conceito processador de linguagem
ii. Explicar o processo de interpretação dum programa
iii. Explicar o processo de tradução dum programa
3. MEIOS DIDÁCTICO
Texto de apoio
Quadro branco
Caneta de quadro de branco
4. MÉTODOS DE ENSINO
interrogativo de modo a colectar dos estudantes os conhecimentos intuitivos que
possuem no processo de execução dum programa escrito em determinada
linguagem de alto nível;
Expositivo, após a colecta das contribuições dos alunos, o docente fará uma
exposição dos processos de execução dos programas escritos em linguagens do
alto nível.
5. DURAÇÃO DA AULA
A presente aula deverá ter uma duração de 80 min.
As linguagens de alto nível possuem uma certa independência da máquina, pois não são
desenvolvidas utilizando instruções específicas do processador (linguagem de máquina), mas
um conjunto de comandos que são transformados em linguagens de máquina, dado que os
computadores actualmente produzidos executam programas em uma linguagem de baixo
nível (linguagem de máquina).
Qualquer programa que a partir de código dum programa escrito numa linguagem de alto
nível gera um código equivalente em linguagem de máquina – executando-o ou preparando-
o para a execução – é denominado processador de linguagem ou compilador. Processadores
de linguagem incluem tradutores, interpretadores, e ferramentas auxiliares como editores
dirigidos à sintaxe.
Exemplo de algumas linguagens interpretadas: BASIC, Bash, C#, Perl, PHP, Python,
Euphoria, Forth, JavaScript, Logo, MUMPS, Ruby, linguagens de consulta (SQL, PL/SQL,
Trasanct-SQL)
Vantagem
Rapidez no desenvolvimento
Desvantagem
Maior tempo de execução
Não permitem a distribuição do código como um executável
Maior consumo de memória no processo de execução, isto porque o programa
interpretador deve ser mantido na memória até a fim da execução.
I
n
t
e
r
p
r
e
t
a
ç
ã
o
Vantagem
Eficiência na execução do programa;
Possibilidade de distribuição do código executável;
Pouco consumo de memória durante a execução do programa.
Desvantagem
Maior tempo no desenvolvimento;
000001010110
Program P1; PUSH 2 000001010110
100010101010
Var a,b,s: Integer; LOADL 38 100010101010
101001101101
MOVE Ax, A 101001101101
101010010011
Function soma: Integer (a , b: ADD Ax, B 101010010011
101010010101
integer); STORE Ax,38 101010010101
C 000010100101
Begin LOAD 0[SB] 000010100101
M 000001010110
Soma:= a + b; o LOADL 1 000001010110
100010101010
End; m CALL Add o 101001101101
100010101010
p STORE 0[SB] n 101001101101
101010010011 L
Procedure Imprimir (soma: POP 2 101010010011
i t 101010010101
integer); HALT i 101010010101
a 000010100101
Begin l n 000010100101
Writeln (‘Soma: ‘, soma); a d 101010010011
End;
k 101010010101
ç o
e 000010100101
Begin ã r 000001010110 000001010110
r
a:= 2; o 100010101010 100010101010
LOADL 40
b:= 3; 101001101101 101001101101
s:= soma(a,b); LOAD 0[SB] 101010010011 101010010011
imprimir(s); ECHO 1 101010010101 101010010101
End. HALT 000010100101 101010010011
000001010110 101010010101
100010101010 000010100101
101001101101 000001010110
101010010011 100010101010
101010010101 101001101101
000010100101 10101001001
000010100101 10101001010
1
Fig.2 Esquema ilustrativo do processo de tradução
PLANO DE AULA
Curso: Licenciatura em Engenharia de Software
Disciplina: Paradigmas de Programação
Ano: 2007 II Semestre
Turma: 3PESW / 3LESW
1. CONTEÚDOS
2. OBJECTIVOS ESPECÍFICOS
No fim deste tema, o aluno deve ser capaz de:
i. Definir o conceito sintaxe de linguagem de programação
ii. Descrever o processo de análise sintáctica
iii. Aplicar os métodos métodos de avaliação léxica/sintáctica de expressões na
resolução de exercícios práticos
3. MEIOS DIDÁCTICOS
Texto de apoio
Quadro branco
Caneta de quadro de branco
4. MÉTODOS DE ENSINO
interrogativo de modo a colectar dos estudantes os conhecimentos intuitivos que
possuem sobre a análise sintáctica e semântica durante a execução dum programa
escrito em determinada linguagem de alto nível;
Expositivo, após a colecta das contribuições dos alunos, o docente fará uma
exposição sobre a análise sintáctica e semântica das linguagens de programação.
5. DURAÇÃO DA AULA
A presente aula deverá ter uma duração de 80 min.
ε Aa | Bb
A a | aB
B b
1
Em homenagem ao John Backus e Peter Naur que introduziram esta notação pela primeira vez na linguagem
ALGOL 60.
Regras de derivação: Os símbolos a negrito, fora dos sinais <...> são terminais e
<program> é o símbolo inicial.
<var> :: A | B | C
A análise léxica de expressões duma linguagem de programação pode ser implementada usando
ter forma:
Infixa: As expressões são representadas colocando o operador entre dois operandos, esta forma
requer o uso de parênteses para a definição de prioridade de execução.
Exemplo: (a+b)*(c-d)
Préfixa: As expressões são representadas colocando o operador antes dos operandos. Esta forma
não requer o uso de parêntesis.
Exemplo: *+ab-cd
Posfixa: As expressões são representadas colocando o operador no fim dos operandos. Esta
forma não requer o uso de parêntesis.
Exemplo: ab+cd-*
As forma acima descritas podem ser processada facilmente numa linguagem de programação
usando uma pilha.
2. Usando a notação de BNF defina as gramáticas para a descrição formal das seguintes
declarações sintácticas na linguagem java. A gramática deverá indicar claramente os
conjuntos finitos de símbolos terminais, não terminais, inicial:
a) identificador
b) declaração de variável sem inicialização
c) declaração de variável com inicilização
d) atribuição
e) função
f) classe sem herança, com atributos, construtor e métodos.
teste1 = t1;
teste2 = t2;
nota_trab = nt;
}
5. Passe as expressões abaixo dadas forma inifixa para a forma prefixa e posfixa:
a) (2+3) / (4-9) – 3
b) ( (2 * ( 6 -8 )-5) / (2 - 8) )*3
c) (3- 5) * (2-4)- (3*(3+8))
PLANO DE AULA
Curso: Licenciatura em Engenharia de Software
Disciplina: Paradigmas de Programação
Ano: 2007 II Semestre
Turma: 3PESW / 3LESW
1. CONTEÚDOS
2. OBJECTIVOS ESPECÍFICOS
No fim deste tema, o aluno deve ser capaz de:
i. Definir o conceito semântica de linguagem de programação
ii. Descrever o processo de análise semântica
iii. Aplicar os métodos de avaliação semântica de expressões na resolução de
exercícios práticos
3. MEIOS DIDÁCTICOS
Texto de apoio
Quadro branco
Caneta de quadro de branco
4. MÉTODOS DE ENSINO
interrogativo de modo a colectar dos estudantes os conhecimentos intuitivos que
possuem sobre a análise sintáctica e semântica durante a execução dum programa
escrito em determinada linguagem de alto nível;
Expositivo, após a colecta das contribuições dos alunos, o docente fará uma
exposição sobre a análise sintáctica e semântica das linguagens de programação.
5. DURAÇÃO DA AULA
A presente aula deverá ter uma duração de 80 min.
Nesse caso, o compilador gera erros relacionados com a verificação de controlo porque nota
que o comando break só pode ser usado dentro do comando switch, while..do, for e
do...while. E o comando continue só é usado nos comandos cíclicos (while..do, for e
do...while).
PLANO DE AULA
Curso: Licenciatura em Engenharia de Software
Disciplina: Paradigmas de Programação
Ano: 2007 II Semestre
Turma: 3PESW / 3LESW
1. CONTEÚDOS
2. OBJECTIVOS ESPECÍFICOS
No fim deste tema, o aluno deve ser capaz de:
i. Enumerar os tipos de dados usuais nas linguagens de programação
ii. Explicar o conceito de tipos de dados abstractos
iii. Explicar a importância dos tipos de dados nas linguagens de programação
3. MEIOS DIDÁCTICOS
Texto de apoio
Quadro branco
Caneta de quadro de branco
4. MÉTODOS DE ENSINO
interrogativo de modo a colectar dos estudantes os conhecimentos intuitivos que
possuem sobre os tipos de dados usuais nas linguagens de programação;
Expositivo, após a colecta das contribuições dos alunos, o docente fará uma
exposição teórica sobre os tipos de dados usuais nas linguagens de programação.
5. DURAÇÃO DA AULA
A presente aula deverá ter uma duração de 80 min.
Alfanuméricos
o Caracter
o Cadeia de caracteres
Lógicos
2
Opera com cadeias de caracteres mas não se trata dum tipo primitivo. É um tipo complexo porque é uma sequência
de caracteres e o seu máximo é 163.866.385.
3
Opera com cadeias de caracteres mas não é um tipo primitivo. É um tipo complexo porque é uma sequência de
caracteres.
Os tipos abstractos de dados constituem estruturas de dados complexos (classes) que possuem
uma visão geral da estrutura, devendo o programador implementar os métodos com as
funcionalidades previstas em determinada classe.
1. Qual é a necessidade da especificação dos tipos de dados numa linguagem do alto nível?
2. Cite os tipos de dados primitivos usuais nas linguagens de programação. Para cada tipo tente
identificar exemplos de dados e informações para os quais eles seriam mais adequados, deverá
prestar atenção na natureza e no intervalo de variação das referidas informações para que possa
escolher o tipo mais adequado.
3. Qual seria o tipo de dados mais adequado para armazenar a seguinte informação:
a) Número de telefone
b) Número do Bilhete de Identidade actual
c) Código de barras dum produto
d) Lista de estudantes duma turma
e) Notas de frequência duma turma
4. Defina os conceitos abstracção e tipos abstractos de dados. Dê exemplos que não constem no
texto, construídos a partir do que você entendeu sobres os tipos abstractos.
5. O gerente do supermercado Boa Sorte pretende contratar uma empresa de desenho de software
para o provimento duma aplicação para a gestão do seu stock. Mas antes de solicitar os serviços
duma empresa convida o estudante da USTM para lhe auxiliar a modelar um tipo abstracto de dado
que lhe permita dentre outras funções adicionar os produtos, vendê-los, abatê-los (remover) do stock
caso estejam fora do prazo, controlar a ruptura em stock dos produtos, a quantidade mínima para a
reposição dos produtos assim como a avaliação dos seus ganhos após a venda dos produtos em stock.
Desenhe a estrutura do tipo abstracto para o fim desejado pelo gerente do supermercado, deverá
explicar com deverá funcionar cada operação constante no seu tipo abstracto de dado.
PLANO DE AULA
Curso: Licenciatura em Engenharia de Software
Disciplina: Paradigmas de Programação
Ano: 2007 II Semestre
Turma: 3PESW / 3LESW
1. CONTEÚDOS
i. Estruturas de decisão
ii. Estruturas de selecção
iii. Estruturas cíclicas/ repetitivas
iv. Exercício de aplicação
2. OBJECTIVOS ESPECÍFICOS
No fim deste tema, o aluno deve ser capaz de:
i. Explicar o funcionamento das estruturas de controle
ii. Aplicar uma estrutura de controle no lugar doutra
iii. Explicar das estruturas de controle nas linguagens de programação
3. MEIOS DIDÁCTICOS
Texto de apoio
Quadro branco
Caneta de quadro de branco
4. MÉTODOS DE ENSINO
interrogativo de modo a colectar dos estudantes os conhecimentos intuitivos que
possuem sobre as estruturas de controle usuais nas linguagens de programação;
Expositivo, após a colecta das contribuições dos alunos, o docente fará uma
exposição teórica sobre as estruturas de controle usuais nas linguagens de
programação.
5. DURAÇÃO DA AULA
A presente aula deverá ter uma duração de 80 min.
Estruturas de decisão
Permitem ao compilador seleccionar para execução um bloco de instruções, mediante o valor
duma condição avaliada. A forma completa da estrutura de decisão nas linguagens de
programação tem a forma:
SE (condição) ENTÃO instruções SENÃO instruções
A condição deverá ser uma expressão lógica ou uma que resulte nos valores 1 ou 0.
As instruções podem ser simples ou um grupo.
Esta estrutura executa o conjunto de instruções depois do ENTÃO caso o valor da condição
seja verdadeiro, caso contrário executa o conjunto de instruções depois do SENÃO.
Estruturas de selecção
Permitem ao compilador seleccionar perante uma lista de opções uma para executar o
conjunto de instruções que possui. Esta selecção é efectuada com auxílio dum seleccionador
que a estrutura possui. A sua forma frequente é:
SELECCIONE (selector)
Opção1: Instruções
Opção2: Instruções
..............................
OpçãoN: Instruções
SENÃO: Instruções
FIM_SELECCIONE
A variável selectror deve ser dum tipo ordinal, isto é, um tipo que tendo elemento dele se
possa saber o anterior e o próximo elemento.
As opções podem ser unidades singulares, uma lista ou um intervalo de valores do tipo do
selector.
Conforme o valor que a variável selector tiver serão executadas as instruções dumas das
opções se ele for igual a um dos valores das opções. Caso contrário as instrução do SENÃO
serão executadas.
Estruturas cíclicas
Permitem ao compilador executar repetidamente uma instrução ou um conjunto de
instruções. As estruturas cíclicas podem ser de dois tipos:
Iterativas: quando a número de vezes a repetir é conhecido logo a prior e o
processo decremento/incremento do índice controlador é automático.
Condicionais: quando o número de vezes a repetir não conhecido a pior, estando
dependente duma condição.
As estruturas cíclicas iterativas mais frequentes são: for, foreach, Loop
As estruturas cíclicas condicionais mais frequentes são:
While (condição) instruções End
Do instuções While (condição)
Bernardino Eugénio Bila Pág. 41/50
Paradigmas de Programação
3. Perante os casos a seguir diga quais usarias estruturas de controle iterativa ou condicionais.
a) Leitura das notas duma turma
b) Cadastro de funcionário do Aparelho de Estado
c) Leitura de formulários do Censo Populacional realizado em Agosto de 2007
d) Soma de números naturais fornecidos pelo utilizador
e) Soma de números pares inferiores a 10000
f) Sistema de cobrança de bilhetes de acesso a uma sala de cinema.
4. Mostre as alterações necessárias para inverter um ciclo while...do num do...while e vice-versa.
PLANO DE AULA
Curso: Licenciatura em Engenharia de Software
Disciplina: Paradigmas de Programação
Ano: 2007 II Semestre
Turma: 3PESW / 3LESW
1. CONTEÚDOS
2. OBJECTIVOS ESPECÍFICOS
No fim deste tema, o aluno deve ser capaz de:
i. Definir o conceito de paradigma de programação
ii. Explicar o historial dos paradigmas de programação
iii. Explicar a pertinência dos estudo dos paradigmas de programação
3. MEIOS DIDÁCTICOS
Texto de apoio
Quadro branco
Caneta de quadro de branco
4. MÉTODOS DE ENSINO
interrogativo de modo a colectar dos estudantes os conhecimentos intuitivos que
possuem sobre os paradigmas programação;
Expositivo, após a colecta das contribuições dos alunos, o docente fará uma
exposição teórica sobre os paradigmas de programação.
5. DURAÇÃO DA AULA
4
Aspectos que normalmente compõem qualquer linguagem de programação do alto nível.
possuiam uma orientação da forma como os problemas da vida corrente seria solucionados
usando o computador. Este facto permitiu que as linguagens tivessem analogias no modelo
ou estilo por elas adoptados para a solucionar os problemas reais. A estes estilos, modelos de
solucionar problemas reais recebeu o nome Paradigma de Programação.
PLANO DE AULA
Curso: Licenciatura em Engenharia de Software
Disciplina: Paradigmas de Programação
Ano: 2007 II Semestre
Turma: 3PESW / 3LESW
1. CONTEÚDOS
2. OBJECTIVOS ESPECÍFICOS
No fim deste tema, o aluno deve ser capaz de:
i. Definir o conceito de paradigma impertivo
ii. Explicar os princípios do paradigma imperativo
iii. Descrever as características das linguagens imperativas
iv. Explicar as vantagens e desvantagens do paradigma imperativo
3. MEIOS DIDÁCTICOS
Texto de apoio
Quadro branco
Caneta de quadro de branco
4. MÉTODOS DE ENSINO
interrogativo de modo a colectar dos estudantes os conhecimentos intuitivos que
possuem sobre as estruturas de controle usuais nas linguagens de programação;
Expositivo, após a colecta das contribuições dos alunos, o docente fará uma
exposição teórica sobre as estruturas de controle usuais nas linguagens de
programação.
5. DURAÇÃO DA AULA
A presente aula deverá ter uma duração de 80 min.
Estado
5
John Von Neumann (1903-1957), matemático Húngaro- um dor construtores do ENIAC.
6
Augusta Ada King, Condessa de Lovelace (1851-1852) reconhecida como sendo a primeira programadora em toda
a história que escreveu um programa que permitia a máquina análitica de Charles Babbage computar os valores de
funções matemáticas.
7
Barbara Liskov (nascida em 1939), prominete cientistade computação. Primeira mulher Norte Americana a tornar-
se uma PhD em ciências de computação (informática) em 1968 na Universidade de Stanford.
8
Blaise Pascal (1623-1662), Filósofo, Físco e Matemático Francês.
9
Niklaus E. Wirth (nascido em 1934), cientista Suíço de computação.
Bernardino Eugénio Bila Pág. 49/50
Paradigmas de Programação
MODULA: iventada pelo Niklaus Wirth em 1970. Esata linguagem possui algumas
simililariades com o seu predecessor Pascal, primeira linguagem escrita pelo
Niklaus.
C: linguagem de programação de propósito geral, estruturada, imperativa, procedural, de
alto nível e padronizada. Criada em 1972, por Dennis Ritchie10, nos laboratórios Bell,
para ser usada no sistema operacional UNIX11. Desde então, espalhou-se por muitos
outros sistemas operativos, e tornou-se uma das linguagens de programação mais
usadas. O seu nome “C” deveu ao facto de muitas das suas características derivarem
de uma linguagem de programação anterior chamada “B”.
10
Dennis MacAlistair Richies (nascido em 1941), cientista Norte Americano de computação, formado em Física e
Matemática Aplicada em Universidade de Harwad.
11
Sistema operativo portátil, multi-tarefa e multi-utilizador.