Alaska Software Inc. - Xbp de usuario: METODOS
Username: Password:
AuthorTopic: Xbp de usuario: METODOS
Jos Luis Otermin [Alaska Software]Xbp de usuario: METODOS
on Wed, 14 Dec 2011 12:06:26 -0300
Hola a Tod@s.

Recientemente un colega hizo una consulta por correo y me pareci que el 
tema amerita una discusin pblica.

Se trata de los mtodos

a) ACCESS ASSIGN METHOD

b) INLINE ASSIGN METHOD

c) INLINE ACCESS METHOD

En el caso a) se trata de un mtodo que permite tanto la consulta como la 
asignacin de un valor cuyo nombre permanece protegido en el interior del 
objeto.

Por ejemplo:

CLASS MiClase
   EXPORTED:
   VAR Nombre
   VAR Telefono
   VAR Cliente
   ACCESS ASSIGN METHOD Nombre
   ACCESS METHOD Telefono
   ASSIGN METHOD Cliente
   ...
ENDCLASS

ACCESS ASSIGN METHOD MiClase:Nombre( Nombre )
IF ISCHARACTER( Nombre )
    ::Nombre := Nombre
ENDIF
RETURN ::Nombre

ACCESS METHOD MiClase:Telefono()
RETURN ::Telefono

ASSIGN METHOD Cliente( Cliente )
IF ISLOGICAL( Cliente )
    ::Cliente := Cliente
ENDIF
RETURN ::Cliente

Casos de uso:

oMiClase:Nombre := "Manola"
? oMiClase:Nombre  --> Manola

oMiClase:Nombre := 555
? oMiClase:Nombre  --> Manola

oMiClase:Nombre += " Prez"
? oMiClase:Nombre  --> Manola Prez

Ntese que ::Telefono debe ser asignado desde algn mtodo del objeto pero 
NO desde oMiClase:Telefono() pues el dato es de SOLO LECTURA.

Para el caso de ::Cliente, puede modificarse el atributo desde el mtodo 
nicamente. Por supuesto, puede accederse al dato.

ACCESS ASSIGN es el caso ms completo de los tres que pueden implementarse.

NOTA: La variable de acceso (Nombre) debe tener LA MISMA visibilidad que el 
mtodo ACCESS ASSIGN.

b) Los atributos relacionados con mtodos ASSIGN reciben sus valores a 
travs del mtodo nicamente.

c) Los mtodos ACCESS son especialmente tiles para permitir la lectura de 
datos almacenados en atributos de un objeto, permite su uso como si de un 
atributo mismo se tratara pero con proteccin contra escritura.

Espero haber sido claro.

Saludos

Jose Luis Otermin
Alaska Software
Osvaldo Ramirez Re: Xbp de usuario: METODOS
on Wed, 14 Dec 2011 13:32:18 -0700
Estimado che,

Hace buen rato que no te leiamos ...


Excelente aportacion para los burros como yo!!!



Saludos y un abrazo
Osvaldo Ramirez


