notas-de-aula- Schneider
29 pág.

notas-de-aula- Schneider

Disciplina:Linguagens de Programação I260 materiais733 seguidores
Pré-visualização11 páginas
dos recursos que
proporcionam polimorfismo e já foram analisados são:

• vinculação dinâmica de tipos;

• escopo dinâmico;

• sobrecarga de subprogramas (e operadores);

• subprogramas genéricos.

Nenhuma linguagem é completamente monomórfica. Mesmo linguagens como Pascal possuem
subprogramas polimórficos como o write, apesar de não proporcionarem esse tipo de recurso para
o programador. Isso é uma inconsistência da linguagem e os projetos de linguagens mais modernas
procuram oferecer ao programador um sistema de tipos consistente; com um nível maior de
polimorfismo.

O polimorfismo paramétrico dos subprogramas genéricos pode ser usado também na declaração de
tipos. Essa estratégia é extremamente útil em tipos agregados como vetores, listas, árvores, etc.
Nesse tipos, podemos variar o tipo dos valores individuais sem alterar a estrutura geral.

As linguagens funcionais ML e Haskell combinam o polimorfismo paramétrico com a inferência de
tipos, proporcionando a robustez da tipificação forte com a conveniência de escrita da tipificação
fraca. Entretanto, não é recomendável abusar da inferência de tipos. Mais do que declarar tipos para
o compilador, a declaração de tipos serve como uma forma de documentação do código,
evidenciando o significado das coisas.

Alguns sistemas de tipos usam o conceito de herança para permitir restrições aos parâmetros de
tipos. Se considerarmos que alguns tipos são casos especiais de outros, podemos agrupar tipos em
conjuntos. Esses conjuntos podem ser usados como restrições aos parâmetros do polimorfismo
paramétrico.

Por exemplo: números inteiros sem sinal e subfaixas podem ser considerados casos especiais
(subtipos) do tipo inteiro. Algumas linguagens permitem especificar que um subprograma recebe
um valor de um tipo t qualquer, desde que t pertença ao conjunto dos tipos que são números
inteiros. Dessa forma, parâmetros reais de tipos subfaixa são válidos para esse subprogramas mas os
de tipo ponto flutuante não são.

Algumas linguagens como Haskell definem subtipos em função das operações disponíveis para eles

prof. Bruno Schneider 28

Notas de Aula de GCC105 - BCC e BSI - UFLA

(ex.: o conjunto dos tipos em que existe a comparação de equivalência; conjuntos dos tipos para os
quais existem operações aritméticas, etc.). O programador pode então criar um TAD com as
operações relevantes e incluí-lo em um ou mais conjuntos de tipos.

Outras linguagens como Ada, fornecem formas de declarar subtipos em função de particularidades
das suas instâncias. Por exemplo, suponha o tipo pessoa, como um registro que possui, entre
outras coisas, o campo gênero. É possível então declarar o tipo homem que um caso especial de
pessoa, onde o gênero é masculino.

O termo herança é usando dentro do conceito da orientação, em que, além de vermos tipos como
casos especiais de outros tipos e termos operações comuns a vários tipos, existe também a
preocupação a respeito de como essas operações alteram os valores de um tipo. A ideia básica,
entretanto é a mesma.

3. Eventos
X

Referências
[Budd 91] Budd, Timothy. An Introduction to Object-Oriented Programming. Addison-Wesly.
1991.

[ISO7185] Pascal (ISO 7185:1990).

[VEEN 06] http://www.few.vu.nl/~nsilvis/PPL/2006/REPORTS/pascal-vanVeen.pdf

[Moore 10] http://www.standardpascal.org/standards.html

prof. Bruno Schneider 29

	1. Paradigmas de Linguagens de Programação
	2. Conceitos de Linguagens de Programação
	2.1 Tipos de Dados
	2.1.1 Inteiros
	2.1.2 Ponto Flutuante
	2.1.3 Decimais
	2.1.4 Booleanos
	2.1.5 Caracteres
	2.1.6 Ponteiros
	2.1.7 Strings
	2.1.8 Enumerados
	2.1.9 Subfaixas
	2.1.10 Vetores
	2.1.11 Vetores associativos (hashes)
	2.1.12 Registros
	2.1.13 Uniões (Registros variantes)
	2.1.14 Listas
	2.1.15 Conjuntos
	2.1.16 Tipo Unidade
	2.1.17 Tipos numa linguagem

	2.2 Vinculações
	2.2.1 Vinculação de Nomes
	2.2.2 Escopo
	2.2.2.1 Escopo Estático
	2.2.2.2 Escopo Dinâmico

	2.2.3 Vinculação de tipos
	2.2.3.1 Inferência de Tipo
	2.2.3.2 Verificação de tipos
	2.2.3.3 Compatibilidade de Tipos

	2.2.4 Vinculação de Armazenamento (tempo de vida)
	2.2.5 Inicialização

	2.3 Avaliação de expressões
	2.3.1 Expressões aritméticas
	2.3.1.1 Ordem de avaliação de operadores
	2.3.1.2 Ordem de avaliação dos operandos

	2.3.2 Sobrecarga de Operadores
	2.3.3 Conversões de tipo
	2.3.3.1 Coerção em expressões

	2.3.4 Operadores relacionais e expressões booleanas
	2.3.5 Avaliação em curto-circuito
	2.3.6 Operador de atribuição
	2.3.6.1 Atribuição simples
	2.3.6.2 Alvos múltiplos
	2.3.6.3 Alvos condicionais
	2.3.6.4 Atribuição composta
	2.3.6.5 Operador unário de atribuição
	2.3.6.6 Atribuição como função

	2.3.7 Atribuição de modo misto

	2.4 Controle de fluxo
	2.4.1 Instruções compostas
	2.4.2 Instruções de seleção
	2.4.2.1 Seleção unidirecional e bidirecional
	2.4.2.2 Seletores aninhados
	2.4.2.3 Seleção múltipla

	2.4.3 Instruções iterativas
	2.4.3.1 Laços controlados por contador
	2.4.3.2 Laços controlados por lógica
	2.4.3.3 Controle localizado pelo usuário
	2.4.3.4 Controle por estruturas de dados

	2.4.4 Desvio incondicional
	2.4.5 Comandos protegidos

	2.5 Subprogramas
	2.5.1 Fundamentos dos subprogramas
	2.5.1.1 Características gerais
	2.5.1.2 Definições básicas
	2.5.1.3 Parâmetros
	2.5.1.4 Procedimentos e Funções

	2.5.2 Ambientes de referência locais
	2.5.3 Métodos de passagem de parâmetros
	2.5.3.1 Passagem por valor
	2.5.3.2 Passagem por resultado
	2.5.3.3 Passagem por valor-resultado
	2.5.3.4 Passagem por referência
	2.5.3.5 Passagem por nome

	2.5.4 Parâmetros que são nomes de subprogramas
	2.5.5 Subprogramas sobrecarregados
	2.5.6 Subprogramas genéricos
	2.5.7 Compilação Separada e Independente
	2.5.8 Questões de projeto referentes a funções
	2.5.9 Co-rotinas

	2.6 Tipos Abstratos de Dados
	2.6.1 Questões de projeto
	2.6.2 Suporte nas linguagens
	2.6.3 Tipos abstratos de dados parametrizados

	2.7 Tratamento de erros
	2.7.1 Código de Erros
	2.7.2 Manipulação de Exceções
	2.7.2.1 Questões de projeto

	2.8 Sistemas de tipo

	3. Eventos
	Referências