Академический Документы
Профессиональный Документы
Культура Документы
Lenguaje de Programación
Un lenguaje de programación es una técnica estándar de comunicación que permite expresar
las instrucciones que han de ser ejecutadas en una computadora. Consiste en un conjunto
de reglas sintácticas y semánticas que definen un programa informático.
Software
• Software es el conjunto de programas que puede ejecutar el hardware para la
realización de las tareas de computación a las que se destina.
• Se trata del conjunto de instrucciones que permite la utilización del computador. El
software es la parte intangible de la computadora, es decir: programas, aplicaciones
etc.
Formas
El software adopta varias formas en distintos momentos de su ciclo de vida:
· Código fuente: Escrito por programadores. Contiene el conjunto de instrucciones,
inteligibles por el ser humano, destinadas a la computadora.
· Código objeto: Resultado del uso de un compilador sobre el código fuente. El código
objeto no es directamente inteligible por el ser humano, pero tampoco es directamente
entendible por la computadora. Se trata de una representación intermedia del código fuente.
En Java se llama bytecode.
· Código ejecutable: Resultado de linkeditar uno o varios fragmentos de código objeto.
Constituye un archivo binario con un formato tal que el sistema operativo es capaz de
cargarlo en la memoria de un computador, y proceder a su ejecución. El código ejecutable es
directamente inteligible por la computadora.
Licencia
Una Licencia de Software es la autorización o permiso concedida por el autor para utilizar su
obra de una forma convenida habiendo marcado unos límites y derechos respecto a su uso.
La Licencia puede, restringir el territorio de aplicación del programa, su plazo de duración o
cualquier otra cláusula que el autor decida incluir.
El autor del software puede autorizar o limitar el uso, modificación y/o redistribución de su
obra adscribiéndose a un determinado tipo de licencia.
El software propietario (también llamado software no libre, software privativo, software
privado, software con propietario o software de propiedad) se refiere a cualquier programa
informático en el que los usuarios tienen limitadas las posibilidades de usarlo, modificarlo o
redistribuirlo (con o sin modificaciones), o cuyo código fuente no está disponible o el acceso
a éste se encuentra restringido.
Freeware
Es un software de computadora que se distribuye sin cargo. A veces se incluye el código
fuente, pero no es lo usual.
El freeware suele incluir una licencia de uso, que permite su redistribución pero con algunas
restricciones, como no modificar la aplicación en sí, ni venderla.
Shareware
Es una modalidad de distribución de software (juegos o programas) para que el mismo pueda
ser evaluado de forma gratuita, pero generalmente por un tiempo especificado, aunque
también las limitaciones pueden estar en algunas de las formas de uso o las capacidades
finales. Para adquirir una licencia de software que permite el uso del software de manera
completa se requiere de un pago
Software Libre
Software libre es el aquel que, una vez obtenido, puede ser usado, copiado, estudiado,
modificado y redistribuido libremente.
El software libre suele estar disponible gratuitamente en Internet, o a precio de la distribución
a través de otros medios; sin embargo no es obligatorio que sea así y, aunque conserve su
carácter de libre, puede ser vendido comercialmente.
Programación Estructurada
· La programación estructurada es una teoría de programación que consiste en construir
programas de fácil comprensión.
· La programación estructurada es especialmente útil, cuando se necesitan realizar
correcciones o modificaciones después de haber concluido un programa o aplicación.
· La programación estructurada se basa en una metodología de desarrollo de programas
llamada refinamiento sucesivo.
HISTORIA DE JAVA
Java fue diseñado en 1990 por James Gosling, de Sun Microsystems, como software para
dispositivos electrónicos de consumo.
Curiosamente, todo este lenguaje fue diseñado antes de que diese comienzo la era World
Wide Web, puesto que fue diseñado para dispositivos electrónicos como calculadoras,
microondas y la televisión interactiva.
En los primeros años de la década de los noventa, Sun Microsystems decidió intentar
introducirse en el mercado de la electrónica de consumo y desarrollar programas para
pequeños dispositivos electrónicos. Tras unos comienzos dudosos, Sun decidió crear una
filial, denominada FirstPerson Inc., para dar margen de maniobra al equipo responsable del
proyecto.
Inicialmente Java se llamó Oak (roble en inglés), aunque tuvo que cambiar de denominación,
debido a que dicho nombre ya estaba registrado por otra empresa. Se dice este nombre se le
puso debido a la existencia de tal árbol en los alrededores del lugar de trabajo de los
promotores del lenguaje.
Tres de las principales razones que llevaron a crear Java son:
1. Creciente necesidad de interfaces mucho más cómodas e intuitivas que los
sistemas de ventanas que proliferaban hasta el momento.
2. Fiabilidad del código y facilidad de desarrollo. Gosling observó que muchas de las
características que ofrecían C o C++ aumentaban de forma alarmante el gran coste de
pruebas y depuración. Por ello en los sus ratos libres creó un lenguaje de
programación donde intentaba solucionar los fallos que encontraba en C++.
3. Enorme diversidad de controladores electrónicos. Los dispositivos electrónicos se
controlan mediante la utilización de microprocesadores de bajo precio y reducidas
prestaciones, que varían cada poco tiempo y que utilizan diversos conjuntos de
instrucciones. Java permite escribir un código común para todos los dispositivos.
Para poder presentarlo en sociedad se tuvo que modificar el nombre de este lenguaje de
programación y se tuvo que realizar una serie de modificaciones de diseño para poderlo
adaptar al propósito mencionado. Así Java fue presentado en sociedad en agosto de 1995.
Algunas de las razones que llevaron a Bill Joy a pensar que Java podría llegar a ser rentable
son:
● Java es un lenguaje orientado a objetos: Esto es lo que facilita abordar la resolución de
cualquier tipo de problema.
● Es un lenguaje sencillo, aunque sin duda potente.
● La ejecución del código Java es segura y fiable: Los programas no acceden directamente a
la memoria del computador, siendo imposible que un programa escrito en Java pueda
acceder a los recursos del computador sin que esta operación le sea permitida de
forma explícita. De este modo, los datos del usuario quedan a salvo de la existencia de
virus escritos en Java. La ejecución segura y controlada del código Java es una
característica única, que no puede encontrarse en ninguna otra tecnología.
● Es totalmente multiplataforma: Es un lenguaje sencillo, por lo que el entorno necesario para
su ejecución es de pequeño tamaño y puede adaptarse incluso al interior de un navegador.
El problema fundamental de Java es que utiliza una representación intermedia denominada
código de byte para solventar los problemas de portabilidad. Los códigos de byte
posteriormente se tendrán que transformar en código máquina en cada máquina en que son
utilizados, lo que enlentece considerablemente el proceso de ejecución.
CARACTERÍSTICAS DE JAVA
A continuación haremos una pequeña redacción de las características del lenguaje, que nos
ayudarán a ver para que tipo de problemas está pensado Java:
Simple
Es un lenguaje sencillo de aprender. Su sintaxis es la de C++ “simplificada”. Los creadores
de Java partieron de la sintaxis de C++ y trataron de eliminar de este todo lo que resultase
complicado o fuente de errores en este lenguaje. La herencia múltiple, la aritmética de
punteros, por la gestión de memoria dinámica (que en Java se elimina de modo transparente
para el programador gracias al recogedor basura) son ejemplos de "tareas complicadas" de
C++ y en Java se han eliminado poco simplificado.
Orientado a Objetos
Posiblemente sea el lenguaje más orientado a objetos de todos los existentes; en Java todo,
a excepción de los tipos fundamentales de variables (int, char, long...) es un objeto.
Distribuido
Java está muy orientado al trabajo en red, soportando protocolos como TCP/IP, UDP, HTTP
y FTP. Por otro lado el uso de estos protocolos es bastante sencillo comparándolo con otros
lenguajes que los soportan.
Robusto
El compilador Java detecta muchos errores que otros compiladores solo detectarían en
tiempo de ejecución o incluso nunca. Respecto a la gestión de memoria, Java libera al
programador del compromiso de tener que controlar especialmente la asignación que de ésta
hace a sus necesidades específicas. Este lenguaje posee una gestión avanzada de memoria
llamada gestión de basura, y un manejo de excepciones orientado a objetos integrados.
Estos elementos realizarán muchas tareas antes tediosas a la vez que obligadas para el
programador
Seguro
Sobre todo un tipo de desarrollo: los Applet. Estos son programas diseñados para ser
ejecutados en una página web. Java garantiza que ningún Applet puede escribir o leer de
nuestro disco o mandar información del usuario que accede a la página a través de la red
(como, por ejemplo, la dirección de correo electrónico). En general no permite realizar
cualquier acción que pudiera dañar la máquina o violar la intimidad del que visita la página
web.
Portable
En Java no hay aspectos dependientes de la implementación, todas las implementaciones de
Java siguen los mismos estándares en cuanto a tamaño y almacenamiento de los datos.
Arquitectura Neutral
El código generado por el compilador Java es independiente de la arquitectura: podría
ejecutarse en un entorno UNIX, Mac o Windows. El motivo de esto es que el que realmente
ejecuta el código generado por el compilador no es el procesador del ordenador
directamente, sino que este se ejecuta mediante una máquina virtual. Esto permite que los
Applets de una web pueda ejecutarlos cualquier máquina que se conecte a ella
independientemente de que sistema operativo emplee (siempre y cuando el ordenador en
cuestión tenga instalada una máquina virtual de Java).
Rendimiento medio
Actualmente la velocidad de procesado del código Java es semejante a la de C++, hay
ciertos pruebas estándares de comparación (benchmarks) en las que Java gana a C++ y
viceversa.
Esto es así gracias al uso de compiladores just in time, compiladores que traduce los
bytecodes de Java en código para una determinada CPU, que no precisa de la máquina
virtual para ser ejecutado, y guardan el resultado de dicha conversión, volviéndolo a llamar
en caso de volverlo a necesitar, con lo que se evita la sobrecarga de trabajo asociada a la
interpretación del bytecode.
No obstante por norma general el programa Java consume bastante más memoria que el
programa C++, ya que no sólo ha de cargar en memoria los recursos necesario para la
ejecución del programa, sino que además debe simular un sistema operativo y hardware
virtuales (la máquina virtual). Por otro lado la programación gráfica empleando las librerías
Swing es más lenta que el uso de componentes nativos en las interfaces de usuario.
En general en Java se ha sacrificado el rendimiento para facilitar la programación y sobre
todo para conseguir la característica de neutralidad arquitectural, si bien es cierto que los
avances en las máquinas virtuales remedian cada vez más estas decisiones de diseño.
Applets
Una applet (miniaplicación) es un pequeño programa en Java transferido dinámicamente a
través de Internet. Presentan un comportamiento inteligente, pudiendo reaccionar a la
entrada de un usuario y cambiar de forma dinámica. Sin embargo, la verdadera novedad es
el gran potencial que Java proporciona en este aspecto, haciendo posible que los
programadores ejerzan un control sobre los programas ejecutables de Java que no es
posible encontrar en otros lenguajes.
Multithread
Soporta de modo nativo los threads, sin necesidad del uso de librerías específicas (como es
el caso de C++). Esto le permite además que cada Thread de una aplicación java pueda
correr en una CPU distinta, si la aplicación se ejecuta en una máquina que posee varias
CPU. Las aplicaciones de C++ no son capaces de distribuir, de modo transparente para el
programador, la carga entre varias CPU.
Por ejemplo, cuando el navegador encuentra una página web con un applet, pone en
marcha la JVM y proporciona la información necesaria. El cargador de clases dentro de la
JVM ve que clases necesita el applet. Dentro del proceso de carga, las clases se examinan
mediante un verificador que asegura que las clases contienen código válido y no malicioso.
Finalmente, se ejecuta el applet.
El lenguaje Java no está diseñado solamente para crear applets que corren en la ventana
del navegador. Java es un lenguaje de propósito general, de alto nivel, y orientado a objetos.
Java es un lenguaje de programación orientado a objetos puro, en el sentido de que no hay
ninguna variable, función o constante que no esté dentro de una clase. Se accede a los
miembros dato y las funciones miembro a través de los objetos y de las clases. Por razones
de eficiencia, se han conservado los tipos básicos de datos, int, float, double, char, etc,
similares a los del lenguaje C/C++.
Los tipos de programas más comunes que se pueden hacer con Java son los applets (se
ejecutan en el navegador de la máquina cliente) y las aplicaciones (programas que se
ejecutan directamente en la JVM). Otro tipo especial de programa se denomina servlet que
es similar a los applets pero se ejecutan en los servidores Java.
La API de Java es muy rica, está formada un conjunto de paquetes de clases que le
proporcionan una gran funcionalidad. El núcleo de la API viene con cada una de las
implementaciones de la JVM
Lo esencial: tipos de datos, clases y objetos, arrays, cadenas de caracteres (strings),
subprocesos (threads), entrada/salida, propiedades del sistema, etc.
Java proporciona también extensiones, por ejemplo define un API para 3D, para los
servidores, telefonía, reconocimiento de voz, etc.
Esto mismo se aplica a los objetos de software, se puede tener muchos objetos del mismo
tipo y mismas características.
Definición teórica: La clase es un modelo o prototipo que define las variables y métodos
comunes a todos los objetos de cierta clase. También se puede decir que una clase es
una plantilla genérica para un conjunto de objetos de similares características.
Por otro lado, una instancia de una clase es otra forma de llamar a un objeto. En realidad
no existe diferencia entre un objeto y una instancia. Sólo que el objeto es un término más
general, pero los objetos y las instancias son ambas representación de una clase.
Definición Teórica: Una instancia es un objeto de una clase en particular.
INSTALACIÓN DE JAVA
Descarga
Para poder hacer este curso debemos instalar el compilador de Java y la máquina virtual de
Java. Estas herramientas las podemos descargar de:
Java SE Development Kit (JDK).
Una vez que tenemos el JDK (Java Development Kit) procedemos a instalarlo:
La versión a instalar conviene que sea la última (en este momento disponemos la versión 6)
Aceptamos los términos:
INSTALACIÓN DE NETBEANS
PASOS PARA CREAR UN PROGRAMA CON ECLIPSE
Más adelante veremos los archivos que se crean en un proyecto, ahora nos dedicaremos a
codificar nuestro primer programa. En la ventana de edición ya tenemos el esqueleto de una
clase de Java que el entorno Netbeans nos creó automáticamente.
public class Clase1 {
}
Todo programa en Java debe definir la función main. Esta función la debemos codificar
dentro de la clase: "Clase1".
}
PRIMER PROGRAMA EN JAVA
El Eclipse es un entorno de trabajo profesional, por lo que en un principio puede parecer
complejo el desarrollo de nuestros primeros programas.
Todo programa en Eclipse requiere la creación de un "Proyecto", para esto debemos
seleccionar desde el menú de opciones:
Ahora aparece el diálogo donde debemos definir el nombre de nuestro proyecto:
En el campo de texto "Project Name" ingresamos como nombre: Proyecto1 y dejamos todas
las otras opciones del diálogo con los valores por defecto. Presionamos el botón "Finish".
Ahora en la ventana de "Package Explorer" aparece el proyecto que acabamos de crear:
Como segundo paso veremos que todo programa en Java requiere como mínimo una clase.
Para crear una clase debemos seleccionar desde el menú de opciones:
En el diálogo que aparece debemos definir el nombre de la clase (en nuestro primer ejemplo
la llamaremos Clase1 (con mayúscula la letra C), luego veremos que es importante definir un
nombre que represente al objetivo de la misma), los otros datos del diálogo los dejamos con
los valores por defecto:
Luego de presionar el botón "Finish" tenemos el archivo donde podemos codificar nuestro
primer programa:
Más adelante veremos los archivos que se crean en un proyecto, ahora nos dedicaremos a
codificar nuestro primer programa. En la ventana de edición ya tenemos el esqueleto de una
clase de Java que el entorno Eclipse nos creó automáticamente.
public class Clase1 {
}
Todo programa en Java debe definir la función main. Esta función la debemos codificar
dentro de la clase: "Clase1".
Procedemos a tipear lo siguiente:
}
Es decir tenemos codificado en el entorno del Eclipse nuestro primer programa:
Como último paso debemos compilar y ejecutar el programa, esto lo podemos hacer desde el
menú de opciones:
O desde la barra de íconos del Eclipse:
Este programa mostrará aspectos básicos de la programación en Java como son la creación
de una clase, el método main, y la salida por consola.
/* esto es un comentario
de mas de una línea*/
Los paréntesis luego de la palabra main indican la declaración de un método. Una clase
puede contener uno o más métodos. Por otra parte una aplicación Java debería de contener
un único método denominado main y su declaración se realiza como se indica en la línea 3.
Al igual que en la implementación de una clase el carácter utilizado para indicar el comienzo
de la misma es “{”
Las líneas 5 y 6:
Con el carácter “}” se indica el fin de la implementación de la clase y del método.
Ejercicio 5
Escriba y pruebe el programa Hola Mundo
Ejercicio 6
Modifique el ejercicio anterior usando el salto de línea, para mostrar el nombre del alumno en
una línea y el apellido en otra.
Recuerde:
1. Use System.out.println() para escribir un texto en pantalla
2. Todo método de Java lleva paréntesis
3. Toda sentencia termina en punto y coma
4. \n hace que el cursor salte al siguiente renglón.
5. Java es CASE SENSITIVE. Distingue mayúsculas de minúsculas.
Solución al Ejercicio 7:
public class Guia_Java {
public static void main(String args []){
System.out.println("Juan \nPérez");
}
}
Ejercicio 8
Modifique el programa anterior para que escriba el nombre de 2 personas en dos líneas
diferentes de la pantalla.
Los caracteres que pueden aparecer en un programa Java para formar las constantes,
variables, expresiones, etc., son:
Las letras mayúsculas y minúsculas de la A(a) a la Z(z) de los alfabetos internacionales (la
ñ y Ñ son válidas)
Dígitos (0, 1, 2, ...)
Los caracteres ' _ ' '$' y cualquier carácter unicode por encima del 00C0.
Los caracteres especiales y signos de puntuación siguientes:
+-*/=%&#!?^“‘~\|<>()[]{}:;.,
Por ejemplo, podemos escribir el método main sin utilizar espacios en blanco, de la forma:
Secuencias de escape: Una secuencia de escape está formada por una barra inversa
seguida de una letra o de una combinación de dígitos.
Una secuencia de escape siempre representa un solo carácter aunque se escriba con dos o
más caracteres.
Se utilizan para realizar acciones como salto de línea o para usar caracteres no imprimibles.
Los identificadores son los nombres que el programador asigna a variables, constantes,
clases, métodos, paquetes, etc. de un programa.
$cantidad PrecioVentaPublico
Ejemplo de identificadores no válidos:
4num z# “Edad”
COMENTARIOS EN JAVA
Comienzan con una doble barra ( // ) y se pueden extender hasta el final de la línea.
No tienen carácter de terminación.
/**
*
* @author Roberto Erukh
* @version 1.0
*
*/
Si queremos indicar que una constante es flotante: ej: 2.3 hemos de escribir: 2.3F, sino por
defecto será double.
Caracteres
En Java hay un único tipo de carácter: char. Cada carácter en Java esta codificado en un
formato denominado Unicode, en este formato cada carácter ocupa dos bytes, frente a la
codificación en ASCII, dónde cada carácter ocupaba un solo byte.
Unicode es una extensión de ASCII, ya que éste último al emplear un byte por carácter sólo
daba acogida a 256 símbolos distintos. Para poder aceptar todos los alfabetos (chino,
japonés, ruso...) y una mayor cantidad de símbolos se creó el formato Unicode.
En Java al igual que en C se distingue la representación de los datos char frente a las
cadenas de caracteres. Los char van entre comillas simples: char ch = ‘a’, mientras que las
cadenas de caracteres usan comillas dobles.
Ejemplo de declaración de variables de tipo carácter:
char car;
char letra1 = 'z';
char letra = '\u0061'; //código unicode del carácter ‘a’
Boolean (Lógicos)
Se trata de un tipo de dato que solo puede tomar dos valores: “true” y “false”. Es un tipo de
dato bastante útil a la hora de realizar chequeos sobre condiciones. En C no hay un dato
equivalente y para suplir su ausencia muchas veces se emplean enteros con valor 1 si “true”
y 0 si “false”. Otros lenguajes como Pascal sí tiene este tipo de dato.
Ejemplo de declaración de variables lógicas:
boolean primero;
boolean par = false;
DEFINICIÓN DE VARIABLES Y CONSTANTES
Una variable es una posición de memoria que se referencia con un identificador, conocido
como nombre de la variable, donde se almacena el valor de un dato que puede cambiar
durante la ejecución del programa.
Toda variable tiene un ámbito. Esto es la parte del código en la que una variable se puede
utilizar. De hecho las variables tienen un ciclo de vida:
(1) En la declaración se reserva el espacio necesario para que se puedan comenzar a utilizar
(digamos que se avisa de su futura existencia)
(2) Se la asigna su primer valor (la variable nace)
(3) Se la utiliza en diversas sentencias
(4) Cuando finaliza el bloque en el que fue declarada, la variable muere. Es decir, se libera el
espacio que ocupa esa variable en memoria. No se la podrá volver a utilizar.
CONSTANTES
Los programas de ordenador contienen ciertos valores que no deben cambiar durante su
ejecución. Estos valores se llaman constantes.
Podemos decir que una constante es una posición de memoria que se referencia con un
identificador, conocido como nombre de la constante, donde se almacena el valor de un dato
que no puede cambiar durante la ejecución del programa.
Una constante en Java se declara de forma similar a una variable, anteponiendo la palabra
final
Ejemplo:
Java solo tiene dos tipos de operadores enteros: uno que aplica para operar datos de tipo
long, y otro que emplea para operar datos de tipo int. De este modo cuando operemos un
byte con un byte, un short con un short o un short con un byte Java empleará para dicha
operación el operador de los datos tipo int, por lo que el resultado de dicha operación será un
int siempre.
La “jerarquía” en las conversiones de mayor a menor es:
double <- float <- long <- int <- short <- byte
Estas conversiones sólo nos preocuparán a la hora de mirar en qué tipo de variable
guardamos el resultado de la operación; esta ha de ser de una jerarquía mayor o igual a la
jerarquía de la máxima variable involucrada en la operación. Si es de rango superior no
habrá problemas.
Es posible convertir un dato de jerarquía “superior” a uno con jerarquía “inferior”,
arriesgándonos a perder información en el cambio. Este tipo de operación (almacenar el
contenido de una variable de jerarquía superior en una de jerarquía inferior) se denomina
cast. Veamos una ejemplo para comprender su sintaxis:
public class Ejemplo1 {
public static void main(String[] args) {
int i = 9,k;
float j = 47.9F;
System.out.println(“i: “+i + “ j: “ +j);
k = (int) j; //empleo de un cast
System.out.println(“j: “ + j + “ k: “ +k);
j = k;//no necesita cast
System.out.println(“j: “ + j + “ k: “ +k);
float m = 2.3F;
//float m = 2.3; daría error al compilar.
System.out.println(“m: “+m);
}
} ///:~
LECTURA Y ESCRITURA POR TECLADO
ESCRITURA
Ya hemos visto que hay una función para escribir que es System.out.println. Dicha función
puede recibir como parámetro cualquier tipo básico de datos: es decir puede recibir un texto
literal (siempre entre comillas), pero también puede escribir expresiones enteras, booleanas,
decimales y caracteres simples.
Ejemplo:
int a=5, b=9;
double c=5.5;
Esta función tras escribir añade un salto de línea, de modo que lo siguiente que se escriba saldrá
en otra línea. Existe una variante de esta función que no inserta el salto de línea es
System.out.print:
System.out.print("todo en la ");
System.out.print("misma línea ");
Si deseamos que el mismo println o print escriba varios valores en la misma instrucción,
podemos usar el operador de encadenar textos, ejemplo:
Es necesario usar paréntesis ya que se utiliza en la expresión el operador + con dos significados.
Este operador concatena cuando al menos hay un texto a la izquierda o derecha del operador; y
suma cuando tenemos dos números (del tipo que sea).
LECTURA
import java.awt.*;
Para crear un objeto fuente de la clase Font podemos seguir dos alternativas
import java.awt.Font;
Font fuente=new Font("Monospaced", Font.BOLD, 36);
O bien, sin poner la sentencia import
import java.awt.*;
public class BarTexto extends Panel implements java.io.Serializable{
//...
}
Panel es una clase que está en el paquete java.awt, y Serializable es una interface que está en el
paquete java.io
La lectura en Java es mucho más complicada. Leer de la consola de salida requiere manejar
muchos conocimientos que pertenecen a temas más avanzados que el actual.
Una forma no tan complicada (aunque desde luego no es tan sencilla como la escritura) es
utilizar la clase JOptionPane. Dicha clase pertenece al paquete javax.swing, por lo que para
utilizarla sin tener que escribir el nombre completo conviene usar la instrucción:
import javax.swing.JOptionPane;
Esta es una clase pensada para manejar cuadros de diálogo de tipo Swing.
Uno de estos cuadros permite introducir datos y que una variable les almacene. El problema es
que todos los datos les devuelve en forma de String (texto), lo que implica almacenarles en una
variable de ese tipo y luego convertirlos al tipo apropiado (int, double, char,…).
♦ Si el usuario cancela el cuadro o bien no escribe un número entero, ocurre un error que
provocará que el programa finalice la ejecución. Arreglar estos errores será algo que
veremos más adelante
Aunque el código es un tanto críptico a estas alturas, merece la pena aprenderle ya que
permite más posibilidades de hacer programas para practicar. De otro modo no tendremos
manera de leer datos por teclado y eso supone una tara importante para nuestros
programas.
OPERADORES
Los operadores aritméticos en java son:
+ Suma. Los operandos pueden ser enteros o reales.
- Resta. Los operandos pueden ser enteros o reales.
* Multiplicación. Los operandos pueden ser enteros o reales.
/ División. Los operandos pueden ser enteros o reales. Si ambos son enteros el
resultado es entero. En cualquier otro caso el resultado es real.
% Resto de la división. Los operandos pueden ser de tipo entero o real.
int a = 10, b = 3;
double v1 = 12.5, v2 = 2.0;
char c1='P', c2='T';
En aquellas operaciones en las que aparecen operandos de distinto tipo, java convierte los
valores al tipo de dato de mayor precisión de todos los datos que intervienen. Esta
conversión es de forma temporal, solamente para realizar la operación. Los tipos de datos
originales permanecen igual después de la operación.
Por ejemplo:
int i = 7;
double f = 5.5;
char c = 'w';
Operación Valor Tipo
i+f 12.5 double
i+c 126 int
i + c – ‘0’ 78 int
(i + c) – (2 * f / 5) 123.8 double
Operador de Asignación
Por ejemplo, una expresión de tipo real (float, double) se truncará si se asigna a un entero, o
una expresión en de tipo double se redondeará si se asigna a una variable de tipo float.
a += 3; equivale a a = a + 3;
a *= 3; equivale a a = a * 3;
En general:
int i = 5, j = 7, x = 2, y = 2, z = 2;
float f = 5.5F, g = -3.25F;
La siguiente tabla muestra todos los operadores Java ordenados de mayor a menor
prioridad.
La primera línea de la tabla contiene los operadores de mayor prioridad y la última los de
menor prioridad. Los operadores que aparecen en la misma línea tienen la misma prioridad.
Una expresión entre paréntesis siempre se evalúa primero y si están anidados se evalúan de
más internos a más externos.
Operador Asociatividad
() [] . Izquierda a derecha
++ -- ~ ! Derecha a izquierda
new Derecha a izquierda
*/% Izquierda a derecha
+- Izquierda a derecha
>> >>> << Izquierda a derecha
> >= < <= Izquierda a derecha
== != Izquierda a derecha
& Izquierda a derecha
^ Izquierda a derecha
| Izquierda a derecha
&& Izquierda a derecha
|| Izquierda a derecha
?: Derecha a izquierda
= += -= *= ... Derecha a izquierda
EXPONENCIACIÓN
OPERADORES RELACIONALES
En la tabla a continuación recogemos los operadores lógicos disponibles en Java:
&& AND. El resultado es verdadero si los dos operandos son verdaderos. El
resultado es falso en caso contrario. Si el primer operando es falso no se evalúa el segundo,
ya que el resultado será falso.
Operación Resultado
a==b false
a >=c true
b<c false
a != c false
A B A OR B A B A AND B A NOT A
F F F F F F F V
F V V F V F V F
V F V V F F
V V V V V V
F: Falso.
V: Verdadero
Como ejemplo, en la siguiente tabla vemos una serie de expresiones lógicas y su valor:
int i = 7;
float f = 5.5F;
char c = ‘w’;
Expresión Resultado
(i >= 6) && (c == ‘w’) true
(i >= 6) || (c == 119) true
(f < 11) && (i > 100) false
(c != ‘p’) || ((i + f) <= 10) true
i + f <= 10 false
i >= 6 && c == ‘w’ true
c != ‘p’ || i + f <= 10 true
Las expresiones lógicas en java se evalúan sólo hasta que se ha establecido el valor
cierto o falso del conjunto. Cuando, por ejemplo, una expresión va a ser seguro falsa por el
valor que ha tomado uno de sus operandos, no se evalúa el resto de expresión.
OPERADORES JAVA UNITARIOS.
int i = 1;
i++; // Esta instrucción incrementa en 1 la variable i.
// Es lo mismo que hacer i = i + 1; i toma el valor 2
int i = 1;
i--; // decrementa en 1 la variable i.
// Es lo mismo que hacer i = i - 1; i toma el valor 0
Los operadores incremento y decremento pueden utilizarse como prefijo o sufijo, es decir,
pueden aparecer antes o después de la variable.
Por ejemplo:
i = 5;
i++; // i vale ahora 6
++i; // i vale ahora 7
Cuando estos operadores intervienen en una expresión, si preceden al operando (++i), el
valor se modificará antes de que se evalúe la expresión a la que pertenece.
Por ejemplo:
int x, i = 3;
x = i++;
x contiene 3, i contiene 4.
int x, i = 3;
x = ++i;
x contiene 4, i contiene 4.
Otro ejemplo:
int i = 1;
System.out.println(i);
System.out.println (++i);
System.out.println (i);
1
2
2
int i = 1;
System.out.println(i);
System.out.println (i++);
System.out.println (i);
Estas instrucciones mostrarían por pantalla:
1
1
2
El operador complemento a 1 ~ cambia de valor todos los bits del operando (cambia unos
por ceros y ceros por unos). Solo puede usarse con datos de tipo entero. El carácter ~ es el
ASCII 126.
Por ejemplo:
int a = 1, b = 0, c = 0;
c = ~a;
CADENAS DE CARACTERES
En Java no hay un tipo predefinido para cadenas de caracteres, en su lugar hay una clase,
String, que es la que soporta las distintas operaciones con cadenas de caracteres. La
definición de un String es:
String e ; //no inicializado
String e =””; //cadena vacía
String e = “Hola”; //inicialización y asignación juntas.
Concatenación
La concatenación en Java es increíblemente sencilla: se realiza con el operador +, es decir
“sumando” cadenas de caracteres obtenemos la concatenación de estas. Lo ilustraremos con
un ejemplo:
String saludo = “hola”;
String nombre = “Pepe”;
String saluda_pepe = “”;
saluda_pepe = saludo + nombre;// saluda_pepe toma el valor
holaPepe
La sencillez de Java en el manejo de cadenas de caracteres llega incluso más allá: si una
cadena la intentamos encadenar con otro tipo de variable automáticamente se convierte la
otra variable a String, de tal modo que es perfectamente correcto:
String saludo = “hola”;
int n = 5;
saludo = saludo + “ “ + n;// saludo toma el valor “hola 5”
Subcadenas
En la clase String hay un método que permite la extracción de una subcadena de caracteres
de otra. Su sintaxis es:
Nombre_String.substring((int)posición_inicial,(int)posición_final);
Puede extraerse un char de una cadena, para ello se emplea el método charAt(posición),
siendo posición la posición del carácter que se desea extraer.
Comparación de cadenas
Se empleó otro método de String: equals. Su sintaxis es:
cadena1.equals(cadena2);
Devuelve true si son iguales y false si son distintos.
El siguiente ejemplo permitirá ilustrar estas operaciones con Strings:
public class Ejemplo5 {
public static void main(String[] args) {
String saludo = "Hola";
String saludo2 ="hola";
int n = 5;
TIPOS ENUMERADOS
Los tipos de datos enumerados son un tipo de dato definido por el programador (no como
ocurre con los tipos de datos primitivos). En su definición el programador debe indicar un
conjunto de valores finitos sobre los cuales las variables de tipo enumeración deberán tomar
valores. La principal funcionalidad de los tipos de datos enumerados es incrementar la
legibilidad del programa. La mejor forma de comprender lo qué son es viéndolo; para definir
un tipo de dato enumerado se emplea la sintaxis:
modificadores enum NombreTipoEnumerado{ VALOR1,VALOR2,.. }
Los posibles valores de "modificadores" serán vistos en el tema 5. El caso más habitual es
que modificadores tome el valor "public". El nombre puede ser cualquier nombre válido
dentro de Java. Entre las llaves se ponen los posibles valores que podrán tomar las variables
de tipo enumeración, valores que habitualmente se escriben en letras mayúsculas. Un
ejemplo de enumeración podría ser:
public enum Semana {LUNES, MARTES, MIÉRCOLES, JUEVES,
VIERNES, SÁBADO, DOMINGO}
Las definiciones de los tipos enumerados deben realizarse fuera del método main y, en
general, fuera de cualquier método; es decir, deben realizarse directamente dentro del
cuerpo de la clase. En el tema 5 se explicará detalladamente qué es una clase y qué es un
método.
Para definir una variable de la anterior enumeración se emplearía la siguiente sintaxis:
Semana variable;
Java2, tutorial de javahispano (http://javahispano.org). Página 26 de 148
y para darle un valor a las variables de tipo enumeración éstas deben asignarse a uno de los
valores creados en su definición. El nombre del valor debe ir precedido del nombre de la
propia enumeración:
variable = Semana.DOMINGO;
Veamos un ejemplo de programa que emplea enumeraciones:
public class Ejemplo5c {
//definimos un tipo enumerado
//los tipos enumerados deben definirse siempre fuera
//del main y, más en general, fuera de cualquier método
public enum Semana {LUNES, MARTES, MIERCOLES, JUEVES,
VIERNES, SABADO, DOMINGO};
public static void main(String[] args) {
//definimos una variable que pertenece al tipo enumeradoSemana
//y le damos el valor que representa el día martes
Semana hoy = Semana.MARTES;
//si el día se cayese en el fin de semana no hay que trabajar
//obsérvese como gracias a la numeración del programa es fácil del entender
if(hoy == Semana.DOMINGO || hoy == Semana.SABADO){
System.out.println("Hoy toca descansar");
} else{
System.out.println("Hoy toca trabajar");
}
}
}
JAVA NO ES PERFECTO
Ya hemos hecho hincapié en que Java esta diseñado para facilitar la labor del programador,
disminuyendo los tiempos de aprendizaje y de programación gracias a su sencillez y a su
capacidad de detectar errores; sin embargo, Java también tiene sus defectos: Java deja
hacer
overflow sin dar error ni en tiempo de compilación ni tan siquiera en tiempo de ejecución.
Ejemplo:
public class ejemplo6 {
public static void main(String[] args) {
//0x significa que el número está en formato hexadecimal.
// 0x7 = 0111 en binario
// 0xf = 1111 en binario
//El numero representado abajo será “0” + 31 “1”. El primer
//bit es el signo, al ser 0 indica que es un número
//positivo. Es por lo tanto el numero entero (un int son 32
//bits) más grande que podemos representar en Java
int gran = 0x7fffffff; // maximo valor int
prt("gran = " + gran);
//Forzamos un overflow:
int mas_grande = gran * 4;
//No se produce una excepción y se ejecuta la siguiente línea prt("mas_grande = " +
mas_grande);
}
static void prt(String s) {
System.out.println(s);
}
}
IF
If then Else
Su modo más simple de empleo es:
If(condición) {
Grupo de sentencias;
}
Condición es una valor tipo boolean. El grupo de sentencias se ejecuta solo si la condición
toma un valor true. En caso contrario se sigue ejecutando ignorando el Grupo de sentencias.
If(condición) {
Grupo de sentencias;
}
Else
{
Grupo2 de sentencias;
}
Si condición toma el valor true se ejecuta Grupo de sentencias, en caso contrario se ejecuta
Grupo2 de sentencias. En ambos casos se continúa ejecutando el resto del código.
If(condición) {
Grupo de sentencias;
}
else if (condición){
Grupo2 de sentencias;
}
else if (condición){
Grupo3 de sentencias;
}
.
.
.
else{
Grupo_n de sentencias;
}
Si condición toma el valor true se ejecuta Grupo de sentencias, si condicion2 toma el valor
true se ejecuta Grupo2 de sentencias... y así sucesivamente hasta acabarse todas las
condiciones. Si no se cumple ninguna se ejecuta Grupo_n de sentencias. Este último else es
opcional. En ambos casos se continúa ejecutando el resto del código.
Ejemplo:
SWITCH
Los creadores de Java trataron de hacer de este lenguaje una versión simplificada y
mejorada
del lenguaje de C++. Su trabajo fue bastante bueno, pero no perfecto. Prueba de ello es esta
sentencia: está tan poco flexible como en C++.
switch(selector) {
case valor1 :
Grupo de sentencias1;
break;
case valor2 :
Grupo de sentencias2;
break;
case valor3 :
Grupo de sentencias3;
break;
case valor4 :
Grupo de sentencias4;
break;
case valor5 :
Grupo de sentencias5;
break;
// ...
default: statement;
}
BUCLES
Son instrucciones que nos permiten repetir un bloque de código mientras se cumpla una
determinada condición. Pasemos a ver sus tipos.
Bucle while
Cuando en la ejecución de un código se llega a un bucle while se comprueba si se verifica su
condición, si se verifica se continua ejecutando el código del bucle hasta que esta deje de
verificarse. Su sintaxis es:
while(condición){
Grupo de sentencias
}
ejemplo:
public class Ejemplo{
public static void main(String[] args) {
double r = 0;
//Mientras que r < 0.99 sigue ejecutando el cuerpo del bucle.
//La d significa double. No es necesaria
while(r < 0.99d) {
//Genera un nuevo r aleatorio entre 0 y 1.
r = Math.random();
//Lo imprime por consola.
System.out.println(r);
}
}
}
Bucle do while
Su comportamiento es semejante al bucle while, sólo que aquí la condición va al final del
código del bucle, por lo que tenemos garantizado que el código se va a ejecutar al menos
una vez. Dependerá del caso concreto si es más conveniente emplear un bucle while o do
while. La sintaxis de do while es:
do {
Grupo de sentencias;
}while(condición);
Bucle for
Su formato es el siguiente:
for(expresion1;expresion2;expresion3){
Grupo de sentecias;
}
Bucle for-each
Esta característica sólo está disponible en Java 5 y versiones posteriores. Se trata de un
bucle diseñado con el propósito de recorrer un conjunto de objetos. Dado lo básico de este
tutorial la única estructura que hemos visto que permite almacenar un conjunto de objetos
son los arrays; por lo que para nosotros será el único caso en la cual tenga sentido
emplearlo. Su sintaxis es:
for(Tipo elemento: colecciónElementos){
Grupo de sentecias;
}
Tipo es el tipo de dato de los elemento del conjunto; elemento es una variable a auxiliar que
la primera vez que se ejecute el bucle tomará el valor del primer elemento del conjunto, la
segunda vez tomará el valor del segundo elemento del conjunto y así sucesivamente. La
colecciónElementos es el conjunto de elementos sobre los cuales queremos iterar (un array
para nosotros). El bucle se repetirá una vez para cada elemento de la colección. Veamos un
ejemplo:
public class Ejemplo11{
public static void main(String[] args) {
//Este arrays será la colección de elementos por la
que iteraremos
int array[] = new int[10];
int suma = 0, contador = 0;
//con este bucle damos valores a los elementos del array
for (int i = 0; i < array.length; i++) {
array[i]= 2*i;
}
//este es el nuevo tipo de bucle. Va acumulando de la variable
//suma los valores de todo los elementos del array; el bucle
//se repetirá a una vez por cada elemento del array y la variable e
//ir a tomando como valores cada uno de los contenidos de éste
for (int e : array){ //para cada elemento del array
suma = suma + e;
}
System.out.println(suma);
}
}
Break y continue
No se tratan de un bucle, pero sí de una sentencia íntimamente relacionada con estos. El
encontrarse una sentencia break en el cuerpo de cualquier bucle detiene la ejecución del
cuerpo del bucle y sale de este, continuándose ejecutando el código que hay tras el bucle.
Esta sentencia también se puede usar para forzar la salida del bloque de ejecución de una
instrucción condicional (esto ya se vio con switch).
Continue también detiene la ejecución del cuerpo del bucle, pero en esta ocasión no se sale
del bucle, sino que se pasa a la siguiente iteración de este.
Observaremos el funcionamiento de ambos en un mismo ejemplo:
public class Ejemplo12 {
public static void main(String[] args) {
for(int i = 0; i < 100; i++) {
if(i == 74) break; // teminamos aqui el bucle
//Salto a la siguiente iteración si i no es divisible entre 9
if(i % 9 != 0) continue;
//Si I es divisible entre 9 se imprime
System.out.println(i);
}
int i = 0;
// Lazo infinito del cual se sale con break:
while(true) {
i++;
if(j == 120) break; // Salimos del lazo
Java2, tutorial de javahispano (http://javahispano.org). Página 36 de 148
System.out.println(i);
}
}
}
RETURN
Sus funciones son las mismas que en C++. Cuando se llama a un procedimiento ( que en
OOP se denominó método) al encontrarse con una sentencia return se pasa el valor
especificado al código que llamó a dicho método y se devuelve el control al código invocador.
Su misión tiene que ver con el control de flujo: se deja de ejecutar código secuencialmente y
se pasa al código que invocó al método.
Esta sentencia también está profundamente relacionada con los métodos, ya que es la
sentencia que le permite devolver al método un valor. Podíamos haber esperado hablar de
métodos para introducir esta sentencia, pero hemos decidido introducirla aquí por tener una
función relacionada, entre otras cosas, con control de flujo. En el ejemplo 7 ya se ha
ejemplificado su uso.
CLASES Y HERENCIA
Una clase es la “plantilla” que usamos para crear los objetos. Todos los objetos pertenecen a
una determinada clase. Un objeto que se crea a partir de una clase se dice que es una
instancia de esa clase. Las distintas clases tienen distintas relaciones de herencia entre si:
una clase puede derivarse de otra, en ese caso la clase derivada o clase hija hereda los
métodos y variables de la clase de la que se deriva o clase padre. En Java todas las clases
tienen como primer padre una misma clase: la clase Object.
Por motivos de simplicidad y dada la corta duración de este curso ignoraremos la existencia
del concepto de package en la explicación de los siguientes conceptos, o haremos breves
referencias a este concepto sin dar demasiadas explicaciones. En general en lo que al
alumno respecta se recomienda ignorar, al menos durante este curso, toda referencia al
término “package”.
Vamos a continuación a profundizar en todos estos conceptos y a explicar su sintaxis en
Java.
Los campos que van entre corchetes son optativos. nombreClase es el nombre que le
queramos dar a nuestra clase, nombreClasePadre es el nombre de la clase padre, de la cual
hereda los métodos y variables. En cuanto al contenido del último corchete ya se explicará
más adelante su significado.
Los modificadores indican las posibles propiedades de la clase. Veamos que opciones
tenemos:
Modificadores de clases
public: La clase es pública y por lo tanto accesible para todo el mundo. Sólo podemos tener
una clase public por unidad de compilación, aunque es posible no tener ninguna.
Ninguno: La clase es “amistosa”. Será accesible para las demás clases del package. Sin
embargo mientras todas las clases con las que estemos trabajando estén en el mismo
directorio pertenecerán al mismo package y por ello serán como si fuesen públicas. Como
por lo de ahora trabajaremos en un solo directorio asumiremos que la ausencia de
modificador es equivalente a que la clase sea pública.
final: Indicará que esta clase no puede “tener hijo”, no se puede derivar ninguna clase de
ella.
abstract: Se trata de una clase de la cual no se puede instanciar ningún objeto.
Veamos un ejemplo de clase en Java:
class Animal{
int edad;
String nombre;
public void nace(){
System.out.println("Hola mundo");
}
public void getNombre(){
System.out.println(nombre);
}
public void getEdad(){
System.out.println(edad);
}
}
Sobrecarga de métodos
Java admite lo que se llama sobrecarga de métodos: puede haber varios métodos con el
mismo nombre pero a los cuales se les pasan distintos parámetros. Según los parámetros
que se le pasen se invocará a uno u otro método:
class Animal{
int edad;
String nombre;
public void nace(){
System.out.println("Hola mundo");
}
public void getNombre(){
System.out.println(nombre);
}
public void getNombre(int i){
System.out.println(nombre +" " +edad);
Java2, tutorial de javahispano (http://javahispano.org). Página 41 de 148
}
public void getEdad(){
System.out.println(edad);
}
}
Constructores
Constructores son métodos cuyo nombre coincide con el nombre de la clase y que nunca
devuelven ningún tipo de dato, no siendo necesario indicar que el tipo de dato devuelto es
void. Los constructores se emplean para inicializar los valores de los objetos y realizar las
operaciones que sean necesarias para la generación de este objeto (crear otros objetos que
puedan estar contenidos dentro de este objeto, abrir un archivo o una conexión de
internet.....).
Como cualquier método, un constructor admite sobrecarga. Cuando creamos un objeto (ya
se verá más adelante como se hace) podemos invocar al constructor que más nos convenga.
class Animal{
int edad;
String nombre;
public Animal(){
}
public Animal(int _edad, String _nombre){
edad = _edad;
nombre = _nombre;
}
public void nace(){
System.out.println("Hola mundo");
}
public void getNombre(){
System.out.println(nombre);
}
public void getNombre(int i){
System.out.println(nombre +" " +edad);
}
public void getEdad(){
System.out.println(edad);
}
}
Modificadores de variables
public: Pública, puede acceder todo el mundo a esa variable.
Ninguno: Es “amistosa”, puede ser accedida por cualquier miembro del package, pero no
por otras clases que pertenezcan a otro package distinto.
protected: Protegida, sólo pueden acceder a ella las clases hijas de la clase que posee la
variable y las que estén en el mismo package. private: Privada, nadie salvo la clase misma
puede acceder a estas variables. Pueden acceder a ella todas las instancias de la clase
(cuando decimos clase nos estamos refiriendo a todas sus posibles instancias).
static: Estática, esta variable es la misma para todas las instancias de una clase, todas
comparten ese dato. Si una instancia lo modifica todas ven dicha modificación.
final: Final, se emplea para definir constantes, un dato tipo final no puede variar nunca su
valor. La variable no tiene por qué inicializarse en el momento de definirse, pero cuando se
inicializa ya no puede cambiar su valor.
class Marciano {
boolean vivo;
private static int numero_marcianos = 0;
final String Soy = "marciano";
void quienEres(){
System.out.println("Soy un " + Soy);
}
Marciano(){
vivo = true;
numero_marcianos++;
}
void muerto(){
if(vivo){
vivo = false;
numero_marcianos--;
}
}
}
HERENCIA
Cuando en Java indicamos que una clase “extends” otra clase estamos indicando que es una
clase hija de esta y que, por lo tanto, hereda todos sus métodos y variables. Este es un
poderoso mecanismo para la reusabilidad del código. Podemos heredar de una clase, por lo
cual partimos de su estructura de variables y métodos, y luego añadir lo que necesitemos o
modificar lo que no se adapte a nuestros requerimientos. Veamos un ejemplo:
class Animal{
protected int edad;
String nombre;
public Animal(){
}
public Animal(int _edad, String _nombre){
edad = _edad;
nombre = _nombre;
}
public void nace(){
System.out.println("Hola mundo");
}
public void getNombre(){
System.out.println(nombre);
}
public void getNombre(int i){
System.out.println(nombre +" " +edad);
}
public void getEdad(){
System.out.println(edad);
}
}
Fecha hoy;
hoy = new Fecha();
Con el primer comando hemos creado un puntero que apunta a una variable tipo fecha, como
está sin inicializar apuntara a null. Con el segundo inicializamos el objeto al que apunta hoy,
reservando espacio para sus variables. El constructor las inicializará, tomando el objeto hoy
el valor 1-1-1900.
Con esta sentencia creamos una variable que se llama un_dia con valor 8-12-1999.
Una vez creado un objeto será posible acceder a todas sus variables y métodos públicos, así
por ejemplo en el ejemplo anterior un_dia.dia = 8. Si la variable fuese privada solo podrían
acceder a ella sus instancias:
class Fecha{
private int dia,mes,ano;
Fecha(){
dia=1;
mes = 1;
ano = 1900;
}
Fecha (int ndia, nmes, nano){
dia= ndia;
mes = nmes;
ano = nano;
}
}
De este modo no podríamos acceder a las variables de la clase fecha, para acceder a ella
tendríamos que hacerlo mediante métodos que nos devolviesen su valor. A esto se le
denomina encapsulación. Esta es la forma correcta de programar OOP: no debemos dejar
acceder a las variables de los objetos por otro procedimiento que no sea paso de mensajes
entre métodos.
this
Es una variable especial de sólo lectura que proporciona Java. Contiene una referencia al
objeto en el que se usa dicha variable. A veces es útil que un objeto pueda referenciarse a sí
mismo:
class Cliente{
public Cliente(String n){
//Llamamos al otro constructor. El empleo de this ha de ser
//siempre en la primera línea dentro del constructor.
this(n, Cuenta.nuevo_numero());
.....
}
public Cliente (String n, int a){
nombre = n;
numero_cuenta = a;
}
.....
}
Otro posible uso de this, que ya se ha visto en ejemplos anteriores es diferenciar entre
variables locales de un método o constructor y variables del objeto. En los códigos del cd
correspondientes a los ejemplos Perro.java y Perro2.java el constructor de la clases Animal
aunque realiza la misma función que los que se recogen en estos apuntes son ligeramente
diferentes:
public Animal(int edad, String nombre){
//this.edad = varaible del objeto Perro
//edad = variable definida sólo dentro del constructor
this.edad =edad;
this.nombre=nombre;
}
MÉTODOS GRÁFICOS
Java proporciona la clase Graphics, que permite dibujar elipses, cuadrados, líneas, mostrar
texto y también tiene muchos otros métodos de dibujo. Para cualquier programador, es
esencial el entendimiento de la clase Graphics, antes de adentrarse en el dibujo en Java.
La clase Graphics proporciona el entorno de trabajo para cualquier operación gráfica que se
realice dentro del AWT.
Para poder pintar, un programa necesita un contexto gráfico válido, representado por una
instancia de la clase Graphics. Pero esta clase no se puede instanciar directamente; así que
debemos crear un componente y pasarlo al programa como un argumento al método paint().
El único argumento del método paint() es un objeto de esta clase. La clase Graphics dispone
de métodos para soportar tres categorías de operaciones gráficas:
1) Dibujo de primitivas gráficas,
2) Dibujo de texto,
3) Presentación de imágenes en formatos *.gif y *.jpeg.
Además, la clase Graphics mantiene un contexto gráfico: un área de dibujo actual, un color
de dibujo del Background y otro del Foreground, un Font con todas sus propiedades, etc.Los
ejes están situados en la esquina superior izquierda. Las coordenadas se miden siempre en
pixels.
Problema 1
Crear una aplicación que utilice las primitivas gráficas principales que provee la clase
Graphics: