Apex Academy
Módulo 5·Checkpoint·50 min

Checkpoint del Módulo 5

Las once piezas de la programación orientada a objetos trabajando juntas en un sistema de comisiones, y tu primera clase guardada en una org real.

En Admin esDiseñar un modelo de datos completo en Object Manager, pero con comportamiento

✓ En esta sub-lección

  1. 01Traducir cada concepto de la POO a su equivalente de Admin y de vuelta.
  2. 02Diseñar una pequeña jerarquía con interfaz, clase abstracta e hijas concretas.
  3. 03Guardar y ejecutar una clase en una Developer Org de verdad.

La nutria: ¿Te acuerdas? · Repaso de la lección 11

¿Qué diferencia hay entre un picklist restringido y un enum?

Con este módulo has cruzado la línea que separa escribir instrucciones de diseñar código. Todo lo que sigue en el curso (triggers, handlers, asíncrono, tests) está hecho de clases, y ahora ya sabes leerlas y escribirlas.

Lo que has aprendido, sub-lección a sub-lección

1 · Clases y objetos. Una clase es la definición de un objeto en Object Manager; una instancia es un registro. Los atributos son sus campos y los métodos sus acciones, con tipo de retorno, parámetros y return. new fabrica instancias y el punto entra en ellas.

2 · Referencias. Una variable de objeto guarda el enlace, no el objeto: dos variables pueden ser dos pestañas del mismo registro. Por eso un bucle o un método pueden cambiar registros, y por eso clone() existe. === pregunta si es el mismo objeto.

3 · Constructores. Los valores por defecto al pulsar New: mismo nombre que la clase, sin tipo de retorno, se ejecuta en cada new. Crea las listas vacías para que nada empiece en null. Si escribes uno con parámetros, el vacío desaparece.

4 · this. El $Record de la clase: this.level distingue el atributo del parámetro del mismo nombre, y this(…) encadena constructores para no repetir lógica. level = level; compila y no hace nada.

5 · Static. Lo de cada registro frente a lo de toda la org, como un campo frente a un Custom Setting. Los métodos estáticos se llaman con el nombre de la clase (ya usabas Date.today()) y no tienen this. En Apex, una variable estática vive una transacción.

6 · Access modifiers. Field-Level Security para el código: private (por defecto), protected, public y global. Las propiedades { get; private set; } dejan leer sin dejar escribir, y los métodos que validan son las reglas de validación de tu clase.

7 · Herencia. extends da a la hija todo lo del padre, como los campos estándar que todo objeto trae de serie. En Apex el padre tiene que ser virtual o abstract, la hija llama a super(…) en la primera línea y solo hay un padre. Hereda solo si «es un».

8 · virtual, abstract y override. virtual permite cambiar, abstract obliga a implementar, override es la hija haciéndolo a su manera, y super.método() amplía en vez de sustituir. Una clase abstracta, como Activity, no se instancia.

9 · Sobrecarga y sobrescritura. Sobrecarga: mismo nombre y distintos parámetros en una clase, elegido al compilar. Sobrescritura: mismos parámetros en una hija, elegida al ejecutar por el objeto real.

10 · Interfaces y polimorfismo. Un contrato de firmas (como Schedulable para aparecer en Schedule Apex) que cualquier clase puede cumplir, varias a la vez. Una lista de objetos distintos con el mismo contrato se recorre igual, y añadir uno nuevo no toca el bucle.

11 · Clases internas y enums. Un enum es un picklist restringido que vigila el compilador; en un switch, sus when van sin prefijo. Una clase interna agrupa lo que solo sirve a su clase, y el wrapper junta datos de varios registros en un objeto a medida.

EL NEGOCIO PIDE… ·aciertos 0/0

Que ningún plan de soporte pueda existir sin su fecha de inicio.

Paso 1 de 8

Elige la estructura que usarías.

Todo lo que ya sabías como Admin tenía un nombre en programación orientada a objetos.

Ahora en tu Developer Org

Hasta aquí el curso ha validado tu código leyéndolo. A partir de este módulo también vas a guardarlo en Salesforce, que es donde se aprende a leer errores de verdad. Solo necesitas una Developer Edition gratuita, que no caduca.

  1. Crea la org en developer.salesforce.com/signup (si ya tienes una de Trailhead, también sirve).
  2. Setup → Apex Classes → New. Pega solo una clase (por ejemplo la PricingUtils de la lección 5) y pulsa Save. Si hay un error, Salesforce te dice la línea: es el compilador que llevas cinco módulos imaginando.
  3. Abre la Developer Console (menú del engranaje) → Debug → Open Execute Anonymous Window. Pega el código de uso, marca Open Log y pulsa Execute.
  4. En el log, marca Debug Only: ahí están tus System.debug. Ese es el resultado real, calculado por Salesforce.

El mapa completo: POO en lenguaje de Admin

ConceptoLo que ya conocíasPara qué lo usarás
Clase / objetoObjeto de Object Manager / registroTodo el código a partir de aquí
ReferenciaEl mismo contacto en dos related listsCambiar registros dentro de bucles y servicios
ConstructorAcción rápida con valores predefinidosObjetos que nacen válidos
this$Record en un flowConstructores y clases de datos de prueba (M10)
staticCustom Setting de toda la orgServicios y guardias de triggers (M7)
private / get; private set;Field-Level Security y reglas de validaciónClases que no se pueden usar mal
Herencia / abstractActivity → Task y EventFrameworks de triggers (M7)
InterfazEl contrato de un subflowSchedulable, Queueable, Batchable (M9)
Enum / wrapperPicklist restringido / fila de informePantallas y resultados de servicios

La nutria: ¿Y por qué no un Flow? Porque las comisiones van a cambiar

En Flow, cada tipo de oportunidad sería una rama de una Decision con su fórmula de comisión, y cada concepto nuevo que invente Ventas, otra rama más en un flow que al final nadie se atreve a tocar. Con Commissionable, un concepto nuevo es una clase nueva que cumple el contrato, y el bucle que suma las comisiones no cambia ni una línea.