Buscar

Livro Texto 1 - Paradigmas de Linguagens

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 32 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 32 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 32 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
Professor conteudista: Rodrigo de Oliveira Plotze
Sumário
Paradigmas de Linguagens
Unidade I
1 INTRODUÇÃO AOS PARADIGMAS DE LINGUAGENS ............................................................................1
2 TIPOS DE DADOS ................................................................................................................................................4
2.1 Tipos de dados primitivos ....................................................................................................................4
2.2 Tipos string de caracteres ....................................................................................................................7
2.3 Tipos ordinais definidos pelo usuário ..............................................................................................8
2.4 Tipos array ..................................................................................................................................................9
2.5 Tipos registro ...........................................................................................................................................11
2.6 Tipos ponteiro .........................................................................................................................................11
3 EXPRESSÕES E INSTRUÇÕES DE ATRIBUIÇÃO ..................................................................................... 12
3.1 Expressões aritméticas ....................................................................................................................... 12
3.2 Conversões de tipo .............................................................................................................................. 14
3.3 Expressões relacionais e booleanas ............................................................................................... 15
3.4 Instruções de atribuição .................................................................................................................... 15
4 ESTRUTURAS DE CONTROLE ....................................................................................................................... 17
4.1 Estrutura condicional ......................................................................................................................... 17
4.2 Estruturas de repetição ...................................................................................................................... 20
5 SUBPROGRAMAS ............................................................................................................................................ 21
6 CONSIDERAÇÕES FINAIS .............................................................................................................................. 28
Unidade II
7 PROGRAMAÇÃO ESTRUTURADA ............................................................................................................... 34
8 PROGRAMAÇÃO ORIENTADA A EVENTOS ............................................................................................. 42
9 PROGRAMAÇÃO ORIENTADA A OBJETOS .............................................................................................. 46
10 CONSIDERAÇÕES FINAIS ............................................................................................................................ 60
1
PARADIGMAS DE LINGUAGENS
Re
vi
sã
o:
 C
ris
tin
a 
- 
Di
ag
ra
m
aç
ão
: F
ab
io
 -
 2
8/
01
/1
1 
-|
|-
 2
ª R
ev
isã
o:
 C
ris
tin
a 
- 
Co
rr
eç
ão
: F
ab
io
 -
 0
3/
02
/2
01
1
Unidade I5
10
15
20
25
30
35
1 INTRODUÇÃO AOS PARADIGMAS DE 
LINGUAGENS
Nesta primeira unidade você estudará os principais conceitos 
que fazem parte dos paradigmas de linguagens. Conhecerá sobre 
os tipos de dados, as expressões e instruções de atribuição, as 
estruturas de controle e os subprogramas.
Um paradigma de linguagem, ou um paradigma de 
programação, representa a metodologia, ou filosofia, adotada 
pelo programador para o desenvolvimento de um programa de 
computador.
Inicialmente, é importante entender sobre o processo de 
desenvolvimento de programas de computador. Esta máquina 
é capaz de executar ações que são especificadas por meio dos 
programas. Assim, para que um computador realize tarefas, é 
necessário que os programas sejam escritos em uma linguagem 
que ele entenda. Essa linguagem é conhecida como linguagem 
de programação.
Mas antes de escrever um programa de computador, 
é fundamental que se crie uma forma de representação, 
denominada algoritmo. Um algoritmo pode ser entendido como 
uma descrição, ou sequência de passos, que deverá ser seguida 
pelo computador para realização de uma determinada tarefa. 
Essa descrição é essencial para a construção dos programas, 
e uma das formas mais utilizada para a representação de 
algoritmos é conhecida como pseudocódigo, sendo também 
chamada de português estruturado (ou portugol).
2
Unidade I
Re
vi
sã
o:
 C
ris
tin
a 
- 
Di
ag
ra
m
aç
ão
: F
ab
io
 -
 2
8/
01
/1
1 
-|
|-
 2
ª R
ev
isã
o:
 C
ris
tin
a 
- 
Co
rr
eç
ão
: F
ab
io
 -
 0
3/
02
/2
01
1
Para ilustrar os conceitos de algoritmos e programas, 
considere o seguinte problema: desenvolver um programa capaz 
de realizar a soma de três números inteiros informados pelo 
usuário e apresentar o resultado na tela. O trecho de código 
abaixo apresenta a solução em linguagem algorítmica:
1 algoritmo “soma três números”
2
3 declare
4 num1, num2, num3 : inteiro
5 Soma : inteiro
6 
7 inicio
8
9 escreva(“Entre com o primeiro número:”)
10 leia(num1)
11 escreva(“Entre com o segundo número:”)
12 leia(num2)
13 escreva(“Entre com o terceiro número:”)
14 leia(num3)
15 Soma <- num1+num2+num3
16 escreva(“Resultado = “, soma)
17 
18 fimalgoritmo
Agora, vamos visualizar como este algoritmo pode ser 
transformado em um programa. Para isso, devemos traduzir este 
trecho de código para a linguagem de programação desejada. O 
trecho de código abaixo apresenta a tradução do algoritmo para 
a linguagem de programação C:
1 #include <stdio.h>
2
3 int main()
4 {
3
PARADIGMAS DE LINGUAGENS
Re
vi
sã
o:
 C
ris
tin
a 
- 
Di
ag
ra
m
aç
ão
: F
ab
io
 -
 2
8/
01
/1
1 
-|
|-
 2
ª R
ev
isã
o:
 C
ris
tin
a 
- 
Co
rr
eç
ão
: F
ab
io
 -
 0
3/
02
/2
01
1
5 int num1, num2, num3;
6 int soma;
7
8 printf(“Entre com o primeiro numero: “);
9 scanf(“%i”,&num1);
10 printf(“Entre com o segundo numero: “);
11 scanf(“%i”,&num2);
12 printf(“Entre com o terceiro numero: “);
13 scanf(“%i”,&num3);
14 soma = num1+num2+num3;
15 printf(“Resultado = %d”, soma);
16
17 return 0;
18 }
Utilizando uma ferramenta de pesquisa na internet, como 
por exemplo, os sites Google, Bing, Yahoo, entre outros, uma 
simples consulta sobre o termo linguagens de programação, 
ou sua variante em inglês programming languages retornará 
alguns milhões de resultados. Com isso, é possível notar como o 
desenvolvimento de programas para computador é um universo 
fascinante, e como podemos utilizar as mais variadas tecnologias 
e metodologias.
As diversas linguagens de programação existentes 
possuem características específicas, por meio das quais os 
programadores constroem os programas. Algumas dessas 
características são fundamentais e estão presentes em 
praticamente todas as linguagens de programação. Dentre 
elas temos:
• tipos de dados – determinam quais tipos de informações 
poderão ser manipuladas pelos programas;
• expressões – permitem a realização de cálculos nos 
programas;
4
Unidade I
Re
vi
sã
o:
 C