On 12/14/2011 8:06 AM, José Luis Otermin [Alaska Software] wrote:
> Hola a Tod@s.
>
> Recientemente un colega hizo una consulta por correo y me pareció que el
> tema amerita una discusión pública.
>
> Se trata de los métodos
>
> a) ACCESS ASSIGN METHOD
>
> b) INLINE ASSIGN METHOD
>
> c) INLINE ACCESS METHOD
>
> En el caso a) se trata de un método que permite tanto la consulta como la
> asignación de un valor cuyo nombre permanece protegido en el interior del
> objeto.
>
> Por ejemplo:
>
> CLASS MiClase
>     EXPORTED:
>     VAR Nombre
>     VAR Telefono
>     VAR Cliente
>     ACCESS ASSIGN METHOD Nombre
>     ACCESS METHOD Telefono
>     ASSIGN METHOD Cliente
>     ...
> ENDCLASS
>
> ACCESS ASSIGN METHOD MiClase:Nombre( Nombre )
> IF ISCHARACTER( Nombre )
>      ::Nombre := Nombre
> ENDIF
> RETURN ::Nombre
>
> ACCESS METHOD MiClase:Telefono()
> RETURN ::Telefono
>
> ASSIGN METHOD Cliente( Cliente )
> IF ISLOGICAL( Cliente )
>      ::Cliente := Cliente
> ENDIF
> RETURN ::Cliente
>
> Casos de uso:
>
> oMiClase:Nombre := "Manola"
> ? oMiClase:Nombre  -->  Manola
>
> oMiClase:Nombre := 555
> ? oMiClase:Nombre  -->  Manola
>
> oMiClase:Nombre += " Pérez"
> ? oMiClase:Nombre  -->  Manola Pérez
>
> Nótese que ::Telefono debe ser asignado desde algún método del objeto pero
> NO desde oMiClase:Telefono() pues el dato es de SOLO LECTURA.
>
> Para el caso de ::Cliente, puede modificarse el atributo desde el método
> únicamente. Por supuesto, puede accederse al dato.
>
> ACCESS ASSIGN es el caso más completo de los tres que pueden implementarse.
>
> NOTA: La variable de acceso (Nombre) debe tener LA MISMA visibilidad que el
> método ACCESS ASSIGN.
>
> b) Los atributos relacionados con métodos ASSIGN reciben sus valores a
> través del método únicamente.
>
> c) Los métodos ACCESS son especialmente útiles para permitir la lectura de
> datos almacenados en atributos de un objeto, permite su uso como si de un
> atributo mismo se tratara pero con protección contra escritura.
>
> Espero haber sido claro.
>
> Saludos
>
> Jose Luis Otermin
> Alaska Software
>
>
>
Hector PezoaRe: Xbp de usuario: METODOS
on Wed, 14 Dec 2011 20:23:36 -0300
Pepe Luis

Se le agradece la respuesta , veo que hoy amanecio iluminado.
Se capta perfectamente su explicacion, hacian faltas sus pildoritas
si que ojala, lo haga en forma mas continua, muchos se lo agradeceran.
La proxima si puede explicar las bondades de xbpget y las diferencias con
Sle , etc etc

Como puedes apreciar estimado amigo Osvaldo la Manuela nos persigue

Saluda
Hector


"Osvaldo Ramirez" <ramirezosvaldo@prodigy.net.mx> escribi en el mensaje 
news:6736f35e$7db091d0$123549@news.alaska-software.com...
>
> Estimado che,
>
> Hace buen rato que no te leiamos ...
>
>
> Excelente aportacion para los burros como yo!!!
>
>
>
> Saludos y un abrazo
> Osvaldo Ramirez
>
>
> On 12/14/2011 8:06 AM, Jos Luis Otermin [Alaska Software] wrote:
>> Hola a Tod@s.
>>
>> Recientemente un colega hizo una consulta por correo y me pareci que el
>> tema amerita una discusin pblica.
>>
>> Se trata de los mtodos
>>
>> a) ACCESS ASSIGN METHOD
>>
>> b) INLINE ASSIGN METHOD
>>
>> c) INLINE ACCESS METHOD
>>
>> En el caso a) se trata de un mtodo que permite tanto la consulta como la
>> asignacin de un valor cuyo nombre permanece protegido en el interior del
>> objeto.
>>
>> Por ejemplo:
>>
>> CLASS MiClase
>>     EXPORTED:
>>     VAR Nombre
>>     VAR Telefono
>>     VAR Cliente
>>     ACCESS ASSIGN METHOD Nombre
>>     ACCESS METHOD Telefono
>>     ASSIGN METHOD Cliente
>>     ...
>> ENDCLASS
>>
>> ACCESS ASSIGN METHOD MiClase:Nombre( Nombre )
>> IF ISCHARACTER( Nombre )
>>      ::Nombre := Nombre
>> ENDIF
>> RETURN ::Nombre
>>
>> ACCESS METHOD MiClase:Telefono()
>> RETURN ::Telefono
>>
>> ASSIGN METHOD Cliente( Cliente )
>> IF ISLOGICAL( Cliente )
>>      ::Cliente := Cliente
>> ENDIF
>> RETURN ::Cliente
>>
>> Casos de uso:
>>
>> oMiClase:Nombre := "Manola"
>> ? oMiClase:Nombre  -->  Manola
>>
>> oMiClase:Nombre := 555
>> ? oMiClase:Nombre  -->  Manola
>>
>> oMiClase:Nombre += " Prez"
>> ? oMiClase:Nombre  -->  Manola Prez
>>
>> Ntese que ::Telefono debe ser asignado desde algn mtodo del objeto 
>> pero
>> NO desde oMiClase:Telefono() pues el dato es de SOLO LECTURA.
>>
>> Para el caso de ::Cliente, puede modificarse el atributo desde el mtodo
>> nicamente. Por supuesto, puede accederse al dato.
>>
>> ACCESS ASSIGN es el caso ms completo de los tres que pueden 
>> implementarse.
>>
>> NOTA: La variable de acceso (Nombre) debe tener LA MISMA visibilidad que 
>> el
>> mtodo ACCESS ASSIGN.
>>
>> b) Los atributos relacionados con mtodos ASSIGN reciben sus valores a
>> travs del mtodo nicamente.
>>
>> c) Los mtodos ACCESS son especialmente tiles para permitir la lectura 
>> de
>> datos almacenados en atributos de un objeto, permite su uso como si de un
>> atributo mismo se tratara pero con proteccin contra escritura.
>>
>> Espero haber sido claro.
>>
>> Saludos
>>
>> Jose Luis Otermin
>> Alaska Software
>>
>>
>>
>
Pablo BotellaRe: Xbp de usuario: METODOS
on Thu, 15 Dec 2011 21:16:32 +0100
Hola Jose Luis,

