Programacion Java
Programacion Java
La primera parte es una introducción paso a paso a la OOP con el uso del
lenguaje Java. El tutorial comienza con una visión general de la plataforma y el
lenguaje Java y le siguen las instrucciones para establecer un entorno de
desarrollo que consiste en un Kit de desarrollo de Java (JDK) y el Eclipse IDE.
Una vez que se le hayan presentado los componentes de su entorno de
desarrollo, comenzará a aprender la sintaxis Java básica en un modo práctico.
JDK 6 de Sun/Oracle.
IDE Eclipse para desarrolladores Java.
Un sistema que soporte Java SE 6 con al menos 1GB de memoria principal. Java 6 tiene
soporte en Linux®, Windows® y Solaris®.
Al menos 20MB de espacio en disco para instalar los componentes y ejemplos del software.
El lenguaje Java
Conozca las API de Java
La mayoría de los desarrolladores Java hacen referencia constantemente a la documentación API de
Java online oficial, también llamada el Javadoc (vea Recursos). De forma predeterminada, usted ve
tres marcos en el Javadoc. El marco superior izquierdo muestra todos los paquetes en la API y debajo
están las clases en cada paquete. El marco principal (a la derecha) muestra detalles del paquete o de la
clase seleccionada actualmente. Por ejemplo, si selecciona el paquete java.util en el marco
superior izquierdo y luego selecciona la clase ArrayList que aparece debajo de él, en el marco
derecho, verá detalles acerca del ArrayList, que incluyen una descripción de lo que hace, cómo
usarlo y sus métodos.
El lenguaje Java es un derivado del lenguaje C, por lo que sus reglas de sintaxis
se parecen mucho a C: por ejemplo, los bloques de códigos se modularizan en
métodos y se delimitan con llaves ( { y }) y las variables se declaran antes de que
se usen.
Estructuralmente, el lenguaje Java comienza con paquetes. Un paquete es el
mecanismo de espacio de nombres del lenguaje Java. Dentro de los paquetes se
encuentran las clases y dentro de las clases se encuentran métodos, variables,
constantes, entre otros. En este tutorial, aprenderá acerca de las partes del
lenguaje Java.
El compilador Java
Cuando usted programa para la plataforma Java, escribe el código de origen en
archivos .java y luego los compila. El compilador verifica su código con las reglas
de sintaxis del lenguaje, luego escribe los códigos byte en archivos .class. Los
códigos byte son instrucciones estándar destinadas a ejecutarse en una Java
Virtual Machine (JVM). Al agregar este nivel de abstracción, el compilador Java
difiere de los otros compiladores de lenguaje, que escriben instrucciones
apropiadas para el chipset de la CPU en el que el programa se ejecutará.
La JVM
El recolector de basura
En lugar de forzarlo a mantenerse a la par con la asignación de memoria (o usar
una biblioteca de terceros para hacer esto), la plataforma Java proporciona una
gestión de memoria lista para usar. Cuando su aplicación Java crea una
instancia de objeto al momento de ejecución, la JVM asigna automáticamente
espacio de memoria para ese objeto desde el almacenamiento dinámico, que es
una agrupación de memoria reservada para que use su programa. El recolector
de basura Java se ejecuta en segundo plano y realiza un seguimiento de cuáles
son los objetos que la aplicación ya no necesita y recupera la memoria que ellos
ocupan. Este abordaje al manejo de la memoria se llama gestión de la memoria
implícita porque no le exige que escriba cualquier código de manejo de la
memoria. La recogida de basura es una de las funciones esenciales del
rendimiento de la plataforma Java.
El kit de desarrollo de Java
Eclipse es un IDE de código abierto popular para el desarrollo Java. Maneja las
tareas básicas, tales como la compilación de códigos y la configuración de un
entorno de depuración, para que pueda centrase en escribir y probar códigos.
Además, puede usar Eclipse para organizar archivos de códigos de origen en
proyectos, compilar y probar esos proyectos y almacenar archivos de proyectos
en cualquier cantidad de repositorios de origen. Necesita tener instalado un JDK
para usar Eclipse para el desarrollo Java.
Instale JDK 6
Configure Eclipse
El IDE Eclipse se coloca encima del JDK como una extracción útil pero todavía
necesita acceder al JDK y sus diversas herramientas. Antes de que pueda usar
Eclipse para escribir el código Java, tiene que indicarle dónde está ubicado el
JDK.
1. Eclipse indicará un JRE instalado. Necesita asegurarse de usar el que descargó con JDK 6. Si
Eclipse no detecta automáticamente el JDK que usted instaló, haga clic en Add… y en el
siguiente diálogo Standard VM, luego haga clic en Next.
2. Especifique el directorio de inicio del JDK (por ejemplo, C:\home\jdk1.6.0_20 en Windows),
luego haga clic en Finish.
3. Confirme que el JDK que quiere usar esté seleccionado y haga clic en OK.
Ahora Eclipse está configurado y listo para que usted cree proyectos y compile y
ejecute códigos Java. La siguiente sección lo familiarizará con Eclipse.
Comenzar a usar Eclipse
Espacio de trabajo
Proyectos
Perspectivas
Vistas
Cree un proyecto
1. Haga clic en File > New > Java Project … y verá un recuadro de diálogo que se abre como
el que se muestra en la Ilustración 3:
Ilustración 3. Asistente para el proyecto Java nuevo
¿Qué es un objeto?
Los lenguajes de programación estructurada como C y COBOL siguen un
paradigma de programación muy diferente de los orientados a objetos. El
paradigma de programación estructurada está altamente orientado a datos, lo
cual significa que usted tiene estructuras de datos por una parte y luego
instrucciones del programa que actúan sobre esos datos. Los lenguajes
orientados a objetos, como el lenguaje Java, combinan datos e instrucciones del
programa en objetos.
Un objeto es una entidad independiente que contiene atributos y
comportamientos y nada más. En lugar de tener una estructura de datos con
campos (atributos) y pasar esa estructura a toda la lógica del programa que
actúa sobre ella (comportamiento), en un lenguaje orientado a objetos, se
combinan los datos y la lógica del programa. Esta combinación puede ocurrir en
niveles completamente diferentes de granularidad, desde objetos específicos
como un Number hasta objetos de aplicación general como un servicio
de FundsTransfer en una gran aplicación bancaria.
Objetos padre e hijo
Un objeto padre es aquel que sirve como la base estructural para derivar objetos
hijos más complejos. Un objeto hijo se parece a su padre pero es más
especializado. El paradigma orientado a objetos le permite reutilizar los atributos
y comportamientos comunes del objeto padre y le agrega a sus objetos hijos
atributos y comportamientos que difieren. (Usted aprenderá más
sobre herencia en la siguiente sección de este tutorial).
Comunicación y coordinación de objetos
Los objetos se comunican con otros objetos por medio del envío de mensajes
(llamadas de método en el lenguaje Java). Además, en una aplicación orientada a
objetos, el código del programa coordina las actividades entre objetos para
realizar tareas dentro del contexto del dominio de aplicación dado. (En el
paradigma Modelo-Vista-Controlador, este código de programa de coordinación
es el Controlador. Vea Recursos para aprender más acerca de MVC).
Resumen del objeto
El objeto Person
Comenzaré con un ejemplo que está basado en escenario común de desarrollo
de aplicación: se representa a un individuo con un objeto Person.
Volviendo a la definición de un objeto, usted sabe que un objeto tiene dos
elementos primarios: atributos y comportamiento. Verá cómo estos se aplican al
objeto Person.
Atributos
¿Qué atributos puede tener una persona? Algunos atributos comunes incluyen:
Nombre
Edad
Altura
Peso
Color de ojos
Género
Comportamiento
Una persona real puede hacer todo tipo de actividades pero los comportamientos
de los objetos normalmente se relacionan con algún tipo de contexto de
aplicación. En un contexto de aplicación de negocio, por ejemplo, puede querer
preguntarle a su objeto Person: «¿Qué edad tiene?» Como respuesta, Person le
diría el valor de su atributo de Edad.
Una lógica más compleja podría estar oculta dentro del objeto Person pero por
ahora suponga que esa Person tiene el comportamiento de responder estas
preguntas:
¿Cuál es su nombre?
¿Qué edad tiene?
¿Cuál es su altura?
¿Cuánto pesa?
¿Cuál es su color de ojos?
¿Cuál es su género?
Estado y cadena
El Estado es un concepto importante en OOP. El estado de un objeto se
representa en cualquier momento por medio del valor de sus atributos.
En el caso de Person, su estado se define por sus atributos, tales como nombre,
edad, altura y peso. Si usted quisiera presentar una lista de varios de esos
atributos, podría hacerlo utilizando una clase de String, sobre la cual hablaré
más en el tutorial posteriormente.
Juntos, los conceptos de estado y cadena le permiten decirle a Person: cuénteme
quién es usted dándome un listado (o una String) de sus atributos.
Principios de OOP
Si usted viene de un ambiente de programación estructurada, la proposición de
valores de OOP puede que no sea clara todavía. Después de todo, los atributos
de una persona y cualquier lógica para recuperar (y convertir) sus valores
pueden escribirse en C o COBOL. Esta sección clarifica los beneficios del
paradigma OOP al explicar sus principios
distintivos: encapsulamiento, herencia y polimorfismo.
Encapsulamiento
Recuerde que un objeto es, sobre todo, diferenciado o independiente. Este es el
principio de encapsulamiento en funcionamiento. Ocultación es otro término que a
veces se usa para expresar la naturaleza independiente y protegida de los
objetos.
Herencia
En la programación estructurada, es común copiar una estructura, darle un
nombre nuevo y agregar o modificar los atributos que hacen que la nueva
identidad (por ejemplo, un registro de Cuenta) sea diferente de su fuente original.
Con el tiempo, este abordaje genera una gran cantidad de códigos duplicados,
que pueden crear problemas de mantenimiento.
OOP presenta el concepto de herencia, por el cual los objetos especializados, —
sin ningún código adicional, — pueden «copiar» los atributos y el
comportamiento de los objetos de origen en los que se especializan. Si alguno
de esos atributos o comportamientos necesitan modificarse, entonces
simplemente modifíquelos temporalmente. Solo modifique lo que necesite
modificar para crear objetos especializados. Como ya sabe desde la sección Lo
que sigue, el objeto origen se llama el padre y la especialización nueva se llama
el hijo.
Herencia en funcionamiento
Suponga que está escribiendo una aplicación de recursos humanos y quiere usar
el objeto Person como base para un objeto nuevo llamado Employee. Al ser el hijo
de Person, el Employee tendría todos los atributos de un objeto Person, junto con
los adicionales, tales como:
La herencia hace que sea fácil crear la nueva clase de Employee del objeto sin
necesidad de copiar manualmente todo el código de Person o mantenerlo.
Verá muchos ejemplos de herencia en la programación Java más adelante en el
tutorial, especialmente en la Parte 2.
Polimorfismo
Sería imposible introducir toda la sintaxis del lenguaje Java en un solo tutorial. Lo
que resta de la Parte 1 se centra en los conceptos básicos del lenguaje, por lo
que le da suficiente conocimiento y práctica para escribir programas simples.
OOP se trata por completo de los objetos, por lo cual esta sección comienza con
dos temas relacionados específicamente con la forma en que el lenguaje Java
los maneja: palabras reservadas y la estructura de un objeto Java.
Palabras reservadas
abstracto
afirmar
booleano
interrupción
byte
caso
capturar
caract.
clase
const.
continuar
predeterminado
hacer
doble
else
enumer.
extiende
final
finalmente
flotante
para
ir a
si
implementa
importar
instancia de
int
interfaz
largo
nativo
nuevo
paquete
privado
protegido
público
retorno
corto
estático
strictfp
súper
conmutador
sincronizado
esto
arrojar
arroja
transitorio
intentar
inválido
volátil
mientras
Los paquetes también le dan una buena forma para construir aplicaciones más
complejas en unidades diferenciadas de funcionalidad.
Definición de paquete
Para definir un paquete, use la palabra clave paquete seguida por un nombre de
paquete legal y termina con un punto y coma. A menudo, los nombres de los
paquetes se separan con puntos y siguen este plan de facto:
package orgType.orgName.appName.compName;
Mostrar más
Sentencias de importación
A continuación en la definición de objeto (retomando el Listado 1. Definición de
objeto) se encuentra la sentencia de importación. Una sentencia de importación le
comunica al compilador Java dónde encontrar las clases a las que usted hace
referencia dentro de su código. Cualquier objeto no trivial usa otros objetos para
alguna funcionalidad y la sentencia de importación es cómo usted le comunica al
compilador Java sobre ellos.
import ClassNameToImport;
Mostrar más
Sin embargo, importar todo un paquete puede hacer que su código sea menos
legible, por lo tanto recomiendo que importe solo las clases que necesite.
Declaración de clase
Para definir un objeto en el lenguaje Java, debe declarar una clase. Considere a
una clase como una plantilla para un objeto, como un molde de galletas. La clase
define la estructura básica del objeto y, al momento de la ejecución, su aplicación
crea una instancia del objeto. La palabra objeto a menudo se usa como sinónimo
de la palabra clase. En sentido estricto, una clase define la estructura de algo de
lo cual el objeto es una instancia.
El Listado 1. Definición de objeto incluye esta declaración de clase:
accessSpecifier class ClassName {
accessSpecifier dataType variableName [= initialValue];
accessSpecifier ClassName([argumentList]) {
constructorStatement(s)
}
accessSpecifier returnType methodName([argumentList]) {
methodStatement(s)
}
}
Mostrar más
Un accessSpecifier
Un dataType
Un variableName
Opcionalmente, un initialValue
Nunca es una buena idea usar variables públicas pero, en casos extremadamente raros, podría ser
necesario, así que existe la opción. La plataforma Java no restringe sus casos de uso. Por lo tanto,
depende de usted ser disciplinado al usar buenos convenios de codificación, incluso si se siente
tentado para hacer lo contrario.
público: Cualquier objeto en cualquier paquete puede ver la variable. (Nunca use este
valor).
protegido: Cualquier objeto definido en el mismo paquete, o una subclase (definida en
cualquier paquete), puede ver la variable.
Ningún especificador (también llamado acceso amigable o privado al paquete): Solo los
objetos cuyas clases se definen en el mismo paquete pueden ver la variable.
privado: Solo la clase que contiene la variable puede verla
accessSpecifier
returnType
methodName
argumentList
A continuación, verá en más detalle dos tipos de métodos, comenzando con los
constructores.
Métodos constructores
Los constructores le permiten especificar cómo crear una instancia de una clase.
El Listado 1. Definición de objeto muestra la sintaxis de la declaración del
constructor en una forma abstracta. Aquí está de nuevo en el Listado 3:
Listado 3. Sintaxis de la declaración del constructor
accessSpecifier ClassName([argumentList]) {
constructorStatement(s)
}
Mostrar más
Los constructores son opcionales
Si usted no proporciona un constructor, el compilador proporcionará uno por usted, denominado el
constructor predeterminado (o sin argumento). Si usted proporciona un constructor que no sea un
constructor sin argumento (o no-arg), el compilador no generará uno por usted.
El accessSpecifier de un constructor es el mismo que el de las variables. El
nombre del constructor debe coincidir con el nombre de la clase. Por lo tanto, si
llama a su clase Person, entonces el nombre del constructor también debe
ser Person.
Para cualquier constructor que no sea el constructor predeterminado, usted pasa
una argumentList, que es una o más de:
argumentType argumentName
Mostrar más
public Person(String name, int age, int height, String eyeColor, String gender) {
this.name = name;
this.age = age;
this.height = height;
this.weight = weight;
this.eyeColor = eyeColor;
this.gender = gender;
}
}
Mostrar más
Logger l = Logger.getLogger("NewLogger");
Mostrar más
Por lo cual, para invocar un método estático, no necesita una instancia de objeto,
solo el nombre de la clase.
La Tabla 1 muestra los ocho tipos de datos primitivos que es probable que usted
vea regularmente, incluidos los valores predeterminados que los primitivos
adquieren si usted no inicializa explícitamente el valor de una variable miembro:
Registro incorporado
Para el punto de inserción, elija Last member y haga clic en OK. Observe que los
getters y setters aparecen luego del método main().
Hay más sobre main()
Ahora agregará algunos códigos a main() para que le permita crear una
instancia de una Person, establecer algunos atributos y luego imprimirlos en la
consola.
Comience agregando un constructor a Person. Escriba el código en el Listado 6
en su ventana de origen debajo de la parte superior de la definición de clase (la
línea inmediatamente debajo de public class Person ()):
Listado 6. Constructor de Person
public Person(String name, int age, int height, int weight, String eyeColor,
String gender) {
this.name = name;
this.age = age;
this.height = height;
this.weight = weight;
this.eyeColor = eyeColor;
this.gender = gender;
}
Mostrar más
Declaración de accessor
El modo más fácil, por mucho, de declarar accessor es dejar que Eclipse lo haga
por usted, como se mostró en la Ilustración 6. Eclipse genera getters y setters .
Pero también debería saber cómo codificar manualmente un par de getters y
setters Suponga que usted tiene un atributo, Foo, cuyo tipo es java.lang.String.
Una declaración completa para aquel (siguiendo las guías de accessor) sería:
private String foo;
public String getFoo() {
return foo;
}
public void setFoo(String value) {
foo = value;
}
Mostrar más
Tal vez usted observe enseguida que el valor del parámetro que pasó al setter se
denomina de modo diferente que si lo hubiera generado Eclipse. Este es mi
propio convenio y uno que recomiendo a otros desarrolladores. En la rara
ocasión que yo codifique manualmente un setter, siempre uso el
nombre value como el valor de parámetro para el setter. Este captador de
miradas me recuerda que he codificado manualmente el setter. Debido a que
normalmente permito que Eclipse genere los getters y setters por mí, cuando no
lo hago es por una buena razón. Usar value como valor de parámetro del setter
me recuerda que este setter es especial. (Los comentarios de código también lo
podrían hacer).
Llamado de métodos
Invocar, o llamar, métodos es fácil. Usted vio en el Listado 7. El
método main() cómo invocar los diversos getters de Person para devolver sus
valores. Ahora formalizaré el mecanismo de realizar llamadas de métodos.
La invocación de un método con y sin parámetros
Para invocar un método para un objeto, necesita una referencia a ese objeto. La
sintaxis de la invocación de métodos comprende la referencia del objeto, un
punto literal, el nombre del método y cualquier parámetro que necesite pasarse:
objectReference.someMethod();
objectReference.someOtherMethod(parameter);
Mostrar más
Recuerde que los constructores también son métodos. Y puede separar los
parámetros con espacios y saltos de línea. Al compilador Java no le interesa. Las
siguientes dos invocaciones de métodos son idénticas:
Logger l = Logger.getLogger(Person.class.getName());
l.info("Name: " + p.getName());
Mostrar más
Cadenas y operadores
El tutorial ha presentado hasta el momento varias variables de tipo String pero
sin mucha explicación. Aprenda más acerca de las cadenas en esta sección y
también descubra cuándo y cómo usar los operadores.
Cadenas
El manejo de cadenas en C es un trabajo intensivo porque son matrices de
finalización nula de caracteres de 8 bits que usted tiene que manipular. En el
lenguaje Java, las cadenas son objetos de primera clase de tipo String, con
métodos que le ayudan a manejarlas. (Lo más cerca que el código Java llega al
mundo C con respecto a las cadenas es el tipo de datos primitivos char, que
puede tener un solo carácter Unicode, por ejemplo a).
Ya ha visto cómo crear una instancia de un objeto String y establecer su valor
(en el Listado 5. Person con algunos métodos nuevos ) pero existen varias otras
formas de hacer eso. Aquí hay un par de formas para crear una
instancia String con un valor de hello:
String greeting = "hello";
Mostrar más
greeting = new String("hello");
Mostrar más
Como puede esperar, el lenguaje Java puede calcular y ya ha visto como asignar
variables. Ahora, le daré un breve vistazo a algunos de los operadores del
lenguaje Java que necesitará mientras sus aptitudes mejoran. El lenguaje Java
usa dos tipos de operadores:
- a - b Resta b de a
- -a Aritméticamente niega a
* a * b Multiplica a y b
/ a / b Divide a por b
+= a += b Taquigrafía para a = a + b
-= a -= b Taquigrafía para a = a - b
*= a *= b Taquigrafía para a = a * b
%= a %= b Taquigrafía para a = a % b
Operadores adicionales
El punto (.), que califica los nombres de los paquetes e invoca métodos.
Los paréntesis (()), que delimitan una lista separada por comas de parámetros para un
método.
new, que (cuando le sigue un nombre de constructor) crea una instancia de un objeto.
La sintaxis del lenguaje Java también incluye una cantidad de operadores que se
usan específicamente para programación condicional, es decir, programas que
responden de forma diferente en base a una entrada diferente. Los verá en la
siguiente sección.
a
>=
>= b a es mayor que o igual a b
a <
< b a es menor que b
a
<=
<= b a es menor que o igual a b
a
==
== b a es igual a b
a !
!= = b a no es igual a b
Ambos a y b son verdaderos,
a evalúa condicionalmente
&& a b (si a es falso, b no se
&& b evalúa)
a o b es verdadero, evalúa
condicionalmente a b (si a es
` ` `a b`verdadero, b no se evalúa)
! !a a es falso
a o b es
verdadero,
siempre evalúa
` ` `a b`a b
a ^
^ b a y b son diferentes
La sentencia if
Ahora que tiene un grupo de operadores, es momento de usarlos. Este código
muestra lo que sucede cuando agrega algo de lógica al
accessor getHeight() del objeto Person:
public int getHeight() {
int ret = height;
// If locale of the machine this code is running on is U.S.,
if (Locale.getDefault().equals(Locale.US))
ret /= 2.54;// convert from cm to inches
return ret;
}
Mostrar más
Si el entorno local actual está en los Estados Unidos (donde no se usa el sistema
métrico), entonces tal vez tenga sentido convertir el valor interno de altura (en
centímetros) a pulgadas. Este ejemplo ilustra el uso de la sentencia if, que
evalúa una expresión booleana en paréntesis. Si esa expresión evalúa como
verdadera, ejecuta la siguiente sentencia.
En este caso, solo necesita ejecutar una sentencia si el Locale de la máquina en
la que se ejecuta el código es Locale.US. Si necesita ejecutar más de una
sentencia, puede usar llaves para formar una sentencia compuesta. Una sentencia
compuesta agrupa muchas sentencias en una, — y las sentencias compuestas
también pueden contener otras sentencias compuestas.
Ámbito variable
Cada variable en una aplicación Java tiene un ámbito, o espacio de nombres
localizado, al cual usted puede acceder por nombre dentro del código. Fuera de
ese espacio, la variable está fuera de ámbito y usted obtendrá un error de
compilación si intenta acceder a ella. Los niveles de ámbitos en el lenguaje Java
se definen de acuerdo a dónde se declare una variable, como se muestra en el
Listado 8:
Listado 8. Ámbito variable
public class SomeClass {
// Block 4
} // End
Mostrar más
Bucles
Además de poder aplicar condiciones a sus programas y ver diferentes
resultados en base a diversos escenarios if / then, a veces quiere que su código
solo haga lo mismo una y otra vez hasta que se haga el trabajo. En esta sección,
aprenda acerca de dos construcciones usadas para iterar el código o ejecutarlo
más de una vez. Bucles for y bucles while loops.
¿Qué es un bucle?
Un bucle es una construcción de programación que se ejecuta repetidamente
mientras se cumple alguna condición (o conjunto de condiciones). Por ejemplo,
puede pedirle a un programa que lea todos los registros hasta el final de un
archivo o que realice un bucle por todos los elementos de una matriz,
procesando cada uno. (Aprenderá acerca de las matrices en la sección Lo que
sigue de este tutorial).
Bucles for
La construcción de bucle básico en el lenguaje Java es la sentencia for, que le
permite iterar un rango de valores para determinar cuántas veces ejecutar un
bucle. La sintaxis abstracta para un bucle for es:
for (initialization; loopWhileTrue; executeAtBottomOfEachLoop) {
statementsToExecute
}
Mostrar más
Matrices
La mayoría de los lenguajes de programación incluyen el concepto de
una matriz para tener una colección de elementos y el lenguaje Java no es
ninguna excepción. Una matriz no es nada más que una colección de elementos
del mismo tipo.
Nota: Los corchetes en los ejemplos de códigos de esta sección son parte de la sintaxis requerida para
las Colecciones Java, no indicadores de elementos opcionales.
Existen dos formas para crear una matriz entera de elementos. Esta sentencia
crea una matriz con espacio para cinco elementos pero está vacía:
Los valores iniciales van entre las llaves y se separan con comas.
Un modo más difícil para crear una matriz sería crearla y luego codificar un bucle
para inicializarlo:
Este código declara la matriz entera de cinco elementos. Si usted intenta poner
más de cinco elementos en la matriz, el tiempo de ejecución de Java reclamará y
arrojará una excepción. Aprenderá acerca de las excepciones y cómo manejarlas
en la Part 2.
Carga de una matriz
Para cargar una matriz, serpentee por los enteros desde 1 a través de la longitud
de la matriz (a la cual llega al llamar .length en la matriz, — más sobre eso en
un minuto). En este caso, usted se detiene cuando llegue a 5
Una vez que se carga la matriz, puede acceder a ella como antes:
Logger l = Logger.getLogger("Test");
for (int aa = 0; aa < integers.length; aa++) {
l.info("This little integer's value is: " + integers[aa]);
}
Mostrar más
Logger l = Logger.getLogger("Test");
for (int i : integers) {
l.info("This little integer's value is: " + i);
}
Mostrar más
Encuentro la sintaxis más nueva más simple para trabajar y la usaré a lo largo de
esta sección.
El índice de elementos
Considere a una matriz como una serie de grupos y en cada grupo va un
elemento de cierto tipo. Se gana el acceso a cada grupo al usar un índice:
element = arrayName [elementIndex];
Mostrar más
El método length
Un método útil, como ya ha visto, es length. Es un método incorporado, por lo
tanto su sintaxis no incluye los paréntesis habituales. Solo escriba la
palabra length y devolverá, — cómo es de esperar, — el tamaño de la matriz.
Las matrices en el lenguaje Java están basadas en cero. Por lo tanto, para
alguna matriz llamada array, el primer elemento en la matriz reside siempre
en array[0] y el último reside en array[array.length - 1].
Una matriz de objetos
Ha visto cómo las matrices pueden tener tipos primitivos pero vale la pena
mencionar que también pueden tener objetos. En ese sentido, la matriz es la
colección más utilitaria del lenguaje Java.
Embalaje y desembalaje
Cada tipo primitivo en el lenguaje Java tiene una clase homóloga JDK, que
puede ver en la Tabla 4:
byte java.lang.Byte
caract. java.lang.Character
corto java.lang.Short
int java.lang.Integer
largo java.lang.Long
flotante java.lang.Float
doble java.lang.Double
El ejemplo anterior fue abstracto. Ahora, aquí tiene uno más realista:
Ese pequeño recorte de código hace lo mismo que este más largo:
Es posible que los objetos se impriman en un orden diferente del que usted los
agregó porque un Conjunto garantiza la singularidad, no el orden. Verá esto por
usted mismo si pega el código anterior en el método main() de su clase Person y
lo ejecuta.
Mapas
Un Mapa es una construcción de colección útil porque le permite asociar un objeto
(la clave) con otro (el valor). Como puede imaginar, la clave para el Mapa debe ser
única y se usa para recuperar el valor en un momento posterior. Una colección
de Mapa Java solo puede tener objetos y define un contrato estricto sobre cómo
se comporta.
Debido a que el Mapa es una interfaz, usted no puede crear una instancia de él
directamente, por lo tanto le mostraré una de mis implementaciones
favoritas: HashMap.
Aquí hay algunas de las cosas que querrá hacer con los Mapa s:
JAR
El JDK se envía con una herramienta llamada JAR, que significa Java Archive
(archivo Java). Use esta herramienta para crear archivos JAR. Una vez que haya
empaquetado su código en un archivo JAR, otros desarrolladores pueden
simplemente dejar el archivo JAR en sus proyectos y configurar sus proyectos
para usar su código.
Verá su archivo JAR en la ubicación que seleccionó. Puede usar las clases en él
desde su código si lo pone en su ruta de desarrollo en Eclipse. Hacer eso es
facilísimo también, como verá a continuación.
Uso de aplicaciones de terceros
Mientras usted se siente más y más cómodo al escribir aplicaciones Java, querrá
usar más y más aplicaciones de terceros para soportar su código. A modo de
ejemplo, digamos que usted quiere usar joda-time, una biblioteca de sustitución
JDK para hacer manejo de fecha/tiempo, manipulaciones y cálculos.
Supongamos que ya ha descargado joda-time, que se almacena en un archivo
JAR. Para usar las clases, su primer paso es crear un directorio lib en su
proyecto y dejar el archivo JAR en él:
Una vez que Eclipse haya procesado los códigos (es decir, los archivos de
clases) en el archivo JAR, están disponibles para hacer referencia (importar)
desde su código Java. Observe en Project Explorer que hay una carpeta nueva
llamada Bibliotecas referenciadas que contiene el archivo joda-time-1.6.jar.
a()
computeInterest()
La respuesta debería ser evidente, sin embargo por alguna razón, los
programadores tienen una tendencia a darle a los métodos (y variables, para tal
caso) nombres pequeños, abreviados. Sin duda, un nombre ridículamente largo
puede ser poco práctico pero un nombre que transmite lo que un método hace
no necesita ser ridículamente largo. Seis meses después de que escriba un
grupo de códigos, tal vez no recuerde lo que quiso hacer con un método
llamado a() pero es evidente que un método llamado computeInterest(), bueno,
probablemente compute interés.
Mantenga pequeños los métodos
Los métodos pequeños son tan preferibles como las clases pequeñas y por
razones similares. Un modismo que intento seguir es mantener el tamaño de un
método en una página como lo veo en mi pantalla. Esto hace que mis clases de
aplicaciones sean más plausibles de ser mantenidas.
Si un método crece más allá de una página, lo refactorizo. Refactorear significa
cambiar el diseño de un código existente sin cambiar sus resultados. Eclipse
tiene un maravilloso conjunto de herramientas de refactorización. Normalmente,
un método largo contiene subgrupos de funcionalidad agrupados. Tome esta
funcionalidad y muévala a otro método (nombrándola como corresponde) y pase
los parámetros como se necesite.
Limite cada método a un solo trabajo. He descubierto que un método que hace
solo una cosa bien, normalmente no toma más de alrededor de 30 líneas de
códigos.
Ni este:
public static void main(String[] args)
{
}
Mostrar más
¿Por qué? Bueno, es estándar, por lo tanto la mayoría de los códigos con los
que usted se encuentre (como códigos que usted no escribió pero que se
pueden pagar para mantener) muy probablemente estarán escritos de ese modo.
Una vez dicho eso, Eclipse sí le permite definir estilos de código y formatear su
código de cualquier modo que a usted le guste. Lo principal es que elija un estilo
y lo mantenga.
Use un registro incorporado
Antes de que Java 1.4 introdujera el registro incorporado, el modo canónico para
descubrir lo que su programa estaba haciendo era hacer una llamada de sistema
como la siguiente: