Conceitos de Linguagens de Programação

Documentos relacionados
Tipos de Dados. George Darmiton da Cunha Cavalcanti

Paradigmas de Programação

UNIVERSIDADE DO VALE DO RIO DOS SINOS - UNISINOS CENTRO DE CIÊNCIAS EXATAS E TECNOLÓGICAS - CENTRO 06. Funções, variáveis, parâmetros formais

1.2 OPERAÇÕES BÁSICAS EM ALGORITMOS E PROGRAMAS 18

Curso C: Ponteiros e Arrays

Conceitos de Linguagens de Programação

LISTAS ENCADEADAS OU NÃO- SEQÜENCIAIS. Estrutura de Dados

PROGRAMAÇÃO DE COMPUTADORES

Programação Orientada a Objetos SANTOS, Rafael

INF1007: Programação 2 9 Tipos Abstratos de Dados. (c) Dept. Informática - PUC-Rio 1

INTRODUÇÃO À PROGRAMAÇÃO II VARIÁVEIS COMPOSTAS HOMOGÊNEAS UNIDIMENSIONAIS

Conteúdo programático

Introdução. A verificação de tipos pode ser estática e dinâmica

Unidade 1: O Computador

FastCube 2.0 Programmer Manual

Para entender o conceito de objetos em programação devemos fazer uma analogia com o mundo real:

Simulado de Linguagem de Programação Java

UNIVERSIDADE DO TOCANTINS TECNOLOGIA EM ANÁLISE E DESENVOLVIMENTO DE SISTEMAS PRÁTICA EM PROGRAMAÇÃO DE SISTEMAS

Linguagens de Programação Conceitos e Técnicas. Valores e Tipos de Dados

Inteligência Artificial

ção a Objetos em Java

Modelo Entidade Relacionamento (MER) Professor : Esp. Hiarly Alves

Informática I. Aula Aula 19-20/06/06 1

Introdução à Programação de Computadores Parte I

Fundamentos de Bancos de Dados 3 a Prova Caderno de Questões

AULA 1 INTRODUÇÃO A BANCO DE DADOS E VISÃO GERAL DO SQL CONCEITUANDO BANCO DE DADOS MODELO RELACIONAL

Capítulo 1. Importação de Dados de Instituições Financeiras - Arquivo TXT 3

UNIVERSIDADE ESTADUAL PAULISTA. Apostila Pascal Ed Prof. Dr. Galeno José de Sena DMA/FEG CAPÍTULO 8

Microprocessadores. Memórias

Árvores. ! utilizada em muitas aplicações. ! modela uma hierarquia entre elementos. ! O conceito de árvores está diretamente ligado à recursão

MC102 Algoritmos e programação de computadores Aula 3: Variáveis

10. CPU (Central Processor Unit) Conjunto das instruções Estrutura interna Formato das instruções...

Introdução à orientação a objetos

ENG1000 Introdução à Engenharia

Alocação dinâmica de memória

Lógica de Programação. Profas. Simone Campos Camargo e Janete Ferreira Biazotto

BANCO DE DADOS. Vinícius Pádua

Fundamentos de Programação. Diagrama de blocos

Hardware: Componentes Básicos. Sistema de Computador Pessoal. Anatomia de um Teclado. Estrutura do Computador. Arquitetura e Organização

Conceituação. Linguagens de Programação Conceitos e Técnicas. Tempos de Amarração. Amarração Estática X Dinâmica. Identificador.

Banco de Dados I 2007 Módulo II: Modelagem Entidade- Relacionamento versus Relacional. (Aula 1) Clodis Boscarioli

SISTEMAS OPERACIONAIS. 3ª. Lista de Exercícios

Linguagem C. Ricardo Terra. Ricardo Terra Linguagem C 1 de agosto de / 341

Java na Prática. Célio Silva Aula 3

Programação Estruturada. Programação Estruturada. Idéias Básicas da Programação Estruturada

Orientação a Objetos

Fundamentos de Programação

Organização de Computadores 1

Resumo da Introdução de Prática de Programação com C. A Linguagem C

UALG/FCT/DEEI Análise e Modelação de Sistemas Informáticos

Aula 11: Desvios e Laços

Page 1. Prof. Constantino Jacob

Introdução à Programação

ISS Eletrônico. Formato de Arquivos para Transmissão de Documentos Declarados através do aplicativo OFFLINE. Extensão do Arquivo JUNHO2006.

Mídias Discretas. Introdução à Ciência da Informação

Introdução à Informática

Modelo Relacional Normalização Diagramas E-R e Tabelas Originadas

ADMINISTRAÇÃO DE BANCOS DE DADOS MÓDULO 8

Tópicos Avançados em Banco de Dados Dependências sobre regime e controle de objetos em Banco de Dados. Prof. Hugo Souza

Conjunto (set) O tipo estruturado set representa, em Pascal, um conjunto de objectos de um dado tipo;

XML Schema. Um XML schema descreve a estrutura de um documento XML.

Banco de Dados I. Prof. Edson Thizon

Conceitos c++ Prof. Demétrios Coutinho INFORMÁTICA BÁSICA

Algoritmos APRENDENDO A PROGRAMAR COM C#

O que é um banco de dados? Banco de Dados. Banco de dados

FATURA ELETRÔNICA DO PRESTADOR Layout do Arquivo Texto Versão 1.1.1

2 Segmentação de imagens e Componentes conexas

Introdução de XML. Dados da Web. Gerência de Dados da Web. A Web representa, nos dias de hoje, um repositório universal de dados, onde:

Programação para Internet I 4. XML. Nuno Miguel Gil Fonseca nuno.fonseca@estgoh.ipc.pt

Linguagem de Programação

2. OPERADORES ALGORITMOS, FLUXOGRAMAS E PROGRAMAS FUNÇÕES... 10

Antes de deixarmos o hardware (1) Nível da Arquitetura do Conjunto das Instruções

Introdução a C Tipos de Dados Variáveis Operadores

Sistemas Numéricos. Tiago Alves de Oliveira

INTRODUÇÃO À LINGUAGEM PASCAL PREFÁCIO

COMO ELABORAR UM CURRÍCULO

Introdução ao Teste de Software

O COMPUTADOR. Introdução à Computação

Estrutura da linguagem de programação C Prof. Tiago Eugenio de Melo tiago@comunidadesol.org

Programação Orientada a Objectos - P. Prata, P. Fazendeiro

Análise Léxica. Sumário

Algoritmos e Programação

ALGORITMOS E COMPLEXIDADE PROBLEMAS E ALGORITMOS

Resumo da última aula. Compiladores. Tipos. Regras semânticas. Expressões de tipos. Análise Semântica e checagem de tipos.

GUIA PARA O PREENCHIMENTO DOS FORMULÁRIOS ENTIDADE GESTORA SOCIEDADE PONTO VERDE

ACCESS ) Introdução. 2) Abrindo um banco de dados. 3) A Janela do Access-2007

DOCUMENTO DE REQUISITO DE SOFTWARE

Oracle Database 10g: Fundamentos de SQL e PL/SQL

Sintaxe Básica de Java Parte 1

Tipos de Dados, Tipos Abstratos de Dados Estruturas de Dados

II Semana de Ciência e Tecnologia do IFMG campus Bambuí II Jornada Científica 19 a 23 de Outubro de 2009

Notas de Aula Guilherme Sipahi Arquitetura de Computadores. Arquitetura de von Neumann

Cap. II EVENTOS MUTUAMENTE EXCLUSIVOS E EVENTOS NÃO- EXCLUSIVOS

Flávia Rodrigues. Silves, 26 de Abril de 2010

Expressões. Prof. Alberto Costa Neto Linguagens de Programação. Departamento de Computação Universidade Federal de Sergipe

Conversão de Tipos e Arrays

Modelo Lógico: Tabelas, Chaves Primárias e Estrangeiras

Transcrição:

Faculdade de Ciências e Tecnologia Departamento de Matemática e Computação Bacharelado em Ciência da Computação Conceitos de Linguagens de Programação Aula 04 (rogerio@fct.unesp.br) Aula 4 2 Evolução dos tipos de dados Tipos de Dados Primitivos Tipo String de caracteres Tipo Ordinal definido pelo programador Tipo Array Tipo Array Associativo Tipo Registro Tipo União Tipo Conjunto Tipo Ponteiro 1

