Buscar

Paradigmas_Linguagens_01

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 3, do total de 18 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 6, do total de 18 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 9, do total de 18 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Prévia do material em texto

PARADIGMAS DE LINGUAGENS 1 
 
 
ALGORITMOS E PROGRAMAS 
 
Um algoritmo é uma norma executável para estabelecer um certo efeito desejado, que na 
prática será geralmente uma descrição detalhada para solucionar um certo tipo de problema. 
 
Programas são “formulações concretas de algoritmos abstratos, baseados em representações 
e estruturas específicas de dados”. Ou ainda “é a expressão de um algoritmo de modo que 
possa ser executado por um computador”. 
 
Exemplo de algoritmo para trocar uma lâmpada queimada: 
 
“pegar uma lâmpada nova no armário”; 
“pegar a escada na área de serviço”; 
“subir na escada com a lâmpada nova na mão”; 
“retirar a lâmpada queimada”; 
“colocar a lâmpada nova”; 
“descer a escada”; 
“testar se a lâmpada nova está funcionando” 
 
Seguindo com o exemplo da troca de lâmpadas, vamos supor que há a possibilidade de que a 
escada disponível não seja alta suficiente para alcançar a lâmpada e que, neste caso, 
gostaríamos prever este possível erro. Poderíamos reescrever o algoritmo desta forma: 
 
“pegar uma lâmpada nova no armário”; 
“pegar a escada na área de serviço”; 
“subir na escada com a lâmpada nova na mão”; 
se “for possível alcançar a lâmpada a ser trocada” então 
“retirar a lâmpada queimada”; 
“colocar a lâmpada nova”; 
fim-se; 
“descer da escada”; 
“guardar a escada”; 
 
 
Outro caso: supondo que havia várias lâmpadas para serem trocadas na casa. Poderíamos 
reescrever o algoritmo desta forma: 
 
“pegar todas as lâmpadas novas no armário”; 
“pegar a escada na área de serviço”; 
enquanto “existirem lâmpadas novas disponíveis” faça 
“subir na escada com uma lâmpada nova na mão”; 
se “for possível alcançar a lâmpada a ser trocada” então 
“retirar a lâmpada queimada”; 
“colocar a lâmpada nova”; 
fim-se; 
“descer da escada”; 
fim-enquanto; 
“guardar a escada”; 
 
 
 
 
 
 
 
 
PARADIGMAS DE LINGUAGENS 2 
 
 
LINGUAGENS DE PROGRAMAÇÃO 
 
1. É um método padronizado para expressar instruções para um computador; 
2. É um conjunto de regras sintáticas e semânticas usadas para definir um programa de 
computador; 
3. O conjunto de palavras (tokens), compostos de acordo com essas regras, constituem o 
código fonte de um software. Esse código fonte é depois traduzido para código de 
máquina, que é executado pelo processador. 
 
Um compilador é um programa de computador que, a partir de um código fonte escrito em 
uma linguagem compilada, cria um programa semanticamente equivalente, porém escrito em 
outra linguagem, a linguagem alvo. 
 
 
 
 
 
 
 
 
PROCESSO DE DESENVOLVIMENTO DE PROGRAMAS 
 
Um processo de desenvolvimento de software é um conjunto de atividades, parcialmente 
ordenadas, com a finalidade de obter um produto de software (Engenharia de Software). 
 
Principais atividades do desenvolvimento de software: 
 
Análise de Requisitos � Projeto � Codificação � Testes � Implantação � Manutenção 
 
 
 
 
ESTILO E QUALIDADE DE PROGRAMAS 
 
Cada linguagem de programação aceita um estilo ou grupo de normas para que você escreva 
o programa. Os estilos mais comuns hoje em dia são: 
 
• Programação Procedural 
Nesse tipo de programação o programa é dividido em partes menores para facilitar a 
resolução do problema como um todo. Essas partes menores podem ser chamadas de 
procedimentos, de funções ou rotinas. 
• Programação Orientada a Objetos 
A idéia principal é fazer com que o programa e seu funcionamento se pareçam ao máximo 
com o mundo real. Na POO cada uma das funções ou procedimentos do programa estão 
dentro de uma classe. 
 
A qualidade de software abrange uma série de características: 
• Confiabilidade 
• Funcionabilidade 
• Usabilidade 
• Eficiência 
• Manutenibilidade 
• Portabilidade 
 
 
 
Linguagem fonte Linguagem alvo COMPILADOR 
PARADIGMAS DE LINGUAGENS 3 
 
 
TIPOS DE DADOS 
 
Variáveis são os elementos básicos que um programa manipula. Uma variável é um espaço 
reservado na memória do computador para armazenar um tipo de dado determinado. 
 
