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.
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.
Declarar una clase
Este código declara (crea) una clase:
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:
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.
¿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.
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).
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:
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.
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
- En Developer Console, haga clic en File | New | Apex Class (Archivo | Nuevo | Clase de Apex).
- Ingrese
Flower
(Flor) como el nombre de la clase. - Haga clic en OK (Aceptar).
- En la clase Flower.apxc, reemplace el código existente con este otro:
- 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
- Haga clic en Debug | Open Execute Anonymous Window (Depurar | Abrir ventana de ejecución anónima).
- En la ventana Enter Apex Code (Introducir código Apex), pegue este código:
- 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.
- 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.
¿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
![]() |
crecimiento()
polinización()
marchitez()
|
![]() |
![]() |
![]() |
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(); |
Flower rose = new Flower(); |
Flower peony = new Flower(); |
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
-
Trailhead Live: Trail Together: Programación orientada a los objetos para administradores
- GuÃa del desarrollador de Apex: Métodos de lista en Apex
- GuÃa del desarrollador de Apex: Métodos booleanos en Apex
- VÃnculo externo: Comprender la programación orientada a los objetos
- GuÃa del desarrollador de Apex: Definición de clase de Apex
- GuÃa del desarrollador de Apex: Variables de clase
- GuÃa del desarrollador de Apex: Métodos de clase
- GuÃa del desarrollador de Apex: Métodos estáticos y de instancia, variables y código de inicialización