Logo Studenta

Guia_de_sintaxis_de_Java_3octubre

¡Este material tiene más páginas!

Vista previa del material en texto

1 
 
 
 
 
Apéndice III 
Guía de sintaxis del lenguaje Java 
v1* 
Fuente: Programación en C/C++, Java y UML, 2ª ed. Joyanes-
Zahonero, 2014 
 
 
EL LENGUAJE DE PROGRAMACIÓN JAVA 
Java es un lenguaje de programación con una gran cantidad de características técnicas notables. 
Ya que Java no fue diseñado específicamente para estudiantes, no es un lenguaje fácil de 
aprender, en primera instancia, ya que requiere una cierta cantidad de maquinaria técnica para 
escribir programas en Java, incluso los más simples. Sin embargo, las ventajas que tienen los 
profesionales terminan a la larga convirtiéndose también en ventajas para los estudiantes a 
medida que estos van superando esas dificultades y terminan convirtiendo a los estudiantes con 
experiencia en magníficos programadores. 
Las características de Java han sido definidas por diversos autores en un artículo educativo 
(“White Paper”) [Joyanes-Zahonero, Programación en C/C++, Java y UML, 2ª ed. 2014, p. 598] 
ya muy famoso y donde se describen las 11 propiedades sobresalientes (buzzwords) de Java: 
• Sencillo (simple). 
• Orientado a objetos. 
• Capacidad de trabajo en red (Network-Savvy). 
• Robusto. 
• Seguro. 
• Neutro (independiente) de la arquitectura. 
• Portable. 
• Interpretado. 
• Altas prestaciones. 
• Multihilo (Multithread) 
• Dinámico 
* Fuente: Programación en C/C++, Java y UML, 2ª ed. Joyanes-Zahonero, 2014 
 
Sitio web de referencia 
Portal oficial de Java de Oracle 
www.oracle.com/technetwork/java/index.htm 
Página “Java y tú”: Descargar hoy (Oracle) www.java.com/es 
http://www.oracle.com/technetwork/java/index.htm
http://www.java.com/es
2 
 
 
Un programa sencillo en Java 
Un programa Java es realmente una definición de una clase con un método main. La 
aplicación Java se ejecuta cuando se utiliza la orden java que lanza la Máquina Virtual 
Java (JVM, Java, Java Virtual Machine). La siguiente figura muestra el código fuente del 
clásico programa “¡ Hola, mundo ¡” 
 
 
Tipos de datos 
Java es un lenguaje fuertemente tipeado. Esto significa que cada variable debe tener un tipo 
declarado. Hay ocho tipos primitivos en Java y cada uno de ellos es una palabra reservada. 
Cuatro son tipos enteros, dos son tipos coma flotante; uno es el tipo carácter, char, utilizado 
para caracteres individuales (código ASCCI y Unicode) y un último dato es un tipo boolean para 
representar los tipos de dato lógicos. 
 
Variables, constantes y asignaciones 
21.2 Tipos primitivos* 
 
Tipo 
Requisito de 
almacenamiento 
 
Rango 
int 4 bytes −2.147.483.648 a 2.147.483.647 
short 2 bytes −32.768 a 32.767 
long 8 bytes −9.223.372.036.85
4.775.808 a 
9.223.372.036.854.
775.807 
byte 1 byte −128 a 127 
float 4 bytes 3.4 e−45 a 3.4 e+45 
(6-7 cifras decimales significativas) 
double 8 bytes 1.7 e−308 a 1.7 e+3085 
(15 cifras decimales 
significativas) 
char 2 bytes carácter Unicode 
\u0000 a \uFFFF 
 p.e. \n \u000a \r \u000d 
* Todos los tipos de datos tienen signo, excepto char que no tiene signo. 
 
Sintaxis 
Tipo variable1, variable2, ... 
 
Método main 
Nombre de clase 
(programa) 
Código 
public class PrimerPrograma 
{ 
public static void main(String[ ] args) 
{ 
// visualizar un mensaje de saludo 
System.out.println("¡ Hola, Mundo !"); 
} // fin del método main 
} // fin de la clase PrimerPrograma 
Salida 
¡ Hola, Mundo ! 
3 
 
Inicialización de variables 
Después de declarar una variable se debe inicializar explícitamente mediante una sentencia de 
asignación. 
 
Inicialización de una variable en una declaración 
Se puede combinar la declaración de una variable como una sentencia de asignación que 
proporciona el valor de una variable. 
 
 
Asignación múltiple; combinación de asignación con operadores aritméticos 
Se pueden realizar asignaciones múltiples con el operador = y variables del mismo tipo. El formato es : 
variable1 = variable2 = variable3 = ... = expresión; 
Ejemplo: 
int x, y, z; 
x = y = z = 25; 
Constantes 
En numerosos programas se necesitan constantes numéricas, pero es una buena idea usar nombres sim- 
bólicos para todos los valores, incluso para los que parecen evidentes. En Java, las constantes se identifi- 
can con la palabra clave final. Una variable etiquetada como final nunca puede modificar su valor ya que 
se ha convertido en una constante. 
 
