Está en la página 1de 21

Taller de programacin I

1

Taller de Programacin I
Semana II
Taller de programacin I
2
Indice
Indice
I Unidad I: Conceptos de Orientacin a Objetos 03
II Aprendizajes esperados 03
III Arreglos 04
Arreglos (una dimensin) 04
Arreglos de dos dimensiones. 05
Arreglos de arreglos. 07
Arreglos dentados. 08
Manejo de arreglos. 10
La clase ArrayList 14
Mtodos y operaciones con una lista. 15
Un nuevo for para recorres listas. 18
IV Resumen de la Semana 21
V Sinopsis de la prxima clase 21
Taller de programacin I
03
Semana II - Arreglos
Unidad I: Conceptos de Orientacin a Objetos
Aprendizajes esperados
1.3 Codifca con arreglos unidimensionales y bidimensionales en para almacenar, ordenar y buscar datos.
1.4 Aplica los ArrayList en la codifcacin de estructura de datos.
Taller de programacin I
04
Semana II - Arreglos
Arreglos
Un arreglo es un grupo de variables de un mismo tipo, las cuales son referenciados con un mismo nombre, los arreglos existen en ms de una
dimensin, siendo los ms comunes los arreglos de una dimensin (o slo arreglos) y los de dos dimensiones (matrices), afortunadamente para
los conocedores de lenguajes como C o C++ los arreglos y matrices sern algo familiar, sin embargo no son exactamente iguales, ya que existen
algunas diferencias en su sintaxis.
Arreglos (una dimensin)
Los arreglos de una dimensin, permiten almacenar una cantidad N de variables de un tipo, la declaracin general de un arreglo es la siguiente:
Tipo identifcador [ ];
Por ejemplo:

Para este caso la declaracin ha creado una variable llamada mes que permitir referenciar a nuestro arreglo, sin embargo an el arreglo no se ha
creado y mucho menos defnido su tamao, esto signifca que en mes an no es posible almacenar valores.
Para obtener un arreglo de tamao n, se debe ejecutar la siguiente sintaxis.
Declaracin = new tipo[tamao]
De esta forma se reservar el espacio de memoria que permitir almacenar una n cantidad de elementos, la palabra clave new crea dicho arreglo
con los valores por defecto del tipo especifcado, por ejemplo, la siguiente declaracin declara y construye un arreglo de tamao 12, donde cada
entero dentro del arreglo es inicializado en 0:

mes es un arreglo capaz de almacenar 12 nmeros de tipo entero, los elementos estn de forma adyacente almacenados y se pueden referenciar
utilizando un nmero entre 0 y 11 (12 en total), por ejemplo, el siguiente cdigo almacena el valor de 10 en la posicin 1 del arreglo, de forma
adicional, si cada posicin tuviese directa equivalencia con el nombre de un mes, la posicin 1 seria febrero, ya que, 0 es la primera posicin y
equivaldra a enero, luego 1 es igual a Febrero.

A pesar de no ser muy comn los arreglos tambin pueden ser inicializados, por ejemplo el siguiente cdigo crea el arreglo mes con un valor para
sus 12 enteros:
Taller de programacin I
05
Semana II - Arreglos
Note, que de esta forma el tamao del largo est indicado por la cantidad de elementos con el que se inicializa.
El ciclo for estudiado con anterioridad es el utilizado de forma ms comn en la operatoria con arreglos, el siguiente cdigo muestra la forma de
imprimir todos los valores del arreglo mes:

La salida del dicho cdigo ser:

Arreglos de dos dimensiones.
Los arreglos multidimensionales son en realidad arreglos que contienen otros arreglos, es muy comn asociar un arreglo multidimensional con
una matriz, sin embargo las matrices son slo una posibilidad dentro de la enorme cantidad de combinaciones que permite trabajar con arreglos
de arreglos.
El siguiente cdigo permite declarar un arreglo en dos dimensiones.
Taller de programacin I
06
Semana II - Arreglos
Para este caso nuestro elemento es de tipo rectangular, dado por 4 flas y 5 columnas, como muestra la siguiente tabla.
[0][0] [0][1] [0][2] [0][3] [0][4] [1][0] [1][1] [1][2] [1][3] [1][4] [2][0] [2][1] [2][2] [2][3] [2][4] [3][0] [3][1] [3][2] [3][3] [3][4]
Por lo tanto, toda operatoria con arreglos de dos dimensiones, debe especifcar las dos dimensiones para poder referenciar un elemento dentro de
la estructura, por ejemplo, el siguiente cdigo muestra como se asigna el valor de 10 al tercer elemento de la segunda fla.
La siguiente tabla muestra los valores que contiene la matriz.
0 0 0 0 0
0 0 10 0 0
0 0 0 0 0
0 0 0 0 0
Note que la tabla anterior muestra los valores por defecto que tiene nuestra matriz, sin embargo es importante comentar que la tabla muestra
una vista conceptual de como se almacenan los datos en una matriz, dado que en la memoria fsica los datos no son almacenados con esta estruc-
tura, el siguiente algoritmo permite poblar una matriz de 4 x 5 con los nmeros desde el 1 al 20:
Taller de programacin I
07
Semana II - Arreglos
Arreglos de arreglos.
Es muy usual que cuando se trabaja con arreglos de dos dimensiones, muchos asociamos inmediatamente la estructura con una forma rectan-
gular, si vamos ms all, descubriremos que en java tambin pueden declararse arreglos multidimensionales de tres dimensiones de la siguiente
forma:

sin embargo, es slo el comienzo, ya que, en Java puedes agregar todas las dimensiones que desees Cmo es eso posible? Y la respuesta no es
tan compleja como se piensa, sucede que una matriz, en realidad no es un rectngulo, sino que, arreglos de arreglos, por ejemplo, la matriz vista
anteriormente de 4 flas y 5 columnas, en la memoria se encuentra almacenada de la siguiente forma:

Como se puede apreciar, existe en realidad un arreglo de 4 elementos, pero cada uno de ellos es adems un arreglo de 5 posiciones, por ello la
anotacin de una matriz es [][] (arreglos de arreglos), por ende, cuando se escribe una referencia a algn elemento como:

Se est en realidad diciendo, que en el arreglo que ocupa la posicin 1 (es decir el segundo elemento, dado que comienza de cero) almacenamos
en su posicin 2 (la tercera) el valor de 10.
Taller de programacin I
08
Semana II - Arreglos
De esta forma el siguiente ejemplo muestra como luce un arreglo de tres dimensiones:


Arreglos dentados.
Este tipo de arreglos no es muy comn de utilizar y consiste en un arreglo de arreglos, donde cada uno de los arreglos contenidos no tiene el
mismo tamao, el siguiente cdigo crea un arreglo dentando de 2 flas donde la primera fla contiene 2 columnas y la segunda 3.

Antes de ensearte como se recorre esta estructura, debes conocer una forma muy prctica que nos provee Java para conocer el tamao de un
arreglo.

Taller de programacin I
09
Semana II - Arreglos
En el caso anterior el arreglo llamado arreglo (que creativo no?) es creado con un tamao de 50, en la lnea de cdigo siguiente al arreglo se le
consulta por su largo, el cual devuelve un entero con el valor de 50, el cual es al fnal almacenado en la variable llamada largo.
El ejemplo que viene a continuacin realiza la misma operacin pero obtiene el tamao de las 3 dimensiones de un cubo:

La obtencin de los largos se realiza de la siguiente forma, primero se obtiene el largo del primer arreglo, el cual es 3, esto signifca que el ar-
reglo contiene dentro 3 elementos que pueden referenciarse utilizando los ndices 0,1 2 y como cada uno de dichos es un arreglo, la segunda
impresin corresponde entonces al largo de unos de los 3 arreglos que contiene, esto quiere decir que, dado que los 3 elementos contiene un
arreglo del mismo tamao, la expresin arregloDos[0].length retorna el mismo valor que arregloDos[1].length y arregloDos[2].length (para cada
fla, misma cantidad de columnas).
Al fnalizar se consulta por el tamao de la tercera dimensin, la cual es 99. Esto tambin puede ser aprendido de la siguiente forma, arregloDos
representa un arreglo, por ende es la primera dimensin y del obtuvimos que su tamao es 3, si agregamos un par de [] estamos preguntando por
la segunda dimensin debido a que arregloDos es la primera y los [] la segunda, as podemos ir agregando una N cantidad de corchetes que nos
permitan conocer la cantidad de elementos de cada dimensin.
Visto lo anterior un arreglo dentado es aquel que NO tiene una cantidad fja de elementos, es decir no es un rectngulo, la siguiente imagen
ilustra un arreglo dentado:
En la imagen existe un arreglo de 3 posiciones, donde la primera fla contiene 4 elementos, la segunda 2 y la tercera 3, pudiendo almacenar un
mximo de 9 elementos.
El siguiente cdigo crea un arreglo dentado con las dimensiones mostradas:

Taller de programacin I
10
Semana II - Arreglos