Toda variável possui uma série de informações: 
• Nome: uma identificação. 
• Escopo: onde a variável é visível. 
• Tipo: especificação de classe de valores, operadores e operações válidas sobre o tipo. 
• Valor: conteúdo cuja interpretação depende do tipo. 
 
Tipos de dados é uma combinação de valores e de operações que uma variável pode 
executar, o que pode variar conforme o sistema operacional e a linguagem de computador. São 
utilizados para indicar ao compilador as conversões necessárias para obter os valores em 
memória durante a construção do programa. A amarração do tipo com a variável pode ser: 
• Estática: 
⇒ Explícita: por declaração 
⇒ Implícita: indicado pela primeira ocorrência 
• Dinâmica: 
⇒ Em função do valor corrente. 
 
 
Tipos de Dados Primitivos 
 
• char: Caracter: O valor armazenado é um caractere. Caracateres geralmente são 
armazenados em códigos (usualmente o código ASCII). 
• int: Número inteiro é o tipo padrão e o tamanho do conjunto que pode ser representado 
normalmente depende da máquina em que o programa está rodando. 
• float: Número em ponto flutuante de precisão simples. São conhecidos normalmente como 
números reais. 
• double: Número em ponto flutuante de precisão dupla. 
• void: Este tipo serve para indicar que um resultado não tem um tipo definido. Uma das 
aplicações deste tipo em C é criar um tipo vazio que pode posteriormente ser modificado 
para um dos tipos anteriores. 
 
Tabela: alguns tipos de dados definidos pelo Padrão ANSI C, seus tamanhos em bytes e suas 
faixa de valores: 
 
Tipo Tamanho em Bytes Faixa Mínima 
char 1 -127 a 127 
unsigned char 1 0 a 255 
int 4 -2.147.483.648 a 2.147.483.647 
unsigned int 4 0 a 4.294.967.295 
short int 2 -32.768 a 32.767 
unsigned short int 2 0 a 65.535 
long int 4 -2.147.483.648 a 2.147.483.647 
unsigned long int 4 0 a 4.294.967.295 
float 4 Seis digitos de precisão 
double 8 Dez digitos de precisão 
 
 
PARADIGMAS DE LINGUAGENS 4 
 
Tipo String de Caracteres 
 
É um tipo de dados composto definido através de um array (sequência) de caracteres. 
Exemplos (literais ou constantes): 
“Programação continua no 2º semestre!” 
“Amélia” 
 
Sintaxe na linguagem C: char nome[NUM-MAX] 
 
Ex: char descricao[20]; 
 
 
Tipo Ordinais Definidos pelo Usuário 
 
Muitas vezes é necessário manipular dados complexos que seriam difíceis de representar 
usando apenas os tipos primitivos (char, int, double, float). Na linguagem C o tipo de dado 
struct permite a definição deste tipo de dado. A struct é um tipo de dados resultante do 
agrupamento de várias variáveis nomeadas, não necessariamente similares, numa só. Ex.: 
struct mystruct 
{ 
 int a, b, c; 
 double d, e, f; 
 char string[25]; 
}; 
 
 
Tipo Array 
 
Arrays, também chamados vetores ou ainda matrizes, são uma maneira de armazenar vários 
dados num mesmo nome de variável através do uso de índices numéricos. Declaramos vetores 
de maneira muito semelhante à declaração de variáveis normais. A única diferença é que 
depois do nome da variável deve ser informada a quantidade de elementos do vetor. Para 
declarar um vetor chamado vetorx, com cinco elementos inteiros, escrevemos: 
 int vetorx[5]; /*Declaração */ 
vetorx[0] = 3; /*Inicializando uma ocorrência */ 
int x = vetorx[2]; /*Copiando do vetor para variável */ 
 
 
Tipo Ponteiro 
 
Um ponteiro é simplesmente uma variável que armazena o endereço de outra variável. Em C, 
para declarar um ponteiro especificamos o tipo da variável para a qual ele aponta e seu nome 
precedido por asterisco: 
 
 int *ponteiro; /* declaraum ponteiro para um inteiro */ 
 
e para para atribuir e acessar endereços de memória, a linguagem oferece dois operadores 
unários: & (endereço de) 
 * (conteúdo do endereço apontado por) 
Ex.: 
 int a; /* declara variável tipo inteiro */ 
 int *p; /* declara variável tipo ponteiro para inteiro */ 
 a = 5; /* a recebe o valor 5 */ 
 p = &a; /* p recebe o endereço de a */ 
 *p = 6; /* conteúdo do endereço apontado por p recebe 6 */ 
 
 
