MATA56 Tipos, Verificação de Tipos 2010.1. Agenda Objetivo desta aula: Introduzir os principais aspectos semânticos de variáveis Palavras-chave – nomes.

Slides:



Advertisements
Apresentações semelhantes
Estruturação de Linguagens (Pascal e C++)
Advertisements

ESTRUTURA DE DADOS Professor: Marcelo Mendes Turma: MBI-1
Paradigmas de Linguagens Tipos de Dados
Perspectivas baseadas em procedimentos e orientadas por objectos Conceitos principais: Encapsulamento, Herança, Polimorfismo (Encapsulation, Hierarchy,
Análise e Projeto de Sistemas
Introdução à Compilação Prof. Leandro Magno Slides adaptados a partir do material cedido pelos professores Heloise Manica Paris Teixeira, Yandre M. G.
Prof. Heloise Manica Paris Teixeira
1 Tipos definidos O programador pode definir seus próprios tipos de dados tipos complexos usados da mesma forma que os simples declaram-se variáveis utilizando-se.
Rafael Pinto Frederico Corrêa
Políticas Curso de aprofundamento em linguagem C.
Curso Sistemas de Informação Disciplina: Arquitetura de Software
Análise Léxica Supondo o trecho de programa abaixo:
Construção de Compiladores
7 Abstração Genérica Unidades genéricas e instanciação.
8 Sistemas de Tipos Polimorfismo de inclusão.
Uso de Orientação a Objetos em Java
Algoritmos e Estruturas de Dados II
Aula 4 Nomes, Vinculações, Tipos e Escopos
Aula 5 Tipos de Dados Universidade do Vale do Rio dos Sinos
1 Aula 7 ImplementandoSubprogramas Universidade do Vale do Rio dos Sinos
Robson Godoi / Sandra Siebra
Paradigmas de programação
João Lucas de Oliveira Torres
Análise Semântica e Representação Intermédia
PROGRAMAÇÃO I UNIDADE 1.
Funções Declaração function nomedafunção (arg_1, arg_2,..., arg_n) corpoDaFunção end.
Conceitos de Linguagem de Programação
Eric, Fabrício, João Vicente
Linguagem de programação I A
Introdução ao uso de vatores na linguagem PASCAL.
OPERADORESOPERADORES SCJP – Otimize-TI. Operadores Java Resultado: Maioria das operações é um booleano ou numérico. Não podem ser sobrecarregados (Existem.
Organização do Ambiente de Execução (Runtime System)
Tipos de Dados Paradigmas de Programação
Verificação de Tipos e Escopos
Estudo dos Conceitos e Paradigmas de Programação
Nomes, Variáveis e Vinculações
Expressões e Instrução de Atribuição
Semântica de Linguagens de Programação
DI UFPE Semântica de Java Towards na Operational Semantics and Proof of Type Soundness for Java Sophia Drossopoulou e Susan Eisenbach Imperial College.
Paradigmas de Linguagens de Programação Linguagem Imperativa 1
Organização do Ambiente de Execução (Runtime system) Representação de dados Avaliação de expressões Alocação de memória Rotinas Objetos e métodos.
Linguagem de Expressões 2
Geração de Código Intermediário
Ambiente de Execução - Rotinas
Capítulo III Modularização Procedimentos e Funções Universidade Federal de São Carlos Departamento de Computação Aluna: Luanna Lopes Lobato
Estruturas de Dados Aula 2: Estruturas Estáticas 07/04/2014.
Aulas 2 e 3 – Java – Prof. Marcelo Heitor # O método main e argumentos na linha de comando; # Fluxo padrão de entrada e saída; # A classe JOptionPane;
Paradigmas de Linguagens de Programação Aula 2
Capítulo VIII Ambientes de Execução
Analise Semântica aula-10-analise-semântica.pdf.
Aula Prática 1 Monitoria IP/CC (~if669). Verificação Dinâmica de Tipos Métodos de superclasses e subclasses: Uso de métodos de subclasses quando se é.
Laboratório de Programação I Carlos Oberdan Rolim Ciência da Computação Sistemas de Informação.
Modelos de Linguagem de Programação I Aula 06
Vetores Bidimensionais – Debug - Ponteiros – Listas Encadeadas Simples
Conversão de Tipos Exemplo: x + i, onde x é do tipo real e i é do tipo integer. A especificação da linguagem deve indicar se a linguagem suporta este tipo.
Certificação Marco Antonio. Introdução A compreensão desse capítulo é muito importante pois trata de um assunto essencial em qualquer linguagem de programação,
Faculdade Pernambucana - FAPE Setembro/2007
Critérios de Avaliação das Linguagens de Programação
Programação II Prof. Mateus Raeder Universidade do Vale do Rio dos Sinos - São Leopoldo -
Copyright 1998, Departamento de Informática da UFPE. Todos os direitos reservados sob a legislação em vigor. Variáveis e métodos estáticos, Passagem de.
Semântica de Linguagens de Programação
CES-10 INTRODUÇÃO À COMPUTAÇÃO
Conceitos de Orientação a Objetos zConceito de tipo zTipos Abstratos de Dados zMódulos/Pacotes zEncapsulamento.
Programação de Computadores - 1
Paradigmas de Linguagens de Programação Conceitos da Linguagem Imperativa 1 Augusto Sampaio e Paulo Borba Centro de Informática Universidade Federal de.
AULA 09 PROGRAMAÇÃO I. Estruturas de Dados Heterogêneas 10/08/2010 Programação I 2 Objetivo: Estudar os tipos de dados heterogêneos:  Registros;  Arrays.
PARADIGMAS DE LINGUAGENS EXPRESSÕES E INSTRUÇÕES DE ATRIBUIÇÃO
Influencias sobre o Projeto da Linguagem
VARIÁVEIS Desenvolvido pelo Mestrando Rodrigo Moreira Barreto – VHLab (Virtual Humans Simulation Laboratory – PUCRS) 1 Desenvolvido por: Rodrigo Moreira.
Transcrição da apresentação:

MATA56 Tipos, Verificação de Tipos

Agenda Objetivo desta aula: Introduzir os principais aspectos semânticos de variáveis Palavras-chave – nomes – amarração – escopo, tempo de vida – tipos, verificação de tipos

Variáveis (nome, endereço, valor, tipo, tempo de vida, escopo) Aliases, amarração, tempo de amarração, declarações, verificação de tipos, tipagem forte, regras de escopo, ambientes de referência

Tipo Tipo de uma variável: especificação de – da classe de valores que podem ser associados à variável, – das operações que podem ser usadas para criar, acessar e modificar esses valores [Ghezzi, Jazayeri] Exemplo – Tipo boolean em Pascal Valores: true e false Operações: and, or e not

Verificação de Tipos Atividade de assegurar-se que os operandos de um operador possuem tipos compatíveis subprograma (operador) e parâmetros (operandos) comando de atribuição (:= operador; lhs e rhs operandos) Um tipo compatível é – Um tipo válido para ser usado por um dado operador, ou – Um tipo que pode ser convertido implicitamente em um tipo válido coerção: conversão automática Um erro de tipo é a aplicação de um operador a um operando de tipo inadequado.

Exemplos type range = 1..10; int a; real b,c; range d; proc x (int p1, real p2) { … } if (a > 0) then … c := a * 99 + b; x(d,c);

Verificação de Tipos verificação de tipos estática – Se a amarração de tipos for estática, a verificação de tipos poderá ser estática (em sua maior parte) verificação de tipos dinâmica deve – Se a amarração de tipos for dinâmica, a verificação de tipos deve ser dinâmica APL, JavaScript Detectar erros em tempo de compilação, ou seja, estaticamente? – Custo, confiabilidade

Tipificação Forte Uma linguagem de programação é dita "fortemente tipificada" se seus erros de tipos sempre forem detectados Os tipos de todos os operandos podem ser determinados, seja em tempo de compilação ou em tempo de execução

Verificação de Tipos Áreas Problemáticas type shape = (circle, triangle, rectangle); colors = (red, green, blue); figure = record filled: boolean; color: colors; case form: shape of circle: (diameter: real); triangle: (leftside: integer; rightside: integer; angle: real); rectangle: (side1: integer; side2: integer) end; Pascal é “quase” fortemente tipificada: registros variantes não são verificados

Figura: União discriminada (ou união disjunta ou registro variante)

Tipificação Forte C e C++ não são fortemente tipificadas: – verificação de tipos de parâmetros pode ser evitada – "unions" não são verificados ML é fortemente tipificada – identificadores são amarrados a tipos estaticamente (declaração), ou – tipos são reconhecidos via inferência

Tipificação Forte Ada é “praticamente” fortemente tipificada – registros variantes são verificados – função UNCHECKED_CONVERSION permite suspensão temporária da verificação de tipos Java é fortemente tipificada como Ada – "cast"

Tipificação Forte Benefícios – Permite a detecção de usos de variáveis que resultam em erros de tipo – Permite a detecção, em tempo de execução, de uso de valores de tipos incorretos em variáveis que podem armazenar valores de tipos diferentes Regras de coerção afetam/enfraquecem tipificação forte – C++ versus Ada

Compatibilidade de Tipos A idéia de compatibilidade de tipos está relacionada a questões de verificação de tipos – regras Métodos para definir compatibilidade de tipos – nominal X estrutural A maior parte das linguagens combina esses métodos

Compatibilidade de Tipos Nominal Compatibilidade de tipos nominal – Duas variáveis são compatíveis se: Estão na mesma declaração, ou Estão em declarações distintas e usam o mesmo nome de tipo Exemplo type Int1 = Integer; Int2 = Integer; var v1: Int1; v2, v3: Int1; v4: Int2;

Compatibilidade de Tipos Nominal Compatibilidade de tipos nominal é de fácil implementação porém muito restritiva: – Subranges de tipo integer não são compatíveis com o tipo integer. Ex.: – Parâmetros formais devem ter o mesmo tipo de seus parâmetros reais (Pascal) type indextype= ; var count : integer; index : indextype;

Compatibilidade de Tipos Estrutural Compatibilidade de tipos estrutural – Duas variáveis possuem tipos compatíveis se seus tipos possuem estruturas idênticas Compatibilidade de tipos estrutural é mais flexível, porém mais difícil de implementar

Compatibilidade de Tipos Estrutural Exemplo

Compatibilidade de Tipos Estrutural Problemas – Não se consegue diferenciar tipos com a mesma estrutura: type celsius = real; fahrenhheit = real;

Compatibilidade de Tipos Estrutural Perguntas: – Registros: são compatíveis se forem estruturalmente compatíveis porém com nomes de campos distintos? – Arrays: são compatíveis se possuírem mesmo tipo base e tamanho, porém com esquema de indexação diferente? (ex.: [0..10] e [1..11]) – Tipos enumerados: são compatíveis se seus componentes forem escritos de modo diferente?

Compatibilidade de Tipos Exemplos – FORTRAN, COBOL Compatibilidade de tipos estrutural – Pascal (ISO Standard Pascal, 1982) Compatibilidade de tipos estrutural, exceto para parâmetros formais – C Compatibilidade de tipos estrutural, exceto para registros e uniões (equivalência de declaração) – C++ Compatibilidade de tipos nominal Compatibilidade de objetos (herança)

Compatibilidade de Tipos Exemplos – Ada: forma restrita de compatibilidade de nomes (uso de tipos derivados e sub-tipos) Tipos derivados permitem que tipos com a mesma estrutura sejam tratados como tipos diferentes (incompatível com tipo do qual deriva): type celsius is new FLOAT; type fahrenheit is new FLOAT; Subtipos são versões restritas de um tipo existente (compatível com o supertipo): subtype intervalo is INTEGER range 0..99; Tipos anônimos são únicos e incompatíveis: 활 A, B : array (1..10) of INTEGER;

Compatibilidade de Tipos A definição original de algumas linguagens não especifica claramente qual o critério a ser adotado Pascal, 1971

Questões 1. O que é um “tipo” no contexto de LP? Qual a sua importância? 2. O que é “erro de tipo”? E “verificação de tipos”? 3. O que é coerção? 4. O que é “tipificação forte” (strong typing)? 5. O que é compatibilidade de tipos? 6. Qual a diferença entre compatibilidade de tipos nominal e estrutural? 7. O que é equivalência de declaração?