Questões de Projeto Qual o tamanho máximo de um nome? Caracteres de conexão podem ser usados em nomes? Maiúsculas e minúsculas são diferentes? Palavras especiais são palavras reservadas ou palavras-chave? 3 1. Evolução dos tipos de dados Evolução de Tipos de Dados: FORTRAN I (1956) -INTEGER, REAL, arrays Ada (1983) -Utilizadores podem criar novos tipos de dados. Um descritor é um conjunto de atributos de uma variável (Nome, Endereço, Valor, Tipo, Tempo de vida, Escopo). Questões de Projeto para tipos de dados: Como especificar variáveis? Quais as operações que estão definidas sobre determinada variável? 4 2

2. Tipos de Dados Primitivos Tipos Primitivos de Dados são todos os tipos que não são definidos em termos de outros tipos. Inteiro (integer) Em geral reflete a situação do hardware (registros) Existem vários tipos de números inteiros numa linguagem: inteiro com/sem sinal, inteiro base decimal, inteiro base binária, precisão simples, etc. 5 2. Tipos de Dados Primitivos Ponto Flutuante (Floating Point) Aproximação ao conjunto dos números reais Linguagens científicas suportam pelo menos dois tipos de pf: precisão simples e estendida Relação próxima com o hardware. Algumas linguagens permitem expressar precisão, como por exemplo em Ada: type SPEED is digits 7 range 0.0..1000.0; type VOLTAGE is delta 0.1 range -12.0..24.0; 6 3

2. Tipos de Dados Primitivos Formatos de Representação de Pontos Flutuantes: (a) Precisão Simples, (b) Precisão Estendida 7 2. Tipos de Dados Primitivos Decimal (Base 10) Para aplicações comerciais Armazena um número determinado de dígitos decimais (codificado na base binária) Vantagem: Precisão. Desvantagens: Amplitude limitada (range), grande gasto de memória. 8 4

2. Tipos de Dados Primitivos Lógico (Boolean) Só permite dois valores: Verdadeiro ou Falso (true or false); Pode ser implementado num bit, mas geralmente é implementado num byte. Vantagem: Legibilidade. 9 10 3. Tipo String de caracteres String Valores são seqüências de caracteres Considerações de Projeto: Tipo primitivo ou tipo especial de seqüência? Dimensão é estática ou dinâmica? Operações: Atribuição; Comparação (=, >, <, etc.); Concatenação (junção ao fim da string); Referência a substring; Correspondência de padrão (Pattern matching). 5

3. Tipo String de caracteres Exemplo do Pascal: tipo não primitivo; operação de atribuição e comparação somente (em packed arrays). Exemplo do Ada, FORTRAN 77, FORTRAN 90 e BASIC Mais ou menos primitivo; Atribuição, comparação, concatenação, referência a substring; FORTRAN possui correspondência de padrão intrínseco. 12 11 3. Tipo String de caracteres Exemplo em Ada: N := N1 & N2 (concatenação) N(2..4) (referência a substring) Exemplo do C, C++: Não primitivo; Usa char arrays e biblioteca de funções para as operações. Exemplo do SNOBOL4 (Ling. para tratamento de string) Primitivo; Muitas operações, incluindo um elaborado método para correspondência de padrão (Pattern matching). 6

3. Tipo String de caracteres Exemplo em Perl: Padrões são definidos em termos de expressões regulares Grande poder de expressão! Ex. de expressão regular: /[A-Za-z]+/ Palavras contendo unicamente letras. Exemplo do Java: String class (não é arrays de char). 14 13 3. Tipo String de caracteres Opções na definição do tamanho da String: Estático -FORTRAN 77, Ada, COBOL Ex. FORTRAN 90: CHARACTER (LEN = 15) NAME; Dinâmico Limitado C e C++: Tamanho real indicado por um caracter nulo Ex. C++: char * buffer; buffer = new char[512]; Dinâmico SNOBOL4, Perl 7

