Quantificação limitada

Da Wikipédia, a enciclopédia livre
Ir para a navegação Saltar para pesquisar

Na teoria dos tipos , a quantificação limitada (também polimorfismo limitado ou genericidade restrita ) refere-se a quantificadores universais ou existenciais que são restritos ("limitados") para abranger apenas os subtipos de um tipo específico. A quantificação limitada é uma interação de polimorfismo paramétrico com subtipagem . A quantificação limitada tem sido tradicionalmente estudada na configuração funcional do System F <: , mas está disponível em linguagens modernas orientadas a objetos que suportam polimorfismo paramétrico ( genéricos) como Java , C# e Scala .

Visão geral

O propósito da quantificação limitada é permitir que funções polimórficas dependam de algum comportamento específico de objetos em vez de herança de tipo . Ele assume um modelo baseado em registro para classes de objetos, onde cada membro de classe é um elemento de registro e todos os membros de classe são funções nomeadas. Os atributos do objeto são representados como funções que não recebem argumentos e retornam um objeto. O comportamento específico é então algum nome de função junto com os tipos de argumentos e o tipo de retorno. A quantificação limitada permite considerar todos os objetos com tal função. Um exemplo seria uma minfunção polimórfica que considera todos os objetos que são comparáveis ​​entre si.

Quantificação limitada a F

A quantificação limitada por F ou quantificação limitada recursivamente , introduzida em 1989, permite uma tipagem mais precisa de funções que são aplicadas em tipos recursivos. Um tipo recursivo é aquele que inclui uma função que o utiliza como um tipo para algum argumento ou seu valor de retorno. [1]

Exemplo

Esse tipo de restrição de tipo pode ser expresso em Java com uma interface genérica. O exemplo a seguir demonstra como descrever tipos que podem ser comparados entre si e usar isso como informações de digitação em funções polimórficas . A Test.minfunção usa quantificação limitada simples e não preserva o tipo dos tipos atribuídos, em contraste com a Test.Fminfunção que usa quantificação limitada por F.

Em notação matemática, os tipos das duas funções são

min: ∀ T, ∀ S ⊆ {compareTo: T → int}. S → S → S
Fmin: ∀ T ⊆ Comparável[T]. T → T → T

Onde

Comparável[T] = {compareTo: T → int}
interface  Comparable < T >  { 
    public  int  compareTo ( T  other ); 
}

class  Integer  implements  Comparable < Integer >  { 
    @Override 
    public  int  compareTo ( Integer  other )  { 
        // ... 
    } 
}

class  String  implementa  Comparable < String >  { 
    @Override 
    public  int  compareTo ( String  other )  { 
        // ... 
    } 
}

class  Test  { 
    public  static  void  main ( String []  args )  { 
        Comparable < String >  a  =  min ( "cat" ,  "dog" ); 
        Comparável < Integer >  b  =  min ( new  Integer ( 10 ),  new  Integer ( 3 )); 
        String  str  =  Fmin ( "gato" ,  "cachorro" );
        Integer  i  =  Fmin ( new  Integer ( 10 ),  new  Integer ( 3 )); 
    } 
    public  static  < S  extends  Comparable >  S  min ( S  a ,  S  b )  { 
        if  ( a . compareTo ( b )  <=  0 ) 
            return  a ; 
        senão 
            retorna  b ; 
    } 
    public  estático  <T  extends  Comparable < T >>  T  Fmin ( T  a ,  T  b )  { 
        if  ( a . compareTo ( b )  <=  0 ) 
            return  a ; 
        senão 
            retorna  b ; 
    } 
}

Veja também

Notas

  1. ^ Polimorfismo limitado a F para programação orientada a objetos. Canning, Cook , Hill, Olthof e Mitchell . http://dl.acm.org/citation.cfm?id=99392

Referências

  • Cardelli, Lucas ; Wegner, Peter (dezembro de 1985). "Sobre tipos de compreensão, abstração de dados e polimorfismo" (PDF) . Pesquisas de Computação ACM . 17 (4): 471-523. CiteSeerX  10.1.1.117.695 . doi : 10.1145/6041.6042 . ISSN  0360-0300 .
  • Peter S. Canning , William R. Cook , Walter L. Hill , John C. Mitchell e William Olthoff . "Polimorfismo limitado a F para programação orientada a objetos" . In Conference on Functional Programming Languages ​​and Computer Architecture , 1989.
  • Benjamin C. Pierce "Tipos de interseção e polimorfismo limitado". Notas de Aula em Ciência da Computação 664 , 1993.
  • Gilad Bracha , Martin Odersky , David Stoutamire e Philip Wadler . "Tornando o futuro seguro para o passado: Adicionando generalidade à linguagem de programação Java". Em Programação Orientada a Objetos: Sistemas, Linguagens, Aplicações (OOPSLA). ACM, outubro de 1998.
  • Andrew Kennedy e Don Syme . "Design e implementação de genéricos para o .NET Common Language Runtime". Em Design e Implementação de Linguagem de Programação , 2001.
  • Pierce, Benjamin C. (2002). Tipos e Linguagens de Programação . Imprensa do MIT. ISBN 978-0-262-16209-8., Capítulo 26: Quantificação limitada

Links externos