Observa que el cdigo es el mismo con el cual se recorre una matriz cuadrada, cuya nica diferencia reside en que el for que recorre las columnas
(el for del interior), el cual por medio de la siguiente expresin (logra mediante el ndice i conocer de forma dinmica el tamao de cada una de
las flas.
Manejo de arreglos.
Veamos algunos mtodos que podemos utilizar.
El mtodo fll, permite llenar todas las posiciones del arreglo con un valor por defecto, de esta forma si tenemos un arreglo de valores enteros y
queremos llenar todas sus posiciones con el valor 7, deberamos hacer lo siguiente:

El mtodo fll est sobrecargado para que puedas llenar tu arreglo en funcin del tipo de datos que necesites.
La operatoria con este tipo de arreglos, no es mucho ms compleja que la de recorrer matrices rectangulares, presta atencin al siguiente cdigo:
En el mundo de la programacin, existen una serie de operaciones que se realizan con los arreglos y con las matrices, as por ejemplo que pasa si
necesito copiar un arreglo dentro de otro?, que pasa si necesito comparar dos arreglos?, Cmo puedo ordenar un arreglo?
Las respuestas a estas interrogantes estn cubiertas de forma genrica mediante el uso de la clase Arrays que se encuentra en el package
java. utils.
Taller de programacin I
11
Semana II - Arreglos
Otro mtodo que es muy til es el mtodo de ordenamiento sort. Este mtodo permite que ordenemos un arreglo de forma ascendente, por
ejemplo:

Fjate que se declaro e inicializ un arreglo con 5 valores, de forma desordenada, luego se orden, la salida por consola ser la siguiente:

El tercer mtodo que nos ser muy til es la bsqueda de un valor dentro de un arreglo. Para esto usamos el mtodo binarySearch el cual nos
devolver la posicin dentro del arreglo en al cual se encuentra el valor que estamos buscando. El mtodo ocupa una bsqueda binaria y para que
sea ms efciente primero debemos ordenar el arreglo. Si el arreglo no est ordenado, igual realiza el proceso, pero en arreglos muy grandes, el
tiempo de bsqueda es poco efciente.

Taller de programacin I
12
Semana II - Arreglos
El resultado de la ejecucin de este programa ser el siguiente:

Si te fjas es la posicin en que se encuentra el nmero 9 despus de ser ordenado.
Otra posibilidad es la de comparar 2 arreglos para ver si son iguales, para esto tenemos que ocupar el mtodo equals, este mtodo retorna verda-
dero slo si los arreglos son iguales en cada una de sus posiciones. El siguiente ejemplo permite comparar 2 arreglos que son iguales.

La salida del programa anterior es la siguiente:

Taller de programacin I
13
Semana II - Arreglos
Otra opcin que tienes para el manejo de los arreglos es la copia de elementos. Para lograr esto puedes ocupar el mtodo copyOf para copiar el
arreglo entero o una cierta cantidad de elementos.
En el siguiente ejemplo se crea un arreglo lleno de elementos y otro vaco, luego se copia el contenido de del primer arreglo arr1 en arr2 y luego se
imprime el contenido.

El resultado de la ejecucin del cdigo es la siguiente:

Taller de programacin I
14
Semana II - Arreglos

Si te fjas para copiar el rango de valores defnimos la posicin de inicio (0) y luego la cantidad de elementos (3) el resultado de la ejecucin es el
siguiente:

La clase ArrayList
La clase ArrayList es una de las grandes utilidades que presenta Java a sus programadores, incluso te cuento, que la clase que estudiaremos en
este captulo, no por nada se encuentra dentro de un package llamado java.util queda claro verdad?, para entender bien el benefcio de las
listas de arreglos es importante que entiendas las limitaciones que tiene un arreglo normal (no importan sus dimensiones).
Supongamos que deseas registrar la cantidad y ubicacin de las mujeres que se encuentran dentro de tu curso, esta informacin puede ser repre-
sentada por una matriz con valores booleanos, que de contener true, indicar que es mujer.
En un curso sabemos que hay una cantidad N de alumnos, valor que no podemos predecir, sin embargo, conocemos el tamao mximo, el cual
estar delimitado por la capacidad de la sala, este problema puede entonces ser solucionado con un arreglo tradicional, el cual tendr como
tamao el mximo de alumnos que el curso puede contener, en caso de existir menos alumnos que la capacidad mxima posible, el resto de las
posiciones no sern pobladas, quedando todas en falso, el valor por defecto de los booleanos, podemos concluir entonces que los arreglos con los
que trabajamos en captulos anteriores tienen un tamao que no es dinmico y que cuando son creados debe ser especifcado con anticipacin,
pongamos ahora un escenario ms difcil, en el cual eres el encargado de registrar cuantas mujeres y en qu orden ingresan a tu sede de estudio,
nota que para este caso es imposible determinar la cantidad de personas que ingresarn y por ello un arreglo no nos servir.
El ltimo mtodo que analizaremos es el mtodo copyOfRange que permite copiar slo una parte de un arreglo hacia
otro. Por ejemplo tenemos un arreglo y queremos copiar slo las primeras 3 posiciones, entonces hacemos lo siguiente:
Taller de programacin I
15
Semana II - Arreglos
Para solucionar este problema Java provee estructuras que permiten almacenar una N cantidad de objetos, donde la cantidad de elementos que
puede almacenar no se especifca con anticipacin. El tamao se incrementa o reduce segn vayas agregando elementos mediante la ejecucin
del programa.
Mtodos y operaciones con una lista.
La clase ArrayList contiene varios mtodos que permiten utilizar los objetos que se encuentran dentro del arreglo, las bsquedas, agregacin,
ordenamiento y otras tareas comunes de los arreglos son bastante fciles de realizar con la clase ArrayList. (Importante) No todos los mtodos de
la clase ArrayList han sido implementados en ella, varios de ellos son heredados de una clase llamada bstractCollection, recuerda que la herencia
ser tratada ms adelante.
La clase ArrayList tiene tres sobrecargas para su constructor, las cuales lucen de la siguiente forma:
ArrayList(): permite crear un arreglo vaco
ArrayList(Collection c): permite crear un arreglo que inicia con los objetos de la coleccin entregada como parmetro.
ArrayList(int capacidad): permite crear un arreglo con la capacidad inicial especifcada-Para declarar un ArrayList se debe utilizar la siguiente
sintaxis:

Cuando el arreglo se declara e inicializa de esta forma, el objeto miLista comenzar con una capacidad inicial de cero, adems, note que en la
declaracin no se ha incluido el tipo de objeto que puede almacenar, este punto es bien importante de recordar, dado que existen dos formas de
realizar dicha declaracin, en el caso anterior el objeto miLista almacena objetos de tipo object, el cual es el tipo por omisin si un tipo especfco
no ha sido explicitado. La otra forma de realizar esta declaracin es la siguiente:

En el cdigo citado, se pueden apreciar dos declaraciones, en la primera una lista vaca es creada, la cual permite slo almacenar objetos de tipo
String. En el segundo caso, la lista permite almacenar objetos de tipo doctor.
Una de las grandes caractersticas que tienen las listas, es que puedes crear una de cualquier tipo de objetos, pero cuidado, ya que slo objetos
pueden ser utilizados con las listas, o dicho de otra forma, no puedes crear listas de tipos de datos primitivos como los enteros, foat, Etc.
Sin embargo puedes recurrir a las clases Wrappers para poder almacenar este tipo de datos, el siguiente ejemplo, permitir almacenar valores con
coma fotante en una lista.
Taller de programacin I
16
Semana II - Arreglos
A continuacin veremos las funcionalidades ms interesantes de las listas, para las cuales utilizaremos la lista de String y Doctores mostrada
antes, adems aprenders lo mucho que la utilizacin de listas ahorra tiempo a los programadores.
Para agregar elementos a una lista, se utiliza el mtodo sobre cargado add().

Observa que el mtodo add, recibe como parmetro una cadena (String), esto se debe a que el tipo de datos que la lista recibe se ajusta al tipo
especifcado en su declaracin, la siguiente imagen muestra como la lista llamadas misDoctores, recibe un objeto de tipo Doctor por medio de
add();

En la primera parte a misCadenas se le agregan dos elementos de tipo String, de esta forma la lista ahora contiene dos elementos, dado el orden
en que se han ingresado el elemento cero es OpenDev y el segundo Sebastian, para la lista de doctores, la situacin es muy similar, el primer
elemento corresponde a un objeto de tipo doctor, el cual es instanciado y entregado al mtodo add(), luego un objeto de tipo doctor es creado
utilizando un constructor que permite especifcar su nombre y apellido y luego es agregado a la lista.
A menudo, los programadores necesitamos conocer la cantidad de elementos que tiene nuestra lista, a veces slo para informar la cantidad de
elementos que contiene u otras con el fn de limitar el acceso al alcanzar cierto tamao, el mtodo size() retorna un entero con la cantidad de
elementos del arreglo, el siguiente cdigo ilustra el uso de size().
Dada la cantidad de elementos agregados antes, el valor de la variable cantidad ser igual a 2.
El siguiente cdigo muestra la manera en que ambas listas son pobladas con valores:
Taller de programacin I
17
Semana II - Arreglos
Conocer el tamao (size) de nuestra lista a veces suele tambin utilizarse para saber si la lista est vaca preguntamos si el valor que retorna
size() es cero, sin embargo, la clase ArrayList contiene un comportamiento llamado isEmpty(), el cual es mucho ms sencillo de utilizar dado que
devuelve una expresin booleana, pudiendo as evaluar inmediatamente su resultado, el siguiente cdigo muestra un ejemplo de ello:

Un comportamiento que tambin es interesante es get(int posicin), este mtodo permite obtener un elemento que se encuentre almacenado en
la lista, el siguiente ejemplo, obtiene el doctor Jos Monsalve. El cual se encuentra en la segunda posicin de nuestra lista.

Recuerde que los objetos son pasados por referencia, esto signifca que cualquier cambio que realices sobre el objeto doctorObtenido lo ests
haciendo sobre el segundo objeto de la lista y viceversa.
Anlogo a get, existe un mtodo llamado set, el cual permite posicionar un objeto dentro de la lista en una posicin existente.
El siguiente ejemplo almacena un nuevo doctor, el cual reemplaza al doctor que ocupaba la posicin cero (el doctor instanciado utilizando su
constructor sin parmetros).
Recuerde que para realizar esta accin la posicin cero debe existir, ya que set, no incrementa el tamao y luego agrega un nuevo elemento a la
lista como lo hace add().
Para limpiar todos los elementos de una lista (borrarlos) bastar con utilizar el comportamiento clear() de la siguiente forma:
Taller de programacin I
18
Semana II - Arreglos
Un nuevo for para recorres listas.
En la mayora de las operaciones que suelen realizarse sobre los arreglos es necesario recorrer toda la estructura, la razn de ello es que casi todas
estas operaciones incluyen una bsqueda, por ejemplo, si deseas eliminar un elemento de la lista es muy probable que no conozcamos la posicin
en la que fue almacenada, debido a que los elementos son por lo general agregados de forma dinmica en tiempo de ejecucin, as que dada esta
situacin se suele primero recorrer la lista hasta encontrar el objeto que necesitemos eliminar, adems si sabes que existe ms de un objeto con
el criterio de eliminacin no es el nico, entonces deberemos recorrer la lista completa para encontrar el resto, as las actividades como contar o
modifcar los objetos que cumplan con algn criterio siempre involucran una bsqueda previa.
Para recorrer las listas existen varias alternativas, la primera ser utilizar el ciclo for tradicional, en el cual vamos a recorrer la lista desde el ndice
cero hasta el ltimo elemento del arreglo, el cual se encuentra representado por el resultado de la llamada a la funcin size() menos uno.
El siguiente ejemplo recorre una lista de elementos de tipo String y cuenta todos aquellos elementos que terminen con el String mente

Taller de programacin I
19
Semana II - Arreglos
Al igual que cuando recorremos un arreglo, la variable ndice i, representa el nmero de elemento, as por cada iteracin obtenemos el string
que utiliza la posicin i mediante el mtodo get y realizamos la evaluacin, note que la declaracin de cadenaAux, puede omitirse si se utiliza la
siguiente sintaxis ya que las listas reciben y retornan los objetos con los tipos con los que fueron declarados.

Si bien el ciclo for funciona de maravillas, existe un for de ms alto nivel que sirve para recorrer listas de objetos de forma mucho ms sencilla,
este for tambin es conocido como por cada, debido a que recorre toda la lista por cada objeto de algn tipo en particular que se encuentre en
ella, el for al mirarlo por primera vez luce un poco ms complicado, sin embargo, a pesar de que su sintaxis es diferente es el equivalente al for que
hemos visto recin, veamos ahora como se resuelve el mismo problema anterior con este for.

Fjate que incluso la forma en la que se lee este for es mucho ms comprensible, el signo dos puntos (:) que aparece dentro del for signifca en,
por ello este for se lee de la siguiente forma:
por cada String en misCadenas
Taller de programacin I
20
Semana II - Arreglos
Al igual que en el caso anterior la variable cadenaAux representa cada uno de los elementos que contenga la lista, siendo cadenaAux el primer
elemento en la primera iteracin, el segundo en la segunda y as hasta que no queden ms elementos en la lista misCadenas.
El siguiente ejemplo muestra como cambiar el nombre a Rodrigo a todos los doctores cuyo nombre contenga tres o menos caracteres y luego los
presenta por pantalla.
Para el cdigo anterior el resultado es:

Recuerda que, como ya lo habamos discutido antes, los cambios que realices sobre el objeto doc, se estn realizando al objeto al cual representa.
Taller de programacin I
21
Semana II - Arreglos
Resumen de la Semana
Sinopsis de la prxima clase
Esta semana aprendiste a trabajar con estructuras de arreglos, matrices y listas. Conociste las distintas formas de utilizarlas y las clases y
mtodos que facilitan el trabajo con estas estructuras.
La prxima semana aprenders a trabajar con la estructura base de una clase sus constructores, accesadores y mutadores. Adems
conocers conceptos avanzados de orientacin a objetos como por ejemplo sobrecarga y la forma de importar clases para realizar procesos
bsicos de colaboracin.

También podría gustarte