ris
tin
a 
- 
Di
ag
ra
m
aç
ão
: F
ab
io
 -
 2
8/
01
/1
1 
-|
|-
 2
ª R
ev
isã
o:
 C
ris
tin
a 
- 
Co
rr
eç
ão
: F
ab
io
 -
 0
3/
02
/2
01
1
• estruturas de controle – especificam as tomadas de 
decisão e repetição;
• subprogramas – permitem a modularização dos 
programas. 
Essas características serão exploradas em detalhes ao longo 
das próximas seções. 
2 TIPOSDE DADOS
Uma das principais funcionalidades de um programa de 
computador é a manipulação de informações. Para isso, é 
necessário que o programador utilize variáveis, cada qual com 
um tipo específico associado. Esses tipos estão relacionados com 
as informações que serão armazenadas e manipuladas.
2.1 Tipos de dados primitivos
Os tipos de dados primitivos representam os tipos mais 
simples de dados e estão presentes em praticamente todas 
as linguagens de programação. Neste conjunto de tipos 
temos:
• inteiro - é o tipo de dados mais comum presente nas 
linguagens de programação. Ele é utilizado para armazenar 
números inteiros, positivos, negativos ou iguais a zero. Em 
geral, é capaz de armazenar números com aproximadamente 
16 bits, o que representa o espaço necessário para armazenar 
essa informação na memória principal;
• ponto-flutuante - permite a manipulação de números 
reais. Um número real é formado por uma parte inteira e 
uma parte decimal. Por exemplo, o número 64,82 (sessenta 
e quatro inteiros e oitenta e dois décimos) é um valor do 
tipo de dados ponto-flutuante 1;
1 Uma característica importante do tipo de dados ponto-flutuante 
está relacionada à precisão. A precisão de um número representa a 
quantidade máxima de casas que este tipo pode armazenar. Na linguagem 
de programação C, por exemplo, o tipo de dados float tem uma precisão de 
seis casas decimais, enquanto o tipo de dados double tem uma precisão de 
dez casas decimais.
5
PARADIGMAS DE LINGUAGENS
Re
vi
sã
o:
 C
ris
tin
a 
- 
Di
ag
ra
m
aç
ão
: F
ab
io
 -
 2
8/
01
/1
1 
-|
|-
 2
ª R
ev
isã
o:
 C
ris
tin
a 
- 
Co
rr
eç
ão
: F
ab
io
 -
 0
3/
02
/2
01
1
• decimal - este tipo de dados é semelhante ao tipo ponto-
flutuante, sendo capaz de armazenar números com 
precisão de duas casas decimais. O tipo de dados decimal 
é indicado para aplicações comerciais e financeiras que 
manipulam informações no formato moeda. Um exemplo 
de valor para este tipo é R$ 50,32 (cinquenta reais e trinta 
e dois centavos). A vantagem de utilizar este tipo de 
dados é a economia de memória para o armazenamento 
da parte decimal;
• booleano - é utilizado para armazenamento de valores 
lógicos, como por exemplo, verdadeiro ou falso. Também 
pode ser empregado para manipular informações do tipo 
sim ou não. A implementação deste tipo de dados é 
realizada utilizado bits;
• caractere - é utilizado para armazenar e manipular 
caracteres dos mais variados formatos. Um caractere 
pode ser, por exemplo, um número, uma letra do alfabeto 
e também pode ser representado por símbolos, tais como 
@, #, $, %, &, entre outros.
O código fonte abaixo apresenta a utilização dos tipos de 
dados primitivos na linguagem de programação Visual C#:
1 using System;
2
3 namespace ParadigmasLinguagens
4 {
5 class Program
6 {
7 static void Main(string[] args)
8 {
9 // tipo inteiro
10 int x = 10;
6
Unidade I
Re
vi
sã
o:
 C
ris
tin
a 
- 
Di
ag
ra
m
aç
ão
: F
ab
io
 -
 2
8/
01
/1
1 
-|
|-
 2
ª R
ev
isã
o:
 C
ris
tin
a 
- 
Co
rr
eç
ão
: F
ab
io
 -
 0
3/
02
/2
01
1
11 int y = -20;
12 int z = 0;
13
14 // tipo ponto-flutuante
15 float p = (float)20.0123456789;
16 double q = 20.0123456789;
17
18 //tipo decimal
19 decimal d = (decimal)55.21;
20
21 //tipo booleano
22 bool b = true;
23
24 //tipo caractere
25 char c1 = ‘a’;
26 char c2 = ‘6’;
27 char c3 = ‘@’;
28
29 //exibir variáveis na tela
30 Console.WriteLine(“Tipo Inteiro”);
31 Console.WriteLine(“X = {0}”, x);
32 Console.WriteLine(“Y = {0}”, y);
33 Console.WriteLine(“Z = {0}\n”, z);
34
35 Console.WriteLine(“Tipo Ponto-Flutuante”);
36 Console.WriteLine(“P = {0}”, p);
37 Console.WriteLine(“Q = {0}\n”, q);
38
39 Console.WriteLine(“Tipo Decimal”);
40 Console.WriteLine(“D = {0}\n”, d);
41
42 Console.WriteLine(“Tipo Booleano”);
43 Console.WriteLine(“B = {0}\n”, b);
44
7
PARADIGMAS DE LINGUAGENS
Re
vi
sã
o:
 C
ris
tin
a 
- 
Di
ag
ra
m
aç
ão
: F
ab
io
 -
 2
8/
01
/1
1 
-|
|-
 2
ª R
ev
isã
o:
 C
ris
tin
a 
- 
Co
rr
eç
ão
: F
ab
io
 -
 0
3/
02
/2
01
1
45 Console.WriteLine(“Tipo Caractere”);
46 Console.WriteLine(“C1 = {0}”, c1);
47 Console.WriteLine(“C2 = {0}”, c2);
48 Console.WriteLine(“C3 = {0}”, c3);
49
50 Console.ReadLine();
51
52 }
53 }
54 }
2.2 Tipos string de caracteres
O tipo de dados string é utilizado para manipular informações 
representadas por uma cadeia de caracteres, especificada por 
uma sequência de caracteres, que podem ser definidos por letras, 
números ou símbolos.
É importante destacar a diferença entre o tipo de dados 
primitivo caractere e o tipo string. No primeiro, armazena-se 
apenas um único caractere por vez, enquanto que, o segundo, 
possibilita a manipulação de uma cadeia de caracteres.
As principais operações que podem ser realizadas com este 
tipo de dados são:
• comparação – em que é possível verificar se uma cadeia 
de caracteres é igual à outra;
• concatenação – que permite a união de duas cadeias de 
caracteres;
• cópia de subcadeias – em que é possível extrais subcadeias 
de caracteres a partir da cadeia original;
• tamanho – faz o retorno do número de caracteres 
presentes na cadeia.
8
Unidade I
Re
vi
sã
o:
 C
