Asumiendo un lenguaje con algún tipo de seguridad inherente (por ejemplo, no JavaScript):
Dado un método que acepta a SuperType
, sabemos que en la mayoría de los casos en los que podríamos sentir la tentación de realizar pruebas de tipo para elegir una acción:
public void DoSomethingTo(SuperType o) {
if (o isa SubTypeA) {
o.doSomethingA()
} else {
o.doSomethingB();
}
}
Por lo general, deberíamos, si no siempre, crear un método único y reemplazable en el SuperType
y hacer esto:
public void DoSomethingTo(SuperType o) {
o.doSomething();
}
... en el que cada subtipo tiene su propia doSomething()
implementación. El resto de nuestra aplicación puede ignorar adecuadamente si alguno de ellos SuperType
es realmente un SubTypeA
o un SubTypeB
.
Maravilloso.
Pero, todavía tenemos is a
operaciones similares en la mayoría, si no en todos, los lenguajes de tipo seguro. Y eso sugiere una posible necesidad de pruebas de tipo explícitas.
Por lo tanto, en qué situaciones, si las hay, deben nosotros o tienen que realizar pruebas de tipo explícito?
Perdona mi distracción o falta de creatividad. Sé que lo he hecho antes; pero, honestamente, hace tanto tiempo que no recuerdo si lo que hice fue bueno. Y en la memoria reciente, no creo que haya encontrado la necesidad de probar tipos fuera de mi JavaScript de vaquero.