Ejemplo 
final double VALOR_DESCUENTO = 14.50; 
final double IVA = 16; 
final double EURO = 166.67; 
Ejemplo 
public class MercadoValores 
{ 
// métodos 
... 
// constantes 
public static final double PESO = 0.55; 
public static final double EURO = 1.55; 
} 
Operadores y expresiones 
Sintaxis 
variable = expresión; 
Sintaxis 
Tipo variable_1 = expresión_1, variable_2 = expresión_2, ... ; 
Regla 
Utilizar constantes con nombres para hacer sus programas más fáciles de leer y 
mantener. 
4 
 
Como en la mayoría de los lenguajes, Java permite formar expresiones utilizando variables, constantes y 
operadores aritméticos. Estas expresiones se pueden utilizar en cualquier lugar. 
int x = 5; 
int y = x + 5; int z = x * y; 
Operadores aritméticos 
Cinco operadores se utilizan para operaciones básicas en Java: + − * / y % (módulo). El operador / repre- 
senta la división entera si ambos argumentos son enteros y división en coma flotante, en caso contrario. 
15/2 es igual a 7 
15%2 es igual a 1 
15.0/2 es igual a 7.5 
Operadores relacionales y lógicos 
Java tiene diferentes operaciones para realizar comparaciones entre variables, variables y literales, y 
otros tipos de información de un programa. Estos operadores se utilizan en expresiones que devuelven 
valores boolean de true o false 
Operador Significado Ejemplo 
 
== Igual x == 5 
!= No igual x != 5 
< Menor que x < 5 
> Mayor que x > 5 
<= Menor o igual que x <= 5 
>= Mayor o igual que x >= 5 
Operadores de manipulación de bits 
Cuando se trabaja con tipos enteros, existen operadores que pueden trabajar directamente con los bits 
que forman los enteros. Esto significa que se pueden utilizar técnicas de enmascaramiento para obtener 
bits individuales de un número. 
Los operadores de manipulación de bits son: 
& ("and") | ("or") ^ ("xor") ∼ ("not") 
estos operadores trabajan sobre patrones de bits. 
Precedencia de operadores 
En general, el orden de evaluación de primero a último es: 
• Operadores de incremento y decremento. 
• Operadores aritméticos. 
• Comparaciones. 
• Operadores lógicos. 
• Expresiones de asignación. 
Funciones matemáticas 
La clase Math contiene una colección de funciones matemáticas que se pueden necesitar, 
dependiendo del tipo de programación que desee realizar. Por ejemplo, para calcular xn 
Math.pow(x,n) 
Sin embargo, para calcular x2 puede ser más eficiente calcular x*x. 
Para extraer la raíz cuadrada de un número se puede utilizar el método sqrt: 
5 
 
double x = 9.0; 
double y = Math.sqrt(x); 
System.out.println("y = " + y); // se visualiza 3 
Ejemplo 
Calcular el valor de (−b + √(b2 − 4ac))/2a 
(−b + Math.sqrt(b*b −4*a*c))/(2*a) 
 
Métodos matemáticos. 
 Función Devuelve 
Math.sqrt(x) raíz cuadrada de x (x ≥ 0) 
Math.pow(x,y) xy 
Math.exp(x) ex 
Math.log(x) logaritmo natural (ln(x), x > 0) 
Math.round(x) entero más próximo a x (long) 
Math.ceil(x) entero más pequeño ≥ x (double) 
Math.floor(x) entero más próximo ≤ x (double) 
Math.abs(x) valor absoluto de x 
Math.max(x,y) valor mayor de x e y 
Math.min(x,y) valor menor de x e y 
Math.sin(x) seno de x (x en radianes) 
Math.cos(x) coseno de x (x en radianes) 
Math.tan(x) tangente de x (x en radianes) 
Math.asin(x) arco seno de x 
Math.acos(x) arco coseno de x 
Math.atan(x) arco tangente de x 
Math.atan2(y,x) arco cuya tangente es y/x 
Math.toRadianes(x) convierte x grados a radianes 
Math.toDegrees(x) convierte x radianes a grados 
 
Cadenas 
Las cadenas en Java son secuencias de caracteres Unicode. Java no tiene un tipo cadena incorporado.Sin embargo, existe en la biblioteca estándar de Java, una clase denominada String que está disponible 
cuando se programa en Java. Objetos de tipo String son cadenas de caracteres que se escriben dentro 
de dobles comillas. Cada cadena entrecomillada es una instancia de la clase String. 
String a = ""; // cadena vacía 
String saludo = "Hola"; 
Se puede declarar una variable de tipo cadena. 
String ciudad; 
ciudad = "Cazorla" 
Se pueden juntar declaración y asignación. 
String ciudad = "Cazorla" ; 
 
Se puede visualizar el objeto representado por la variable cadena, mediante 
System.out.println(ciudad); 
6 
 
