Está en la página 1de 109

[AFO018307] IFCD033PO JAVA

[MOD016498] IFCD033PO JAVA


[UDI095804] PROGRAMACIÓN DE APLICACIONES CON JAVA

Introducción

En este capítulo realizaremos la introducción a la programación de aplicaciones a través de Java,

para ello tendremos que introducir los términos de entornno de desarrollo donde conoceremos el

uso de y aplicación de los IDE, incorporando el famosos JDK de Java.

om
.c
yl
ec
at
m
or
.f
al
tu
r
s vi
pu
m
ca

campusvirtual.formatecyl.com
1 / 109
[AFO018307] IFCD033PO JAVA
[MOD016498] IFCD033PO JAVA
[UDI095804] PROGRAMACIÓN DE APLICACIONES CON JAVA

Objetivos

Entre los principales objetivos de esta unidad tendremos:

Comprender la funcionalidad de Java

Introducir todas las bibliotecas disponible en JAva

Aprende sobre las versiones de Java actuales

Aprender sobre los elementos disponible en el lenguaje Java

om
Entender qué es un GUI

.c
yl
ec
at
m
or
.f
al
rtu
s vi
pu
m
ca

campusvirtual.formatecyl.com
2 / 109
[AFO018307] IFCD033PO JAVA
[MOD016498] IFCD033PO JAVA
[UDI095804] PROGRAMACIÓN DE APLICACIONES CON JAVA

Mapa Conceptual

MAPA CONCEPTUAL [[[Elemento Multimedia]]]

om
.c
yl
ec
at
m
or
.f
al
tu
r
s vi
pu
m
ca

campusvirtual.formatecyl.com
3 / 109
[AFO018307] IFCD033PO JAVA
[MOD016498] IFCD033PO JAVA
[UDI095804] PROGRAMACIÓN DE APLICACIONES CON JAVA

Enseñar las características del lenguaje JAVA

[[[Elemento Multimedia]]] [[[Elemento Multimedia]]]


Antes de pasar a realizar el desarrollo de una aplicación, se escribe un algoritmo aplicando un
seudocódigo. Después, éste se traduce a codigo fuente, que dicho código es un conjunto de
instrucciones escritas en lenguaje de programación. Seguidamente el usuario querrá que la
computadora ejecute esas tareas en el ordenador, para ello realizaremos lo siguietne:

Ejecutar un comando de compilación

om
Ejecutar un comando de ejecución

.c
yl
Cuando se ejecuta un comando de compilación, se ordena a la computadora traducir el código del
programa fuente en código que la computadora pueda ejecutar. Cuando se realiza un comando de

ec
ejecución, se ordena a la computadora ejecutar el código traducido y ejecutar las tareas
especificadas en el código. La computadora contendrá un compilador que se encargará de traducir
at
dicho código fuente, para su posterior ejecución, esto se hace traduciendo ese códgio a código
objeto, siendo éste un conjunto de instrucciones en formato binario que puede ejecutarlo
m
directamente la computadora para resolver un problema. El código objeto no es muy portatil, por lo
or

que suele existir problemas a la hora de realizar su ejecución en distintos tipos de computadoras.
Para ello Java intentó acabar con este problema introduciendo el bytecodes o código byte entre los
.f

códigos fuente y código objeto. Cuando el código byte Java de un programa se ejecuta, éste se
al

traduce en código objeto mediante un intérprete, este es conocido como Vitrual Machine (JVM)
El siguiente dibujo intenta resumir dicha arquitectura representada mediante JVM:
tu
r
s vi
pu
m
ca

campusvirtual.formatecyl.com
4 / 109
[AFO018307] IFCD033PO JAVA
[MOD016498] IFCD033PO JAVA
[UDI095804] PROGRAMACIÓN DE APLICACIONES CON JAVA

La máquina virtual Java (JVM)

La determinación de la Máquina Virtual Java se define como:

Una determinada máquina imaginaria implementada a través de la emulación por software en

una máquina real. El código para la máquina virtual Java se guarda en ficheros .class, cada uno de

los cuales contiene, al menos, el código para una clase pública.

La especificación de la máquina virtual java proporciona las especificaciones de hardware para

om
las que se compila toda la tecnología java. Dicha especificación permite al software en java

actuar de manera independiente de la plataforma ya que la compilación se realiza para una

.c
máquina genérica comúnmente conocida como la máquina virtual java (JVM). La cual puede ser

yl
emulada por software para poder ser ejecutada en los otros sistemas informáticos existentes, o bien

ec
ser implementada en hardware.

at
A partir del código fuente el compilador genera bytecodes. Estos bytecodes son instrucciones de
m
código máquina para la JVM. Cada intérprete de java tiene una implementación de la JVM.
or

El intérprete de código byte ejecuta el código compilado del programa. Por lo tanto, con Java, el
.f
al

interprete actúa como una máquina CPU, pero éste es solo una pieza de software , no una pieza de
tu

hardware como lo es una CPU real


r

La especificación de la JVM proporciona definiciones muy concretas para la implementación de:


s vi
pu

Conjunto de instrucciones (equivalente al de la CPU).

Registros del sistema.


m

Formato de los archivos de clase.


ca

Pila.

Garbage-collected heap.

Área de memoria.

Como comentabamos JVM permitía la implementación de un Garbage-collected dentro de su pila.

Gran parte de los lenguajes de programación permiten la reserva de memoria en tiempo de

ejecución. El proceso de reserva de memoria varía según la sintaxis del lenguaje, pero siempre

campusvirtual.formatecyl.com
5 / 109
[AFO018307] IFCD033PO JAVA
[MOD016498] IFCD033PO JAVA
[UDI095804] PROGRAMACIÓN DE APLICACIONES CON JAVA

involucra el retorno de un puntero al inicio del bloque de memoria reservado.

Una vez la memoria reservada deja de necesitarse (el puntero que la referencia esta "out of scope"),

el programa o el entorno de ejecución debería liberar esa memoria.

En C, C++, y otros lenguajes, el programador es responsable de la gestión de la liberación de

memoria. Esta es una tarea complicada a veces porque no siempre se sabe a priori cuando se puede

liberar la memoria. Los programas que no liberan la memoria utilizada pueden generar errores de

om
ejecución cuando ya no queda memoria disponible en el sistema. Se dice que estos programas tienen

fugas de memoria ("memory-links").

.c
Java libera al programador de la responsabilidad de liberar la memoria. El lenguaje java

yl
proporciona una hebra de ejecución, o proceso en paralelo, a nivel de sistema que rastrea las

ec
operaciones de reserva de memoria. Durante los ciclos muertos de la JVM, la hebra de "garbage

at
collector" verifica qué memoria puede liberarse y realiza dicha operación.
m
El proceso de "Garbage collector" se realiza automáticamente durante el ciclo de vida de un
or

programa java, eliminando la necesidad de liberar memoria y evitando las pérdidas de memoria. Sin
.f

embargo, la implementación del gestor de "garbage collection" puede variar sustancialmente en las
al

diferentes implementaciones de la JVM.


tu
r
s vi
pu
m
ca

campusvirtual.formatecyl.com
6 / 109
[AFO018307] IFCD033PO JAVA
[MOD016498] IFCD033PO JAVA
[UDI095804] PROGRAMACIÓN DE APLICACIONES CON JAVA

Bibliotecas básicas

A la hora de organizar la estructura de Java, tendremos que hablar de las clases, comentaremos la
estructura de estas más adelante. Pero básicamente se trata de un fichero compuesto de métodos y
atributos propios de un objeto. A la hora de organizar dichas clases, nos organizaremos mediante
paquetes, que se tratarán de carpetas.
Un paquete es una colección de clases e interfaces relacionadas. El compilador de Java usa los

paquetes para estructurar la compilación y ejecución. Es decir, un paquete es una biblioteca. Es

más el nombre completo de una clase es el nombre del paquete en el cual se almacena esta, punto y

om
después el nombre de la clase.

.c
La estructura con la que se trabajará tanto en código Java como en lenguaje UML para su

yl
representación será el siguiente:

ec
at
m
or
.f
al
r tu
s vi

Es decir, si la clase Herencia está dentro del paquete introduccion, el nombre completo de
pu

Herencia es introducción.Herencia. A veces resulta que un paquete está dentro de otro paquete,
m

entonces habrá que indicar la ruta completa a la clase, como si fuera un sistema de archivos de un
ca

sistema operativo (para entrar en una subcarpeta, primero debemos pasar por la primera carpeta, el

hecho de abrir una carpeta no quiere decir que estemos visualizando los ficheros que existen en

alguna otra subcarpeta).

Mediante el comando import, se evita tener que colocar el nombre completo. El comando import se

coloca antes de definir la clase, fuera del código de la clase como primera instrucción.

Por Ejemplo:

campusvirtual.formatecyl.com
7 / 109
[AFO018307] IFCD033PO JAVA
[MOD016498] IFCD033PO JAVA
[UDI095804] PROGRAMACIÓN DE APLICACIONES CON JAVA

import introduccion.Herencia;

Debido a esta instrucción para utilizar la clase Herencia no hace falta indicar el paquete en el

que está situado, basta indicar sólo Herencia. Se puede utilizar el símbolo asterisco como

comodín para poder hacer referencia a todas las clases ubicadas dentro del paquete

mediotransporte:

import introduccion.*;

