Cava es compatible con la programación orientada a objetos (OOP) mediante la misma sintaxis de class y new que Java y C#. Use la palabra clave class para definir clases y la palabra clave new para crear objetos.
class Example {
double PI;
Example() {
PI = 3.1415926;
}
static int main() {
Example example = new Example();
double a = example.PI; // 3.1415926
return 0;
}
}
Cava admite los conceptos fundamentales de OOP: encapsulación, abstracción, clase, objeto, instancia y método.
Definir una clase
Use la palabra clave class para definir una clase. La definición de una clase puede incluir cualquier combinación de los siguientes elementos:
|
Componente |
Descripción |
|
Variable miembro |
Almacena datos para cada instancia de objeto. |
|
Constructor |
Inicializa un objeto nuevo inmediatamente después de su creación. |
|
Función miembro |
Encapsula operaciones sobre los datos del objeto. |
|
Función de clase |
Pertenece a la clase en sí y se comparte entre todas las instancias. |
class Example { // Define a class named Example.
public double PI; // Member variable
Example() { // Constructor
PI = 3.1415926;
}
double getPI() { // Member function
return PI;
}
static int main() {
Example example = new Example();
double a = example.getPI(); // 3.1415926
return 0;
}
}
Crear un objeto
La creación de un objeto a partir de una clase consta de tres pasos:
Declaración: declare una variable y especifique su tipo de clase.
Instanciación: use la palabra clave
newpara asignar memoria al objeto.Inicialización: especifique un constructor después de
newpara inicializar el objeto.
Al igual que en Java y C#, Cava requiere la palabra clave new para crear un objeto. Los tres pasos pueden combinarse en una sola línea.
class Example {
double PI;
Example() {
PI = 3.1415926;
}
static int main() {
Example example = new Example(); // Declare, instantiate, and initialize in one line.
return 0;
}
}
Una vez creado el objeto, use la variable (example) para acceder a sus datos miembro.
Variables miembro
Una variable miembro contiene los datos del objeto correspondiente.
class Example {
double PI; // Member variable of type double
Example() {
PI = 3.1415926;
}
}
Inicialice las variables miembro en un constructor, no en el punto de declaración. No se admite la asignación de un valor inicial durante la declaración.
// Not supported
class Example {
double PI = 3.1415926;
}
// Correct
class Example {
double PI;
Example() {
PI = 3.1415926;
}
}
Constructores
Un constructor inicializa un objeto justo después de su creación. Los constructores deben cumplir dos requisitos:
El nombre del constructor debe coincidir con el nombre de la clase.
Un constructor no tiene valor de retorno ni parámetros de salida.
Cava admite varios constructores (sobrecarga de constructores). La sintaxis de la expresión new determina qué constructor se invoca.
class Example {
public double PI;
Example() { // Constructor A: default
this.PI = 3.1415926;
}
Example(double customPI) { // Constructor B: accepts a custom value
this.PI = customPI;
}
double getPI() {
return PI;
}
static int main() {
Example example1 = new Example(); // Calls Constructor A
double a = example1.getPI(); // 3.1415926
Example example2 = new Example(3.14); // Calls Constructor B
double b = example2.getPI(); // 3.14
return 0;
}
}
Funciones miembro
Una función miembro encapsula operaciones sobre las variables miembro de un objeto. Invoque una función miembro mediante una instancia de objeto para leer o modificar sus datos.
class Example {
public double PI;
Example() {
this.PI = 3.1415926;
}
double getPI() {
return PI;
}
static int main() {
Example example = new Example();
double a = example.getPI(); // 3.1415926
return 0;
}
}
Las funciones miembro admiten sobrecarga: defina varias funciones con el mismo nombre dentro de una clase y el compilador seleccionará la adecuada según el tipo y la cantidad de parámetros de entrada.
Cuando una variable local en una función miembro tiene el mismo nombre que una variable miembro, la variable local tiene prioridad. Para acceder explícitamente a la variable miembro, anteponga this .
Funciones de clase
Una función de clase pertenece a la clase y no a un objeto individual. Se comparte entre todas las instancias y se puede invocar directamente mediante el nombre de la clase, sin necesidad de crear un objeto.
Defina una función de clase con la palabra clave static:
class Example {
static double getPI() { // Class function — accessible without creating an object
return 3.1415926;
}
static int main() {
double a = Example.getPI(); // Call via class name, not an object instance
return 0;
}
}
En comparación: las funciones miembro requieren una instancia de objeto, mientras que las funciones de clase no.
Limitaciones
Cava no admite la herencia de clases.