Concatenación de cadenas 
Java, al igual que la mayoría de los lenguajes de programación, permite usar el operador + para unir 
(concatenar) dos cadenas. 
Ejemplo 
String nombre = "Sierra de Magina"; 
String frase; 
frase = nombre + " es muy bella"; 
System.out.println(frase); 
Se visualiza la frase 
Sierra de Magina es muy bella 
Las cadenas son inmutables 
En Java, un objeto de tipo String es un objeto inmutable lo que significa que los caracteres del objeto de 
String no se pueden cambiar. No existe ningún método que cambie el valor de un objeto, como "Palo- 
ma" y en caso de desear cambiarla deberá recurrir a concatenar la subcadena que desea reemplazar. 
String pueblo = "Lupiana"; pueblo = "Pueblo de " + pueblo: 
La sentencia de asignación ha cambiado la variable pueblo a Pueblo de Lupiana 
Subcadenas de la clase String 
El método substring extrae una subcadena de una cadena. Las sentencias 
String saludo = "Hola Mackoy"; String cad = saludo.substring(0,4); 
primera primera 
posición posición 
de copia de no copia 
 
crean la subcadena, de la posición 0, carácter más a la izquierda, a la posición 3 inclusive; es decir la 
cadena cad = "Hola". La figura 21.2 muestra los números de posición de la subcadena. 
H o l a M a c k o y 
posición 0 1 2 3 4 ... 
 Posiciones de la cadena. 
Longitud y comparación de cadenas 
El método length ( ) devuelve el número de caracteres de un objeto String como un valor de tipo int. 
Ejemplo 
String saludo = "hola Mortimer"; 
System.out.println("La longitud es " + saludo.length ( )); 
Después de la ejecución de las sentencias anteriores se visualiza La longitud es 13. 
El método length se utiliza para encontrar el número de caracteres de una cadena; se puede utilizar en 
cualquier parte que se pueda utilizar un valor de tipo int, como se ha hecho en el ejemplo anterior. 
7 
 
Otra operación muy usual cuando se trabaja con cadenas, es comparar dos cadenas para ver si son 
iguales o distintas. El método equals devuelve true si son iguales y false en caso contrario 
Métodos de la clase String 
La clase String tiene un número de métodos muy útiles que se pueden utilizar para aplicaciones de 
pro- cesamiento de cadenas. Además, existen cientos de clases en las bibliotecas estándar, con muchos 
más métodos. Por consiguiente, es esencial que se familiarice con la documentación API en línea que le 
per- mite examinar todas las clases y métodos de la biblioteca estándar. La documentación API es parte 
del JDK, está en formato HTML en la dirección 
http://java.sun.com/javase/reference/api.jsp 
se encuentra la especificación API 
Java Platform, Standards Edition 6 API Specification 
La clase String de Java contiene más de 50 métodos. La clase java.lang.String pertenece al paquete 
java.lang. A continuación, se muestra una lista de métodos significativos. 
 char charAt (posicion) 
Devuelve el carácter del objeto cadena que se encuentra en posicion. Las posiciones se cuentan 0, 1, 2, 
etcétera. 
Ejemplo 
String saludo = "¡Hola Mackoy!"; 
saludo.charAt(0) devuelve ¡ 
saludo.charAt(1) devuelve H 
 Códigos de caracteres ASCII y Unicode 
El código de caracteres por excelencia siempre ha sido el código ASCII (apéndice B). El conjunto de 
caracteres ASCII es una lista de todos los caracteres utilizados normalmente en los teclados de las 
computadoras (inglés, español, francés, catalán, etc.), más unos pocos caracteres especiales. En esta 
lista a cada carácter se le asigna un número de modo que los caracteres se pueden almacenar en 
función del correspondiente número o código. 
Java y muchos otros lenguajes de programación utilizan el conjunto de caracteres Unicode. El código de 
caracteres Unicode incluye el conjunto de caracteres ASCII más muchos otros caracteres utilizados en 
lenguajes con alfabetos diferentes al inglés, español, etcétera. 
Entrada y salida 
La clase Scanner definida en el paquete java.util es muy adecuada para entrada por consola. 
Salida a la consola 
Java utiliza paquetes y sentencias de importación (import). Los paquetes son biblioteca de 
clases Java. Las sentencias de importación ponen disponibles las clases del paquete en los 
programas. Existen dos formas de producir salidas a la pantalla: 1) System.out.println y 
2) System.out.printf. 
Sintaxis 
System.out.println(elemento_1+elemento_2+ ... + elemento_n) 
Salida formateada con printf 
8 
 
