]> git.llucax.com Git - z.facultad/75.07/algowars.git/blob - doc/src-html/auxiliares/ObjetoPersistente.pas
Import inicial después del "/var incident". :(
[z.facultad/75.07/algowars.git] / doc / src-html / auxiliares / ObjetoPersistente.pas
1 <HTML><HEAD>\r
2 <TITLE>File: objetopersistente.pas </TITLE>\r
3 <META NAME="GENERATOR" CONTENT="PasToHTML(Bystricky Vladimir)">\r
4 </HEAD>\r
5 <BODY BGCOLOR="#FFFFFF">\r
6 <A NAME=objetopersistente.pas><CENTER><H3>objetopersistente.pas</H3></A><I> from <A HREF=/proyecto/doc/src-html/AlgoWars.html> Project: AlgoWars.dpr</A></I></CENTER>\r
7 <HR>\r
8 <PRE>\r
9 <I><FONT COLOR="Navy">{** Es una clase abstracta para hacer persistente un objeto. \r
10     Básicamente provee métodos para serialización.<br> \r
11     <U>NOTA:</U> \r
12     <PRE> \r
13       Es importante que el ID del objeto sea el primer atributo en la \r
14       serialización, de otra manera puede ser malinterpretado al des- \r
15       serializarlo. \r
16       El orden del resto de los atributos deben ser respetados también. \r
17       Aunque es bastante probable que fucione si están en otro órden, \r
18       no está 100% asegurado y si se hace en otro orden los resultados \r
19       pueden ser inesperados o pueden surgir errores. \r
20     <PRE>}</FONT></I> \r
21 <B>unit</B> ObjetoPersistente; \r
22  \r
23 <B>interface</B> \r
24  \r
25 <B>uses</B> \r
26   <I><FONT COLOR="Navy">{$IFDEF DebugAlgoWars}</FONT></I> \r
27   Objeto, \r
28   <I><FONT COLOR="Navy">{$ENDIF}</FONT></I> \r
29   Sysutils; \r
30  \r
31 <B>type</B> \r
32   <I><FONT COLOR="Navy">{** Excepcion producida si hay un error al serializar.}</FONT></I> \r
33   ESerializacion = <B>class</B>( Exception ) \r
34   <B>end</B>; \r
35  \r
36   <I><FONT COLOR="Navy">{** Es una clase abstracta para hacer persistente un objeto. \r
37       Básicamente provee métodos para serialización. \r
38       NOTA: Es importante que el ID del objeto sea el primer atributo en la \r
39             serialización, de otra manera puede ser malinterpretado al des- \r
40             serializarlo.}</FONT></I> \r
41   cObjetoPersistente = <B>class</B><I><FONT COLOR="Navy">{$IFDEF DebugAlgoWars}</FONT></I>( cObjeto )<I><FONT COLOR="Navy">{$ENDIF}</FONT></I> \r
42     <B>private</B> \r
43       aID: <B>string</B>; <I><FONT COLOR="Navy">// Identificación UNICA de la instancia </FONT></I>\r
44     <B>protected</B> \r
45       <I><FONT COLOR="Navy">{** Setea la identificacion del objeto}</FONT></I> \r
46       <B>procedure</B> <A HREF="#cObjetoPersistente.mSetID">mSetID</A>( id: <B>string</B> ); \r
47     <B>public</B> \r
48       <I><FONT COLOR="Navy">{** Constructor. Setea el ID.}</FONT></I> \r
49       <B>constructor</B> create; \r
50       <I><FONT COLOR="Navy">{** Constructor que crea el objeto a partir de una cadena de texto con \r
51           el objeto serializado.}</FONT></I> \r
52       <B>constructor</B> crearDeSerializado( str: <B>string</B> ); \r
53       <I><FONT COLOR="Navy">{** Obtiene la identificacion del objeto}</FONT></I> \r
54       <B>function</B> <A HREF="#cObjetoPersistente.mGetID">mGetID</A>: <B>string</B>; \r
55       <I><FONT COLOR="Navy">{** Devuelve una cadena de texto con el objeto serializado.}</FONT></I> \r
56       <B>function</B> <A HREF="#cObjetoPersistente.mSerializar">mSerializar</A>: <B>string</B>; <B>virtual</B>; \r
57       <I><FONT COLOR="Navy">{** Recrea el objeto a partir de una cadena de texto con el objeto \r
58           serializado.}</FONT></I> \r
59       <B>procedure</B> <A HREF="#cObjetoPersistente.mDesSerializar">mDesSerializar</A>( str: <B>string</B> ); <B>virtual</B>; \r
60   <B>end</B>; \r
61  \r
62 <B>implementation</B> \r
63  \r
64 <B>uses</B> \r
65   RegExpr; \r
66  \r
67 <I><FONT COLOR="Navy">{ cObjetoPersistente }</FONT></I> \r
68  \r
69 <I><FONT COLOR="Navy">{** Constructor que crea el objeto a partir de una cadena de texto con \r
70     el objeto serializado. \r
71     @param str cadena de texto con el objeto serializado.}</FONT></I> \r
72 <B>constructor</B> cObjetoPersistente.crearDeSerializado(str: <B>string</B>); \r
73 <B>begin</B> \r
74   <B>inherited</B> create;      <I><FONT COLOR="Navy">// Llama al create padre </FONT></I>\r
75   mDesSerializar( str ); <I><FONT COLOR="Navy">// Deserializa los datos </FONT></I>\r
76 <B>end</B>; \r
77  \r
78 <I><FONT COLOR="Navy">{** Constructor. Setea el ID.}</FONT></I> \r
79 <B>constructor</B> cObjetoPersistente.create; \r
80 <B>begin</B> \r
81   <B>inherited</B>; \r
82   aID := IntToHex( integer( self ), 6 ); \r
83 <B>end</B>; \r
84  \r
85 <I><FONT COLOR="Navy">{** Obtiene la identificacion del objeto \r
86     @return ID del objeto.}</FONT></I> \r
87 <B>function</B> <A NAME=cObjetoPersistente.mGetID>cObjetoPersistente.mGetID</A>: <B>string</B>; \r
88 <B>begin</B> \r
89   result := aID; \r
90 <B>end</B>; \r
91  \r
92 <I><FONT COLOR="Navy">{** Setea la identificacion del objeto \r
93     @param id nuevo ID.}</FONT></I> \r
94 <B>procedure</B> <A NAME=cObjetoPersistente.mSetID>cObjetoPersistente.mSetID</A>(id: <B>string</B>); \r
95 <B>begin</B> \r
96   aID := id; \r
97 <B>end</B>; \r
98  \r
99 <I><FONT COLOR="Navy">{** Devuelve una cadena de texto con el objeto serializado. \r
100     @return Cadena de texto con el objeto serializado.}</FONT></I> \r
101 <B>function</B> <A NAME=cObjetoPersistente.mSerializar>cObjetoPersistente.mSerializar</A>: <B>string</B>; \r
102 <B>begin</B> \r
103   result := '<id>' + aID + '</id>'; \r
104 <B>end</B>; \r
105  \r
106 <I><FONT COLOR="Navy">{** Recrea el objeto a partir de una cadena de texto con el objeto \r
107     serializado. \r
108     @param str Cadena de texto con el objeto serializado.}</FONT></I> \r
109 <B>procedure</B> <A NAME=cObjetoPersistente.mDesSerializar>cObjetoPersistente.mDesSerializar</A>(str: <B>string</B>); \r
110 <B>var</B> \r
111   r: TRegExpr; \r
112 <B>begin</B> \r
113   r := TRegExpr.create; \r
114   <B>try</B> <I><FONT COLOR="Navy">// prueba que no haya errores con las expresiones regulares </FONT></I>\r
115     r.Expression := '<id>/s*([ABCDEFabcdef0-9]{6})/s*</id>'; \r
116     <B>if</B> r.Exec ( str ) <B>then</B> \r
117       aID := r.Match[1] \r
118     <B>else</B> \r
119       <B>raise</B> ESerializacion.create( 'No se encontro el ID del Objeto' ); \r
120   <B>except</B> \r
121     on e: ERegExpr <B>do</B> <B>begin</B> \r
122       r.Free; \r
123       <B>raise</B> ESerializacion.create( ClassName + ': Error al extraer el ID utilizando expresiones regulares: ' + e.<B>Message</B> ); \r
124     <B>end</B>; \r
125   <B>end</B>; \r
126   r.free; \r
127 <B>end</B>; \r
128  \r
129 <B>end</B>. \r
130 </PRE>\r
131 </BODY>\r
132 </HTML>\r