Como dicen los amigos Hector y Osvaldo ya teniamos ganas de verte por aqui que nos tenías abandonados 

Un poco más de lo mismo:

CLASS MiClase                                         
EXPORTED:                                             
VAR Nombre                                     
  --------------------------------------------
INLINE ASSIGN METHOD PutNombre(v) VAR Nombre          
::Nombre := Var2Char(v)                        
return NIL    este valor siempre se descarta asi que ponemos NIL                                  
 --------------------------------------------
INLINE ACCESS METHOD GetNombre(lOriginal) VAR Nombre  
if Empty( lOriginal)                           
   return Upper( Var2Char(::Nombre) )          
end                                            
return ::Nombre                                
 --------------------------------------------
ENDCLASS                                              
 --------------------------------------------------------
proc main
local o := MiClase():New()
o:Nombre := "Pepito"
? o:nombre  -> PEPITO
? o:GetNombre()  -> PEPITO
? o:GetNombre(.T.)  -> Pepito
inkey(0)
return 

1) En este caso la variable Nombre solo es accesible directamente desde los métodos PutNombre y GetNombre que son los encargados de leer y escribir esta variable. tanto desde fuera de la clase como desde el resto de métodos cuando tratemos de acceder a la variable ::Nombre estaremos llamando a estos 2 métodos uno para asignar el valor y el otro para recogerlo.

2) Como en el método de acceso estamos devolviendo el valor transformado, le hemos agregado un parametro extra al método GetNombre()
de modo que cuando se llame automaticamente como resultado del acceso a la variable Nombre nos devuelva el valor transformado, mientras que nos dejamos una puerta trasera abierta para cuando queramos acceder al valor tal y como está almacenado en la variable.

Otro día más 

Saludos,
Pablo

PS: Convence al gran oso polar para que te lleve de paseo a Hannover, que un DevCon sin Che es mucho más aburrido.
Osvaldo Ramirez Re: Xbp de usuario: METODOS
on Fri, 16 Dec 2011 16:56:17 -0700
Como siempre, gracias a ambos


Un devcon sin el che, es --- Un Mundial sin Argentina?

Aquien vamos a ganarle, los mexicanos ?

Mandale al Oso unas buenas focas, para q te lleveo de paseo!

Saludos amigo
Osvaldo Ramirez