En la versión 5.0, Java incluyó un método denominado printf, inspirado en la función clásica de la 
biblioteca C, que se puede utilizar para producir la salida en un formato específico. La sentencia 
System out.printf tiene un primer argumento cadena, conocida como especificador de 
formato y el segundo argumento es el valor de salida en el formato establecido. 
System.out.printf("%8.3f"", x); 
imprime x con una anchura de campo de 8 caracteres y una precisión de 3 caracteres. 
Entrada 
En la versión 5.0, Java incluyó una clase para simplificar la entrada de datos por el teclado. Esta 
clase se llama Scanner y se conecta a System.in. Para leer la entrada de la consola, se debe 
construir primero un objeto de Scanner, pasando simple mente el objeto System.in al 
constructor Scanner 
Scanner entrada = new Scanner(System.in); 
A continuación, se pueden utilizar diferentes métodos de la clase Scanner para leer la 
entrada: nextInt o nextDouble leen el siguiente entero y valor de coma flotante. 
System.out.print("Introduzca cantidad: "); 
 int cantidad; 
cantidad = entrada.nextInt( ); 
System.out.print("Introduzca precio: "); 
double precio = entrada.nextDouble( ); 
Sintaxis de entrada de teclado utilizando Scanner 
• Hacer disponible la clase Scanner para utilizarla en su código. Incluir la siguiente línea 
al comienzo del archivo que contiene su programa. 
import java.util.Scanner; 
• Antes de introducir algo por teclado se debe crear un objeto de la clase Scanner. 
• Scanner nombreObjeto = new Scanner(System.in); 
nombreObjeto es cualquier identificador Java (no palabra reservada). 
Scanner teclado = new Scanner(System.in); 
• Los métodos nextInt, nextDouble y next leen un valor de tipo int, un valor de 
tipo double y una palabra, respectivamente. 
 
Flujo de control (sentencias de control) 
Bloques de sentencias 
Un bloque o una sentencia compuesta es cualquier número de sentencias simples que están 
delimitadas por una pareja de paréntesis, tipo llave. Los bloques definen el ámbito de sus 
variables. Los bloques pue- den estar anidados dentro de otro bloque. 
Sintaxis de bloque de sentencias 
{ 
sentencia1 
sentencia2 
... 
} 
Un ejemplo dentro del método main. 
public static void main(String [ ] args) 
9 
 
{ 
int m; 
... 
{ 
int n; 
... 
} // n está definido en este bloque 
} 
 
Sentencias condicionales 
Las sentencias condicionales en Java son: if, if-else y switch 
 
Sintaxis sentencia if-else 
if (condición) 
 sentencia1 
else 
 sentencia2 
+Sentencias if-else multicamino 
 
 
Sentencia switch 
Java tiene una sentencia switch idéntica a las sentencias switch de C y C++ 
Sintaxis 
switch (condicion) 
{ 
case 
etiqueta_1 
sentencia_
1 
... 
break; 
case etiqueta_2 
sentencia_2 
... 
break; 
. 
. 
. 
case etiqueta_n 
10 
 
sentencia_n 
... 
break; 
defaullt:sentencias 
... 
} 
Ejemplo 
int nivel 
... 
switch (nivel) 
{ 
 case 1: nivelProfesional = "Amateur"; 
 break; 
 case 2: nivelProfesional = "Intermedio"; 
 break; 
 case 3: nivelProfesional = "Profesional"; 
 break; 
 default: nivelProfesional = "Desconocido"; 
} 
Bucles (lazos) 
Los mecanismos de bucles o sentencias repetitivas o iterativas son similares a sus equivalentes de otros 
lenguajes de programación. Las tres sentencias Java de bucles son: while, do-while y for. Como ya 
se ha comentado anteriormente, a partir de Java 5 se incorpora una variante del bucle for, que es una 
extensión o mejora del bucle for, y denominada “for each”. 
Sentencia while 
La sentencia while, recordemos, ejecuta una sentencia (o un bloque de sentencias) mientras una 
condición es verdadera. 
Sintaxis 
1. while (condicion) 
sentencia 
2. while (condicion) 
 { 
 sentencia_1 
 sentencia_2 
 … 
 sentencia_n 
 } 
Sentencia do-while 
Sintaxis 
do 
{ 
 sentencia_1 
 sentencia_2 
 . 
 . 
 . 
 sentencia_n 
} while (condición) 
Sentencia for 
11 
 
Sintaxis 
for (inicialización; condición; actualización) 
sentencia; 
Ejemplo 
int siguiente, suma = 0; 
for (siguiente = 0; siguiente <= 10; siguiente++) 
{ 
 suma = suma + siguiente; 
 System.out.println("suma " + siguiente + " es " + suma); 
} 
 
Sentencias break y continue 
Si se desea alterar el flujo de control de los bucles for, while y do-while existen dos métodos. 
Estos dos métodos consisten en insertar una sentencia break o una sentencia continue. La sentencia 
break termina el bucle. La sentencia continue termina la iteración en curso del cuerpo del bucle. Las 
sentencias anteriores se pueden utilizar con cualquiera de las sentencias del bucle de Java. 
Sintaxis 
break; 
break etiqueta; 
continue; 
Ejemplo de break 
while (mes <= 100) 
{ 
 saldo = saldo + cuota; 
 double interes = saldo * tasaInteres/100; 
 saldo += interes; 
 if (saldo >= objetivo) break; 
 mes++; 
} 
Ejemplo de continue 
Scanner teclado = new Scanner(System.in); 
for (int contador = 1; contador <= 500; contador++) 
{ 
 System.out.print("Introduzca un número positivo"); int n; 
 n = teclado.nextInt( ); 
 if (n < 0) continue; 
 suma += n; // no se ejecuta si n < 0 
} 
Método exit( ) 
La sentencia break termina un bucle o la sentencia switch, pero no termina el programa; en caso de 
desear terminar el programa, Java tiene el método exit definido en la clase System (clase 
predefinida que se incorpora automáticamente) que termina un programa tan pronto se invoca. 
Ejemplo 
System.out.println("Introduzca un número negativo"); 
int numNegativo = teclado.nextInt( ); 
if (numNegativo >= 0) 
12 
 
{ 
System.out.println(numNegativo + "no es negativo"); 
System.out.println("programa abortado"); 
 System.exit(0); 
} 
Bucle "for each" 
A partir de Java 5.0 se ha introducido una construcción de bucles muy potente que permite al programa- 
dor iterar a través de cada elemento de un array o arreglo, así como otras colecciones de elementos sin 
tener que preocuparse por los valores de los índices del bucle. El bucle for each establece una variable 
dada a cada elemento de la colección y a continuación ejecuta las sentencias del bloque. 
Sintaxis mejorada del bucle for 
for (variable : colección) 
sentencia; 
La expresión colección debe ser un arreglo (array) o un objeto de una clase que implemente la interfaz 
Iterable, como lista de arreglos, ArrayList, etc. 
Ejemplo 
Visualizar cada elemento de un arreglo en una lista independiente. 
int [ ] m = new int[100]; // array 
... 
for (int elemento : m) 
System.out.println(elemento); 
Nota 
• El "for each" se puede interpretar como “por cada valor de ... hacer las siguientes acciones”. 
• La variable del bucle "for each" recorre los elementos de la colección o el arreglo (array) y no los 
valores de los índices. 
Arreglos (arrays) 
Un arreglo (array) es una estructura de datos que almacena una colección de valores del mismo tipo. En 
esencia, un arreglo es una colección de variables del mismo tipo. Se accede a través de un índice entero. 
double[ ] puntos; int [ ] a; 
En Java, la sentencia anterior solo declara la variable a o la variable puntos. Se debe utilizar el ope- 
rador new para crear el arreglo. 
int [ ] m = new int[50]; // arreglo de 50 elementos de tipo entero 
double [ ] puntos = new double[10]; // arreglo de 10 elementos 
Regla 
Las variables de tipo arreglo se pueden definir con dos formatos diferentes: 
1. int a [ ]; 
2. int [ ] a; 
Sintaxis 
Se declara un nombre de un arreglo y se crea un arreglo de un modo similar a la creación y proceso de 
dar nombre a objetos de clases. 
tipo_base [ ] nombre_arreglo = new tipo_base[longitud]; 
13 
 
Ejemplos 
char [ ] linea = new char[80]; 
double [ ] calificaciones = new double[400]; 
Alumno [ ] listas = new Alumno[120]; 
Los arreglos linea y calificaciones son de tipo char y double, mientras que listas es 
una arreglo de tipo Alumno (Alumno es una clase). 
La longitud de un arreglo (array) o número de elementos del mismo se calcula utilizando la sentencia 
arreglo.length. 
Regla 
• Una vez que se ha creado un arreglo no se puede cambiar su tamaño, aunque sí, lógicamente, 
sus elementos individuales. 
• Si se necesita expandir el tamaño de un arreglo mientras se ejecuta un programa, se debe utilizar 
una estructura de datos diferentes que en Java 5 y versiones posteriores se denomina lista de 
arreglos. 
 
Acceso a los elementos de un arreglo 
El acceso a los elementos de un arreglo se realiza de igual modo que en otros lenguajes de 
programación. 
arreglo[índice] 
Ejemplo 
nombres[3]; 
lista[5]; 
a[a.length − 1]; 
Arreglos y objetos 
En Java un arreglo (array) es considerado un objeto. Esto significa que se pueden 
considerar los tipos arreglos como clases. Sin embargo, aunque un arreglo de tipo 
double[ ] es una clase, la sintaxis para crear un objeto arreglo es un poco diferente. 
Para crear un arreglo, se utiliza la sintaxis: 
double [ ] m = new double[10]; 
 
Inicialización de arreglos y arreglos anónimos 
Java tiene un formato especial abreviado para crear un objeto arreglo e inicializar el mismo, sin 
recurrir a la llamada a new. La sintaxis es: 
int [ ] numPrimos = {1,3,5,7,11,13,17,19}; 
En Java, existe la posibilidad de crear objetos y clases anónimas, y en particular arreglos anónimos. 
Cuando una expresión como: 
new DemoClase("Paloma",19); 
no se asigna a una variable se conoce como un objeto anónimo. La expresión crea una referencia a un 
objeto de la clase. Se denomina anónimo debido a que el objeto no se asigna a una variable para ser 
referenciada por su nombre. 
Es el caso de un arreglo, se puede inicializar un arreglo anónimo con la siguiente declaración 
new int[ ] {1,3,5,7,9}; 
Esta expresión asigna un arreglo nuevo y lo rellena con los valores internos a las llaves. Cuenta el 
número de valores iniciales y establece el tamaño correspondiente del arreglo. 
 
14 
 
Arreglos (arrays) multidimensionales 
Los arreglos multidimensionales, como conoce el lector, utilizan más de un 
índice para acceder a los elementos de dicho arreglo. 
La declaración de un arreglo de dos dimensiones en Java es muy sencilla: 
char [ ][ ]pagina = new char[50][80]; 
o su equivalente, no abreviado: 
char [ ][ ]pagina; 
pagina = new char[50][80]; 
 
Sintaxis 
La declaración y creación de un arreglo multidimensional es: 
tipo_base [ ]..[ ] nombre_arreglo = new tipo_base[lon_1]..[lon_n]; 
donde lon_1, lon_2, .. son las longitudes de cada dimensión. 
Arreglos irregulares o triangulares 
En Java es relativamente fácil crear arreglos irregulares, de modo que filas diferentes 
puedan tener distintos números de columnas, al contrario de los arreglos regulares en 
los que cada fila tiene igual número de columnas.Así, por ejemplo, se pueden crear del 
siguiente modelo del binomio de Newton. 
Ejemplo 
Crear un arreglo regular num de 3 filas y 5 columnas. Su sintaxis es 
double [ ][ ] num = new double[3][5]; 
 
Listas de arreglos (ArrayList) 
Los arreglos son una construcción básica. En esta sección se explica la clase 
ArrayList que le permite reunir (coleccionar) objetos como si fueran tipos de 
datos básicos. La lista de arreglos ofrece dos ventajas: 
• La lista de arreglos puede crecer y reducirse a medida que se necesita. 
• La clase ArrayList proporciona métodos para muchas tareas comunes, 
como inserción y eliminar elementos. 
La clase ArrayList es una clase genérica: ArraaList<T> reúne objetos de tipo genérico T. 
Ejemplo 
1. Cantidad [ ] numeros = {5.0,4.5,7.5,14.0}; 
ArrayList<Cantidad> listaArticulos = new ArraList<Cantidad>( ); 
Creación, e inicialización de una lista de arreglos Cantidad. 
 
PROGRAMACIÓN ORIENTADA A OBJETOS 
Declaración de una clase 
Formato 
class NombreClase 
{ 
 lista_de_miembros 
} 
15 
 
NombreClase Nombre definido por el usuario que identifica 
a la clase (puede incluir letras, números y 
subrayados como cualquier identificador 
válido). 
Lista_de_miembros métodos y datos miembros de la clase. 
Definición de una clase llamada Punto que contiene las coordenadas x y y de un punto en un 
plano. 
class Punto 
{ 
private int x; // coordenada x 
private int y; // coordenada y 
 
public Punto(int x_,int y_) // constructor 
{ 
x = x_; 
y = y_; 
} 
public Punto( ) // constructor sin argumentos 
{ 
x = y = 0; 
} 
public int leerX( ) // devuelve el valor de x 
{ 
 return x; 
} 
public int leerY( ) // devuelve el valor de y 
{ 
 return y; 
} 
void fijarX(int valorX) // establece el valor de x 
{ 
 x = valorX; 
} 
void fijarY(int valorY) // establece el valor de y 
{ 
 y = valorY; 
} 
} 
Objetos 
Una vez que una clase ha sido definida, un programa puede contener una instancia de 
la clase, denominada un objeto de la clase. Un objeto se crea con el operador new 
aplicado a un constructor de la clase. Un objeto de la clase Punto inicializado a las 
coordenadas (2,1): 
new Punto(2,1); 
El operador new crea el objeto y devuelve una referencia al objeto creado. Esta 
referencia se asigna a una variable del tipo de la clase. El objeto permanecerá vivo 
siempre que esté referenciado por una variable de la clase que es instancia. 
Formato para definir una referencia 
NombreClase varReferencia; 
Formato para crear un objeto 
16 
 
varReferencia = new NombreClase(argmntos_constructor); 
Toda clase tiene uno o más métodos, denominados constructores. Para inicializar el objeto cuando es 
creado, tienen el mismo nombre que el de la clase, no tienen tipo de retorno y pueden estar sobrecarga- 
dos. En la clase Edad del ejemplo 22.2 el constructor no tiene argumentos, se puede crear un objeto: 
Edad f = new Edad( ); 
El operador de acceso a un miembro (.) selecciona un miembro individual de un objeto de la clase. Por 
ejemplo: 
Punto p; 
p = new Punto( ); P.fijarX (100); 
System.out.println (" Coordenada x es " + P.leerX( ) ); 
Visibilidad de los miembros de la clase 
Un principio fundamental en programación orientada a objetos es la ocultación de la información, 
que significa que no se puede acceder a determinados datos del interior de una clase por métodos 
externos a la clase. El mecanismo principal para ocultar datos es ponerlos en una clase y hacerlos 
privados. A los datos o métodos privados solo se puede acceder desde dentro de la clase. Por el 
contrario, los datos o métodos públicos son accesibles desde el exterior de la clase. 
Para controlar el acceso a los miembros de la clase se utilizan tres diferentes especificadores 
de acceso: public, private y protected. Cada miembro de la clase está precedido del 
especificador de acceso que le corresponde. 
Formato y secciones pública y privada de una clase 
class NombreClase 
{ 
private declaración miembro privado; // miembros privados 
protected declaración miembro protegido; // miembros protegidos 
declaración miembro público; // miembros públicos 
} 
No accesible desde el exterior de la clase (acceso denegado) 
 
 
Accesible desde el exterior de la clase 
 
 
Métodos de una clase 
Los métodos en Java siempre son miembros de clases, no hay métodos o funciones fuera 
de las clases. La implementación de los métodos se incluye dentro del cuerpo de la 
clase. La figura siguiente muestra la declaración completa de una clase. 
métodos 
métodos 
 
 
 
17 
 
 
Implementación de las clases 
El código fuente de la definición de una clase, con todos sus métodos y variables instancia se 
almacenan en archivos de texto con extensión.java y el nombre de la clase, por ejemplo 
Racional.java. Normalmente, se sitúa la implementación de cada clase en un archivo independiente. 
Las clases pueden proceder de diferentes fuentes: 
• Se pueden declarar e implementar sus propias clases. El código fuente siempre estará 
disponible; pueden estar organizadas por paquetes. 
• Se pueden utilizar clases que hayan sido escritas por otras personas o incluso que se han comprado. 
En este caso, se puede disponer del código fuente o estar limitado a utilizar el bytecode de la 
implementación. Será necesario disponer del paquete donde se encuentran. 
• Se puede utilizar clases de los diversos packages que acompañan a su software de desarrollo Java. 
 
Clases públicas 
La declaración de una clase puede incluir el modificador public como prefijo en la cabecera 
de la clase. El especificador public es el único que se puede especificar en la cabecera de una 
clase. Por ejemplo: 
public class Examen 
{ 
 // miembros de la clase 
} 
 Paquetes 
Los paquetes es la forma que tiene Java de organizar los archivos con las clases necesarias para 
construir las aplicaciones. Java incorpora varios paquetes, por ejemplo, java.lang, java.io, o 
java.util con las clases básicas para construir programas: System, String, Integer, 
Scanner ... 
¿Cómo se puede definir un paquete?, la sentencia package se utiliza para este cometido. En primer 
lugar, se debe incluir la sentencia package como primera línea del archivo fuente de cada una de las 
clases del paquete. Por ejemplo, si las clases Lapiz, Boligrafo y Folio se van a organizar 
formando el paquete escritorio, el esquema a seguir es el siguiente: 
 
// archivo fuente Lapiz.java 
package escritorio; 
public class Lapiz 
{ 
 // miembros de clase Lapiz 
} 
// archivo fuente Boligrafo.java 
 
} 
public Producto(int n,char [ ] nom,char [ ] des,double p,int nu) { } 
public void verProducto ( ) {...} 
public double obtenerPrecio ( ){...} 
public void actualizarProd(int b) {...} 
métodos 
nombre de la clase 
acceso para almacenamiento de datos 
declaraciones para almacenamiento 
de datos 
class Producto 
{ 
private int numProd; 
private String nomProd; 
private String descripProd; 
private double precioProd; 
private int numUnidades; 
public Producto ( ) {...} 
18 
 
package escritorio; public class Boligrafo 
{ 
// miembros de clase Boligrafo 
} 
// archivo fuente Folio.java 
package escritorio; public class Folio 
{ 
// miembros de clase Folio 
} 
Formato 
package NombrePaquete; 
 
Import 
Las clases que se encuentran en los paquetes se identifican utilizando el nombre del paquete, el selector 
punto (.) y a continuación el nombre de la clase. Por ejemplo, la declaración de la clase Arte con 
atributos de la clase PrintStream (paquete java.io) y Lapiz (paquete escritorio): 
public class Arte 
{ 
private java.io.PrintStream salida; 
private escritorio.Lapiz p; 
} 
La sentencia import facilita la selección de una clase, permite escribir únicamente su nombre, 
evitando el nombre del paquete. La declaración anterior se puede abreviar: 
import java.io.PrintStream; 
import escritorio.*; 
public class Arte 
{ 
private PrintStreamsalida; 
private Lapiz p; 
} 
La sentencia import debe aparecer antes de la declaración de las clases, a continuación de la sentencia 
package. Tiene dos formatos: 
Formato 
import identificadorpaquete.nombreClase; 
import identificadorpaquete.*; 
 
Constructores 
Un constructor es un método que se ejecuta automáticamente cuando se crea un objeto de una 
clase. Sirve para inicializar los miembros de la clase. 
El constructor tiene el mismo nombre que clase. Cuando se define no se puede especificar un valor 
de retorno, nunca devuelve un valor. Sin embargo, puede tomar cualquier número de argumentos 
public class Rectangulo 
{ 
private int izdo; 
19 
 
private int superior; 
private int dcha; 
private int inferior; 
// constructor 
public Rectangulo(int iz, int sr, int d, int inf) 
{ 
izdo = iz; 
superior = sr; 
dcha = d; 
inferior = inf; 
} 
// definiciones de otros métodos miembro 
} 
 Al crear un objeto se pasan los valores de los argumentos al constructor, con la misma sintaxis 
que la de llamada a un método. Por ejemplo: 
Rectangulo Rect = new Rectangulo(25, 25, 75, 75); 
Constructor por defecto 
Un constructor que no tiene parámetros se llama constructor por defecto. Un constructor 
por defecto normalmente inicializa los miembros dato de la clase con valores en forma 
predeterminada. 
Constructores sobrecargados 
Al igual que se puede sobrecargar un método de una clase, también se puede 
sobrecargar el constructor de una clase. De hecho los constructores sobrecargados son 
bastante frecuentes, proporcionan diferentes alternativas de inicializar objetos. 
Clase Object 
Object es la superclase base de todas las clases de Java; toda clase definida en Java hereda de la clase 
Object y en consecuencia toda variable referencia a una clase se convierte, automáticamente, al 
tipo Object. Por ejemplo: 
Object g; 
String cd = new String("Barranco la Parra"); 
Integer y = new Integer(72); // objeto inicializado a 72 
 
g = cd; // g referencia al mismo objeto que cd 
g = y; // g ahora referencia a un objeto Integer 
La clase Object tiene dos métodos importantes: equals( ) y toString( ). Generalmente, se rede- finen 
en las clases para especializarlos. 
HERENCIA Y POLIMORFISMO 
Clases derivadas 
La herencia o relación es-un, es la relación que existe entre dos clases, una es la clase denominada 
derivada que se crea a partir de otra ya existente, denomina- da clase base. La nueva clase hereda de 
la clase ya existente. Por ejemplo, si existe una clase Figura y se desea crear una clase Triángulo, esta 
clase puede derivarse de Figura ya que tendrá en común con ella un estado y un comportamiento, 
aun- que luego tendrá sus características propias. Triángulo es-un tipo de Figura. Otro ejemplo, 
puede ser Programador que es-un tipo de Empleado. 
La declaración de derivación de clases debe incluir la palabra reservada extends y a 
continuación el nombre de la clase base de la que se deriva. El formato de la declaración es: 
 
class nombre_clase extends nombre_clase_base 
 
20 
 
Declaración de las clases Programador y Triangulo 
 
1. class Programador extends Empleado 
{ 
public miembro público 
// miembros públicos 
private miembro privado 
// miembros privados 
} 
2. class Triangulo extends Figura 
{ 
public 
// miembros públicos 
protected 
// miembros protegidos 
… 
} 
Clase derivada Director y clase base Empleado 
 
class Director extends Empleado 
{ 
public nuevo método 
... 
private nuevo miembro 
... 
} 
 
Declaración de una clase derivada 
La sintaxis para la declaración de una clase derivada es la siguiente: 
} 
 