PARADIGMAS DE LINGUAGENS 5 
 
 
EXPRESSÕES E INSTRUÇÕES DE ATRIBUIÇÃO 
 
 
Expressões Aritméticas 
 
São aquelas que quando avaliadas produzem resultados numéricos. Constituem na aplicação 
de operadores aritméticos a operandos que têm valores numéricos. 
Nas linguagens de programação nós podemos executar operações aritméticas usando 
variáveis e constantes. Algumas operações mais comuns são: 
 
+ adição 
- subtração 
* multiplicação 
/ divisão 
% resto (módulo) 
Estas operações podem ser usadas como mostram os exemplos abaixo, assumindo que as 
variáveis necessárias já estão declaradas: 
 
 celsius = (fahrenheit - 32) * 5.0 / 9.0; 
 forca = massa * aceleracao; 
 i = i + 1; 
 
 
Precedência de Operadores 
 
Assim como em álgebra, há uma ordem de precedência de operadores. As expressões em 
parênteses são avaliadas primeiro, seguidos por exponenciação, multiplicação, divisão, adição 
e subtração. 
Quando operações adjacentes têm a mesma precedência, elas são associadas da esquerda 
para a direita. Assim, a * b / c * d % e é o mesmo que ((((a * b) / c) * d) % e). 
 
 
A Operação de Resto (%) 
 
Esta operação é usada quando queremos encontrar o resto da divisão de dois inteiros. Por 
exemplo, 22 dividido por 5 é 4, com resto 2. Em C , a expressão 22 % 5 terá valor 2. 
 
 
 
Conversões de Tipo 
 
Uma conversão de estreitamento é aquela que converte um objeto para um tipo que não 
pode incluir todos os valores do tipo original. Por ex.: 
 
double para float, ou double para int. 
 
Uma conversão de alargamento é aquela na qual um objeto é convertido para um tipo que 
pode incluir pelo menos aproximações para todos os valores do tipo original. Por ex.: 
 
float para double, int para double. 
 
São sempre seguras mais seguras. 
 
 
PARADIGMAS DE LINGUAGENS 6 
 
 
Uma coerção é uma conversão de tipo implícita, ou seja, o compilador realiza 
automaticamente as conversões necessárias. Por ex. em C: 
 
int a, b; 
float c; 
a = b * c; 
 
Uma conversão de tipo explícita, também conhecida como “casting”, deve ser declarada pelo 
programador no código. Por ex. em C: 
 
(int) speed /* sendo speed do tipo float */ 
 
 
 
Expressões Relacionais e Booleanas 
 
Um operador relacional compara os valores de seus dois operandos. 
Uma expressão relacional tem dois operandos e um operador relacional. 
Operadores relacionais sempre têm menor precedência do que os operadores aritméticos. Ex.: 
 
c = a + 1 > 2 * b; 
 
 
 
 
 
 
 
 
 
 
 
As expressões booleanas consistem em variáveis, em expressões relacionais e em operadores 
booleanos, que normalmente incluem aquelas para operações AND, OR e NOT. 
 
 
 
 
 
 
 
 
 
Instruções de Atribuição 
 
Sintaxe geral: <variável_alvo> <operador_atribuição> <expressão> 
 
Operadores de atribuição: = FORTRAN, BASIC, PL/I, C, C++, Java 
:= ALGOLs, Pascal, Ada 
 
Operadores Compostos: a = a + b pode ser escrito como a += b 
 
 
Operadores Unários: cont++ (cont incrementado) 
cont-- (cont decremantado) 
 
 
PARADIGMAS DE LINGUAGENS 7 
 
ESTRUTURAS DE CONTROLE 
 
 
Estruturas Condicionais 
 
Estrutura também conhecida como de decisão ou seleção, se caracteriza por executar 
determinados códigos de programação dependendo da veracidade de uma condição. Esta 
estrutura se subdivide em outras duas estruturas. 
 
 
Estrutura Condicional Simples 
 
Nesta estrutura, a condição irá determinar a execução ou não de um determinado comando. 
 
Descrição Narrativa: Se fizer sol então vou à praia. 
 
Linguagem Algorítmica: Se tempo = sol então 
Vou à praia 
Fim-se. 
 
 
Estrutura Condicional Composta 
 
Nesta , a condição ira determinar qual comando será executado dentre dois listados. 
Na estrutura simples temos “Se.....Então”, e neste caso teremos “Se.....Então.....Senão”. 
 
Descrição Narrativa: Se fizer sol então vou à praia senão jogarei cartas. 
 
Linguagem Algorítmica: Se tempo = sol então 
Vou à praia 
Senão 
Jogarei cartas 
Fim-se. 
 
Estrutura Condicional Composta (case) 
Esta estrutura é muito utilizada quando é necessário utilizar o comando if repetidas vezes para 
testar uma mesma variável. 
 
Descrição Narrativa: Caso o mês seja igual a 1 então é janeiro, caso igual a 2 então é 
fevereiro, caso igual a 3 então é março e assim por diante. 
 
Linguagem Algorítmica: Caso mês seja 
1: mesext = Janeiro; 
2: mesext = Fevereiro; 
3: mesext = Março; 
4: mesext = Abril; 
5: mesext = Maio; 
6: mesext = Junho; 
7: mesext = Julho; 
8: mesext = Agosto; 
9: mesext = Setembro; 
10: mesext = Outubro; 
11: mesext = Novembro; 
12: mesext = Dezembro; 
Fim-caso. 
PARADIGMAS DE LINGUAGENS 8 
 
 
Estruturas de Repetição 
 
Essa estrutura trabalha com a repetição de comandos até que condições se satisfaçam. Esta 
estrutura e subdividida em três sub-estruturas: 
 
 
Estrutura de repetição com teste no início (comando while-do) 
 
Os comandos contidos neste tipo de estrutura podem não ser executados nenhuma vez, já que 
o mesmo testa a condição no início da estrutura. 
 
Descrição Narrativa: Enquanto não fizer sol, faça: ficarei em casa. 
 
Linguagem Algorítmica: Enquanto tempo <> sol faça 
Ficar em casa 
Olhar o tempo 
Fim-enquanto. 
Agora vou à praia 
 
Enquanto o tempo for diferente de sol ou seja, não tiver sol, (condição verdadeira) a estrutura 
irá executar os comandos contidos nela, e este se repetirá até que o tempo seja igual a sol, 
pois quando o tempo for igual a sol a condição será falsa, somente assim poderemos sair da 
estrutura de repetição while e executar o comando “Agora vou à praia”. 
 
 
Estrutura de repetição com teste no final (comando repeat-until) 
 
Permite a repetição dos comandos contidos nesta estrutura até que a mesma seja verdadeira. 
Neste tipo de estrutura o comando sempre será executado pelo menos uma vez. 
 
Descrição Narrativa: Ficarei em casa até que faça sol. 
 
Linguagem Algorítmica: Repita 
Ficarei em casa 
Até que tempo = sol 
 Agora vou à praia 
 
 
Estrutura de repetição automática (comando for) 
 
Permite que a repetição dos comandos contidos nesta estrutura seja repetida um número 
específico de vezes. 
 
Descrição Narrativa: Imprimir na tela os números de 1 a 100. 
 
Linguagem Algorítmica: Para NUM = 1 até 100 faça 
Imprimir NUM 
Fim-para. 
 
 
Neste exemplo ao iniciar o comando Para, a variável NUM receberá o valor do primeiro número 
da condição (no caso 1) e será impresso na tela. Quando esse comando se repetir o NUM 
passará a ter o valor de NUM + 1, ou seja 2, e será impresso novamente na tela. Isso se 
repetirá até que NUM seja igual a 100. 
 
 
 
PARADIGMAS DE LINGUAGENS 9 
 
 
SUBPROGRAMAS 
 
Procedimentos 
 
Procedimentos (ou sub-rotinas) e funções são módulos hierarquicamente subordinados a um 
algoritmo, comumente chamado de módulo principal. Da mesma forma um procedimento ou 
uma função pode conter outras procedimentos e funções aninhadas. 
A declaração de um procedimento ou função é constituídade um cabeçalho, que a identifica e 
contém seu nome e uma lista de parâmetros formais, e de um corpo que contém declarações 
locais e os comandos. 
 
Declaração de procedimento: 
 
procedimento NOME (lista-de-parâmetros-formais) 
declarações dos objetos locais ao procedimento 
comandos do procedimento 
fim procedimento 
 
 
Chamada de procedimento: 
 
NOME (lista-de-parâmetros-atuais) 
 
 
 
Funções 
 
As funções têm a característica de retornar ao algoritmo que as chamou um valor associado ao 
nome da função. 
 
Declaração de função: 
 
função tipo NOME (lista-de-parâmetros-formais) 
declarações dos objetos locais a função 
comandos da função 
fim função 
 
 
Chamada da função: 
 
NOME (lista-de-parâmetros-atuais) 
 
 
Como esta função irá retornar um valor, este pode ser atribuído a alguma variável, contanto 
que esta seja de tipo compatível. 
 
A ← NOME (lista-de-parâmetros-atuais) 
 
Ao terminar a execução dos comandos de uma sub-rotina ou função, o fluxo de controle 
retorna ao comando seguinte àquele que provocou a chamada. 
 
 
 
 
 