On 12/15/2011 1:16 PM, Pablo Botella wrote:
> Hola Jose Luis,
>
> Como dicen los amigos Hector y Osvaldo ya teniamos ganas de verte por aqui que nos tenías abandonados 
>
> Un poco más de lo mismo:
>
> CLASS MiClase
> EXPORTED:
> VAR Nombre
>    --------------------------------------------
> INLINE ASSIGN METHOD PutNombre(v) VAR Nombre
> ::Nombre := Var2Char(v)
> return NIL    este valor siempre se descarta asi que ponemos NIL
>  --------------------------------------------
> INLINE ACCESS METHOD GetNombre(lOriginal) VAR Nombre
> if Empty( lOriginal)
>     return Upper( Var2Char(::Nombre) )
> end
> return ::Nombre
>  --------------------------------------------
> ENDCLASS
>  --------------------------------------------------------
> proc main
> local o := MiClase():New()
> o:Nombre := "Pepito"
> ? o:nombre  ->  PEPITO
> ? o:GetNombre()  ->  PEPITO
> ? o:GetNombre(.T.)  ->  Pepito
> inkey(0)
> return
>
> 1) En este caso la variable Nombre solo es accesible directamente desde los métodos PutNombre y GetNombre que son los encargados de leer y escribir esta variable. tanto desde fuera de la clase como desde el resto de métodos cuando tratemos de acceder a la variable ::Nombre estaremos llamando a estos 2 métodos uno para asignar el valor y el otro para recogerlo.
>
> 2) Como en el método de acceso estamos devolviendo el valor transformado, le hemos agregado un parametro extra al método GetNombre()
> de modo que cuando se llame automaticamente como resultado del acceso a la variable Nombre nos devuelva el valor transformado, mientras que nos dejamos una puerta trasera abierta para cuando queramos acceder al valor tal y como está almacenado en la variable.
>
> Otro día más 
>
> Saludos,
> Pablo
>
> PS: Convence al gran oso polar para que te lleve de paseo a Hannover, que un DevCon sin Che es mucho más aburrido.
>
>
>
>
>
>
>
>
>
Hector PezoaRe: Xbp de usuario: METODOS
on Fri, 16 Dec 2011 22:31:00 -0300
Si Osvaldo que vaya a Hannover

Revue, unsere kche:  so vielseitig vie unser programm  und vieles mehr !
Elli's Elliot




"Osvaldo Ramirez" <ramirezosvaldo@prodigy.net.mx> escribi en el mensaje 
news:14357241$52625c06$18ef20@news.alaska-software.com...
>
> Como siempre, gracias a ambos
>
>
> Un devcon sin el che, es --- Un Mundial sin Argentina?
>
> Aquien vamos a ganarle, los mexicanos ?
>
> Mandale al Oso unas buenas focas, para q te lleveo de paseo!
>
> Saludos amigo
> Osvaldo Ramirez
>
> On 12/15/2011 1:16 PM, Pablo Botella wrote:
>> Hola Jose Luis,
>>
>> Como dicen los amigos Hector y Osvaldo ya teniamos ganas de verte por 
>> aqui que nos tenas abandonados 
>>
>> Un poco ms de lo mismo:
>>
>> CLASS MiClase
>> EXPORTED:
>> VAR Nombre
>>    --------------------------------------------
>> INLINE ASSIGN METHOD PutNombre(v) VAR Nombre
>> ::Nombre := Var2Char(v)
>> return NIL    este valor siempre se descarta asi que ponemos NIL
>>  --------------------------------------------
>> INLINE ACCESS METHOD GetNombre(lOriginal) VAR Nombre
>> if Empty( lOriginal)
>>     return Upper( Var2Char(::Nombre) )
>> end
>> return ::Nombre
>>  --------------------------------------------
>> ENDCLASS
>>  --------------------------------------------------------
>> proc main
>> local o := MiClase():New()
>> o:Nombre := "Pepito"
>> ? o:nombre  ->  PEPITO
>> ? o:GetNombre()  ->  PEPITO
>> ? o:GetNombre(.T.)  ->  Pepito
>> inkey(0)
>> return
>>
>> 1) En este caso la variable Nombre solo es accesible directamente desde 
>> los mtodos PutNombre y GetNombre que son los encargados de leer y 
>> escribir esta variable. tanto desde fuera de la clase como desde el resto 
>> de mtodos cuando tratemos de acceder a la variable ::Nombre estaremos 
>> llamando a estos 2 mtodos uno para asignar el valor y el otro para 
>> recogerlo.
>>
>> 2) Como en el mtodo de acceso estamos devolviendo el valor transformado, 
>> le hemos agregado un parametro extra al mtodo GetNombre()
>> de modo que cuando se llame automaticamente como resultado del acceso a 
>> la variable Nombre nos devuelva el valor transformado, mientras que nos 
>> dejamos una puerta trasera abierta para cuando queramos acceder al valor 
>> tal y como est almacenado en la variable.
>>
>> Otro da ms 
>>
>> Saludos,
>> Pablo
>>
>> PS: Convence al gran oso polar para que te lleve de paseo a Hannover, que 
>> un DevCon sin Che es mucho ms aburrido.
>>
>>
>>
>>
>>
>>
>>
>>
>>
>
Jorge LRe: Xbp de usuario: METODOS
on Sat, 17 Dec 2011 08:30:58 -0300
Osvaldo, siendo argentino te pido que hablemos de devcon ,
ya que no estamos acostumbrando a ver todo tipo de torneo sin argentina
al menos hasta que pase esta generación de jugadores super-estrellas



