Anar al contingut

Subtipado (Informàtica)

De L'Enciclopèdia, la wikipedia en valencià

En el context de l'informàtica, el subtipado és una classe de polimorfisme. Es definix com una relació entre dos tipos de manera que si un tipo S és subtipo de T (denotat com a S <: T), en tots els llocs en els que es pot utilisar un valor de tipo T, també és vàlit un de tipo S. En esta relació es denomina a S subtipo i a T, supertipo.

L'eixemple més típic d'esta relació es dona en el paradigma de la programació orientada a objectes, en concret en la relació d'herència entre classes.

Atres eixemples inclouen, el subtipado de registres i funcions en el paradigma funcional o el duck typing en llenguages en tipado dinàmic com Python o JavaScript.

Eixemples de subtipado

[editar | editar còdic]

Un eixemple simple de subtipado és la relació entre dos tipos, "gos" i "animal", a on animal és el supertipo i gos el subtipo. Un gos és un animal, pero no tots els animals són gossos.

Com a eixemple de subtipado en un llenguage orientat a objectes:

// archive Animal.java
interface Animal {
  public void crit();
}

// archive gos.java
class Gos implements Animal {
  public void crit() {
    this.lladrit();
  }
  public void lladrit() {
    System.out.println("Guau!")
  }
  public Gos() { }

  // ...
}

// archiu main.java
class Main {
  public static int main(int argc, String [] argv) {
    Animal animal = Gos()
    animal.crit()
    // -> Guau!
  }
}

Com a eixemple de subtipado per duck typing:

class Gos:
  def crit(self):
    print("Guau!")

class Ànet:
  def crit(self):
    print("Cuac!")

def fes_soroll(animal):
    # En este cas, animal és un supertipo de tots els valors en una funció
    # cride()
    animal.crit()

gos = Gos()
fes_soroll(gos)
# -> Guau!

ànet = Ànet()
fes_soroll(ànet)
# -> Cuac!

Subtipado de registres en el paradigma funcional

[editar | editar còdic]

És típic en llenguages funcionals incloure un sistema de subtipado de registres de manera que S és un subtipo de T si totes les claus del supertipo T estan presents en el subtipo S en valors de tipos compatibles.

Esta definició obedix al fet de que sempre es poden ignorar claus adicionals de S per a compatibilisar-los i que la reordenació de parells clau-valor és llegítima, ya que no existix l'accés indexat a esta estructura de senyes, solament per clau.[1]

D'esta forma, si en una variant del càlcul lambda tipado i en soport per a declaracions de tipos, l'estil de subtipado mencionat i registres i sancers, es definix la següent expressió:

T := {a: Sancer, b: Entere}
S := {b: Sancer, c: Sancer, a: Sancer}

(λv: T. (T.a)) ({a = 3, b = 2, c = 5}: S)

Esta seria tipable i de tipo 'Sancer'.

Referències

[editar | editar còdic]
  1. (2002) Types and Programming Languages, Cambridge, Massachusetts: The MIT Press, pp. 183-184.


Referències

[editar | editar còdic]