Baixe o app para aproveitar ainda mais
Prévia do material em texto
Sistemas de Tipos Renata Carvalho UNICAP – UNIVERSIDADE CATÓLICA DE PERNAMBUCO Renata Carvalho Polimor0ismo de Inclusão • Polimorfismo de inclusão é um sistema de Fpo no qual um Fpo pode ter subFpos, que herdam as operações daquele Fpo • Tipos e subFpos • Um Fpo T é um conjunto de valores equipado com operações • Um subFpo de T é um subconjunto dos valores de T equipado com as mesmas operações de T • Todo valor do subFpo também é valor do Fpo T, podendo ser usado no contexto onde um valor do Fpo T é esperado • O conceito de subFpos é uma ideia úFl e comum em programação Polimorfismo de Inclusão Tipos Parametrizados Sobrecarga Conversão de Tipos UNICAP – UNIVERSIDADE CATÓLICA DE PERNAMBUCO Renata Carvalho Polimor0ismo de Inclusão • Em linguagens de programação que suportam subFpos, não é possível estabelecer univocamente o subFpo de um valor • Propriedades gerais dos subFpos • Condição necessária para S ser um subFpo de T:S⊆T • O tipo T é equipado com operações que são aplicáveis a todos os valores do tipo T • Todas essas operações também serão aplicáveis aos valores do subtipo S – S herda as operações de T Polimorfismo de Inclusão Tipos Parametrizados Sobrecarga Conversão de Tipos UNICAP – UNIVERSIDADE CATÓLICA DE PERNAMBUCO Renata Carvalho Polimor0ismo de Inclusão • CompaFbilidade de Fpos na presença de subFpos • V := E • T1 é compaWvel com T2 se e somente se T1 e T2 têm valores em comum • Ou T1 é um subFpo de T2 ou T2 é um subFpo de T1 ou T1 e T2 são subFpos de outro Fpo qualquer • Casos de interesse quando T1 e T2 são compaWveis • T1 é um subFpo de T2: T1 pode ser usado com segurança num contexto onde um valor de T2 é esperado – não precisa de verificação em tempo de execução • T1 não é subFpo de T2: valores do Fpo T1 somente podem ser usados após verificação em tempo de execução para determinar se ele também é um valor do Fpo T2 tipo = T1 tipo = T2 Polimorfismo de Inclusão Tipos Parametrizados Sobrecarga Conversão de Tipos UNICAP – UNIVERSIDADE CATÓLICA DE PERNAMBUCO Renata Carvalho Tipos Parametrizados • Um Fpo parametrizado é um Fpo que toma outros Fpos como parâmetros • Pode-‐se imaginar o τ[]como um Fpo parametrizado de C, que pode ser especializado num Fpo ordinário, como char[], ou float[], ou float[][], pela subsFtuição da variável τ por um Fpo real • Todas as linguagens se programação têm Fpos parametrizados pré-‐definidos Polimorfismo de Inclusão Tipos Parametrizados Sobrecarga Conversão de Tipos UNICAP – UNIVERSIDADE CATÓLICA DE PERNAMBUCO Renata Carvalho Tipos Parametrizados • Exercício • Escreva uma função/procedimento para “concatenar” dois arrays. • UFlize o Fpo parametrizado τ[] • Pode ser um pseudo-‐código • Exemplo: • τ1[] = {0, 1, 2, 3, 4}; • τ2[] = {9, 8, 7}; • resultado = {0, 1, 2, 3, 4, 9, 8, 7} Polimorfismo de Inclusão Tipos Parametrizados Sobrecarga Conversão de Tipos UNICAP – UNIVERSIDADE CATÓLICA DE PERNAMBUCO Renata Carvalho Sobrecarga • Um idenFficador está sobrecarregado se ele denota dois ou mais procedimentos num mesmo escopo • Aceitável apenas quando a chamada do procedimento pode ser feita sem ambiguidade Polimorfismo de Inclusão Tipos Parametrizados Sobrecarga Conversão de Tipos UNICAP – UNIVERSIDADE CATÓLICA DE PERNAMBUCO Renata Carvalho Sobrecarga • Exemplo de funções sobrecarregadas em C • O operador “–” em C denota simultaneamente quatro funções pré-‐definidas • Negação de inteiros (função com Fpo Integer à Integer) • Negação de ponto-‐flutuante (função com Fpo Float à Float) • Subtração de inteiro (função com Fpo Integer x Integer à Integer) • Subtração de ponto-‐flutuante (função com Fpo Float x Float à Float) • Nota-‐se que não há ambiguidade, pois o número e os Fpos dos operandos determinam a função a chamar Polimorfismo de Inclusão Tipos Parametrizados Sobrecarga Conversão de Tipos UNICAP – UNIVERSIDADE CATÓLICA DE PERNAMBUCO Renata Carvalho Sobrecarga • Suponha um idenFficador F denotando simultaneamente funções f1: S1 → T1 e f2: S2 → T2 • Sobrecarga independente de contexto: requer que S1 e S2 sejam não equivalentes • A função a ser chamada sempre pode ser univocamente idenFficada pelo Fpo do parâmetro real • Sobrecarga dependente de contexto: requer apenas que S1 e S2 sejam não equivalentes ou que T1 e T2 sejam não equivalente • Quando S1 e S2 são equivalentes, o contexto onde o F é uFlizado deve ser levado em conta para idenFficar a função a ser chamada • Possibilita a formulação de expressões nas quais a função a ser chamada não pode ser determinada univocamente – tais construções ambíguas devem ser proibidas Polimorfismo de Inclusão Tipos Parametrizados Sobrecarga Conversão de Tipos UNICAP – UNIVERSIDADE CATÓLICA DE PERNAMBUCO Renata Carvalho Conversão de Tipos • Uma conversão de Fposé um mapeamento de valores de um Fpo para valores correspondentes de outro Fpo • Exemplos: • Mapeamento natural de números inteiros para reais • {..., -‐2 à -‐2.0, -‐1 à -‐1.0, 0 à 0.0, +1 à +1.0, +2 à +2.0, ...} • O truncamento e o arredondamento são opções de conversão de Fpos de real para inteiros • Mapeamento de caracteres para strings de tamanho 1 Polimorfismo de Inclusão Tipos Parametrizados Sobrecarga Conversão de Tipos UNICAP – UNIVERSIDADE CATÓLICA DE PERNAMBUCO Renata Carvalho Conversão de Tipos • Conversões de Fpos podem ser mapeamentos totais • Caracteres para códigos de caracteres, inteiros para reais, ... • Conversão de Fpos podem ser mapeamentos parciais • Reais para inteiros, ... • Mapeamentos parciais podem provocar falhas em programas Polimorfismo de Inclusão Tipos Parametrizados Sobrecarga Conversão de Tipos UNICAP – UNIVERSIDADE CATÓLICA DE PERNAMBUCO Renata Carvalho Conversão de Tipos • Conversões de Fpos podem ser explícitas ou implícitas • Um cast é uma conversão de Fpos explícita • Em C, um cast tem a forma (T)E • Uma coerção é uma conversão de Fpos implícita, realizada automaFcamente sempre que o contexto sintáFco exigir • Considere a expressão E no contexto do Fpo T Polimorfismo de Inclusão Tipos Parametrizados Sobrecarga Conversão de Tipos
Compartilhar