Sobrecarga de métodos en la clase derivada 
La sobrecarga de métodos se produce cuando al definir un método en una clase tiene el mismo 
nombre que otro de la misma clase pero distinto número o tipo de argumentos. En la sobrecarga no 
interviene el tipo de retorno. La siguiente clase tiene métodos sobrecargados: 
class Ventana 
{ 
 public void copiar(Ventana w) {...} 
 public void copiar(String p, int x, int y) {...} 
] 
Herencia pública 
En una clase existen secciones públicas, privadas, protegidas y la visibilidad por defecto que se 
denomina amigable. Java considera que la herencia es siempre pública. Herencia pública significa que 
una clase derivada tiene acceso a los elementos públicos y protegidos de su clase base, los elementos 
con visibilidad amigable son accesibles desde cualquier clase del mismo paquete, no son visibles en 
clases derivadas de otros paquetes. 
21 
 
Una clase derivada no puede acceder a variables y métodos privados de su clase base. Una clase 
base utiliza elementos protegidos para de esa manera ocultar los detalles de la clase respecto a clases 
no derivadas de otros paquetes (véase tabla 23.1). 
Las clases para ser visibles desde otro paquete se declara con el modificador public, en caso 
contra- rio la clase está restringida al paquete donde se declara. 
 
Constructores en herencia 
Un objeto de una clase derivada consta de la porción correspondiente de su clase base y de los 
miembros propios. En consecuencia, al construir un objeto de clase derivada primero se construye la 
parte de su clase base, llamando a su constructor, y a continuación se inicializan los miembros propios 
de la clase derivada. 
 