3. Tipo String de caracteres Avaliação: Ajuda a escritabilidade do programa O tipo primitivo de tamanho estático é eficiente. Porque não o ter? Tamanho dinâmico é bom, mas muito caro. Será que não vale a pena implementá-lo? 15 3. Tipo String de caracteres Implementação: Tamanho estático Descritor é definido e utilizado em tempo de compilação. Tamanho dinâmico limitado Pode necessitar de um descritor em tempo de execução para o tamanho (não acontece em C e C++). Dinâmico Precisa de um descritor em tempo de execução; Reserva/liberação de memória é o grande problema da implementação. 16 8

Strings: Descritores 17 Tipo Ordinal Um tipo ordinal é um tipo em que a amplitude dos possíveis valores podem facilmente ser associados com os inteiros positivos; Em muitas linguagens os programadores podem definir os seguinte tipos ordinais: Tipo Enumerado; Tipo Subfaixa. 18 9

Tipo Ordinal Enumerado Tipos enumerados tipo onde o programador enumera todos os possíveis valores através de constantes simbólicas. Exemplo em Pascal: type cor = (vermelho, azul, branco, preto); Exemplo em C e C++: enum cor {vermelho, azul, branco, preto}; Considerações de Projeto: Pode uma constante simbólica pertencer a mais de uma definição de tipo? 20 19 Tipo Ordinal Enumerado Exemplos do Pascal: Constantes não podem ser reutilizadas. Podem ser usadas em subscritos de arrays, como variável de ciclo for e seleção case, podem ser comparadas mas não podem ser usadas em E/S. Ex.: type tipocor = (Vermelho, Azul, Verde, Amarelo); Var cor : tipocor;... cor := Azul; if (cor > Vermelho)then.. 10

Tipo Ordinal Enumerado Exemplo em C e C++ : Como em Pascal, exceto que podem participar de E/S como inteiro. Ex.: Tipo enumerado enum tipocor {Vermelho, Azul, Branco, Preto} casaco, camisola; casaco = Azul; Exemplo do Java Variáveis Não possui tipo enumerado 21 Tipo Ordinal Enumerado Avaliação: Melhora a legibilidade, uma vez que, não é necessário modelar cor como um número inteiro; Melhora a confiabilidade, dado que o compilador pode verificar a validade das operações e amplitude dos valores em tempo de compilação. 22 11

Tipo Ordinal Subfaixa Tipo Subfaixa (Subrange) -Subseqüência ordenada de um tipo enumerado ordinal. O tipo subfaixa foi introduzido pelo Pascal, e posteriormente, foram incluídos também em Ada e Modula-2. Ex.: os números 12..14 são uma subfaixa dos nºs inteiros. Decisão de Projeto: Como os valores podem ser usados? 23 Tipo Ordinal Subfaixa Exemplo em Pascal : Subfaixa comporta-se como o seu tipo pai. Podem ser usados em arrays, comparação, ciclos, etc.. ex. type positivo = 0.. MAXINT; Exemplo em Ada: type maiúsculas = 'A'..'Z' Subfaixa é um subconjunto do tipo pai (não é um tipo novo), logo são compatíveis. Podem ser usados como em Pascal. Ex.: subtype positivo is INTEGER range 0..INTEGER'LAST; 24 12

Tipo Ordinal Subfaixa Avaliação de tipos enumerados: Melhor legibilidade; Melhor confiabilidade detecção de erros e das amplitudes dos valores. Implementação: Tipos enumerados geralmente são implementados associando números inteiros a cada constante. Subfaixas são implementados da mesma forma que os tipos pais. O código para restringir atribuições a variáveis de subfaixas deve ser inserido pelo compilador. 25 Array é uma seqüência de dados homogênea, em que cada elemento é uma variável e pode ser acessado por sua posição relativa, a partir da origem (primeiro elemento) É uma estrutura de dados fundamental e existente em todas as linguagens. 26 13