PARADIGMAS DE LINGUAGENS 10 
 
Parâmetros 
 
A vinculação entre módulos pode ser feita através da transferência ou passagem de 
parâmetros, que associam parâmetros atuais com parâmetros formais. 
 
Parâmetros Atuais: 
São os parâmetros passados na chamada do procedimento ou função. 
 
Parâmetros Formais: 
São os parâmetros usados na declaração do procedimento ou função. 
 
 
 
Métodos de Passagem de Parâmetros 
 
Dentre os modos de transferência de parâmetros pode-se destacar a passagem por valor e a 
passagem por referência. 
 
Na passagem de parâmetros por valor, as alterações feitas nos parâmetros formais, dentro do 
procedimento ou função, não se refletem nos parâmetros atuais. O valor do parâmetro atual é 
copiado no parâmetro formal, na chamada do procedimento ou função. 
 
/* Exemplo em C de passagem de parametro por valor */ 
#include <stdio.h> 
float sqr(float num) { 
 num = num * num; 
 return num; 
} 
/*----------------------*/ 
int main() { 
 float num, result; 
 printf("Entre com um numero: \n"); 
 scanf("%f", &num); 
 result = sqr(num); 
 printf("Resultado = %f \n", result); 
 printf("Valor atual de num = %f \n", num); 
 return 0; 
} 
 
 
Na passagem de parâmetros por referência, a toda alteração feita num parâmetro formal 
corresponde a mesma alteração feita no seu parâmetro atual associado. 
 
/* Exemplo em C de passagem de parametro por referencia */ 
#include <stdio.h> 
void troca(int *campoa, int *campob) { 
 int temp; 
 temp = *campoa; 
 *campoa = *campob; 
 *campob = temp; 
} 
/*-----------------------------------*/ 
int main() { 
 int numa, numb; 
 printf("Entre com o numeroa: \n"); 
 scanf("%d", &numa); 
 printf("Entre com o numerob: \n"); 
 scanf("%d", &numb); 
 troca(&numa, &numb); 
 printf("Valor apos a troca de num.a=%d e num.b=%d \n", numa, numb); 
 return 0; 
} 
 
 
PARADIGMAS DE LINGUAGENS 11 
 
 
PROGRAMAÇÃO ESTRUTURADA 
 
Introdução 
 
A programação imperativa é um paradigma que descreve a computação como ações 
(comandos) e estados (variáveis) de um programa. O nome do paradigma, Imperativo, está 
ligado ao tempo verbal imperativo, onde o programador diz ao computador: faça isso, depois 
isso, depois aquilo... Este paradigma de programação se destaca pela simplicidade, uma vez 
que todo ser humano, ao se programar, o faz imperativamente, baseado na ideia de ações e 
estados, quase como um programa de computador. 
 
Em linguagens puramente imperativas, como Assembly, é muito fácil o programador criar 
códigos de difícil leitura, pois esse tipo de linguagem possui o que se chama de saltos (jumps) 
em sua estrutura. Estes saltos funcionam da seguinte forma: o programador define uma 
marcação (label) no código e depois, a partir de qualquer parte do programa, ele pode executar 
um desvio de fluxo de execução (salto) para aquela marcação. Pode ser que à primeira vista 
isso não tenha problema, contudo, na depuração do código, o programador fica em apuros com 
tantas marcações e saltos, pois isso dificulta o entendimento do fluxo de execução do 
programa. 
 
Neste contexto, surge a programação estruturada, como uma forma de possibilitar que o 
programador tenha maior controle sobre sobre o fluxo de execução do programa. 
A Programação estruturada orienta os programadores para a criação de estruturas simples em 
seus programas, usando as subrotinas e as funções. Foi a forma dominante na criação de 
software entre a programação linear e a programação orientada por objetos. 
Este paradigma preconiza que todos os programas possíveis podem ser reduzidos a apenas 
três estruturas: seqüência, decisão e iteração: 
 
• Estruturas de sequência: 
⇒ Onde uma tarefa é executada após a outra, linearmente. 
• Estruturas de decisão: 
⇒ Onde, a partir de um teste lógico, determinado trecho de código é excutado, ou não. 
• Estruturas de iteração: 
⇒ Onde, a partir de um teste lógico, determinado trecho de código é repetido por um 
número finito de vezes. 
 
 
No trecho de código Python a seguir, podemos reparar o emprego das três estruturas citadas: 
 
1. print "Tabuada!" 
2. a = int(raw_input("Entre com a tabuada que deseja [0-9]: ")) 
3. print # Apenas para deixar uma linha em branco. 
4. 
5. if 0 <= a <= 9: 
6. for i in range(10): 
7. print "%d x %d = %.2d" % (a, i, a * i) 
8. else: 
9. print "Valor deve ser entre ZERO e NOVE!" 
 
 
 
