Quantificação limitada

Na teoria dos tipos , 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 subtipificação . A quantificação limitada tem sido tradicionalmente estudada no cenário funcional do Sistema 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 . Ela 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. Atributos de objeto são representados como funções que não aceitam argumentos e retornam um objeto. O comportamento específico é então algum nome de função junto com os tipos dos argumentos e o tipo de retorno. A quantificação limitada considera 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. [ citação necessária ]

Quantificação limitada por F

F -quantificação limitada ou quantificação recursivamente limitada , 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 usa como um tipo para algum argumento ou seu valor de retorno. [1]

Exemplo

Esse tipo de restrição de tipo pode ser expressa 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 garante que os objetos sejam mutuamente comparáveis, em contraste com a Test.fMinfunção que usa quantificação limitada F.

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

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

onde

Comparável[T] = {compararPara: T → int}
interface  Comparável < T > { 

    int compareTo ( T outro );  

}

classe pública Inteiro implementa Comparável < Inteiro > {     

    @Override 
public int compareTo ( Inteiro outro ) { // ... } }        
        
    


classe pública String implementa Comparável < String > {     

    @Override 
public int compareTo ( String outro ) { // ... }        
        
    

}

classe pública Teste { public static void main ( String [] args ) { final String a = min ( "gato" , "cachorro" ); final Integer b = min ( 10 , 3 ); final Comparável c = min ( "gato" , 3 ); // Lança ClassCastException em tempo de execução final String str = fMin ( "gato" , "cachorro" ); final Integer i = fMin ( 10 , 3 ); // final Object o = fMin("gato", 3); // Não compila } public static < S extends Comparable > S min ( S a , S b ) { if ( a . compareTo ( b ) <= 0 ) { return a ; } else { return b ; } } public static < T extends Comparable < T >> T fMin ( T a , T b ) { if ( a . compareTo ( b ) <= 0 ) { return a ; } senão { retornar b ; } }   
    
         
             
             
              
             
             
        
    
    
              
            
             
          
             
        
    
    
              
            
             
          
             
        
    

}

Veja também

Notas

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

Referências

  • Cardelli, Luca ; Wegner, Peter (dezembro de 1985). "Sobre a compreensão de tipos, abstração de dados e polimorfismo" (PDF) . Pesquisas de computação da ACM . 17 (4): 471–523. CiteSeerX  10.1.1.117.695 . doi :10.1145/6041.6042. ISSN  0360-0300. S2CID  2921816.
  • Peter S. Canning, William R. Cook , Walter L. Hill, John C. Mitchell e William Olthoff. "Polimorfismo F-limitado para programação orientada a objetos". Em 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 genericidade à 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 Programming Language Design and Implementation , 2001.
  • Pierce, Benjamin C. (2002). Tipos e Linguagens de Programação . MIT Press. ISBN 978-0-262-16209-8.Capítulo 26: Quantificação limitada
Obtido em "https://pt.wikipedia.org/w/index.php?title=Quantificação_limitada&oldid=1175096396"