27 Considerações de Projeto: Que tipo é correto para índices? Haverá verificação de índices? Quando as amplitudes dos índices são vinculadas? Quando reservar espaço? Qual o número máximo de elementos? Seqüências podem ser inicializadas? Arrays podem ser divididos em subfaixas? Indexação Associação entre índices e elementos de um array. map(nome-array, valor-índice) -> elemento Sintaxe para os índices: FORTRAN, PL/I, Ada -parênteses. Ex.: A(i) Em Fortran os parênteses são ambíguos: SOMA = SOMA + A(i) -->A(i) pode ser a invocação de uma função ou acesso a um elemento de um array. Maioria das outras linguagens utilizam colchetes - A[i] 28 14

29 Tipo de índice: Pascal: qualquer tipo ordinal escalar: int, boolean, char, enum; Ada - int, enum, boolean e char; Java - unicamente números inteiros. FORTRAN, C -somente números inteiros; Limite inferior dos índices: C/C++ e Java = 0; Fortran, Basic = 1; Outras linguagens = deve ser especificado. Categorias de Arrays os arrays podem ser classificados segundo o tipo de vinculação de índices (subscritos) e armazenamento: I. Array Estático; II. Array Stack-dinâmico de Tamanho Fixo; III. Array Stack-dinâmico; IV. Array Heap-dinâmico. 30 15

I. Array Estático Armazenamento do array é estático; Tamanho do array é estático; Índices e armazenamento são vinculados em tempo de compilação; Tipo de índice vinculado em tempo de projeto da linguagem (ex. Fortran = INTEGER). Vantagem: eficiência de execução (não há reserva nem liberação de memória). 31 32 Ex. em FORTRAN 77: INTEGER INTLISTA(99) // índices (1.. 99) Armazenamento é alojado estaticamente. Ex. em C: int bufferglobal[50]; // índices (0.. 49) void funcaox() { static int buffer[99]; // índices (0.. 99) //... } Tempo de vida dos 2 buffer = tempo de vida da aplicação. 16

II. Stack dinâmico de Tamanho fixo Índices com vinculação estática; Armazenamento é vinculado em tempo de execução na pilha dinâmica; Dimensão é estática; Tempo de vida do array = tempo do bloco ou função; Vantagem: eficiência de espaço de memória 34 33 III. Dinâmico de pilha Dimensão e armazenamento são dinâmicos porém assim que forem definidos são fixos durante o tempo de vida do array. Ex. em Ada: (declare blocks) declare STUFF : array (1..N) of FLOAT; begin... end; Vantagem: flexibilidade -tamanho não precisa ser conhecido até que o array seja utilizado. 17

IV. Dinâmico de Heap Dimensão e armazenamento são dinâmicos (e podem mudar qualquer número de vezes durante o seu tempo de vida). Tempo de vida controlado explicitamente pelo programador, ou implicitamente pelo Garbage Collection. Vantagem: flexibilidade O tamanho pode crescer ou diminuir conforme a necessidade. 36 35 Ex. de Array Heap-dinâmico em C: Arrays dinâmicos são apontadores; Não existe verificação de dimensão; Funções padrão: malloc, free void main( ) { char *string; /* Define ponteiro para Nome */ string = malloc(1024); /* Aloca espaço */ free( string ); /* libera espaço */ } 18

Número de índices: FORTRAN I => 1 a 3 dimensões; Ex.: buffer(5)(3)(1) FORTRAN 77 => até 7 dimensões; C, C++, Java => somente uma dimensão, porém elementos podem ser arrays; Ex.: int matriz[5][4]; // array de arrays Outras Linguagens => sem limite. 38 37 Em geral os arrays são inicializados com de uma lista de valores, respeitando a ordem em que os elementos são armazenados Ex. em Fortran: Inicialização de arrays Utilização do comando DATA e colocação dos valores entre /... / na declaração INTEGER LISTA(3)DATA LISTA /0, 5, 5/ Em Pascal e Modula-2 Não permitem inicialização de arrays 19

Ex. em C, C++: Valores serão dados entre { } separados por virgulas, e o compilador calculará a dimensão para o array. int stuff[] = {2, 4, 6, 8}; /* array de 4 números inteiros */ char nome[] = "José"; /* array 4 caracteres finalizado com elemento nulo (zero) */ char *nomes[] = {" jose", "pedro", "Maria"}; /* array de string */ 39 Operações com Arrays Uma operação de array é uma operação que opera na estrutura como uma unidade. Ex. em APL: APL contém muitas operações definidas tanto para vetores como para matrizes. A +B, A *B, A B (*, +, -, etc)) operações definidas para qualquer tipo (escalar, vetor e matrizes). 40 20