PARADIGMAS DE LINGUAGENS 12 
 
 
Nas linhas 1, 2 e 3 temos um exemplo de uma estrutura de sequência. Cada linha é executada 
após a anterior, começando da primeira. 
Entre as linhas 5 e 9, temos uma estrutura de decisão, exemplificada pelo comando if. 
Na linha 5 este comando executa um teste lógico. Caso o valor seja verdadeiro, as linhas 6 e 7 
serão executadas. 
Caso contrário, o fluxo se desvia para a linha 8, que executará a linha 9. 
Nas linhas 6 e 7, temos uma estrutura de iteração. Na linha 6 está declarada a estrutura, que 
regula quantas vezes a linha 7 será executada. 
 
Apesar de ter sido sucedida pela programação orientada por objetos, pode-se dizer que a 
programação estruturada ainda é marcantemente influente, uma vez que grande parte das 
pessoas ainda aprendem programação através dela. 
 
 
 
 
Linguagens 
 
C; 
 
Basic; 
 
Pascal; 
 
Cobol; 
 
 
 
 
Vantagens 
 
• Os problemas podem ser quebrados em vários subproblemas. 
• É fácil de entender e a boa legibilidade e a boa compreensão da estrutura deste paradigma 
motivam os programadores a iniciarem a programação pelo modelo estruturado. 
 
 
 
 
Desvantagens 
 
• Os dados são separados das funções. 
• Mudanças na estrutura dos dados acarreta alteração em todas as funções relacionadas. 
• Gera sistemas difíceis de serem mantidos. 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
PARADIGMAS DE LINGUAGENS 13 
 
PROGRAMAÇÃO ORIENTADA A EVENTOS 
 
Conceitos 
 
Programação orientada a eventos é um paradigma de programação. Diferente de programas 
tradicionais que seguem um fluxo de controle padronizado, o controle de fluxo de programas 
orientados a evento são guiados por indicações externas, chamadas eventos. Sua aplicação é 
grande no desenvolvimento de sistemas de interface com o usuário. 
 
A programação orientada a eventos baseia-se na inexistência de um algoritmo principal que, 
em uma programação tradicional (imperativa), corresponde a um programa com início e fim. 
 
Em um programa orientado a eventos, tudo o que temos são formuláriosque contém vários 
controles e a cada ação do usuário (a que denominamos evento), o programa responde com a 
execução de um procedimento. 
 
Esse método é bastante flexível e permite um sistema assíncrono. 
 
As telas do sistema operacional Windows são um bom exemplo disso: quando clicamos no 
menu Iniciar da barra de ferramentas do Windows ele nos responde com um menu suspenso. 
Portanto, podemos clicar em botões, colocar o foco nos campos de digitação, abrir (carregar) 
formulários / janelas, etc. Apenas com esses exemplos já executamos três eventos: 
 
• Clicar 
• Carregar 
• Colocar foco 
 
Programas orientados a evento geralmente consistem em vários pequenos tratadores, 
subprogramas que processam os eventos para produzir respostas, e um disparador, que 
invoca os pequenos tratadores. Uma alternativa consiste em disparar os tratadores por eles 
próprios, criando um efeito de evento em cascata. 
 
Exemplos de linguagens orientadas a eventos: Visual Basic, Object Pascal. 
 
Formulário: uma superfície retangular que serve para modelar o fundo de imagem e para 
receber diversos componentes. Normalmente define uma janela. 
 
Componente: um objeto que pode ser anexado a um formulário para acrescentar uma 
determinada funcionalidade. 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
PARADIGMAS DE LINGUAGENS 14 
 
Exemplo de uma aplicação simples em Visual Basic 6: 
 
 
 
 
 
 
 
 Criando um formulário com o 
 nome de “Form1” e um com- 
 ponente button com o nome 
 de “Command1” 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 Visualizando o evento 
 “Click” do componente 
 button 
 
 
 
 
 
 
 
 
 
 
 
 
 
No procedimento referente ao evento “Click” do componente button, adiciona-se o código que 
deve ser executado quando o evento ocorrer: 
 
Private Sub Command1_Click() 
 MsgBox "Hello, World!" 
End Sub 
 
 
Quando o programa é executado e o usuário dá um clique 
No botão “Command1”, a seguinte mensagem é exibida 
como resultado do código acima. 
 
 
 
PARADIGMAS DE LINGUAGENS 15 
 
TIPOS ABSTRATOS DE DADOS (TAD) 
 