Polimorfismo 
En POO, el polimorfismo permite que diferentes objetos respondan de modo distinto al mismo 
mensaje. El polimorfismo adquiere su máxima potencia cuando se utiliza en unión de herencia. 
El polimorfismo se establece con la ligadura dinámica de métodos. Con la ligadura dinámica no 
es preciso decidir el tipo de objeto hasta el momento de la ejecución 
El polimorfismo se puede representar con un array de elementos que se refieren a objetos de diferentes 
tipos (clases). 
Uso del polimorfismo 
La forma de usar el polimorfismo es a través de referencias a la clase base. Si, por ejemplo, se dispone 
de una colección de objetos Archivo en un arreglo, este almacena referencias a objetos Archivo 
que apuntan a cualquier tipo de archivo. Cuando se actúa sobre estos archivos, simplemente basta 
con recorrer el arreglo e invocar al método apropiado mediante la referencia a la instancia. 
Naturalmente, para realizar esta tarea los métodos de la clase base deben ser declarados como 
abstractos en la clase Archivo, que es la clase base, y redefinirse en las clases derivadas (ASCII, 
Grafico…). 
Para poder utilizar polimorfismo en Java se deben seguir estas reglas: 
1. Crear una jerarquía de clases con las operaciones importantes definidas por los métodos miembro 
declarados como abstractos en la clase base. 
2. Las implementaciones específicas de los métodos abstractos se deben hacer en las clases derivadas. 
Cada clase derivada puede tener su propia versión del método. Por ejemplo, la implementación del 
método annadir ( ) varía de un tipo de archivo a otro. 
3. Las instancias de estas clases se manejan a través de una referencia a la clase base. Este mecanismo 
es la ligadura dinámica y es la esencia de polimorfismo en Java. 
Realmente no es necesario declarar los métodos en la clase base abstractos si después se redefinen 
(misma signatura) en la clase derivada

Continuar navegando

Otros materiales