41 Fatias (slices) Uma fatia é uma referência a uma parte de um array de qualquer dimensão. Em geral as linguagens não suportam fatias de um array. PL/I foi a primeira linguagem a introduzir este conceito em 1965. 42 21

43 Implementação de Arrays Transformação de índices (expressão) para o endereço de um elemento; Armazenamento dos elementos do array por linha (ordem lexicográfica) ou por coluna (ordem antilexicográfica); 44 22

45 46 23

6 Tipo Array Associativo Array Associativo (Associative Array) é uma coleção não ordenada de elementos indexados por chaves. Problemas de projeto: Qual o esforço para referenciar um elemento? O tamanho do array é estático ou dinâmico? O índice precisa ser armazenado. OBS: Em arrays normais os índices são calculados, e por isso, não são armazenados. 47 7. Tipo Registro Um registro é um conjunto, possivelmente heterogêneo de elementos, onde cada elemento é designado por campo e identificado por um nome e seus atributos. Considerações de projeto: Qual a forma de referenciar cada campo? qualificação por ponto; uso de parênteses; total ou parcialmente qualificado Que operações são definidas para o registro? 48 24

7. Tipo Registro Ex. de registro em COBOL: Sintaxe: COBOL, PL/I utilizam números de níveis para aninhamento de registros. 01 Registro-empregado 02 Nome-Empregado 05 Primeiro Picture is X(20). 05 Meio Picture is X(10). 05 Ultimo Picture is x(20). 02 Salario Picture is 99v99. 49 7. Tipo Registro Exemplo em PASCAL e Modula-2 Reg_Emp : record Nome: record Apelido : string(1..10); nproprio : string(1..10); end; Salario : real; end; 50 25

7. Tipo Registro Exemplo em C struct Reg_Emp { char Primeiro[20]; char Meio[10]; char Ultimo[20]; double Salario; }; 51 7. Tipo Registro Referências a campos do registro sintaxe para especificar e aceder a cada um dos campos de um registro. Sintaxe do COBOL field_name OF record_name_1 OF... OF record_name_n Sintaxe das outras L.P. (notação ponto) record_name_1.record_name_2.... record_name_n.field_name 52 26

7. Tipo Registro Tipos de referências: Referências totalmente qualificadas devem incluir todos os nomes de registros aninhados, finalizando com o nome do campo. Referências parcialmente qualificadas (elíptica) permitem descrever apenas alguns nomes de registros, desde que não exista ambigüidade de referência. Pascal e Modula-2 possuem cláusula with para simplificar referências 53 54 7. Tipo Registro Ex. registo e cláusula with em Pascal: type reg_empregado = record nome : string (40); sexo: (Masculino, Feminino); end; var empregado : reg_empregado with empregado do begin nome := José ; sexo := Masculino; end; 27

7. Tipo Registro Operações com o tipo Registro Atribuição Pascal, Ada, C: Se os tipos forem idênticos; Em Ada, o lado direito pode ser um constante agregada (tipo especial de constante); Cobol: instrução move corresponding para atribuição a campos de mesmo nome. Inicialização Permitido em Ada, usando constantes agregadas. 55 7. Tipo Registro Ada: '=' e '/=' (diferente); operando pode ser constante agregada MOVE CORRESPONDING Comparação COBOL: Copia todos os campos de um registro fonte para os campos de mesmo nome de um registro destino. 56 28

7. Tipo Registro 57 8. Tipo União Uma união é um tipo cujas variáveis podem armazenar tipos de dados diferentes em tempos diferentes da execução. Tipos de união: União livre: Linguagens não oferece qualquer suporte para verificação dos tipos de dados (responsabilidade do programador). União discriminada: Linguagem inclui um identificador dos tipos de dados. 58 29