Fundamentalmente, um Tipo Abstrato de Dados - TAD - significa um conjunto de dados e um 
conjunto de operações que serão efetuadas sobre esses dados. Nao se leva em conta detalhes 
de implementação. Por exemplo, se criarmos uma variável do tipo fruta, ela poderia assumir os 
valores pera, maçã, etc., e as operações que poderíamos fazer sobre esta variável seriam 
comprar, lavar, etc. 
 
Uma biblioteca pode ser vista como um tipo abstrato de dados. Ela é composta de: 
• Funcionários 
• Usuários 
• Livros 
• Estantes 
• Horário de funcionamento, etc... 
 
As operações adequadas a uma biblioteca seriam: 
• Catalogar livro no acervo 
• Retirar livro do acervo 
• Catalogar usuário 
• Retirar Livro 
• Devolver livro, etc... 
 
Evidentemente modelar uma biblioteca como um tipo abstrato de dados pode ser muito 
complexo. No entanto ela serve como exemplo de que é possível pensar na sua organização e 
em operações que possam ser realizadas sobre ela independentemente da sua 
implementação. 
 
 
Encapsulamento 
 
Em vez de ver um programa como uma única entidade grande e monolítica, o encapsulamento 
permite que você o divida em várias partes menores e independentes. Cada parte possui 
implementação e realiza seu trabalho independentemente das outras partes. O 
encapsulamento mantém essa independência, ocultando os detalhes internos, ou seja, a 
implementação de cada parte, através de uma interface externa. 
 
O encapsulamento permite a visualização de uma entidade de software como uma caixa preta. 
Você sabe o que a caixa preta faz, pois conhece sua interface externa e, simplesmente, envia 
mensagens para a caixa preta, não se preocupando com o que acontece dentro dela; você 
apenas se preocupa com o fato de que isso aconteça. 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
PARADIGMAS DE LINGUAGENS 16 
 
 
Uma interface lista os serviços fornecidos por um componente. A interface é um contrato com o 
mundo exterior, que define exatamente o que uma entidade externa pode fazer com o objeto. 
Uma interface é o painel de controle do objeto. 
 
Vantagens de encapsular: 
 
• Independência, que significa que você pode reutilizar o objeto em qualquer lugar. Quando 
você encapsular corretamente seus objetos, eles não estarão vinculados a nenhum 
programa em particular. Para usar o objeto em qualquer lugar, você simplesmente exerce 
sua interface. 
• O encapsulamento permite que você torne transparentes as alterações em seu objeto. 
Desde que você não altere sua interface, todas as alterações permanecerão transparentes 
para aqueles que estiverem usando o objeto. 
• Usar um objeto encapsulado não causará efeitos colaterais inesperados com o restante do 
programa. Como o objeto tem implementação independente, ele não terá nenhuma outra 
interação com o restante do programa, além de sua interface. 
 
 
As três características do encapsulamento eficaz são: 
 
• Abstração 
Abstração é o processo de simplificar um problema difícil. Quando se começa a resolver um 
problema, você não se preocupa com cada detalhe. Em vez disso, você o simplifica, 
tratando apenas dos detalhes pertinentes a uma solução. A abstração possui duas 
vantagens. Primeiro, ela permite que você resolva um problema facilmente. Mais 
importante, a abstração o ajuda a obter reutilização. 
 
• Ocultação da implementação 
Você também precisa ocultar as implementações internas de seus objetos. A ocultação da 
implementação tem duas vantagens: 
- Ela protege o seu objeto de seus usuários; 
- Ela protege os usuários de seu objeto do próprio objeto. 
 
• Divisão da responsabilidade 
Divisão da responsabilidade correta significa que cada objeto deve executar uma função – 
sua responsabilidade – e executá-la bem. 
Assim que dois objetos começam a fazer a mesma tarefa, você sabe que não tem uma 
divisão correta de responsabilidades. Quando aparecer a lógica redundante é preciso 
refazer o código. O encapsulamento é como o gerente eficiente. Como no mundo real, 
conhecimento e responsabilidade precisam ser delegados para aqueles que sabem como 
fazer o trabalho da melhor forma possível. 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
PARADIGMAS DE LINGUAGENS 17 
 
PROGRAMAÇÃO ORIENTADA A OBJETOS 
 
A orientação a objetos é um paradigma de análise, projeto e programação de sistemas de 
software baseado na composição e interação entre diversas unidades de software chamadas 
de objetos. É tida como a melhor estratégia para se eliminar a dificuldade no processo de 
modelar o mundo real do domínio do problema em um conjunto de componentes de software 
que seja o mais fiel na sua representação. 
 