"Osvaldo Ramirez"  escribió en el mensaje de 
noticias:14357241$52625c06$18ef20@news.alaska-software.com...


Como siempre, gracias a ambos


Un devcon sin el che, es --- Un Mundial sin Argentina?

Aquien vamos a ganarle, los mexicanos ?

Mandale al Oso unas buenas focas, para q te lleveo de paseo!

Saludos amigo
Osvaldo Ramirez

On 12/15/2011 1:16 PM, Pablo Botella wrote:
> Hola Jose Luis,
>
> Como dicen los amigos Hector y Osvaldo ya teniamos ganas de verte por aqui 
> que nos tenías abandonados 
>
> Un poco más de lo mismo:
>
> CLASS MiClase
> EXPORTED:
> VAR Nombre
>    --------------------------------------------
> INLINE ASSIGN METHOD PutNombre(v) VAR Nombre
> ::Nombre := Var2Char(v)
> return NIL    este valor siempre se descarta asi que ponemos NIL
>  --------------------------------------------
> INLINE ACCESS METHOD GetNombre(lOriginal) VAR Nombre
> if Empty( lOriginal)
>     return Upper( Var2Char(::Nombre) )
> end
> return ::Nombre
>  --------------------------------------------
> ENDCLASS
>  --------------------------------------------------------
> proc main
> local o := MiClase():New()
> o:Nombre := "Pepito"
> ? o:nombre  ->  PEPITO
> ? o:GetNombre()  ->  PEPITO
> ? o:GetNombre(.T.)  ->  Pepito
> inkey(0)
> return
>
> 1) En este caso la variable Nombre solo es accesible directamente desde 
> los métodos PutNombre y GetNombre que son los encargados de leer y 
> escribir esta variable. tanto desde fuera de la clase como desde el resto 
> de métodos cuando tratemos de acceder a la variable ::Nombre estaremos 
> llamando a estos 2 métodos uno para asignar el valor y el otro para 
> recogerlo.
>
> 2) Como en el método de acceso estamos devolviendo el valor transformado, 
> le hemos agregado un parametro extra al método GetNombre()
> de modo que cuando se llame automaticamente como resultado del acceso a la 
> variable Nombre nos devuelva el valor transformado, mientras que nos 
> dejamos una puerta trasera abierta para cuando queramos acceder al valor 
> tal y como está almacenado en la variable.
>
> Otro día más 
>
> Saludos,
> Pablo
>
> PS: Convence al gran oso polar para que te lleve de paseo a Hannover, que 
> un DevCon sin Che es mucho más aburrido.
>
>
>
>
>
>
>
>
>
Jos Luis Otermin [Alaska Software]Re: Xbp de usuario: METODOS
on Sat, 17 Dec 2011 10:06:31 -0300
Hola mi cuate,

Me encantara ir a DevCon pero estoy sobrepasado con mis tareas y proyectos. 
Ir para el norte pero en las vacas de Julio. Es probable que en 2013 pueda 
llevar a mis hijas conmigo 
Entretanto, disfruto el ayudar a los colegas programadores y, cranme, es 
muy gratificante dar algo que los dems consideren de utilidad.

Si los colegas que nos leen se decidieran a participar, compartiran - estoy 
seguro - esa misma sensacin.

Mientras tanto, hago el sano ejercicio que se me recomend cuando se inici 
el foro: No meterme hasta que sea necesario. Es difcil vencer la tentacin 
pero se puede 

