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 SuperTypey 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 SuperTypees realmente un SubTypeAo un SubTypeB.
Maravilloso.
Pero, todavía tenemos is aoperaciones 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.