En lenguaje JAVA, ¿qué es un tipo de datos compuestos (referencia)?
De manera similar a la definición de tipos de datos simples, la Máquina Virtual Java (JVM) también define el tipo de datos de índice (referencia). Los tipos de índice pueden "hacer referencia" a variables. Dado que Java no define explícitamente tipos de puntero, los tipos de índice pueden considerarse como punteros a valores reales o a valores reales representados por variables. Un objeto puede ser "referido" por más de un índice. La JVM nunca aborda objetos directamente sino que opera en el índice del objeto.
Los tipos de índice se dividen en tres tipos: clase, interfaz y matriz. Los tipos de índice pueden hacer referencia a instancias de clase creadas dinámicamente, instancias ordinarias y matrices. Los índices también pueden contener valores especiales, que son índices nulos. Un índice nulo no tiene ningún tipo correspondiente en tiempo de ejecución, pero se puede convertir a cualquier tipo. El valor predeterminado del tipo de índice es nulo.
Clase
Clase (Clase) se refiere al tipo de datos que define métodos y datos. Internamente, la JVM normalmente implementa objetos de tipo clase como un conjunto de punteros a métodos y datos. Las variables que definen tipos de clase solo pueden hacer referencia a instancias de la clase o nulo, como se muestra en el siguiente código:
MiObjeto unObjeto = new MiObjeto() // Legal
MiObjeto otroObjeto =; null; // Legal
MiObjeto stillAnotherObject = 0; // Ilegal
Interfaz
La interfaz es como una plantilla, que define lo que debe ser el objeto. implementar El propósito de los métodos es permitir que se haga referencia a estos métodos como instancias de interfaz. No se puede crear una instancia de la interfaz. Las clases pueden implementar múltiples interfaces y se indexan a través de estas interfaces implementadas. Las variables de interfaz solo pueden indexar instancias de clases que implementan la interfaz. Por ejemplo, supongamos que definimos una interfaz llamada Comparable y también definimos una clase SortItem, que implementa la interfaz Comparable, entonces podemos escribir el siguiente código de definición:
Comparable c = new SortItem (); p>
Si la interfaz Comparable define un método: public void compare(Elemento comparable), entonces la clase SortItem debe proporcionar la implementación del método de comparación, como se muestra en el siguiente código:
clase pública SortItem implementa Comparable
{
comparación pública vacía (elemento comparable)
{
... implementación del método aquí
p>}
}
Array
La matriz Java (matriz) es un objeto de índice creado dinámicamente, que es muy similar a una clase In. Además, al igual que el mismo tipo, las matrices solo pueden indexar instancias de matriz o nulas, como se muestra en el siguiente código:
int[] myIntArray = new int[5];
int[ ] anotherIntArray = null ;
La matriz es una herencia de la clase Object, por lo que todos los métodos de la clase Object pueden ser llamados por matriz. Los objetos de matriz se componen de elementos. El número de elementos también puede ser 0, en cuyo caso se dice que la matriz está vacía. Todas las matrices numeran sus elementos comenzando desde 0, lo que significa que el número de índice del primer elemento de la matriz es el número 0.
Todos los accesos a los elementos de la matriz se verifican en tiempo de ejecución y se generará una excepción ArrayIndexOutOfBoundsException si se intenta indexar un elemento utilizando un número menor que 0 o mayor que la longitud de la matriz.
Los elementos de la matriz están indexados por valores enteros, como se muestra en el siguiente código:
int[] myIntArray = { 9, 5, 6 }; p>int int1 = myIntArray[0];
int int2 = myIntArray[1];
int int3 = myIntArray[2];
La longitud de el objeto de matriz no se cambia. Para cambiar la longitud de una variable de matriz, debe crear otra matriz y asignarla a la variable, como se muestra en el siguiente código:
int[] myIntArray = { 9, 5, 6 };
System.out.println("myIntArray length = " myIntArray.length); // El resultado de salida es 3
myIntArray = new int[] { 3, 6, 4, 2, 8 };
p>System.out.println("myIntArray length = " myIntArray.length); // El resultado de salida es 5
Tipo de datos compuestos
El lenguaje Java no admite estructuras (struct) ni tipos de datos de unión. Sus tipos de datos compuestos se construyen a través de clases o interfaces. Las clases proporcionan una forma de agrupar datos y métodos y, al mismo tiempo, restringen el acceso a los datos privados de la clase. Por ejemplo, si usa lenguaje C, entonces un automóvil se puede definir como una estructura como se muestra en el siguiente código:
struct Car
{
char * modelo;
char* marca;
int año;
Motor* motor;
Carrocería* carrocería;
Tire** tires;
}
El código de ejemplo anterior también utiliza implícitamente las estructuras de motor, carrocería y neumáticos previamente definidas. Usando el lenguaje Java, la definición de automóvil se muestra en el Listado A.
Listar un
automóvil de clase
implementa CarModels, CarMakes
{
private int model = DODGE;
privado int make = DURANGO;
privado int año = 1999;
privado Motor motor = new DurangoEngine();
privado Carrocería = new DurangoBody();
neumático privado[] neumáticos = { new GoodyearTire(),
new GoodyearTire(),
new GoodyearTire() ,
new GoodyearTire() };
}
El ejemplo anterior también supone que hemos definido previamente las interfaces CarModels y CarMakes, así como Engine, Body Clases , Tire, DurangoEngine, DurangoBody y GoodyearTire.
Inicialización de tipos de datos compuestos
El tipo de datos compuestos se inicializa mediante el código definido en el constructor. El constructor se aplica a la clase en la función de creación de la clase (como. "nueva") variable se llama. Antes de llamar al constructor, cada miembro de la clase se inicializa con su valor predeterminado o con un valor inicial asignado explícitamente. El código del programa en el Listado B explica el proceso anterior.
Listado B
clase MiClase
{
int miInt;
OtraClase otraClase;
public static void main(String[] args)
{
MiClase miClase = new MiClase();
}
public MyClass()
{
myInt = 2;
}
}
En el Listado B En el código, cuando se crea una instancia de myClass usando el operador new, se llama al constructor public MyClass() para hacer que la clase se inicialice. El proceso de inicialización es el siguiente:
Declare "int myInt;" y asigne un valor predeterminado de 0 a myInt.
Declarar "Otra Clase, otra Clase;" asigna el valor predeterminado nulo a otra Clase.
La declaración "myint = 2;" en el constructor asigna el valor 2 a myInt.
Tipos de datos compuestos predefinidos
El lenguaje Java contiene una gran cantidad de tipos de datos compuestos predefinidos. Uno de ellos, la clase String, pertenece al paquete java.lang. Los métodos proporcionados por la clase String realizan operaciones de cadena comunes, como length(), substring(int beginIndex), toUpperCase(), toLowerCase(), equals(), etc. Otro tipo de datos compuestos Java comúnmente utilizado es la clase Vector, que pertenece al paquete java.util. La clase Vector define métodos que realizan operaciones comunes en matrices expandibles de objetos.
Por ejemplo, agregue (int index, elemento Object), elementAt (int index), isEmpty() y elimine (int index), etc. Estos son ejemplos representativos de un pequeño conjunto de tipos de datos compuestos predefinidos. Discutiremos más a fondo los tipos de datos compuestos predefinidos en artículos futuros.