interfaz (Java) que acabo de leer el artículo de Wikipedia sobre duck typing, y siento que me olvido de un punto importante sobre el concepto de interfaz Solía en Java:tipificación de pato y el concepto
"When I see a bird that walks like a duck and swims like a duck and quacks like a duck, I call that bird a duck."
class Duck:
def quack(self):
print("Quaaaaaack!")
def feathers(self):
print("The duck has white and gray feathers.")
def swim(self):
print("Swim seamlessly in the water")
class Person:
def quack(self):
print("The person imitates a duck.")
def feathers(self):
print("The person takes a feather from the ground and shows it.")
def name(self):
print("John Smith")
def in_the_forest(duck):
duck.quack()
duck.feathers()
def game():
donald = Duck()
john = Person()
in_the_forest(donald)
in_the_forest(john)
game()
¿y si, en in_the_forest
, escribo:
- lo hace
quack
como un pato? sí - ¿tiene pato
feathers
? sí - genial, es un pato que tenemos!
y posterior, porque sé que es un pato, lo quiero swim
? john
se hundirá!
No quiero que mi aplicación falle (aleatoriamente) en el medio de su proceso solo porque John fingió ser un pato, pero supongo que no sería una buena idea verificar cada atributo del objeto cuando lo recibo ...?
+1: pregunta bien presentada – msw
En resumen, no se preocupe. Usted escribe buenas pruebas que cubren tantas rutas de código y casos de esquina como sea humanamente posible, pero el 100% de seguridad nunca es posible. Y tenga en cuenta que no puede tener 100% de seguridad con Java o la mayoría de otros sistemas de tipo estático;) – delnan
+1: una pregunta realmente bien presentada sobre un tema importante, con recuentos con excelentes respuestas. Lo siento, solo puedo darle solo 1 voto positivo. – Dave