A análise e projeto orientados a objetos têm como meta identificar o melhor conjunto de objetos 
para descrever um sistema de software. O funcionamento deste sistema se dá através do 
relacionamento e troca de mensagens entre estes objetos. 
 
Na programação orientada a objetos, implementa-se um conjunto de classes que definem os 
objetos presentes no sistema de software. Cada classe determina: 
• O comportamento - definido nos métodos (ou operações); 
• Os estados possíveis - através dos atributos; 
• O relacionamento com outros objetos. 
 
C♯, VB.NET, Java, Python, Ruby exemplos de linguagens de programação orientadas a 
objetos. 
 
 
 
Classe 
 
• Classe representa um conjunto de objetos com características semelhantes. 
• Classe de objetos: descreve umgrupo de objetos com propriedades (atributos) 
semelhantes, o mesmo comportamento (métodos) e os mesmos relacionamentos com 
outros objetos. Por exemplo: pessoa, animal, processo (programa) podem ser classes: 
⇒ Cada pessoa tem idade, QI, peso. 
⇒ Cada animal de idade, raça, peso 
⇒ Cada processo tem um dono, prioridade, lista de recursos 
• Por que a existência de classes? 
⇒ Capacidade de generalizar casos semelhantes. 
⇒ Definições comuns como nome dos atributos são armazenados uma vez por classe. 
⇒ Os métodos ou operações são escritos uma vez por classe, o que possibilita a 
reutilização do código. 
 
 
 
Objeto 
 
• Um objeto pode ser real ou abstrato, por exemplo: 
⇒ Uma nota fiscal. 
⇒ Uma organização. 
⇒ Uma peça de um motor. 
⇒ Um icone na tela. 
⇒ Um processo de preenchimento de um pedido de compras. 
• Todos objetos tem identidade e são distinguíveis: 
⇒ Duas maçãs da mesma cor, formato e textura continuam sendo maçãs distintas. 
⇒ Dois gêmeos idênticos: mesmo caso 
 
PARADIGMAS DE LINGUAGENS 18 
 
• Instância de objeto: quando nos referimos a uma coisa exata, com precisão. Por exemplo: 
⇒ Nota fiscal → classe de objeto 
⇒ Nota fiscal número 123456 → instância do objeto nota fiscal 
• Em análise e projeto baseados em objetos podemos definir um objeto como: 
"É qualquer coisa, real ou abstrata, sobre a qual armazenamos dados e operações (ou 
métodos) que manipulam os dados". 
 
 
Atributos 
 
• É um valor de dado guardado pelos objetos de uma classe. 
• Cada nome de atributo é único dentro da classe. 
• Cada atributo possui um valor para cada instância de objeto. 
Classe e atributos Instâncias de objeto da classe PESSOA 
 
 
 
 
 
 
 
 
Operações e Métodos 
 
• Operação é uma função ou transformação que pode ser aplicada a uma classe de objetos. 
• Todos objetos de uma classe compartilham as mesmas operações. 
• Exemplo: 
⇒ Contratar, demitir, pagar-dividendos → operações da classe "empresa" 
⇒ Abrir, fechar, minimizar → operações da classe "janela" (Windows) 
• Um método é a implementação de uma operação para uma classe. 
• Métodos especificam a maneira como as operações são codificadas no software. 
 
 
Herança 
 
• Na construção de software usando a orientação a objeto: 
1. Criam-se classes para atenderem ao caso mais geral - as super-classes. 
2. Para tratar casos especiais adicionam-se classes mais específicas - as sub-classes - 
que herdam da primeira classe. 
3. Essas novas classes serão habilitadas a usar todos os métodos e atributos da classe 
original. 
• Em outras palavras: "um objeto pertencente a uma sub-classe pode usar um método ou 
atributo de sua super-classe como se aquele método ou atributo tivesse sido definido 
através da sub-classe". 
• Exemplo: super-classe sub-classe 
 
 
 
 
 avião.Fazer-Curva(Curso); 
 planador.Soltar-Cabo; 
 planador.Fazer-Curva(Curso) 
 avião.Soltar-Cabo; → ERRO!!! classe AVIÃO não tem esse método 
 
Mensagem 
 
• Uma mensagem é a maneira pela qual um "objeto emissor" dirige para um "objeto alvo" 
uma solicitação para que o "objeto alvo"aplique um de seus métodos. 
 PESSOA 
Nome 
Idade 
CPF 
 (PESSOA) 
João 
32 
00043298738 
 (PESSOA) 
Maria 
26 
93134580019 
AVIÃO 
Método: Fazer-Curva 
Atributo: Curso 
PLANADOR 
Método: Soltar-Cabo 
Atributo: Se-Conectado

Outros materiais