Con alegra veo que nuestro colega Jimmy (Auge Ohr) [Ojo Odo - en lengua de 
Castilla] participa del foro con entusiasmo.

Willkommen und Schnen Dank, Jimmy!
Bienvenido y muchas gracias, Jimmy!

Un abrazo a todos los colegas y amigos.

Saludos

Jose Luis Otermin
Alaska Software


"Osvaldo Ramirez" <ramirezosvaldo@prodigy.net.mx> escribi en el mensaje 
news:14357241$52625c06$18ef20@news.alaska-software.com...
>
> Como siempre, gracias a ambos
>
>
> Un devcon sin el che, es --- Un Mundial sin Argentina?
>
> Aquien vamos a ganarle, los mexicanos ?
>
> Mandale al Oso unas buenas focas, para q te lleveo de paseo!
>
> Saludos amigo
> Osvaldo Ramirez
>
> On 12/15/2011 1:16 PM, Pablo Botella wrote:
>> Hola Jose Luis,
>>
>> Como dicen los amigos Hector y Osvaldo ya teniamos ganas de verte por 
>> aqui que nos tenas abandonados 
>>
>> Un poco ms de lo mismo:
>>
>> CLASS MiClase
>> EXPORTED:
>> VAR Nombre
>>    --------------------------------------------
>> INLINE ASSIGN METHOD PutNombre(v) VAR Nombre
>> ::Nombre := Var2Char(v)
>> return NIL    este valor siempre se descarta asi que ponemos NIL
>>  --------------------------------------------
>> INLINE ACCESS METHOD GetNombre(lOriginal) VAR Nombre
>> if Empty( lOriginal)
>>     return Upper( Var2Char(::Nombre) )
>> end
>> return ::Nombre
>>  --------------------------------------------
>> ENDCLASS
>>  --------------------------------------------------------
>> proc main
>> local o := MiClase():New()
>> o:Nombre := "Pepito"
>> ? o:nombre  ->  PEPITO
>> ? o:GetNombre()  ->  PEPITO
>> ? o:GetNombre(.T.)  ->  Pepito
>> inkey(0)
>> return
>>
>> 1) En este caso la variable Nombre solo es accesible directamente desde 
>> los mtodos PutNombre y GetNombre que son los encargados de leer y 
>> escribir esta variable. tanto desde fuera de la clase como desde el resto 
>> de mtodos cuando tratemos de acceder a la variable ::Nombre estaremos 
>> llamando a estos 2 mtodos uno para asignar el valor y el otro para 
>> recogerlo.
>>
>> 2) Como en el mtodo de acceso estamos devolviendo el valor transformado, 
>> le hemos agregado un parametro extra al mtodo GetNombre()
>> de modo que cuando se llame automaticamente como resultado del acceso a 
>> la variable Nombre nos devuelva el valor transformado, mientras que nos 
>> dejamos una puerta trasera abierta para cuando queramos acceder al valor 
>> tal y como est almacenado en la variable.
>>
>> Otro da ms 
>>
>> Saludos,
>> Pablo
>>
>> PS: Convence al gran oso polar para que te lleve de paseo a Hannover, que 
>> un DevCon sin Che es mucho ms aburrido.
>>
>>
>>
>>
>>
>>
>>
>>
>>
>
AUGE_ OHRRe: Xbp de usuario: METODOS
on Tue, 20 Dec 2011 01:50:08 +0100
hi,

> Con alegra veo que nuestro colega Jimmy (Auge Ohr) [Ojo Odo - en lengua
> de Castilla] participa del foro con entusiasmo.
>
> Willkommen und Schnen Dank, Jimmy!
> Bienvenido y muchas gracias, Jimmy!

i try to help in News Forum but my spanish is very bad
so i have to use http://translate.google.de/

for Xbase++ User i also made PDR_LFU

Ownerdraw and Phil Ide LFU,
public.xbase++.bugreport, 09.12.2011

the "lates" Version should work fine and you can "download" PDR
from Alaska Knowledge Base into local DBF and "search" in DBF
for workaround if you have a Problem.

i also include AskKB.PRG as Source to show how to use
KBonline.LIB / DLL to "fill" PDRS.DBF in a loop.

please read README.TXT before, thx

greetings by OHR
Jimmy