ris
tin
a 
- 
Di
ag
ra
m
aç
ão
: F
ab
io
 -
 2
8/
01
/1
1 
-|
|-
 2
ª R
ev
isã
o:
 C
ris
tin
a 
- 
Co
rr
eç
ão
: F
ab
io
 -
 0
3/
02
/2
01
1
Diversas linguagens de programação implementam 
métodos com o objetivo de facilitar a tarefa de manipulação 
de strings. O trecho de código abaixo apresenta algumas dessas 
funcionalidades implantadas na linguagem de programação 
Java. Este código é funcional e pode ser utilizado em qualquer 
ambiente de desenvolvimento para plataforma Java.
1 public class TipoString {
2
3 public static void main(String[] args) {
4
5 String str = “João da Silva”;
6
7 //número de caracteres
8 System.out.println(“Tamanho = “ + str.length());
9
10 //caractere de uma determinada posição
11 System.out.println(“Posição 2 =” + str.charAt(2));
12
13 //comparação
14 System.out.println(str.equals(“José Antônio”));
15
16 //procura em Strings
17 System.out.println(str.indexOf(“Silva”));
18
19 //transforma em maiúsculo
20 System.out.println(str.toUpperCase());
21 }
22
23 }
2.3 Tipos ordinais definidos pelo usuário
Um tipo de dados ordinal representa uma faixa de valores 
possíveis que pode ser associada a um número inteiro positivo. 
9
PARADIGMAS DE LINGUAGENS
Re
vi
sã
o:
 C
ris
tin
a 
- 
Di
ag
ra
m
aç
ão
: F
ab
io
 -
 2
8/
01
/1
1 
-|
|-
 2
ª R
ev
isã
o:
 C
ris
tin
a 
- 
Co
rr
eç
ão
: F
ab
io
 -
 0
3/
02
/2
01
1
Este tipo de dados também é conhecido como enumerador e 
está presente em diversas linguagens de programação. O trecho 
de código abaixo ilustra a utilização de enumeradores na 
linguagem de programação Visual C#:
1 using System;
2
3 namespace Enumeradores
4 {
5 class Program
6 {
7
8 //Declaração do Tipo de Dados Ordinal
9 enum Dia { Domingo, Segunda, Terça, Quarta, Quinta, 
 Sexta, Sabado };
10
11 static void Main(string[] args)
12 {
13 Dia hoje = Dia.Segunda;
14
15 Console.WriteLine(“Hoje = {0}”, hoje);
16 Console.ReadLine();
17 }
18 }
19 }
2.4 Tipos array
Um arranjo é um conjunto homogêneo de elementos do 
mesmo tipo de dados, em que cada elemento individual é 
referenciado por sua posição, também conhecida como índice. 
Em geral, um índice é um número inteiro maior ou igual a zero, emenor ou igual ao tamanho do arranjo. Algumas linguagens de 
programação também permitem a utilização de outros tipos de 
dados como índice do vetor, por exemplo, a utilização de strings 
ou valores ponto-flutuantes.
10
Unidade I
Re
vi
sã
o:
 C
ris
tin
a 
- 
Di
ag
ra
m
aç
ão
: F
ab
io
 -
 2
8/
01
/1
1 
-|
|-
 2
ª R
ev
isã
o:
 C
ris
tin
a 
- 
Co
rr
eç
ão
: F
ab
io
 -
 0
