Cuando empiezas a trabajar con clases en ABAP, tarde o temprano aparece este concepto:
👉 El constructor
Y con él, varias dudas muy comunes:
- ¿Qué es exactamente un constructor?
- ¿Para qué sirve?
- ¿Cuál es la diferencia entre constructor de instancia y estático?
- ¿Puede una clase tener más de uno?
En este artículo vamos a responder a todo eso de forma clara, precisa y con enfoque práctico.
¿Qué es un constructor?
Un constructor es un método especial de una clase que se ejecuta automáticamente en el momento de la creación de un objeto o de la carga de la clase.
Su función principal es inicializar el estado inicial de la clase o del objeto. Se utiliza para preparar los datos, asignar valores iniciales a los atributos y garantizar que el objeto o la clase comiencen en un estado correcto.
Tipos de constructores
En ABAP existen dos tipos de constructores:
- Constructor de instancia (
CONSTRUCTOR) - Constructor estático (
CLASS-CONSTRUCTOR)
Constructor de instancia
El constructor de instancia es un método que se ejecuta automáticamente cada vez que se crea un objeto de la clase.
CONSTRUCTOR
Características principales
- Se ejecuta una vez por cada objeto creado.
- Solo puede tener parámetros
IMPORTING. No se permiten parámetrosEXPORTING,CHANGINGniRETURNING. Su función es recibir datos para inicializar el objeto, no devolver resultados. - Puede declarar excepciones. Si algo falla durante la inicialización, puedes lanzar una excepción para evitar que el objeto se cree en un estado inválido.
- Puede acceder tanto a atributos de instancia como a atributos estáticos.
- Puede ser declarado como
PUBLIC,PROTECTEDoPRIVATE(aunque lo habitual esPUBLIC).- Si lo declaras
PRIVATE, no podrás crear objetos desde fuera de la clase (útil para patrones como Singleton). - Si lo declaras
PROTECTED, solo podrás crear objetos desde la clase o sus subclases. - Lo más común es declararlo en
PUBLIC SECTIONpara que pueda ser usado desde cualquier parte.
- Si lo declaras
Definir un constructor de instancia
CLASS lcl_producto DEFINITION.
PUBLIC SECTION.
DATA: nombre TYPE string.
METHODS: constructor.
ENDCLASS.
CLASS lcl_producto IMPLEMENTATION.
METHOD constructor.
nombre = 'Producto genérico'.
ENDMETHOD.
ENDCLASS.
Llamar al constructor
DATA producto TYPE REF TO lcl_producto.
CREATE OBJECT producto.
Esta es otra manera de instanciar la clase de manera más moderna.
START-OF-SELECTION.
DATA(producto) = NEW lcl_producto( ).
En ese momento se ejecuta el constructor automáticamente.
💡 Buenas prácticas: Usa me-> dentro del constructor para dejar claro que estás accediendo al atributo de la instancia actual. Aunque no es obligatorio, mejora la legibilidad del código.
Constructor estático
El constructor estático es un método que se ejecuta automáticamente una sola vez cuando la clase se carga en memoria por primera vez.
CLASS-CONSTRUCTOR
Características principales
- Se ejecuta una única vez durante toda la ejecución del programa.
- No puede tener ningún tipo de parámetro. Ni
IMPORTING, niEXPORTING, niCHANGING, niRETURNING. - No puede declarar excepciones. Al ejecutarse automáticamente durante la carga de la clase, no hay forma de capturar errores de forma tradicional. Si falla, el programa fallará.
- Solo puede acceder a atributos estáticos (no puede acceder a atributos de instancia porque aún no existen objetos).
- Es siempre privado, no se declara en ninguna sección de visibilidad.
- No pertenece a ningún objeto. Por eso no puede acceder a atributos de instancia ni usar la referencia implícita
me.
Definir un constructor estático
CLASS lcl_configuracion DEFINITION.
PUBLIC SECTION.
CLASS-DATA: contador TYPE i.
CLASS-METHODS: class_constructor.
ENDCLASS.
CLASS lcl_configuracion IMPLEMENTATION.
METHOD class_constructor.
contador = 0.
ENDMETHOD.
ENDCLASS.
La clase se carga en memoria en el primer acceso a ella, que puede ocurrir en cualquiera de estas situaciones:
- Al llamar a un método estático (
clase=>metodo()). - Al crear el primer objeto con
CREATE OBJECToNEW. - Al acceder a un atributo estático (
clase=>atributo).
Diferencias entre constructor de instancia y estático
| Característica | Constructor de instancia | Constructor estático |
|---|---|---|
| Nombre en ABAP | CONSTRUCTOR | CLASS-CONSTRUCTOR |
| Cuándo se ejecuta | Al crear un objeto | Al cargar la clase en memoria |
| Puede tener parámetros | Sí, solo IMPORTING | No |
| Nº de ejecuciones | Una por objeto | Una sola vez |
| Acceso a atributos | Instancia y estáticos | Solo estáticos |
| Visibilidad | Puede ser pública, protegida o privada | Siempre privado (no se declara en secciones) |
| Uso principal | Inicializar el estado individual de cada objeto | Inicializar datos compartidos de la clase |
✅ Buenas prácticas
- Usa parámetros obligatorios para datos esenciales
Si un atributo es imprescindible para que el objeto sea válido (ej.id,nombre), hazlo obligatorio en el constructor. - Mantén el constructor simple
El constructor debe limitarse a inicializar atributos. Evita incluir lógica compleja, accesos a base de datos o llamadas a otros métodos pesados. - Usa
me->para claridad
Dentro del constructor de instancia, usarme->atributodeja claro que estás accediendo al atributo de la instancia actual. - Documenta los parámetros del constructor
Si el constructor recibe parámetros, añade comentarios que expliquen su propósito.
En ABAP una clase puede tener dos constructores si uno es estático y otro es de instancia, pero solo puede haber un constructor de instancia (CONSTRUCTOR) y solo puede haber un constructor estático (CLASS-CONSTRUCTOR). La alternativa son los método de fábrica.
Si no defines ningún constructor, ABAP proporciona implícitamente un constructor de instancia vacío (sin parámetros) que no realiza ninguna acción.
Esto significa que puedes crear objetos sin problemas, pero no tendrás control sobre la inicialización inicial de sus atributos. Los atributos quedarán con sus valores por defecto según su tipo (vacío para strings, 0 para números, etc.).
El constructor es una pieza clave en el diseño de clases en ABAP.
- Usa
CONSTRUCTORpara inicializar cada objeto con sus datos esenciales. - Usa
CLASS-CONSTRUCTORpara configurar datos compartidos que pertenecen a la clase en su conjunto.
Y aunque ABAP limita tener múltiples constructores, esto te empuja a usar patrones más claros como los métodos de fábrica.
Entender bien esto te ayudará a escribir código más limpio, más predecible y más fácil de mantener.