om
Con ésta instrucción no importa el contenido de los paquetes interiores a introduccion, (lo que

quiere decir que si la clase Herencia está dentro del subpaquete paquete

.c
introduccion.subintroduccion, no sería importada, ya que el paquete subintroduccion no ha sido

yl
importado. El ejemplo completo sería

ec
import introduccion.*;
at
m
import introduccion.subintroduccion.*
or

Cuando desde un programa se hace referencia a una determinada clase se busca ésta en el paquete
.f

en el que está colocada la clase y, sino se encuentra, en los paquetes que se han importado al
al

programa. Si ese nombre de clase se ha definido en un solo paquete, se usa. Si no es así podría
tu

haber ambigüedad por ello se debe usar un prefijo delante de la clase con el nombre del
r
vi

paquete.
s
pu

Visibilidad
m

Las clases son visibles en el mismo paquete a no ser que se las haya declarado con el modificador
ca

private.

Para que una clase pertenezca a un determinado paquete, debemos incluir antes de la clase la

palabra reservada package.

package nombrepaquete;

public class MiClase

campusvirtual.formatecyl.com
8 / 109
[AFO018307] IFCD033PO JAVA
[MOD016498] IFCD033PO JAVA
[UDI095804] PROGRAMACIÓN DE APLICACIONES CON JAVA

//CODIGO DE LA CLASE

Para poder compilar un paquete será necesario crearnos un subdirectorio dentro del sistema de

ficheros con el mismo nombre de paquete que hayamos pensado.

Los paquetes se suelen escribir todos en minúscula y las clases en Mayúscula, es una buena

práctica hacerlo así para mantener la coherencia del lenguaje de Java.

om
Veamos un ejemplo rápido:

.c
package paqueteprueba;

yl
ec
public class PruebaPaquete

{ at
m
or

public static void main(String[] args)


.f

{
al
tu

System.out.println("Estoy en el paqueteprueba");
r

}
s vi

}
pu

Si lo que queremos que nuestra clase sea visible a través desde dentro de una clase o sus hijas
m

especificaremos que su visibilidad o privacidad sea protected. Si no se especifica ningún tipo, por
ca

defecto se asigna package, éste tiene acceso de la misma forma que protected.

package nombrepaquete;

class MiClase

//CODIGO DE LA CLASE

campusvirtual.formatecyl.com
9 / 109
[AFO018307] IFCD033PO JAVA
[MOD016498] IFCD033PO JAVA
[UDI095804] PROGRAMACIÓN DE APLICACIONES CON JAVA

Como ejemplo utilizaremos el IDE Netbeans (hablraremos de IDE más adelante) para crear una

clase y utilizar un paquete llamado paqueteprueba que encapsulará nuestra clase. Debemos

crearnos un directorio llamado igual en nuestro sistema de ficheros.

om
.c
yl
ec
at
A la hora de compilar lo podremos realizar a través del IDE o a través de terminal a través del
m
comando javac , lo realizaremos a través de terminal, para ello nos debemos situar en el directorio
or

inmediatamente anterior (PracticasJava) y ejecutar la siguiente sentencia:


.f

javac paqueteprueba\PruebaPaquete.java
al
tu

Se creará la clase con el paquete ya incluido:


r
s vi
pu
m
ca

Ahora se nos ha generado el fichero class dentro del directorio paqueteprueba, solamente nos

quedaría ejecutar la instrucción para visualizar la aplicación ya compilada. Para ello, debemos

escribir el nombre del paquete seguido del nombre de la clase.

java paqueteprueba.PruebaPaquete

Y como vemos, el resultado es la clase compilada dentro de un paquete:

campusvirtual.formatecyl.com
10 / 109
[AFO018307] IFCD033PO JAVA
[MOD016498] IFCD033PO JAVA
[UDI095804] PROGRAMACIÓN DE APLICACIONES CON JAVA

om
.c
Si realizamos su ejecución a través del comando java tenemos algo como lo siguiente:

yl
ec
at
m
or
.f
al
tu
r
s vi
pu
m
ca

campusvirtual.formatecyl.com
11 / 109
[AFO018307] IFCD033PO JAVA
[MOD016498] IFCD033PO JAVA
[UDI095804] PROGRAMACIÓN DE APLICACIONES CON JAVA

Programación orientada a objetos

Para poder empezar tenemos que mencionar que es un paradigma de programación, siendo este

una propuesta tecnológica que es adoptada por una comunidad de programadores, cuyo núcleo

central es incuestionable. Hoy en día el paradigma más utilizado es el de orientación a objetos

para Programar y prácticamente lo podemos encontrar en la mayoría de los lenguajes de

programación más utilizados: Java, PHP, C++, etc.

om
Su núcleo central es la unión de datos y procesamiento en una entidad llamada objeto y que está

basado en varias técnicas, incluyendo:

.c
yl
Herencia: Relación jerárquica entre dos clases por la que una clase hereda los métodos y

ec
propiedades de otra/s clase/s.

at
Polimorfismo:Capacidad de una variable para referenciar a objetos de distinta naturaleza de
m
forma que el objeto real no se conoce hasta tiempo de ejecución
or

Encapsulamiento: Capacidad de agrupar diversos elementos en uno solo cuyos límites están

bien definidos.
.f

Abstracción:Extraer las propiedades relevantes del dominio de un problema ignorando los


al

detalles concretos.
rtu
vi

Pero, ¿qué es realmente la orientación a objetos? La orientación a objetos es una forma de


s

programar que rompe con la forma de programar clásica.


pu

En un entorno clásico de programación el problema o sistema que se está analizando se divide en


m

funciones: este sistema hace esto, esto y esto.


ca

Para llevar a cabo el análisis con la programación orientada a objetos hay que tener en cuenta que

los programas se codifican pensando en objetos que interactúan.

Los objetos tendrán unas determinadas propiedades y serán capaces de hacer ciertas cosas

mediante los métodos que se les hayan definido.

Si se hace un buen diseño de los objetos y de las clases, se podrán usar en nuevos programas y

proyectos fácilmente, favoreciendo la reusabilidad.

campusvirtual.formatecyl.com
12 / 109
[AFO018307] IFCD033PO JAVA
[MOD016498] IFCD033PO JAVA
[UDI095804] PROGRAMACIÓN DE APLICACIONES CON JAVA

[[[Elemento Multimedia]]]
Cuando se diseña o analiza un sistema software relativamente complejo, se suele dividir en partes

más sencillas y diferenciables, llamadas módulos. A esta técnica de análisis se la conoce como

Modularidad.

El objetivo de la modularidad no es otro que hacer más sencillas las labores de desarrollo y

testeo del sistema, ya que podrán diferenciarse y repartirse mejor las tareas de desarrollo, lo que en

la práctica se traduce en poder realizar en paralelo el desarrollo de los módulos, con la ventaja con

om
respecto al ahorro de tiempo que supone, y además se podrá testear de manera independiente el

funcionamiento de cada módulo por separado y finalmente el comportamiento del sistema al

.c
completo, con la facilidad para detectar y corregir errores que lleva implícito el haber dividido el

yl
sistema en módulos más sencillos.

ec
Basicamente es un sistema software formado por piezas que deben encajar perfectamente. En el
at
diseño orientado a objetos, la pieza más pequeña es la clase. A su vez, las clases se agrupan en
m
paquetes, y así sucesivamente hasta llegar al sistema completo.
or
.f
al
tu
r
s vi
pu
m
ca

Sistema de módulos de Java diseñado en lenguaje UML

Distinción del concepto de módulo en el paradigma orientado a objetos

Para distinguir el concepto de módulo en el paradigma orientado a objetos vamos a ver un ejemplo

real, y para ello vamos a suponer una aplicación empresarial Java EE.

campusvirtual.formatecyl.com
13 / 109
[AFO018307] IFCD033PO JAVA
[MOD016498] IFCD033PO JAVA
[UDI095804] PROGRAMACIÓN DE APLICACIONES CON JAVA

Este tipo de aplicaciones están basadas en el paradigma orientado a objetos y están formadas por un

conjunto de módulos donde cada módulo es un conjunto de uno o más componentes que se ejecutan

en el mismo contenedor.

Un componente es un elemento de software. Podría ser un componente web como una página

JSP o un servlet, un componente EJB, etc. Los componentes se ejecutan dentro de su

correspondiente contenedor.

om
El contenedor es un entorno de ejecución que gestiona los componentes, por eso, los

componentes deben de cumplir un contrato que establece el contenedor. Ese contrato no es más que

.c
un conjunto de métodos que se deben implementar en el componente y que permite al contenedor

yl
interactuar con él.

ec
El contenedor es el encargado de gestionar el ciclo de vida de los componentes, realizar la reserva

de recursos, etc. at
m
Los módulos podrán agruparse según la funcionalidad que desempeñen, así pues, siguiendo con el
or

ejemplo de la aplicación empresarial Java EE, los módulos que forman la misma pueden ser de tres
.f

tipos:
al
tu
r

Archivos JAR (Java Archive)


s vi

Los archivos JAR permiten agrupar distintos archivos .java en uno solo. Es el empleado
pu

para empaquetar componentes EJBs.

Archivos WAR (Web Application Archive)


m
ca

Los archivos WAR permiten empaquetar en una sola unidad aplicaciones web completas
(servlets, páginas JSPs, contenido estático como imágenes y otros recursos Web).

Archivos EAR (Enterprise Application Archive)

Los archivos EAR son archivos desplegables en servidores de aplicaciones JEE.


Contienen archivos WAR y EJBs empaquetados en ficheros JAR.

Conjunto de datos que definen un objeto y conjunto comportamientos que pueden

solicitarse a los objetos

campusvirtual.formatecyl.com
14 / 109
[AFO018307] IFCD033PO JAVA
[MOD016498] IFCD033PO JAVA
[UDI095804] PROGRAMACIÓN DE APLICACIONES CON JAVA

En la programación orientada a objetos, el sistema se divide en objetos o entidades que podemos

encontrar en la realidad.

Veamos un ejemplo. Imagine que está realizando la simulación de un coche.

Realizando una descomposición funcional del coche, podría hablar de:

Arrancar y apagar.

Girar a la izquierda y a la derecha.

om
Cambiar de marcha.

.c
Moverse hacia delante.

yl
Moverse hacia atrás.

ec
Aumentar la velocidad.

Disminuir la velocidad.

...
at
m
or

Si pensara en objetos, hablaría de: El coche dispone de un motor que se puede arrancar y apagar
.f

utilizando para ello el contacto.


al
tu

Además, el coche dispone de un volante que permite que nos desplacemos en una determinada

dirección: derecha o izquierda. Al aumentar la velocidad utilizando el acelerador, debemos cambiar


r
vi

a una marcha más alta. Si reducimos la velocidad con el freno, puede que sea conveniente cambiar a
s

una marcha inferior.


pu

Una representación de una clase Automovil con todos sus métodos en lenguaje UML es el
m

siguiente:
ca

campusvirtual.formatecyl.com
15 / 109
[AFO018307] IFCD033PO JAVA
[MOD016498] IFCD033PO JAVA
[UDI095804] PROGRAMACIÓN DE APLICACIONES CON JAVA

om
.c
yl
ec
at
m
or
.f

Si queremos crear un objeto de dicha clase, por ejemplo, objeto audi, solo tendremos que acceder a
al

dicha clase escribiendo Automovil.audi


tu

Observe cómo en la descomposición funcional nos hemos fijado en lo que debería hacer el coche,
r
vi

mientras que en la descomposición en objetos nos hemos centrado en qué elementos podemos
s

encontrar: motor, volante, acelerador, freno, caja de cambios, etc.


pu

Al pensar en objetos en lugar de en funciones, usted se acerca más a la realidad, ya que es la forma
m

en que lo haría en cualquier otra situación cotidiana.


ca

De esta forma, una vez encontrados los objetos que intervienen, podremos asignarles las tareas

que tienen que realizar.

La manera que tienen los objetos de poder Interactuar entre sí es mediante el envío de solicitudes o

peticiones de que hagan algo. Esto evita que sea necesario que un objeto tenga que conocer como

internamente gestiona o implementan el resto de objetos sus solicitudes.

Lo que hará por tanto un objeto será enviar un mensaje con una solicitud. Dicho mensaje incluirá el

campusvirtual.formatecyl.com
16 / 109
[AFO018307] IFCD033PO JAVA
[MOD016498] IFCD033PO JAVA
[UDI095804] PROGRAMACIÓN DE APLICACIONES CON JAVA

nombre del objeto, la operación o función que debe realizar y, si es necesario, los parámetros

necesarios para llevar a cabo la operación.

Los objetos pueden contener en su estructura interna a más subobjetos, con sus

correspondientes funcionalidades, lo que puede hacer que a veces resulte compleja su estructura,

pero cuando su utilice un objeto no será necesario conocerla, ya que simplemente interactuaremos

con él mediante el paso de mensajes.

om
.c
yl
ec
at
m
Concepto de mensaje
or
.f
al
tu

Comenzar Actividad
r
vi

Relaciona los elementos de la columna Derecha con la columna Izquierda


s
pu

El objetivo de la modularidad no 1 hacer más sencillas las labores de


es otro que desarrollo y testeo del sistema.
m
ca

Un componente 2 es un elemento de software.

Los objetos pueden contener en 3 a más subobjetos.


su estructura interna

Acabamos de realiza un repaso a diferentes conceptos de la orientación a objetos.

campusvirtual.formatecyl.com
17 / 109
[AFO018307] IFCD033PO JAVA
[MOD016498] IFCD033PO JAVA
[UDI095804] PROGRAMACIÓN DE APLICACIONES CON JAVA

Paradigma.

La orientación a objetos es una forma de programar que rompe con la forma de programar clásica,

esta programación codifica pensando en objetos que interactúan. Cada objeto tendrá unas

determinadas propiedades y serán capaces de realizar ciertas cosas a través de los métodos

definidos.

La ventaja de este tipo de programación es que si realizamos un buen diseño, este lo podremos

reutilizar en futuros proyectos con mayor facilidad sin tener que volver a generarlos.

om
Para diseñar o analizar un software complejo, se suele dividir en varios módulos. La tarea de

.c
modularidad no es más que simplificar la programación para hacerla más sencilla, diferenciando los

yl
diferentes módulos y repartiendo las tareas de desarrollo.

ec
Esto genera un ahorro de tiempo y la ventaja de poder testear el funcionamiento de cada módulo de

manera independiente. at
m
or
.f
al
tu
r
s vi
pu
m
ca

La orientación a objetos pretende acercar el comportamiento de entidades del mundo cotidiano a

los lenguajes de programación. Ponemos como ejemplo un coche, este tiene ciertas características

comunes entre otros coches, pero otras son distintas y específicas. Estas características pueden

heredarse de otras que están por encimas de ellas.

Cuestiones a debatir:

campusvirtual.formatecyl.com
18 / 109
[AFO018307] IFCD033PO JAVA
[MOD016498] IFCD033PO JAVA
[UDI095804] PROGRAMACIÓN DE APLICACIONES CON JAVA

¿Cuál crees que es el punto más importante en el desarrollo de un software?

¿Crees que es útil la forma de programar orientada a objetos?

¿Es funcional el sistema de módulos?

¿Crees que es acertado el ejemplo propuesto de “coche” como objeto programable?

JAVA fue creado como una herramienta de programación para ser usada en un proyecto de set-top-

om
box en una pequeña operación denominada the Green Project en Sun Microsystems en el año 1991.

El Green Team, el cual está compuesto por 13 personas contando con James Gosling a la cabeza,

.c
trabajó durante 18 meses en Sand Hill Road en Menlo Park en su desarrollo.

yl
El lenguaje fue denominado de manera iniciar como Oak (nombre que fue dado gracias a un roble

ec
que había fuera de la oficina), después cambió su denominación a "Green" tras descubrir que Oak
at
era una marca comercial de adaptadores de tarjetas gráficas, así que posteriormente cambió su
m
nombre al de JAVA.
or

Es frecuentada por algunos de los miembros del equipo. Lo que no está claro es de si se trata de un
.f

acrónimo o no, aunque hay ciertas fuentes que hacen indicar que son las iniciales de sus
al

diseñadores: J ames Gosling, A rthur V an Hoff, y A ndy Bechtolsheim. Otros apuestan por el
tu

siguiente acrónimo, J ust A nother V ague A cronym ("sólo otro acrónimo ambiguo más"). La
r
vi

hipótesis que suena con más fuerza es que el nombre de JAVA hace referencia a un tipo de café que
s

se servía en un bar cercano, de ahí que el icono sea una taza de café desprendiendo vapor. Otra
pu

pista pueden ser los 4 primeros bytes de los archivos .class, bytes que en exadecimal nos dan lo
m

siguiente 0xCAFEBABE. Y a pesar de todas estas teorías, parece que el nombre fue sacado de una
ca

lista aleatoria.

Lo que Gosling pretendía hacer es implementar una máquina virtual (MV) con una estructura y

lenguaje que fuese similar a la de C++. Entre los meses de junio y julio del año 1994, tras una

enorme sesión de varios días de John Gaga, James Gosling, Patrick Naughton, Wayne Rosing y Eric

Schmidt, el equipo reorientó la plataforma hacia el entorno web. Previeron que la llegada de Mosaic

(un navegador web) haría que internet se convirtiese en un medio interactivo. Naughton se puso

manos a la obra y creo un prototipo de navegador web llamado "WebRunner", al que más tarde se le

conocería con el nombre de HotJAVA.

campusvirtual.formatecyl.com
19 / 109
[AFO018307] IFCD033PO JAVA
[MOD016498] IFCD033PO JAVA
[UDI095804] PROGRAMACIÓN DE APLICACIONES CON JAVA

Allá por el año 1994 a los altos cargos de Sun se les hizo una demostración de HotJAVA. La primera

versión de JAVA pudo descargarse por primera vez allá por el año 1994, pero no fue hasta el 23 de

mayo del año siguiente cuando se vieron las versiones públicas de JAVA y HotJAVA, el navegador

Web. El acontecimiento fue anunciado por John Gage, el Director Científico de Sun Microsystems.

Además, el acto contó con una sorpresa, Marc Andreessen, vicepresidente ejecutivo de Netscape,

anunció que su navegador soportaría JAVA El 9 de enero de 1996, SUN fundó el grupo JavaSoft para

encargarse de toda la parte del desarrollo tecnológico. Fue dos semanas más tarde cuando la

primera versión de JAVA fue publicada.

om
La promesa inicial, si recordamos era aquella que decía "Write Once, Run Anywhere", haciendo que

.c
el lenguaje de programación sea independiente a la plataforma, y proporcionando una máquina

yl
virtual de ejecución para aquellas plataformas más populares logrando así que el código pudiese ser

ec
ejecutado en cualquier plataforma.

at
El entorno de ejecución era algo relativamente seguro, así que los principales navegadores
m
empezaron a dar soporte a la ejecución de applets JAVA dentro de las propias páginas web.
or
.f

Java ha experimentado numerosos cambios desde la versión primigenia, JDK 1.0, así como un gran
al

incremento en el número de clases y de paquetes que forman la biblioteca base.


tu

Desde la versión J2SE 1.4, todo cambio en el lenguaje ha sido regulada por la "JAVA Community
r
vi

Process" (JCP), la cual se basa en Java Specification Requests (JSRs) para proponer cambios futuros
s

a la plataforma. El lenguaje está especificado en la JLS (la "JAVA Language Specification). Los
pu

cambios en los JLS son gestionados en JSR 901.


m

JDK 1.0 (23 de enero de 1996) — Primer lanzamiento: y comunicado de prensa


ca

JDK 1.1 (19 de febrero de 1997) — Principales adiciones incluidas: comunicado de prensa

una reestructuración intensiva del modelo de eventos AWT (Abstract Windowing

Toolkit)

clases internas (inner classes)

JavaBeans

JDBC (Java Database Connectivity), para la integración de bases de datos

campusvirtual.formatecyl.com
20 / 109
[AFO018307] IFCD033PO JAVA
[MOD016498] IFCD033PO JAVA
[UDI095804] PROGRAMACIÓN DE APLICACIONES CON JAVA

RMI (Remote Method Invocation)

J2SE 1.2 (8 de diciembre de 1998) — Nombre clave Playground. Tanto esta como las

siguientes versiones fueron recogidas bajo la versión Java 2 y el nombre "J2SE" (Java 2

Platform, Standard Edition), reemplazó a JDK para diferenciar la plataforma base de J2EE (Java

2 Platform, Enterprise Edition) y la J2ME (Java 2 Platform, Micro Edition). Otras mejoras

añadidas incluían:

om
la palabra reservada strictfp

.c
reflexión en la programación

yl
una API gráfica denominada Swing, que fue integrada en las clases básicas

ec
la máquina virtual (JVM) de Sun que fue equipada con un compilador JIT (Just in

Time) por primera vez

Java Plug-in
at
m
Java IDL, una implementación de IDL (Lenguaje de Descripción de Interfaz) para la
or

interoperabilidad con CORBA


.f

Colecciones (Collections)
al
rtu

J2SE 1.3 (8 de mayo de 2000) — Nombre clave Kestrel. Los cambios más destacables fueron:
vi

la incorporación de la máquina virtual de HotSpot JVM (la cual fue lanzada


s
pu

inicialmente en abril de 1999, para la JVM de J2SE 1.2)

RMI fue modificado para que se basase en CORBA


m

JavaSound
ca

se insertó el Java Naming and Directory Interface (JNDI) en el paquete que contiene

las bibliotecas principales (la cual estaba disponible anteriormente mediante una

extensión)

Java Platform Debugger Architecture (JPDA)

J2SE 1.4 (6 de febrero de 2002) — Nombre en Clave Merlin. Fue el primer lanzamiento de la

plataforma JAVA desarrollado bajo el control de la comunidad JAVA como JSR 59. Los cambios

campusvirtual.formatecyl.com
21 / 109
[AFO018307] IFCD033PO JAVA
[MOD016498] IFCD033PO JAVA
[UDI095804] PROGRAMACIÓN DE APLICACIONES CON JAVA

más notables fueron:

LA inserción de la palabra reservada assert (Especificado en JSR 41.)

Expresiones regulares diseñadas al estilo de las expresiones regulares del lenguaje

de programación Perl

Encadenación de excepciones, la cual permite a una excepción encapsular la

excepción de bajo nivel original.

non-blocking NIO (New Input/Output) (Especificado en JSR 51.)

om
Logging API (Specified in JSR 47.)

Una API I/O para lectura y escritura de imágenes en formatos JPEG o PNG

.c
Un "parser" de XML y un procesador XSLT especificado en JSR 5 y JSR 6

yl
Extensiones criptográficas (JCE, JSSE, JAAS) y seguridad integrada

ec
Java Web Start incluido (El primer lanzamiento se dio lugar en marzo de 2001 para

J2SE 1.3) (Especificado en JSR 56.)


at
m
or

J2SE 5.0 (30 de septiembre de 2004) — Nombre clave: Tiger. (Originalmente numerado 1.5,
.f

esta notación aún es usada internamente.) Desarrollado bajo JSR 176, Tiger incorporó un gran
al

un número de nuevas características


tu

Plantillas (genéricos) — provee de una conversión de tipos (type safety) durante el


r
vi

tiempo de compilación para las colecciones y elimina la necesidad de la mayoría de


s

conversión de tipos (type casting). (Especificado por JSR 14.)


pu

Metadatos — también conocidos como anotaciones, concede a estructuras del


m

lenguaje como puedan ser las clases o los métodos, ser etiquetados con algunos
ca

datos adicionales, que puedan ser procesados posteriormente por utilidades de

proceso de metadatos. (Especificado por JSR 175.)

Autoboxing/unboxing — Conversiones entre tipos primitivos (int) de manera

automática y clases también de envoltura primitiva (Integer). (Especificado por JSR

201.)

Enumeraciones — la palabra reservada 'enum' crea un 'typesafe', una lista ordenada

de valores (Dia.LUNES, Dia.Martes...). "Antiguamente", esto solo podía ser hecho por

constantes de tipo int o por clases construidas de forma manual (enum pattern).

campusvirtual.formatecyl.com
22 / 109
[AFO018307] IFCD033PO JAVA
[MOD016498] IFCD033PO JAVA
[UDI095804] PROGRAMACIÓN DE APLICACIONES CON JAVA

(Especificado por JSR 201.)

Varargs (número de argumentos variable) — El último parámetro puede ser indicado

mediante el tipo de la variable y usar tres puntos para indicar el nombre de la

variable (p.e. void drawtext(String... lines)). Cuando el método sea llamado con un

número indeterminado de parámetros, dichos parámetros serán almacenados en un

array.

Bucle for mejorado — Se ha extendido la sintaxis para el bucle for, de manera que

sea posible iterar sobre cualquier clase que implemente Iterable, como la clase

om
estándar Collection de la siguiente forma:

.c
yl
ec
at
m
or

En este ejemplo el bucle for itera sobre el objeto Iterable widgets, asignando en orden, cada uno de
.f

sus elementos a la variable w, y llamando al método display() de cada uno de ellas. (Especificado por
al

JSR 201.)
r tu

Java SE 6 (11 de diciembre de 2006) — Nombre clave Mustang. Estuvo en desarrollo bajo la
vi

JSR 270. Para esta versión, SUN cambió el nombre "J2SE" por Java SE y eliminó el ".0" del
s
pu

número de la versión.[3]. Está disponible en http://java.sun.com/javase/6/. Los cambios más

destacables de esta versión son:


m
ca

Incorpora un nuevo marco de trabajo y APIs que hacen posible la combinación de

JAVA con otros lenguajes de programación como puedan ser PHP, Python, Ruby y

JavaScript.

También incorpora el motor Rhino, de Mozilla, una implementación de JavaScript

dentro de Java.

Incluye por completo un cliente de Servicios Wev y soporta las últimas

especificaciones para los servicios web, como puedan ser JAX-WS 2.0, JAXB 2.0,

STAX y JAXP.

campusvirtual.formatecyl.com
23 / 109
[AFO018307] IFCD033PO JAVA
[MOD016498] IFCD033PO JAVA
[UDI095804] PROGRAMACIÓN DE APLICACIONES CON JAVA

Mejoras en la interfaz gráfica y en el rendimiento en general.

Java SE 7 — Nombre clave Dolphin. Aún se encontraba en las primeras etapas de planificación

allá por el año 2006. Su lanzamiento definitivo fue en julio de 2011.

XML soportado en el propio lenguaje.

Un nuevo concepto de "superpaquete".

Soporte para closures.

om
Anotaciones estándares para detectar fallos del software.

.c
No oficiales:

yl
NIO2.

ec
Java Module System.

Java Kernel. at
m
Una nueva API para poder hacer usos de Días y Fechas, la cual es un reemplazo de
or

las antiguas clases Date y Calendar.


.f

Posibilidad de operar con clases BigDecimal usando operandos.


al
tu

Java SE 8 — fue lanzada en marzo de 2014. Cabe resaltar:


r
vi

Incorpora de forma completa la librería JavaFX.


s
pu

Mejoras en seguridad varias.

Mejoras en la concurrencia.
m

Añade funcionalidad para programación funcional mediante expresiones Lambda.


ca

Mejora la integración de JavaScript.

Nuevas API para el manejo de las fechas y del tiempo (date - time).

Java SE 9 — fue lanzada el 21 de Septiembre de 2017:

Inclusión de modularización a los programas, permitiendo reducir el tamaño del

proyecto.

Uso de JShell, herramienta interactiva donde se pueden probar segmentos de código

en vez de seguir todo el proceso creación de un programa en Java.

campusvirtual.formatecyl.com
24 / 109
[AFO018307] IFCD033PO JAVA
[MOD016498] IFCD033PO JAVA
[UDI095804] PROGRAMACIÓN DE APLICACIONES CON JAVA

Borrado de JavaDB del JDK

Se crea la herramienta jlink (javaLinker), crea una herramienta que pueden

ensamblar y optimizar un conjunto de módulos y sus dependencias en una imagen en

tiempo de ejecución. Permitiendo incluir la JVM para su ejecución.

Java SE 10— lanzada el 20 de marzo de 2018, incorpora doce nuevas funcionalidades,

destancando las siguientes características:

Inferencia de tipo de variable local

om
Compilador JIT experimental basado en Java

Intercambio de datos de clase de aplicación

.c
Eliminación de herramienta de generación de encabezados nativos

yl
Extensión adicional de etiquetas de idioma Unicode

ec
Java SE 11— lanzada el 25 de septiembre de 2018, incluye características como :
at
m
Creación de Epsilon, recolector de basura
or

Se han eliminado de JDK los módulos JavaFX, Java EE y CORBA

Cliente HTTP
.f
al

Perfil de pila de baja sobrecarga


tu

Compatibilidad con UniCode 10.0.0


r

Java SE 12— se lanzó el 19 de marzo de 2019, incluyendo características tales como :


vi

Microbenchmark Suite
s
pu

Cambio de expresiones

Un perto AArch64
m

API de constantes JVM


ca

En ingeniería de software, SOLID (Single responsibility, Open-closed, Liskov substitution,

Interface segregation and Dependency inversion) es un acrónimo mnemónico introducido por

Robert C. Martin a principios de la década de los 2000 que representan cinco principios básicos de

la programación orientada a objetos y el diseño. Cuando estos principios son aplicados como un

conjunto, es más probable que un desarrollador cree un sistema que a lo largo del tiempo sea fácil

de mantener y de ampliar. Los principios SOLID son guías que podemos usar en el desarrollo de un

campusvirtual.formatecyl.com
25 / 109
[AFO018307] IFCD033PO JAVA
[MOD016498] IFCD033PO JAVA
[UDI095804] PROGRAMACIÓN DE APLICACIONES CON JAVA

software, que nos ayudará a eliminar el código sucio provocando que el programador tenga que

refactorizar el código fuente hasta que sea legible. Debería de ser utilizado en el desarrollo guiado

por pruebas o TDD, y además forma parte de la estrategia global del desarrollo ágil de software y

desarrollo adaptativo de software.

El principio de responsabilidad única indica que cada módulo o clase de contar con una

responsabilidad sobre una sola parte de la funcionalidad por el software y esta responsabilidad debe

estar encapsulada en su totalidad por la clase. Todos sus servicios deben estar estrechamente

om
alineados con esa responsabilidad. Robert C. Martin expresa dicho principio de la siguiente forma:

.c
Una clase debe tener solo una razón para cambiar.

yl
El principio de abierto/cerrado establece que «una entidad de software (clase, módulo, función, etc.)

ec
debe quedarse abierta para su extensión, pero cerrada para su modificación». En otras palabras, se

at
debe de poder ampliar el comportamiento de la entidad sin tener que modificar su código fuente.
m
abierto/cerrado es utilizado de dos maneras: las dos se basan en la herencia para poder resolver el
or

aparente dilema, pero tanto como sus objetos, técnicas y sus resultados son diferentes.
.f
al

Principio de sustitución de Liskov es un principio de la programación orientada a objetos y puede


tu

definirse como: Es posible usar como su padre cada clase que hereda de otra sin la necesidad de
r

conocer las diferencias entre ellas.


s vi

En un lenguaje más formal: si S es un subtipo de T, entonces todos los objetos de tipo T en un


pu

programa podrán ser sustituidos por objetos de tipo S (en otras palabras, los objetos de tipo S
m

pueden sustituir a los de tipo T), sin cambiar ninguna de las propiedades deseables del programa
ca

(como pueda ser la corrección, la tarea que realiza, etc.) De una manera más formal, el Principio de

Sustitución de Liskov (LSP), define de manera particular una relación de subtipificación, conocida

como tipificación del comportamiento, la cual fue introducida inicialmente por Barbara Liskov en

una conferencia allá por el año 1987 llamada "LA Abstracción de Datos y Jerarquía". Está más

referida a una relación de tipo semántico que a una de tipo sintáctico, ya que tan solo tiene la

intención de garantizar la interoperabilidad semántica de tipos dentro de una jerarquía, los tipos de

objeto en particular. Jeannette Wing y Liskov crearon el principio de manera conjunta en un artículo

en 1994 que dicta lo siguiente:

campusvirtual.formatecyl.com
26 / 109
[AFO018307] IFCD033PO JAVA
[MOD016498] IFCD033PO JAVA
[UDI095804] PROGRAMACIÓN DE APLICACIONES CON JAVA

El principio de segregación de la interfaz (ISP, por sus siglas en inglés) establece que los clientes de

un programa dado sólo deberían conocer de éste aquellos métodos que realmente usan, y no

aquellos que no necesitan usar. El ISP es aplicado a una interfaz amplia y compleja para así

seccionarse en otras más pequeñas y específicas, de tal forma que el cliente use tan solo la que

necesite, pudiendo así ignorar al resto. A este tipo de interfaces reducidas se les llama "interfaces de

om
rol".

El ISP fue concebido para mantener a un sistema desacoplado de los otros sistemas de los que

.c
depende, y que así resulte más fácil una refactorización, modificarlo y redesplegarlo. El ISP es uno

yl
de los cinco principios S.O.L.I.D. del Diseño Orientado a Objetos, similar al Principio de Alta

ec
Cohesión de GRASP.
at
El principio de inversión de dependencias está compuesto por los siguientes dos puntos:
m
or

A: Los módulos de alto nivel no deberían depender de los de bajo nivel. Los dos debería de
.f

depender de las abstracciones.


al

B: Ninguna abstracción debería depender de ningún detalle. Son los propios detalles los que
tu

deberían de depender de las abstracciones.


r
s vi

En el paradigma de la orientación a objetos, lo más normal es tener una jerarquía de objetos


pu

definida, porque los objetos de más alto nivel son los que suelen incluir a los de bajo nivel.
m
ca

Comenzar Actividad

Relaciona los elementos de la columna Derecha con la columna Izquierda

El principio de responsabilidad 1 establece que los clientes de un


única, programa dado sólo deberían
conocer de éste aquellos métodos
que realmente usan, y no aquellos
El principio de abierto/cerrado, 2 que no necesitan usar.

campusvirtual.formatecyl.com
27 / 109
[AFO018307] IFCD033PO JAVA
[MOD016498] IFCD033PO JAVA
[UDI095804] PROGRAMACIÓN DE APLICACIONES CON JAVA

El principio de segregación de la 3 establece que «una entidad de


interfaz software, debe quedarse abierta
para su extensión, pero cerrada
para su modificación».
¿Qué significa SOLID? 4

indica que cada módulo o clase de


contar con una responsabilidad
sobre una sola parte de la
funcionalidad por el software y
esta responsabilidad debe estar
encapsulada en su totalidad por la

om
clase.

.c
Single responsibility, Open-

yl
closed, Liskov substitution,
Interface segregation and

ec
Dependency inversion.

at
m
Encontramos diferentes principios básicos dentro de la orientación a objetos
or

como el principio de interfaz o el de abierto/cerrado.


.f
al
tu

Un bosque contiene árboles, que a su vez contienen hojas, que contienen células…
r
vi

Por eso se eligió la palabra “inversión”, porque rompe con esta dinámica.
s
pu

Los que en principio se pretende es que no exista una necesidad de dependencia entre unos módulos
m

y otros, sino que dependan de abstracciones. De esta forma, nuestros módulos pueden ser más
ca

fácilmente reutilizables.

Las aplicaciones cliente-servidor se basan en un paradigma que asigna roles diferenciados a dos

procesos que colaboran.

Por una parte tenderemos el servidor, que será el encargado de proporcionar un determinado

servicio. El servidor estará esperando a que le lleguen peticiones para pasar a atenderlas. El otro rol

será el de cliente, que le envía peticiones al servidor y queda a la espera de su respuesta.

Este paradigma servirá para facilitar los servicios de red de manera eficiente.

campusvirtual.formatecyl.com
28 / 109
[AFO018307] IFCD033PO JAVA
[MOD016498] IFCD033PO JAVA
[UDI095804] PROGRAMACIÓN DE APLICACIONES CON JAVA

Se puede implementar mediante sockets, llamada a procedimientos remotos (RPC) o invocación de

métodos remotos (RMI).

Sockets

Un Socket es un método para la comunicación entre un programa del cliente y un programa del

servidor en una red. Un socket se define como el punto final en una conexión El Socket es donde el

cliente o el servidor escriben la información que transferimos.

om
Las clases Socket y ServerSocket del paquete java.net aportan un medio de comunicación

independiente del sistema haciendo uso de TCP, cada una de las cuales incluye el lado del cliente y

.c
el servidor respectivamente.

yl
ec
En el siguiente ejemplo nos encargamos de leer la información que nos está entrando.

at
m
or
.f
al
tu
r
s vi
pu
m
ca

campusvirtual.formatecyl.com
29 / 109
[AFO018307] IFCD033PO JAVA
[MOD016498] IFCD033PO JAVA
[UDI095804] PROGRAMACIÓN DE APLICACIONES CON JAVA

om
.c
yl
ec
at
m
or
.f
al
tu
r
s vi
pu
m
ca

Los métodos de la clase Socket son:

getInputStream(): Abrir el canal de entrada de información

getOutputStream(): Abrimos el canal salida

close(): Cerramos el Socket

InetAddress getInetAddress() : Devuelve un objeto InetAddress con el nombre y la dirección de

la maquina a la que estamos conectados.

InetAdress ia:nombre_socket.getInetAdress();

campusvirtual.formatecyl.com
30 / 109
[AFO018307] IFCD033PO JAVA
[MOD016498] IFCD033PO JAVA
[UDI095804] PROGRAMACIÓN DE APLICACIONES CON JAVA

int getPort(): Devuelve el número de puerto al que estamos conectados.

int puerto = n_socket.getPort();

InetAdress getLocalAddress(): Devuelve nuestra dirección.

InetAdress a = nom_socket.getLocalAddress().

int getLocalPort(): Devuelve el puerto desde el que nos conectamos

int puerto = n_socket.getLocalPort();

om
Veamos un ejemplo de utilización de algunos de los métodos:

.c
yl
ec
at
m
or
.f
al
rtu
s vi
pu
m
ca

campusvirtual.formatecyl.com
31 / 109
[AFO018307] IFCD033PO JAVA
[MOD016498] IFCD033PO JAVA
[UDI095804] PROGRAMACIÓN DE APLICACIONES CON JAVA

om
.c
yl
ec
at
m
or
.f
al
tu
r
s vi
pu
m
ca

Podemos limitar el tiempo de espera del cliente a recibir del servidor, si no conecta o no recibe nada

salta la excepción y se desconecta, para que no esté esperando infinitamente y que se desconecte

tras el si no ha conseguido conectarse.

campusvirtual.formatecyl.com
32 / 109
[AFO018307] IFCD033PO JAVA
[MOD016498] IFCD033PO JAVA
[UDI095804] PROGRAMACIÓN DE APLICACIONES CON JAVA

om
.c
yl
ec
at
m
or
.f
al
tu
r
s vi
pu
m
ca

Las aplicaciones Java, gracias a que se ejecutan bajo la supervisión de la máquina virtual (JVM),

son controladas constantemente. En caso de que ocurra algún error de ejecución, se lanza una

excepción que puede ser recogida y tratada por el programador en su aplicación. De esta manera, lo

que antes solía terminar en una ejecución anormal del programa, con java puede ser resuelto.

Podemos clasificar las aplicaciones Java en tres grandes categorías:

campusvirtual.formatecyl.com
33 / 109
[AFO018307] IFCD033PO JAVA
[MOD016498] IFCD033PO JAVA
[UDI095804] PROGRAMACIÓN DE APLICACIONES CON JAVA

Applets: Normalmente son pequeños programas Java que se ejecutan en un navegador web en

el lado del cliente, que por tanto necesitará tener instalado el complemento de Java en su

navegador para poder ejecutarlo.

om
.c
yl
ec
at
m
or

Aplicaciones: Son aplicaciones de propósito general como las que podrían crearse con otro

lenguaje de programación.
.f
al
rtu
s vi
pu
m
ca

Servlets: Al contrario que los applets, estos programas están pensados para ejecutarse en el

campusvirtual.formatecyl.com
34 / 109
[AFO018307] IFCD033PO JAVA
[MOD016498] IFCD033PO JAVA
[UDI095804] PROGRAMACIÓN DE APLICACIONES CON JAVA

lado del servidor para poder desarrollar una aplicación Web que interactúe con la máquina de

los clientes.

om
.c
yl
ec
at
m
Podemos diferenciar las páginas dinámicas de las estáticas por una serie de factores:
or
.f

Las páginas dinámicas: Estas páginas son las más completas, ya que pueden incluir todo tipo
al

de plugins que una estática no podría. Esto es debido al uso de otros lenguajes de
tu

programación, y no únicamente con HTML. También es necesario más conocimientos de


r
vi

lenguajes de programación junto con una gestión de base de datos para almacenar la
s

información que se mostrará en cada una de las páginas dinámicas que crearemos.
pu

La principal ventaja es la versatilidad que ofrece, haciendo que nuestra página incluya de todo lo
m

que se pueda encontrar en la red.


ca

Las páginas estáticas: Están basadas en la construcción mediante HTML. Por ello no

permiten la inclusión de otras funciones con otros lenguajes. Lo positivo de estas páginas es

que con básicos conocimientos puedes lograr mostrar la información a los demás y publicar tu

contenido.

campusvirtual.formatecyl.com
35 / 109
[AFO018307] IFCD033PO JAVA
[MOD016498] IFCD033PO JAVA
[UDI095804] PROGRAMACIÓN DE APLICACIONES CON JAVA

Comenzar Actividad

Relaciona los elementos de la columna Derecha con la columna Izquierda

Applets 1 Están basadas en la construcción


mediante HTML. Por ello no
permiten la inclusión de otras
Páginas estáticas 2 funciones con otros lenguajes.

om
Servlets Estos programas están pensados
3
para ejecutarse en el lado del
servidor para poder desarrollar

.c
una aplicación Web que
interactúe con la máquina de los

yl
clientes.

ec
at
Son pequeños programas Java
que se ejecutan en un navegador
m
web en el lado del cliente, que por
tanto necesitará tener instalado el
or

complemento de Java en su
navegador para poder ejecutarlo.
.f
al
tu

Repasa los conceptos de la unidad.


r
s vi
pu
m
ca

campusvirtual.formatecyl.com
36 / 109
[AFO018307] IFCD033PO JAVA
[MOD016498] IFCD033PO JAVA
[UDI095804] PROGRAMACIÓN DE APLICACIONES CON JAVA

Instalación del entorno de desarrollo JDK

Para poder desarrollar software con Java necesitamos una serie de herramientas. Primero de todo

tendremos que descargarnos la distribución gratuita de Java Development Kit o JDK. Éste se trata

de un conjunto de programas y librerias que permiten desarrollar, compilar y ejecutar programas en

Java. Incorporando además la posibilidad de ejecutar parcialmente el programa, deteniendo la

ejecución en el momento deseado y estudiando en cada momento el valor de cada una de las

variables a través del llamado Debugger. Existe además una versión reducida de éste, siendo

om
denominada como Java Runtime Environment o JRE, destinada solamente a la ejecución de

.c
código Java sin la opción de compilar.

yl
A la hora de utilizar el JDK será de gran importancia la utilización de un IDE o Integrated

ec
Development Environment, que como su nombre indica se trata de un entorno de desarrollo

at
integrado, esto es, que es un programa es posible escribir código Java, compilarlo y ejecutarlo si
m
ntener que cambiar de aplicación y tener que utilizar una consola para su compilación. Algunos IDE
or

incluyen herramientas de depuración o debugger de forma gráfica. Estos entornos permiten la

realización de aplicaciones de forma más rápida y ligera, incorporando un amplio abanico de


.f
al

librerias contando con componentes ya desarrollados, los cuales se suelen incorporar al proyecto o
tu

programa en cuestión. Un inconveniente que se puede mencionar sería los fallos producidos a la

hora de realizar la compatibilidad de plataformas y ficheros resultantes de mayor tamaño que los
r
vi

basados en clases estándar.


s
pu

Instalación del JDK de Oracle.


m

Lo primero será descargarnos la herramienta de desarrollo JDK (Java Development Kit) de la


ca

siguiente dirección:

https://www.oracle.com/technetwork/java/javase/downloads/index.html

campusvirtual.formatecyl.com
37 / 109
[AFO018307] IFCD033PO JAVA
[MOD016498] IFCD033PO JAVA
[UDI095804] PROGRAMACIÓN DE APLICACIONES CON JAVA

om
.c
yl
ec
at
m
Buscaremos la versión correspondiente a nuestro sistema operativo. Aceptaremos los términos de
or

condiciones correspondientes y descargaremos la versión correpsondiente.


.f
al
tu
r
s vi
pu
m
ca

Se nos descargará un archivo, que será el isntalador del JDK:

campusvirtual.formatecyl.com
38 / 109
[AFO018307] IFCD033PO JAVA
[MOD016498] IFCD033PO JAVA
[UDI095804] PROGRAMACIÓN DE APLICACIONES CON JAVA

om
Pasaremos a su correspondiente instalación a través de dicho ejecutable.

.c
Nos encontramos con la primera ventana de introducción al instalador, donde le indicamos Next

yl
para comenzar con la instalación.

ec
at
m
or
.f
al
tu
r
s vi
pu
m
ca

A continuación nos aparece la opción de especificar la ruta de instalación por defecto la incluirá

dentro de la carpeta de Java.

campusvirtual.formatecyl.com
39 / 109
[AFO018307] IFCD033PO JAVA
[MOD016498] IFCD033PO JAVA
[UDI095804] PROGRAMACIÓN DE APLICACIONES CON JAVA

om
.c
yl
ec
at
m
or

Terminado de realizar la instalación nos aparecerá esta ventana con la realización de la instalación
.f

de forma exitosa, pulsamos close para finalziar.


al
tu
r
s vi
pu
m
ca

campusvirtual.formatecyl.com
40 / 109
[AFO018307] IFCD033PO JAVA
[MOD016498] IFCD033PO JAVA
[UDI095804] PROGRAMACIÓN DE APLICACIONES CON JAVA

Con esto ya tenemos la herramienta básica, el compilador que convertirá nuestros programas en

Java a algo que pueda ser utilziado desde cualquier otro equipo que tenga JVM incorporado.

Como JDK no incorpora un editor, necesitaremos hacer uso de un IDE, en este caso utilizaremos el

conocido IDE llamado Netbeans.

Instalación de Netbeans.

Para poder descargar Netbeans es necesario acceder a su página oficial y desde ahí descargar el

om
IDE Netbeans 8.2.

.c
https://netbeans.org/downloads/8.2/

yl
ec
Una vez que te encuentres en la página de NetBeans 8.2 accedemos a seleccionar el idioma y

seleccionar la plataforma, en nuestro caso Windows, seleccionando descargar todas las tecnologías a

descargar.
at
m
or
.f
al
tu
r
s vi
pu
m
ca

Automaticamente se generará un ejecutable que será nuestro instalador

campusvirtual.formatecyl.com
41 / 109
[AFO018307] IFCD033PO JAVA
[MOD016498] IFCD033PO JAVA
[UDI095804] PROGRAMACIÓN DE APLICACIONES CON JAVA

om
Para empezar con la instalación de Netbeans, ejecutaremos dicho archivo descargado y

.c
comenzaremos con la instalación

yl
ec
at
m
or
.f
al
tu
r
s vi
pu
m
ca

Aceptaremos los acuerdos de la licencia y pulsaremos Next

campusvirtual.formatecyl.com
42 / 109
[AFO018307] IFCD033PO JAVA
[MOD016498] IFCD033PO JAVA
[UDI095804] PROGRAMACIÓN DE APLICACIONES CON JAVA

om
.c
yl
ec
at
m
or
.f
al
tu

A continuación nos encontramos con dos rutas de instalación: el primero es la ruta que por defecto
r

aparece y Netbeans será instalado por defecto en esa ruta. La segunda es el programa Java JDK
vi

utilizado.
s
pu
m
ca

campusvirtual.formatecyl.com
43 / 109
[AFO018307] IFCD033PO JAVA
[MOD016498] IFCD033PO JAVA
[UDI095804] PROGRAMACIÓN DE APLICACIONES CON JAVA

om
.c
yl
ec
at
m
or
.f
al
tu

Realizado todo esto indicaremos Install y pasaremos a realizar su instalación. Cuando termine solo
r

es necesario pulsar Finish.


s vi
pu
m
ca

campusvirtual.formatecyl.com
44 / 109
[AFO018307] IFCD033PO JAVA
[MOD016498] IFCD033PO JAVA
[UDI095804] PROGRAMACIÓN DE APLICACIONES CON JAVA

om
.c
yl
ec
at
m
or
.f
al
tu
r
s vi
pu
m
ca

campusvirtual.formatecyl.com
45 / 109
[AFO018307] IFCD033PO JAVA
[MOD016498] IFCD033PO JAVA
[UDI095804] PROGRAMACIÓN DE APLICACIONES CON JAVA

om
.c
yl
ec
at
m
or
.f
al
tu

Tras la ejecución del programa de instalación, obtendremos en el directorio que hayamos


r

especificado para tal fin, la siguiente estructura de directorios:


s vi
pu
m
ca

campusvirtual.formatecyl.com
46 / 109
[AFO018307] IFCD033PO JAVA
[MOD016498] IFCD033PO JAVA
[UDI095804] PROGRAMACIÓN DE APLICACIONES CON JAVA

om
.c
yl
ec
at
A continuación, describimos los directorios y ficheros más importantes
m
or

La carpeta build contiene las clases compiladas (.class)


.f

En la carpeta dist se crea un archivo comprimido con la extensión ".jar" que contiene todos los
al

archivos necesarios para distribuir la aplicación generada y que pueda ser ejecutada.
tu

La carpeta src almacena los archivos con el código fuente (.java) que hemos escrito o que
r

forman parte de la aplicación.


s vi
pu

Configuración del sistema.


m

El JDK no necesita ninguna configuración específica, sin embargo, si queremos que nuestras
ca

aplicaciones funcionen debemos configurar unas variables de entorno que dependerán del

sistema operativo sobre el que estemos trabajando. Vamos a configurar las variables de

entorno para el sistema operativo Windows:

Para configurar las variables de entorno, buscamos en inicio: Variables de entorno de esta cuenta.

campusvirtual.formatecyl.com
47 / 109
[AFO018307] IFCD033PO JAVA
[MOD016498] IFCD033PO JAVA
[UDI095804] PROGRAMACIÓN DE APLICACIONES CON JAVA

Creamos una nueva llamada JAVA_HOME que tenga la ruta en la que se ha instalado el jdk.

om
.c
yl
ec
Creada esta, vamos a la variable PATH y le añadimos lo siguiente al inicio de manera que quede:

%JAVA_HOME%/bin;
at
m
or
.f
al
tu
r
s vi
pu
m

Bien, con estos pasos ya tendremos configuradas las variables de entorno para no tener ningún tipo
ca

de problema a la hora de compilar y ejecutar nuestros programas por consola.

campusvirtual.formatecyl.com
48 / 109
[AFO018307] IFCD033PO JAVA
[MOD016498] IFCD033PO JAVA
[UDI095804] PROGRAMACIÓN DE APLICACIONES CON JAVA

Edición, compilación y ejecución de programas

Compilación

Compilar el código fuente: La compilación del código fuente se realizará a través del compilador
proporcionado por el JDK (Java Development Kit). El compilador se llama javac y la sintaxis básica es:
C:\> javac FicheroFuente.java

om
NOTA: El fichero llamado FicheroFuente.java debe llamarse igual que la clase y es

imprescindible poner la extensión ".java" en el momento de escribir en la línea de comandos.

.c
Veremos el ejemplo práctico más adelante para entender el concepto de clase.

yl
ec
La compilación se realiza desde una ventana de CMD o desde el propio entorno que estemos usando,

at
el cual nos ocultará la ejecución de javac. El proceso de compilación requiere que el sistema

tenga configurada adecuadamente las variables de entorno para el correcto funcionamiento


m
del comando anterior. Como resultado de la compilación obtenemos el fichero de bytecodes que
or

tiene extensión ".class".


.f
al

Ejecutar la aplicación: Para ejecutar el fichero de bytecodes es necesario pasarlo por el


tu

intérprete adecuado. El intérprete depende del tipo de programa java que hayamos
r

implementado:
s vi
pu

Miniaplicaciones (applets) ( Es un componente y nosotros tenemos que preocuparnos tan sólo


m

de incluir el applet en una página HTML).


ca

Aplicación (texto o gráfica) Utilizaremos el intérprete proporcionado por el JDK que se llama

java Su sintaxis es:

C:\java FicheroBytecodes.class

NOTA: Cuando llamamos al intérprete java y al fichero ".class" no escribiremos el nombre de la

extensión "class", solamente debemos escribir el nombre del fichero compilado, pero

campusvirtual.formatecyl.com
49 / 109
[AFO018307] IFCD033PO JAVA
[MOD016498] IFCD033PO JAVA
[UDI095804] PROGRAMACIÓN DE APLICACIONES CON JAVA

manteniendo la diferencia entre mayúsculas y minúsculas.

om
.c
yl
ec
at
m
or
.f
al
tu
r
s vi
pu
m
ca

campusvirtual.formatecyl.com
50 / 109
[AFO018307] IFCD033PO JAVA
[MOD016498] IFCD033PO JAVA
[UDI095804] PROGRAMACIÓN DE APLICACIONES CON JAVA

Variables, tipos, clases y objetos

Comenzamos con la definicón más importante a la hora de trabajar con proyectos Java y es el

término clase, se trata de una abstracción que establece un tipo de objeto que especifica qué

propiedades (atributos) y operaciones disponibles va a tener.

Las partes habituales las identificamos en este esquema:

om
.c
yl
ec
at
m
or
.f
al
tu

A continuación puede verse su traducción a código Java:


r
s vi
pu
m
ca

campusvirtual.formatecyl.com
51 / 109
[AFO018307] IFCD033PO JAVA
[MOD016498] IFCD033PO JAVA
[UDI095804] PROGRAMACIÓN DE APLICACIONES CON JAVA

om
.c
yl
ec
at
m
or
.f
al
tu
r
s vi
pu
m

¿Para qué nos sirve la clase? Para crear objetos de tipo Taxi. Por eso se dice que en Java una
ca

clase define un tipo. Recordamos ahora la definición de clase que habíamos dado previamente:

“Clase: abstracción que define un tipo de objeto especificando qué propiedades y operaciones

disponibles va a tener.”

¿Por qué la clase, el constructor y los métodos se declaran public y los atributos private?

Esto lo discutiremos más adelante. De momento, nos basta con saber que declararemos las clases,

constructores y métodos precedidos de la palabra clave public, y que esta palabra afecta a en qué

partes del programa o por parte de quién se va a poder acceder a ellos (de la misma forma que en el

campusvirtual.formatecyl.com
52 / 109
[AFO018307] IFCD033PO JAVA
[MOD016498] IFCD033PO JAVA
[UDI095804] PROGRAMACIÓN DE APLICACIONES CON JAVA

edificio con personas trabajando hablábamos de que una impresora podía tener un uso restringido

para el personal de un departamento).

¿El orden campos --> constructor --> métodos es obligatorio? No, pero a la hora de programar

hemos de ser metódicos y evitar el desorden. La mayoría de los programadores a la hora de escribir

las clases utilizamos ese orden.

om
¿A qué es debido que un método a veces ocupe una línea y otros varias líneas? Es una mera

cuestión de espacio. Puedes escribirlo como quieras, siempre que quede bien presentado y legible.

.c
Hay que tener claro que un método cuenta de dos partes: el encabezado y un cuerpo o contenido

yl
que se encuentra entre llaves { }. En este curso hemos escrito métodos con una línea, o incluso

ec
varias instrucciones en una sola línea mediante la separación por punto y coma para ahorrar

at
espacio. Pero en nuestro trabajo como programador, el ahorro de espacio es algo totalmente
m
irrelevante, ya que es importante tener un código lo más limpio y claro posible para que todo
or

desarrollador pueda entenderlo.


.f
al
tu

¿Por qué indicamos el tipo de motor usando números enteros den lugar de usar un dato de
r

tipo string? A veces es posible definir las variables de manera diferente. En este caso nos resultaría
vi

también válido usar un String en vez de un int. Pero ten en cuenta una cosa: a los ordenadores les
s
pu

resulta más fácil analizar y manejar números que palabras. Si tenemos un número bajo de taxis no

nos afectará en prácticamente nada elegir un tipo de dato u otro. Pero si tenemos un número
m

exageradamente grande, el tipo numérico nos ayudará a que la aplicación sea más rápida.
ca

campusvirtual.formatecyl.com
53 / 109
[AFO018307] IFCD033PO JAVA
[MOD016498] IFCD033PO JAVA
[UDI095804] PROGRAMACIÓN DE APLICACIONES CON JAVA

om
.c
En Java una clase se suele representar con la siguiente estructura:

yl
ec
public class NombreClase{
// Esto es un comentario
/*
Esto es un comentario con multiples lineas
at
m
*/
// Definición de propiedades --> Características del elemento que describimos con la clase.
or

public int propiedadPublica; //<- Puede acceder cualquiera


private int propiedadPrivada; //<- Solo puede la clase
.f

protected int propiedadProtegida; //<- La clase y las que hereden de ella


static int propiedadProtegida; //<- Propiedad estatica accesible por cualquiera
al

// Definición de los métodos --> Comportamiento y funcionalidades del elemento.


tu

public void hacerAlgo(){//<-funcion publica que devuelve nada


//codigo de la funcion
r

}
vi

public int devuelveAlgo(){//<-funcion publica que devuelve un entero


return this.propiedadPrivada;//Devolvemos una propiedad
s

}
pu

}
m

Como se puede ver en Java las clases se definen con la palabra class seguido del nombre por la que
ca

queremos identificarla. Vamos a explicar una serie de palabras usadas junto a las propiedades y

métodos, estas controlan de qué manera se accede a la propiedad que acompañan:

public: indica que la propiedad es accesible desde fuera, por ejemplo podemos acceder a

propiedades de un objeto desde los métodos de clase pero también desde fuera de la clase

usando la variable del objeto y un punto, por ejemplo perro.colorPelo.

protected: ésta está relacionada con la herencia de objetos, una clase que herede de otra

puede acceder a esa propiedad pero no desde fuera de la clase padre.

campusvirtual.formatecyl.com
54 / 109
[AFO018307] IFCD033PO JAVA
[MOD016498] IFCD033PO JAVA
[UDI095804] PROGRAMACIÓN DE APLICACIONES CON JAVA

private: las propiedades con private solo son accesibles desde la clase en la que se define, no

pueden acceder clases que heredan ni desde fuera.

static: es una propiedad compartida entre todos los objetos creados a partir de la clase,

además es accesible a través de la propia clase sin requerir un objeto. Se puede usar junto a

public, protected y private.

final: la propiedad no puede ser alterada, en el caso de un tipo primitivo el valor no puede

cambiar, en cambio si posee una referencia a un objeto este si puede ser alterado pero no se

permitirá que cambie la referencia a otro objeto. Se puede utilizar junto con public, protected y

om
private.

.c
yl
Un método o también llamado función se define de manera similar a las propiedades, tiene
limitaciones en el acceso e incluso puede ser static, según el valor o objeto que devuelvan se indica

ec
con un nombre anterior al de la función, en caso de que no devuelvan nada se indica con void.
Hay que tener en cuenta de que la variable de un objeto no es el objeto en sí, sino una referencia, en
at
caso de que una función devuelva una propiedad privada con referencia a un objeto nos arriesgamos
m
de que más adelante el objeto pueda ser modificado y dichas modificaciones afecten de manera
or

inesperada al funcionamiento de otros componentes. Para evitar la modificación de un objeto


.f

referenciado por una propiedad privada se debe realizar una copia de dicho objeto y devolverlo, de
al

esta manera cualquier modificación realizada fuera de la clase no interferirá.


rtu
vi

En la anterior página hemos hecho uso de datos primitivos y de tipos, en Java toda variable tiene
s
pu

definido un tipo. Un tipo se puede entender como una identificación de que dato tiene la variable,

una variable puede hacer referencia a un objeto por lo que su tipo es el nombre de dicha clase. Sin
m

embargo no hay solo objetos en Java, una variable también puede contener un valor de un tipo
ca

concreto, a estos tipos los denominamos primitivos. Java incluye ocho tipos primitivos:

byte: es un numero entero que en memoria ocupa 8 bits. Sus valores van de -128 a 127.

short: es un entero de 16 bits. Su valor mínimo es -32,768 y el máximo 32,767.

int: es un entero de 32 bits. Su valor mínimo es -2,147,483,648 y el máximo 2,147,483,647

(inclusive). Es el tipo más usado para números enteros a menos que haya una razón para usar

otro como por ejemplo el ahorro de memoria.

long: es un entero de 64 bits. Su valor va de -9,223,372,036,854,775,808 a

campusvirtual.formatecyl.com
55 / 109
[AFO018307] IFCD033PO JAVA
[MOD016498] IFCD033PO JAVA
[UDI095804] PROGRAMACIÓN DE APLICACIONES CON JAVA

9,223,372,036,854,775,807. Obviamente se utiliza cuando int no alcanza el valor que se

requiere.

float: es un dato en coma flotante y precisión simple. No entraremos en detalle sobre cómo

funciona pero se utiliza para almacenar valores decimales que no requieran gran precisión ya

que pueden devolver producir cierto grado de error en la parte decimal.

double: dato en coma flotante de 64 bits y precisión doble. Similar a float pero admite un

mayor rango de valores, es comúnmente utilizado al tratar con valores decimales.

boolean: solo tiene dos valores posibles true (verdadero) y false (falso).

om
char: contiene un solo carácter Unicode de 16 bits.

.c
yl
A Java se le considera un lenguaje fuertemente tipado ya que obliga a indicar el tipo de cada

ec
variable, en el caso de otros lenguajes como PHP se pueden usar tipos pero no es obligatorio.

Aunque puede suponer una carga de trabajo adicional según la situación el uso de tipos ayuda a la

prevención de errores.
at
m
or

En el siguiente ejemplo podemos ver un fichero en java completo que contiene la definición de una
.f

clase, la clase definida tiene el nombre Coche:


al
tu

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.IOException;
r
vi

public class Coche {


s

private boolean estado = false;


pu

private int velocidad = ;


public final static int VMAXIMA = 120;
m

public static void menu() {


ca

System.out.println("1.- Montar en el coche");


System.out.println("2.- Comenzar");
System.out.println("3.- Parar");
System.out.println("4.- Salir del coche");
System.out.println("");
System.out.println("Introduzca una opción");

public void montar() {


if (estado == false) {
System.out.println("Ya estás encima del coche.");
estado = true;
} else {
System.out.println("Ya estabas arriba, no intentes subir otra vez.");

campusvirtual.formatecyl.com
56 / 109
[AFO018307] IFCD033PO JAVA
[MOD016498] IFCD033PO JAVA
[UDI095804] PROGRAMACIÓN DE APLICACIONES CON JAVA

}
menu();
}

public void comenzar() {


if (estado == false) {
System.out.println("Primero sube al coche");
} else if (velocidad == VMAXIMA) {
System.out.println("Ya no puedes acelerar más");

} else {
++velocidad;
System.out.println("Velocidad actual= " + velocidad);
}

om
menu();
}

.c
public void parar() {
if (velocidad == ) {

yl
System.out.println("Si estás parado porque frenas");
} else {

ec
System.out.println("El frenado se realiza de golpe");
velocidad = ;
}
menu(); at
m
}
or

public void salirCoche() {


.f

if (estado == false) {
System.out.println("No te has subido y ya te bajas");
al

} else if (velocidad != ) {
System.out.println("Primero frena y luego baja");
tu

} else {
System.out.println("Acabas de bajar del coche.");
r

}
vi

menu();
}
s
pu

public int getVelocidad(){


return this.velocidad;
}
m

public void setVelocidad(int v){


ca

if(Coche.VMAXIMA > v){


this.velocidad = v;
} else{
this.velocidad = v;
}
}
}

Como se puede observar hay una propiedad llama VMAXIMA establecida como publica, estática y

final esto quiere decir que puede ser accedida desde fuera de la clase, esta compartida entre todas

las instancias y que su valor es final, es decir no podrá ser modificado. Entendemos que la velocidad

campusvirtual.formatecyl.com
57 / 109
[AFO018307] IFCD033PO JAVA
[MOD016498] IFCD033PO JAVA
[UDI095804] PROGRAMACIÓN DE APLICACIONES CON JAVA

máxima es el tope de velocidad que todas las instancias de Coche soportan. No nos interesa que se

supere la velocidad máxima establecida en el vehículo por lo que la declaramos privada y para

modificarla por cualquiera fuera de nuestra clase es necesario pasar por la función setVelocidad.

En la página anterior se ha hecho uso de la declaración import. Antes de nada expliquemos que es

un paquete en Java:

En Java un paquete se le conoce como un conjunto de clases y otros paquetes, estos siguen una

om
estructura jerárquica en carpetas. En la siguiente imagen se puede ver el directorio de un paquete

llamado "ssh_tunnel" que a su vez contiene un paquete denominado "utils". Normalmente en un

.c
paquete se agrupan las clases de una misma aplicación, organización, sistema o que comparten una

yl
serie de funciones similares.

ec
at
m
or
.f
al
r tu
s vi
pu

Para hacer uso de clases en paquetes externos tenemos que hacer uso de su nombre en una

sentencia import o si es un uso puntual podemos usar el nombre del paquete seguido de la clase
m

como se ve en el siguiente ejemplo:


ca

frutas.citricos.Limon naranja = new frutas.citricos.Limon();//Usando el nombre completo


import frutas.citricos.Limon; //importamos la clase Limon
import frutas.citricos.*; //lo importamos todo

Comenzar Actividad

campusvirtual.formatecyl.com
58 / 109
[AFO018307] IFCD033PO JAVA
[MOD016498] IFCD033PO JAVA
[UDI095804] PROGRAMACIÓN DE APLICACIONES CON JAVA

Relaciona los elementos de la columna Derecha con la columna Izquierda

¿Para qué nos sirve la clase? 1 Para crear objetos de tipo Taxi.

Cuando hablamos de clase nos 2 La abstracción que establece un


referimos a: tipo de objeto que especifica qué
propiedades (atributos) y
operaciones disponibles va a
En Java un paquete se le conoce 3 tener.
como

om
Un conjunto de clases y otros
paquetes, estos siguen una

.c
estructura jerárquica en carpetas.

yl
ec
Analizamos el concepto de clase y el uso de este.
at
m
or

Objeto: entidad existente en la memoria del ordenador que tiene unas propiedades (atributos o
.f
al

datos sobre sí mismo almacenados por el objeto) y unas operaciones disponibles específicas
tu

(métodos).
r

Una Clase, como hemos visto, no es más que una especificación que define las características y el
vi

comportamiento de un determinado tipo de objetos. Piensa como si se tratase de una plantilla, un


s
pu

molde o un esquema a partir del cual podremos crear nuestros objetos concretos.
m

Consideremos la clase Coche:


ca

campusvirtual.formatecyl.com
59 / 109
[AFO018307] IFCD033PO JAVA
[MOD016498] IFCD033PO JAVA
[UDI095804] PROGRAMACIÓN DE APLICACIONES CON JAVA

om
.c
yl
ec
at
m
or
.f
al
tu
r
s vi
pu
m
ca

Con el esquema anterior en nuestro poder, crearemos coches de marca, modelo, y color a placer.

Cada uno que creemos será un objeto, o instancia, de la clase Coche. Presta atención, con esta

campusvirtual.formatecyl.com
60 / 109
[AFO018307] IFCD033PO JAVA
[MOD016498] IFCD033PO JAVA
[UDI095804] PROGRAMACIÓN DE APLICACIONES CON JAVA

terminología, en la equivalencia entre los objetos e instancia para referirnos a entidades concretas

de una determinada clase.

Vamos ahora a "fabricar" nuestro primer coche…

Como ocurre con todas las variables en JAVA, debemos declarar el objeto para después utilizarlo:

om
Con esta instrucción declaramos la variable coche1 de tipo Coche. Usando el comando que

.c
describimos a continuación, el objeto coche1 contendrá una referencia a ese objeto, es decir,

yl
almacenará la dirección de memoria en la que realmente se halla el objeto propiamente dicho. Esto

ec
es algo muy importante: coche1 contendrá una dirección de memoria donde se guardan los datos.

Materialicemos nuestro primer coche del siguiente modo: at


m
or
.f

La palabra reservada de JAVA, 'new', es empleada para crear nuevas instancias de una clase en
al

concreto que indicamos a continuación seguida de un paréntesis de apertura y de cierre.


tu
r

Lo veremos cuando llegue el momento, pero por el momento tan solo le basta saber que está siendo
vi

invocado un método especial incluido en todas las clases, método que nos sirve para crear un objeto
s
pu

al mismo tiempo que se le pueden pasar una serie de parámetros. Este método es conocido como el

"constructor de clase".
m
ca

Podríamos habernos ocupado de la declaración y la creación en una sola instrucción:

Otro trasto más contaminando nuestras ciudades. Hagamos, al menos, que no consuma mucho:

campusvirtual.formatecyl.com
61 / 109
[AFO018307] IFCD033PO JAVA
[MOD016498] IFCD033PO JAVA
[UDI095804] PROGRAMACIÓN DE APLICACIONES CON JAVA

Como podrá observar en el cuadro superior en lo relacionado en la definición de la clase, tanto la

marca como el modelo son dos atributos de tipo String, por lo que están referenciando a las cadenas

de caracteres que estamos escribiendo entre comillas.

Observa con cuidado la notación punto. Estamos separando el nombre de la variable a la que

referencia el objeto de su atributo, usando un punto como un separador.

Pintemos de azul nuestro flamante vehículo:

om
.c
yl
Además tiene tres puertas, el cuenta kilómetros indica 250.000 Km (bueno, algo viejo parece que es)

y su velocímetro refleja 0 Km/h. Valores correspondientes a los atributos numeroDePuertas,

ec
cuentaKilometros y velocidad, respectivamente, todos de tipo entero.
at
m
or
.f
al
tu

Su motor está detenido, hecho que representamos a través de la variable booleana arrancado:
r
s vi
pu

Cuando nos cansemos de enredar con los atributos podemos jugar con los métodos. Arranquemos el
m

Panda:
ca

De nuevo, empleamos también la notación punto para separar la variable del método.

Si prestas atención al código podrás observar que el método está limitado a hacer que la variable

booleana "arrancado" ahora contenga el valor true. Podría decirse que se habría logrado el mismo

resultado modificando directamente el atributo en lugar de usar una función:

campusvirtual.formatecyl.com
62 / 109
[AFO018307] IFCD033PO JAVA
[MOD016498] IFCD033PO JAVA
[UDI095804] PROGRAMACIÓN DE APLICACIONES CON JAVA

Y efectivamente podría haber sido así, pero más adelante veremos como no es una buena idea dejar

que otras clases modifiquen directamente los atributos de una determinada clase, así que es mejor

que sean los propios métodos de la clase los que modifiquen dichos atributos. Imagina que ese

programa externo hace que el cuenta kilómetros marque una velocidad negativa, o bien, que el

número de puertas del coche sea igual a 50. Un método que ha sido diseñado correctamente, podría

comprobar que los valores estén dentro de un rango determinado y cerciorarse de que se cumplen

con los valores adecuados.

om
En la programación orientada a objetos existe el concepto de encapsulación, el cual nos permite

.c
"ocultar" determinadas partes de una clase al resto y dejar accesbiel solo aquellos que nos interesa.

yl
Todo llegará en su momento…

ec
Sigamos jugando con nuestro viejo cacharro azul:
at
m
or

Lo que provocará, si consultas el código, que el velocímetro incremente en una unidad su valor.
.f
al
tu
r
vi

Lo que ocasionará un estridente pitido.


s
pu

Puedes crear todos los objetos de la clase Coche que desees:


m
ca

Cada uno con su propia colección de atributos:

Incluso podrías crear otros Seat Pandas, por supuesto. Aunque, en un determinado momento los

atributos sean exactamente los mismos, serían objetos diferentes, los cuales están ubicados en

campusvirtual.formatecyl.com
63 / 109
[AFO018307] IFCD033PO JAVA
[MOD016498] IFCD033PO JAVA
[UDI095804] PROGRAMACIÓN DE APLICACIONES CON JAVA

direcciones de memoria diferentes pudiendo cada uno seguir su propia trayectoria.

Comenzar Actividad

Relaciona los elementos de la columna Derecha con la columna Izquierda

om
¿Qué es el objeto? 1 Es la entidad existente en la
memoria del ordenador que tiene
unas propiedades (atributos o

.c
¿Qué nos permite la 2 datos sobre sí mismo

yl
encapsulación? almacenados por el objeto) y unas
operaciones disponibles

ec
específicas (métodos).

at Nos permite "ocultar"


m
determinadas partes de una clase
al resto y dejar accesible solo
or

aquellos que nos interesa.


.f
al
tu

Encontramos diferentes objetos dentro de la programación en java.


r
s vi
pu

Variables
m

Dentro de cualquier lógica de negocio necesitamos almacenar información para poder realizar
ca

una aplicación. Dicha información se almacena en variables, que son espacios en la memoria y que

permiten asignar y recuperar valores.

Para trabajar con variables existen múltiples tipos de datos, dependiendo de lo que necesitemos

realizar, pudiera ser que necesitemos realizar operaciones, por lo que almacenaríamos números, o

pudiera ser que nuestro dato sea un nombre, por lo que almacenaríamos textos. Existen varios tipos

de datos primitivos que aprenderemos a lo largo del módulo.

Además, al igual que el lenguaje natural que utilizamos para comunicarnos, ya sea de forma oral o

campusvirtual.formatecyl.com
64 / 109
[AFO018307] IFCD033PO JAVA
[MOD016498] IFCD033PO JAVA
[UDI095804] PROGRAMACIÓN DE APLICACIONES CON JAVA

por escrito, cualquier lenguaje de programación dispone de unos elementos y reglas que deben

conocerse a la hora de programar.

Los elementos del lenguaje natural nos permiten designar cosas (nombres), expresar

cualidades de esas cosas (adjetivos), expresar acciones (verbos), etc.

Las reglas sintácticas (estructura) y semánticas (significado) permiten el entendimiento entre

las partes que forman la comunicación.

om
En los lenguajes de programación también hallamos unas reglas sintácticas que tenemos respetar

.c
a la hora de confeccionar los programas y una semántica encargada de resolver el problema que

yl
deseamos programar.

ec
at
m
or
.f
al
rtu
s vi
pu
m
ca

campusvirtual.formatecyl.com
65 / 109
[AFO018307] IFCD033PO JAVA
[MOD016498] IFCD033PO JAVA
[UDI095804] PROGRAMACIÓN DE APLICACIONES CON JAVA

Sentencias de control de flujo de datos

Dentro de cualquier lenguaje de programación existen una serie de estructuras que nos permiten

poder definir una lógica no lineal para trabajar en la aplicación.

En cualquier programa aparecen a menudo preguntas que necesitamos responder para que la

aplicación realice una acción determinada u otra. Mediante las sentencias podemos realizar dicha

lógica y responder a las preguntas que vayan apareciendo dentro de un programa para hacer una

om
secuencia o una evaluación de variables.

.c
Ha llegado un momento en el que hay que enforcar la relación entre sentencias, esto es a través del

yl
flujo de control. El flujo de control es el orden en el que las sentencias son ejecutadas.

ec
Para poder explicar esto es más fácil hacerlo a través de diagramas de flujo. Estos se representan

mediante imágenes, utilizando dos símbolos básicos: at


m
or

Rectángulos: contienen comandos de asignación y lectura.

Diamantes: contienen preguntas de afirmación/negación.


.f
al

Podemos encontrarnos con tres tipos:


tu

Secuencial: contienen sentencias que se ejecutan inmediatamente después.


r
s vi
pu
m
ca

Condicional: contiene una pregunta de afirmación/negación y su respuesta determina si se

ejecuta un bloque u otro.

campusvirtual.formatecyl.com
66 / 109
[AFO018307] IFCD033PO JAVA
[MOD016498] IFCD033PO JAVA
[UDI095804] PROGRAMACIÓN DE APLICACIONES CON JAVA

om
.c
yl
De control: contienen respues a preguntas de afirmación/negación y su respuesta determina si

ec
se repite el bloque de sentencias de control o si se mueve a las sentencias bajo el bucle.

at
m
or
.f
al
rtu
s vi
pu
m
ca

Sentencia if-else

Permite seleccionar la ejecución de distintos fragmentos de código dependiendo del resultado

de la valoración de una expresión booleana.

Su sintaxis es la siguiente:

campusvirtual.formatecyl.com
67 / 109
[AFO018307] IFCD033PO JAVA
[MOD016498] IFCD033PO JAVA
[UDI095804] PROGRAMACIÓN DE APLICACIONES CON JAVA

if (expresion_booleana 1) { // La expresión booleana expresa condiciones


...
// código que se ejecuta si la expresión devuelve true
...
} else if (expresión boolean 2) {
...
// código que se ejecuta si la expresión devuelve true
...
} else {
// código que se ejecuta si la expresión devuelve false
}
El uso de else es opcional.

om
La expresión booleana puede contener operadores relacionales para encadenar condiciones.

.c
Vamos a visualizar un ejemplo práctico en el que compararemos el valor de una variable utilzando If,

yl
Else y Else If:

ec
public class ClaseIfElse
at
m
{
or

public static void main(String args[])


.f
al

{
tu

int i=0;
r
vi

String mensaje="";
s
pu

if (i>0)
m

{
ca

mensaje = "Positivo";

}else if (i<0)

mensaje = "Negativo";

}else

campusvirtual.formatecyl.com
68 / 109
[AFO018307] IFCD033PO JAVA
[MOD016498] IFCD033PO JAVA
[UDI095804] PROGRAMACIÓN DE APLICACIONES CON JAVA

mensaje = "Cero";

System.out.println("El valor de i es " + mensaje);

om
}

.c
Comprobaremos que entra en el último IF debido a que ya ha evaluado el resto de expresiones que

yl
hemos escrito en las condiciones del código.

ec
at
m
or
.f
al
tu

Switch, case, break, default


r
vi

Estos permiten ejecutar una serie de operaciones para cuando una variable tenga un valor entero
s
pu

dado. Para la operación case, se encarga de pasar por todas las sentencias hasta que encuentra uno

con el valor de la variable, y ejecuta desde allí hasra el final del case o hasta que se encuentre un
m

break. El default permite poner un conjunto de instrucciones que se ejecutarán en caso de que no se
ca

de la igualdad para ninguno de los case.

campusvirtual.formatecyl.com
69 / 109
[AFO018307] IFCD033PO JAVA
[MOD016498] IFCD033PO JAVA
[UDI095804] PROGRAMACIÓN DE APLICACIONES CON JAVA

While

En ella se permite ejecutar un conjunto de instrucciones mientras se cumpla una condición dada.

Do ... while

om
Parecido al anterior, aunque éste se evalúa al final del ciclo y no al principio.

.c
yl
ec
For at
m
Se trata de realizar de forma repetitiva un conjunto de instrucciones.
or
.f
al
tu
r
s vi
pu
m
ca

campusvirtual.formatecyl.com
70 / 109
[AFO018307] IFCD033PO JAVA
[MOD016498] IFCD033PO JAVA
[UDI095804] PROGRAMACIÓN DE APLICACIONES CON JAVA

Significado y uso del mecanismo de eventos

Antes de comenzar hablando del mecanismo de eventos tenemos que empezar a definir el término

evento , que consiste según el diccionario de la RAE en un suceso importante y programado, de

índole social, académica, artística o deportiva.

A diferencia de otros lenguaje este no cuenta con un mecanismo a la hora de realizar la gestión de

eventos, en lugar de eso se utilizan unos patrones de diseño, que en realidad se tratan de un tipo de

om
clase llamada Listener. Dicha clase se encarga de realizar el control de los eventos, esperando a

que éste se produzca y relice una serie de acciones, dependiendo del evento tendremos una subclase

.c
de Listener distinta.

yl
ec
Para poder utilizar dicha clase y gestionar los eventos será necesario la inclusión del paquete

java.awt.event .
at
m
Esta forma y modelo de trabajar se basa en forma de herencia.
or

A continuación comentaremos los tipos de subclases que pueden aparecer en la clase Listener:
.f
al

ActionListener: se produce si se hace click sobre un componente o si se realiza un enter.


tu

KeyListener: se produce al pulsar una tecla según el método que le pasemos cambiará la
r

forma de pulsar la tecla.


vi

FocusListener: se produce cuando un componente está seleccionado.


s
pu

MouseListener: se produce cuand orealizamos una acción con el ratón.

MouseMotionListener: se produce con el movimiento del ratón.


m
ca

A continuación se muestra los tipos de eventos que se pueden generar dependiendo el método que
se utilice en la subclase Listener y también dependiendo la subclase que se utilice.
En el caso de ActionListener:

Métodos:

public void actionPerformed(ActionEvent e): realiza las acciones programadas para

un evento

Eventos: se pueden introducir los siguientes eventos:

campusvirtual.formatecyl.com
71 / 109
[AFO018307] IFCD033PO JAVA
[MOD016498] IFCD033PO JAVA
[UDI095804] PROGRAMACIÓN DE APLICACIONES CON JAVA

JButton: consiste en hacer click o pulsar Enter con el foco activado en él.

JList: doble click en un elemento de la lista.

JMenuItem: selecciona una opción del menú.

JTextField: al pulsar Enter con el foco activado.

En el caso de KeyListener:

Métodos:

om
public void keyPressed(KeyEvent e): presiona una tecla

.c
public void keyReleased(KeyEvent e) : escribe

yl
public void keyTyped(KeyEvent e): suelta

ec
Eventos

keyPressed: al pulsar una tecla at


m
keyReleased: al pulsar una tecla
or

keyTyped:al pulsar y soltar una tecla


.f
al

En el caso de FocusListener:
tu

Métodos:
r
vi

public void focusGained(FocusEvent e): se presenta en pantalla un mensaje


s

indicando el objeto que ha sido seleccionado


pu

public void focusLost(FocusEvent e) : se presenta en pantalla un mensaje indicando


m

el objeto que ha perdido el ser seleccionado


ca

En el caso de MouseListener:

Métodos:

public void mouseClicked(MouseEvent e): se usa para indicar al raton que ha

realizado un click.

public void mouseEntered(MouseEvent e) : se usa para indicar que el puntero del

ratón entró en la zona del trabajo.

public void mouseExited(MouseEvent e): se usa para indicar que el puntero del ratón

campusvirtual.formatecyl.com
72 / 109
[AFO018307] IFCD033PO JAVA
[MOD016498] IFCD033PO JAVA
[UDI095804] PROGRAMACIÓN DE APLICACIONES CON JAVA

se salió del area del objeto.

public void mousePressed(MouseEvent e): se usa para indicar que se presionó el

objeto.

Eventos

mouseClicked:pinchar y soltar

mouseEntered: entrar en un componente con el puntero

mouseExited: salir de un componente con el puntero

om
mousePressed: presionar el botón

mouseReleased: soltar el botón

.c
yl
ec
En el caso de MouseMotionListener:

Métodos:
at
m
public void mouseDragged(MouseEvent e): se usa cuando se presiona el botón del
or

raton en un componente y luego se arrastra.

public void mouseMoved(MouseEvent e) : se usa cuando el cursor del ratón se ha


.f
al

movido a un componente pero no se ha presionado ningún ratón.


tu

Eventos
r

mouseDragged:click y arrastrar un componente


vi

mouseMoved: al mover el puntero sobre un elemento


s
pu
m

Para que un programa capture eventos de una interfaz gráfica, los componentes deben ser subclases
ca

de la interfaz y sobreescribir los métodos action() y handleEvent().

Cuando uno de los métodos devuelve true, el evento ya no es ejecutado más allá, en caso contrario,

el evento se propaga a través de la jerarquía de componentes de la interfaz hasta que sea tratado

o alcance al jerarquía de componentes.

Hay dos elecciones para estructurar el código de gestión de eventos:

Cada componente individual puede hacerse subclase para manejar específicamente un conjunto de

eventos.

campusvirtual.formatecyl.com
73 / 109
[AFO018307] IFCD033PO JAVA
[MOD016498] IFCD033PO JAVA
[UDI095804] PROGRAMACIÓN DE APLICACIONES CON JAVA

Todos los eventos son manejados por un contenedor determinado (tendrá que analizar sobre que

componente se ha producido).

Inconvenientes

No se pueden filtrar eventos: los eventos son recibidos por los componentes, los manejen o no.

Problema de rendimiento con los eventos que se producen con mucha frecuencia.

Si queremos incluir un evento nuevo, solo tendremos seguir una sintaxis concreta:

om
componente.add"tipo evento"(new "tipo evento"(){

.c
metodos del evento
});

yl
ec
at
m
or
.f
al
tu
r
s vi
pu
m
ca

campusvirtual.formatecyl.com
74 / 109
[AFO018307] IFCD033PO JAVA
[MOD016498] IFCD033PO JAVA
[UDI095804] PROGRAMACIÓN DE APLICACIONES CON JAVA

Formas de gestionar los eventos en JAVA

Modelo nuevo de delegación. (Source, Listener, Adapter)

Como comentábamos en el apartado anterior, los eventos están organizados en jerarquías de

herencia entre clases de eventos.

Dicho modelo fue explicado de forma breve en el apartado anterior, a continuación lo comentamos

om
en profundidad:

Fuentes de eventos (source)

.c
yl
Son objetos que tienen la capacidad de detectar eventos y avisar a los receptores de eventos que se

ec
han producido esos eventos.

Fuentes de Eventos Descripción


at
Es la clase raíz de la cual derivarán todos los eventos.
m
Tiene dos métodos de interés que son:
EventObject Object getSource() --> Devuelve el objeto sobre el que se ha producido el
or

evento.
String toString() -->Da una representación en forma de String.
.f

Es la clase raíz de la cual derivan todos los eventos del AWT.


al

Es una clase abstracta.


De interés son:
tu

AWTEvent - Sus campos estáticos que almacenan los valores para diferentes tipos
de eventos.
r
vi

- El método int getID() que devuelve un número entero que se


corresponde con el tipo de evento que se ha producido.
s

Evento de bajo nivel que indica que un componente se ha movido, ha


pu

cambiado de tamaño, ...


Deriva de AWTEvent.
m

Estos eventos se producen sólo con propósitos de notificación. El AWT


sigue funcionando correctamente aunque no se traten.
ca

El evento es pasado a todos los ComponentListener o AdapterListener


que se hayan registrado para recibir este tipo de eventos. Para registrar
ComponentEvent
un listener se usa el método addComponentListener sobre el objeto
sobre el cual queremos recibir los eventos.
Son de interés:
- Sus campos que almacenan los valores que indican lo que ha sucedido a
nivel de componente: Si se ha movido, si se ha ocultado, ...
- El método Component getComponent() para obtener el componente en
forma de objeto sobre el que se produjo el evento.

campusvirtual.formatecyl.com
75 / 109
[AFO018307] IFCD033PO JAVA
[MOD016498] IFCD033PO JAVA
[UDI095804] PROGRAMACIÓN DE APLICACIONES CON JAVA

Se genera por objetos tipo Container cuando se añade o se quita un


objeto de él.
El evento es pasado a cada ContainerListener o AdapterListener que se
haya dado de alta mediante el método addContainerListener() del objeto
sobre el que queremos obtener los eventos.
ContainerEvent (hereda
Caben destacar:
de ComponentEvent)
- Sus campos que almacenan el valor de lo que puede suceder: un
componente se ha añadido, se ha quitado, ...
- Sus métodos: Container getContainer() que permite obtener el
contenedor sobre el que se produjo el evento y Component getChild()
obtiene el componente que lo produjo (al ser añadido, quitado, ...).
Fuentes de Eventos Descripción

om
Fuente de eventos de bajo nivel que indica si la ventana ha cambiado
de estado (abrir, activar, minimizar...)
WindowEvent (hereda de El evento es pasado a cada WindowListener o WindowAdapter que se

.c
ComponentEvent). haya registrado mediante el método addWindowListener() para ser
notificados.

yl
El método getWindow() devuelve la ventana que generó el evento.

ec
Es el evento raíz de todos los eventos de entrada a nivel de
componente.
InputEvent (hereda de
ComponentEvent). at
Sus dos fuentes de eventos hijas son: KeyEvent (para eventos
relacionados con el teclado) y MouseEvent (para eventos
m
relacionados con el ratón).
A continuación vemos MouseEvent.
or

Indica que una acción de ratón ha sucedido sobre un componente.


Eventos de ratón
.f

- Un botón del ratón es presionado.


al

- Un botón del ratón es liberado


- Un botón del ratón es clickeado (presionado y liberado)
tu

- El cursor del ratón entra en un componente.


- El cursor del ratón sale del componente.
MouseEvent
r

Mouse Motion Events


vi

- El ratón es movido.
- El ratón es arrastrado con botón pulsado (dragged)
s

Estos eventos se envían a los MouseListener y MouseAdapter que se


pu

hayan registrado mediante el método addMouseListener().


Dispone de una serie de métodos tipo get (getX, getY, getPosition,
m

getClickCount para recoger información del evento).


Es un evento de alto nivel que indica que algo ha sucedido sobre un
ca

componente. Algunos componentes usan este tipo de eventos en vez


de usar los de bajo nivel.
El protocolo para implementar correctamente este evento es
mediante un ActionCommand.
Los componente disponen de un método setActionCommand (string)
ActionEvent
para asociarles un ActionCommand en concreto.
El evento dispone de un getActionCommand() mediante el cual poder
identificar el ActionCommand.
Este evento se pasa a los ActionListener o ActionAdapter que se han
dado de alta mediante el método addActionListener() para poder
recibir eventos de este tipo.

campusvirtual.formatecyl.com
76 / 109
[AFO018307] IFCD033PO JAVA
[MOD016498] IFCD033PO JAVA
[UDI095804] PROGRAMACIÓN DE APLICACIONES CON JAVA

Comenzar Actividad

Relaciona los elementos de la columna Derecha con la columna Izquierda

ActionEvent es 1 La clase raíz de la cual derivan


todos los eventos del AWT.

MouseEvent 2
Indica que una acción de ratón ha
sucedido sobre un componente.

om
AWTEvent es 3

Evento de bajo nivel que indica

.c
que un componente se ha movido,
ComponentEvent 4
ha cambiado de tamaño...

yl
ec
Un evento de alto nivel que indica

at
que algo ha sucedido sobre un
componente. Algunos
m
componentes usan este tipo de
eventos en vez de usar los de bajo
or

nivel.
.f
al
tu

Repasa los conceptos de la unidad.


r
s vi
pu
m
ca

campusvirtual.formatecyl.com
77 / 109
[AFO018307] IFCD033PO JAVA
[MOD016498] IFCD033PO JAVA
[UDI095804] PROGRAMACIÓN DE APLICACIONES CON JAVA

Interfaz gráfico de usuario (GUI)

La base de la programación gráfica se encuentra en estos dos elementos físicos del ordenador,

los cuales se diseñaron de forma conjunta con el propósito de presentar información al usuario. El

comprender su funcionamiento ayuda a conocer lo que estamos haciendo cuando diseñamos un

entorno gráfico.

Además también se encuentra el entorno de desarrollo, es decir, la interfaz gráfica mediante la

om
cual vamos a programar. Para programar en Java se suele utilizar Eclipse o Netbeans.

.c
En esta unidad se va a trabajar con el IDE de Netbeans.

yl
ec
Netbeans se trata de un IDE libre, cuyo entorno de trabajo mayoritario es Java. Además cuenta con

un gran número de módulos para extensión. Como hemos mencionado se trata de un producto libre
at
y además es gratuito, sin aplicación de restricciones en su uso. Este IDE soporta el desarrollo de
m
todo tipo de aplicaciones para Java desde tipo web, EJB, aplicaciones móviles e incluso J2SE.
or

Destaca entre su características que se encuentra un sistema de proyectos basado en Ant, además
.f

de contar con control de versiones y refactoring.


al
tu

Netbeans cuenta con una gran base de usuarios, además de ser dicha comunidad en constante

crecimiento.
r
vi

Netbeans fue desarrollado originalmente por Sun MicroSystem en junio de 2000 aunque ahora
s
pu

dicha companíua se conoce con el nombre de Oracle Corporation.


m

Netbeans fue liberado originalmente bajo la Common Development and Distribution License(CDDL)
ca

desde 2006, pero en 2007 se ofrecería bajo licencia dual de licencia CDDL y GPL de versión 2.

Parte 1: Entorno de Proyectos de Netbeans

Dentro de Netbeans todos los archivos que creemos formarán parte de un proyecto. Con estos

queremos decir que todo archivo que creemos, ya sea de código fuente o cualquier otro, tiene que

estar dentro del proyecto de Netbeans. Así que antes de empezar es necesario comprender la

estructura de directorios de Netbeans.

campusvirtual.formatecyl.com
78 / 109
[AFO018307] IFCD033PO JAVA
[MOD016498] IFCD033PO JAVA
[UDI095804] PROGRAMACIÓN DE APLICACIONES CON JAVA

Para comenzar necesitamos crear un nuevo proyecto no solo para emprender el desarrollo de una

nueva aplicación JAVA, sino para poder editar archivos ya creados (como pueda ser una aplicación

.java almacenado en nuestro penDrive). Para iniciar un nuevo proyecto debemos seleccionar en el

menú principal "Archivo > Proyecto Nuevo".

om
.c
yl
Podemos crear varios tipos de proyectos Java en Netbeans:

ec
at
Java Application: se trata de una aplicación de tipo Java SE por lo que se creará un proyecto
m
estándar del IDE, permite construir, ejecutar y depurar el proyecto.
or

Java Class Library: se trata de una biblioteca de Java SE, éste no contiene clases principales.

Java Project with Existing Sources: importa una aplicación Java existente.
.f
al

Proyecto Java Free-Form: importa una aplicación Java existente y además sus secuencias de
tu

órdenes de compilación.
r
vi

Puesto que esta guía se centra en el uso de Netbeans para desarrollar en JAVA. Elegiremos crear
un nuevo "Java Application" seleccionandolo y pulsando sobre el botón "Siguiente>" del asistente
s

de creación.
pu
m
ca

Tras esto, debe especificarse un nuevo nombre para el proyecto. Los proyectos profesionales son
nombrados utilizando nombres de dominio en orden inverso para evitar posibles conflictos con el
nombre. Sin embargo, para cualquier proyecto de uso interno un nombre más o menos descriptivo
será suficiente.

Si se usa la carpeta por defecto, los ficheros del proyecto se almacenarán en la carpeta
"[DirectorioDeInstalación]\Documents\NetBeansProjects". También es posible especificar un

campusvirtual.formatecyl.com
79 / 109
[AFO018307] IFCD033PO JAVA
[MOD016498] IFCD033PO JAVA
[UDI095804] PROGRAMACIÓN DE APLICACIONES CON JAVA

directorio diferente en el que guardar dichos contenidos.

om
.c
yl
ec
at
m
or
.f
al
tu

En este punto es ya posible finalizar la creación del proyecto pulsando en el botón "Terminar".
r
vi

Debemos seleccionar antes un clase principal que será la responsable de realizar las ejecuciones, ya
s

que incluirá el main.En este caso recibe el nombre de netbeanstutorial.NetbeansTutorial.


pu
m
ca

campusvirtual.formatecyl.com
80 / 109
[AFO018307] IFCD033PO JAVA
[MOD016498] IFCD033PO JAVA
[UDI095804] PROGRAMACIÓN DE APLICACIONES CON JAVA

om
.c
yl
ec
at
m
El proyecto recién creado debe parecerse a este, como podemos ver en la vista "Navegador".
or
.f
al
tu
r
s vi
pu
m
ca

campusvirtual.formatecyl.com
81 / 109
[AFO018307] IFCD033PO JAVA
[MOD016498] IFCD033PO JAVA
[UDI095804] PROGRAMACIÓN DE APLICACIONES CON JAVA

om
.c
yl
ec
at
m
or
.f
al
tu
r
s vi
pu
m
ca

campusvirtual.formatecyl.com
82 / 109
[AFO018307] IFCD033PO JAVA
[MOD016498] IFCD033PO JAVA
[UDI095804] PROGRAMACIÓN DE APLICACIONES CON JAVA

También cabe la posibilidad de copiar, cortar y pegar archivos y carpetas desde Netbeans hasta los

directorios del propio sistema operativo (como por ejemplo, del explorador de Windows) y viceversa

(seleccionando un archivo, pulsando CTRL+C, seleccionando la carpeta destino dentro de Netbeans

y pulsando CTRL+V).

Parte 2: Crear Elementos de Java

Cuando ya hemos creado un nuevo proyecto, es la hora de aprender cómo crear los diversos

om
elementos JAVA.

.c
Pulsando sobre el botón derecho en la carpeta que hemos creado recientemente (en este caso el

yl
paquete netbeanstutorial) dentro de la vista del explorador de Proyectos, aparecerá un menú

ec
contextual. Seleccionamos "Nuevo >" en ese menú, aparecerán los diferentes elementos JAVA que

pueden ser creados.


at
m
or
.f
al
rtu
s vi
pu
m
ca

Java Class

Las clases JAVA que nos encontraremos en los archivos estarán dentro de los ".java", los cuales

contienen el código fuente y serán posteriormente compilados en archivos ".class". Estos archivos

JAVA deben de ser almacenados dentro de la carpeta fuente que creamos anteriormente. Pulse "

Nuevo -> Java Class" para abrir la ventana de creación de clases.

campusvirtual.formatecyl.com
83 / 109
[AFO018307] IFCD033PO JAVA
[MOD016498] IFCD033PO JAVA
[UDI095804] PROGRAMACIÓN DE APLICACIONES CON JAVA

om
.c
yl
ec
at
m
or
.f
al

La carpeta fuente especificada debería ser la carpeta recientemente definida . En caso de no


tu

especificar un paquete sobre el que se deben guardar las clases JAVA se almacenarán en uno por
r

defecto. Y por último, el campo que debería ser rellenado de forma obligatoria antes de crear nada
vi

es el propio nombre de la clase. Por convención, todo nombre de clase JAVA deberá de empezar
s
pu

por mayúscula, siendo además obligatorio poner en mayúscula la primera letra de cada

palabra que contiene el nombre de la clase, sin usar espacios.


m
ca

Existen otras modificaciones que pueden ser añadidas a la clase justo en el momento de su

creación. También hay que tener en cuenta que no pasa nada si se salta este paso, ya que son

ajustes que pueden llevarse a cabo en fases más avanzadas del desarrollo sin ningún tipo de

problema. Si se pretendiese que la nueva clase herede de otra ya existente, se debería especificar

esa clase de la que hereda dentro del campo denominado como "SuperClass".

En caso de que deseemos que nuestra clase contenga un método "main" (el método inicial de

nuestro pograma), puede añadirse el método de forma automática marcando la casilla

correspondiente. También es posible implementar de esta manera todos los métodos heredados de la

campusvirtual.formatecyl.com
84 / 109
[AFO018307] IFCD033PO JAVA
[MOD016498] IFCD033PO JAVA
[UDI095804] PROGRAMACIÓN DE APLICACIONES CON JAVA

superclase y los métodos abstractos. Esta última opción comentada es bastante útil, en caso de que

se desee instanciar la clase, ya que todo método abstracto ha de estar implementado.

Resulta interesante destacar que los archivos que han sido compilados (".class") sólo son visibles

en la ventana "Navegador", la cual está abierta por defecto. Ya que la perspectiva JAVA no abre

esa ventana por defecto, los archivos ".class" no serán vistos dentro de Package Explorer. Sin

embargo, tan solo debemos guardar un archivo ".java" para que se cree un archivo ".class"

resultante de compilar el archivo anterior que contiene el código fuente.

om
Folder

.c
Las carpetas se utilizan para almacenar y organizar archivos. Como ya hemos mencionado en alguna

yl
ocasión, una carpeta normal no es exactamente igual que una en la que hay archivos de

ec
código fuente. Una buena praxis es crear de forma explícita una carpeta en la que alojar todos

at
nuestros archivos que contienen el código fuente (.java) y el compilado (se ubica todo en src), y una
m
carpeta adicional para guardar toda la documentación relacionada como puedan ser pdfs o archivos
or

txt (docs). Para crear una nueva carpeta tan solo necesitamos especificar el nombre que queremos
.f

darle a la carpeta y el nombre de cuál será su carpeta padre.


al
tu
r
s vi
pu
m
ca

campusvirtual.formatecyl.com
85 / 109
[AFO018307] IFCD033PO JAVA
[MOD016498] IFCD033PO JAVA
[UDI095804] PROGRAMACIÓN DE APLICACIONES CON JAVA

om
.c
yl
ec
at
m
or
.f
al
tu
r
s vi
pu
m
ca

campusvirtual.formatecyl.com
86 / 109
[AFO018307] IFCD033PO JAVA
[MOD016498] IFCD033PO JAVA
[UDI095804] PROGRAMACIÓN DE APLICACIONES CON JAVA

om
.c
yl
ec
at
m
or
.f
al
tu
r
s vi
pu
m
ca

campusvirtual.formatecyl.com
87 / 109
[AFO018307] IFCD033PO JAVA
[MOD016498] IFCD033PO JAVA
[UDI095804] PROGRAMACIÓN DE APLICACIONES CON JAVA

Interface

Uno de los casos particulares de las clases JAVA son las interfaces, las cuales no cuentan con

código implementado y que se espera que otras clases las implementen. Usualmente

funcionan como una especie de contrato, indicando lo que la clase implementada debería hacer,

mientras que los detalles de más bajo nivel corresponderían al implementador. La forma de proceder

ante la creación de las interfaces es casi igual que crear una clase JAVA. Además, aunque una

interfaz no pueda implementar a otra como lo hiciera una clase, sí que puede heredar de otra.

om
.c
yl
ec
at
m
or
.f
al
tu
r
s vi
pu
m
ca

Package

Los paquetes son declarados para almacenar y organizar los archivos JAVA. El nombre del

paquete consta de varias partes que están separadas por puntos. Cada una de estas partes será un

directorio nuevo dentro del sistema de archivos. Las clases que son creadas dentro de un paquete en

Eclipse llevarán asignada de manera automática la declaración "package" en su código fuente.

Para poder ejecutar el código recién creado es necesario seleccionarlo mediante el uso del botón

campusvirtual.formatecyl.com
88 / 109
[AFO018307] IFCD033PO JAVA
[MOD016498] IFCD033PO JAVA
[UDI095804] PROGRAMACIÓN DE APLICACIONES CON JAVA

izquierdo del ratón o con la ayuda del teclado. Posteriormente tan solo debemos pulsar el botón

derecho y hacer 'clic' sobre la opción "Ejecutar" del menú contextual. La salida "estándar" de ese

proceso se mostrará dentro de la vista denominada "Salida", y otros mensajes de error se mostrarán

también dentro de la misma ventana.

Una vez que hayamos finalizado la prueba deberíamos de pulsar el botón "Stop" en el menú

contextual.

om
Source Folder

.c
Como ya hemos visto, las carpetas que contiene el código fuente son un tipo especial de

yl
directorios que están destinados a almacenar los archivos de código fuente JAVA (es decir, los que

ec
tienen extensión ".java"). Estos archivos de código serán automáticamente compilados en archivos

at
".class". Debido a que todos los proyectos JAVA deberían tener una carpeta con código fuente, es
m
una buena praxis organizar todo esto desde el momento en que creamos el proyecto, como ya
or

vimos anteriormente en las primeras secciones de este curso.


.f

Parte 3: Funciones Útiles de Programación


al

Hasta el momento hemos expuesto conceptos básicos relativos al funcionamiento general de


tu

Netbeans. Ya va siendo hora de presentar las funciones de ayuda que este nos brinda. Es en esta
r
vi

parte donde nos daremos cuenta de cuál es la manera de programar JAVA usando Netbeans y así
s

ahorrar el máximo de tiempo posible. Mientras que las partes anteriores de este tutorial eran
pu

necesarias, esta será la más interesante.


m

Compilar y Detectar Errores


ca

Es sumamente importante tener en cuenta que los errores de compilación se muestran en

tiempo real, mediante el subrayado del fragmento de código que contiene el error mediante una

línea roja. Y además el entorno automáticamente compila los archivos salvados. Así, de esta forma

nos saltaremos el paso de tener que compilar el código y solucionar los potenciales errores de

compilación.

Los errores son fácilmente apreciables, puesto que los veremos remarcados en el margen

derecho del editor JAVA. Los errores pueden encontrarse fácilmente porque se muestran además

campusvirtual.formatecyl.com
89 / 109
[AFO018307] IFCD033PO JAVA
[MOD016498] IFCD033PO JAVA
[UDI095804] PROGRAMACIÓN DE APLICACIONES CON JAVA

como marcas rojas en el margen derecho del editor de código Java. De igual forma, los errores y las

advertencias presentes en los archivos ya guardados se muestran dentro de la "Task View" como ya

veremos más adelante. Haciendo clic en cualquiera de los dos tipos de marcado de error que hemos

visto, nos llevará hasta la línea en la que se encuentra dicho error.

om
.c
yl
ec
at
m
or

Icono de Bombilla = Autocorregir


.f
al
tu

Hemos visto cómo Netbeans es capaz de marcar toda advertencia y error de compilación sin tener
r

que llegar a esta última fase. Nos permite autocorregir todos los posibles errores haciendo click
vi

en el icono de la bombilla que nos aparecerá en el margen izquierdo del editor de código. Así
s
pu

pues, aparecerá una ventana mostrando todas las opciones. Seleccionar una opción usando los

cursores del teclado o bien, dejar pulsado el ratón sobre esta opción, abrirá una nueva ventana
m

mostrando de manera detallada las modificaciones en el código que realizará. Tan solo basta con
ca

tener hacer click en la opción seleccionada (o bien, pulsar ENTER) para autorizar a Netbeans a

realizar la corrección de manera automática.

campusvirtual.formatecyl.com
90 / 109
[AFO018307] IFCD033PO JAVA
[MOD016498] IFCD033PO JAVA
[UDI095804] PROGRAMACIÓN DE APLICACIONES CON JAVA

om
CTRL + Espacio = Autocompletar

.c
Cuando descubra la función autocompletar su vida será más fácil. En los siguientes ejemplos

yl
descubrirá cuales son las situaciones en las que esta función resultará increíblemente útil.

ec
at
Indica si el siguiente enunciado es verdadero o falso: "los errores son
complicados de ver y rara vez nos aparece en el editor JAVA".
m
Verdadero
or
.f

Falso
al
tu

Nombres de Clases
r
vi

Crear referencias a otras clases dentro de la clase actual es una tarea de programación habitual. Sin
s
pu

embargo, algunas clases de Java tienen nombres muy largos que son difíciles de recordar. Además,

para resolver las referencias a clases a la hora de compilar será necesario añadir declaraciones en
m

las que se importen dichas clases.


ca

Usar "CTRL + Espacio" tras escribir las primeras letras del nombre de la clase JAVA activará la

función autocompletar con los posibles nombres. Puede seleccionar cualquiera de ellas

simplemente realizando clic izquierdo del ratón. Nótese que la sentencia de importación

correspondiente se añadirá de forma automática. Las clases JAVA estarán marcadas con una

letra "C" verde mientras que las interfaces lo estarán con una "I" morada. Para evitar

confusiones, el paquete al que pertenece la clase será mostrado también para evitar posibles

confusiones.

campusvirtual.formatecyl.com
91 / 109
[AFO018307] IFCD033PO JAVA
[MOD016498] IFCD033PO JAVA
[UDI095804] PROGRAMACIÓN DE APLICACIONES CON JAVA

om
Atributos y Variables Locales

.c
Cuando estamos definiendo clases, lo más normal del mundo es dar nombres inventados o aleatorios

yl
tanto a los atributos como a las variables que usamos de forma interna en los métodos. Pero en

ec
ocasiones resulta difícil recordar el nombre exacto. Después de escribir los primeros caracteres del

at
atributo o de la variable en cuestión, pulsando "CTRL + Espacio" nos mostrará todas las posibles

alternativas para el nombre. Este proceso es prácticamente calcado al usado en los nombres de las
m
clases. Las variables locales son marcadas con el icono de una "L" de color gris, mientras
or

que los atributos son marcados con un icono que variará en función de la visibilidad del
.f

atributo.
al
tu
r
s vi
pu
m

Métodos y Constructores
ca

Cuando hemos creado un objeto JAVA, podremos invocar los métodos correspondientes a su clase.

Lo más normal del mundo es que en alguna ocasión olvidemos el nombre de un método o del orden

de sus parámetros. El problema puede ser resuelto usando la ya mencionada combinación "CRTL +

Espacio" tras haber escrito el nombre del objeto seguido de un punto, lo cual mostrará una ventana

con las posibles alternativas. Pulsar sobre la alternativa escogida añadirá la signatura del método al

objeto.

campusvirtual.formatecyl.com
92 / 109
[AFO018307] IFCD033PO JAVA
[MOD016498] IFCD033PO JAVA
[UDI095804] PROGRAMACIÓN DE APLICACIONES CON JAVA

om
También nos deja autocompletar la signatura de los constructores pulsando "CRTL + Espacio" tras

.c
escribir el nombre que hayamos dado a la clase seguido de un signo de apertura de paréntesis, "(".

yl
ec
at
m
Es posible crear la plantilla de un método escribiendo las primeras letras de su modificador y
or

pulsando nuevamente "CRTL + Espacio". Pulsando el tabulador podremos desplazarnos por los
.f

diferentes campos de la plantilla, de tal manera que pueda ser completado el tipo de retorno el
al

nombre del método y sus parámetros.


tu
r
s vi
pu
m
ca

Bucles

Los bucles suelen estar presentes en todos los programas. Escribir un bucle puede no ser una tarea

tediosa, pero Eclipse nos proporciona funciones para completar los bucles que nos ayudarán a

ahorrar tiempo. Tan solo debemos escribir las primeras letras de los bucles y pulsar "CRTL +

Espacio" para ver las posibles opciones. Si el bucle que estamos intentado crear itera sobre un

array de elementos, mediante el uso de esta función también intentará autocompletar el nombre del

array.

campusvirtual.formatecyl.com
93 / 109
[AFO018307] IFCD033PO JAVA
[MOD016498] IFCD033PO JAVA
[UDI095804] PROGRAMACIÓN DE APLICACIONES CON JAVA

Etiquetas de Javadoc

Los comentarios que el programador quiera hacer en el programa irán precedidos con "//" mientras

om
que los comentarios realizados por el JAVADoc estarán precedidos de "/**". Cuando creemos un

método y añadamos "/** + ENTER" sobre la signatura del método añadirá información sobre el

.c
JAVADoc como puedan ser "@param [nombreParámetro] [comentario]", "@return

yl
[descripciónDatosDevueltos]" y "@throws [tipoExcepción] [comentario]". Pulsar "CTRL + Espacio"

ec
dentro de un bloque "/** ... */" mostrará toda la lista de etiquetas Javadoc posibles.

at
m
or
.f
al
tu
r
s vi
pu
m
ca

Comment and Uncomment


Mediante esta opción podemos comentar o eliminar las marcas de los comentarios del código. Esto

es muy útil cuando queremos comentar bloques enteros de código para hacer pruebas, sin necesidad

de eliminar el código para luego tener que volver a introducirlo. Por defecto, las teclas "mapeadas"

para añadir comentarios por defecto son "CRTL + /" para añadir los comentarios y "CRTL + \" para

eliminar las marcas de comentario del bloque de código seleccionado.

En Netbeans estos comandos han sido sustituidos por "Toggle Comment". Para ello deberemos

irnos al menú "Fuente" y pulsar la opción comentada, la cual nos permitirá comentar el código

campusvirtual.formatecyl.com
94 / 109
[AFO018307] IFCD033PO JAVA
[MOD016498] IFCD033PO JAVA
[UDI095804] PROGRAMACIÓN DE APLICACIONES CON JAVA

seleccionado, o por contra, si ya lo estaba, descomentarlo.

También la nueva opción añadida llamada "Add Block Comment" comentará el código añadiendo

los símbolos "/*" y "*/". También, seleccionar un bloque de código que ha sido comentado

previamente hará que nos aparezca la opción "Remove Block Comment", la cual descomentaría el

bloque.

Formato

om
La función de formateo automático nos ayudará mucho a la hora de indentar el código de forma

.c
automática, además de llevar otras funciones de representación. Es una forma rápida de conseguir

yl
tener un código ordenado y comprensible. Las opciones de formateo automático pueden ser

ec
configuradas por el programador a través de "Fuente> Formato". Las teclas que vienen mapeadas

por defecto son "Alt+ Mayúsculas + F".


at
m
Hay que tener en cuenta que estas funciones de indentación nos permiten identificar de manera
or

rápida los fragmentos de código que están afectados por alguna condición dentro de un bucle IF o

dentro de un bucle FOR, por ejemplo. También es útil situar el cursor del ratón tras un paréntesis,
.f
al

pues esto nos marcará los paréntesis que abren y cierran dentro del bloque. Así pues, se verá de un
tu

plumazo qué código se encuentra entre los dos paréntesis.


r
s vi
pu

A pesar de que las opciones se pueden configurar el gusto del consumidor, estas ya vienen
m

configuradas por defecto para cumplir con las convenciones JAVA.


ca

Organise and Add Imports

Las sentencias de importación se muestran de manera correcta siempre y cuando estemos usando

las funciones de autocompletar código para el nombre de una clase JAVA, es posible añadir nuevas

sentencias de importación haciendo uso de la función "Add Import". Mediante el uso "Organizar

Imports" eliminará de forma automática todas las declaraciones de importación que

hayamos hecho y no estén siendo utilizadas, con el fin de hacer el código un poco más eficiente,

ya que estas importaciones no serán añadidas en tiempo de compilación. Accederemos a través de

campusvirtual.formatecyl.com
95 / 109
[AFO018307] IFCD033PO JAVA
[MOD016498] IFCD033PO JAVA
[UDI095804] PROGRAMACIÓN DE APLICACIONES CON JAVA

"Fuente -> Organizar Imports".

Redefinir Métodos

Mediante esta opción podremos marcar los métodos de las superclases que tenemos importadas

para que sean añadidos a la que estamos desarrollando.Accedemos a través de "Alt + Insertar"

om
.c
yl
ec
at
m
or
.f
al
tu
r
s vi
pu
m
ca

La opción "Cosntructor" permitirá especializar todos los constructores usados.

Generate Getter and Setter

El lenguaje Java permite especificar diferentes niveles de visibilidad de atributos. Sin embargo, en

programación orientada a objetos, los atributos internos de una clase deberían ser siempre privados.

campusvirtual.formatecyl.com
96 / 109
[AFO018307] IFCD033PO JAVA
[MOD016498] IFCD033PO JAVA
[UDI095804] PROGRAMACIÓN DE APLICACIONES CON JAVA

Con esto queremos decir que la modificación de esos atributos privados ha de realizarse única y

exclusivamente por la clase que los contiene, siendo imposible su modificación desde una externa.

Es por esto, que para modificar un atributo privado desde una clase externa, es necesario el

uso de métodos proporcionados por la misma clase que nos permitan su acceso o modificación de

una forma controlada (popularmente son conocidos como métodos get y set). Mediante la opción

"Generate Getter and Setter" nos aparecerá una ventana con los posibles métodos que podrían

crearse a raíz de los atributos especificados en la clase. Entonces los métodos necesarios podrían

crearse simplemente seleccionándolos y pulsando "Ok".

om
.c
yl
ec
at
m
or
.f
al
tu
r

Surround with try/catch block


s vi

Para poder usar esta opción es necesario tener seleccionado previamente un fragmento de código
pu

habiendo hecho uso del botón izquierdo del ratón (o pulsando Mayúsculas) y arrastrando. Activar
m

esta opción creará un bloque "try" alrededor del código seleccionado. A continuación del

bloque se añadirán de forma automática los bloques de código "catch", que son los que se
ca

encargarán de manejar la posible excepción que se haya lanzado. Por defecto se añaden elementos

traza dentro de los bloques, para que sea posible posteriormente identificar en qué parte del código

se ha producido dicha excepción.

campusvirtual.formatecyl.com
97 / 109
[AFO018307] IFCD033PO JAVA
[MOD016498] IFCD033PO JAVA
[UDI095804] PROGRAMACIÓN DE APLICACIONES CON JAVA

om
Cuando una excepción que ha sido lanzada no ha sido capturada, aparecerá con un texto marcado

.c
en rojo en la vista "Console" por la salida estándar. Si pulsamos la línea de código de la salida nos

yl
llevará hasta la línea exacta en la que se ha producido la excepción.

ec
at
m
Reestructurar Menu
or

Rename
.f

Para invocar la función de renombrado hay que tener previamente seleccionado un elemento.
al

Usar la opción de "update references" actualizará cualquier referencia al nuevo elemento


tu

renombrado. Mediante la opción Ctrl + R es como deberían renombrarse todos los elementos
r

incluyendo los archivos ".java". Como así es como se han actualizado todas las referencias, no
vi

deberían de aparecer problemas a la hora de compilar. Como estamos renombrando unos


s
pu

determinados elementos, también será posible actualizar las referencias que haya dentro de los

comentarios de Javadoc, comentarios normales y en la cadenas de caracteres entrecomilladas, lo


m

cual también puede resultar bastante útil.


ca

campusvirtual.formatecyl.com
98 / 109
[AFO018307] IFCD033PO JAVA
[MOD016498] IFCD033PO JAVA
[UDI095804] PROGRAMACIÓN DE APLICACIONES CON JAVA

om
.c
yl
ec
Mover

at
Antes de seleccionar "Refactor > Move...", el archivo fuente o elemento que se desea mover deberá
m
haber sido seleccionado. Tan solo será necesario seleccionar el destino de tal forma que se lleve a
or

cabo las operaciones de movimiento. Esta es la forma correcta de mover los archivos, ya que nos
.f

evitaría los posibles problemas que puedan darse en un futuro por referencias o rutas de
al

compilación mal establecidas.


tu
r
s vi
pu
m
ca

Consultar la Documentación

campusvirtual.formatecyl.com
99 / 109
[AFO018307] IFCD033PO JAVA
[MOD016498] IFCD033PO JAVA
[UDI095804] PROGRAMACIÓN DE APLICACIONES CON JAVA

La documentación Javadoc del código que se esté se esté desarrollando puede ser consultada en

tiempo real mediante la colocación del cursor o el puntero del ratón sobre el elemento elegido.

om
.c
yl
ec
La documentación Javadoc externa puede ser consultada dentro de las herramientas de
at
Netbeans, accedemos a través de Herramientas->Analizar Javadoc
m
Eclipse 3.0 dispone de una nueva vista de Javadoc ("Ventana> Herramientas IDE > Javadoc"). La
or

vista muestra la documentación Javadoc que está asociada al elemento sobre el que está situado el
.f

cursor.
al
tu
r
s vi
pu
m
ca

Importar Archivos JAR

En algunas ocasiones necesitaremos importar algunos archivos JAR que no están incluidos por

defecto con el JRE de JAVA por defecto para que nuestro proyecto pueda compilar. Tan solo tenemos

que pulsar el botón derecho sobre la carpeta que deseemos y elegir "Propiedades", seleccionamos

la pestaña "Biblioteca", pulsamos el botón "Añadir JAR/Carpeta" y por último seleccionamos el

archivo ".jar" o ".zip". El nuevo JAR que hemos añadido será visible en la ventana Package Explorer

campusvirtual.formatecyl.com
100 / 109
[AFO018307] IFCD033PO JAVA
[MOD016498] IFCD033PO JAVA
[UDI095804] PROGRAMACIÓN DE APLICACIONES CON JAVA

como si fuese un pequeño frasco.

om
.c
yl
ec
at
m
or
.f
al
tu
r

Parte 4: Vistas
vi

La interfaz de Netbeanscuenta con dos tipos de elementos: las vistas y los editores. Mientras que
s
pu

los editores normalmente permiten realizar una tarea completa, las vistas proporcionan

funciones de apoyo. A estas alturas del tutorial ya debería de contar con suficiente práctica en el
m

uso del editor de código.


ca

Navigator
La ventana del navegador de recursos nos permite observar la estructura de archivos de los

proyectos que han sido definidos. También hay que tener en cuenta que esta vista es la única que

nos enseña el directorio de salida, así como los archivos JAVA que han sido compilados (".class").

Package Explorer

La vista del navegador de paquetes nos enseña la estructura lógica de los paquetes y clases JAVA

campusvirtual.formatecyl.com
101 / 109
[AFO018307] IFCD033PO JAVA
[MOD016498] IFCD033PO JAVA
[UDI095804] PROGRAMACIÓN DE APLICACIONES CON JAVA

almacenados en los distintos proyectos. Las carpetas fuente (que deben almacenar los archivos

fuente ".java") se muestran aquí decoradas con el icono de un paquete contenido. Los ficheros

JAVA pueden ser expandidos de tal manera que se muestren sus métodos y los atributos internos

al pulsar el botón marcado como "+".

Search View

Para poder efectuar una búsqueda en Netbeans debemos acceder a Editar y Buscar. También es

om
posible efectuar búsquedas mediante la pulsación Ctrl + F.

.c
La búsqueda de archivos denominada "Buscar" realiza un tipo de búsqueda textual sobre cualquier

yl
tipo de archivo. Es equivalente a una búsqueda tradicional.

ec
Podemos realizar una búsqueda en todo el proyecto realizando Buscar en Proyecto hace referencia
at
al entorno de trabajo completo, haciendo Ctrl + Mayus + F realizaremos la misma tarea.
m
or
.f
al

Los resultados de la búsqueda aparecen en la vista "Search". También aparecen marcados en gris
tu

dentro del editor en ambos márgenes, en el izquierdo con una flecha amarilla y en el derecho con
r

una marca gris. Al igual que pasaba en muchas ocasiones, si pulsamos sobre uno de estos iconos nos
vi

llevará hasta el punto en el que se ha encontrado esa cadena.


s
pu
m
ca

Navegar por las Vistas y los Editores


Hasta el momento hemos visto cómo podemos utilizar las vistas de Netbeansy cómo las vistas nos

permiten manejar la información de manera eficiente. Ya va siendo hora de explicar unas opciones

campusvirtual.formatecyl.com
102 / 109
[AFO018307] IFCD033PO JAVA
[MOD016498] IFCD033PO JAVA
[UDI095804] PROGRAMACIÓN DE APLICACIONES CON JAVA

de navegación adicionales que nos serán de gran ayuda para encontrar rápidamente la

información que deseemos para que pueda ser presentada de manera adecuada en los editores y las

vistas.

Parte 5: Ejecutar y Depurar


Cuando hayamos completado nuestro programa JAVA será un buen momento de probar que todo

funciona correctamente. Es posible que aparezcan "bugs". Así que entonces irá siendo hora de

depurarlo. Pero estamos de suerte, ya que Netbeansnos proporciona herramientas para poder

om
realizar labores de depuración.

Ejecutar

.c
yl
Para ejecutar un programa dentro de Netbeans hay que seleccionar "Ejecutar> Ejecutar Project"

ec
del menú principal.

at
m
or
.f
al
tu
r
vi

También podemos realizar la ejecución del programa en Netbeans a través del icono siguiente:
s
pu
m
ca

Depurar

JAVA no suele ser tan difícil de depurar como lo puedan ser otros lenguajes de programación,

pero también es verdad que podremos encontrarnos con algún problema grave en las tareas de

depuración. Netbeans nos proporciona una gran herramienta a través de su perspectiva "Depurar".

En este punto de depuración, si pulsamos en el margen izquierdo con el ratón nos aparecerá un

menú contextual. Si seleccionamos "Add/Remove Breakpoint" estaremos añadiendo o quitando un

punto de ruptura, mientras que por contra, "Toggle Breakpoint" nos estará invirtiendo el estado que

tuviese dicho punto de ruptura. Los puntos de ruptura son marcas en las que se detendrá

campusvirtual.formatecyl.com
103 / 109
[AFO018307] IFCD033PO JAVA
[MOD016498] IFCD033PO JAVA
[UDI095804] PROGRAMACIÓN DE APLICACIONES CON JAVA

nuestro programa cuando estemos realizando operaciones de debug, permitiéndonos así

poder ver una vez llegado a este punto, paso a paso la ejecución del programa, así como el valor de

las variables, pudiendo de esta manera identificar los posibles errores.

om
.c
yl
Haciendo clic derecho en un punto de ruptura y seleccionando "Breakpoint Properties..." permitirá

ec
especificar opciones avanzadas del punto de ruptura. "Hit Count" quiere especificar el número

at
de veces que el programa deberá de pasar por el punto de ruptura para detener la
m
ejecución. Las condiciones de la activación pararán la ejecución cuando se cumpla el valor de la
or

condición o cuando su valor sea distinto. Por ejemplo, podemos indicar una variable como una

condición de activación para después seleccionar "suspend when value of condition changes", esto
.f
al

detendrá la ejecución en el punto de ruptura cuando esa variable sea modificada.


tu

Las excepciones son uno de los síntomas más evidentes de errores de ejecución. Los "Java
r

Exception Breakpoints" detienen la ejecución cuando salta una excepción del tipo seleccionado.
vi

Estos puntos de ruptura se activan haciendo clic en el icono "J!" de la vista de "Breakpoints" o desde
s
pu

el menú principal "Run". La ejecución puede detenerse cuando la excepción sea capturada, no

capturada o ambas. Es muy recomendable como práctica de depuración añadir puntos de ruptura
m

de excepciones JAVA de "ArrayIndexOutOfBoundsException" y "NullPointerException", la


ca

primera es lanzada cuando se supera el índice en una matriz y la segunda cuando se intenta acceder

a un elemento null.

Si deseásemos que el programa se detenga cuando el programa alcance los puntos de

ruptura definidos deberemos de ejecutarlo usando el modo de depuración ("Depurar -> Debug

Project"). Cuando se alcanza un punto de ruptura, el programa podrá seguir con la ejecución de

diferentes formas. Si pulsamos con el botón derecho en el editor, dentro de la perspectiva de

depuración nos aparecerá un menú contextual con las siguientes opciones. "Run to line" nos

campusvirtual.formatecyl.com
104 / 109
[AFO018307] IFCD033PO JAVA
[MOD016498] IFCD033PO JAVA
[UDI095804] PROGRAMACIÓN DE APLICACIONES CON JAVA

reanudará la ejecución del programa hasta que este alcance la línea en la que está el cursor. "Step

into selection" seguirá con la ejecución dentro del método seleccionado siempre que el código

fuente del método esté disponible. La ejecución también es posible reanudarla haciendo clic derecho

sobre la ventana "Debug" y haciendo una selección de las opciones oportunas, o bien, pulsando

directamente sobre los iconos de dicha ventana. "Step over" parará en la línea siguiente a la

invocación de un método. "Resume" hará una reanudación de la ejecución normal del programa y

tan solo se detendrá en los puntos de ruptura si sus condiciones de activación se dan.

om
.c
yl
ec
at
m
or
.f
al
tu
r
vi

La vista "Variables" nos ofrecerá una información muy útil puesto que nos muestra el valor actual
s

en el momento de la ejecución que tienen las variables en un punto de ruptura.


pu
m
ca

campusvirtual.formatecyl.com
105 / 109
[AFO018307] IFCD033PO JAVA
[MOD016498] IFCD033PO JAVA
[UDI095804] PROGRAMACIÓN DE APLICACIONES CON JAVA

La vista denominada "Debug" también es bastante útil para poder observar los distintos procesos

que están siendo ejecutados al mismo tiempo, como por ejemplo, hebras. Cuando un proceso de

depuración ha finalizado los procesos que se muestran en la ventana de depuración se mostrarán

como "Finished" (pueden acabarse manualmente con "Clic derecho > Terminate"). La información

de las ejecuciones previas puede eliminarse haciendo clic derecho sobre ella y seleccionando

"Terminate and Remove" o bien con "Terminate All" + "Remove All terminated".

om
.c
yl
ec
at
m
or
.f
al
tu
r
s vi
pu
m
ca

campusvirtual.formatecyl.com
106 / 109
[AFO018307] IFCD033PO JAVA
[MOD016498] IFCD033PO JAVA
[UDI095804] PROGRAMACIÓN DE APLICACIONES CON JAVA

Recuerda

[[[Elemento Multimedia]]]

om
.c
yl
ec
at
m
or
.f
al
tu
r
s vi
pu
m
ca

campusvirtual.formatecyl.com
107 / 109
[AFO018307] IFCD033PO JAVA
[MOD016498] IFCD033PO JAVA
[UDI095804] PROGRAMACIÓN DE APLICACIONES CON JAVA

Autoevaluación

Indica si el siguiente enunciado es verdadero o falso: Desarrollador del lenguaje


de programación. Su conocimiento de la máquina es profundo debido a que debe
desarrollar la aplicación que ayudará al programador a realizar su trabajo

Falso

om
Verdadero

.c
yl
Indica si el siguiente enunciado es verdadero o falso: Las diferentes tecnologías

ec
de programación se diferencian en la manera que ofrecen de estructurar los
datos y el código que forman una aplicación
at
m
or

Falso
.f
al

Verdadero
tu
r
vi

Indica si el siguiente enunciado es verdadero o falso: Para poder desarrollar


software con Java necesitamos una serie de herramientas que nos proporciona
s

Oracle a través de su JDK (Java Development Kit).


pu
m

Falso
ca

Verdadero

Fuentes de eventos (source)...

No son objetos que tiene la capacidad de detectar eventos y notificar a los receptores
de eventos que se han producido esos eventos.

campusvirtual.formatecyl.com
108 / 109
[AFO018307] IFCD033PO JAVA
[MOD016498] IFCD033PO JAVA
[UDI095804] PROGRAMACIÓN DE APLICACIONES CON JAVA

Son objetos que tiene la capacidad de detectar eventos y notificar a los receptores de
eventos que se han producido esos eventos.

Son objetos que no tiene la capacidad de detectar eventos y notificar a los receptores
de eventos que se han producido esos eventos.

Indica si el siguiente enunciado es verdadero o falso: Dentro de cualquier

om
lenguaje de programación existen una serie de estructuras que nos permiten
poder definir una lógica no lineal para trabajar en la aplicación.

.c
yl
Falso

ec
Verdadero at
m
or
.f
al
tu
r
s vi
pu
m
ca

campusvirtual.formatecyl.com
109 / 109

También podría gustarte