3/
02
/2
01
1
O número de índices utilizados para referenciar as posições 
do arranjo faz com que sejam definidas algumas estruturas. Um 
arranjo contendo apenas um índice, ou apenas uma dimensão, é 
conhecido como vetor, enquanto que, um arranjo contendo dois 
índices, ou duas dimensões, é conhecido como matriz.
O trecho de código abaixo ilustra a utilização de arranjos 
na linguagem de programação Java. Neste código é possível 
identificar a inicialização do arranjo, bem como o acesso a um 
determinado elemento, e a exibição do conteúdo na tela.
1 public class TipoArray {
2
3 public static void main(String[] args) {
4
5 //declaração de um arranjo
6 int a1[] = new int[3];
7
8 //declaração e inicialização
9 //do arranjo
10 int a2[] = {10,20,30};
11
12 //atribuição dos elementos
13 a1[0] = 10;
14 a1[1] = 20;
15 a1[2] = 30;
16
17 //exibição dos elementos
18 for (int i = 0; i < a1.length; i++) {
19 System.out.println(“A1[“+i+”]= “+a1[i]);
20 System.out.println(“A2[“+i+”]= “+a2[i]);
21 }
22 }
23 }
11
PARADIGMAS DE LINGUAGENS
Re
vi
sã
o:
 C
ris
tin
a 
- 
Di
ag
ra
m
aç
ão
: F
ab
io
 -
 2
8/
01
/1
1 
-|
|-
 2
ª R
ev
isã
o:
 C
ris
tin
a 
- 
Co
rr
eç
ão
: F
ab
io
 -
 0
3/
02
/2
01
1
2.5 Tipos registro
O tipo de dados registro é representado por um conjunto 
heterogêneo de elementos, em que cada elemento individual 
presente no registro é identificado pelo seu nome. Os elementos 
do registro são conhecidos como campos. O trecho de código 
abaixo ilustra a definição de uma estrutura do tipo registro na 
linguagem de programação C:
1 struct tipopessoa{
2 int idade;
3 char sexo;
4 float altura;
5 }pessoa1;
No trecho acima, uma estrutura do tipo registro foi 
declarada, e uma variável denominada pessoa1 foi definida. 
Assim, a estrutura pode ser referenciada por meio da variável. 
Além disso, a atribuição dos valores é realizada a partir do nome 
dos campos, conforme ilustrado no trecho a seguir:
1 pessoa1.idade = 22
2 pessoa1.sexo = ‘M’
3 pessoa1.altura = 1.68
2.6 Tipos ponteiro
O tipo de dados ponteiro é utilizado para armazenar o 
endereço de memória de outra variável. Este tipo de dados é 
muito empregado em linguagens de programação como C e 
C++, além de ser muito indicado quando o programador deseja 
acessar diretamente as informações na memória.
O trecho de código abaixo ilustra a utilização do tipo de 
dados ponteiro na linguagem de programação C. É importante 
identificar que o símbolo asterisco (*) é utilizado antes do nome 
12
Unidade I
Re
vi
sã
o:
 C
ris
tin
a 
- 
Di
ag
ra
m
aç
ão
: F
ab
io
 -
 2
8/
01
/1
1 
-|
|-
 2
ª R
ev
isã
o:
 C
ris
tin
a 
- 
Co
rr
eç
ão
: F
ab
io
 -
 0
3/
02
/2
01
1
da variável. Este uso é o que indica que a variável declarada é 
do tipo ponteiro.
1 int *pontIdade; // exemplo de ponteiro para int
2 char *pontNome; // exemplo de ponteiro para char
3 float *pontValor; // exemplo de ponteiro para float
O código fonte a seguir ilustra de maneira mais detalhada 
a utilização de ponteiros na linguagem de programação C. 
Neste exemplo são apresentadas a declaração e a atribuição de 
valores a uma variável do tipo de dados ponteiro. Além disso, 
são mostradas as informações da variável na tela.
1 #include <stdio.h>
2
3 int main()
4 {
5 int valor = 2582;
6 int *pontValor;
7
8 pontIdade = &valor;
9
10 printf(“Endereco da variavel valor: %u \n”, &idade);
11 printf(“Endereco apontado pelo ponteiro: %u \n”, 
 pontValor); 
12
13 return 0;
14 }
3 EXPRESSÕES E INSTRUÇÕES DE ATRIBUIÇÃO
3.1 Expressões aritméticas
No início da evolução das linguagens de programação, 
uma das principais aplicações dos programas de computadores 
era a avaliação automática de expressões aritméticas. Essa 
13
PARADIGMAS DE LINGUAGENS
Re
vi
sã
o:
 C
ris
tin
a 
- 
Di
ag
ra
m
aç
ão
: F
ab
io
 -
 2
8/
01
/1
1 
-|
|-
 2
ª R
ev
isã
o:
 C
ris
tin
a 
- 
Co
rr
eç
ão
: F
ab
io
 -
 0
3/
02
/2
01
1
funcionalidade permitia a realização de complexos cálculos 
matemáticos em poucos minutos, os quais poderiam durar 
horas, até dias, se fossem realizados por seres humanos.
Uma expressão é formada por operadores, operandos e 
parêntesis. Um operador é representado por um símbolo e indica 
qual tipo de operação será realizada pela expressão. Algumas 
das principais operações são:
• (+) soma;
• (-) subtração;
• (*) multiplicação;
• (/) divisão;
• (%) módulo ou resto.
As regras de precedência são fundamentais para determinação 
do resultado da expressão aritmética. Essas regras definem a 
ordem em que os operadores devem ser avaliados.
Temos por exemplo, a expressão aritmética A+B*C. Suponha 
os valores A=3; B=4 e C=5 para os operandos, e considere a 
regra de precedência em que os operadores são avaliados da 
esquerda para direita. Assim, há inicialmente a soma de A+B, e 
em seguida a multiplicação do resultado por C e o resultado da 
avaliação da expressão com essa regra de precedência será 35.
Agora, considere os mesmos valores para os operandos, 
no entanto, adote como regra de precedência a avaliação dos 
operadores da direita para esquerda. Assim, primeiramente 
temos a multiplicação de B*C, em seguida a soma do resultado 
com o operando C. Neste caso, temos como resultado final da 
expressão o valor 23.
14
Unidade I
Re
vi
sã
o:
 C
