En la Programación Orientada a Objetos (POO), los atributos son las variables que almacenan el estado y los datos de una clase, y pueden tener cualquier tipo de datos ABAP, es decir, un atributo es simplemente una variable dentro de una clase. . Pero no todos los atributos son iguales.
Entender la diferencia entre un atributo de instancia y un atributo estático es mucho más que una cuestión de sintaxis (DATA vs CLASS-DATA). Es una decisión fundamental de diseño que impacta la eficiencia de memoria, la integridad de los datos y la claridad de tu código.
Atributos de instancia
Los atributos de instancia (dependientes de instancia) son aquellos cuyo contenido es específicos de cada objeto., es decir, son variables que pertenecen a cada objeto individual. Cada vez que creas un objeto (una instancia), este tiene su propio conjunto de estas variables. Cada objeto tiene sus propios valores, y si cambias los valores no afecta a otro objeto.
Declaración: Se declaran con DATA dentro de la sección de la clase.
CLASS lcl_producto DEFINITION.
PUBLIC SECTION.
DATA: nombre TYPE string,
precio TYPE p DECIMALS 2.
ENDCLASS.
Atributos estáticos
Los atributos estáticos son aquellos cuyo contenido pertenece a la clase y es común a todas sus instancias. Solo existe una única copia del atributo, compartida por todos los objetos, es decir, no depende de un objeto. Todos los objetos ven el mismo valor y si cambia, cambia para todos.
Declaración: Se declaran usando la sentencia CLASS-DATA.
CLASS lcl_producto DEFINITION.
PUBLIC SECTION.
CLASS-DATA: total_productos TYPE i.
ENDCLASS.
Diferencias entre atributo de instancia y atributo estático
1. Alcance
- Instancia (DATA): Cada objeto creado ( CREATE OBJECT ) tiene su propia copia independiente. Modificar el valor de un atributo en un objeto no afecta a los demás.
- Estático (CLASS-DATA): Todos los objetos comparten el mismo valor. Modificar el valor en un objeto (o mediante la clase) afecta a todos.
2. Acceso
- Instancia:
objeto->atributo(Ej: lo_producto->nombre) - Estático:
clase=>atributo(Ej: lcl_producto=>total_productos)
⚠️ Importante: Aunque ABAP también permite acceder a un atributo estático a través de una instancia (objeto=>atributo), debes evitarlo. Hacerlo crea confusión en el código, dando la falsa impresión de que se está trabajando con un atributo de instancia. Usar la notación clase=>atributo deja claro que es un valor compartido, mejorando la legibilidad y el mantenimiento.
3. Ciclo de vida
- Instancia: Se crea cuando se crea el objeto (
CREATE OBJECT) y se elimina cuando el objeto deja de existir (garbage collector). - Estático: Se crea cuando la clase se carga en memoria (al inicio del programa o en la primera referencia a la clase) y existe durante toda la ejecución del programa.
4. Uso
- Instancia: Para datos propios de cada objeto (Ej: nombre, id, precio, color). Es decir, para todo aquello que describa el estado único de un objeto.
- Estático: Para datos compartidos (Ej: contadores, configuraciones, constantes)
5. Impacto en memoria
- Instancia: El consumo de memoria aumenta con cada objeto creado, ya que cada uno tiene su propia copia de los atributos.
- Estático: El consumo de memoria es constante, independientemente de cuántos objetos crees.
🚨 Precaución con los Estáticos. Si abusas de los atributos estáticos, especialmente en aplicaciones con muchos usuarios (como en un entorno SAP), puedes crear cuellos de botella. Al ser un dato compartido, si varios objetos o usuarios intentan modificarlo simultáneamente, necesitarás mecanismos de sincronización. Úsalos con criterio y solo cuando realmente representen un dato compartido.
Tabla comparativa
| Característica | Atributo de instancia | Atributo estático |
|---|---|---|
| Declaración | DATA | CLASS-DATA |
| Pertenece a | Objeto (instancia) | Clase |
| Nº de copias | Una por objeto | Una sola en toda la sesión |
| Acceso | objeto->atributo | clase=>atributo |
| Alcance | Individual | Compartido |
| Ciclo de vida | Depende del objeto | Toda la ejecución |
| Impacto en Memoria | Aumenta con cada objeto | Constante |
| Uso típico | Estado individual del objeto | Datos globales o compartidos |
La diferencia entre atributos de instancia y estáticos es fundamental en ABAP OO.
- Los atributos de instancia representan el estado individual de cada objeto
- Los atributos estáticos representan el estado compartido de la clase
Entender esto no es solo cuestión de sintaxis, sino de diseño. Es lo que te permite decidir correctamente dónde debe vivir cada dato dentro de tu programa.



