Skip to main content
Únase a nosotros en TDX, en San Francisco, o en Salesforce+ los días 5 y 6 de marzo en la conferencia para desarrolladores sobre la era de agentes de IA. Registrarse ahora.

Crear clases y objetos

Objetivos de aprendizaje

Después de completar esta unidad, podrá:

  • Describir la relación entre una clase y un objeto.
  • Definir un parámetro.
  • Explicar las diferencias entre los valores de retorno.

Si este es su primer paso en el recorrido para desarrollar competencias de codificación Apex, ha llegado demasiado lejos. Dé un paso atrás y vaya al módulo Aspectos básicos de Apex para administradores. Si ya ha obtenido la insignia de Aspectos básicos de Apex para administradores, entonces se encuentra en el lugar adecuado.

En Aspectos básicos de Apex para administradores, ha aprendido acerca de la sintaxis de Apex, las variables, las colecciones y las instrucciones condicionales. También ha ejecutado algunos fragmentos de código en Developer Console. En este módulo, profundizamos en estos conceptos. Vamos a empezar.

¿Qué quiere decir orientado a objetos?

Si ha leído algo sobre el desarrollo de software o programación, es posible que se haya topado con el término orientado a objetos: clases orientadas a objetos, conceptos orientados a objetos, programación orientada a objetos. ¿Qué quiere decir orientado a objetos?

En relación con los lenguajes de programación, orientado a objetos significa que el código se centra en describir objetos. Un objeto puede ser cualquier cosa que tenga características únicas, como una persona, una cuenta o incluso una flor. Antes de poder entender realmente qué significa orientado a objetos, hay dos conceptos que debe conocer: las clases y los objetos.

Siga el proceso con Trail Together

¿Desea seguir el proceso con un experto a medida que realiza este paso? Eche un vistazo a este vídeo, parte de la serie Trail Together en Trailhead Live. Encontrará un vínculo a la sesión completa en la sección Recursos.

Clases

Una clase es un plano. Los objetos se basan en las clases. Una clase define un conjunto de características y comportamientos que son comunes a todos los objetos de esa clase.

Piense en una flor. Tiene características, como el color y la altura, y comportamientos, como crecer y marchitarse. En una clase de Apex, las características se llaman variables y los comportamientos se llaman métodos.

Una sola flor.

Characteristics (Variables) (Características [variables])
Behaviors (Methods) (Comportamientos [métodos])
color
Grow (Crecimiento)
height (altura)
Pollinate (Polinización)
maxHeight (altura máxima)
Wilt (Marchitez)
numberOfPetals (número de pétalos)

Imagine un jardín. Aunque las rosas, los lirios y las margaritas tienen diferentes colores y alturas, todas son flores y tienen un color y una altura.

Una flor de color tenue que representa la clase, con tres flores más pequeñas debajo que representan las instancias de la clase.

Declarar una clase

Este código declara (crea) una clase:

public class Flower { //body of class }

Las clases se declaran utilizando cuatro parámetros: el modificador de acceso, la palabra clave "clase", el nombre de la clase y el cuerpo de la clase. El cuerpo (dentro de las llaves { }) es donde se definen los métodos y las variables de la clase.

Modificador de acceso

Un modificador de acceso es una palabra clave en la declaración de una clase o método. El modificador de acceso determina qué otro código Apex puede ver y utilizar la clase o el método. Aunque existen otros modificadores de acceso, public (público) es el más común. Las clases públicas están disponibles para todas las demás clases Apex dentro de su organización.

Métodos

Los métodos se definen dentro de una clase. Un método describe los comportamientos heredados por los objetos de esa clase. Una clase puede tener uno o más métodos. La clase Flower (Flor) tiene tres métodos (comportamientos): grow (crecimiento), pollinate (polinización) y wilt (marchitez).

Un método se declara (crea) de la siguiente manera:

public static Integer wilt(Integer numberOfPetals){ //body of method }

Parámetros

Al crear métodos, no siempre se conocen todos los valores necesarios para ejecutar el código. Muchas veces, escribe un método para ejecutar una tarea y luego un segundo método para hacer una tarea similar, y así sucesivamente. Al reflexionar, se da cuenta de que todos sus métodos hacen casi lo mismo. Son duplicados con pequeñas variaciones.

Ojalá hubiera una forma de proporcionar entradas variadas a un solo método. Pero ¡un momento! ¡Se pueden usar parámetros! Un parámetro es una variable que actúa como un espacio reservado, esperando recibir un valor. Los parámetros se declaran de manera similar a una variable, con un tipo de dato seguido del nombre del parámetro. En la siguiente declaración, el método wilt (marchitez) tiene un parámetro llamado numberOfPetals (número de pétalos). (Aunque puede usar los nombres de parámetros que desee, es una buena práctica utilizar nombres que describan el valor que contiene el parámetro). El parámetro numberOfPetals espera recibir un valor de tipo entero.

<p>public static void wilt (Integer numberOfPetals){</p><p> //body of method</p><p>}</p>

¿Cómo llamamos (usamos) al método wilt (marchitez)? En este ejemplo de código, la primera línea llama (usa) al método y le pasa (envía) el valor 4. El valor que pasa se llama argumento. El argumento (4, en este caso) está entre paréntesis después del nombre del método.

wilt(4);
public static void wilt(Integer numberOfPetals){
    system.debug(numberOfPetals);
}

Una vez que se pasa un valor a un método que tiene un parámetro, el valor del argumento se convierte en el valor del parámetro. El parámetro funciona como una variable, por lo que se puede manipular como cualquier otra más.

Veamos la clase Flower (Flor).

public class Flower {
    public static void wilt(Integer numberOfPetals){
        if(numberOfPetals >= 1){
            numberOfPetals--;
        }
    }
}

En las líneas 2 a 6 de la clase Flower (Flor), el método wilt (marchitez) verifica el valor de numberOfPetals (número de pétalos). Si ese número es mayor o igual que 1, entonces el método wilt decrementa (reduce) el numberOfPetals en uno.

Tipos de retorno

Imagine que se encuentra en un restaurante y quiere saber si tienen un plato de temporada. Usted le pregunta al camarero: "¿Tienen la ensalada de verano?". Usted espera un tipo de respuesta en particular, no un número ni una oración completa, sino simplemente "sí" o "no".

Una declaración de método debe indicar explícitamente su tipo de retorno esperado. Al igual que un argumento debe coincidir con el tipo de dato especificado por el parámetro, una variable retornada debe coincidir con el tipo de retorno especificado en la declaración del método. El tipo de retorno es un tipo de dato específico, como Boolean, String o Account, o puede ser void (nada), como en este caso:

public static void wilt(Integer numberOfPetals){
    system.debug(numberOfPetals);
}

Cuando el tipo de retorno del método es void (vacío), el método no devuelve un valor. Para devolver un valor, reemplace void (vacío) con un tipo de retorno diferente.

Por ejemplo, aquí, el método wilt (marchitez) espera un valor de return (retorno) (respuesta) que es un entero.

public static Integer wilt (Integer numberOfPetals){ //body of method}

public static Integer wilt(Integer numberOfPetals){
    if(numberOfPetals >= 1){
        numberOfPetals--;
    }
  
    return numberOfPetals;
}

En la línea 1, el tipo de retorno Integer (Entero) (inmediatamente después de public static [público estático]) indica que el método devuelve un valor que es un entero. La línea 6 utiliza la instrucción return (retorno), seguida del nombre de la variable numberOfPetals (número de pétalos), para devolver el valor resultante de numberOfPetals (número de pétalos). Cuando un método devuelve el valor de una variable, el tipo de dato de la variable debe coincidir con el tipo de retorno que se ha declarado. En este caso, se espera que el método wilt (marchitez) devuelva un valor entero y la variable numberOfPetals (número de pétalos) es un entero.

Probemos los métodos wilt (marchitez), grow (crecimiento) y pollinate (polinización). Primero, terminamos de codificar los métodos.

Escribir los métodos

  1. En Developer Console, haga clic en File | New | Apex Class (Archivo | Nuevo | Clase de Apex).
  2. Ingrese Flower (Flor) como el nombre de la clase.
  3. Haga clic en OK (Aceptar).
  4. En la clase Flower.apxc, reemplace el código existente con este otro:
    public class Flower {
        // class variables:
        public String color;
        public Integer height;
        public Integer maxHeight;
        public Integer numberOfPetals;
      
        public static Integer wilt(Integer numberOfPetals){
            if(numberOfPetals >= 1){
                numberOfPetals--;
            }
            return numberOfPetals;
        }
      
        public static void grow(Integer height, Integer maxHeight){
            height = height + 2;
            if(height >= maxHeight){
                pollinate();
            }
        }
      
        public static void pollinate(){
            System.debug('Pollinating...');
        }
    }
  5. Haga clic en File | Save (Archivo | Guardar).

Ahora que tiene una clase completamente definida, está listo para probarla. Todo lo que necesita es el nombre de la clase (Flower [Flor]), los métodos que desea probar (wilt [marchitez] y grow [crecimiento]) y los argumentos requeridos para cada método. Debido a que el método grow (crecimiento) llama (usa) al método pollinate (polinización), no es necesario llamar al método pollinate (polinización) directamente. El método wilt (marchitez) espera un valor entero (para el parámetro numberOfPetals [número de pétalos]) y devolverá un valor entero. Los métodos grow (crecimiento) y pollinate (polinización) no devuelven nada.

Ejecutar los métodos

  1. Haga clic en Debug | Open Execute Anonymous Window (Depurar | Abrir ventana de ejecución anónima).
  2. En la ventana Enter Apex Code (Introducir código Apex), pegue este código:
    Flower.wilt(4);
    Flower.grow(5, 7);
  3. Seleccione Open log (Abrir registro) y luego haga clic en Execute (Ejecutar). Se abre el registro de ejecución, que muestra el resultado de la ejecución del código.
  4. Seleccione Debug Only (Solo depurar).

El método grow (crecimiento) incluye dos parámetros: height (altura) y maxHeight (altura máxima).

Flower.grow(5, 7); pasa los argumentos 5 (la altura es 5 pulgadas [12,7 cm]) y 7 (la altura máxima es 7 pulgadas [17,8 cm]) al método grow. El método grow (crecimiento) suma 2 a la variable height (altura) (línea 9) y luego verifica el valor de la variable height (altura). Si el valor de la variable height es mayor o igual que el valor de la variable maxHeight, el método grow llama al método pollinate.

El método pollinate no devuelve nada porque su tipo de retorno es void.

¿Qué ha ocurrido?

Debería ver una entrada en el registro de depuración.

Evento: USER_DEBUG. Detalles: [18]|DEBUG|Pollinating…

¿Qué espera que ocurra si usa 2 y 6 para los parámetros de grow? Pruébelo.

¿Qué ocurre?

Al revisar los registros de depuración, parece que no ocurre nada. Lo que sucede es que, al establecer la altura en 2 y la altura máxima en 6, la condición en la instrucción "if" se vuelve falsa, lo que hace que el método pollinate (polinización) no se ejecute.

Objetos

Recuerde que la clase Flower (Flor) es un plano para crear flores. Tiene las variables color, height (altura), maxHeight (altura máxima) y numberOfPetals (número de pétalos). Estas variables son iguales a null (sin valor), pero pueden tener valores predeterminados.

Un objeto es una instancia de una clase. De la misma manera en que los niños heredan características genéticas, como el color de ojos y la altura, de sus padres, los objetos heredan variables y métodos de sus clases.



color = null;
height = null;
maxHeight = null;
numberOfPetals = null;
Clase de Flor
Flor de tono apagado.


crecimiento()

polinización()

marchitez()
Flor amarilla.
Flor roja.
Flor rosa.
color = 'yellow';
color ='red';
color = 'pink';
height = 3;
height = 6;
height = 9;
maxHeight = 6;
maxHeight = 8;
maxHeight = 9;
numberOfPetals = 4;
numberOfPetals = 6;
numberOfPetals = 10;
Flower tulip = new Flower();
tulip.color = 'yellow';
tulip.height = 3;
tulip.maxHeight = 6;
tulip.numberOfPetals = 4;
tulip.grow();

Flower rose = new Flower();
rose.color = 'red';
rose.height = 6;
rose.maxHeight = 8;
rose.numberOfPetals = 6;
rose.grow();

Flower peony = new Flower();
peony.color = 'pink';
peony.height = 9;
peony.maxHeight = 9;
peony.numberOfPetals = 10;
peony.grow();

El objeto tulip (tulipán) es una instancia de la clase Flower (Flor). Cada uno de los tres objetos de flor es una flor específica basada en la clase Flower (Flor). Para crear una instancia llamada tulip (tulipán) basada en la clase Flower (Flor), utilice esta sintaxis:

Flower tulip = new Flower();

Puede usar la notación de punto para llamar a los métodos de un objeto. Simplemente agregue .method(); después del nombre del objeto. Por ejemplo:

tulip.grow();

Ahora sabe que los objetos son instancias de clases. Dentro de una clase, las variables describen el objeto y los métodos definen las acciones que el objeto puede realizar. También ha trabajado con parámetros para recibir valores pasados en una variable y con tipos de retorno, que envían algo (o nada, dependiendo del tipo de dato) de vuelta a un método.

Recursos

Comparta sus comentarios sobre Trailhead en la Ayuda de Salesforce.

Nos encantaría conocer su experiencia con Trailhead. Ahora puede acceder al nuevo formulario de comentarios cuando quiera desde el sitio de la Ayuda de Salesforce.

Más información Continuar para compartir comentarios