ris
tin
a 
- 
Di
ag
ra
m
aç
ão
: F
ab
io
 -
 2
8/
01
/1
1 
-|
|-
 2
ª R
ev
isã
o:
 C
ris
tin
a 
- 
Co
rr
eç
ão
: F
ab
io
 -
 0
3/
02
/2
01
1
Nas linguagens de programação, em geral, as regras 
de precedência seguem a mesma significância das regras 
matemáticas. Os operadores são avaliados em função da 
maior precedência na seguinte ordem (da maior para a menor 
precedência): exponenciação; multiplicação e divisão; soma e 
subtração.
A utilização de parêntesis permite a alteração das regras 
de precedência em uma expressão. Se, por exemplo, tivermos 
(A+B)*C, a soma será avaliada primeiro e, em seguida, a 
multiplicação.
3.2 Conversões de tipo
As conversões de tipo têm como objetivo a alteração do tipo 
de dados de um determinado valor para outro tipo. Assim, temos 
uma operação que transforma o tipo de dados de origem em um 
tipo de dados de destino.
Uma conversão de estreitamento é utilizada para 
transformar um valor para um tipo que não pode armazenar 
todo o valor do tipo de destino. Por exemplo, considere a 
conversão utilizando a linguagem de programação C do tipo 
de dados ponto-flutuante double, com precisão de dez casas 
decimais, para o tipo de dados float, com precisão de seis 
casas decimais. Como a faixa de armazenamento do tipo de 
dados double é muito maior que a faixa do tipo float, os 
valores adicionais são desprezados (ou truncados).
Uma conversão de alargamento permite a mudança de 
um valor para um novo tipo que é capaz de conter todo 
o valor original. Como exemplo, considere a conversão de 
um valor do tipo de dados inteiro para um valor do tipo de 
dados ponto-flutuante float. Assim, todo o valor contido no 
tipo inteiro é capaz de ser armazenado no tipo float.
15
PARADIGMAS DE LINGUAGENS
Re
vi
sã
o:
 C
ris
tin
a 
- 
Di
ag
ra
m
aç
ão
: F
ab
io
 -
 2
8/
01
/1
1 
-|
|-
 2
ª R
ev
isã
o:
 C
ris
tin
a 
- 
Co
rr
eç
ão
: F
ab
io
 -
 0
3/
02
/2
01
1
3.3 Expressões relacionais e booleanas
As expressões relacionais utilizam operadores para comparar 
os valores entre dois operandos. Estes operadores são conhecidoscomo operadores relacionais. Os mais utilizados são: (>) maior; 
(<) menor; (>=) maior ou igual e (<=) menor ou igual.
O resultado de uma expressão relacional é sempre um valor 
lógico booleano. A ordem de precedência de um operador 
relacional é sempre menor do que dos operadores aritméticos. 
Assim, primeiramente as expressões matemáticas são resolvidas, 
e em seguida, a expressão relacional.
Como exemplo, considere a expressão A+1 >2*B, sendo que 
A=4 e B=6. Assim, a solução das expressões aritméticas resulta 
em 5 > 12, por fim, o resultado da expressão relacional será 
igual a falso.
As expressões booleanas são formadas a partir de um 
conjunto de operadores booleanos, que em geral incluem as 
operações:
• e (and);
• ou (or);
• negação (not)2.
3.4 Instruções de atribuição
Uma instrução de atribuição tem como objetivo a 
alteração do valor de uma variável. Assim, o programador 
pode modificar, em tempo de execução (com o programa em 
funcionamento), os valores associados a uma determinada 
variável.
Muitas linguagens de programação (Java, Visual C#, C, 
C++, Fortran, Basic, entre outras) utilizam como operador de 
2 Outras operações também são possíveis, por exemplo, ou-exclusivo 
(xor).
16
Unidade I
Re
vi
sã
o:
 C
ris
tin
a 
- 
Di
ag
ra
m
aç
ão
: F
ab
io
 -
 2
8/
01
/1
1 
-|
|-
 2
ª R
ev
isã
o:
 C
ris
tin
a 
- 
Co
rr
eç
ão
: F
ab
io
 -
 0
3/
02
/2
01
1
atribuição, o símbolo de igual (=). Outras utilizam dois símbolos, 
os dois pontos seguido do símbolo de igual (:=). Em Pascal, por 
exemplo, utiliza-se este formato de operador.
Algumas linguagens de programação permitem a utilização 
de uma instrução de atribuição para múltiplas tarefas. Assim, é 
possível atribuir um valor a diversas variáveis ao mesmo tempo. 
Por exemplo, o trecho de código abaixo, associa o valor 10, às 
variáveis denominadas A, B e C:
1 A = B = C = 10;
Outra maneira de utilizar uma instrução de atribuição é como 
resultado de uma operação condicional. Este tipo de operação 
é realizado com um tipo específico de operador, denominado 
ternário. O trecho de código abaixo ilustra este tipo de operação. 
Neste caso, a variável denominada valor receberá 10 ou 20, 
dependendo do resultado da avaliação da expressão relacional.
1 VALOR = ( X > Y ) ? 10 : 20; 
Uma instrução de atribuição também pode ser utilizada de 
forma a compor uma instrução mais complexa. Com isso, além da 
operação de atribuição, é possível a realização de outra operação, 
como de acumulação, por exemplo. O trecho de código abaixo 
ilustra a utilização de uma instrução de atribuição juntamente 
com um acumulador:
1 SOMA += 10;
A instrução de atribuição também pode ser realizada de 
maneira pontual. Este tipo de instrução é conhecido como 
operador prefixado ou pós-fixado, ou ainda como operador de 
incremento (++) ou operador de decremento (--). O trecho de 
código abaixo ilustra o operador de atribuição de incremento e 
decremento:
1 CONTADOR++;
2 CONTADOR--;
17
PARADIGMAS DE LINGUAGENS
Re
vi
sã
o:
 C
