java - tutorial - objective c ultima version
Delegación de Objective-C explicada a un programador de Java (4)
Soy bastante nuevo en Objective-C, pero tengo experiencia en Java. ¿Existe el concepto equivalente de Objective-C "delegación" en Java, para que pueda entender mejor esta noción? ¿Habría alguna forma de emular el concepto de delegación en Java?
La delegación es solo una forma de evitar tener que subclasificar un objeto como una vista de tabla para implementar un comportamiento específico de la aplicación y, en su lugar, poner esa responsabilidad en el controlador. Cuando crea la vista de tabla, le asigna un objeto de controlador, que implementa un conjunto definido de métodos (algunos pueden ser necesarios, otros pueden ser opcionales). Cuando la vista de tabla necesita datos o tiene que tomar una decisión sobre cómo mostrarse, le pregunta al delegado si implementa el método apropiado y lo llama si lo hace para tomar una decisión.
La delegación es un patrón de diseño orientado a objetos. Un ejemplo en Java está en Wikipedia: Patrón de Delegación
java.lang.reflect.Proxy
es el equivalente más cercano en Java. Sin embargo, es tedioso de usar.
Aquí hay una manera de pensar en un delegado: en el ejemplo típico de OOP, tengo un objeto de automóvil. No quiero volver a crear una subclase, solo quiero usarlo tal como está, entonces, ¿cómo hago que actúe como un chevy o un mustang? Le doy un delegado.
Mi automóvil tendría métodos para conducir, métodos para tocar la bocina, etc.
Mi delegado tendría métodos como "¿cuál es mi velocidad máxima" y "cómo suena la bocina" y "son mis ventanas tintadas"
Así que cuando llamo -drive al objeto de mi automóvil, (que no está subclasificado) ese método llama al método topSpeed de mi delegado, y el delegado le dice 120 mph, por lo que el automóvil sabe qué tan rápido debería ir sin tener que ser un mustang.
en Objective C usualmente hay un protocolo que define a qué debe responder un delegado, es decir, para el delegado de mi objeto de automóvil habrá un protocolo declarado así:
@protocol carDelegate
-(int)carTopSpeed;
-(UIColor*)carColor;
-(BodyShape*)carBodyShape;
-(DragCoefficient*)carDragCoefficient;
-(HoodOrnament*)carHoodOrnament
@optional
-(BOOL)windowsTinted;
@end
A continuación, puede crear su propio objeto que cumpla con este protocolo (implementa todos los métodos necesarios y los opcionales que se ven según sea necesario)
Y el objeto del automóvil esperaría que se le pasara un (id) como delegado.
Luego, el objeto del automóvil ha logrado evitar la subclasificación y todavía puede comportarse de acuerdo con las necesidades del usuario.