Subtipado (Informàtica)
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.
Java
[editar | editar còdic]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!
}
}Python
[editar | editar còdic]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]- ↑ (2002) Types and Programming Languages, Cambridge, Massachusetts: The MIT Press, pp. 183-184.
Referències
[editar | editar còdic]
- Este artícul conté una traducció derivada de «Subtipado (Informática)» de Wikipedia en castellà publicada baix la Llicència de documentació lliure de GNU i la Llicència Creative Commons Reconeiximent-CompartirIgual 4.0 Internacional.