ris
tin
a 
- 
Di
ag
ra
m
aç
ão
: F
ab
io
 -
 2
8/
01
/1
1 
-|
|-
 2
ª R
ev
isã
o:
 C
ris
tin
a 
- 
Co
rr
eç
ão
: F
ab
io
 -
 0
3/
02
/2
01
1
4 ESTRUTURAS DE CONTROLE
Uma estrutura de controle permite ao programador 
controlar o fluxo de execução de um programa. Ela é essencial 
para qualquer tipo de aplicação e pode ser utilizada para a 
seleção de caminhos de execução ou para a execução repetida 
de determinados trechos do programa.
Existem dois tipos de estrutura de controle: condicional e de 
repetição.
4.1 Estrutura condicional
Uma estrutura condicional utiliza uma expressão relacional 
para determinar que caminho deverá ser executado pelo 
programa. Este tipo de estrutura é formado por quatro tipos de 
instruções de seleção:
Instrução de seleção unidirecional
A instrução de seleção unidirecional está presente em todas 
as linguagens de programação. Essa instrução é chamada de if, e 
utiliza uma expressão booleana para definir se um determinado 
trecho da aplicação deverá ou não ser executado. O trecho do 
código será executado apenas quando o resultado da instrução 
for verdadeiro.
 Abaixo, está ilustrada a utilização de uma instrução de 
seleção unidirecional na linguagem de programação Java. A 
execução do trecho de código não exibirá nenhuma mensagem 
na tela, uma vez que o resultado da expressão booleana é falso 
e o conteúdo da instrução não será executado.
1 int a = 10;
2 int b = 20;
3
18
Unidade I
Re
vi
sã
o:
 C
ris
tin
a 
- 
Di
ag
ra
m
aç
ão
: F
ab
io
 -
 2
8/
01
/1
1 
-|
|-
 2
ª R
ev
isã
o:
 C
ris
tin
a 
- 
Co
rr
eç
ão
: F
ab
io
 -
 0
3/
02
/2
01
1
4 if ( a == b ){
5 System.out.println(“Os valores são iguais”);
6 }
Alterar os valores das variáveis iniciais faz com que 
o conteúdo da instrução de seleção unidirecional seja 
executado.
1 int a = 10;
2 int b = 10;
3
4 if ( a == b ){
5 System.out.println(“Os valores são iguais”);
6 }
Instrução de seleção bidirecional
Uma instrução de seleção bidirecional permite especificar 
o que será executado pelo programa quando o resultado 
da expressão lógica for falso. Assim, é possível codificar o 
comportamento da instrução da seleção condicional para o 
resultado verdadeiro ou falso. O trecho de código a seguir ilustra 
este tipo de instrução:
1 int a = 10;
2 int b = 20;
3
4 if ( a == b ){
5 System.out.println(“Os valores são iguais”);
6 }else{
7 System.out.println(“Os valores são diferentes”);
8 }
19
PARADIGMAS DE LINGUAGENS
Re
vi
sã
o:
 C
ris
tin
a 
- 
Di
ag
ra
m
aç
ão
: F
ab
io
 -
 2
8/
01
/1
1 
-|
|-
 2
ª R
ev
isã
o:
 C
ris
tin
a 
- 
Co
rr
eç
ão
: F
ab
io
 -
 0
3/
02
/2
01
1
Aninhamento de seletores
A utilização de uma instrução de seleção dentro de outra, é 
conhecida como aninhamento de seletores. O trecho de código 
abaixo ilustra este tipo de instrução:
1 int a = 10;
2 int b = 20;
3 int c = 30;
4
5 if ( a > b){
6 if ( a > c){
7 System.out.println(“A é o maior”);
8 }else{
9 System.out.println(“C é o maior”);
10 }
11 }else{
12 if ( b > c){
13 System.out.println(“B é o maior”);
14 }else{
15 System.out.println(“C é o maior”);
16 }
17 }
Instrução de seleção múltipla
Uma instrução de seleção múltipla permite determinar 
qual trecho de código será executado a partir de um 
conjunto de condições. Este tipo de seleção produz uma 
escolha mutuamente exclusiva, ou seja, apenas uma das 
condições será selecionada. O trecho de código a seguir 
ilustra este tipo de instrução na linguagem de programação 
Java:
20
Unidade I
Re
vi
sã
o:
 C
ris
tin
a 
- 
Di
ag
ra
m
aç
ão
: F
ab
io
 -
 2
8/
01
/1
1 
-|
|-
 2
ª R
ev
isã
o:
 C
ris
tin
a 
- 
Co
rr
eç
ão
: F
ab
io
 -
 0
3/
02
/2
01
1
1 int opcao = 1;
2 
3 switch(opcao){
4 case 1:
5 System.out.println(“Soma”);
6 break;
7 case 2:
8 System.out.println(“Subtração”);
9 break;
10 case 3:
11 System.out.println(“Multiplicação”);
12 break;
13 case 4:
14 System.out.println(“Divisão”);
15 break;
16 }
4.2 Estruturas de repetição
Uma estrutura de repetição é utilizada para determinar que 
uma instrução ou um conjunto de instruções, seja executado 
zero, uma ou mais vezes. Essa estrutura pode ser controlada por 
um contador ou por uma condição lógica.
Laço controlado por contador
Uma estrutura de repetição, controlada por um contador 
utiliza uma variável especial para determinar quantas vezes 
o laço foi executado. A principal estrutura que utiliza essa 
metodologia é conhecida como for, e está presente em diversas 
linguagens de programação. O trecho de código abaixo ilustra 
essa estrutura:
1 for (int i = 1; i <= 10; i++) {
2 System.out.println(“I=” + i);
3 }
21
PARADIGMAS DE LINGUAGENS
Re
vi
sã
o:
 C
ris
tin
a 
- 
Di
ag
ra
m
aç
ão
: F
ab
io
 -
 2
8/
01
/1
1 
-|
|-
 2