8. Tipo União Consideração de Projeto: Existe verificação de tipos? Qual? C, C++, Pascal, Fortran: não possui verificação. Union podem ser integradas num registro? Pascal: sim; C, C++: não. 59 8. Tipo União Ex. em Ada: União discriminada; forma = {circulo, retangulo, triangulo, elipse} type figura (aspecto : forma) is record preenchido : boolean; case aspecto is when circulo => diametro : float; when retangulo => lado_1 : integer; lado_2 : integer; end; end record; 60 30

8. Tipo União 61 8. Tipo União Ex. de C, C++: Uniões livres; Não é parte do tipo registro (struct); Não existe verificação de tipo nas referências. Ex. de Java: Não possui o tipo registro nem união. Avaliação: potencialmente não seguro na maior das linguagens, exceto em Ada. 62 31

8. Tipo União type VERTICE (TAG : BOOLEAN) is record case TAG is when true => count : integer; when false => soma : float; end; end record; 63 figura: Descritor para implementação da seguinte união em Ada 9. Tipo Conjunto Um conjunto é um tipo de dados cujas variáveis podem armazenar uma coleção não ordenada de valores distintos de algum tipo ordinal, designado de tipo básico. Considerações de projeto: Qual o máximo número de elementos? Quais as operações disponíveis sobre o conjunto? Ex. de Java: possui uma classe para operações sobre conjuntos. 64 32

9. Tipo Conjunto 65 Ex. em Pascal: Sem tamanho máximo na definição da linguagem; Implementações geralmente impõe um limite. Operações sobre conjuntos: união '+', intersecção '*', diferença '-', comparação '=, superconjunto '>=', subconjunto '<=', pertinência 'in. type cores = ( azul, verde, amarelo, vermelho); coresfrias = (azul, verde); coresquentes = (amarelo, vermelho) conjcoresq = set of coresquentes; var c1, c2 : cores; if c1 in conjcoresq then if ch in ['a', 'e', 'i', 'o', 'u'] then 9. Tipo Conjunto Avaliação: Aumenta a legibilidade; Se uma linguagem não possui o tipo conjunto, este pode ser simulado. Arrays são mais flexíveis que conjuntos, dado disponibilizarem muitas mais operações. 66 33

9 Tipo Conjunto Implementação: Geralmente armazenados como string de bits e usando operações lógicas para operações de conjunto. Ex.: Dado o conjunto ['a'.. 'p'] As variáveis deste conjunto, podem ocupar 16 bits (correspondente aos 16 valores diferentes). Assim, o conjunto ['a', 'd', 'g'] pode ser representado pelos seguintes bits: 1001001000000000 (1=char presente, 0=ausente) 67 10 Tipo Ponteiro Um apontador é um tipo cujos valores consistem em endereços de memória e um valor especial nil (ou null). Principais utilidades: Flexibilidade de endereçamento; Reserva dinâmica de memória. 68 34

10 Tipo Ponteiro Considerações de vida de uma variável do tipo apontador: Qual o tempo de vida de uma variável dinâmica de heap? ( alojada/liberada pelo programador) Apontadores são restritos a tipos específicos? Podem ser utilizados para gestão dinâmica de memória? Pode ser utilizado para endereçamento indireto? A linguagem deve suportar o tipo apontador, o tipo referência ou ambos? 69 10 Tipo Ponteiro 70 35

10 Tipo Ponteiro O processo de perder variáveis heap dinâmicas é chamado de "vazamento de memória" (memory leakage). Operações fundamentais de apontadores: Atribuição de um endereço a um apontador; Referência (diferenciação entre referência explícita e implícita). 71 10 Tipo Ponteiro Problemas com apontadores: Referência oscilante (Dangling pointers): Um apontador pode conter um endereço de uma variável heap-dinâmica que já foi liberada. Geração de lixo (perda do endereço): Uma variável heap-dinâmica quando não é mais referenciada por nenhum apontador, deixa de ser acessível. 72 36

10 Tipo Ponteiro Avaliação dos apontadores: Referências perigosas e lixos são problemas assim como a gestão do heap; Apontadores são como goto's para posições de memória -geram vários modos de acesso a uma célula de memória; Apontadores são necessários - não é possível projetar uma linguagem sem eles. 73 37