ej codigo patron proxy

4 views
Skip to first unread message

miguel agustin cardamone

unread,
Jun 14, 2020, 12:42:46 PM6/14/20
to ClubSmalltalk
Hola 

Necesito ayuda un codigo de ejemplo de patron proxy para smalltalk pharo

Gracias

Miguel

============================================================

Hello

I need help a sample pattern proxy code for smalltalk pharo

Thank you

Miguel

Juan

unread,
Jun 14, 2020, 3:04:09 PM6/14/20
to clubsm...@googlegroups.com
Miguel,

La forma más fácil de implementar un proxy es que la clase proxy implemente el mensaje doesNotUndestood como unico mensaje, en verdad, un proxy es un objeto que tiene basicamente
dos características, 1) que no tenga protocolo que no entienda ningún mensaje, 2) que tenga una manera de hacerle llegar los mensajes al objeto proxiado.
Para cumplir con la primera premisa, Pharo, tiene ProtoObject , un  root de classes que no cuelga de Object, porque de alguna manera Object sabe muchas cosas, y un proxy no debería,
Dado que en Smalltalk los Proxys son objects, esto nos lleva a la segunda premisa,hacerle llegar el mensaje o delegar en el objeto proxiado,alli la estrategia cambia, o podria ser mas compleja la relación entre el proxy y su objecto proxiado.
Aqui la forma mas sencilla es que Proxy tenga el mensaje doesNotUnderstood: aMessage, está
estrategia, está basada en algo llamado method lookup, que es como Smalltalk resuelve un mensaje,
Un objeto recibe un mensaje, se fija si en su clase lo puede contestar (si lo tiene implementado) sino delega a su super clase y sin no lo puede responder llegará a subiendo por la jerarquia a Object, object genera una excepcion y  le envia al receptor original del mensaje doesNotUnderstood: aMessage.
Entonces si implementas este mensaje podras enviarle cualquie mensaje a dicho objeto , en el colaborador aMessage   están todos los objetos necesarios para resolver el mensaje (receptor colaboradores enviados como "parametros"  etc).
Resumiendo el proxy es un objeto que proxea a otro. por ejemplo podrias tener 
proxy := Proxy for: onObjectToProxy.
ahora esto indica que el objeto a proxiar queda contenido en el proxy, de manera que el objeto proxy es el receptor de cualquier futuro mensaje. que puede ser cualquiera, entonces poniendole el mensaje doesNotUnderstood interceptas el mensaje y como resuelvas luego es cuestion de tu dominio.
Espero haberte sido útil ,cualquier otra cosa, pregunta.

saludos 
Juan Diaz Cortez

--
--
To post to this group, send email to clubSm...@googlegroups.com
To unsubscribe from this group, send email to clubSmalltal...@googlegroups.com
 
http://www.clubSmalltalk.org
---
Has recibido este mensaje porque estás suscrito al grupo "ClubSmalltalk" de Grupos de Google.
Para cancelar la suscripción a este grupo y dejar de recibir sus mensajes, envía un correo electrónico a clubsmalltal...@googlegroups.com.
Para ver esta conversación en el sitio web, visita https://groups.google.com/d/msgid/clubsmalltalk/cea3fa0c-2873-4320-9e4c-ed6f98bd5260o%40googlegroups.com.

p da

unread,
Jun 14, 2020, 5:54:26 PM6/14/20
to ClubSmalltalk

¿no te vale el ejemplo canónico de GoF que puedes ver por ej. en la wikipedia? https://en.wikipedia.org/wiki/Proxy_pattern

Básicamente un proxy es una clase que ejerce de "hombre en el medio" recibiendo los mensajes que luego reenvía a la clase adecuada, la forma más canónica de implementarlo es un clase (la proxy) que contiene una variable de instancia con la clase final (la clase real a llamar) de forma que cada vez que un objeto (el cliente) llama a un mensaje de la "clase final" en realidad está invocando un mensaje del proxy que a su vez envía un mensaje a la clase final (es el proxy quien decide quién es la clase final y no el cliente)

un ejemplo en smalltalk sería:

Object subclass: #MiProxy
instanceVariableNames: 'LaClaseFinal'
classVariableNames: ''
poolDictionaries: ''
category: 'UserObjects'

MiProxy >> m1

^LaClaseFinal m1.

Object subclass: #ClaseFinal
instanceVariableNames: ''
classVariableNames: ''
poolDictionaries: ''
category: 'UserObjects'

ClaseFinal >> m1

  ^100 factorial.


Lo que te ha respondido Juan es una forma usual de hacerlo en Smalltalk aprovechando las características del lenguaje.

saludos
Reply all
Reply to author
Forward
0 new messages