ª R
ev
isã
o:
 C
ris
tin
a 
- 
Co
rr
eç
ão
: F
ab
io
 -0
3/
02
/2
01
1
Também é possível criar um laço comandado por contador 
com outras estruturas de repetição, como por exemplo, com a 
instrução while. O código a seguir ilustra essa implementação:
1 int i = 1;
2 while ( i <= 10){
3 System.out.println(“I=” + i);
4 }
Laço controlado por condição lógica
Um laço controlado por condição lógica é indicado quando 
não se sabe exatamente quantas vezes um determinado trecho 
do código deverá ser executado. Neste caso, um teste lógico é 
realizado para determinar se o trecho do código deverá ou não 
ser executado novamente.
1 do{
2 //trecho do código que
3 //deverá ser repetido
4 }while( valor == true)
5 SUBPROGRAMAS
Os subprogramas são uma técnica de programação que tem 
como objetivo a organização do código fonte em blocos de 
instruções, que podem ser reutilizadas a qualquer momento ao 
longo do programa.
Um subprograma representa uma sequência de instruções 
com um objetivo específico, que pode ser utilizada ao ser 
adicionada (ou chamada) por um programa ou por outro 
subprograma.
A principal vantagem dos subprogramas está relacionada 
à organização do código fonte, bem como sua facilidade de 
22
Unidade I
Re
vi
sã
o:
 C
ris
tin
a 
- 
Di
ag
ra
m
aç
ão
: F
ab
io
 -
 2
8/
01
/1
1 
-|
|-
 2
ª R
ev
isã
o:
 C
ris
tin
a 
- 
Co
rr
eç
ão
: F
ab
io
 -
 0
3/
02
/2
01
1
manutenção, uma vez que cada subprograma realiza uma tarefa 
específica.
A figura abaixo ilustra o modelo de funcionamento de um 
subprograma e como é realizada a chamada ao longo do fluxo 
de execução do programa:
Programa Subprograma
início início
fim
fim
fluxo de execução
fluxo de execução
chamada do subprograma
Cada subprograma possui um único ponto de entrada, o qual 
representa seu início do fluxo de execução. Da mesma maneira, 
este subprograma contém um ponto de saída, que representa o 
final da execução das instruções do subprograma.
Quando a chamada do subprograma é acionada, o fluxo de 
execução do programa principal é suspenso, até que a execução 
do subprograma termine. Ao final da execução do subprograma, 
a execução do programa principal é retomada normalmente.
Os subprogramas são classificados em duas categorias 
denominadas funções ou procedimentos. Algumas linguagens 
de programação, (como a C, por exemplo), possuem apenas 
funções, mas permitem que uma função seja escrita na forma 
de um procedimento.
Um procedimento é a implementação mais simplificada de 
um subprograma, cujo objetivo principal é a execução de um 
23
PARADIGMAS DE LINGUAGENS
Re
vi
sã
o:
 C
ris
tin
a 
- 
Di
ag
ra
m
aç
ão
: F
ab
io
 -
 2
8/
01
/1
1 
-|
|-
 2
ª R
ev
isã
o:
 C
ris
tin
a 
- 
Co
rr
eç
ão
: F
ab
io
 -
 0
3/
02
/2
01
1
conjunto de instruções. O procedimento não retorna nenhum 
tipo de resultado para o programa principal. O trecho de código 
abaixo ilustra um exemplo de procedimento na linguagem de 
programação Pascal:
1 procedure escrever();
2 begin
3 Writeln(‘Este é um exemplo de procedimento’);
4 end;
Uma função sempre retorna algum tipo de valor, por isso é 
muito semelhante às funções matemáticas. A execução de uma 
função deve obrigatoriamente retornar uma informação. Assim, 
cada vez que uma função for acionada, ao final da sua execução, 
algum tipo de retorno deve ser produzido para o ponto em que 
a função foi chamada. O trecho de código a seguir ilustra uma 
função na linguagem de programação Pascal:
1 function soma(valor1, valor2: integer): integer;
2 begin
3 //retorno da função
4 soma := valor1+valor2;
5 end;
Quando construímos subprogramas, é possível enviar 
informações a partir da unidade chamadora para o subprograma. 
Essas informações são enviadas por meio de parâmetros. 
Uma lista de parâmetros é um recurso utilizado para passar 
informações para os subprogramas. Essa lista deve conter o tipo 
de dados do parâmetro, bem como seu nome.
Existem três maneiras distintas de passagem de parâmetros, 
denominadas:
• modo de entrada - é utilizado para enviar uma informação 
da unidade chamadora para o subprograma;
24
Unidade I
Re
vi
sã
o:
 C
ris
tin
a 
- 
Di
ag
ra
m
aç
ão
: F
ab
io
 -
 2
8/
01
/1
1 
-|
|-
 2
ª R
ev
isã
o:
 C
ris
tin
a 
- 
Co
rr
eç
ão
: F
ab
io
 -
 0
3/
02
/2
01
1
• modo de saída - é utilizado para transmitir uma informação 
do subprograma para a unidade chamadora;
• modo entrada-saída - pode ser utilizado tanto para 
enviar uma informação da unidade chamadora para o 
subprograma, quanto para transmitir uma informação do 
subprograma para a unidade chamadora.
Os modelos semânticos de passagens de parâmetros estão 
ilustrados na figura:
Subprograma
entrada
Subprograma
Subprograma
saída
entrada-saída
Unidade chamadora
Unidade chamadora
Unidade chamadora
A implementação da passagem de parâmetros para um 
subprograma pode ser realizada de três maneiras:
• passagem por valor - é baseada no modo de entrada, em 
que o parâmetro é utilizado para inicializar uma variável 
local do subprograma. Essa variável é destruída ao final 
da execução do subprograma. Além disso, qualquer tipo 
de alteração realizada na variável local, não é propagada 
para a unidade chamadora;
• passagem por resultado - é baseada no modo de saída, em 
que uma variável local do subprograma é utilizada para 
transmitir uma informação para a unidade chamadora. 
Essa transmissão é realizada antes da execução do 
subprograma ser encerrada. Algumas linguagens de 
programação não permitem este tipo de passagem de 
parâmetros;
25
PARADIGMAS DE LINGUAGENS
Re
vi
sã
o:
 C
