Programación Avanzada para Sistemas de Telecomunicación Arrays Juan Carlos Cruellas cruellas@ac.upc.es Departamento Arquitectura Computadores © J.C. Cruellas Grupo de Aplicaciones Telemáticas U PC Objetos y clases • Introducción. • Vectores de datos primitivos. • Vectores de objetos. Departamento Arquitectura Computadores U PC © J.C. Cruellas Grupo de Aplicaciones Telemáticas Introducción • En Java los arrays son tipos predefinidos por el propio lenguaje que contienen como datos: – La secuencia de valores de tipo primitivo o de referencias a objetos – Un dato protegido que informa de la cantidad de elementos que puede contener el array (length). • La declaración de una variable como un array simplemente crea una referencia que apunta a null. • Para crear un array propiamente dicho HAY QUE HACER USO DEL OPERADOR new. • Cuando se pasa un array como argumento de una función, se pasa su dirección. Departamento Arquitectura Computadores © J.C. Cruellas Grupo de Aplicaciones Telemáticas U PC Introducción: las clases Array • Cuando se usa el operador new para crear un array de, digamos 5 posiciones: – Si el vector es de datos int u otro tipo primitivo, se reserva espacio para guardar cinco valores de ese tipo primitivo. – Si el vector es un vector de objetos, se reserva espacio para guardar cinco REFERENCIAS (punteros) a objetos de la clase en cuestión. Es tarea del propio programa crear los cinco objetos (con nuevas invocaciones al operador new y el correspondiente constructor) y asignar las referencias a las posiciones del vector. Departamento Arquitectura Computadores U PC © J.C. Cruellas Grupo de Aplicaciones Telemáticas Vectores de datos primitivos • Declaración vector de datos int. protected int [] vectInt ; vectInt • Creación del vector e inicialización por defecto. vectInt = new int[4] ; vectInt • Creación e inicialización simultáneas. 0 0 0 0 protected int [] vectInt = {1,2,3,4} ; Departamento Arquitectura Computadores © J.C. Cruellas Grupo de Aplicaciones Telemáticas U PC Vectores de datos primitivos • Todo array posee un dato length que indica el número de elementos que puede llegar a contener un array (dimensión). Es un dato público que, sin embargo NO puede ser modificado. • Puede escribirse vectInt.length allí donde pueda accederse a vectInt. • Cuando se intenta acceder a una posición inexistente de un array, la máquina virtual de Java genera y arroja una excepción OutOfBoundsException. Departamento Arquitectura Computadores U PC © J.C. Cruellas Grupo de Aplicaciones Telemáticas Vectores de objetos • Declaración vector de objetos protected Casilla [] tablero ; tablero • Creación del vector e inicialización por defecto. tablero = new Casilla[4] ; Departamento Arquitectura Computadores tablero Grupo de Aplicaciones Telemáticas © J.C. Cruellas U PC Vectores de objetos • Creación de objetos y asignación a posiciones de array tablero[0] tablero[1] tablero[2] tablero[3] = = = = new new new new Casilla(); Casilla(); Casilla(); Casilla(); casilla tablero casilla casilla casilla Departamento Arquitectura Computadores U PC © J.C. Cruellas Grupo de Aplicaciones Telemáticas Vectores de objetos • Declaración vector bidimensional de objetos protected Casilla [][] tablero ; tablero • Creación directa de matriz a referencias a objetos. tablero = new Casilla[4][4] ; tablero Departamento Arquitectura Computadores © J.C. Cruellas Grupo de Aplicaciones Telemáticas U PC Vectores de objetos • Creación de objetos y asignación a posiciones de matriz tablero[0][0] = new Casilla(); casilla tablero Departamento Arquitectura Computadores U PC © J.C. Cruellas Grupo de Aplicaciones Telemáticas Vectores de objetos • Creación por pasos de matriz a referencias de objetos. – Paso 1: crear referencias a filas int nfilas ; nfilas = 4 ; tablero = new Casilla[nfilas][] ; tablero Departamento Arquitectura Computadores © J.C. Cruellas Grupo de Aplicaciones Telemáticas U PC Vectores de objetos – Paso 2: para cada fila crear referencias de las columnas ncol = 4 ; for(int i=0;i<4;j++){ tablero[i] = new Casilla[ncol] ; } tablero Departamento Arquitectura Computadores U PC © J.C. Cruellas Grupo de Aplicaciones Telemáticas Vectores de objetos • Creación de objetos y asignación a posiciones de matriz tablero[0][0] = new Casilla(); casilla tablero Departamento Arquitectura Computadores U PC © J.C. Cruellas Grupo de Aplicaciones Telemáticas