ris
tin
a 
- 
Di
ag
ra
m
aç
ão
: F
ab
io
 -
 2
8/
01
/1
1 
-|
|-
 2
ª R
ev
isã
o:
 C
ris
tin
a 
- 
Co
rr
eç
ão
: F
ab
io
 -
 0
3/
02
/2
01
1
• passagem por referência - é baseada no modo de entrada-
saída. Sendo assim, a unidade chamadora transmite ao 
subprograma o endereço de memória da variável que será 
utilizada no parâmetro. Todas as alterações realizadas 
na variável do parâmetro são refletidas na unidade 
chamadora, uma vez que, as alterações são realizadas 
diretamente no endereço de memória da variável.
O trecho de código ilustra os métodos de passagem de 
parâmetros na linguagem de programação Visual C#. No 
exemplo a seguir são demonstrados os três tipos citados acima:
1 using System;
2
3 namespace PassagemParametros
4 {
5 class Program
6 {
7 //PROGRAMA PRINCIPAL
8 //Unidade chamadora
9 static void Main(string[] args)
10 {
11 //Passagem por Valor
12 int valor1 = 10;
13 Console.WriteLine(“Passagem por Valor”);
14 Console.WriteLine(“Antes = {0}”, valor1);
15 porValor(valor1);
16 Console.WriteLine(“Depois = {0}”, valor1);
17 Console.WriteLine(“”);
18
19 //Passagem por Resultado
20 int valor2;
21 Console.WriteLine(“Passagem por Resultado”);
22 //A variável não foi inicializada.
23 //Console.WriteLine(“Antes = {0}”, valor2);
24 porResultado(out valor2);
25 Console.WriteLine(“Depois = {0}”, valor2);
26
Unidade I
Re
vi
sã
o:
 C
ris
tin
a 
- 
Di
ag
ra
m
aç
ão
: F
ab
io
 -
 2
8/
01
/1
1 
-|
|-
 2
ª R
ev
isã
o:
 C
ris
tin
a 
- 
Co
rr
eç
ão
: F
ab
io
 -
 0
3/
02
/2
01
1
26 Console.WriteLine(“”);
27
28 //Passagem por Referência
29 int valor3 = 10;
30 Console.WriteLine(“Passagem por Referência”);
31 Console.WriteLine(“Antes = {0}”, valor3);
32 porReferencia(ref valor3);
33 Console.WriteLine(“Depois = {0}”, valor3);
34 Console.WriteLine(“”);
35
36
37 Console.ReadLine();
38 }
39
40 //SUBPROGRAMA: Passagem por Valor
41 static void porValor(int pValor)
42 {
43 
44 pValor = 500;
45 }
46
47 //SUBPROGRAMA: Passagem por Resultado
48 static void porResultado(outint pValor)
49 {
50 pValor = 500;
51 }
52
53
54 //SUBPROGRAMA: Passagem por Referência
55 static void porReferencia(ref int pValor)
56 {
57 pValor = 500;
58 }
59
60 }
61 }
27
PARADIGMAS DE LINGUAGENS
Re
vi
sã
o:
 C
ris
tin
a 
- 
Di
ag
ra
m
aç
ão
: F
ab
io
 -
 2
8/
01
/1
1 
-|
|-
 2
ª R
ev
isã
o:
 C
ris
tin
a 
- 
Co
rr
eç
ão
: F
ab
io
 -
 0
3/
02
/2
01
1
Resultado da execução do programa:
A implementação de subprogramas pode ser realizada 
utilizando um recurso interessante, denominado sobrecarga. 
Com ele é possível desenvolver diversos subprogramas com o 
mesmo nome, mas com o número de parâmetros diferentes. O 
trecho de código abaixo ilustra este conceito:
1 using System;
2
3 namespace SubProgramasSobrecarga
4 {
5 class Program
6 {
7 //PROGRAMA PRINCIPAL
8 static void Main(string[] args)
9 {
10 int v1 = 10, v2 = 20, v3 = 30, v4 = 40;
11
12 Console.WriteLine(“Soma= {0}”, soma(v1,v2));
13 Console.WriteLine(“Soma = {0}”, soma(v1, v2,v3));
14 Console.WriteLine(“Soma = {0}”, soma(v1, v2,v3,v4));
15 Console.ReadLine();
16 }
17
18 static int soma(int valor1, int valor2)
28
Unidade I
Re
vi
sã
o:
 C
ris
tin
a 
- 
Di
ag
ra
m
aç
ão
: F
ab
io
 -
 2
8/
01
/1
1 
-|
|-
 2
ª R
ev
isã
o:
 C
ris
tin
a 
- 
Co
rr
eç
ão
: F
ab
io
 -
 0
3/
02
/2
01
1
19 {
20 return (valor1+valor2);
21 }
22
23 static int soma(int valor1, int valor2, int valor3)
24 {
25 return (valor1+valor2+valor3);
26 }
27
28 static int soma(int valor1, int valor2, int valor3, int valor4)
29 {
30 return (valor1 + valor2 + valor3+valor4);
31 }
32
33 }
34 }
Resultado da execução do programa:
6 CONSIDERAÇÕES FINAIS
Nesta unidade você estudou sobre os principais conceitos 
dos paradigmas de linguagens e aprendeu sobre os tipos de 
dados, as expressões aritméticas e relacionais, as instruções 
de atribuições, as estruturas de controle e os subprogramas. 
Aproveite os exercícios para aprimorar seu conhecimento.

Mais conteúdos dessa disciplina