Sie sind auf Seite 1von 304

Unauthorized reproduction or distribution prohibited Copyright 2014, Oracle and/or its affiliates

Fundacin Proydesa

has
r)

m
co
hoo ide
Fundamentals of the Java
a
@y t Gu
ProgrammingnLanguage,
a o den
d
Java SE 6 e Stu
gal is
_
avo Guide th
t
e
Student
gus to us
( e
no nsSL-110-SE6-ES Rev E.1
a
lde lice
a
o G rable
eric nsfe
Fed -tra
o
tav a non
s
Gu

D61796CS10
Edition 1.0
D64159

Fundacin Proydesa
Copyright 2007, 2009, Oracle and/or its affiliates. All rights reserved.

Unauthorized reproduction or distribution prohibited Copyright 2014, Oracle and/or its affiliates

Disclaimer
This document contains proprietary information, is provided under a license agreement containing restrictions on use and
disclosure, and is protected by copyright and other intellectual property laws. You may copy and print this document solely for
your own use in an Oracle training course. The document may not be modified or altered in any way. Except as expressly
permitted in your license agreement or allowed by law, you may not use, share, download, upload, copy, print, display,
perform, reproduce, publish, license, post, transmit, or distribute this document in whole or in part without the express
authorization of Oracle.
The information contained in this document is subject to change without notice. If you find any problems in the document,
please report them in writing to: Oracle University, 500 Oracle Parkway, Redwood Shores, California 94065 USA. This
document is not warranted to be error-free.
Sun Microsystems, Inc. Disclaimer
This training manual may include references to materials, offerings, or products that were previously offered by Sun
Microsystems, Inc. Certain materials, offerings, services, or products may no longer be offered or provided.Oracle and its
affiliates cannot be held responsible for any such references should they appear in the text provided.
Restricted Rights Notice
If this documentation is delivered to the U.S. Government or anyone using the documentation on behalf of the U.S.
Government, the following notice is applicable:

m
co
hoo ide
a
@y t Gu
ano den
e
ald s Stu
g
vo_ e thi
a
ust o us
o (g se t
n
dea licen
l
Ga ble
rico sfera
e
Fed -tran
o
tav a non
s
Gu
U.S. GOVERNMENT RIGHTS
The U.S. Governments rights to use, modify, reproduce, release, perform, display, or disclose these training materials are
restricted by the terms of the applicable Oracle license agreement and/or the applicable U.S. Government contract.
Trademark Notice

Oracle and Java are registered trademarks of Oracle and/or its affiliates. Other names may be trademarks of their respective
owners.
AMD, Opteron, the AMD logo, and the AMD Opteron logo are trademarks or registered trademarks of Advanced Micro
Devices. Intel and Intel Xeon are trademarks or registered trademarks of Intel Corporation. All SPARC trademarks are used
under license and are trademarks or registered trademarks of SPARC International, Inc. UNIX is a registered trademark
licensed through X/Open Company, Ltd.

has
r)

Unauthorized reproduction or distribution prohibited Copyright 2014, Oracle and/or its affiliates

Fundacin Proydesa

This page intentionally left blank.

m
co
hoo ide
a
@y t Gu
ano den
e
ald s Stu
g
vo_ e thi
a
ust o us
o (g se t
n
dea licen
l
Ga ble
rico sfera
e
Fed -tran
o
tav a non
s
Gu

has
r)

Unauthorized reproduction or distribution prohibited Copyright 2014, Oracle and/or its affiliates

Fundacin Proydesa

This page intentionally left blank.

m
co
hoo ide
a
@y t Gu
ano den
e
ald s Stu
g
vo_ e thi
a
ust o us
o (g se t
n
dea licen
l
Ga ble
rico sfera
e
Fed -tran
o
tav a non
s
Gu

has
r)

Unauthorized reproduction or distribution prohibited Copyright 2014, Oracle and/or its affiliates

Fundacin Proydesa

Contenido
Acerca de este curso .......................................................... Prlogo-xi
Finalidad del curso .............................................................. Prlogo-xi
Esquema del curso ...............................................................Prlogo-xii
Temas no incluidos .............................................................Prlogo-xiii
Est preparado? .................................................................Prlogo-xiv
Presentaciones ...................................................................... Prlogo-xv
Cmo utilizar el material del curso ..................................Prlogo-xvi
Convenciones......................................................................Prlogo-xvii
Iconos ..........................................................................Prlogo-xvii
Convenciones tipogrficas..................................... Prlogo-xviii
Otras convenciones .................................................... Prlogo-xix

has
r)

a
om
c
oo e
yah uid
@
G
ano dent
e
ald s Stu
g
vo_ e thi
a
ust o us
Descripcin de (gtecnologa Java ..............................................1-1
no la nse t
Objetivos............................................................................................. 1-1
a
lde lice
Comprobacin de los progresos ...................................................... 1-2
a le
o G Aspectos relevantes ........................................................................... 1-4
rab
ric sfeOtros recursos..................................................................................... 1-5
e
Fed -tran Conceptos fundamentales sobre el lenguaje Java ......................... 1-6
o
Orientado a objetos ................................................................... 1-7
tav a non
s
Distribuido ................................................................................. 1-8
Gu

Simple ......................................................................................... 1-9


Multihilo................................................................................... 1-10
Seguro ....................................................................................... 1-10
Grupos de productos de la tecnologa Java ................................. 1-17
Identificacin de los grupos de productos de la
tecnologa Java...................................................................... 1-17
Eleccin del grupo de productos de tecnologa Java correcto..
1-18
Uso de los componentes del SDK de la plataforma Java,
Standard Edition .................................................................. 1-19
Fases del ciclo de vida de los productos....................................... 1-22
Fase de anlisis ........................................................................ 1-23
Fase de diseo.......................................................................... 1-24
Fase de desarrollo ................................................................... 1-25

v
Copyright 2008 Sun Microsystems, Inc. Todos los derechos reservados.Sun Services, Revisin E.1

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2014, Oracle and/or its affiliates

Fase de comprobacin ............................................................ 1-26


Fase de implementacin......................................................... 1-27
Fase de mantenimiento ......................................................... 1-28
Fin del ciclo de vida (EOL) .................................................... 1-29
Por qu debe seguir las fases del ciclo de vida de los
productos?............................................................................. 1-30
Anlisis de un problema y diseo de la solucin......................... 2-1
Objetivos............................................................................................. 2-1
Comprobacin de los progresos ...................................................... 2-2
Aspectos relevantes ........................................................................... 2-3
Otros recursos..................................................................................... 2-4
Estudio de un problema utilizando el anlisis orientado a objetos..
2-5
Identificacin del dominio de un problema.......................... 2-7
Identificacin de los objetos ................................................... 2-8
Otros criterios para reconocer objetos................................. 2-10
Identificacin de los atributos y operaciones de los objetos.....
2-12
Solucin del caso de estudio.................................................. 2-15
Diseo de clases................................................................................ 2-17
Modelado de las clases ........................................................... 2-20

a
om
c
oo e
yah uid
@
G
ano dent
e tu
ald s SJava ....................... 3-1
Desarrollo y comprobacin de _gprograma
un
i
avo se th
Objetivos............................................................................................. 3-1
st u
Comprobacin(gu progresos ...................................................... 3-2
de los
o
Aspectos relevantes ........................................................................... 3-4
no nse t
a
Otros recursos..................................................................................... 3-5
lde licelos componentes de una clase............................ 3-6
a
Identificacin
o G rable de de las clases .................................................... 3-7
eric nsfe Estructuracin clases ................................................................ 3-9
Declaracin de
Fed -tra
Declaraciones y asignaciones de variables.......................... 3-10
avo non
Comentarios............................................................................. 3-11
ust a
Mtodos .................................................................................... 3-12
G

has
r)

Creacin y uso de una clase de prueba......................................... 3-14


Mtodo main........................................................................... 3-15
Compilacin y ejecucin (comprobacin) de un programa....... 3-17
Compilacin de un programa ............................................... 3-17
Ejecucin (comprobacin) de un programa ........................ 3-18

Declaracin, inicializacin y uso de variables .............................. 4-1


Objetivos............................................................................................. 4-1
Comprobacin de los progresos ...................................................... 4-2
Aspectos relevantes ........................................................................... 4-4
Otros recursos..................................................................................... 4-5
Identificacin de la sintaxis y el uso de las variables.................... 4-6
Usos de las variables................................................................. 4-7
Declaracin e inicializacin de variables.............................. 4-8

vi

Fundamentals of the Java Programming Language


Copyright 2008 Sun Microsystems, Inc. Todos los derechos reservados. Sun Services, Revisin E.1

Unauthorized reproduction or distribution prohibited Copyright 2014, Oracle and/or its affiliates

Fundacin Proydesa

Descripcin de los tipos de datos primitivos............................... 4-10


Tipos primitivos enteros ........................................................ 4-10
Tipos primitivos en coma flotante........................................ 4-12
Tipo primitivo textual ........................................................... 4-13
Tipo primitivo lgico.............................................................. 4-14
Eleccin del tipo de dato........................................................ 4-14
Declaracin de variables y asignacin de sus valores ................ 4-15
Asignacin de nombre a las variables.................................. 4-15
Asignacin de valores a las variables................................... 4-17
Constantes ................................................................................ 4-19
Almacenamiento de tipos primitivos y constantes en
la memoria ............................................................................ 4-21
Uso de operadores aritmticos para modificar valores.............. 4-22
Operadores matemticos estndar ....................................... 4-22
Operadores de incremento y decremento (++ y --) .......... 4-23
Orden de precedencia de los operadores ............................ 4-24
Uso de la promocin y conversin de tipos................................. 4-26
Promocin ............................................................................... 4-27
Conversin de tipos ................................................................ 4-28
Suposiciones del compilador con respecto a los tipos
enteros y en coma flotante .................................................. 4-29

has
r)

a
om
c
oo e
yah uid
@
G
ano dent
e
ald s Stu
Creacin y uso de objetos...............................................................5-1
g
Objetivos............................................................................................. 5-1
vo_ e thi
a
Comprobacinust progresos ...................................................... 5-2
de los us
Aspectoso (g
to
n relevantes ........................................................................... 5-4
se
Otros recursos..................................................................................... 5-5
a
n
lde lic de
Declaracin e referencias a objetos, instanciacin de objetos e
a
inicializacin de referencias a objetos .......................................... 5-6
o G rable
ric sfe Declaracin de variables de referencia a objetos.................. 5-8
e
Instanciacin de un objeto ....................................................... 5-8
Fed -tran
o on
Inicializacin de variables de referencia a objetos ............... 5-9
v
sta a n
Uso de una variable de referencia a objetos para
Gu

manejar datos....................................................................... 5-10


Almacenamiento de variables de referencia a objetos
en la memoria ....................................................................... 5-11
Asignacin de una referencia de una variable a otra ........ 5-12
Uso de la clase String .................................................................... 5-14
Creacin de un objeto String con la palabra clave new ... 5-14
Creacin de un objeto String sin la palabra clave new .... 5-14
Almacenamiento de objetos String en la memoria .......... 5-15
Uso de variables de referencia para objetos String.......... 5-16
Estudio de las bibliotecas de clases de Java ................................. 5-17
Especificacin de la biblioteca de clases de Java ................ 5-17
Uso de la especificacin de la biblioteca de clases de Java para
obtener informacin sobre un mtodo.............................. 5-19

Uso de operadores y construcciones de toma de decisiones.....6-1

vii
Copyright 2008 Sun Microsystems, Inc. Todos los derechos reservados. Sun Services, Revisin E.1

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2014, Oracle and/or its affiliates

Objetivos............................................................................................. 6-1
Comprobacin de los progresos ...................................................... 6-2
Aspectos relevantes ........................................................................... 6-3
Otros recursos..................................................................................... 6-4
Uso de operadores relacionales y condicionales ........................... 6-5
Ejemplo de un ascensor............................................................ 6-6
Operadores relacionales.......................................................... 6-8
Comprobacin de la igualdad entre dos secuencias de
caracteres ................................................................................. 6-9
Operadores condicionales..................................................... 6-10
Creacin de construcciones if e if/else.................................... 6-11
Construccin if....................................................................... 6-11
Sentencias if anidadas ......................................................... 6-14
Construccin if/else............................................................ 6-15
Construcciones if/else encadenadas ............................... 6-18
Uso de la construccin switch ...................................................... 6-20
Cundo usar construcciones switch ................................... 6-22

a
om
c
Uso de construcciones en bucle....................................................7-1
oo e
Objetivos............................................................................................. 7-1
yah uid
@
G
Comprobacin de los progresos ...................................................... 7-2
ano dent
Aspectos relevantes ........................................................................... 7-3
e
ald s Stu
Creacin de bucles while ................................................................. 7-4
g
Bucles while anidados............................................................. 7-6
vo_ e thi
a s
Desarrollo de un bucle for............................................................... 7-9
ust o............................................................... 7-12
Bucles o (g
for anidados
t u
e
Codificacin de un s
n bucle do/while.............................................. 7-13
eando/while anidados .................................................... 7-16
ld
ce
e
Ga Bucles li de las construcciones en bucle ..................... 7-17
Comparacin
bl
rico sferay uso de mtodos.......................................................... 8-1
e n
a Objetivos............................................................................................. 8-1
Fed -trDesarrollo
vo non
a
Comprobacin de los progresos ...................................................... 8-2
ust a
Aspectos relevantes ........................................................................... 8-4
G

has
r)

Creacin de mtodos y llamadas a mtodos.................................. 8-5


Forma bsica de un mtodo .................................................... 8-6
Llamada a un mtodo desde una clase diferente ................. 8-7
Llamada a un mtodo en la misma clase............................... 8-9
Directrices para realizar llamadas a mtodos..................... 8-10
Paso de argumentos y devolucin de valores ............................. 8-12
Declaracin de mtodos con argumentos ........................... 8-13
Llamadas a mtodos con argumentos ................................. 8-14
Declaracin de mtodos con valores de retorno ............... 8-16
Devolucin de un valor.......................................................... 8-16
Recepcin de valores de retorno.......................................... 8-17
Ventajas de usar mtodos ...................................................... 8-18
Creacin de mtodos y variables static..................................... 8-19

viii

Fundamentals of the Java Programming Language


Copyright 2008 Sun Microsystems, Inc. Todos los derechos reservados. Sun Services, Revisin E.1

Unauthorized reproduction or distribution prohibited Copyright 2014, Oracle and/or its affiliates

Fundacin Proydesa

Declaracin de mtodos static........................................... 8-19


Llamada a los mtodos static ............................................ 8-19
Declaracin de variables static.......................................... 8-21
Acceso a las variables static............................................... 8-21
Mtodos y variables estticos en el API de Java................ 8-22
Cundo declarar un mtodo o una variable static ......... 8-23
Uso de la sobrecarga de mtodos .................................................. 8-25
Sobrecarga de mtodos y el API de Java ............................ 8-27
Usos de la sobrecarga de mtodos........................................ 8-28
Implementacin de la encapsulacin y los constructores...........9-1
Objetivos............................................................................................. 9-1
Comprobacin de los progresos ...................................................... 9-2
Aspectos relevantes ........................................................................... 9-3
Uso de la encapsulacin.................................................................... 9-4
Modificadores de visibilidad................................................... 9-4
Modificador public ................................................................. 9-5
Modificador private............................................................... 9-8
Interfaz e implementacin ..................................................... 9-10
Mtodos get y set .................................................................... 9-12
Programa de ascensor encapsulado ..................................... 9-16
Descripcin del mbito de las variables ....................................... 9-21
Forma en que las variables de instancia y locales aparecen en
la memoria ............................................................................ 9-22
Creacin de constructores............................................................... 9-24
Constructor predeterminado................................................. 9-26
.Sobrecarga de constructores................................................. 9-28

has
r)

a
om
c
oo e
yah uid
@
G
ano dent
e
ald s Stu
g
vo_ e thi
a
ust o us
o (g se t
n
dea licen
l
Creacin ye
Ga bl uso de matrices (arrays).............................................10-1
ra
rico sfeObjetivos........................................................................................... 10-1
e n Comprobacin de los progresos .................................................... 10-2
Fed -tra
Aspectos relevantes ......................................................................... 10-4
avo non
Creacin de arrays unidimensionales........................................... 10-5
ust a
Declaracin de un array unidimensional ............................ 10-6
G

Instanciacin de un array unidimensional.......................... 10-7


Inicializacin de un array unidimensional.......................... 10-8
Declaracin, instanciacin e inicializacin de arrays
unidimensionales ................................................................. 10-9
Acceso a un valor dentro de un array............................... 10-10
Almacenamiento de arrays unidimensionales en la memoria .
10-11
Establecimiento de valores de arrays utilizando el atributo length
y un bucle ..................................................................................... 10-14
Atributo length.................................................................... 10-14
Establecimiento de los valores del array utilizando un bucle..
10-14
Uso del array args en el mtodo main ....................................... 10-16

ix
Copyright 2008 Sun Microsystems, Inc. Todos los derechos reservados. Sun Services, Revisin E.1

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2014, Oracle and/or its affiliates

Conversin de argumentos String en otros tipos .......... 10-17


Funcin varargs................................................................... 10-17
Descripcin de los arrays bidimensionales ................................ 10-18
Declaracin de un array bidimensional............................. 10-19
Instanciacin de un array bidimensional .......................... 10-19
Inicializacin de un array bidimensional .......................... 10-20
Implementacin de la herencia..................................................... 11-1
Objetivos........................................................................................... 11-1
Comprobacin de los progresos .................................................... 11-2
Aspectos relevantes ......................................................................... 11-4
Herencia ............................................................................................ 11-5
Superclases y subclases .......................................................... 11-6
Comprobacin de las relaciones entre superclases y subclases
11-8
Modelado de las superclases y subclases .......................... 11-10
Declaracin de una superclase............................................ 11-11
Declaracin de una subclase................................................ 11-13
Ejemplo de declaracin de una subclase ........................... 11-14
Abstraccin ..................................................................................... 11-15
La abstraccin en el anlisis y el diseo ............................ 11-15
Clases del API de Java................................................................... 11-17
Clases disponibles de forma implcita ............................... 11-17
Importacin y calificacin de clases ................................... 11-18

a
om
c
oo e
yah uid
@
G
ano dent
e
ald s Stu
g
vo_ e thi
a
ust o us
Siguientes pasos .............................................................................A-1
o (g se t
Cmo prepararse para programar.................................................. A-2
n
Descarga e la
dea licden tecnologa Java............................................... A-2
l
e
Ga Descarga de la especificacin del API de Java SE ............... A-2
Configuracin del equipo para desarrollar y ejecutar
co ferabl
i
programas Java...................................................................... A-3
der ans
Fe -tr
Descarga de un entorno de desarrollo o un depurador ..... A-3
o
Referencias ......................................................................................... A-4
tav a non
us
Nociones bsicas sobre tecnologa Java ................................ A-4
G

has
r)

Applets...................................................................................... A-5
Tutorial en Internet .................................................................. A-5
Artculos, consejos y documentos tcnicos .......................... A-5

Palabras clave del lenguaje de programacin Java .....................B-1


Palabras clave .....................................................................................B-2
Convenciones de asignacin de nombres en el lenguaje Java ..C-1
Identificadores de clases, mtodos y variables............................. C-2
Desplazamiento por el sistema operativo Solaris.....................D-1
Gua de referencia rpida de Solaris .............................................. D-2

Fundamentals of the Java Programming Language


Copyright 2008 Sun Microsystems, Inc. Todos los derechos reservados. Sun Services, Revisin E.1

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2014, Oracle and/or its affiliates

Prlogo

Acerca de este curso


Finalidad del curso
Este curso le proporcionar los conocimientos necesarios para:

has
r)

a
om
c
oocrear varias
Utilizar diferentes construcciones del lenguaje Javah
ya parauide
@
aplicaciones Java.
G
ano dent y bucles para
Utilizar mtodos, construcciones lde
ade toma de decisin
g i tu
determinar el ujo de los programas. s S
v _ e th
adeoprogramacin Java de nivel intermedio y
t
Implementar conceptos
gus to us
conceptos de programacin orientada a objetos (OO) en programas
(
no nse
Java.
a
lde lice
a
o G rable
eric nsfe
Fed -tra
o
tav a non
s
Gu

Manejar con soltura los conceptos relativos a la tecnologa Java, el


lenguaje de programacin Java y el ciclo de vida de los productos.

Prlogo-xi
Copyright 2008 Sun Microsystems, Inc. Todos los derechos reservados. Sun Services, Revisin E.1

Fundacin Proydesa
Esquema del curso

Esquema del curso


Unauthorized reproduction or distribution prohibited Copyright 2014, Oracle and/or its affiliates

Este esquema le permitir ver los progresos que va realizando con


respecto a los objetivos del curso.

Introduccin a la programacin en Java


Descripcin de la
tecnologa Java

Anlisis de un
problema y diseo
de la solucin

Desarrollo y
comprobacin de un
programa Java

a
om
c
oo e
Declaracin,
Creacin y
yah uid
inicializacin y
uso de objetoso@
G
uso de variables
an dent
e
ald s Stu
g i
vo_ lostprogramas
Determinacin del ujo de e h
a
ust o us
o (g se t
Uso de operadoresan
e
Desarrollo y
l de licen Uso de
construccionesd
a le
uso de mtodos
bucles
G b
toma de decisin
rico sfera
e
Fed -tran
o
Conceptos
tav a non intermedios sobre tecnologa Java y programacin OO
s
Gu

has
r)

Conceptos fundamentales sobre programacin en Java

Implementacin de
la encapsulacin y
los constructores

Prlogo-xii

Creacin y
uso de arrays

Implementacin
de la herencia

Programacin Java para no Programadores


Copyright 2008 Sun Microsystems, Inc. Todos los derechos reservados. Sun Services, Revisin E.1

Fundacin Proydesa
Temas no incluidos

Unauthorized reproduction or distribution prohibited Copyright 2014, Oracle and/or its affiliates

Temas no incluidos
En este curso no se tratan los temas indicados a continuacin. Muchos de
ellos forman parte de otros cursos ofrecidos por los Servicios de Formacin
Sun.

Conceptos avanzados sobre programacin Java, que se cubren en el


curso SL-275: Programacin Java

Conceptos avanzados de anlisis y diseo OO, que se cubren en el


curso OO-226: Anlisis y Diseo OO con UML

Programacin de applets (miniaplicaciones) o diseo de pginas web.

Consulte el catlogo de los Servicios de Formacin Sun para obtener


informacin detallada sobre los cursos y la inscripcin.

has
r)

m
co
hoo ide
a
@y t Gu
ano den
e
ald s Stu
g
vo_ e thi
a
ust o us
o (g se t
n
dea licen
l
Ga ble
rico sfera
e
Fed -tran
o
tav a non
s
Gu

Acerca de este curso

Prlogo-xiii

Copyright 2008 Sun Microsystems, Inc. Todos los derechos reservados. Sun Services, Revisin E.1

Fundacin Proydesa
Est preparado?

Est preparado?
Unauthorized reproduction or distribution prohibited Copyright 2014, Oracle and/or its affiliates

Si responde armativamente a las siguientes preguntas, se puede


considerar preparado para realizar el curso.

Sabe crear y editar archivos de texto con un editor de texto?

Sabe utilizar un navegador web (WWW)?

Sabe resolver problemas de lgica?

has
r)

m
co
hoo ide
a
@y t Gu
ano den
e
ald s Stu
g
vo_ e thi
a
ust o us
o (g se t
n
dea licen
l
Ga ble
rico sfera
e
Fed -tran
o
tav a non
s
Gu

Prlogo-xiv

Programacin Java para no Programadores


Copyright 2008 Sun Microsystems, Inc. Todos los derechos reservados. Sun Services, Revisin E.1

Fundacin Proydesa
Presentaciones

Unauthorized reproduction or distribution prohibited Copyright 2014, Oracle and/or its affiliates

Presentaciones
Despus de esta introduccin sobre el curso, ha llegado el momento de
presentarse al profesor y los dems alumnos. Para ello, indique lo siguiente:

Nombre

Empresa

Cargo, funcin y responsabilidad

Experiencia relacionada con los temas de este curso

Razones para inscribirse en el curso

Expectativas con respecto al curso

has
r)

m
co
hoo ide
a
@y t Gu
ano den
e
ald s Stu
g
vo_ e thi
a
ust o us
o (g se t
n
dea licen
l
Ga ble
rico sfera
e
Fed -tran
o
tav a non
s
Gu

Acerca de este curso

Prlogo-xv

Copyright 2008 Sun Microsystems, Inc. Todos los derechos reservados. Sun Services, Revisin E.1

Fundacin Proydesa
Cmo utilizar el material del curso

Cmo utilizar el material del curso


Unauthorized reproduction or distribution prohibited Copyright 2014, Oracle and/or its affiliates

Para que pueda sacar el mximo provecho a este curso, el temario incluye
un mdulo didctico que consta de lo siguiente:

Finalidad: al nal del curso debera ser capaz de alcanzar las metas
jadas y cumplir todos los objetivos.

Objetivos: despus de cubrir una parte del contenido del curso,


debera estar en disposicin de cumplir los objetivos. Los objetivos
permiten alcanzar la meta y lograr nuevos objetivos.

Clases tericas: el profesor ofrece informacin especfica para cumplir


los objetivos del mdulo. Esta informacin ayuda a adquirir los
conocimientos necesarios para realizar correctamente las actividades.

Actividades: las actividades son de diversa ndole y pueden


incluir ejercicios, autoevaluaciones, discusiones y demostraciones.
Las actividades ayudan a dominar las materias.

m
co
hoo idde
ya u e
Material visual de apoyo: el profesor puede utilizar este tipo
@
G
ayuda para explicar de forma grca conceptos comotel de un
ano den grcos,
determinado proceso. La ayuda visual e
ald suele constar de
Stu
imgenes animadas y vdeo. _g
is
avo se th
t
gus to u
(
no nse
a
lde lice
a
o G rable
eric nsfe
Fed -tra
o
tav a non
s
Gu

Prlogo-xvi

Programacin Java para no Programadores


Copyright 2008 Sun Microsystems, Inc. Todos los derechos reservados. Sun Services, Revisin E.1

has
r)

Fundacin Proydesa
Convenciones

Unauthorized reproduction or distribution prohibited Copyright 2014, Oracle and/or its affiliates

Convenciones
En este curso se usan determinadas convenciones para representar varios
elementos y recursos de formacin alternativos.

Iconos

1
2
3

Demostracin Indica que en ese momento se recomienda ver la


demostracin del tema en cuestin.

has
r)

a
om
c
!
oo e
?
yah uid
@ tG
n
ano adicional que puede
Lo saba? Indica la existencia de informacin ude
lde Sentender el concepto que
t
ayudar al alumno, pero que no es ga
_crucial ipara
s
o
se est explicando.
tav use th
s
(gu e to
no ns
ala existencia de informacin complementaria que puede
e
Nota Indica
ald le lice que no es crucial para entender el concepto que se
G b
ayudar al alumno,
co explicando. El pero debera ser capaz de entender el concepto o de
r
eri est sfelaa sin alumno
d realizar tarea esta informacin. En las notas se incluyen los mtodos
e
an
o F on-trabreviados del teclado y los ajustes menores del sistema, entre otra
v
sta a n
informacin.
Gu
Discusin Indica que es aconsejable entablar un debate general o en
grupos reducidos sobre el tema tratado.

Atencin Indica que existe el riesgo de causar lesiones personales por


causas no elctricas, o daos irreversibles en los datos, el software o el
sistema operativo. Advierte de un posible riesgo (del que no se tiene
certeza), que depende de la accin que realice el usuario.
Atencin Indica que se ocasionarn lesiones personales o daos
irreversibles en los datos, el software o el sistema operativo si se realiza la
accin. No advierte de posibles daos, sino de los resultados catastrcos
de la accin.

Acerca de este curso

Prlogo-xvii

Copyright 2008 Sun Microsystems, Inc. Todos los derechos reservados. Sun Services, Revisin E.1

Fundacin Proydesa
Convenciones

Autoevaluacin Seala las actividades de autoevaluacin, como


preguntas de respuesta nica y mltiple.

Unauthorized reproduction or distribution prohibited Copyright 2014, Oracle and/or its affiliates

Caso de estudio Indica la existencia de un ejemplo o caso de estudio


que se utiliza a lo largo de todo el curso.

Convenciones tipogrficas
Se utiliza Courier para indicar nombres de comandos, archivos, cdigo
de programacin y mensajes del sistema que aparecen en la pantalla,
por ejemplo:

has
r)

m
co
Utilice ls-a para ver la lista de todos los archivos.
hoo ide
a
system% Tiene correo.
@y t Gu
o n
anprogramacin tales
e
Tambin se utiliza Courier con constructores de ude
ald s St por ejemplo:
como los nombres de clases, mtodosg palabras clave,
y
vo_ e thi obtener informacin
a
El mtodo getServletInfo se utiliza para
ust o us
sobre el autor.
o (g se t contiene el constructor Dialog.
n
La clase java.awt.Dialog
dea licen
al le
GCourier en negrita a los nmeros y caracteres que debe
Se co
aplica
ri sf el ab
introducirer usuario, por ejemplo:
e n
Fed -traPara ver la lista de archivos de este directorio, escriba:
o
tav a non # ls
s
Gu
Tambin se usa Courier en negrita en las lneas de cdigo de
programacin que se citan en un descripcin textual, por ejemplo:
1 import java.io.*;
2 import javax.servlet.*;
3 import javax.servlet.http.*;
La interfaz javax.servlet se importa para poder acceder a los
mtodos de su ciclo de vida (lnea 2).

Prlogo-xviii

Programacin Java para no Programadores


Copyright 2008 Sun Microsystems, Inc. Todos los derechos reservados. Sun Services, Revisin E.1

Fundacin Proydesa
Convenciones
Se aplica Courier en cursiva a las variables y los nombres de ejemplo
de la lnea de comandos que se sustituyen por un nombre o valor real,
por ejemplo:

Unauthorized reproduction or distribution prohibited Copyright 2014, Oracle and/or its affiliates

Para eliminar un archivo, utilice el comando rm nombre de archivo.


Se usa Courier en cursiva y negrita para representar variables
cuyos valores debe introducir el alumno durante un ejercicio, por ejemplo:
Escriba chmod a+rwx nombre de archivo para conceder derechos
de lectura, escritura y ejecucin sobre ese archivo a todos, grupos y
usuarios.
La fuente Palatino en cursiva se utiliza con ttulos de libros, palabras o
trminos nuevos o que se desea enfatizar, por ejemplo:

has
r)

a
om
c
oo e
yah uid
@
G
Otras convenciones
ano dent
e tu
ald s se emplean adems las
g
En los ejemplos de programacin en Java S
vo_ e thi
siguientes convenciones: ta
s
us o van
( mtodotno u seguidos de parntesis, salvo cuando
Los nombres de g
o
se incluyen listase parmetros ociales o reales, por ejemplo:
a una en de
de ic
almtodo ldoIt... designa cualquier mtodo denominado doIt.
El
e
G
co El rabl doIt()... indica un mtodo doIt que no admite
i
der ansfe mtodo
e
argumentos.
o F on-tr
v n
a
Slo se producen saltos de lnea cuando hay separaciones (comas),
ust a
conjunciones (operadores) o espacios en blanco en el cdigo.
G
Consulte el captulo 6 del Manual del usuario.
Se denominan opciones de clase.

El cdigo interrumpido se sangra cuatro espacios bajo el cdigo


inicial.

Cuando en el sistema operativo Solaris se utiliza un comando


distinto al empleado en la plataforma Microsoft Windows, se
muestran ambos comandos, por ejemplo:
En Solaris:
$CD SERVER_ROOT/BIN
En Microsoft Windows:
C:\>CD SERVER_ROOT\BIN

Acerca de este curso

Prlogo-xix

Copyright 2008 Sun Microsystems, Inc. Todos los derechos reservados. Sun Services, Revisin E.1

Unauthorized reproduction or distribution prohibited Copyright 2014, Oracle and/or its affiliates

Fundacin Proydesa

m
co
hoo ide
a
@y t Gu
ano den
e
ald s Stu
g
vo_ e thi
a
ust o us
o (g se t
n
dea licen
l
Ga ble
rico sfera
e
Fed -tran
o
tav a non
s
Gu

has
r)

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2014, Oracle and/or its affiliates

Mdulo 1

Descripcin de la tecnologa Java


Objetivos

has
r)

El estudio de este mdulo le proporcionar los conocimientos necesarios


para:

a
om
c
Describir los conceptos fundamentales del lenguaje de programacin
oo e
Java.
d
yah uitecnologa
Enumerar los tres grupos de productos que@
componen la
G
ano dent
Java.
e tu
ald s forman el ciclo de vida de los
Resumir cada una de las siete g
que S
o_ fasesthi
v
productos.
sta use
u
o (gunae to
Este mdulo contiene s introduccin a la tecnologa Java, el lenguaje
n
de programacin Java n el ciclo de vida habitual en el desarrollo de las
dea lice y
l
aplicaciones. le
Ga b
rico sfera
e
Fed -tran
o
tav a non
s
Gu

1-1
Copyright 2008 Sun Microsystems, Inc. Todos los derechos reservados. Sun Services, Revisin E.1

Fundacin Proydesa
Comprobacin de los progresos

Comprobacin de los progresos


Unauthorized reproduction or distribution prohibited Copyright 2014, Oracle and/or its affiliates

Introduzca un nmero del 1 al 5 en la columna Principio del mdulo


a n de evaluar su capacidad para cumplir cada uno de los objetivos
propuestos. Al nalizar el mdulo, vuelva a evaluar sus capacidades y
determine la mejora de conocimientos conseguida por cada objetivo.

Objetivos del mdulo

Evaluacin
(1 = No puedo cumplir
este objetivo,
5 = Puedo cumplir este
objetivo)
Principio
del mdulo

Final del
mdulo

Mejora de
conocimientos
(Final
Principio)

a
om
c
Describir los conceptos
oo e
fundamentales del lenguaje
yah uid
de programacin Java.
@
G
ano dent
Enumerar los tres grupos de
e
ald s Stu
productos que componen la
g
tecnologa Java.
vo_ e thi
a
ust o us
Resumir cada una de las siete
(g
fases que forman el o de e
ciclo s
n n t
a
vida de los lde
productos. e
c
Ga ble li
a
r co sfe de
El iresultado r esta evaluacin ayudar a los Servicios de Formacin Sun
e n
Fed (SES) a determinar la efectividad de su formacin. Por favor, indique una
-tra
vo nonescasa mejora de conocimientos (un 0 o un 1 en la columna de la derecha)
a
si quiere que el profesor considere la necesidad de presentar ms material
ust a
G

has
r)

de apoyo durante las clases. Asimismo, esta informacin se enviar al


grupo de elaboracin de cursos de SES para revisar el temario de este
curso.

1-2

Programacin Java para no Programadores


Copyright 2008 Sun Microsystems, Inc. Todos los derechos reservados. Sun Services, Revisin E.1

Fundacin Proydesa
Comprobacin de los progresos

Unauthorized reproduction or distribution prohibited Copyright 2014, Oracle and/or its affiliates

Notas

has
r)

m
co
hoo ide
a
@y t Gu
ano den
e
ald s Stu
g
vo_ e thi
a
ust o us
o (g se t
n
dea licen
l
Ga ble
rico sfera
e
Fed -tran
o
tav a non
s
Gu

Descripcin de la tecnologa Java


Copyright 2008 Sun Microsystems, Inc. Todos los derechos reservados. Sun Services, Revisin E.1

1-3

Fundacin Proydesa
Aspectos relevantes

Unauthorized reproduction or distribution prohibited Copyright 2014, Oracle and/or its affiliates

Aspectos relevantes

!
?

Discusin Las preguntas siguientes son relevantes para comprender en


qu consiste la tecnologa Java:

Qu signican para usted las siguientes palabras:

Seguro

Orientado a objetos

Independiente

Dependiente

Distribuido

Qu fases intervienen en la construccin de algo, por ejemplo, una


casa o un mueble?

m
co
hoo ide
a
@y t Gu
ano den
e
ald s Stu
g
vo_ e thi
a
ust o us
o (g se t
n
dea licen
l
Ga ble
rico sfera
e
Fed -tran
o
tav a non
s
Gu

1-4

Programacin Java para no Programadores


Copyright 2008 Sun Microsystems, Inc. Todos los derechos reservados. Sun Services, Revisin E.1

has
r)

Fundacin Proydesa
Otros recursos

Unauthorized reproduction or distribution prohibited Copyright 2014, Oracle and/or its affiliates

Otros recursos
Otros recursos Los documentos siguientes proporcionan informacin
complementaria sobre los temas tratados en este mdulo:

Feature Stories About Java Technology. [En la web]. Disponible en:


http://java.sun.com/features/index.html
Una historia sobre las personas que hicieron posible el desarrollo de
la tecnologa Java, escrita con motivo del quinto aniversario de esta
tecnologa.

Tutorial de Java. [En la web]. Disponible en:


http://java.sun.com/docs/books/tutorial/
Una gua prctica para programadores que incluye cientos de
ejemplos y ejercicios completos.

m
co
hoo ide
a
@y t Gu
ano den
e
ald s Stu
g
vo_ e thi
a
ust o us
o (g se t
n
dea licen
l
Ga ble
rico sfera
e
Fed -tran
o
tav a non
s
Gu

Descripcin de la tecnologa Java


Copyright 2008 Sun Microsystems, Inc. Todos los derechos reservados. Sun Services, Revisin E.1

has
r)

1-5

Fundacin Proydesa
Conceptos fundamentales sobre el lenguaje Java

Conceptos fundamentales sobre el lenguaje Java


Unauthorized reproduction or distribution prohibited Copyright 2014, Oracle and/or its affiliates

El lenguaje de programacin Java naci en 1991 como parte de un proyecto


de investigacin destinado a desarrollar un lenguaje de programacin
llamado Oak (en espaol, roble) que resolvera la falta de comunicacin
entre numerosos dispositivos de consumo tales como las videograbadoras
y los televisores. En concreto, un equipo de expertos en desarrollo de
software (el equipo Green) quera crear un lenguaje que permitiese a
diferentes dispositivos de consumo dotados de diferentes unidades de
procesamiento central (CPU) compartir las mismas mejoras del software.
Lo saba? James Gosling, uno de los miembros del equipo, denomin
Oak al nuevo lenguaje como referencia al roble que vea a travs de su
ventana.

a
om
Este intento inicial fracas despus de varios acuerdos fallidos oc varias
con
o obligado a

compaas de dispositivos de consumo. El equipo Green se h


ya vio uide
buscar otro mercado para su nuevo lenguaje.
@
G
ano dent
e
Afortunadamente, empezaba a popularizarse el usotde la World Wide Web
ald s S u
g
y el equipo reconoci que el lenguaje_
para
h
vo Oakeleraiperfectode las desarrollar
a se tcontenido
componentes multimedia que t
pginas web.
us mejorasen
u
Los primeros desarrollosg lenguaje Oak se aplicaron a estas pequeas
del
(
o
no nse t
aplicaciones, llamadas applets, y los programadores que usaban Internet
a e
adoptaronalde se convertira en el lenguaje de programacin Java.
lo que
c
G ble li
rico sfera
e n
Fed Nota Para conocer con msydetalle la historia del lenguaje Java, visite
-tra
vo nonhttp://www.java.sun.com realice una bsqueda de la siguiente frase
a
History of Java.
ust a
G

has
r)

El lenguaje Java se dise para ser:

Distribuido

Simple

Multihilo

Seguro

1-6

Orientado a objetos

Independiente de la plataforma

Programacin Java para no Programadores


Copyright 2008 Sun Microsystems, Inc. Todos los derechos reservados. Sun Services, Revisin E.1

Fundacin Proydesa
Conceptos fundamentales sobre el lenguaje Java

Unauthorized reproduction or distribution prohibited Copyright 2014, Oracle and/or its affiliates

Orientado a objetos
Java es un lenguaje de programacin orientada a objetos (OO) porque uno
de los principales objetivos del programador de aplicaciones Java es crear
objetos, fragmentos de cdigo autnomos que puedan interaccionar con
otros objetos para resolver un problema. La programacin OO empez con
el lenguaje SIMULA-67 en 1967 y ha dado lugar a lenguajes tan populares
como C++, en el que se ha inspirado ligeramente el lenguaje Java.
La programacin OO se diferencia de la programacin por procedimientos
en que sta ltima se centra en la secuencia de pasos del cdigo necesarios
para resolver un problema, mientras que los lenguajes orientados a objetos
se centran en la creacin e interaccin de los objetos.

has
En la gura siguiente se muestra la importancia que tiene la secuencia de
ar)
m
operaciones en un programa basado en procedimientos.
co
Paso 1
1
hoo ide
a
@y t Gu
ano den
e
Paso 2
2
ald s Stu
g
vo_ e thi
a
ust o us
g
Paso 3e t
3no (
s
dea licen
l
Ga ble
rico sfera 4 Paso 4
e
Fed -tran
o
tav a non
us
Paso 5
5

Figura 1-1

Importancia de la secuencia en un programa basado en


procedimientos

Descripcin de la tecnologa Java


Copyright 2008 Sun Microsystems, Inc. Todos los derechos reservados. Sun Services, Revisin E.1

1-7

Fundacin Proydesa
Conceptos fundamentales sobre el lenguaje Java
En la gura siguiente se ilustra la importancia de los objetos y sus
interacciones en un programa orientado a objetos.

Unauthorized reproduction or distribution prohibited Copyright 2014, Oracle and/or its affiliates

Objeto
Objeto

Objeto
Objeto

Objeto
Objeto

a
om
c
oo e
yah u
Figura 1-2 Importancia de los objetos y sus interacciones en unid
@
G
programa OO
ano dent
e
ald s Stu
g
Distribuido
vo_ e thi
a
ust o us
o (g se t
Java es un lenguaje distribuido porque da cabida a tecnologas de
n
redes distribuidas tales como RMI (Remote Method Invocation),
dea licen
l
CORBAGa
(Common Object Request Broker Architecture) y URL (Universal
e
co ferabl
Resource Locator).
i
der ans
e tr
o F onAsimismo, la capacidad de carga dinmica de clases de Java permite
tav a n descargar fragmentos de cdigo a travs de Internet y ejecutarlas en un
s
Gu
equipo informtico de tipo PC.

has
r)

Nota Los trminos tecnologa Java y lenguaje de programacin Java no


se reeren a lo mismo. La tecnologa Java hace referencia a una familia de
productos Java de la que el lenguaje de programacin es slo una parte.

1-8

Programacin Java para no Programadores


Copyright 2008 Sun Microsystems, Inc. Todos los derechos reservados. Sun Services, Revisin E.1

Fundacin Proydesa
Conceptos fundamentales sobre el lenguaje Java
En la gura siguiente se ilustran las propiedades distribuidas de la
tecnologa Java.

Unauthorized reproduction or distribution prohibited Copyright 2014, Oracle and/or its affiliates

Ejecucin

Applet

Figura 1-3

Applet

El lenguaje de programacin Java es distribuido

Simple

has
r)

El lenguaje Java es simple porque sus diseadores han suprimido algunas


de las construcciones de programacin ms complejas o difciles de otros
lenguajes populares. Por ejemplo, Java no permite a los programadores
manejar directamente los punteros a las direcciones de memoria, una
funcin compleja y, a menudo, mal utilizada de los lenguajes C y C++.
En su lugar, slo les permite manejar objetos utilizando referencias a
objetos. Adems utiliza una funcin denominada reciclaje de memoria
dinmica (garbage collector) para hacer el seguimiento de los objetos a los
que ya no se hace referencia y eliminarlos. Otro aspecto que hace de Java
un lenguaje simple es que los tipos de datos booleanos (boolean) slo
pueden tener los valores true o false, frente a otros lenguajes donde
tambin se admiten los valores 1 y 0.

m
co
hoo ide
a
@y t Gu
ano den
e
ald s Stu
g
vo_ e thi
a
ust o us
o (g se t
n
dea licen
l
Ga ble
rico sfera
e
Fed -tran
o
tav a non
s
Gu

Descripcin de la tecnologa Java


Copyright 2008 Sun Microsystems, Inc. Todos los derechos reservados. Sun Services, Revisin E.1

1-9

Fundacin Proydesa
Conceptos fundamentales sobre el lenguaje Java

Multihilo

Unauthorized reproduction or distribution prohibited Copyright 2014, Oracle and/or its affiliates

El lenguaje Java admite procesamiento multihilo (multithread), es decir,


la ejecucin simultnea de tareas diferentes tales como consultar una base
de datos y reproducir en la pantalla una interfaz de usuario. Gracias a la
ejecucin multihilo, los programas Java pueden hacer un uso muy eficiente
de los recursos del sistema.
En la figura siguiente se ilustra el procesamiento multihilo del lenguaje Java.
Programa Java

has
r)

m
co
hoo ide
a
@y t Gu
ano den
e
ald s Stu
g
v _ e thi Tarea
Tarea
Tarea o
a
ust o us
o (g se t
n
Base
dea licen
l
de
Ga datose
l
Impresora
Interfaz grfica
rico sferab
de usuario
ede tran
F vo nonFigura 1-4 El lenguaje de programacin Java es multihilo
a
ust a
G
Seguro

Los programas Java son seguros porque el lenguaje Java, con el entorno
en el que se ejecutan los programas con esta tecnologa, aplica medidas de
seguridad para proteger el cdigo de posibles ataques. Estas medidas
incluyen:

1-10

Prohibir la manipulacin de la memoria mediante el uso de punteros.


Impedir que los programas distribuidos, por ejemplo los applets,
puedan hacer operaciones de lectura y escritura en el disco duro de
un equipo.

Programacin Java para no Programadores


Copyright 2008 Sun Microsystems, Inc. Todos los derechos reservados. Sun Services, Revisin E.1

Fundacin Proydesa
Conceptos fundamentales sobre el lenguaje Java
Vericar que todos los programas Java contengan cdigo vlido.

Unauthorized reproduction or distribution prohibited Copyright 2014, Oracle and/or its affiliates

Facilitar el uso de rmas digitales. Una empresa o una persona


puede rmar el cdigo de Java de forma que quien reciba el
cdigo pueda vericar la legitimidad del mismo.

En la gura siguiente puede verse cmo la seguridad integrada en los


programas Java impide ejecutar cdigo no vlido en un equipo.

Applet

Applet

has
r)

a
om
c
oo e
Independiente de la plataforma
yah uid
@
G
ano dent
Los programas escritos en la mayora de e lenguajes normalmente
los
ald podertu
necesitan numerosas modicaciones para
S ejecutarse en diferentes
o_g this
tipos de plataformas informticas (la combinacin de una CPU y un
v
sta use
sistema operativo). Esta dependencia de la plataforma se produce porque
u o
la mayora de loso (g
lenguajes exigen que se escriba el cdigo especco para
n nse t
la plataformaa
subyacente. Lenguajes tan populares como C y C++ obligan
lde ice
al programador alcompilar y vincular sus programas, lo que da lugar a un
a
e
programaabl
o G r ejecutable exclusivo de una plataforma. Al revs que C y C++,
c lenguaje Java es independiente de la plataforma.
i
der el nsfe
e
o F on-tra
v
Programas dependientes de la plataforma
sta a n
u
G
Figura 1-5

No es posible ejecutar cdigo que no sea vlido

Un compilador es una aplicacin que convierte un programa escrito por


un programador en un cdigo especfico para la CPU denominado cdigo
mquina. Estos archivos especficos de la plataforma (archivos binarios)
a menudo se combinan con otros archivos, tales como bibliotecas de cdigo
preelaborado, mediante un vinculador para crear un programa dependiente
de la plataforma, llamado ejecutable, que el usuario final puede ejecutar.

Descripcin de la tecnologa Java


Copyright 2008 Sun Microsystems, Inc. Todos los derechos reservados. Sun Services, Revisin E.1

1-11

Fundacin Proydesa
Conceptos fundamentales sobre el lenguaje Java

Unauthorized reproduction or distribution prohibited Copyright 2014, Oracle and/or its affiliates

En la gura siguiente puede verse la forma en que un compilador crea un


archivo binario.
Binario
de
Solaris
1001010

Compilador de C
para Solaris

Binario
de
Linux
0001010

Cdigo
en C
Compilador de C
para Linux

m
co
Compilador de C para
hoo ide
a
Microsoft Windows
@y t Gu
ano den
e
ald s Stu
g
Figura 1-6 Creacin de un archivo binario i
vo_ e th
a s
ust oseuvincula un archivo binario a las
La gura siguiente muestra cmo
(
oung se t dependiente de la plataforma.
n ejecutable
bibliotecas para crear
a
lde licen
a
Bibliotecas
o G rable
Binario
de proyectos
ric desfe
Ejecutable
de an
e trSolaris
de
Vinculador
o F on- 0001010
Solaris
de Solaris
v
sta a n
Gu
Binario
de
Windows
0101001

Binario
de
Linux
0001010

Binario
de
Windows
0101001

Figura 1-7

1-12

Bibliotecas
de proyectos
Vinculador
de Linux

Bibliotecas
de proyectos
Vinculador
de Windows

Ejecutable
de
Linux

Ejecutable
de
Windows

Creacin de un ejecutable

Programacin Java para no Programadores


Copyright 2008 Sun Microsystems, Inc. Todos los derechos reservados. Sun Services, Revisin E.1

has
r)

Fundacin Proydesa
Conceptos fundamentales sobre el lenguaje Java
En la gura siguiente se ilustra cmo los ejecutables dependientes de la
plataforma pueden ejecutarse solamente en una plataforma.

Unauthorized reproduction or distribution prohibited Copyright 2014, Oracle and/or its affiliates

Estacin de
trabajo Solaris
Ejecutable
de
Solaris
Estacin de
trabajo Linux
Ejecutable
de
Linux

has
r)

Estacin de
trabajo Windows

a
om
c
Ejecutable
oo e
de
yah uid
Windows
@
G
ano dent
e
ald s Stu
g i
vo_ e ejecutable
Figura 1-8 Ejecucin de ta archivo th
un
us o us
o (g se t de la plataforma
Programas an
independientes
lde licen
a
Un programa lJava puede ejecutarse, con escasas o ninguna modificacin,
o G rab e
en varias
eric nsfe combinaciones de CPU y sistemas operativos como, por ejemplo,
ed trel sistema operativo Solaris con un procesador SPARC , MacOS en un
a
F
vo non- procesador Motorola y Microsoft Windows en un procesador Intel.
a
ust a
G

Nota Posiblemente sea preciso realizar algunas modificaciones para hacer


que un programa Java sea independiente de la plataforma. Por ejemplo,
puede ser necesario cambiar los nombres de los directorios a fin de que
utilicen los delimitadores adecuados (barras inclinadas e invertidas) para el
sistema operativo de base.

Descripcin de la tecnologa Java


Copyright 2008 Sun Microsystems, Inc. Todos los derechos reservados. Sun Services, Revisin E.1

1-13

Fundacin Proydesa
Conceptos fundamentales sobre el lenguaje Java

Unauthorized reproduction or distribution prohibited Copyright 2014, Oracle and/or its affiliates

Al igual que ocurre con los programas C y C++, los programas Java
tambin se compilan utilizando un compilador especfico para la tecnologa
Java. No obstante, el formato resultante de un programa Java compilado
es cdigo de byte Java independiente de la plataforma en lugar de cdigo
mquina especfico de la CPU. Una vez generado el cdigo de byte, se
interpreta (ejecuta) a travs de un intrprete llamado mquina virtual o
VM. Una mquina virtual es un programa especfico de la plataforma que
lee el cdigo de byte (independiente de la plataforma) y lo ejecuta en una
plataforma concreta. Por este motivo, el lenguaje Java a menudo se define
como un lenguaje interpretado y los programas Java se consideran como
transportables o ejecutables en cualquier plataforma. Entre los lenguajes
interpretados se incluye tambin Perl.
Lo saba? El trmino mquina virtual se debe a que es un componente
de software que ejecuta cdigo, una tarea normalmente realizada por la
CPU o la mquina de hardware.

a
om
c
oo e
ah uid
Para que los programas Java sean independientes de lay
plataforma,
o@ n G
es preciso disponer de una mquina virtual llamada mquina virtual de
ana ejecutar.t La mquina
e
Java (JVM) en cada plataforma donde sede
al vayanStud Java, cargar las
g
virtual de Java es la encargada de interpretaris cdigo
el
vo_programas Java.
th
clases correspondientes y ejecutar los e
a
ust o us
o (g se t
Sin embargo, un programa Java necesita algo ms que una mquina
an en
virtual de Javae
d para ejecutarse. Tambin precisa una serie de bibliotecas
l
lic
de clases estndare
Ga bl especcas para la plataforma. Las bibliotecas de clases
deico son bibliotecas de cdigo preescrito que puede combinarse con el
er Javaelaborado por el programador para crear aplicaciones slidas.
fera
s
Fed cdigo
tran
o
tav a nonLa combinacin del software JVM y estas bibliotecas de clases se conocen
s
Gu
como el entorno de tiempo de ejecucin de Java (JRE). Sun Microsystems

has
r)

proporciona entornos de ejecucin de Java para numerosas plataformas


de uso comn.
Lo saba? A menudo, la tecnologa Java se considera una plataforma
porque puede realizar todas las tareas de una CPU y un sistema operativo.
Sun Microsystems desarroll un prototipo de sistema informtico con una
CPU llamado JavaStation, que slo entiende cdigo de byte de Java.

1-14

Programacin Java para no Programadores


Copyright 2008 Sun Microsystems, Inc. Todos los derechos reservados. Sun Services, Revisin E.1

Fundacin Proydesa
Conceptos fundamentales sobre el lenguaje Java

Unauthorized reproduction or distribution prohibited Copyright 2014, Oracle and/or its affiliates

En la gura siguiente puede verse cmo el compilador de Java crea


cdigo de byte.

Cdigo
Java
(archivo
.java)

Figura 1-9

Compilador de Java

Cdigo
de byte
Java
(archivo
.class)

Creacin de cdigo de byte en Java

has
r)

m
co
hoo ide
a
@y t Gu
ano den
e
ald s Stu
g
vo_ e thi
a
ust o us
o (g se t
n
dea licen
l
Ga ble
rico sfera
e
Fed -tran
o
tav a non
s
Gu

Descripcin de la tecnologa Java


Copyright 2008 Sun Microsystems, Inc. Todos los derechos reservados. Sun Services, Revisin E.1

1-15

Fundacin Proydesa
Conceptos fundamentales sobre el lenguaje Java
En la gura siguiente se muestra cmo un archivo de cdigo de byte de
Java se ejecuta en varias plataformas donde existe un entorno de ejecucin
de Java.

Unauthorized reproduction or distribution prohibited Copyright 2014, Oracle and/or its affiliates

Estacin de
trabajo Solaris

JRE

Estacin de
trabajo Linux
Cdigo
de byte
Java
(archivo
.class)

JRE

a
om
c
oo e
JRE
yah uid
@
G
ano dent
e
ald s Stu
g
vo_ e thi
ta us
Figura 1-10 Ejecucin de us
cdigo de byte en un entorno de ejecucin
o
de Javao (g
n nse t
a e
ldelos programas Java para ejecutarse en todas las plataformas
c
La capacidad de le l
Ga b i
es ifundamental para explicar el concepto del eslogan Write Once, Run
r co sfera Sun Microsystems.
e
Anywhere de
Fed -tran
o
tav a non
s
Nota Los trminos API (interfaz de programacin de aplicaciones) y
Gu

has
r)

Estacin de
trabajo Windows

biblioteca de clases pueden usarse indistintamente. Asimismo, un API


puede hacer referencia a una sola rutina dentro de una biblioteca de cdigo.

1-16

Programacin Java para no Programadores


Copyright 2008 Sun Microsystems, Inc. Todos los derechos reservados. Sun Services, Revisin E.1

Fundacin Proydesa
Grupos de productos de la tecnologa Java

Unauthorized reproduction or distribution prohibited Copyright 2014, Oracle and/or its affiliates

Grupos de productos de la tecnologa Java


Sun Microsystems proporciona una lnea completa de productos de
tecnologa Java que abarcan desde kits de desarrollo de programas Java
hasta entornos de emulacin (pruebas) para dispositivos de consumo tales
como los telfonos celulares.

Identificacin de los grupos de productos de la


tecnologa Java
Las tecnologas Java, tales como la mquina virtual de Java, se incluyen
(de formas distintas) en tres grupos diferentes de productos, cada uno de
ellos diseado para atender a las necesidades de un determinado
segmento de mercado:

has
r)

a
om
c
Plataforma Java, Standard Edition (Java SE): permite
oo e
desarrollar applets y aplicaciones que se ejecutan, respectivamente,
yah uid
@
en navegadores web y equipos informticos de sobremesa.
n G
ano dedetsoftware (SDK)
Por ejemplo, es posible usar el kit dedesarrollo
de
al de Stu para PC.
de Java SE para crear un procesador
texto
o_g this
v
sta use
gu o
Nota Los applets y(las aplicaciones difieren en varios aspectos. En primer
o ejecutan tdentro de un navegador web, mientras que
e
lugar, los applets se ns
ean ice
las aplicaciones se ejecutan en un sistema operativo. Aunque este curso se
ald le l
Gfundamentalmente en el desarrollo de aplicaciones, la mayora de la
centra
rico sferab contiene puede aplicarse tambin al desarrollo de applets.
e informacin que
Fed -tran
o
Plataforma Java, Enterprise Edition (Java EE): permite crear
tav a non
us
grandes aplicaciones empresariales distribuidas para los lados cliente
G

y servidor. Por ejemplo, el SDK de Java EE puede utilizarse para crear


una aplicacin de comercio electrnico que pueda utilizarse en el sitio
web de una compaa comercial.

Plataforma Java, Micro Edition (Java ME): permite crear


aplicaciones para dispositivos de consumo de recursos limitados.
Por ejemplo, el SDK de Java ME puede utilizarse para crear un juego
que se ejecute en un telfono mvil.

Descripcin de la tecnologa Java


Copyright 2008 Sun Microsystems, Inc. Todos los derechos reservados. Sun Services, Revisin E.1

1-17

Fundacin Proydesa
Grupos de productos de la tecnologa Java
La gura siguiente muestra los tres grupos de productos de la tecnologa
Java y los tipos de dispositivos a los que van dirigidos.

Unauthorized reproduction or distribution prohibited Copyright 2014, Oracle and/or its affiliates

Java EE

Java SE

Soluciones empresariales
Comercio electrnico
eBusiness

Soluciones de escritorio
Aplicaciones independientes
Applets

Java ME

Soluciones de consumo
Telfonos celulares
PDA
Descodificadores de TV
Navegadores por GPS

Grupos de productos de la tecnologa Java

a
om
Figura 1-11 Grupos de productos de la tecnologa Java
c
oo e
yah uid
Entre otras tecnologas, cada edicin de la plataforma Java incluye un kit
o@ nt G
de desarrollo de software (SDK) con el que es an
posible crear, compilar y
e
e
ejecutar programas Java en una plataforma determinada.
ald s Stud
g
vo_ e thi
a
ust o us de tecnologa Java
Eleccin del grupo de productos
o (g se t
n
correcto
dea licen
l
Ga blemuchos programadores de Java se especialicen en el
Aunque puede que
rico sfera
e
desarrollo de aplicaciones para un determinado mercado, normalmente
Fed todos n empiezan sus carreras creando aplicaciones o applets para PC.
-t a ellos
vo nonPorr tanto, el SDK de Java SE es el grupo de productos que utilizan la
a
ust a
mayora de los programadores cuando aprenden a manejar el lenguaje Java.
G

has
r)

TM

1-18

Programacin Java para no Programadores


Copyright 2008 Sun Microsystems, Inc. Todos los derechos reservados. Sun Services, Revisin E.1

Fundacin Proydesa
Grupos de productos de la tecnologa Java

Unauthorized reproduction or distribution prohibited Copyright 2014, Oracle and/or its affiliates

Uso de los componentes del SDK de la plataforma


Java, Standard Edition
Sun Microsystems ha desarrollado una versin del SDK de la plataforma
Java, Standard Edition para Solaris y el procesador SPARC (32 y
64 bits), as como para los sistemas operativos Solaris, Linux y Microsoft
Windows ejecutados en procesadores (32 y 64 bits) de las compaas
Intel Corporation y Advanced Micro Devices, Incorporated. El SDK de
la plataforma Java, Standard Edition incluye lo siguiente:

El entorno de ejecucin de Java:

Una mquina virtual de Java para la plataforma que elija.

Bibliotecas de clases de Java para la plataforma que elija.

has
r)

a
om
La documentacin de la biblioteca de clases (API) de Java (descarga
c
oo e
por separado)
h id
yapara crear archivos
u
Herramientas suplementarias, como las utilizadas
o@ nt Java
nprogramas G
de almacenamiento Java (JAR) y depurar
a
lde Stude
Ejemplos de programas Java ga
_
is
avo se th
t
gus tqueu programas Java se ejecuten en todos
(
Lo saba? Para garantizar o los
nohaya se mquina virtual de Java y una biblioteca
los equiposea
d Java,lice una
lde dondetantonel software de la JVM como las bibliotecas de
a le
de clases
o Gdebenbcumplir las especificaciones del lenguaje Java y la mquina
clases
eric nsfera Estas especificaciones estn disponibles para las empresas
virtual de Java.
a
Fed -trque adquieran la licencia de la tecnologa Java y quieran crear su propio
vo non software de JVM y sus propios compiladores. De hecho, Sun Microsystems
a
ust a
tuvo que seguir sus propias especificaciones para crear un entorno de
G

Un compilador de Java

ejecucin de Java para Solaris en el procesador SPARC y para Windows


en el procesador Intel.
Demostracin Su profesor le mostrar cuatro tipo de aplicaciones
basadas en la tecnologa Java. Son las siguientes:

Aplicacin del SDK de Java SE

Applet del SDK de Java SE

Aplicacin del SDK de Java EE

Aplicacin del SDK de Java ME

Descripcin de la tecnologa Java


Copyright 2008 Sun Microsystems, Inc. Todos los derechos reservados. Sun Services, Revisin E.1

1-19

Fundacin Proydesa
Grupos de productos de la tecnologa Java
Al ver la demostracin, debera prestar especial atencin a:
La forma en que se ejecuta el applet o la aplicacin (mediante
comandos, iconos...?)

Unauthorized reproduction or distribution prohibited Copyright 2014, Oracle and/or its affiliates

El lugar donde se ejecuta el applet o la aplicacin (en un navegador


web, un dispositivo de consumo...?)

has
r)

m
co
hoo ide
a
@y t Gu
ano den
e
ald s Stu
g
vo_ e thi
a
ust o us
o (g se t
n
dea licen
l
Ga ble
rico sfera
e
Fed -tran
o
tav a non
s
Gu

1-20

Programacin Java para no Programadores


Copyright 2008 Sun Microsystems, Inc. Todos los derechos reservados. Sun Services, Revisin E.1

Fundacin Proydesa
Grupos de productos de la tecnologa Java
Autoevaluacin Establezca las correspondencias adecuadas entre los
trminos y sus deniciones.

Unauthorized reproduction or distribution prohibited Copyright 2014, Oracle and/or its affiliates

Denicin

Trmino

Se compone de la mquina virtual de Java y


bibliotecas de clases de Java

Mquina virtual de
Java

Manipula objetos en lugar de punteros

Applet

Ejecuta cdigo de byte independiente de la


plataforma

Compilador

Elimina de la memoria objetos a los que no se


hace referencia

Referencia

Se ejecuta en un navegador web

Cdigo de byte

Crea cdigo de byte de Java

Entorno de ejecucin
de Java

has
r)

a
om
c
oo e
ah u d
Lo crea el compilador y lo ejecuta la mquina @y
Reciclaje de imemoria
G
virtual de Java
dinmica
ano dent
e
ald s Stu
g
vo_ e thi
a
ust o us
o (g se t
n
dea licen
l
Ga ble
rico sfera
e
Fed -tran
o
tav a non
s
Gu

Descripcin de la tecnologa Java


Copyright 2008 Sun Microsystems, Inc. Todos los derechos reservados. Sun Services, Revisin E.1

1-21

Fundacin Proydesa
Fases del ciclo de vida de los productos

Fases del ciclo de vida de los productos


Unauthorized reproduction or distribution prohibited Copyright 2014, Oracle and/or its affiliates

El ciclo de vida de los productos (Product Life Cycle o PLC) representa un


conjunto de fases aceptadas1 por la industria que un programador debera
seguir al desarrollar cualquier producto nuevo. El ciclo se compone de
siete fases. Son las siguientes:
1.

Anlisis

2.

Diseo

3.

Desarrollo

4.

Comprobacin

5.

Implementacin

6.

Mantenimiento

7.

Fin del ciclo de vida (EOL)

m
co
hoo ide
a
@y t Gu
ano den
e
ald s Stu
g
vo_ e thi
a
ust o us
o (g se t
n
dea licen
l
Ga ble
rico sfera
e
Fed -tran
o
tav a non
s
Gu

1.

1-22

El ciclo de vida de los productos slo es una losofa para sistematizar las fases
de desarrollo de nuevos productos. Existen otras tales como: Rational Unied
Process, XP (Extreme Programming) y TDD (Test Driven Design).

Programacin Java para no Programadores


Copyright 2008 Sun Microsystems, Inc. Todos los derechos reservados. Sun Services, Revisin E.1

has
r)

Fundacin Proydesa
Fases del ciclo de vida de los productos

Fase de anlisis

Unauthorized reproduction or distribution prohibited Copyright 2014, Oracle and/or its affiliates

El anlisis es el proceso de investigar un problema que se pretende


resolver con un producto. Entre otras tareas, consiste en:

Denir claramente el problema que se quiere resolver, el nicho de


mercado al que se dirige o el sistema que se quiere crear. Los lmites
del problema tambin se conocen como el mbito del proyecto.

Identicar los subcomponentes fundamentales que forman parte de


la totalidad del producto.

En la gura siguiente se ilustra la fase de anlisis.

has
r)

m
co
hoo ide
a
@y t Gu
Componentes o
Idea o problema
ean tuden
principales
d
gal is S
_
avo se th
t
gus to u
(
no nse
a
lde lice
a
o G rable
eric nsfe
Fed -tra
o
tav a non Figura 1-12 Fase de anlisis del ciclo de vida de los productos
s
Gu

Descripcin de la tecnologa Java


Copyright 2008 Sun Microsystems, Inc. Todos los derechos reservados. Sun Services, Revisin E.1

1-23

Fundacin Proydesa
Fases del ciclo de vida de los productos

Fase de diseo

Unauthorized reproduction or distribution prohibited Copyright 2014, Oracle and/or its affiliates

El diseo es el proceso de aplicar las conclusiones extradas en la fase de


anlisis al proyecto del producto. La tarea principal en la fase de diseo es
desarrollar planos o especicaciones de los productos o los componentes
del sistema.
En la gura siguiente se ilustra la fase de diseo.

has
r)

m
co
hoo ide
a
@y t Gu
ano den
e
ald s Stu
Blueprint g
_
i
avo se th
t
Plano maestro u
gus to
(
Planos de los componentes
no nse
ea ice
ld
Componentes principales
Ga ble l
Figura 1-13 ra
rico sfe Fase de diseo del ciclo de vida de los productos
e
Fed -tran
o
tav a non
s
Gu

1-24

Programacin Java para no Programadores


Copyright 2008 Sun Microsystems, Inc. Todos los derechos reservados. Sun Services, Revisin E.1

Fundacin Proydesa
Fases del ciclo de vida de los productos

Fase de desarrollo

Unauthorized reproduction or distribution prohibited Copyright 2014, Oracle and/or its affiliates

El desarrollo consiste en utilizar los planos creados durante la fase de


diseo para crear los componentes reales.
En la gura siguiente se ilustra la fase de desarrollo.

has
r)

m
co
hoo ide
a
@y t Gu
n
ano Componentes
Planos de los componentes
lde Stude
_ga this
o
Figura 1-14 Fase de desarrollo del e
tav usciclo de vida de los productos
s
(gu e to
ano ens
e
ald le lic
G
co ferab
i
der ans
e
o F on-tr
v
sta a n
Gu

Descripcin de la tecnologa Java


Copyright 2008 Sun Microsystems, Inc. Todos los derechos reservados. Sun Services, Revisin E.1

1-25

Fundacin Proydesa
Fases del ciclo de vida de los productos

Fase de comprobacin

Unauthorized reproduction or distribution prohibited Copyright 2014, Oracle and/or its affiliates

La comprobacin consiste en asegurarse de que cada uno de los


componentes o la totalidad del producto cumplan los requisitos de
la especicacin creada durante la fase de diseo.
Nota Un buen anlisis del problema conduce a un buen diseo de la
solucin y a una reduccin del periodo de comprobacin y desarrollo.
Normalmente la comprobacin la realiza un equipo de personas distinto
de aquel que ha desarrollado el producto. Esto garantiza que se probar
de forma objetiva, eliminando la subjetividad del programador.
En la gura siguiente se ilustra la fase de comprobacin.

m
co
hoo ide
a
@y t Gu
ano den
e
ald s Stu
g
vo_ e thi
a s
ust o Comprobacin
u
o (g se t
n
dea licen
l
Ga ble
rico sfera
e
Fed -tran
o
tav a non Componentes
s
Gu
Figura 1-15 Fase de comprobacin del ciclo de vida de los productos

Nota Las cuatro primeras fases del ciclo pueden aplicarse a cada uno de
los ejercicios de este curso. Para garantizar la realizacin correcta de los
ejercicios, debera (1) analizar el problema, (2) desarrollar un esquema
rpido o una especicacin para la solucin o el programa, (3) desarrollar
la solucin y (4) comprobar el programa.

1-26

Programacin Java para no Programadores


Copyright 2008 Sun Microsystems, Inc. Todos los derechos reservados. Sun Services, Revisin E.1

has
r)

Fundacin Proydesa
Fases del ciclo de vida de los productos

Fase de implementacin

Unauthorized reproduction or distribution prohibited Copyright 2014, Oracle and/or its affiliates

La implementacin consiste en poner el producto a disposicin de los


clientes.
En la gura siguiente se ilustra la fase de implementacin.

A la
ta
ven

has
r)

a
om
c
oo e
Producto
yah uid
@
G
ano dent
e
ald s Stu
g
vo_ e thi
a
ust o us
o (g se t
n
La implementacin es la accin de distribuir un producto
dea quecen puedan adquirirlo.
l
de tal
Ga forma li los clientes
le
co ferabFase de implementacin del ciclo de vida de los productos
i
s
der Figura 1-16
Fe -tran
o
tav a non Lo saba? A menudo, la fase de implementacin se conoce en la
s
Gu
industria informtica como primera entrega al cliente o FCS.

Descripcin de la tecnologa Java


Copyright 2008 Sun Microsystems, Inc. Todos los derechos reservados. Sun Services, Revisin E.1

1-27

Fundacin Proydesa
Fases del ciclo de vida de los productos

Fase de mantenimiento

Unauthorized reproduction or distribution prohibited Copyright 2014, Oracle and/or its affiliates

El mantenimiento consiste en resolver los problemas del producto y


publicar nuevas versiones o revisiones del mismo.
En la gura siguiente se ilustra la fase de mantenimiento.

A la
ta
ven

has
r)

m
co
Producto
hoo ide
mejorado
a
@y t Gu
ano den
e
ald s Stu
g
vo_ e thi
a
ust o us
o (g se t
n n
e
deadelimantenimiento del ciclo de vida de los productos
Figura 1-17 l Fasee c
Ga bl
rico sfera
e
Fed -tran
o
tav a non
s
Gu

1-28

Programacin Java para no Programadores


Copyright 2008 Sun Microsystems, Inc. Todos los derechos reservados. Sun Services, Revisin E.1

Fundacin Proydesa
Fases del ciclo de vida de los productos

Unauthorized reproduction or distribution prohibited Copyright 2014, Oracle and/or its affiliates

Fin del ciclo de vida (EOL)


Aunque el ciclo de vida de los productos no incluye una fase especca
para iniciar un concepto o un proyecto, s la tiene para nalizarlo. El n
del ciclo de vida o EOL consiste en realizar todas las tareas necesarias
para garantizar que clientes y empleados sean conscientes de que un
producto ha dejado de venderse y recibir asistencia tcnica, y de que hay
un nuevo producto disponible.
En la gura siguiente se ilustra la fase nal del ciclo de vida de los
productos.

O
NUEV

A la
a
vent

has
r)

m
co
hoo ide
a
@y t Gu
ano den
e
ald s Stu
g
vo_ e thi
a
ust o us
Producto (
o g se t
n
nuevo
dea licen
l
Ga ble
rico sfera
e
Fed -tran
o
tav a non
s
Gu
El fin del ciclo de vida implica sustituir el producto por otro recin desarrollado.
Figura 1-18 Fase nal del ciclo de vida de los productos

Descripcin de la tecnologa Java


Copyright 2008 Sun Microsystems, Inc. Todos los derechos reservados. Sun Services, Revisin E.1

1-29

Fundacin Proydesa
Fases del ciclo de vida de los productos

Por qu debe seguir las fases del ciclo de vida de los


productos?
Unauthorized reproduction or distribution prohibited Copyright 2014, Oracle and/or its affiliates

El PLC es una parte importante del desarrollo de los productos porque


ayuda a garantizar que stos se crearn y suministrarn de forma que se
reduzca el tiempo de salida al mercado, la calidad del producto sea alta y
se maximice el retorno de la inversin. Los desarrolladores que no siguen
sus directrices a menudo encuentran problemas que cuesta corregir y que
podran haberse evitado.
Nota Este curso no presenta las fases del ciclo en profundidad. No
obstante, todo lo que aprender a lo largo del mismo se enmarca en
alguna de ellas.

a
om
c
oo e
Autoevaluacin Haga corresponder cada tarea a la fase ah
d
y correspondiente
del ciclo de vida de los productos.
@ t Gui

ano den
e
ald s Stu Fase
Tarea
g
vo_ e thi
a
Crear un plano del producto t
Comprobacin
us o us
(g problema
t
Determinar el mbito del se
Fin del ciclo de
ano en
e ic
vida
ald le
Gproblemaslde los clientes y agregar mejoras Anlisis
Corregir
rico sferab
e n
Fed -Comunicar que el producto ya no estar disponible Implementacin
tra
vo non Hacer que el producto funcione como se indica en Desarrollo
a
ust a
una especicacin
G

has
r)

Crear el producto
Realizar la primera entrega del producto

1-30

Diseo
Mantenimiento

Programacin Java para no Programadores


Copyright 2008 Sun Microsystems, Inc. Todos los derechos reservados. Sun Services, Revisin E.1

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2014, Oracle and/or its affiliates

Mdulo 2

Anlisis de un problema y diseo de la solucin


Objetivos

has
r)

El estudio de este mdulo le proporcionar los conocimientos necesarios


para:

a
om
c
Analizar problemas utilizando el anlisis orientado a objetos (OOA).
oo e
Disear clases a partir de las cuales crear objetos. h
a
d
@y t Gui
no e propuesto y
En este mdulo se explica cmo analizar eaprobleman
un
ald s Stud
desarrollar el diseo de una aplicacin.
g
vo_ e thi
a
ust o us
o (g se t
n
dea licen
l
Ga ble
rico sfera
e
Fed -tran
o
tav a non
s
Gu

2-1
Copyright 2008 Sun Microsystems, Inc. Todos los derechos reservados. Sun Services, Revisin E.1

Fundacin Proydesa
Comprobacin de los progresos

Comprobacin de los progresos


Unauthorized reproduction or distribution prohibited Copyright 2014, Oracle and/or its affiliates

Introduzca un nmero del 1 al 5 en la columna Principio del mdulo


a n de evaluar su capacidad para cumplir cada uno de los objetivos
propuestos. Al nalizar el mdulo, vuelva a evaluar sus capacidades y
determine la mejora de conocimientos conseguida por cada objetivo.

Objetivos del mdulo

Evaluacin
(1 = No puedo cumplir
este objetivo,
Mejora de
5 = Puedo cumplir este
conocimientos
objetivo)
(Final
Principio
Final del Principio)

a
om
c
Analizar problemas utilizando
oo e
el anlisis orientado a objetos.
yah uid
@
G
Disear clases a partir de las
ano dent
cuales crear objetos.
e
ald s Stu
g
vo_ e losiServicios de Formacin Sun
th
El resultado de esta evaluacina
st ayudarformacin. Por favor, indique una
sa
u
(SES) a determinar la efectividad deu
su
o (g se to 0 o un 1 en la columna de la derecha)
escasa mejora de conocimientos (un
n
si quiere que dea
el profesoren
c considere la necesidad de presentar ms material
al le liclases. Asimismo, esta informacin se enviar al
de apoyo durante las
G
grupo de elaboracin de cursos de SES para revisar el temario de este
co ferab
i
curso.
der ans
e
o F on-tr
v
sta a n
Gu

has
r)

del mdulo mdulo

2-2

Programacin Java para no Programadores


Copyright 2008 Sun Microsystems, Inc. Todos los derechos reservados. Sun Services, Revisin E.1

Fundacin Proydesa
Aspectos relevantes

Unauthorized reproduction or distribution prohibited Copyright 2014, Oracle and/or its affiliates

Aspectos relevantes

!
?

Discusin Las preguntas siguientes son relevantes para comprender en


qu consiste el anlisis y el diseo en programacin orientada a objetos (OO):

Cmo decide qu componentes se necesitan para construir algo,


como una casa o un mueble?

Qu es una clasicacin taxonmica?

Qu relacin tienen los organismos en una taxonoma?

Cul es la diferencia entre atributos y valores?

has
r)

m
co
hoo ide
a
@y t Gu
ano den
e
ald s Stu
g
vo_ e thi
a
ust o us
o (g se t
n
dea licen
l
Ga ble
rico sfera
e
Fed -tran
o
tav a non
s
Gu

Anlisis de un problema y diseo de la solucin


Copyright 2008 Sun Microsystems, Inc. Todos los derechos reservados. Sun Services, Revisin E.1

2-3

Fundacin Proydesa
Otros recursos

Otros recursos
Unauthorized reproduction or distribution prohibited Copyright 2014, Oracle and/or its affiliates

Otros recursos Los documentos siguientes proporcionan informacin


complementaria sobre los temas tratados en este mdulo:

Larman, Craig. Applying UML and Patterns An Introduction to Object


Oriented Analysis and Design. Prentice-Hall, 2004.
Este libro presenta todo el proceso de anlisis y diseo OO en
profundidad pero sin excesiva complejidad.

Eckel, Bruce. Thinking in Java. Prentice-Hall, 2006.

Fowler, Martin and Kendall Scott. UML Distilled. Addison Wesley


Longman, Inc., 2003.

m
co
hoo ide
a
@y t Gu
ano den
e
ald s Stu
g
vo_ e thi
a
ust o us
o (g se t
n
dea licen
l
Ga ble
rico sfera
e
Fed -tran
o
tav a non
s
Gu

2-4

Programacin Java para no Programadores


Copyright 2008 Sun Microsystems, Inc. Todos los derechos reservados. Sun Services, Revisin E.1

has
r)

Fundacin Proydesa
Estudio de un problema utilizando el anlisis orientado a objetos

Unauthorized reproduction or distribution prohibited Copyright 2014, Oracle and/or its affiliates

Estudio de un problema utilizando el anlisis orientado a


objetos

Caso de estudio Utilizaremos el siguiente caso para ilustrar los


conceptos del anlisis y el diseo OO.
DirectClothing, Inc. vende camisas por catlogo. El negocio crece a un
ritmo del 30 por ciento anual y necesitan un nuevo sistema de introduccin
de pedidos. La empresa le ha contratado para disear ese nuevo sistema.

has
r)

a
om
c
oo e
yah uid
@
G
ano dent
e
La empresa acepta cheques y las principales tarjetas de crdito.
ald s Stu
g
vo_ e thi
a pueden llamar directamente
Para hacer un pedido, los clientes s
ustcompaa o enviar a DirectClothingal servicio
u
de atencin al clienteg la to
un
o ( dese o correo.
n por fax
formulario ea
de pedido n
ld
ce
Ga ble li
rico sfera
e
Fed -tran
o
tav a non
s
Gu
DirectClothing produce un catlogo de prendas de vestir cada seis meses
y se lo enva a sus suscriptores. Cada prenda del catlogo tiene un
identicador de artculo (ID), uno o varios colores (cada uno con un
cdigo de color), uno o varios tamaos, una descripcin y un precio.

Anlisis de un problema y diseo de la solucin


Copyright 2008 Sun Microsystems, Inc. Todos los derechos reservados. Sun Services, Revisin E.1

2-5

Fundacin Proydesa
Estudio de un problema utilizando el anlisis orientado a objetos
En la gura siguiente se muestra el formulario de pedido que aparece en
el catlogo de DirectClothing.

Unauthorized reproduction or distribution prohibited Copyright 2014, Oracle and/or its affiliates

g, Inc.
tClothinmpany"
Direc
"T he Shi

r t Co

Date:

Name:
:
Address

:
Phone #
Email:

de
Color Co

Price

m
co
hoo ide
a
@y t Gu
ano den
e
ald s Stu
g
vo_ e tThtail Price
sta us o rd
u
o (gnt:seectko Credit Ca
n aym Ch
dea liPcreeitenard #
l
Ga ble C diraCtion
Exp
rico sfera
e n
Fed -tra
o
tav a non
s
Figura 2-1 Formulario de pedido del catlogo de DirectClothing
Gu
#
Shirt ID

Size

Los pedidos que llegan por correo o fax son introducidos por un miembro
del servicio de atencin al cliente.
DirectClothing quiere dar al cliente la opcin de introducir sus pedidos
directamente a travs de Internet. Los artculos que aparecen en la web
tienen el mismo precio que se marca en el ltimo catlogo.

2-6

Programacin Java para no Programadores


Copyright 2008 Sun Microsystems, Inc. Todos los derechos reservados. Sun Services, Revisin E.1

has
r)

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2014, Oracle and/or its affiliates

Estudio de un problema utilizando el anlisis orientado a objetos


Cuando se introduce un pedido en el sistema, se verica la disponibilidad
de cada artculo (cantidad en stock). Si uno o varios de los artculos
no estn disponibles en ese momento (en el almacn de DirectClothing),
el pedido se pone en espera hasta que llegan al almacn. Cuando todos los
artculos estn disponibles, se verica el pago y el pedido se enva al
almacn para su preparacin y envo a la direccin del cliente.
Si el pedido se recibe por telfono, el servicio de atencin al cliente da a
ste un ID de pedido que se utiliza para hacer el seguimiento de la orden
de compra a lo largo del proceso. Tambin le proporciona la extensin de
telfono del representante del servicio de atencin al cliente.
Nota En un verdadero anlisis, el programador trabajara en estrecha
colaboracin con la compaa para obtener informacin sobre cada aspecto
de su negocio. Este caso slo representa una pequea parte de los datos
que se necesitaran para crear el sistema adecuado para DirectClothing, Inc.

has
r)

a
om
c
oo e
yah uid
@
Identificacin del dominio de un problemant G
ano de
e
ald s Stu
g i
Dado que el lenguaje Java es un lenguaje orientado a objetos, uno de los
vo_ en esta tecnologa es crear objetos para
th
primeros objetivos del programador e
sta us
u
componer un sistemag ms to
o ( o, se concretamente, para resolver un problema.
n
dea licen que se va a resolver se denomina dominio del
l
El mbito del problema
Ga ble
problema.
rico sfera
e
a mayora de los proyectos empiezan por definir el dominio del problema
Fed -trLan
vo non mediante la recopilacin de los requisitos del cliente y la escritura de un
a
ust a
enunciado donde se especifica el alcance del proyecto, es decir, lo que el
G
programador, usted, quiere conseguir. Por ejemplo, un enunciado del
alcance del proyecto de DirectClothing podra ser: Crear un sistema de
introduccin de pedidos que permita a los operadores introducir y aceptar
el pago de los pedidos.

Una vez determinado el alcance del proyecto, puede empezar a identicar


los objetos que interaccionarn para resolver el problema.
Nota Esta leccin contiene una versin condensada de las nociones sobre
anlisis y diseo. Para los alumnos que deseen profundizar en esta materia,
el siguiente curso de Sun Microsystems se concentra en estas fases del ciclo
de vida de los productos: OO-226: Anlisis -y Diseo OO con UML

Anlisis de un problema y diseo de la solucin


Copyright 2008 Sun Microsystems, Inc. Todos los derechos reservados. Sun Services, Revisin E.1

2-7

Fundacin Proydesa
Estudio de un problema utilizando el anlisis orientado a objetos

Identificacin de los objetos

Unauthorized reproduction or distribution prohibited Copyright 2014, Oracle and/or its affiliates

Para validar los objetos del dominio de un problema, es preciso identicar


primero las propiedades de todos los objetos:

Los objetos pueden ser fsicos o conceptuales: una cuenta de un


cliente es un ejemplo de objeto conceptual, porque no es algo que se
pueda tocar fsicamente. Un cajero automtico es algo que muchas
personas tocan al cabo del da y es un ejemplo de objeto fsico.

Los objetos poseen atributos (caractersticas) tales como el tamao,


el nombre o la forma, entre otros. Por ejemplo, un objeto puede tener
el color como atributo.
El valor de todos los atributos de un objeto a menudo se conoce
como el estado actual del objeto. Por ejemplo, un objeto puede tener
un atributo de color con el valor rojo y un atributo de tamao con
el valor grande.

a
om
c
oohacer),
Los objetos pueden realizar operaciones (cosas que pueden de
yah ui
tales como congurar un valor, abrir una pantalla o incrementar la
o@ nt G
velocidad. Las operaciones suelen afectaran atributos del objeto y,
a los
e
e
a menudo, nos referimos a ellas como el comportamiento de los
ald s Stud
g i
objetos. As, un objeto puede o_ asociada una operacin que
v llevaratributo de color de un estado
th
permita a otros objetos sta
cambiar sue
s
u
u
a otro, por ejemplo,g rojota azul.
o ( dese o
n
dea licen
l
Ga b objetos se designan mediante nombres como, por
Lo saba? Los le
rico sfera
ejemplo, cuenta o camisa. Los atributos de los objetos tambin suelen
e n
Fed serrnombres, como color o tamao. Sin embargo, las operaciones
- a
vo nondet los objetos suelen designarse mediante verbos o combinaciones de
a
nombre y verbo, como es el caso de mostrar o enviar pedido.
ust a
G

has
r)

La capacidad para reconocer los objetos en el mundo que le rodea ayudar


al programador a definir mejor sus objetos cuando plantee un problema
utilizando el anlisis OO.

2-8

Programacin Java para no Programadores


Copyright 2008 Sun Microsystems, Inc. Todos los derechos reservados. Sun Services, Revisin E.1

Fundacin Proydesa
Estudio de un problema utilizando el anlisis orientado a objetos

Unauthorized reproduction or distribution prohibited Copyright 2014, Oracle and/or its affiliates

La gura siguiente ilustra las caractersticas de una ballena que la


convierten en un objeto.
Atributos
uea
rsal, peq
Aleta do
T
ul amao, gran
Color, az
de

Figura 2-2

Operaciones
Migrar

rse
Comunica
Comer Sume
rgirs
e

Objeto fsico con atributos y operaciones

has
r)

a
om
c
!
oo e
?
i
yah deld
Por ejemplo, una puerta puede ser un objeto en @
G
oel dominio u problema
de construir una casa. Una puerta incluye n menosnt atributo, que
un
a al
lde Stude por ejemplo
puede tener valores (abierta o cerrada), y una operacin,
a
cerrar puerta o abrir puerta, _g
lo que his
permite cambiar el estado de la
avo se t
puerta.
t
gus to u
(
no nse
a
Lo saba? Un atributo que slo puede tener dos estados se conoce como
lde lice
a
booleano (Boolean).
o G rable
eric nsfe
Fed -tra
o
tav a non
s
Gu
Discusin Eche un vistazo a la sala. Qu objetos est viendo en este
momento?

Anlisis de un problema y diseo de la solucin


Copyright 2008 Sun Microsystems, Inc. Todos los derechos reservados. Sun Services, Revisin E.1

2-9

Fundacin Proydesa
Estudio de un problema utilizando el anlisis orientado a objetos

Otros criterios para reconocer objetos

Unauthorized reproduction or distribution prohibited Copyright 2014, Oracle and/or its affiliates

Utilice los criterios siguientes para determinar si algo debera ser


considerado como un objeto en el dominio de un problema:

Relevancia para el dominio del problema

Existencia independiente

Relevancia para el dominio del problema


Para averiguar si el objeto es relevante para el dominio del problema,
pregntese lo siguiente:

has
r)

El objeto existe dentro de los lmites del dominio?

a
om
c
Es necesario como parte de una interaccin entre un usuario y la
oo e
solucin?
yah uid
@
G
ano dent
e tu
Nota Algunos elementos del dominio ald problema pueden ser
de un
atributos de objetos u objetos en s.o_gejemplo, la temperatura puede ser
Por
is S
h
v mdico o un objeto en un sistema
un atributo de un objeto en sta
un sistema e t
s atmosfricos.
u
u
cientco que lleve el control de tpatrones
o (g se o
n
dea licen
l
Existencia independiente
Ga ble
rico sfera
e n un elemento
objeto y
Fed Paraaqueindependientesea un contexto no un atributo de otro objeto,
o ondebe ser
-tr
en el
del dominio del problema.
tav a n Varios objetos pueden estar relacionados y, sin embargo, tener una
s
Gu
existencia independiente. En el caso de DirectClothing, el cliente y el

El objeto es necesario para que la solucin sea completa?

pedido estn conectados, pero son independientes entre s, por lo que


ambos seran objetos.
Al evaluar la utilizacin de objetos potenciales, pregntese si el objeto
debe existir de forma independiente o ser atributo de otro objeto.
Nota Identificar los objetos de un dominio es un arte, no una ciencia.
Cualquier objeto puede ser vlido si es relevante para el dominio de un
problema y posee las caractersticas de un objeto, pero eso no significa que
sea un buen objeto. En cualquier caso, la persona que modele el sistema o la
solucin debe tener una comprensin global de la totalidad del sistema.

2-10

Programacin Java para no Programadores


Copyright 2008 Sun Microsystems, Inc. Todos los derechos reservados. Sun Services, Revisin E.1

Fundacin Proydesa
Estudio de un problema utilizando el anlisis orientado a objetos

Discusin Cules son los posibles objetos de DirectClothing, Inc.?

!
Unauthorized reproduction or distribution prohibited Copyright 2014, Oracle and/or its affiliates

Los objetos del caso de DirectClothing cumplen los criterios explicados


en esta seccin?
En la gura siguiente se ilustran tres objetos pertenecientes al dominio del
sistema de introduccin de pedidos de DirectClothing.

Pedido

Camisa

Cliente

m
co
hoo ide
a
@y t Gu
ano den
e
ald s Stu
g
vo_ e thi
a
ust o us
o (g se t
n
dea licen
l
Ga ble
rico sfera
e
Fed -tran
o
tav a non
s
Gu
Figura 2-3

Posibles objetos del caso de DirectClothing

Anlisis de un problema y diseo de la solucin


Copyright 2008 Sun Microsystems, Inc. Todos los derechos reservados. Sun Services, Revisin E.1

has
r)

2-11

Fundacin Proydesa
Estudio de un problema utilizando el anlisis orientado a objetos

Identificacin de los atributos y operaciones de los


objetos
Unauthorized reproduction or distribution prohibited Copyright 2014, Oracle and/or its affiliates

Despus de identicar los objetos, debe especicar sus atributos y


operaciones.
Como indicbamos anteriormente, los atributos denen el estado de un
objeto. Los atributos pueden ser datos, como el ID de pedido y el ID de
cliente del objeto Order (Pedido), o bien pueden ser otro objeto, como
sera el caso de un cliente que, en lugar de tener nicamente el ID de
pedido como atributo, tuviese todo el objeto Order.
Como decamos, las operaciones son comportamientos que normalmente
modican el estado de un atributo. Por ejemplo, es posible imprimir un
pedido, agregarle o suprimirle un artculo, etc. (El cliente o el operador
del centro de atencin al cliente iniciara esas acciones en la vida real, pero
pertenecen al objeto Order.)

a
om
c
oo e
yah uid
@
G
Atributos como referencias a otros objetos n
a o dent
e
ald s Stu
_g t i
Un atributo puede hacer referencia a otro objeto. Por ejemplo, el objeto
voatributohque sea un objeto Order.
a
Customer (Cliente) puede tener un se
ust o u no, en funcin del problema que se
Esta asociacin podra ser necesaria o
o (g se t
est tratando de an
resolver.
de licen
l
Ga ble
Nota Utilice nombres de atributos y operaciones que describan con
rico sfera
e n
a
Fed claridad el propsito del atributo o la operacin.
vo non-tr
a
ust a
G

has
r)

2-12

Programacin Java para no Programadores


Copyright 2008 Sun Microsystems, Inc. Todos los derechos reservados. Sun Services, Revisin E.1

Fundacin Proydesa
Estudio de un problema utilizando el anlisis orientado a objetos

Unauthorized reproduction or distribution prohibited Copyright 2014, Oracle and/or its affiliates

En la gura siguiente puede verse cmo el objeto Customer contiene un


atributo Order.

Cliente
ID de cliente
customerID
nombre
name
direccin
address
nmero de telfono
phone number
direccin electrnica
email address
*Pedido
*Order
asignar el ID de
assign a customer ID
cliente

Pedido
ID de pedido
fecha
*Camisa(s)
precio total
*Forma de pago
*CSR
estado
calcular el ID de pedido
calcular el precio total
agregar camisa al pedido
quitar camisa del pedido
enviar el pedido

has
r)

a
om
c
oo e
Figura 2-4 Objeto con otro objeto como atributo yah
d
@ t Gui
ano den
e
ald s Stu
Nota Los asteriscos (*) de los grcos anteriores indican atributos que
g
son otros objetos.
vo_ e thi
a
ust o us
o (g se t
an
deCulesen los posibles atributos y operaciones de los objetos
l
ic son
Discusin
Ga de DirectClothing?
le l
en el caso
!
rico sferab
e n
?
a
Fed -trAlguno de los atributos que ha elegido hace referencia a otro objeto?
vo non
a
ust a
G

Anlisis de un problema y diseo de la solucin


Copyright 2008 Sun Microsystems, Inc. Todos los derechos reservados. Sun Services, Revisin E.1

2-13

Fundacin Proydesa
Estudio de un problema utilizando el anlisis orientado a objetos

Unauthorized reproduction or distribution prohibited Copyright 2014, Oracle and/or its affiliates

En la gura siguiente se ilustran algunos posibles atributos y operaciones


de los objetos Order, Shirt y Customer.
orderID
ID de pedido
date
fecha
*Shirt(s)
*Camisa(s)
totalPrice
precio total
*Form ofde pago
*Forma Payment
*CSR
*Operador
status
estado

Pedido

calculateel ID de pedido
calcular order ID
calculateel precio total
calcular the total price
add shirt camisa al pedido
agregar to order
remove shirt from pedido
quitar camisa del order
submit el pedido
enviar the order

ID de camisa
precio
descripcin
tamao
cdigo de color

Camisa

calcular el ID de camisa
ver informacin de la camisa

ID de cliente
Cliente
nombre
direccin
nmero de tel.
direccin de
correo electrnico
*Pedido
asignar un ID de cliente

m
co
hoo ide
a
@y t Gu
ano den
e
ald s Stu
g
vo_ e thi
a
ust o us
o (g se t
n
dea licen
l
Ga ble
rico sfera
e
Fed -tran
o
tav a non
s
Gu
Figura 2-5

2-14

Posibles atributos y operaciones para los objetos del caso de


DirectClothing, Inc.

Programacin Java para no Programadores


Copyright 2008 Sun Microsystems, Inc. Todos los derechos reservados. Sun Services, Revisin E.1

has
r)

Fundacin Proydesa
Estudio de un problema utilizando el anlisis orientado a objetos

Unauthorized reproduction or distribution prohibited Copyright 2014, Oracle and/or its affiliates

Solucin del caso de estudio


A continuacin se incluyen una serie de cuadros que contienen una lista
parcial de los objetos (incluidos la mayora de sus atributos y operaciones)
identicados para el ejemplo de DirectClothing.
Pedido

Camisa

ID de pedido
fecha
*Camisa(s)
precio total
*Forma de pago
*Operador
estado

ID de camisa
precio
descripcin
tamao
cdigo de color

has
r)

m
calcular ID de pedido
calcular el ID de camisa
co
calcular el precio total
ver informacin de la camisa e
hoo id
a
agregar camisa al pedido
@y t Gu
quitar camisa del pedido
ano den
e
enviar el pedido
ald s Stu
g
vo_ e thi
a
Figura 2-6 Objetos Pedido y Camisa
ust o us
o (g se t
n
dea licen
l
Cliente
Forma de pago
Ga ble
o ra
nmero de cheque
ricID defcliente
de ans e
nombre
nmero de tarjeta de crdito
Fe -tr direccin
fecha de vencimiento
o
tav a non nmero de telfono
s
Gu
direccin de correo electrnico
*Pedido
asignar un ID de cliente

Figura 2-7

vericar el nmero de tarjeta de crdito


vericar el pago del cheque

Objetos Cliente y Pago

Anlisis de un problema y diseo de la solucin


Copyright 2008 Sun Microsystems, Inc. Todos los derechos reservados. Sun Services, Revisin E.1

2-15

Fundacin Proydesa
Estudio de un problema utilizando el anlisis orientado a objetos

Operador

*Camisa(s)

Unauthorized reproduction or distribution prohibited Copyright 2014, Oracle and/or its affiliates

Catlogo

nombre
extensin

agregar una camisa


quitar una camisa
Figura 2-8

Objetos Catlogo y Operador

Nota Aunque estn implcitos, no todos los atributos y operaciones de la


solucin se han definido explcitamente en el caso de estudio. Por ejemplo,
el objeto Pago tiene un atributo de fecha de vencimiento para indicar
cundo caduca la tarjeta de crdito.

has
r)

m
co
hoo ide
a
@y t Gu
ano den
e
ald s Stu
g
vo_ e thi
a
ust o us
o (g se t
n
dea licen
l
Ga ble
rico sfera
e
Fed -tran
o
tav a non
s
Gu

2-16

Programacin Java para no Programadores


Copyright 2008 Sun Microsystems, Inc. Todos los derechos reservados. Sun Services, Revisin E.1

Fundacin Proydesa
Diseo de clases

Unauthorized reproduction or distribution prohibited Copyright 2014, Oracle and/or its affiliates

Diseo de clases
La identicacin de objetos ayuda a disear la clase o el prototipo de
cada uno de los objetos de un sistema. Por ejemplo, los fabricantes de
ventanas suelen crear un modelo de cada uno de los estilos de ventana
que producen. En estos modelos se denen una serie de colores y estilos
que pueden elegirse al adquirir la ventana.
Asimismo, estos modelos sirven de base para generar cualquier cantidad
de ventanas con cualquier combinacin de color y estilo. En trminos del
diseo orientado a objetos, cada objeto (ventana) creado utilizando la clase
(prototipo genrico) se denomina instancia de una clase. En concreto,
cada objeto creado a partir de una clase puede tener un estado especfico
(valores) para cada uno de sus atributos, pero tendr los mismos atributos
y operaciones.

has
r)

a
om
c
oo como
h
Nota El diccionario American Heritage dene el trmino clase ide
yacomn.
u
un grupo cuyos miembros tienen ciertos atributos en
no@ ent G
a
lde Stud
Las clases y objetos se utilizan conga
is
o_ frecuencia en el campo de la biologa.
t estudian las criaturas de los
Por ejemplo, a los bilogos av
marinos queh
t
se
mares y ocanos a menudo se les pide que clasiquen estas criaturas por
gus to uanlisis y el diseo OO, cada animal
(
familias o clases. o trminos del
n En nse de una familia como puede ser la de las
(por ejemplo,a
e una ballena azul)
ald le lice
ballenas se considera una instancia (objeto) de la clase ballena.
G
co ferab
i
der Ennsgura siguiente se ilustran dos instancias de la clase ballena.
Fe -tra la
o
Atributos de la ballena
tav a non
Aleta dorsal,
us
Aleta dorsal
G
pequea
Tamao, grande
Color
Tamao

Color, gris y blanca


Color, azul

Aleta dorsal, pequea

Tamao, grande

Figura 2-9

Diferentes tipos de ballenas

Anlisis de un problema y diseo de la solucin


Copyright 2008 Sun Microsystems, Inc. Todos los derechos reservados. Sun Services, Revisin E.1

2-17

Fundacin Proydesa
Diseo de clases
En lo que se reere a DirectClothing:

Unauthorized reproduction or distribution prohibited Copyright 2014, Oracle and/or its affiliates

Una clase es la denicin de un objeto. Las clases son categoras


descriptivas, plantillas o prototipos. Shirt (Camisa) podra ser una
clase que dene a todas las camisas como objetos poseedores de un
ID de camisa, un tamao, un cdigo de color, una descripcin y un
precio

Los objetos son instancias nicas de las clases. La camisa azul grande
que cuesta 29,99 dlares y tiene el ID de camisa 62467-B es una
instancia de la clase Shirt, al igual que la camisa verde pequea
etiquetada con el mismo precio y con el ID 66889-C, o la camisa de
dibujos de 39,99 dlares con ID 09988-A. Es posible tener en la
memoria dos objetos Shirt con atributos que tengan exactamente
los mismos valores.

En la gura siguiente puede verse una clase y varios objetos basados


en ella.

m
co
hoo ide
a
Shirt
@y t Gu
shirtID
ano den
e
price
ald s Stu
g
description
vo_ e thi
size
a
colorCode R=Red, B=Blue, G=Green
ust o us
o (g se t
n
calculateShirtID()
displayShirtInformation()
dea licen
l
Ga ble Shirt
Objetos Shirt
rico sfera Clase
e n
a
Fed Figura 2-10 Una clase y los objetos resultantes
vo non-tr
a
ust a
G

Discusin Eche un vistazo a la sala. Qu clases identifica al mirar los


objetos que le rodean en este momento?

Pista: algunos nombres que ha utilizado para identica objetos, como


puerta, podran servir para designar una clase de objetos. En otros
casos, puede haber identicado objetos como, por ejemplo, profesor,
que seran una instancia de una clase, en este caso la clase persona.

2-18

Programacin Java para no Programadores


Copyright 2008 Sun Microsystems, Inc. Todos los derechos reservados. Sun Services, Revisin E.1

has
r)

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2014, Oracle and/or its affiliates

Diseo de clases

Lo saba? Cada clase tiene otra clase de la que procede. En la


terminologa del anlisis y diseo OO, esa clase de procedencia de
denomina superclase. Por ejemplo, la ballena puede proceder de la
superclase mamferos. Las superclases se explican ms adelante en este
curso.

Discusin Cules son las posibles clases de los objetos identificados


para el caso de DirectClothing?

has
r)

Nota A lo largo de todo el curso seguiremos volviendo al ejemplo de la


clase Shirt.

a
om
c
En programacin Java, los atributos se representan mediante variables,
oo eson

y las operaciones se representan mediante mtodos.yah


Las variables
id
el mecanismo que utiliza el lenguaje Java para o@
Gu
n contenertlos datos.
n
Los mtodos son el mecanismo que utiliza a
realizar
lde paratude una operacin.
_ga this S
o
tav use
Nota Adems de los datos de atributos, las variables pueden contener
s
otros datos tales como los valores utilizados exclusivamente en el interior
(gu e to
de algn mtodo.
ano ens
e
ald le lic
G
co ferab
i
der ans
e
o F on-tr
v
sta a n
Gu

Anlisis de un problema y diseo de la solucin


Copyright 2008 Sun Microsystems, Inc. Todos los derechos reservados. Sun Services, Revisin E.1

2-19

Fundacin Proydesa
Diseo de clases

Modelado de las clases

Unauthorized reproduction or distribution prohibited Copyright 2014, Oracle and/or its affiliates

La primera parte de la fase de diseo consiste en organizar o modelar


visualmente un programa y sus clases. Cada clase de un diseo debera
modelarse de manera que quede incluida en un recuadro con el nombre
de la clase en la parte superior seguido de una lista de variables de
atributos (incluido el rango de valores posibles) y una lista de mtodos.
La sintaxis para modelar una clase se muestra en la gura siguiente.
NombreClase
nombreVariableAtributo [rango de valores]
nombreVariableAtributo [rango de valores]
nombreVariableAtributo [rango de valores]
...

a
om
c
oo e
yah uid
@
G
ano dent
e
ald s Stu
g
Figura 2-11 Sintaxis para modelar una clasei
vo_ e th
a
ust o us
Donde:
o (g se t
n n
NombreClase esiele
dea l c nombre de la clase.
l
Ga ble
nombreVariableAtributo es el nombre de la variable
rico sfera
e correspondiente a un atributo.
n
Fed -trarango de valores es una serie opcional de valores que el atributo
o on
v
puede contener.
sta a n
u
G

has
r)

nombreMtodo()
nombreMtodo()
nombreMtodo()
...

2-20

nombreMtodo es el nombre de un mtodo.

Programacin Java para no Programadores


Copyright 2008 Sun Microsystems, Inc. Todos los derechos reservados. Sun Services, Revisin E.1

Fundacin Proydesa
Diseo de clases
Por ejemplo, la gura siguiente contiene el modelado de un objeto Shirt.

Unauthorized reproduction or distribution prohibited Copyright 2014, Oracle and/or its affiliates

Shirt
shirtID
price
description
size
colorCode R=Red, B=Blue, G=Green
calculateShirtID()
displayInformation()
Figura 2-12 Objeto Shirt modelado

has
r)

a
om
Nota Esta tcnica de modelado se basa ligeramente en una c
oo versin
simplicada del sistema de notacin UML (Unied Modeling Language),
ah uide
y(algunos detalles se
una herramienta utilizada en procesos de modelado
@
G
han suprimido para los programadores con menos experiencia).
ano dent
e
ald s Stu
_g t escriben utilizando una forma
i
Los nombres de mtodos y avo
variables se h
t u e
especial de escritura abreviada de tal manera que, si hacen referencia a un
gus toporsvarias palabras, la primera palabra se
(
atributo u operacin formados
no ynla e de las sucesivas palabras se escribe en
a e
escribe en minscula s inicial
lde ejemplo, una operacin como calcular el precio total
mayscula. Por lic
Ga calcPrecioTotal() o, en ingls, calcTotalPrice(). Asimismo,
oescribirable
se
eric nsfera de parntesis de apertura y cierre indica que se trata de un
la existencia
a
Fed -trmtodo.
vo non
a
ust a
G
Nota El modelado de clases es similar al modelado de estructuras de
bases de datos. De hecho, los objetos creados pueden almacenarse en una
base de datos utilizando el API JDBC (Java Database Connectivity).
Este API permite leer y escribir registros utilizando sentencias SQL
(Structured Query Language) dentro de los programas basados en la
tecnologa Java.

Anlisis de un problema y diseo de la solucin


Copyright 2008 Sun Microsystems, Inc. Todos los derechos reservados. Sun Services, Revisin E.1

2-21

Unauthorized reproduction or distribution prohibited Copyright 2014, Oracle and/or its affiliates

Fundacin Proydesa

m
co
hoo ide
a
@y t Gu
ano den
e
ald s Stu
g
vo_ e thi
a
ust o us
o (g se t
n
dea licen
l
Ga ble
rico sfera
e
Fed -tran
o
tav a non
s
Gu

has
r)

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2014, Oracle and/or its affiliates

Mdulo 3

Desarrollo y comprobacin de un programa Java


Objetivos

has
r)

El estudio de este mdulo le proporcionar los conocimientos necesarios


para:

a
omde
c
Identicar los cuatro componentes de una clase en el lenguaje
oo e
programacin Java.
yah uid un
@ para
Usar el mtodo main en una clase de prueba (test) t G ejecutar
ano den
programa Java desde la lnea de comandos.
e
ald s Stu
g
Compilar y ejecutar un programa Java.
vo_ e thi
a s
ust descripcin general de los componentes de
Este mdulo proporciona unao u
o (g se t
una clase. Tambin incluye una explicacin sobre la forma de compilar y
an en
ejecutar un e
d programa Java compuesto de varias clases.
l
c
Ga ble li
rico sfera
e
Fed -tran
o
tav a non
s
Gu

3-1
Copyright 2008 Sun Microsystems, Inc. Todos los derechos reservados. Sun Services, Revisin E.1

Fundacin Proydesa
Comprobacin de los progresos

Comprobacin de los progresos


Unauthorized reproduction or distribution prohibited Copyright 2014, Oracle and/or its affiliates

Introduzca un nmero del 1 al 5 en la columna Principio del mdulo a


n de evaluar su capacidad para cumplir cada uno de los objetivos
propuestos. Al nalizar el mdulo, vuelva a evaluar sus capacidades y
determine la mejora de conocimientos conseguida por cada objetivo.

Objetivos del mdulo

Evaluacin
(1 = No puedo cumplir
este objetivo,
Mejora de
5 = Puedo cumplir este
conocimientos
objetivo)
(Final
Principio
Final del Principio)

a
om
c
Identicar los cuatro
oo e
componentes de una clase en
yah uid
el lenguaje de programacin
@
G
Java.
ano dent
e
ald s Stu
Usar el mtodo main en una
g
clase de prueba (test) para
vo_ e thi
a
ejecutar un programa Java st
u o us
desde la lnea de comandos.
o (g se t
n
Compilar ylejecutar un en
dea lic
programaa
G Java. e
co ferabl
i
s
der resultado de esta evaluacin ayudar a los Servicios de Formacin Sun
Fe Eltran
o
determinar la efectividad de
formacin. Por favor,
tav a non(SES) amejora de conocimientos (un 0su un 1 en la columna de indique unasi
s
escasa
o
la derecha)
Gu

has
r)

del mdulo mdulo

quiere que el profesor considere la necesidad de presentar ms material de


apoyo durante las clases. Asimismo, esta informacin se enviar al grupo
de elaboracin de cursos de SES para revisar el temario de este curso.

3-2

Programacin Java para no Programadores


Copyright 2008 Sun Microsystems, Inc. Todos los derechos reservados. Sun Services, Revisin E.1

Fundacin Proydesa
Comprobacin de los progresos

Unauthorized reproduction or distribution prohibited Copyright 2014, Oracle and/or its affiliates

Notas

has
r)

m
co
hoo ide
a
@y t Gu
ano den
e
ald s Stu
g
vo_ e thi
a
ust o us
o (g se t
n
dea licen
l
Ga ble
rico sfera
e
Fed -tran
o
tav a non
s
Gu

Desarrollo y comprobacin de un programa Java


Copyright 2008 Sun Microsystems, Inc. Todos los derechos reservados. Sun Services, Revisin E.1

3-3

Fundacin Proydesa
Aspectos relevantes

Unauthorized reproduction or distribution prohibited Copyright 2014, Oracle and/or its affiliates

Aspectos relevantes

Discusin La pregunta siguiente es relevante para comprender los


conceptos de desarrollo y comprobacin de clases:

Cmo puede comprobar si algo que ha construido, como una casa, un


mueble o un programa, est bien construido?

has
r)

m
co
hoo ide
a
@y t Gu
ano den
e
ald s Stu
g
vo_ e thi
a
ust o us
o (g se t
n
dea licen
l
Ga ble
rico sfera
e
Fed -tran
o
tav a non
s
Gu

3-4

Programacin Java para no Programadores


Copyright 2008 Sun Microsystems, Inc. Todos los derechos reservados. Sun Services, Revisin E.1

Fundacin Proydesa
Otros recursos

Unauthorized reproduction or distribution prohibited Copyright 2014, Oracle and/or its affiliates

Otros recursos
Otros recursos Los documentos siguientes proporcionan informacin
complementaria sobre los temas tratados en este mdulo:

Farrell, Joyce. Java Programming: Comprehensive. 1999.


Es un libro excelente para no programadores. Explica conceptos que
no se tratan con tanta profundidad en otros libros ms avanzados.

Tutorial de Java. [En la web]. Disponible en:


http://java.sun.com/docs/books/tutorial/index.html

has
r)

m
co
hoo ide
a
@y t Gu
ano den
e
ald s Stu
g
vo_ e thi
a
ust o us
o (g se t
n
dea licen
l
Ga ble
rico sfera
e
Fed -tran
o
tav a non
s
Gu

Desarrollo y comprobacin de un programa Java


Copyright 2008 Sun Microsystems, Inc. Todos los derechos reservados. Sun Services, Revisin E.1

3-5

Fundacin Proydesa
Identificacin de los componentes de una clase

Identicacin de los componentes de una clase


Unauthorized reproduction or distribution prohibited Copyright 2014, Oracle and/or its affiliates

Las clases son los prototipos o patrones que se crean para denir los
objetos de un programa. Por ejemplo, en la gura siguiente se ilustran
algunos objetos que podran utilizarse en el programa de introduccin de
pedidos desarrollado para DirectClothing, Inc.
Shirt
Order
Date

Window

a
om
c
Customer
oo e
yah uid
@
G
Button
ano dent
e
ald s Stu
_g th
voen el casoi de estudio de
Figura 3-1 Interaccin de objetos
a
DirectClothing, Inc. us
ust o e
o (g se t
an
Una aplicacine escritorio normalmente se compone de un objeto, a
d de licen
l
Ga b objeto de control, objeto principal u objeto de prueba,
menudo llamadole
que es el punto de partida para iniciar el programa. En la gura anterior,
rico sfera
e n
(EntradaPedido)
Fed unrobjeto OrderEntry Customer, Orderpodra interaccionar con uno o
u otros objetos mientras se
o onvarios objetos Window,
-t a
tav a n ejecuta el programa.
s
Gu

has
r)

OrderEntry

Cada objeto de esta gura es una instancia de un prototipo o clase.


Por ejemplo, todos los objetos Window (Ventana) son instancias de la
clase Window. Algunas clases, como Window (usada para crear ventanas en
interfaces grcas de usuario), son clases de uso general y se suministran
como parte del API de Java. Otras clases, como Shirt, pueden ser
exclusivas de su programa, as que debe crearlas personalmente. En este
curso se explica cmo usar las clases existentes y cmo crear y usar sus
propias clases.

3-6

Programacin Java para no Programadores


Copyright 2008 Sun Microsystems, Inc. Todos los derechos reservados. Sun Services, Revisin E.1

Fundacin Proydesa
Identificacin de los componentes de una clase

Unauthorized reproduction or distribution prohibited Copyright 2014, Oracle and/or its affiliates

Estructuracin de las clases


Las clases se componen del cdigo Java necesario para instanciar objetos
tales como Shirt. Este curso divide el cdigo de cada archivo de clase de
Java en cuatro secciones distintas:

La declaracin de la clase

La declaracin e inicializacin de las variables de atributo (opcional)

Los mtodos (opcional)

Los comentarios (opcional)

has
r)

Lo saba? Una clase no tiene por qu contener mtodos y atributos de


forma simultnea.

m
co
hoo ide
a
@y t Gu
ano den
e
ald s Stu
g
vo_ e thi
a
ust o us
o (g se t
n
dea licen
l
Ga ble
rico sfera
e
Fed -tran
o
tav a non
s
Gu

Desarrollo y comprobacin de un programa Java


Copyright 2008 Sun Microsystems, Inc. Todos los derechos reservados. Sun Services, Revisin E.1

3-7

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2014, Oracle and/or its affiliates

Identificacin de los componentes de una clase


El cdigo de programacin de cada clase est contenido en un archivo de
texto que debe mantener una cierta estructura. El ejemplo siguiente
muestra una clase Shirt para todas las camisas que aparecern en el
catlogo de DirectClothing. La clase Shirt contiene varias variables de
atributo y un mtodo para mostrar en la pantalla los valores de las
variables.
Cdigo 3-1

Archivo Shirt.java situado en el directorio getstarted

1
public class Shirt {
2
3
public int shirtID = 0; // ID predeterminado para la camisa
4
public String description = -description required-; //
predeterminada
5
// Los cdigos de color son R=Rojo, B=Azul, G=Verde, U=Sin definir
6
public char colorCode = U;
7
public double price = 0.0; // Precio predeterminado para todas las
camisas
8
public int quantityInStock = 0; // Cantidad predeterminada para
todas las camisas
9
10
// Este mtodo muestra los valores de un artculo
11
public void displayInformation() {
12
System.out.println(ID de camisa: + shirtID);
13
System.out.println(Descripcin de la camisa : + description);
14
System.out.println(Cdigo de color: + colorCode);
15
System.out.println(Precio de la camisa: + price);
16
System.out.println(Cantidad en stock: + quantityInStock);
17
18
} // fin del mtodo display
19 } // fin de la clase

has
r)

m
co
hoo ide
a
@y t Gu
ano den
e
ald s Stu
g
vo_ e thi
a
ust o us
o (g se t
n
dea licen
l
Ga ble
rico sfera
e
Fed -tran
o
tav a non
s
Gu

Nota El atributo quantityInStock (cantidadEnStock) no aparecera en


un catlogo, pero se utilizara para llevar el control de las unidades que
quedan de una determinada camisa en el almacn.

Nota La palabra clave public de Java se utiliza abundantemente en este


ejemplo de cdigo. En la pgina siguiente se ofrece una explicacin sobre
el uso de esta palabra. De momento, puede olvidarse de ella y centrarse
en la estructura de la denicin de la clase.

3-8

Programacin Java para no Programadores


Copyright 2008 Sun Microsystems, Inc. Todos los derechos reservados. Sun Services, Revisin E.1

Fundacin Proydesa
Identificacin de los componentes de una clase

Unauthorized reproduction or distribution prohibited Copyright 2014, Oracle and/or its affiliates

Declaracin de clases
Es preciso declarar una clase por cada clase diseada en el dominio del
problema. Cada clase necesita su propia declaracin. La sintaxis para
declarar una clase es:
[modificadores] class identificador_clase
Donde:

Los [modificadores] determinan el nivel de acceso que


otras clases tienen a esta clase. Los modicadores se explican
con mayor profundidad ms adelante en este curso. La variable
[modificadores] es opcional (como indican los corchetes) y puede
ser public, abstract o final. Por ahora, utilice el modicador
public.

has
r)

a
om
La palabra clave class indica al compilador que el bloque de cdigo
oc
oson palabras
contiene una declaracin de clase. Las palabras clave
yah uide
reservadas por el lenguaje Java para determinadas construcciones.
@
G
ano dentla clase.
identificador_clase es el nombre asignado a
e tu
La nomenclatura utilizada paraaldclases sigue las normas
las
S
o_g this
siguientes:
av
stclasesuse ser sustantivos escritos en letras
Los nombresu
de
deben
o (gy se to con la primera letra de cada palabra
maysculas minsculas,
n
en mayscula,
dea licen por ejemplo MiClase.
l
Ga Losle
nombres de clases deben contener palabras completas.
rico sferab evitarse el uso de siglas y abreviaturas, a menos que la
Debe
ede tran
sigla sea ms conocida y utilizada que el nombre completo,
o F oncomo es el caso de JVM o UML.
v
sta a n
Gu

La declaracin de clase (lnea 1) del cdigo de la clase Shirt anterior


incluye un modicador de tipo public seguido de la palabra clave class
y del nombre de la clase, Shirt.

Requisitos del archivo fuente


En este curso, desarrollar sus clases de forma que el cdigo de Java que
escriba para cada clase est contenido en su propio archivo de texto o
archivo de cdigo fuente. En lenguaje Java, el nombre de cada archivo de
cdigo fuente debe ser idntico al nombre de la clase public que contiene el
archivo y debe ir seguido de la extensin .java. Por ejemplo, la clase
Shirt debe guardarse en un archivo llamado Shirt.java.

Desarrollo y comprobacin de un programa Java


Copyright 2008 Sun Microsystems, Inc. Todos los derechos reservados. Sun Services, Revisin E.1

3-9

Fundacin Proydesa
Identificacin de los componentes de una clase

Autoevaluacin Entre las declaraciones siguientes, seleccione aquellas


que se ajusten a la nomenclatura propia de las clases.
class Shirt

b. ___

public Class 501Pants

c. ___

public Shirt

d. ___

public Class Pants

e. ___

Unauthorized reproduction or distribution prohibited Copyright 2014, Oracle and/or its affiliates

a. ___

class ShirtAndPants

La denicin de la clase va seguida de una llave de apertura ({) que


indica el comienzo del cuerpo_de_clase, las variables de atributo y los
mtodos que componen la clase. Las llaves { } que abren y cierran el
cuerpo_de_clase indican el principio y el nal de la clase.

a
om
c
oo e
yah uid
@
Declaraciones y asignaciones de variables nt G
ano de
e tu
ald del bloque de declaracin y
g
La primera llave de apertura ({) va seguida is S
vo_ e th todas las variables de
asignacin de variables de atributo. En general,
a
ust o us
atributo de la clase se denen despus de esta llave.
o (g se t
n
El ejemplo de cdigo ideenclase Shirt contiene cinco declaraciones de
dea l c la
l
variables de atributo, una para el ID de camisa (lnea 3), otra para la
Ga ble
descripcin ra 4), otra para el cdigo de color (lnea 6), otra para el
rico sfe(lnea
e
(lnea
Fed precion 7) y otra para la cantidad en stock (lnea 8).
tra
o
tav a non
s
Nota Las lneas del programa que realizan alguna accin, como imprimir
Gu

has
r)

o declarar variables, incluyen un signo de punto y coma al final. Las lneas


del programa que representan el comienzo de un bloque de cdigo (una o
ms lneas de cdigo combinadas para realizar una determinada tarea,
como las de una clase o un mtodo) se inician con una llave de apertura ({)
y se terminan con una llave de cierre (}). En los ejemplos de sintaxis y
cdigo de este curso se muestra cundo usar cada una de ellas.

3-10

Programacin Java para no Programadores


Copyright 2008 Sun Microsystems, Inc. Todos los derechos reservados. Sun Services, Revisin E.1

Fundacin Proydesa
Identificacin de los componentes de una clase

Unauthorized reproduction or distribution prohibited Copyright 2014, Oracle and/or its affiliates

Comentarios
Debera poner comentarios en cada clase que cree para facilitar la
comprensin de aquello que hace el programa. Los comentarios son
particularmente importantes en programas de gran tamao desarrollados
por muchos programadores diferentes que deben leer el cdigo.
Contribuyen a realizar un buen mantenimiento del programa cuando los
nuevos programadores necesitan saber qu est haciendo el cdigo.

Estructuras de los comentarios


Es posible utilizar dos estilos de comentarios:

Comentarios en una lnea: un marcador formado por dos barras


inclinadas // indica al compilador que debe hacer caso omiso de
todo lo que encuentre hasta el nal de la lnea actual. Por ejemplo, en
las lneas 3, 4 y 5 de la clase Shirt contiene comentarios de una sola
lnea:

has
r)

a
om
c
oo e
ah uid
public int shirtID = 0; // ID predeterminado para la @y
camisa
public double price = 0.0; // Precio predeterminado o
nt G
an paraetodas las
e
camisas
ald s Stud
_g thi
// Los cdigos de color son R=Rojo,tavo
B=Azul, G=Verde
e
gus to us
( e
Muchos ano
programadores tratan de facilitar la comprensin de sus
s
de licen
cdigos utilizando comentarios de una lnea para explicar la primera
l
Ga bllneas de cada clase y mtodo. Por ejemplo, la clase Shirt
y ltima e
rico sfera un comentario en la ltima lnea para indicar el n del
de an contienedisplay (lnea 18):
e
mtodo
o F on-tr } // fin del mtodo display
v
sta a n
En programas largos, puede ser muy complicado encontrar las llaves
Gu
de cierre de la clase. Comentar la estructura a la que pertenece cada
llave de cierre facilita considerablemente la lectura y correccin de
errores del cdigo.

Comentarios tradicionales: la combinacin de los caracteres /* indica


al compilador que haga caso omiso de todo el cdigo que encuentre
hasta el siguiente marcador de cierre (*/). Los programadores suelen
utilizar los comentarios tradicionales para proporcionar informacin
sobre un cdigo de bloque largo.
/***************************************************
* Seccin de declaracin de variables de atributo *
****************************************************/

Desarrollo y comprobacin de un programa Java


Copyright 2008 Sun Microsystems, Inc. Todos los derechos reservados. Sun Services, Revisin E.1

3-11

Fundacin Proydesa
Identificacin de los componentes de una clase

Unauthorized reproduction or distribution prohibited Copyright 2014, Oracle and/or its affiliates

Lo saba? Hay un tercer tipo de comentario denominado comentario


de documentacin. Es posible utilizar la herramienta Javadoc de la
tecnologa Java para crear documentacin relativa a cualquiera de las
clases que vayan a utilizar otros programadores. De hecho, toda la
documentacin de la biblioteca de clases que se entrega con el SDK de
Java SE se ha creado con la herramienta javadoc. Los comentarios de
documentacin deben empezar con una barra inclinada y dos asteriscos
(/**), y terminar con un asterisco y una barra inclinada (*/). El ejemplo
anterior de comentario tradicional tambin sera vlido como comentario
de documentacin.

has
r)

Mtodos

a
om
c
oo e
yah
[modificadores] tipo_retorno identificador_mtodo uid
@
G
([argumentos]) {
ano dent
e
bloque_cdigo_mtodo
ald s Stu
g
}
vo_ e thi
a
ust o us
Donde:
g
o (representa determinadas palabras clave de Java que
n nse t
a
[modificadores]
lde lice
modifican la forma en que se accede a los mtodos. Los modificadores
a
son opcionales
o G rable (como indican los corchetes).
e
eric tipo_retorno indica el tipo de valor que devuelve el mtodo
ed transf
F
devuelve alguno). Si devuelve algn valor,
declarar
vo non- (sitipo de valor del que se trata. Los valores dees precisopueden ser
ta a
el
retorno
s
Gu
utilizados por el mtodo de llamada. Un mtodo puede devolver un
Los mtodos van a continuacin de las declaraciones de variables en la
clase. Su sintaxis es la siguiente:

valor como mximo. Si no devuelve ningn valor, es preciso usar la


palabra clave void como tipo_retorno.

3-12

identificador_mtodo es el nombre del mtodo.


([argumentos]) representa una lista de variables cuyos valores se
pasan al mtodo para que ste los utilice. Los argumentos son
opcionales (como indican los corchetes) porque los mtodos no estn
obligados a aceptarlos. Recuerde tambin que los parntesis no son
opcionales. Un mtodo que no acepta argumentos se declara con
parntesis de apertura y cierre sin informacin dentro.

Programacin Java para no Programadores


Copyright 2008 Sun Microsystems, Inc. Todos los derechos reservados. Sun Services, Revisin E.1

Fundacin Proydesa
Identificacin de los componentes de una clase

Unauthorized reproduction or distribution prohibited Copyright 2014, Oracle and/or its affiliates

bloque_cdigo_mtodo es una secuencia de sentencias ejecutadas


por el mtodo. En el bloque o cuerpo del cdigo de un mtodo
pueden tener lugar una amplia variedad de tareas.

La clase Shirt contiene un mtodo, displayInformation (lneas 11-18),


que muestra en la pantalla los valores de los atributos de una camisa.
public void displayInformation() {
System.out.println("ID de camisa: " + shirtID);
System.out.println("Descripcin de la camisa :" + description);
System.out.println("Cdigo de color: " + colorCode);
System.out.println("Precio de la camisa: " + price);
System.out.println("Cantidad en stock: " + quantityInStock);

has
r)

a
omcada
Autoevaluacin Establezca las correspondencias adecuadas c
oo entre
bloque de cdigo y su ubicacin en una clase.
yah uide
no@ en G
aDenicin t
e
Ejemplo de cdigo
ald s Stud
g
double precio = 0;
vo_ e thi Cuerpo del mtodo
a
int ID = 0;
ust o us
(g e t
void showMe()o
Comentario tradicional
ean icens
d
publicl class Camisa
Declaracin e inicializacin
Ga ble l
o ra
de una variable de atributo
ric sfe
e /*
siguientes lneas de
Fed -tran Las presentan el resultado del Declaracin de un mtodo
o on cdigo
v
mtodo display */
sta a n
Gu
} // fin del mtodo display

Comentario de una lnea


Argumento
Declaracin de una clase

Desarrollo y comprobacin de un programa Java


Copyright 2008 Sun Microsystems, Inc. Todos los derechos reservados. Sun Services, Revisin E.1

3-13

Fundacin Proydesa
Creacin y uso de una clase de prueba

Unauthorized reproduction or distribution prohibited Copyright 2014, Oracle and/or its affiliates

Creacin y uso de una clase de prueba


La mayora de las clases que crear en este curso no pueden utilizarse
(ejecutarse y probarse) por s solas. En realidad, necesitar ejecutar otra
clase para crear una instancia de objeto de su clase y poder as vericarla.
A lo largo del curso, utilizar una clase de prueba (test) o main para
vericar cada una de sus clases. El cdigo siguiente contiene un ejemplo
de una clase de prueba de la clase Shirt.
Cdigo 3-2
1
2
3
4
5
6
7
8
9
10
11
12
13

Archivo ShirtTest.java situado en el directorio


getstarted

m
co
Shirt myShirt;
hoo ide
a
myShirt = new Shirt();
@y t Gu
ano den
e
myShirt.displayInformation();
ald s Stu
g
vo_ e thi
a
ust o us
}
o (g se t
}
n
dea licen
l
Ga ble
Cada claseera
rico sf de prueba del curso debera designarse con un nombre que
e n
tal.
Fed permita reconocerla comova a En concreto, su nombre debera incluir
ra
tnombre de la clase que probar seguido de la palabra Test.
el
o
tav a nonPor ejemplo, la clase diseada para vericar la clase Shirt se llama
s
Gu
ShirtTest.
public static void main (String args[]) {

Las clases de prueba deben realizar dos tareas diferentes. Son las siguientes:

Proporcionar un punto de partida, a travs del mtodo main, para el


programa.

3-14

has
r)

public class ShirtTest {

Crear una instancia de su clase y probar sus mtodos.

Programacin Java para no Programadores


Copyright 2008 Sun Microsystems, Inc. Todos los derechos reservados. Sun Services, Revisin E.1

Fundacin Proydesa
Creacin y uso de una clase de prueba

Unauthorized reproduction or distribution prohibited Copyright 2014, Oracle and/or its affiliates

Mtodo main
main es un mtodo especial que la mquina virtual de Java reconoce como
punto de partida para cualquier programa Java que se ejecute desde un
indicador o una lnea de comandos. Cualquier programa que se quiera
ejecutar desde una lnea de comandos o un indicador debe tener un
mtodo main.
Lo saba? Muchas de las clases de Java que crean los ingenieros
no se ejecutan en un sistema operativo. Recuerda los applets?
Estas miniaplicaciones se ejecutan en los navegadores y tienen su
propio mtodo de inicio.

has
r)

a
om
c
public static void main (String args[])
oo e
h id
yamtodos descritos
@
El mtodo main utiliza la misma sintaxis que todos los Gu
ano dent
con anterioridad. En concreto:
e
ald s Stuobligatorios, public y
El mtodo main contiene dos g
modicadores
vo_ e thi
static.
a
ust o us
El mtodo maing devuelve ningn valor, con lo que su tipo de
o ( no t
retorno esn
void. nse
a e
lde main tiene como identicador (nombre) main.
c
El mtodo
Ga ble li
rico sfera main acepta cero o ms objetos de tipo String
El mtodo
ede tran (String args[]). Esta sintaxis permite introducir en la lnea de
F
comandos los valores que el programa utilizar durante su ejecucin.
vo nonsta a
Gu
La sintaxis del mtodo main es:

Nota El nombre del array (args) aceptado por el mtodo main puede
cambiarse. La sintaxis public static void main(String[] args)
tambin es aceptable. Cada clase puede contener un nmero cualquiera
de mtodos main sobrecargados, incluido public static void
main(String [] args). El comando java nombreclase slo llamar
directamente a un mtodo.

Desarrollo y comprobacin de un programa Java


Copyright 2008 Sun Microsystems, Inc. Todos los derechos reservados. Sun Services, Revisin E.1

3-15

Fundacin Proydesa
Creacin y uso de una clase de prueba

Unauthorized reproduction or distribution prohibited Copyright 2014, Oracle and/or its affiliates

Notas

has
r)

m
co
hoo ide
a
@y t Gu
ano den
e
ald s Stu
g
vo_ e thi
a
ust o us
o (g se t
n
dea licen
l
Ga ble
rico sfera
e
Fed -tran
o
tav a non
s
Gu

3-16

Programacin Java para no Programadores


Copyright 2008 Sun Microsystems, Inc. Todos los derechos reservados. Sun Services, Revisin E.1

Fundacin Proydesa
Compilacin y ejecucin (comprobacin) de un programa

Unauthorized reproduction or distribution prohibited Copyright 2014, Oracle and/or its affiliates

Compilacin y ejecucin (comprobacin) de un programa


Hemos visto una clase bsica de Java llamada Shirt y una clase de
prueba llamada ShirtTest. Juntas, estas clases forman su primer
programa de tecnologa Java. A continuacin, compilar y ejecutar
(comprobar) el programa.
Nota Su sistema debe estar adecuadamente congurado para poder
compilar y ejecutar programas Java. El Apndice A, Siguientes pasos,
contiene informacin para ayudarle a congurar el sistema.

Compilacin de un programa

has
r)

a
om
c
La compilacin convierte los archivos de clase del programador en cdigo
oode Java.

de byte que puede ejecutarse mediante una mquina ah


y virtualuideJava.
Recuerde las reglas para asignar nombres a los archivos fuente de
@
G
Si un archivo fuente contiene una clase pblica, dichont
ano de archivo debe tener
e
el mismo nombre que la clase seguido ld la extensin .java. Por ejemplo,
ade s Stu
la clase Shirt debe guardarse en_g archivo llamado Shirt.java.
un
i
avo se th
t
gus t cdigo fuente de Shirt y ShirtTest,
Para compilar los archivos deo u
(
no nse
deber:
a e
lde licdonde estn almacenados los archivos de cdigo
1. Ga directorio
Ir al
o fuente.ble
eric nsfera
2.
Fed -tra Introducir el siguiente comando por cada archivo .java que quiera
o on
compilar:
v
sta a n
javac nombrearchivo
Gu
Por ejemplo:
javac Shirt.java
Una vez nalizada la compilacin, y suponiendo que no se haya
producido ningn error de compilacin, debera tener en el
directorio un nuevo archivo llamado nombreclase.class por cada
archivo fuente que haya compilado. Si compila una clase que hace
referencia a otros objetos, las clases correspondientes a esos objetos
tambin se compilan (si no se han compilado ya). Por ejemplo, si ha
compilado el archivo ShirtTest.java (que hace referencia al objeto
Shirt), tendr los archivos Shirt.class y ShirtTest.class.

Desarrollo y comprobacin de un programa Java


Copyright 2008 Sun Microsystems, Inc. Todos los derechos reservados. Sun Services, Revisin E.1

3-17

Fundacin Proydesa
Compilacin y ejecucin (comprobacin) de un programa

Unauthorized reproduction or distribution prohibited Copyright 2014, Oracle and/or its affiliates

Nota En equipos que utilicen Solaris, para cualquier archivo de texto


con extensin .java se crear un icono en el Gestor de archivos. Puede
utilizar el Gestor de archivos para seleccionar y compilar un archivo de
cdigo fuente haciendo clic en el archivo fuente, presionando el botn
derecho del ratn y seleccionando Compile en el men emergente.

Ejecucin (comprobacin) de un programa


Una vez compilados adecuadamente sus archivos de cdigo fuente, puede
ejecutarlos y probarlos utilizando la mquina virtual de Java. Para
ejecutar y probar su programa:
1.

Vaya al directorio donde estn almacenados los archivos de clase.

2.

Introduzca el comando siguiente para el archivo de clase que


contenga el mtodo main:

a
om
c
oo e
java nombreclase
yah uid
@
G
Por ejemplo:
ano dent
e
ald s Stu
java ShirtTest
g
vo_ e thi Como hemos indicado
Este comando ejecuta la ta ShirtTest.
clase
us o us crea una instancia del objeto
anteriormente, la clase ShirtTest
o (g se t
Shirt utilizando la clase Shirt. Todos los objetos Shirt tienen un
an en
mtodo,de
display, que imprime en la pantalla los valores de sus
l
lic
variables dele
Ga b atributo, por ejemplo:
rico sde rcamisa: 0
e ID fe a
n
Fed -traDescripcin de la camisa:-description requiredo on Cdigo de color: U
v
sta a n
Precio de la camisa: 0.0
Gu

has
r)

Cantidad en stock: 0

Nota Ejecucin y comprobacin a menudo son sinnimos y representan


la cuarta fase del ciclo de vida de los productos.

3-18

Programacin Java para no Programadores


Copyright 2008 Sun Microsystems, Inc. Todos los derechos reservados. Sun Services, Revisin E.1

Fundacin Proydesa
Compilacin y ejecucin (comprobacin) de un programa

Unauthorized reproduction or distribution prohibited Copyright 2014, Oracle and/or its affiliates

Sugerencias para corregir errores de sintaxis en Java


Casi siempre tendr algn error de sintaxis cuando escriba cdigo nuevo
en Java. La sintaxis se reere a las reglas que determinan la estructura
correcta de un lenguaje. Utilice los consejos siguientes cuando vaya a
corregir la sintaxis de sus programas Java:

Los mensajes de error indican el nmero de la lnea donde se ha


producido el error. Sin embargo, la lnea indicada no siempre es el
verdadero origen del error, por lo que quiz tenga que comprobar
las lneas de cdigo que preceden y siguen al nmero de lnea
suministrado.

Compruebe si ha escrito el punto y coma de cierre al nal de cada


sentencia.

has
Asegrese de tener un nmero par de llaves: debe haber una llave de
ar)
cierre por cada llave de apertura.
m
co
Asegrese de haber usado las sangras de forma coherente y uniforme
hoo ide
a
en el programa, tal y como se muestra en los ejemplos del curso.
@y t Gu sangras en
o n
Aunque los programas se ejecutan sin tener en cuenta las
anla lectura y depuracin de
e
e
diferentes tipos de cdigo, su uso facilita
ald sa Studerrores durante su
los programas, lo que, a su vez, ayuda evitar
g
vo_ e thi
escritura.
a
ust o us
o (g se t
n
dea licen
l
Ga ble
rico sfera
e
Fed -tran
o
tav a non
s
Gu

Desarrollo y comprobacin de un programa Java


Copyright 2008 Sun Microsystems, Inc. Todos los derechos reservados. Sun Services, Revisin E.1

3-19

Unauthorized reproduction or distribution prohibited Copyright 2014, Oracle and/or its affiliates

Fundacin Proydesa

m
co
hoo ide
a
@y t Gu
ano den
e
ald s Stu
g
vo_ e thi
a
ust o us
o (g se t
n
dea licen
l
Ga ble
rico sfera
e
Fed -tran
o
tav a non
s
Gu

has
r)

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2014, Oracle and/or its affiliates

Mdulo 4

Declaracin, inicializacin y uso de variables


Objetivos

has
r)

El estudio de este mdulo le proporcionar los conocimientos necesarios


para:

a
om
c
Identicar la sintaxis y los usos de las variables.
oo Java.

Enumerar los ocho tipos de datos primitivos del ah


y lenguajeide
u
Declarar, inicializar y usar variables y constantesnt G
no@ e siguiendo las
a
directrices y normas de codicacine lenguaje Java.
ld del Stud
ga i utilizando operadores.
Modicar los valores de vo_
las variables s
th
sta use
Usar la promocin y conversin de tipos.
u
o (g se to
ean icen
En este mdulo se explica cmo crear variables utilizando tipos de datos
dy la forma de modicar sus valores utilizando operadores, la
l
primitivos
Ga ble l
promocin
rico sferay la conversin de tipos.
e n
Fed -tra
o
tav a non
s
Gu

4-1
Copyright 2008 Sun Microsystems, Inc. Todos los derechos reservados. Sun Services, Revisin E.1

Fundacin Proydesa
Comprobacin de los progresos

Comprobacin de los progresos


Unauthorized reproduction or distribution prohibited Copyright 2014, Oracle and/or its affiliates

Introduzca un nmero del 1 al 5 en la columna Principio del mdulo a


n de evaluar su capacidad para cumplir cada uno de los objetivos
propuestos. Al nalizar el mdulo, vuelva a evaluar sus capacidades y
determine la mejora de conocimientos conseguida por cada objetivo.

Objetivos del mdulo

Evaluacin
(1 = No puedo cumplir
este objetivo,
Mejora de
5 = Puedo cumplir este
conocimientos
objetivo)
(Final
Principio
Final del Principio)
del mdulo mdulo

m
Identicar la sintaxis y los
co
usos de las variables.
hoo ide
a
@y t Gu
Enumerar los ocho tipos de
ano den
datos primitivos del lenguaje
e
ald s Stu
Java.
g
vo_ e thi
Declarar, inicializar y usar sta
s
variables y constantes (gu
to u
siguiendo las directrices y se
ano en
e
normas de codicacin del
ald le lic
lenguaje Java.
G b
co feravalores de las
ri s los
deModicarutilizando
n
e variables
o F on-tra
v
sta a n operadores.
Gu
Usar la promocin y
conversin de tipos.

El resultado de esta evaluacin ayudar a los Servicios de Formacin Sun


(SES) a determinar la efectividad de su formacin. Por favor, indique una
escasa mejora de conocimientos (un 0 o un 1 en la columna de la derecha) si
quiere que el profesor considere la necesidad de presentar ms material de
apoyo durante las clases. Asimismo, esta informacin se enviar al grupo
de elaboracin de cursos de SES para revisar el temario de este curso.

4-2

Programacin Java para no Programadores


Copyright 2008 Sun Microsystems, Inc. Todos los derechos reservados. Sun Services, Revisin E.1

has
r)

Fundacin Proydesa
Comprobacin de los progresos

Unauthorized reproduction or distribution prohibited Copyright 2014, Oracle and/or its affiliates

Notas

has
r)

m
co
hoo ide
a
@y t Gu
ano den
e
ald s Stu
g
vo_ e thi
a
ust o us
o (g se t
n
dea licen
l
Ga ble
rico sfera
e
Fed -tran
o
tav a non
s
Gu

Declaracin, inicializacin y uso de variables


Copyright 2008 Sun Microsystems, Inc. Todos los derechos reservados. Sun Services, Revisin E.1

4-3

Fundacin Proydesa
Aspectos relevantes

Unauthorized reproduction or distribution prohibited Copyright 2014, Oracle and/or its affiliates

Aspectos relevantes

!
?

Discusin Las preguntas siguientes son relevantes para comprender los


conceptos sobre las variables:

Una variable se reere a algo que puede cambiar. Las variables


pueden contener un valor o un conjunto de valores. Dnde ha visto
variables con anterioridad?

Qu tipos de datos cree que pueden contener las variables?

has
r)

m
co
hoo ide
a
@y t Gu
ano den
e
ald s Stu
g
vo_ e thi
a
ust o us
o (g se t
n
dea licen
l
Ga ble
rico sfera
e
Fed -tran
o
tav a non
s
Gu

4-4

Programacin Java para no Programadores


Copyright 2008 Sun Microsystems, Inc. Todos los derechos reservados. Sun Services, Revisin E.1

Fundacin Proydesa
Otros recursos

Unauthorized reproduction or distribution prohibited Copyright 2014, Oracle and/or its affiliates

Otros recursos
Otros recursos Los documentos siguientes pueden proporcionar
informacin complementaria sobre los temas tratados en este mdulo:

Farrell, Joyce. Java Programming: Comprehensive. 1999.


Es un libro excelente para no programadores. Explica conceptos que
no se tratan con tanta profundidad en otros libros ms avanzados.

Tutorial de Java. [En la web]. Disponible en:


http://java.sun.com/docs/books/tutorial/index.html

has
r)

m
co
hoo ide
a
@y t Gu
ano den
e
ald s Stu
g
vo_ e thi
a
ust o us
o (g se t
n
dea licen
l
Ga ble
rico sfera
e
Fed -tran
o
tav a non
s
Gu

Declaracin, inicializacin y uso de variables


Copyright 2008 Sun Microsystems, Inc. Todos los derechos reservados. Sun Services, Revisin E.1

4-5

Fundacin Proydesa
Identificacin de la sintaxis y el uso de las variables

Unauthorized reproduction or distribution prohibited Copyright 2014, Oracle and/or its affiliates

Identicacin de la sintaxis y el uso de las variables


Las variables se utilizan para almacenar y recuperar datos utilizados por
los programas.
El siguiente ejemplo de cdigo contiene una clase Shirt que declara
varias variables de atributo.
Cdigo 4-1

Archivo Shirt.java situado en el directorio get_started

1
public class Shirt {
2
3
public int shirtID = 0; // ID predeterminado para la camisa
4
5
public String description = -description required-; //
predeterminada
6
7
// Los cdigos de color son R=Rojo, B=Azul, G=Verde, U=Sin definir
8
public char colorCode = U;
9
10
public double price = 0.0; // Precio predeterminado para todas las
camisas
11
12
public int quantityInStock = 0; // Cantidad predeterminada para
todas las camisas
13
14
// Este mtodo muestra los valores de un artculo
15
public void displayInformation() {
16
17
System.out.println(ID de camisa: + shirtID);
18
System.out.println(Descripcin de la camisa : + description);
19
System.out.println(Cdigo de color: + colorCode);
20
System.out.println(Precio de la camisa: + price);
21
System.out.println(Cantidad en stock: + quantityInStock);
22
23
} // fin del mtodo display
24
25 } // fin de la clase

has
r)

m
co
hoo ide
a
@y t Gu
ano den
e
ald s Stu
g
vo_ e thi
a
ust o us
o (g se t
n
dea licen
l
Ga ble
rico sfera
e
Fed -tran
o
tav a non
s
Gu

4-6

Programacin Java para no Programadores


Copyright 2008 Sun Microsystems, Inc. Todos los derechos reservados. Sun Services, Revisin E.1

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2014, Oracle and/or its affiliates

Identificacin de la sintaxis y el uso de las variables


Las variables de atributo (variables declaradas fuera de un mtodo y sin la
palabra clave static) tambin se denominan variables miembro o
variables de instancia (por ejemplo, price, shirtID y colorCode en
la clase Shirt). Cuando se instancia un objeto a partir de una clase, estas
variables contienen datos especcos de la instancia. Cuando se instancia
un objeto de una clase, estas variables se denominan variables de
instancia porque pueden contener datos especcos de una determinada
instancia de la clase. Por ejemplo, una instancia de la clase Shirt puede
tener el valor 7 asignado a la variable de atributo quantityInStock,
mientras que otra instancia de la clase Shirt puede tener el valor 100
asignado a la variable de atributo quantityInStock.
Tambin es posible denir variables dentro de los mtodos. Estas
variables se denominan locales porque slo estn disponibles en el
interior del mtodo en el que se han declarado. No se han declarado
variables locales en la clase Shirt. No obstante, si se utilizasen variables
locales, se declararan en el mtodo displayInformation.

has
r)

a
om
c
oo e
yah uid
@
G
Usos de las variables
ano dent
e tu
aldvariables para tareas tales como:
El lenguaje Java hace amplio uso_g las is S
de
vo e th
Almacenar datos de atributo s
sa
uent el o u exclusivos de una instancia de objeto
(como hemos visto
o (g se t caso de las variables price e ID).
n
Asignar a valor de una variable a otra.
de el licen
l
Ga ble valores dentro de una expresin matemtica.
Representar
rico sfera los valores en la pantalla. Por ejemplo, la clase Shirt
e
Imprimir
Fed -tran utiliza las variables price e ID para mostrar en la pantalla el precio
o
y el ID de la camisa:
tav a non
us
G
System.out.println("Precio de la camisa: " + price);

System.out.println(ID de camisa: " + shirtID);

Almacenar referencias a otros objetos.

En este curso se explican numerosas formas de usar variables en las clases


de Java.

Declaracin, inicializacin y uso de variables


Copyright 2008 Sun Microsystems, Inc. Todos los derechos reservados. Sun Services, Revisin E.1

4-7

Fundacin Proydesa
Identificacin de la sintaxis y el uso de las variables

Declaracin e inicializacin de variables

Unauthorized reproduction or distribution prohibited Copyright 2014, Oracle and/or its affiliates

La declaracin e inicializacin de variables de atributo se ajusta a las


mismas reglas generales. La declaracin e inicializacin de estas variables
sigue esta sintaxis:
[modificadores] identificador de tipo [= valor];
Las variables locales pueden declararse e inicializarse por separado
(en lneas de cdigo distintas) o en una misma lnea de cdigo. La sintaxis
para declarar una variable en el interior de un mtodo es:
identificador tipo;
La sintaxis para inicializar una variable en el interior de un mtodo es:

a
om
c
oode un
La sintaxis para declarar e inicializar una variable en el interior de
yah ui
mtodo es:
@
G
ano dent
identificador tipo [= valor]; lde
ga is Stu
_
Donde:
avo se th
t u
gus to diferentes palabras clave de Java,
[modificadores] representa
o ( se
como publicn private, que determinan el modo en que otro
y
dea una n
cdigo laccede alice variable de atributo. Los modicadores son
a
opcionales le
o G rab(como indican los corchetes). Por ahora, todas las
e
eric variables que cree deberan tener el modicador public (pblico).
nsf
ed tratipo representa la clase de informacin o datos que contiene la
F
vo non- variable. Algunas variables contienen caracteres, otras contienen
a
ust a
nmeros y algunas son booleanas (boolean), con lo que slo pueden
G

has
r)

identificador = valor;

admitir uno de dos valores posibles. Es preciso asignar un tipo a


cada variable para indicar la clase de informacin que pueden
almacenar.
Nota No utilice modicadores con las variables locales (variables
declaradas dentro de los mtodos).

4-8

identificador es el nombre asignado a la variable que contiene ese


tipo.
valor es el valor que se quiere asignar a la variable. Es un elemento
opcional porque no es necesario asignar ningn valor a una variable
en el momento de declararla.

Programacin Java para no Programadores


Copyright 2008 Sun Microsystems, Inc. Todos los derechos reservados. Sun Services, Revisin E.1

Fundacin Proydesa
Identificacin de la sintaxis y el uso de las variables

Unauthorized reproduction or distribution prohibited Copyright 2014, Oracle and/or its affiliates

A continuacin guran las declaraciones de las variables de atributo en la


clase Shirt:
public
public
public
public
public

int shirtID = 0;
String description = "-descripcin-";
char colorCode = U;
double price = 0.0;
int quantityInStock = 0;

Autoevaluacin Seleccione las declaraciones e inicializaciones de


variables de atributo que utilizan la sintaxis correcta para este tipo de
operaciones.
a. ___

public int myInteger=10;

b. ___

has
r)

long myLong;

a
om
c
oo e
c. ___
long=10;
yah uid
d. ___
private int = 100
@
G
ano dent
e
e. ___
private int myInteger=10;
ald s Stu
g
vo_ e thi
a
ust o us
o (g sel t
Autoevaluacin Dena e trmino variable de atributo o variable de
n
instancia. e
d a licen
l

Ga ble
Respuesta:
rico sfera___________________________________________
de an
e
o F on-tr
v
sta a n
Autoevaluacin Dena el trmino variable local.
Gu

Respuesta: ___________________________________________

Declaracin, inicializacin y uso de variables


Copyright 2008 Sun Microsystems, Inc. Todos los derechos reservados. Sun Services, Revisin E.1

4-9

Fundacin Proydesa
Descripcin de los tipos de datos primitivos

Descripcin de los tipos de datos primitivos


Unauthorized reproduction or distribution prohibited Copyright 2014, Oracle and/or its affiliates

Muchos valores de los programas Java se almacenan como tipos de


datos primitivos.
stos son los ocho tipos de datos primitivos incorporados al lenguaje
de programacin Java:

Tipos enteros: byte, short, int y long

Tipos en coma otante: float y double

Tipo textual: char

Tipo lgico: boolean

a
om
c
oo e
Hay cuatro tipos primitivos enteros en el lenguaje Java y se identican
ah uid
mediante las palabras clave byte, short, int y long.y variables de
Las
@
G
este tipo almacenan nmeros que no tienen separador decimal.
ano dent
e
ald s Stuuna variable de tipo
g
Por ejemplo, si necesita guardar edades de personas,
h
vo_ aceptai valores dentro del rango
byte sera apropiada porque ta tipo e t
s este us
u
adecuado.
o (g se to
n
dea licen
l
Ga ble
rico sfera
e
Fed -tran
o
tav a non
s
Gu

has
r)

Tipos primitivos enteros

4-10

Programacin Java para no Programadores


Copyright 2008 Sun Microsystems, Inc. Todos los derechos reservados. Sun Services, Revisin E.1

Fundacin Proydesa
Descripcin de los tipos de datos primitivos
En la tabla siguiente guran todos los tipos enteros, sus tamaos y el
rango de valores que pueden admitir.

Unauthorized reproduction or distribution prohibited Copyright 2014, Oracle and/or its affiliates

Tabla 4-1 Tipos enteros


Tipo

Longitud

Rango

Ejemplos de valores
literales permitidos

byte

8 bits

-27 a 27 -1 (de -128 a 127,


o 256 valores posibles)

2
-114

short

16 bits

-215 a 215 -1 (de -32,768 a 32,767, o


65.535 valores posibles)

2
-32699

int

32 bits

-231 a 231 -1 (de -2,147,483,648 a


2,147,483,647 o 4.294.967.296
valores posibles)

2
147334778

has
r)

a
om
-1
2
long
64 bits
-2 a
c
(de -9,223,372,036854,775,808 a
-2036854775808L
oo e
h id
9,223,372,036,854,775,807, o
1L ya
u
18.446.744.073.709.551.616 valores no@
tG
n
a
posibles)
lde Stude
_ga this
o
Cuando especique un valor literal e un tipo long, escriba una L en
tav uspara
s
mayscula a la derecha del valor para indicar explcitamente que se trata
(gu e to
de un tipo long.o compilador considera los enteros como valores de
an El ens
tipo int,lde
a menosique se especique una L para indicar que se trata de un
a le l c
tipo G
long.
rico sferab
e clase Shirt contiene
para
a
Fed -trLan del ID de camisados atributos de tipo int en el almacenarylos
o on valores
y la cantidad disponible
almacn, se
v
sta a n
utilizan valores literales para proporcionar un valor inicial de cero (0) a
Gu
cada atributo.
63

263

public int shirtID = 0; // ID predeterminado para la camisa


public int quantityInStock = 0; // Cantidad predeterminada para todas las
camisas

Nota La nica razn para utilizar tipos byte y short en los


programas es ahorrar memoria. Dado que la mayora de los equipos de
sobremesa modernos contienen gran cantidad de memoria, hay muchos
programadores de aplicaciones de escritorio que no utilizan ni tipos byte
ni short. En los ejemplos de este curso se utilizan fundamentalmente
tipos int y long.

Declaracin, inicializacin y uso de variables


Copyright 2008 Sun Microsystems, Inc. Todos los derechos reservados. Sun Services, Revisin E.1

4-11

Fundacin Proydesa
Descripcin de los tipos de datos primitivos

Tipos primitivos en coma flotante

Unauthorized reproduction or distribution prohibited Copyright 2014, Oracle and/or its affiliates

Hay dos tipos para expresar nmeros en coma otante, float y double.
Estos tipos se utilizan para almacenar nmeros que contienen valores a la
derecha del separador decimal (en este caso, el punto), como 12.24 o
3.14159.
La tabla siguiente contiene informacin sobre los dos tipos en coma
otante.
Tabla 4-2 Tipos en coma otante
Tipo

Longitud

Ejemplos de valores literales permitidos

float

32 bits

99F
-32745699.01F
4.2E6F (notacin cientca de 4.2 * 106)

a
om
c
oo e
double
64 bits
-1111
yah uid
2.1E12
@
G
99970132745699.999
ano dent
e
ald s Stu
_g t i
vopara unhtipo float, agregue una F
Cuando especique un valor literal
a
ust o use
mayscula (oat) a la derecha del nmero para indicar que se trata de
o (g se
un tipo float y no double. Los tvalores literales de los tipos en coma
n
otante se consideran cen
dea li automticamente de tipo double, a menos que se
l
especique lo contrario mediante el uso de la F para indicar el tipo float.
Ga ble
rico sfera
e n
incluye el uso de un
a
Fed Latrclase Shirtvalor predeterminado valor literal de tipo double para
de precio (price):
o o representar el
tav doublenprice = 0.0; // Precio predeterminado para todas las camisas
n
s
public a
Gu

has
r)

Nota Utilice el tipo double cuando necesite un rango de valores mayor


o un grado de precisin ms elevado.

4-12

Programacin Java para no Programadores


Copyright 2008 Sun Microsystems, Inc. Todos los derechos reservados. Sun Services, Revisin E.1

Fundacin Proydesa
Descripcin de los tipos de datos primitivos

Unauthorized reproduction or distribution prohibited Copyright 2014, Oracle and/or its affiliates

Tipo primitivo textual


Otro tipo de datos que se utiliza para almacenar y manipular la informacin
es el que se expresa a travs de un solo carcter. El tipo primitivo utilizado
para almacenar caracteres aislados como, por ejemplo, y, se llama char y
tiene un tamao de 16 bits.
La clase Shirt incluye el uso de un valor literal de tipo textual para
representar el valor predeterminado del color (colorCode):
public char colorCode = U;

has
r)

Nota Slo se puede almacenar un carcter en las variables de tipo char.


Para almacenar palabras o frases completas, es preciso usar un tipo de
objeto (no un tipo primitivo) llamado String. El tipo String se explica
ms adelante.

a
om
c
oo e
id
yah ejemplo una t,
Cuando se asigna un valor literal a una variable @ porGu
char,
ano d t
es preciso escribir el carcter entre apstrofos: t. en
e
ald s Stu
g
Esto permite al compilador reconocer esa it como un valor literal y no
vo_ e th
como una variable t questa
representa otro valor.
s
(gu e to u
o s
a almacena el carcter escrito como tal, por ejemplo la t
El tipo char non
lde licen
antes mencionada. La representacin almacenada en char se transforma
a
en una seriebl bits que corresponden a un carcter. Las correspondencias
o G ra dee
e
eric nscada carcter y el nmero que representa estn establecidas en el
ed trentre fde caracteres que utilice el lenguaje de programacin.
juego
a
F
vo nona
ust a
G

Lo saba? Muchos lenguajes informticos utilizan el cdigo ASCII


(American Standard Code for Information Interchange), un juego de
caracteres de 8 bits que contiene un elemento por cada signo de puntuacin,
nmero, letra del alfabeto o carcter utilizados en ingls.
El lenguaje Java utiliza un juego de caracteres de 16 bits llamado Unicode
que es capaz de almacenar todos los caracteres que sea necesario reproducir
en la gran mayora de los idiomas utilizados en el mundo moderno.
Por tanto, puede escribir sus programas de forma que funcionen y
presenten sus datos correctamente en el idioma de la mayora de los pases.
Unicode contiene un subconjunto del juego ASCII (los primeros
128 caracteres).

Declaracin, inicializacin y uso de variables


Copyright 2008 Sun Microsystems, Inc. Todos los derechos reservados. Sun Services, Revisin E.1

4-13

Fundacin Proydesa
Descripcin de los tipos de datos primitivos
La clase Shirt contiene un tipo primitivo textual, char, para almacenar el
valor predeterminado del cdigo de color.

Unauthorized reproduction or distribution prohibited Copyright 2014, Oracle and/or its affiliates

public char colorCode = U;

Tipo primitivo lgico


Los programas informticos a menudo deben tomar decisiones.
El resultado de una decisin, por ejemplo, la evaluacin de una sentencia
de un programa como verdadera o falsa, puede guardarse en variables
boolean (booleanas). Las variables de tipo boolean slo pueden
almacenar:

has
r)

Los literales true o false del lenguaje Java.

a
om
c
oo e
yah uid
@
G
ano dent
Eleccin del tipo de dato
e
ald s Stu
o_g thi
Una prctica habitual entre los av
programadores con experiencia es usar los
t use
tipos int, long o double para variables numricas a menos que, por la
gus topara ahorrar memoria (por ejemplo,
(
clase de negocio, exista una razn
no nse de consumo tales como los telfonos
al programardea dispositivos
para
ce
al garantizar tiempos rpidos de ejecucin.
celulares) o para le li
G b
rico sfera
e n
a
Fed Autoevaluacin Establezca las correspondencias entre cada tipo de dato
vo nony-tr tamao en bits.
ta
su
us a
G

El resultado de una expresin que slo se evala como true o false.


Por ejemplo, si la variable respuesta es igual a 42, la expresin if
respuesta < 42 dar como resultado el valor false.

Tipo de dato
double

char

16

int

32

byte

4-14

Tamao en bits

64

Programacin Java para no Programadores


Copyright 2008 Sun Microsystems, Inc. Todos los derechos reservados. Sun Services, Revisin E.1

Fundacin Proydesa
Declaracin de variables y asignacin de sus valores

Unauthorized reproduction or distribution prohibited Copyright 2014, Oracle and/or its affiliates

Declaracin de variables y asignacin de sus valores


Las variables deben declararse antes de utilizarlas. En las secciones
siguientes se explica cmo declarar las variables y asignarles valor.

Asignacin de nombre a las variables


Al igual que ocurre con las clases o los mtodos, es preciso asignar a cada
variable de un programa un nombre o identicador.
Recuerde que el propsito de las variables es actuar como mecanismo
para guardar y recuperar valores. Por tanto, es conveniente que sus
identicadores sean sencillos pero descriptivos.

has
r)

a
om a la
Por ejemplo, si almacena el valor de un ID de artculo, puedeasignar
c
oo eotra
variable el nombre miID, idArticulo, numeroArticulo, o alguna
yah uid
designacin que deje claro el uso de la variable tanto para usted como
@
G
para otras personas que lean el programa. no
a dent
e
ald s Stu
g
vo_ e thi
Lo saba? Muchos programadores adoptan la convencin de usar la
ta us
primera letra del tipogus identicador. int i, float f, etc. Este uso es
como
(
aceptable para programas e to
no ns pequeos que sean fciles de descifrar, pero, en
a
general, deberan utilizarse identicadores ms descriptivos.
lde lice
a
o G rable
eric nsfey directrices de asignacin de nombre a los
Reglas
a
Fed -tridenticadores de las variables
vo non
a
ust a
Utilice las reglas siguientes como ayuda a la hora de asignar
G
identicadores a las variables:

Los identicadores de las variables deben empezar por una letra en


mayscula o minscula, un signo de subrayado (_) o un signo de
dlar ($). Despus del primer carcter, puede usar dgitos.

Los identicadores de las variables no pueden contener signos de


puntuacin, espacios ni guiones.

Las palabras clave de Java, que aparecen en la tabla siguiente, no


pueden utilizarse como identicadores.

Declaracin, inicializacin y uso de variables


Copyright 2008 Sun Microsystems, Inc. Todos los derechos reservados. Sun Services, Revisin E.1

4-15

Fundacin Proydesa
Declaracin de variables y asignacin de sus valores
Tabla 4-3 Palabras reservadas para la tecnologa Java
default

if

private

throw

assert

do

implements

protected

throws

boolean

double

import

public

transient

break

enum

interface

strictfp

volatile

byte

extends

long

super

while

case

final

native

switch

catch

finally

new

synchronized

char

float

package

this

class

for

return

true

continue

Unauthorized reproduction or distribution prohibited Copyright 2014, Oracle and/or its affiliates

abstract

instance short
of

a
om
c
oo e
yah uid
else
int
static
void
@
G
ano dent
e
Debera utilizar las directrices siguientes como referencia a la hora de
ald s Stu
g
asignar identicadores a las variables:
vo_ e thi
a
ust o letra
Empiece cada variable con unaus en minscula y el resto de las
(g mayscula, como, por ejemplo, miVariable.
palabras con la o
inicial ene t
n ns
dea nemotcnicos que indiquen a cualquier posible lector
l
Elija nombres lice
Ga b e
el propsitolde la variable.
rico sfera
e
Fed Lo an En el lenguaje Java, la grafa en mayscula o minscula es un
-tr saba?
avo nonrasgo pertinente. La pertinencia de la grafa en mayscula/minscula signica
ust a
G

has
r)

try

que existe diferencia entre la representacin en mayscula o minscula de


cada carcter alfabtico. El lenguaje Java considera que dos caracteres del
cdigo son distintos si uno se escribe en mayscula y el otro en
minscula. Por ejemplo, una variable llamada pedido ser distinta de otra
llamada Pedido.

4-16

Programacin Java para no Programadores


Copyright 2008 Sun Microsystems, Inc. Todos los derechos reservados. Sun Services, Revisin E.1

Fundacin Proydesa
Declaracin de variables y asignacin de sus valores

Unauthorized reproduction or distribution prohibited Copyright 2014, Oracle and/or its affiliates

Asignacin de valores a las variables


A una variable se le puede asignar su valor en el momento de declararla o
ms adelante. Para asignarle el valor durante su declaracin, agrguele el
signo igual (=) despus de declararla y escriba el valor que le quiera
asignar. Por ejemplo, a la variable del atributo price en la clase Shirt
podra asignarle el valor 12.99 como precio de un determinado objeto
Shirt.
double price = 12.99;
Un ejemplo de declaracin y asignacin de valores de variables boolean
podra ser:
boolean esAbierto = false;

has
r)

a
om
c
oo e
yah uid
@
G
ano dent
e
ald s Stu
g i
vo_ inicializan automticamente: los tipos
th
Nota Las variables de atributo se e
sta us
enteros se denen como 0, loso
( u t
o elg sede tipos en coma otante se denen como 0.0,
n n
el tipo char recibe valor
\u0000 y el tipo boolean se establece
e
dea obstante, las variables de atributos deberan inicializarse
l
como false. No lic
Ga ble
de forma explcita para que otras personas puedan leer el cdigo.
rico variables locales (las que se declaran dentro de un mtodo) deben
e Las sfera
n
Fed -trinicializarse explcitamente antes de su uso.
o on a
v
sta a n
Gu
El operador = asigna el valor del trmino derecho de la igualdad al
elemento del trmino izquierdo. El signo = debera leerse como est
asignado a. Por ejemplo, el ejemplo anterior podra entenderse como:
el valor 12.99 est asignado a price. Los operadores, como el de
asignacin (=), se explican ms adelante en el curso.

Declaracin, inicializacin y uso de variables


Copyright 2008 Sun Microsystems, Inc. Todos los derechos reservados. Sun Services, Revisin E.1

4-17

Fundacin Proydesa
Declaracin de variables y asignacin de sus valores

Declaracin e inicializacin de varias variables en una lnea de


cdigo

Unauthorized reproduction or distribution prohibited Copyright 2014, Oracle and/or its affiliates

Es posible declarar una o ms variables en la misma lnea de cdigo, pero


slo si son del mismo tipo. Las sintaxis para declarar varias variables en
una misma lnea de cdigo es:
tipo identificador = valor [, identificador = valor];
Por lo tanto, si hubiese un precio de venta al pblico y otro de venta al
por mayor en la clase Shirt, se declararan de la forma siguiente:
double price = 0.0, wholesalePrice = 0.0;

has
r)

Otras formas de declarar variables y asignarles valor

a
om
oc
oexplicado a
Asignndoles directamente valores literales (como se ha
yah uide
lo largo del mdulo):
@
G
int ID = 0;
ano dent
e
float pi = 3.14F;
ald s Stu
g
char myChar = G;
vo_ e thi
a
boolean isOpen = false;
ust o us
o (g se t
n
Asignando a valor de una variable a otra:
deel licen
l
int ID = 0;
Ga ble
rico sfsaleID = ID;
e int era
Fed -tran
o
La primera lnea de cdigo crea un entero llamado ID y lo
tav a non para guardar el nmero 0. La segunda lnea crea otro enteroutiliza
s
llamado
Gu
Los valores de las variables se pueden asignar de diversas formas:

saleID y lo utiliza para guardar el mismo valor como ID (0). Si el


contenido de ID cambia ms adelante, el contenido de saleID no
cambia automticamente. Aunque los dos enteros tienen el mismo
valor en ese momento, pueden cambiarse de forma independiente en
otra parte posterior del programa.

4-18

Programacin Java para no Programadores


Copyright 2008 Sun Microsystems, Inc. Todos los derechos reservados. Sun Services, Revisin E.1

Fundacin Proydesa
Declaracin de variables y asignacin de sus valores

Unauthorized reproduction or distribution prohibited Copyright 2014, Oracle and/or its affiliates

Asignando el resultado de una expresin a las variables de tipo


entero, en coma otante o booleanas.
En las lneas de cdigo siguientes, el resultado de todos los trminos
situados a la derecha del operador = se asignan a la variable situada
a la izquierda del operador.
float numberOrdered = 908.5F;
float casePrice = 19.99F;
float price = (casePrice * numberOrdered);
int hour = 12;
boolean isOpen = (hour > 8);

Asignando a una variable el valor de retorno de una llamada a un


mtodo. Esta forma de asignacin se trata ms adelante en el curso.

has
r)

a
om
c
Constantes
oo e
d
yah puede cambiar
@ t i
En este mdulo hemos hablado de variables cuyos valoresGu
o
a usar den
el programador. En esta seccin, aprender an
constantes para
e
representar valores que no puedengald
cambiar. Stu
_ his
avo sdel tprograma del catlogo de prendas
t u
Imagine que est escribiendo parte e
gus toreferencia a la tasa del impuesto sobre la
( e
de la empresa y necesita hacer
no la siguiente variable en su clase:
s
venta. Podraa
crear
de licen
l
double e
Ga blsalesTax = 6.25;
rico sfera
e n
el
a
Fed -trPotencialmente, este valor podra cambiar dentro del programa, aunquede
o on impuesto debera denirse una vez y permanecer constante a lo largo
v
la aplicacin. Por tanto, es preferible almacenar el valor en un lugar donde
sta a n
Gu
no pueda cambiar.
Utilice la palabra clave final para convertir el valor en una constante,
es decir, decirle al compilador que no quiere que el valor de la variable
cambie una vez que haya sido inicializada. Asimismo, por convencin,
denomine los identificadores de las constantes con palabras en maysculas
separadas por signos de subrayado. De esta forma, es ms fcil saber que
se trata de una constante.
final double SALES_TAX = 6.25;
Cualquier otra persona que necesite acceder al impuesto sobre la venta
utilizar la constante SALES_TAX y no necesitar conocer la tasa del
impuesto ni preocuparse ante la posibilidad de cambiarlo por error.

Declaracin, inicializacin y uso de variables


Copyright 2008 Sun Microsystems, Inc. Todos los derechos reservados. Sun Services, Revisin E.1

4-19

Fundacin Proydesa
Declaracin de variables y asignacin de sus valores

Unauthorized reproduction or distribution prohibited Copyright 2014, Oracle and/or its affiliates

Si alguien intenta cambiar el valor de una constante una vez que se le ha


asignado un valor, el compilador presentar un error. Si se modica el
cdigo a n de proporcionar otro valor para la constante, ser preciso
recompilar el programa.
En caso de que se incrementase el impuesto sobre la venta, debera
cambiar la constante en la ubicacin del programa donde se haya definido.
Todos los usos de la constante adoptaran el cambio automticamente.
Las constantes tambin resultan prcticas para valores que son
extremadamente largos, como es el caso de la pi (3.14159...).

Directrices de asignacin de nombres a las constantes

a
om
c
oo e
yah uid
Discusin Qu otros tipos de constantes prev o@
durante el G de sus
uso
an dent
programas?
e
!
ald s Stu
?
g
vo_ e thi
a
ust o us
o (g se t
n
dea licen
l
Ga ble
rico sfera
e
Fed -tran
o
tav a non
s
Gu

has
r)

El nombre que se asigne a las constantes debera ser fcil de identicar.


En general, deberan escribirse enteramente en maysculas y separar las
distintas palabras mediante un signo de subrayado (_).

4-20

Programacin Java para no Programadores


Copyright 2008 Sun Microsystems, Inc. Todos los derechos reservados. Sun Services, Revisin E.1

Fundacin Proydesa
Declaracin de variables y asignacin de sus valores

Unauthorized reproduction or distribution prohibited Copyright 2014, Oracle and/or its affiliates

Almacenamiento de tipos primitivos y constantes en


la memoria
Cuando se utiliza un valor literal o se crea una constante o una variable y
se le asigna un valor, ste se almacena en la memoria del equipo.
En la gura siguiente puede observarse cmo, al almacenarse, las
variables locales se separan (en la pila) de las variables de atributo
situadas en el espacio de memoria dinmica (heap).
Variable declarada
dentro de un mtodo

Objetos con
variables de atributo

has
r)

a
om
c
oo e
yah uid
@
G
ano dent
e
Pila de memoria
Memoria dinmica
ald s Stu
_g
v de e thi
Figura 4-1 Almacenamiento o variables de tipos primitivos en la
ta us
memoria us
o (g se to
an
Los objetos,e variables de atributo y sus mtodos normalmente se
d sus licen
l
almacenan en lel espacio de memoria dinmica. A este espacio se le asignan
Ga b e
a
ricoformardinmica fragmentos de memoria que contienen la informacin
e densfe para contener los objetos (incluidas sus variables de atributo y
a
Fed -trutilizada mientras el programa los necesita. Otras variables suelen
vo non mtodos) en la pila de memoria. Esta memoria guarda elementos que
a
almacenarse
ust a
G
slo se utilizan durante un breve periodo de tiempo (ms breve que la vida
de un objeto), como es el caso de las variables declaradas en el interior de
un mtodo.

Declaracin, inicializacin y uso de variables


Copyright 2008 Sun Microsystems, Inc. Todos los derechos reservados. Sun Services, Revisin E.1

4-21

Fundacin Proydesa
Uso de operadores aritmticos para modificar valores

Unauthorized reproduction or distribution prohibited Copyright 2014, Oracle and/or its affiliates

Uso de operadores aritmticos para modicar valores


Los programas realizan gran cantidad de clculos matemticos, desde los
ms simples hasta algunos muy complejos. Los operadores aritmticos
permiten especicar la forma en que deben evaluarse o combinarse los
valores numricos contenidos en las variables.

Operadores matemticos estndar


En la tabla siguiente se muestran los operadores matemticos estndar
(a menudo denominados operadores binarios) utilizados en el lenguaje
Java.

a
om
c
Finalidad
Operador Ejemplo
Comentarios
oo e
Suma
+
sum = num1 + num2;
yah uid
Si num1 es 10 y num2 es 2,
@
G
sum es 12.
ano dent
e
Resta

diff = num1 num2;


ald s Stu
Si num1 es 10 y num2 eso_g
2,
i
av se th
diff es 8.
t
Multiplicacin *
prod = num1 u num2; u
g *s to
(
Si num1 es 10 y num2 es 2,
no nse
a
prod es 20. e
lde lic
a
Divisin
/
= num1
devuelve
o G quotle es 31 y / num2;6, La divisinresto). un valor
r b
num2 es
entero (sin
ric sfeSianum1
e
quot es 5.
Fed %-tran mod = num1 % num2;
Resto vo
El resto halla el resto del cociente
ta a non
Si num1 es 31 y num2 es 6,
entre el primer nmero dividido
s
Gu
mod es 1.
por el segundo nmero.

has
r)

Tabla 4-4 Operadores binarios

5
31
30

R1

1
El resultado del resto siempre
tiene el mismo signo que el
primer operando.

4-22

Programacin Java para no Programadores


Copyright 2008 Sun Microsystems, Inc. Todos los derechos reservados. Sun Services, Revisin E.1

Fundacin Proydesa
Uso de operadores aritmticos para modificar valores

Operadores de incremento y decremento (++ y --)

Unauthorized reproduction or distribution prohibited Copyright 2014, Oracle and/or its affiliates

Un requisito comn en los programas es sumar o restar 1 al valor de una


variable. Esto se hace utilizando el operador + de la manera siguiente:
age = age + 1;
No obstante, aumentar o reducir un valor en incrementos o decrementos
de 1 es una operacin tan comn que existen operadores unarios para
realizarla: los operadores de incremento (++) y decremento (--). Estos
operadores pueden aplicarse antes (preincremento y predecremento) o
despus (posincremento y posdecremento) de la variable.

has
r)

La lnea de cdigo anterior, en la que la edad iba aumentando en


incrementos de uno tambin puede escribirse de la forma siguiente:

a
om
c
age++; o ++age;
oo e
yah uid
Utilice estos operadores con precaucin en las expresiones. Si se utilizan
@
G
como prejo, la operacin (incremento o decremento) nt aplica antes
ano de se
lde S u
de cualquier clculo o asignacin posterior. En su forma de sujo,
asucesivos tclculos u operaciones,
g
la operacin se aplica despus o_los
vde e this posteriores se utiliza el valor
a
de forma que en los clculos o asignaciones
ust o usla tabla siguiente se muestra el uso de
original, no el valor (g
actualizado. En
t
los operadores noincremento y decremento.
de
se
a
lde licen
a
Tabla 4-5 Operadorese incremento y decremento
o G rabl de
eric nsfe
Operador Finalidad
Ejemplo
Notas
Fed -tra
o ++
Preincremento int i = 6;
tav a non
us
(++variable)
int j = ++i;
G
i es 7, j es 7

Posincremento
(variable++)
--

int i = 6;
int j = i++;
i es 7, j es 6

Predecremento
(--variable)

int i = 6;
int j = --i;
i es 5, j es 5

Posdecremento
(variable--)

int i = 6;
int j = i--;
i es 5, j es 6

El valor de i se asigna a j
antes de incrementar i.
Por tanto, j recibe el valor 6.

El valor de i se asigna a j
antes de decrementar i.
Por tanto, j recibe el valor 6.

Declaracin, inicializacin y uso de variables


Copyright 2008 Sun Microsystems, Inc. Todos los derechos reservados. Sun Services, Revisin E.1

4-23

Fundacin Proydesa
Uso de operadores aritmticos para modificar valores

Unauthorized reproduction or distribution prohibited Copyright 2014, Oracle and/or its affiliates

En el ejemplo siguiente se muestra un uso bsico de los operadores de


incremento y decremento:
int count=15;
int a, b, c, d;
a = count++;
b = count;
c = ++count;
d = count;
System.out.println(a + , + b + , + c + , + d);
El resultado de este fragmento de cdigo sera:
15, 16, 17, 17
Discusin Cul es el resultado del cdigo siguiente?

a
om
c
oo e
yah uid
@
G
Orden de precedencia de los operadores ent
ano d
e
ald s Stu
g
En una sentencia matemtica compleja quetcontenga varios operadores en
vo_ e hi
a
la misma lnea, cmo determina el procesador qu operador debe utilizar
ust o us
primero?
o (g se t
n
dea licen
l
ReglasGaprecedencia
de
e
co ferabl
i
der aque las operaciones matemticas mantengan un comportamiento
Para ns
e tr
o F onhomogneo, el lenguaje Java sigue las reglas matemticas habituales para
tav a n la precedencia de los operadores. stos se procesan en el orden siguiente:
s
Gu

has
r)

int i = 16;
System.out.println(++i + + i++ + + i);

1.

Operadores incluidos entre parntesis de apertura y cierre.

2.

Operadores de incremento y decremento.

3.

Operadores de multiplicacin y divisin evaluados de izquierda a


derecha.

4.

Operadores de suma y resta evaluados de izquierda a derecha.

Si en una sentencia aparecen sucesivamente varios operadores matemticos


estndar con el mismo orden precedencia, los operadores se evalan de
izquierda a derecha.

4-24

Programacin Java para no Programadores


Copyright 2008 Sun Microsystems, Inc. Todos los derechos reservados. Sun Services, Revisin E.1

Fundacin Proydesa
Uso de operadores aritmticos para modificar valores

Ejemplo de la necesidad de utilizar reglas de precedencia

Unauthorized reproduction or distribution prohibited Copyright 2014, Oracle and/or its affiliates

En el ejemplo siguiente se demuestra la necesidad de utilizar un orden de


precedencia de los operadores:
c = 25 - 5 * 4 / 2 - 10 + 4;
En este ejemplo, no est clara la intencin del autor. El resultado puede
evaluarse de las formas siguientes:

Expresin resultante al evaluar estrictamente de izquierda a derecha:


34
c = 25 - 5 * 4 / 2 - 10 + 4;

Autntica expresin resultante, evaluada segn las reglas de


precedencia que se indican mediante los parntesis: 9

has
r)

a
om
c = 25 - ((5 * 4) / 2)) - 10 + 4;
c
oo e
yah uid
@
Uso de los parntesis
G
ano dent
e
ald s segn
Las expresiones se evalan automticamente Stu las reglas de
g i
precedencia, no obstante debera_
vo utilizar parntesis para dejar clara la
th
estructura que pretende utilizar: se
sta u
u
o (g * e to (2 - 10)) + 4;
c = (((25 - 5) s 4) /
an 4) /
c =lde * cen (2 - 10)) + 4;
((20
i
c =
/
Ga (80le l(2 - 10)) + 4;
rico sferab / -8) + 4;
e n c = (80 + 4;
Fed -tra c = -10
c = -6;
avo non
ust a
G

Declaracin, inicializacin y uso de variables


Copyright 2008 Sun Microsystems, Inc. Todos los derechos reservados. Sun Services, Revisin E.1

4-25

Fundacin Proydesa
Uso de la promocin y conversin de tipos

Uso de la promocin y conversin de tipos


Unauthorized reproduction or distribution prohibited Copyright 2014, Oracle and/or its affiliates

Nota Esta seccin puede resultar difcil para programadores sin


experiencia. Puede que le interese tratar de escribir programas pequeos
para practicar con estos conceptos.
Asignar una variable o una expresin a otra variable puede provocar
discrepancias entre los tipos de datos de los clculos y el lugar de
almacenamiento utilizado para guardar el resultado. En concreto, el
compilador detectar que se va a perder precisin y no permitir la
compilacin del programa o bien el resultado ser incorrecto. Para resolver
este problema, es preciso promover los tipos de las variables a un tipo de
tamao superior o realizar la conversin a un tipo de tamao inferior.

a
om
Por ejemplo, considere la siguiente asignacin:
c
oo e
int num1 = 53; // 32 bits de memoria para almacenar el
yah uid
@
valor
G
ano d nt
int num2 = 47; // 32 bits de memoria paraealmacenar el
e
valor
ald s Stu
g i
byte num3; // 8 bits de o_
v memoriahreservada de compilacin
t
num3 = (num1 + num2);a provoca un error
st // use
u
o (g se to un tipo byte, aunque es menor que
Este cdigo debera funcionar porque
an en
delo sucientemente grande como para almacenar un valor
un tipo int, es
al le lic
de 100. G embargo, el compilador no realizar la asignacin y, en su
Sin
rico sferab
lugar, generar un error de posible prdida de precisin porque un
e
byte
Fed valor n es menor en tamao que un valor int. Para corregir este
o onproblema, puede convertir los tipos de datos de la derecha en tipos ms
-tra
v
sta a n pequeos para que coincidan con los tipos de la izquierda, o bien declarar
Gu

has
r)

la variable de la izquierda (num3) de forma que contenga un tipo de datos


ms grande, por ejemplo int.
El problema se corrige cambiando num3 por el tipo int:
int num1 = 53;
int num2 = 47;
int num3;
num3 = (num1 + num2);

4-26

Programacin Java para no Programadores


Copyright 2008 Sun Microsystems, Inc. Todos los derechos reservados. Sun Services, Revisin E.1

Fundacin Proydesa
Uso de la promocin y conversin de tipos

Unauthorized reproduction or distribution prohibited Copyright 2014, Oracle and/or its affiliates

Promocin
En algunas circunstancias, el compilador cambia el tipo de una variable
por otro tipo que admita un valor de mayor tamao. Esta accin se conoce
como promocin. El compilador realiza automticamente algunas
promociones si, al hacerlo, no se pierden datos. Esto ocurre en las
siguientes situaciones:

Si asigna un tipo ms pequeo (a la derecha del signo =) a un tipo


ms grande (a la izquierda del signo =).

Si asigna un tipo entero a un tipo en coma otante (aunque podra


perderse algo de precisin en los bits menos signicativos del valor
cuando asigne un valor int o long a un tipo oat, o bien un valor
long a un tipo double).

has
r)

a
om
c
oo e
yah uid
@
G
ano dent
e
long big = 6;
ald s Stu
g
opromocin
vla _ e thi funciona porque el valor int
Dado que el 6 es un tipo int,
a
ust o
se convierte en un valor long. us
o (g se t
an asignarse a una variable, el resultado de una
Atencin de
Antes ideen
l
c
ecuacin se coloca en una ubicacin temporal de la memoria. El tamao
Ga ble l
de
ubicacin siempre es igual que el tamao de un tipo int o es el
ricoestaera
sf
de tamao del tipo de datos ms grande utilizado en la expresin o la
e
an
o F on-trsentencia. Por ejemplo, si la ecuacin multiplica dos tipos int, el tamao
v
del contenedor tendr el tamao de un tipo int, o 32 bits.
sta a n
Gu
El ejemplo siguiente contiene un literal (un valor int) que se promover
automticamente a otro tipo (long) antes de asignar el valor (6) a la
variable (big de tipo long). En los ejemplos siguientes se muestra qu
tipos promover automticamente el compilador y cules no.

Si los dos valores multiplicados dan como resultado un valor que supera
las dimensiones de un tipo int (por ejemplo, 55555*66666=3,703,629,630,
que es demasiado grande para caber en un tipo entero), el valor int
debe truncarse para que el resultado quepa en la ubicacin temporal
asignada en la memoria. Este clculo al nal produce una respuesta
incorrecta porque la variable correspondiente recibe un valor truncado
(con independencia del tipo usado para la respuesta).
Para resolver este problema, dena al menos una de las variables de la
ecuacin con el tipo long a n de garantizar el mayor tamao posible
para el espacio asignado en la memoria temporal.

Declaracin, inicializacin y uso de variables


Copyright 2008 Sun Microsystems, Inc. Todos los derechos reservados. Sun Services, Revisin E.1

4-27

Fundacin Proydesa
Uso de la promocin y conversin de tipos

Conversin de tipos

Unauthorized reproduction or distribution prohibited Copyright 2014, Oracle and/or its affiliates

La conversin de tipos reduce el rango de un valor literalmente cortndolo


para adaptarlo a un tipo de tamao ms pequeo. Se produce, por
ejemplo, cuando se convierte un valor long en un valor int. Esto se hace
para poder usar mtodos que aceptan slo ciertos tipos como argumentos,
y poder asignar as valores a una variable de un tipo de menor tamao, o
para ahorrar memoria.
Coloque el tipo_destino (el tipo en el que se va a convertir el valor)
entre parntesis antes del elemento que vaya a convertir. La sintaxis para
convertir el tipo de un valor es:

has
r)

identificador = (tipo_destino) valor

a
om
c
El identificador es el nombre que se asigna a la variable.
oo e
yah u
valor es el valor que se quiere asignar al identificador. id
o@ nt G
(tipo_destino) es el tipo en el que seean convertir el valor.
va a
e
Recuerde que tipo_destino debe ld
entre
aescribirsetud parntesis.
S
o_g this
v
Por ejemplo, considere la siguiente asignacin:
sta use
gu to
o (// 32ebits de memoria para almacenar el
int num1 = n
53;
ea icens
valor ld
l
int a
= 47;
o Gnum2ble // 32 bits de memoria para almacenar el
eric valornum3; // 8 bits de memoria reservada
fera
ns
Fed -trabyte = (num1 + num2); // provoca un error de compilacin
num3
o
tav a non
s
Gu
El error de compilacin se corrige convirtiendo el tipo del resultado en un
Donde:

tipo byte.
int num1 = 53; // 32
valor
int num2 = 47; // 32
valor
byte num3; // 8 bits
num3 = (byte)(num1 +

bits de memoria para almacenar el


bits de memoria para almacenar el
de memoria reservada
num2); // no hay prdida de datos

Atencin Utilice la conversin de tipos con precaucin. Por ejemplo, si


se utilizasen nmeros de mayor tamao para num1 y num2, la conversin
en un tipo byte truncara parte de esos datos, con lo que el resultado sera
incorrecto.

4-28

Programacin Java para no Programadores


Copyright 2008 Sun Microsystems, Inc. Todos los derechos reservados. Sun Services, Revisin E.1

Fundacin Proydesa
Uso de la promocin y conversin de tipos

Unauthorized reproduction or distribution prohibited Copyright 2014, Oracle and/or its affiliates

Otros posibles problemas se indican a continuacin:


int myInt;
long myLong = 99L;
myInt = (int) (myLong); //
//
//
//

No hay prdida de datos


slo ceros.
Un nmero mayor provocara
la prdida de datos.

int myInt;
long myLong = 123987654321L;
myInt = (int) (myLong); // El nmero queda cortado

has
r)

Si convierte un valor con decimales de tipo float o double en un tipo


entero como int, se perdern todos los decimales. No obstante, este
mtodo de conversin de tipos puede resultar til a veces si se quiere
redondear el nmero por defecto, por ejemplo 51.9 se convierte en 51.

a
om
c
oo e
yah uid
@
G
Suposiciones del compilador con respecto ta los tipos
ano den
e
enteros y en coma flotante gald Stu
_
is
avo se th
t u
El compilador de Java us de algunos supuestos cuando evala
gparte toestos supuestos para realizar las
expresiones. Debe comprender
o(
ntipos nse
conversiones a
apropiadas u otro tipo de adaptaciones.
e de
ald le lice
G
co ferab enteros y operaciones
i
der Tipos de datos
ans
Fe -trCuando se utilizan valores con tipos de datos primitivos en una expresin
o
tav a non con determinados operadores (*, /, -, +, %), los valores se convierten
s
Gu
automticamente en un valor int (o superior si es necesario) y luego se
ejecuta la operacin. Esta conversin puede provocar desbordamiento de
datos o falta de precisin.

Declaracin, inicializacin y uso de variables


Copyright 2008 Sun Microsystems, Inc. Todos los derechos reservados. Sun Services, Revisin E.1

4-29

Fundacin Proydesa
Uso de la promocin y conversin de tipos
En el ejemplo siguiente, se produce un error porque dos de los tres
operandos (a y b) se promueven automticamente del tipo short a un
tipo int antes de sumarse:

Unauthorized reproduction or distribution prohibited Copyright 2014, Oracle and/or its affiliates

short
a = 1
b = 2
c = a

a, b, c;
;
;
+ b ; //error de compilacin

En la ltima lnea, los valores de a y b se convierten en tipos int y se


suman para proporcionar un resultado de tipo int. A continuacin, el
operador de asignacin (=) trata de asignar el resultado int a la variable
de tipo short (c). Pero esta asignacin no es vlida y provoca un error de
compilacin.

a
om
Declarar c como un tipo int en la declaracin original:
c
oo e
int c;
yah uid
@
G
ano dent
Convertir el tipo del resultado de (a+b)e la lnea de asignacin:
en
ald s Stu
g
c = (short)(a+b);
vo_ e thi
sta
uotanteus
Tipos de datos en coma
o (g se to y forma de asignarlos
n
dea licen adoptan automticamente la forma int en
Al igual quel los tipos enteros
a le
algunasG
valores
a
o circunstancias, losdouble, asignadosquelos tipos en coma otante
rab
ric sadoptan la forma
siempre e
a menos
se especique
ede tran f que el valor es de tipo float.
expresamente
F
vo nona
Por ejemplo, la lnea siguiente provocara un error de compilacin.
ust a
G

has
r)

El cdigo funcionar si realiza una de estas operaciones:

Dado que 27.9 se considera automticamente del tipo double, se produce


un error de compilacin porque un valor double no cabe en una variable
de tipo float.
float float1 = 27.9;//error de compilacin
Las dos alternativas siguientes funcionaran correctamente:

La F indica al compilador que 27.9 es un valor float:


float float1 = 27.9F;

27.9 se convierte en un tipo float:


float float1 = (float) 27.9;

4-30

Programacin Java para no Programadores


Copyright 2008 Sun Microsystems, Inc. Todos los derechos reservados. Sun Services, Revisin E.1

Fundacin Proydesa
Uso de la promocin y conversin de tipos

Unauthorized reproduction or distribution prohibited Copyright 2014, Oracle and/or its affiliates

Ejemplo
En el ejemplo del cdigo siguiente se utilizan los principios explicados
en esta seccin para calcular la edad de una persona expresada en das y
segundos.
Cdigo 4-2

Archivo Person.java situado en el directorio data_types

1
public class Person {
2
3
public int ageYears = 32;
4
5
public void calculateAge() {
6
7
int ageDays = ageYears * 365;
8
long ageSeconds = ageYears * 365 * 24L * 60 * 60;
9
10
System.out.println(Tienes una edad de + ageDays + das.);
11
System.out.println(Tienes una edad de + ageSeconds +
segundos.);
12
13
} // fin del mtodo calculateAge
14 } // fin de la clase

has
r)

m
co
hoo ide
a
@y t Gu
ano den
e
ald s Stu
g
vo_ e thi
a
ust o us
o (g se t
n
dea licen
l
Ga ble
rico sfera
e
Fed -tran
o
tav a non
s
Gu

Declaracin, inicializacin y uso de variables


Copyright 2008 Sun Microsystems, Inc. Todos los derechos reservados. Sun Services, Revisin E.1

4-31

Unauthorized reproduction or distribution prohibited Copyright 2014, Oracle and/or its affiliates

Fundacin Proydesa

m
co
hoo ide
a
@y t Gu
ano den
e
ald s Stu
g
vo_ e thi
a
ust o us
o (g se t
n
dea licen
l
Ga ble
rico sfera
e
Fed -tran
o
tav a non
s
Gu

has
r)

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2014, Oracle and/or its affiliates

Mdulo 5

Creacin y uso de objetos


Objetivos

has
r)

El estudio de este mdulo le proporcionar los conocimientos necesarios


para:

a
om
Declarar, instanciar e inicializar variables de referencia ac
objetos.
oo een
Explicar cmo se guardan las variables de referencia a objetos
yah uid
@
comparacin con las variables de tipos primitivos. t G
ano en en de Java.
e
Utilizar una clase (la clase String) incluida d el SDK
ald s Stu
g i
Utilizar la especicacinvo_ biblioteca de clases de Java SE para
de la
th
conocer mejor otras sta de se API.
clases
este
u
(gu
oexplicae to usar objetos en los programas y cmo
s cmo
En este mdulon
se
dea licen utilizando sintaxis especca de las clases y los
l
organizar los programas
Ga ble
mtodos.
rico sfera
e
Fed -tran
o
tav a non
s
Gu

5-1
Copyright 2008 Sun Microsystems, Inc. Todos los derechos reservados. Sun Services, Revisin E.1

Fundacin Proydesa
Comprobacin de los progresos

Comprobacin de los progresos


Unauthorized reproduction or distribution prohibited Copyright 2014, Oracle and/or its affiliates

Introduzca un nmero del 1 al 5 en la columna Principio del mdulo a


n de evaluar su capacidad para cumplir cada uno de los objetivos
propuestos. Al nalizar el mdulo, vuelva a evaluar sus capacidades y
determine la mejora de conocimientos conseguida por cada objetivo.

Objetivos del mdulo

Evaluacin
(1 = No puedo cumplir
este objetivo,
Mejora de
5 = Puedo cumplir este
conocimientos
objetivo)
(Final
Principio
Final del Principio)
del mdulo mdulo

m
Declarar, instanciar e
co
inicializar variables de
hoo ide
a
referencia a objetos.
@y t Gu
ano den
Explicar cmo se guardan las
e
ald s Stu
variables de referencia a
_g thi
objetos en comparacin con las vo
a
variables de tipos primitivos.t
us o use
(g
t
Utilizar una clase no
(la clase se
a
String) incluida en el SDK
lde licen
de Java. a
e
G
co laerabl
ri s especicacin de la
deUtilizar f de clases de Java SE
n
e biblioteca
o F on-traconocer mejor otras clases
v
sta a n para API.
de este
Gu

El resultado de esta evaluacin ayudar a los Servicios de Formacin Sun


(SES) a determinar la efectividad de su formacin. Por favor, indique una
escasa mejora de conocimientos (un 0 o un 1 en la columna de la derecha)
si quiere que el profesor considere la necesidad de presentar ms material
de apoyo durante las clases. Asimismo, esta informacin se enviar al
grupo de elaboracin de cursos de SES para revisar el temario de este
curso.

5-2

Programacin Java para no Programadores


Copyright 2008 Sun Microsystems, Inc. Todos los derechos reservados. Sun Services, Revisin E.1

has
r)

Fundacin Proydesa
Comprobacin de los progresos

Unauthorized reproduction or distribution prohibited Copyright 2014, Oracle and/or its affiliates

Notas

has
r)

m
co
hoo ide
a
@y t Gu
ano den
e
ald s Stu
g
vo_ e thi
a
ust o us
o (g se t
n
dea licen
l
Ga ble
rico sfera
e
Fed -tran
o
tav a non
s
Gu

Creacin y uso de objetos


Copyright 2008 Sun Microsystems, Inc. Todos los derechos reservados. Sun Services, Revisin E.1

5-3

Fundacin Proydesa
Aspectos relevantes

Unauthorized reproduction or distribution prohibited Copyright 2014, Oracle and/or its affiliates

Aspectos relevantes

!
?

Discusin Las preguntas siguientes son relevantes para comprender en


qu consiste la creacin y el uso de objetos:

Qu signica crear una instancia del plano de una casa?

Cmo hace referencia a diferentes casas de una misma calle?

Cuando un constructor levanta una casa, construye cada componente


de la casa, incluidas las ventanas, las puertas y los armarios?

has
r)

m
co
hoo ide
a
@y t Gu
ano den
e
ald s Stu
g
vo_ e thi
a
ust o us
o (g se t
n
dea licen
l
Ga ble
rico sfera
e
Fed -tran
o
tav a non
s
Gu

5-4

Programacin Java para no Programadores


Copyright 2008 Sun Microsystems, Inc. Todos los derechos reservados. Sun Services, Revisin E.1

Fundacin Proydesa
Otros recursos

Unauthorized reproduction or distribution prohibited Copyright 2014, Oracle and/or its affiliates

Otros recursos
Otros recursos El documento siguiente proporciona informacin
complementaria sobre los temas tratados en este mdulo:

Tutorial de Java. [En la web]. Disponible en:


http://java.sun.com/docs/books/tutorial/java/index.html
Gua prctica para programadores con cientos de ejemplos y
ejercicios completos.

has
r)

m
co
hoo ide
a
@y t Gu
ano den
e
ald s Stu
g
vo_ e thi
a
ust o us
o (g se t
n
dea licen
l
Ga ble
rico sfera
e
Fed -tran
o
tav a non
s
Gu

Creacin y uso de objetos


Copyright 2008 Sun Microsystems, Inc. Todos los derechos reservados. Sun Services, Revisin E.1

5-5

Fundacin Proydesa
Declaracin de referencias a objetos, instanciacin de objetos e inicializacin de

Declaracin de referencias a objetos, instanciacin de


objetos e inicializacin de referencias a objetos
Unauthorized reproduction or distribution prohibited Copyright 2014, Oracle and/or its affiliates

Las variables de referencia a objetos son variables que contienen la


direccin de un objeto en la memoria. Una carta es como una variable de
referencia porque contiene una direccin que remite a un determinado
objeto edicio. En la ilustracin siguiente se muestran varias
direcciones que sealan a diferentes casas.

has
r)

m
co
hoo ide
a
C/ Calndula, 112
@y t Gu
ano den
e
ald s Stu
g
vo_ e thi
a
ust o us
o (g se t
n
dea licen
l
Ga ble
rico sfera
e
Fed -tran
C/ Jazmn, 300
o
tav a non
s
Gu
Figura 5-1 Varias cartas que se dirigen a diferentes casas

5-6

Programacin Java para no Programadores


Copyright 2008 Sun Microsystems, Inc. Todos los derechos reservados. Sun Services, Revisin E.1

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2014, Oracle and/or its affiliates

Declaracin de referencias a objetos, instanciacin de objetos e inicializacin de


En esta seccin, crear clases e instanciar objetos dentro de esas clases.
En el ejemplo siguiente se muestra una clase ShirtTest que crea una
variable, una variable de referencia a un objeto (myShirt), e inicializa
la variable para que seale a una instancia de la clase Shirt (lnea 5).
Una vez creada e inicializada la variable de referencia, puede utilizarse
para llamar al mtodo displayInformation (lnea 7) del objeto Shirt.
Cdigo 5-1

1
2
3
4
5
6
7
8
9
10

Archivo ShirtTest.java situado en el directorio


getstarted

public class ShirtTest {


public static void main (String args[]) {
Shirt myShirt = new Shirt();

has
r)

a
om
c
oo e
}
yah uid
}
@
G
ano dent
e tu
Declarar e inicializar una variable de ald
referencia es muy parecido a declarar
g is S
e inicializar una variable de un o_ primitivo. La nica diferencia reside
tipo
v
th
en que es preciso crear una a
st instanciae un objeto (a partir de una clase)
s de
u
al que debe hacer referencia lao u
o (g se t variable antes de inicializar la instancia del
n
objeto.
dea licen
l
e
Ga blinstanciar e inicializar variables de referencia a objetos:
Para
a
co declarar,
i
r
der ansfe una referencia al objeto especicando su identicador y el
1. Declare
e
o F on-tr tipo de objeto al que seala la referencia (la clase del objeto).
v
sta a n
2. Cree la instancia del objeto utilizando la palabra clave new.
Gu
myShirt.displayInformation();

3.

Inicialice la variable de referencia asignando el objeto a dicha variable.

Nota Puede realizar estos tres pasos en una sola lnea de cdigo (como
se ha mostrado anteriormente en el ejemplo de ShirtTest.java).

Creacin y uso de objetos


Copyright 2008 Sun Microsystems, Inc. Todos los derechos reservados. Sun Services, Revisin E.1

5-7

Fundacin Proydesa
Declaracin de referencias a objetos, instanciacin de objetos e inicializacin de

Declaracin de variables de referencia a objetos

Unauthorized reproduction or distribution prohibited Copyright 2014, Oracle and/or its affiliates

Para declarar una variable de referencia a un objeto, especique la clase a


partir de la que quiere crear el objeto y seleccione el nombre que desee
utilizar para hacer referencia a ese objeto. La sintaxis para declarar
variables de referencia a objetos es:
Nombreclase identificador;
Donde:

Nombreclase es la clase o tipo de objeto al que hace referencia la


variable.

El identificador es el nombre asignado a la variable de tipo


Nombreclase.

a
om
c
Por ejemplo, en la lnea 5, la clase ShirtTest crea una variable de
oo e
referencia a un objeto llamada myShirt. En principio, las referencias de
ah que
d
objeto que son variables miembro se inicializan con @y Dadoui la
null.
G se
variable myShirt es una variable local declarada en la lnea 5, no
ano dent
e
inicializa.
ald s Stu
g
vo_ese thi
a s importante que el identicador
Como ocurre con todas las variables,
ust y que siga las reglas de nomenclatura
reeje la nalidad de la(variable o u
o g se t
propias de los identicadores.
n
dea licen
l
Ga ble
Instanciacin a un objeto
rico sfer de
e
Fed -tran
o
un objeto, puede crearse
tav a nonUna vez declarada la referencia ainstanciar un objeto es: el objeto al que
s
hace referencia. La sintaxis para
Gu

has
r)

new Nombreclase();
Donde:

La palabra clave new crea una instancia de un objeto a partir de una


clase.

Nombreclase es la clase o el tipo de objeto que se va a crear.

Por ejemplo, la clase ShirtTest crea un objeto del tipo Shirt en la lnea 5
utilizando la palabra clave new.

5-8

Programacin Java para no Programadores


Copyright 2008 Sun Microsystems, Inc. Todos los derechos reservados. Sun Services, Revisin E.1

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2014, Oracle and/or its affiliates

Declaracin de referencias a objetos, instanciacin de objetos e inicializacin de

Nota La instanciacin del objeto y su asignacin a la variable de


referencia deben hacerse en la misma lnea de cdigo. En la seccin
siguiente se muestra cmo escribir cdigo que instancie un objeto y
efecte la asignacin (inicialice la variable de referencia al objeto).

Inicializacin de variables de referencia a objetos


El ltimo paso para crear una variable de referencia a un objeto es
inicializar la variable asignndole el objeto recin creado. Al igual que
ocurre con la asignacin o inicializacin de las dems variables, esto se
hace mediante el signo igual (=). La sintaxis para inicializar un objeto en
una variable de referencia es:

has
r)

a
om
c
oo a la
Por ejemplo, la clase ShirtTest asigna el nuevo objeto h
a Shirtide
variable de referencia myShirt. Se puede decir que y variable de
La
u
referencia myShirt seala a un objeto Shirt. o
n @ ent G
a
lde Stud
myShirt = new Shirt(); ga
is
o_
avvlidae th objeto, sta puede utilizarse
t
Una vez creada una instancia us de un
gus objeto o llamar a los mtodos del objeto.
para manejar los o ( del to
n datosnse
ea ice
ldde variables de referencia a objetos utilizando una o
a
Creacin le l
o G rab cdigo
dos lneas
eric nsfe de
d a
e
o F on-trEn el ejemplo de ShirtTest, la creacin de la referencia de objeto,
v
la creacin del nuevo objeto Shirt y la inicializacin de la variable se
sta a n
u
G
efectan en la misma lnea de cdigo. Por ejemplo:
identificador = new Nombreclase();

Shirt myShirt;
myShirt = new Shirt();
No obstante, tambin est permitido crear la variable de referencia a un
objeto en una lnea y efectuar la creacin del nuevo objeto y la asignacin
del objeto a la referencia en otra lnea. La lnea de cdigo siguiente es
equivalente a las dos lneas mostradas anteriormente:
Shirt myShirt = new Shirt();

Creacin y uso de objetos


Copyright 2008 Sun Microsystems, Inc. Todos los derechos reservados. Sun Services, Revisin E.1

5-9

Fundacin Proydesa
Declaracin de referencias a objetos, instanciacin de objetos e inicializacin de

Unauthorized reproduction or distribution prohibited Copyright 2014, Oracle and/or its affiliates

Uso de una variable de referencia a objetos para


manejar datos
El operador punto (.) se utiliza con las referencias a objetos para
manipular los valores o hacer llamadas a los mtodos de un objeto
concreto. Por ejemplo, para cambiar la variable colorCode del nuevo
objeto por G (correspondiente a verde), debera agregar la siguiente
lnea de cdigo a su clase ShirtTest:
myShirt.colorCode = G;
A continuacin se muestra una clase ShirtTestTwo nueva que crea dos
variables de referencia, myShirt y yourShirt, que hacen referencia a
diferentes objetos Shirt (lneas 5 y 6).
Cdigo 5-2

Archivo ShirtTestTwo.java situado en el


directorio object_structure

m
co
hoo ide
a
1
public class ShirtTestTwo {
@y t Gu
2
ano den
3
public static void main (String args[]) { lde
ga is Stu
4
o_ th
5
Shirt myShirt = new Shirt(); tav
e
6
Shirt yourShirt = new Shirt();
gus to us
(
7
no nse
a
8
myShirt.displayInformation();
lde lice
a
9
yourShirt.displayInformation();
o G rable
10
eric nsfe
11
myShirt.colorCode=R;
Fed -tra
12
yourShirt.colorCode=G;
o on
13 tav
s
an
14
myShirt.displayInformation();
Gu

15
16
17
18

yourShirt.displayInformation();

}
}
En este ejemplo, la declaracin, instanciacin e inicializacin de
cada variable de referencia se realizan en la misma lnea de cdigo.
La declaracin se sita a la izquierda del signo igual y la instanciacin
del objeto se sita a la derecha de este signo. El signo igual asigna cada
nueva instancia del objeto a la referencia recin declarada (lneas 5 y 6).

5-10

Programacin Java para no Programadores


Copyright 2008 Sun Microsystems, Inc. Todos los derechos reservados. Sun Services, Revisin E.1

has
r)

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2014, Oracle and/or its affiliates

Declaracin de referencias a objetos, instanciacin de objetos e inicializacin de


Una vez creadas las referencias a los objetos, cada objeto puede manejarse
de forma independiente. En concreto, el objeto al que seala la referencia
myShirt recibe un cdigo de color (colorCode) R de rojo (lnea 11),
mientras que el objeto al que seala la referencia yourShirt recibe el
valor G de verde (lnea 12) en colorCode.
Puede escribir lneas de cdigo para crear tantas referencias a objetos
Shirt como desee, en funcin de la cantidad de memoria que tenga el
equipo informtico.
Nota Una forma de interaccin de los objetos tiene como nalidad hacer
que un objeto manipule los datos de otro objeto. Asimismo, un objeto
puede llamar a los mtodos de otro objeto. Por ejemplo, la referencia
al objeto myShirt llama al mtodo displayInformation (lnea 14).
La llamada a mtodos mediante el operador punto (.) se describe ms
adelante en este curso.

has
r)

a
om
c
oo e
yah uid
@
G
Almacenamiento de variables deereferencia a objetos
ano dent
d
en la memoria
gal is Stu
_
avo se th
t
Si las variables de tipos primitivos almacenan valores, las variables de
gus tolau
(
referencia a objetos almacenan ubicacin (direccin de memoria) de los
no nse
a
objetos en la memoria.
lde lice
a
o G rable
eric nse direcciones de memoria normalmente se escriben en notacin
Nota f Las
a
Fed -trdecimal, empezando desde 0x (por ejemplo, 0x334009). Cada direccin es
vo non exclusiva de un objeto y se asigna mientras se ejecuta un programa.
a
ust a
G

Creacin y uso de objetos


Copyright 2008 Sun Microsystems, Inc. Todos los derechos reservados. Sun Services, Revisin E.1

5-11

Fundacin Proydesa
Declaracin de referencias a objetos, instanciacin de objetos e inicializacin de
En la gura siguiente se muestra cmo se almacenan de manera diferente
las variables de tipos primitivos y las de referencia a objetos.
public static void main (String args[]) {

Unauthorized reproduction or distribution prohibited Copyright 2014, Oracle and/or its affiliates

int counter;
counter = 10;
Shirt myShirt = new Shirt ( );
}
0x034009
0
0.0
U

counter

shirtID
price
colorCode

has
r)

10

a
om
c
shirtID
0
oo e
yourShirt 0x99f311
0.0
price
yah uid
@
G
U
colorCode
ano dent
e tu
Memoria
ald s dinmica
Memoria S
g
de la pila o_
v e thi
a s
ustque se almacenan las variables de
Figura 5-2 Forma en to u
o (g se
referencia en la memoria
n
dea licen
l
Ga ble que hacen referencia a objetos locales y sus valores se
Notao Las variables
r
ric sen laamemoria de pila mientras que los objetos a los que sealan
guardan
de an fe
e r
el espacio de memoria dinmica (heap). Las variables de
o F onsetalmacenan enobjetos myShirt y yourShirt contienen direcciones que
av n referencia a los
ust a
sealan a diferentes objetos Shirt.
G
myShirt

0x034009

0x99f311

Asignacin de una referencia de una variable a otra


Qu cree que ocurre cuando se asigna una variable de referencia a otra
variable de referencia? Por ejemplo, cuando se ejecuta el siguiente cdigo:
Shirt myShirt = new Shirt();
Shirt yourShirt = new Shirt();
myShirt = yourShirt;
Las variables de referencia a myShirt y yourShirt contienen la misma
direccin de acceso al mismo objeto.

5-12

Programacin Java para no Programadores


Copyright 2008 Sun Microsystems, Inc. Todos los derechos reservados. Sun Services, Revisin E.1

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2014, Oracle and/or its affiliates

Declaracin de referencias a objetos, instanciacin de objetos e inicializacin de


Como en el caso de las variables de tipos primitivos, el valor del trmino
situado a la derecha se asigna al trmino de la izquierda. En el ejemplo
anterior, la direccin de la variable yourShirt, por ejemplo 0x99f311,
se asigna a la variable myShirt. Ambas variables ahora sealan al mismo
objeto, aunque el otro objeto, aquel al que antes sealaba la variable
myShirt, sigue existiendo.
En la gura siguiente se ilustra esta asignacin.

Shirt

myShirt - new Shirt( );

Shirt

yourShirt = new Shirt( );

myShirt = yourShirt;

has
r)

a
om
c
0x034009
oo e
0
shirtIDah
d
@y t Gui
0.0
price
o n
ancolorCode
e
e
aldU s Stud
g
vo_ e thi
a
0x034009
ust o us 0x99f311 shirtID
0x99f311
myShirt (g
0
no nse t
a
0.0
price
lde lice
a yourShirt 0x99f311
e
G
U
colorCode
co ferabl
ri s
e
Memoria de la pila
Memoria dinmica
Fed -tran
o on
v
sta a n
Figura 5-3 Asignacin de la referencia de una variable a otra
Gu

Nota Las lneas de cdigo de la gura apareceran en un mtodo como,


por ejemplo, el mtodo main.
A menos que haya otra variable de referencia sealando al segundo objeto
Shirt, el espacio de memoria utilizado por esa direccin se recicla.

Creacin y uso de objetos


Copyright 2008 Sun Microsystems, Inc. Todos los derechos reservados. Sun Services, Revisin E.1

5-13

Fundacin Proydesa
Uso de la clase String

Uso de la clase String


Unauthorized reproduction or distribution prohibited Copyright 2014, Oracle and/or its affiliates

String es una de las muchas clases incluidas en las bibliotecas de clases


de Java. La clase String permite guardar una secuencia de caracteres.
Es una clase muy utilizada a lo largo de los programas. Por tanto, es
importante comprender algunas de las caractersticas especiales de las
secuencias de caracteres en el lenguaje de programacin Java.

Creacin de un objeto String con la palabra clave new


Hay diferentes maneras de crear e inicializar un objeto String. Una de
ellas es usar la palabra clave new para crear un objeto String y, al mismo
tiempo, denir la secuencia de caracteres con la que se va a inicializar ese
objeto:

a
om
String myName = new String(Alfredo Lopez); oc
aho uide
y
Lo saba? Cuando se crea un objeto, se llama no@ nt G especial
a un constructor
e
denominado constructor. Los constructores dea
se explican ms adelante en
al s Stud
este curso.
g
vo_ e thi
a s
ustcon la palabra new origina dos objetos
u
Creacin de un objeto String to
(
o yg se la representacin de caracteres del literal
String en la memoria coloca
ean de n
despacioicela memoria dinmica reservado para literales
String enal
un
G bel
que se denominalgrupo de almacenamiento de literales.
rico sfera
e
Fed -trande un objeto String sin la palabra clave new
o Creacin
tav a non
s
Gu

has
r)

Los tipos String constituyen una excepcin porque son la nica clase que
permite crear objetos sin usar la palabra clave new. Por ejemplo:
String myName = Alfredo Lopez;

Esta sintaxis es muy similar a la utilizada para declarar e inicializar


variables de tipos de datos primitivos.
La creacin de un objeto String sin usar la palabra clave new da lugar a
un objeto String y coloca la representacin de la secuencia de caracteres
en el grupo de almacenamiento de literales (si el literal String no existe
ya en ese grupo de almacenamiento). Para evitar la duplicacin
innecesaria de objetos String en la memoria, es mejor crear objetos
String sin la palabra clave new.

5-14

Programacin Java para no Programadores


Copyright 2008 Sun Microsystems, Inc. Todos los derechos reservados. Sun Services, Revisin E.1

Fundacin Proydesa
Uso de la clase String

Unauthorized reproduction or distribution prohibited Copyright 2014, Oracle and/or its affiliates

Almacenamiento de objetos String en la memoria


El almacenamiento de las variables de referencia a objetos String en la
memoria funciona de la misma forma que otras referencias a objetos: tiene
una variable con un nombre, como myName, que contiene una referencia
en la memoria en la que est situado el objeto String. El objeto String
tiene un valor, una secuencia de caracteres que se ha suministrado
durante la inicializacin. En la gura siguiente se ilustra cmo aparece en
la memoria una variable de referencia a un objeto String.
String myString = "Resumen de Laura";

0xdef
myString

0xdef

0x0011f
0x2244c

[C value
Comparador

has
r)

a
om
c
0x0011f
oo e
Resumen de Laura
yah uid
@
n G
anodinmicat
e
e
Memoria de la pila
Memoria
ald s Stud
_g thi
Figura 5-4 Formatavo los objetos String se almacenan en la
en que
e
memoria us
gus to
(
no nse
a
lde deice de la gura aparecera en un mtodo como, por
Nota a lnea l cdigo
G La le
ejemplo, ab
co fermain.
i
der ans
e
o F on-trLa direccin contenida en la variable myString hace referencia a un
v
sta a n
objeto String de la memoria. El objeto String tiene una variable de
Gu
atributo llamada [C value que contiene una direccin referida a la
secuencia de caracteres.

Creacin y uso de objetos


Copyright 2008 Sun Microsystems, Inc. Todos los derechos reservados. Sun Services, Revisin E.1

5-15

Fundacin Proydesa
Uso de la clase String

Unauthorized reproduction or distribution prohibited Copyright 2014, Oracle and/or its affiliates

Uso de variables de referencia para objetos String


Las variables de objetos String se utilizan como las variables de tipos
primitivos. En el ejemplo siguiente se muestra una clase que indica el
nombre y el trabajo de una persona:
Cdigo 5-3

1
2
3
4
5
6
7
8
9

Archivo PersonTwo.java situado en el directorio


object_structure

public class PersonTwo {


public String name = Juan;
public String job = Probador de helados;
public void display(){
System.out.println(Me llamo + name + , soy + job);
}
} // fin de la clase

a
om
c
oo e
yah uid
@
G
anocon entvalores
Nota En el ejemplo anterior se muestra ldeclase ud los
a una s St que seran el
g
predeterminados (Juan y Probador de helados),
vo_ e hi
nombre y el trabajo predeterminados paratcada objeto PersonTwo.
a
ust o us
Esta sintaxis permite conocer la clase String sin tener que hacer
llamadas especiales a los mtodos. En general, no le interesar que sus
o (g se t
n
clases contengana
datos en
de la instancia.
denameliesespeccosrequired-. UnUn valor ms adecuado
al le c -name
para la G
variable
valor ms adecuado
para o variable job es -job required-.
c la ferab
i
der ans
e
o F on-tr
v
sta a n
Gu

has
r)

5-16

Programacin Java para no Programadores


Copyright 2008 Sun Microsystems, Inc. Todos los derechos reservados. Sun Services, Revisin E.1

Fundacin Proydesa
Estudio de las bibliotecas de clases de Java

Unauthorized reproduction or distribution prohibited Copyright 2014, Oracle and/or its affiliates

Estudio de las bibliotecas de clases de Java


Todos los SDK de tecnologa de Java contienen una serie de
clases precodicadas que se utilizan en los programas. Estas bibliotecas
estn documentadas en la especicacin de las bibliotecas de
clases correspondientes a la versin del SDK que se est utilizando.
La especicacin se compone de una serie de pginas web en formato
HTML (Hypertext Markup Language) que pueden cargarse en los
navegadores web.

Especificacin de la biblioteca de clases de Java

has
r)

Una especicacin de biblioteca de Java es un documento muy detallado


donde se explican las clases del API. Cada API incluye documentacin
donde se describe el uso de las clases, las variables y los mtodos de los
programas.

a
om
c
oo e
yah uid
@
Cuando busque una forma de realizar ciertos conjuntostde tareas,
n G
ano desobre las clases
esta especicacin es la mejor fuente de informacin
lde Stu
precodicadas de las bibliotecas _gJava.
de a
is
avo se th
t
Para ver la especicacins API de Java SE en Internet, vaya al siguiente
gu delto u
(
sitio web:
no nse
a
lde lice
http://java.sun.com/javase/reference/api.jsp
a
o G rable
Y s e
eric seleccione el vnculo de los documentos fundamentales del API
ed tr(Core f Docs) correspondiente al nmero de versin del JDK que est
an API
o F on- utilizando. Por ejemplo, para elegir el JDK versin 6:
v
sta a n
Gu
Donde versin es el nmero de versin del SDK de Java SE que est
utilizando. Por ejemplo:
http://java.sun.com/javase/6/docs/api/
Para descargar la documentacin, consulte las instrucciones del
Apndice A, Siguientes pasos.

Creacin y uso de objetos


Copyright 2008 Sun Microsystems, Inc. Todos los derechos reservados. Sun Services, Revisin E.1

5-17

Fundacin Proydesa
Estudio de las bibliotecas de clases de Java

Unauthorized reproduction or distribution prohibited Copyright 2014, Oracle and/or its affiliates

En la gura siguiente puede verse un ejemplo de la documentacin


correspondiente a una clase del API.

has
r)

a
om
c
oo e
yah uid
@
G
ano dent
e
ald s Stu
g
vo_ e thi
a
ust o us
o (g se t
n
dea licen
l
Ga ble
rico sfera
e
Fed -tran
o
tav a non
s
Gu
Figura 5-5 Clase String de la especicacin del API de Java SE
Nota Es posible que, en estos momentos, la especicacin parezca algo
tcnica y complicada. Sin embargo, al nal de la leccin utilizar este
documento para buscar informacin sobre varias clases.

5-18

Programacin Java para no Programadores


Copyright 2008 Sun Microsystems, Inc. Todos los derechos reservados. Sun Services, Revisin E.1

Fundacin Proydesa
Estudio de las bibliotecas de clases de Java

Unauthorized reproduction or distribution prohibited Copyright 2014, Oracle and/or its affiliates

Uso de la especificacin de la biblioteca de clases de


Java para obtener informacin sobre un mtodo
A lo largo de todo el curso ha estado utilizando la clase System.
En concreto, ha utilizado el mtodo println para mostrar en la pantalla
la salida de los programas:
System.out.println(datos_para_imprimir_en_la_pantalla);
El mtodo System.out.println es un mtodo que viene precodicado
en el lenguaje de programacin Java. Utilice los pasos siguientes para
obtener ms informacin sobre este mtodo a travs del API de Java SE:
1.

has
r)

Utilice el navegador web para buscar la primera pgina de la


documentacin del API de Java SE.

a
om
c
Observe que la clase System posee una variable llamada out
oo e que es
una variable de referencia a un objeto PrintStream. De hecho,
yah uid
G
println es un mtodo perteneciente a la o@ PrintStream.
an clase ent
e
3. Haga clic en el vnculo de la variable out tud ver ms datos sobre
ald s Spara
g
esta variable.
vo_ e thi
a
4. Haga clic en el vnculo de la clase PrintStream al comienzo de la
ust o us
explicacin o (g a latvariable out.
nrelativase
a abajo
5. Desplace hacia en el texto del mtodo println.
lde mtodos println. La clase PrintStream tiene otros
c
Hay
Ga varios li
le
mtodos
rico sferab para imprimir la salida en una pantalla.
de an Por ejemplo, dispone del mtodo print. La documentacin aclara
e
o F on-tr que la diferencia entre los mtodos println y print es que println
v
sta a n
aplica un salto de lnea, de forma que el texto adicional se imprime
Gu
2.

Haga clic en la clase System de la lista.

en una lnea nueva. Por ejemplo:

System.out.print("Carpe diem");
System.out.println("Disfruta de la vida");
Presenta lo siguiente en la pantalla:
Carpe diem Disfruta de la vida
Por tanto, en funcin de lo que deba hacer el programa, preferir
usar el mtodo print en lugar de println.
Comprender el modo de usar la documentacin de la biblioteca de clases
de Java SE es fundamental para explotar al mximo todo el potencial de la
tecnologa Java.

Creacin y uso de objetos


Copyright 2008 Sun Microsystems, Inc. Todos los derechos reservados. Sun Services, Revisin E.1

5-19

Fundacin Proydesa
Estudio de las bibliotecas de clases de Java

Unauthorized reproduction or distribution prohibited Copyright 2014, Oracle and/or its affiliates

Nota A medida que avancen sus conocimientos de programacin, se


familiarizar con una multitud de clases de la plataforma Java SE, con sus
correspondientes variables y mtodos.

has
r)

m
co
hoo ide
a
@y t Gu
ano den
e
ald s Stu
g
vo_ e thi
a
ust o us
o (g se t
n
dea licen
l
Ga ble
rico sfera
e
Fed -tran
o
tav a non
s
Gu

5-20

Programacin Java para no Programadores


Copyright 2008 Sun Microsystems, Inc. Todos los derechos reservados. Sun Services, Revisin E.1

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2014, Oracle and/or its affiliates

Mdulo 6

Uso de operadores y construcciones de


toma de decisiones
Objetivos

has
r)

a
om
c
oo e
Identicar los operadores relacionales y condicionales. id
yah u
@
G
Crear construcciones con if e if/else.no
a dent
de Stu
Usar la construccin switch. gal
_ this
avousar operadores en las expresiones del
se
En este mdulo se explica t
gus cmo uexpresiones en construcciones de toma
(
o
cdigo y la forma de utilizar tesas
no nse
a
de decisiones.
lde lice
a
o G rable
eric nsfe
Fed -tra
o
tav a non
s
Gu
El estudio de este mdulo le proporcionar los conocimientos necesarios
para:

6-1
Copyright 2008 Sun Microsystems, Inc. Todos los derechos reservados. Sun Services, Revisin E.1

Fundacin Proydesa
Comprobacin de los progresos

Comprobacin de los progresos


Unauthorized reproduction or distribution prohibited Copyright 2014, Oracle and/or its affiliates

Introduzca un nmero del 1 al 5 en la columna Principio del mdulo a


n de evaluar su capacidad para cumplir cada uno de los objetivos
propuestos. Al nalizar el mdulo, vuelva a evaluar sus capacidades y
determine la mejora de conocimientos conseguida por cada objetivo.

Objetivo del mdulo

Evaluacin
(1 = No puedo cumplir
este objetivo,
Mejora de
5 = He podido cumplir
conocimientos
el objetivo)
(Final
Principio
Final del Principio)

a
om
c
Identicar los operadores
oo e
relacionales y condicionales.
yah uid
@
G
Crear construcciones con if e
ano dent
if/else.
e
ald s Stu
g
Usar la construccin switch.
vo_ e thi
a s
ust ayudar a los Servicios de Formacin Sun
u
El resultado de esta evaluacin to
o (g se de su formacin. Por favor, indique una
(SES) a determinarn efectividad
a la
lde licen
escasa mejora de conocimientos (un 0 o un 1 en la columna de la derecha) si
a
quiere que el able considere la necesidad de presentar ms material de
o G rprofesor
apoyo durante
eric nsfe las clases. Asimismo, esta informacin se enviar al grupo
ed detra
elaboracin de cursos de SES para revisar el temario de este curso.
F
vo nona
ust a
G

has
r)

del mdulo mdulo

6-2

Programacin Java para no Programadores


Copyright 2008 Sun Microsystems, Inc. Todos los derechos reservados. Sun Services, Revisin E.1

Fundacin Proydesa
Aspectos relevantes

Unauthorized reproduction or distribution prohibited Copyright 2014, Oracle and/or its affiliates

Aspectos relevantes

!
?

Discusin Las preguntas siguientes son relevantes para comprender en


qu consiste el uso de operadores y construcciones de toma de decisiones:

Cuando necesita tomar una decisin que presenta varias alternativas,


cul es la razn que le lleva a elegir una alternativa frente a las
dems?

Por ejemplo, qu consideraciones le vienen a la mente cuando va a


adquirir un artculo?

has
r)

m
co
hoo ide
a
@y t Gu
ano den
e
ald s Stu
g
vo_ e thi
a
ust o us
o (g se t
n
dea licen
l
Ga ble
rico sfera
e
Fed -tran
o
tav a non
s
Gu

Uso de operadores y construcciones de toma de decisiones


Copyright 2008 Sun Microsystems, Inc. Todos los derechos reservados. Sun Services, Revisin E.1

6-3

Fundacin Proydesa
Otros recursos

Otros recursos
Unauthorized reproduction or distribution prohibited Copyright 2014, Oracle and/or its affiliates

Otros recursos El documento siguiente proporciona informacin


complementaria sobre los temas tratados en este mdulo:

Tutorial de Java. [En la web]. Disponible en:


http://java.sun.com/docs/books/tutorial/
Una gua prctica para programadores con cientos de ejemplos y
ejercicios completos.

has
r)

m
co
hoo ide
a
@y t Gu
ano den
e
ald s Stu
g
vo_ e thi
a
ust o us
o (g se t
n
dea licen
l
Ga ble
rico sfera
e
Fed -tran
o
tav a non
s
Gu

6-4

Programacin Java para no Programadores


Copyright 2008 Sun Microsystems, Inc. Todos los derechos reservados. Sun Services, Revisin E.1

Fundacin Proydesa
Uso de operadores relacionales y condicionales

Unauthorized reproduction or distribution prohibited Copyright 2014, Oracle and/or its affiliates

Uso de operadores relacionales y condicionales


Una de las tareas que suelen realizar los programas es evaluar una
condicin y, en funcin del resultado, ejecutar diferentes bloques o
ramales de cdigo. Por ejemplo, su programa podra comprobar si el
valor de una variable es igual que el valor de otra variable y, en caso
armativo, realizar una accin. En la gura siguiente se ilustra un tipo de
decisin que las personas toman cada da.
Si hay un cruce,
girar a la izquierda
o a la derecha?

m
co
hoo ide
a
@y t Gu
ano den
e
ald s Stu
g
vo_ e thi
a
ust o us
o (g se t
n
dea licen
l
Ga ble
rico sfera
e n
a
Fed -trFigura 6-1 Construcciones de toma de decisiones en conduccin
vo non
a
ust a
G
Adems de los operadores aritmticos, como los de suma (+) e
TM

has
r)

incremento (++), el lenguaje Java proporciona diferentes operadores


relacionales y condicionales que incluyen < y > para expresar los
conceptos menor que y mayor que, y && para expresar unin (AND).
Estos operadores se utilizan cuando se quiere que los programas ejecuten
diferentes boques o partes del cdigo en funcin de distintas condiciones
como, por ejemplo, comprobar si el valor de dos variables es el mismo.
Nota Cada uno de estos operadores se utiliza en el contexto de
una construccin de toma de decisiones del tipo if o if/else.
Estas construcciones se explican ms adelante en el mdulo.

Uso de operadores y construcciones de toma de decisiones


Copyright 2008 Sun Microsystems, Inc. Todos los derechos reservados. Sun Services, Revisin E.1

6-5

Fundacin Proydesa
Uso de operadores relacionales y condicionales

Unauthorized reproduction or distribution prohibited Copyright 2014, Oracle and/or its affiliates

Ejemplo de un ascensor
Adems de los ejemplos pertenecientes al caso de DirectClothing, Inc., en
este curso se utilizan diferentes variantes de la clase Elevator (Ascensor)
para explicar algunos conceptos del lenguaje Java. El ejemplo de cdigo
siguiente contiene una de esas variantes de la clase Elevator.
Cdigo 6-1

Archivo Elevator.java situado en el directorio opsdec

1
public class Elevator {
2
3
public boolean doorOpen=false; // Puertas cerradas de forma
predeterminada
4
public int currentFloor = 1; // Todos los ascensores empiezan en el
primer piso
5
public final int TOP_FLOOR = 10;
6
public final int MIN_FLOORS = 1;
7
8
public void openDoor() {
9
System.out.println(Se est abriendo la puerta.);
10
doorOpen = true;
11
System.out.println(La puerta est abierta.);
12
}
13
14
public void closeDoor() {
15
System.out.println(Se est cerrando la puerta.);
16
doorOpen = false;
17
System.out.println(La puerta est cerrada.);
18
}
19
20
public void goUp() {
21
System.out.println(Subiendo una planta.);
22
currentFloor++;
23
System.out.println(Piso: + currentFloor);
24
}
25
26
public void goDown() {
27
System.out.println(Bajando una planta.);
28
currentFloor--;
29
System.out.println(Piso: + currentFloor);
30
}
31
32
33 }

has
r)

m
co
hoo ide
a
@y t Gu
ano den
e
ald s Stu
g
vo_ e thi
a
ust o us
o (g se t
n
dea licen
l
Ga ble
rico sfera
e
Fed -tran
o
tav a non
s
Gu

6-6

Programacin Java para no Programadores


Copyright 2008 Sun Microsystems, Inc. Todos los derechos reservados. Sun Services, Revisin E.1

Fundacin Proydesa
Uso de operadores relacionales y condicionales
Un ascensor tiene muchas funciones. Las funciones que se citan en este
curso son:

Unauthorized reproduction or distribution prohibited Copyright 2014, Oracle and/or its affiliates

Las puertas del ascensor pueden abrirse (mtodo openDoor desde la


lnea 8 a la 12).

Las puertas del ascensor pueden cerrarse (mtodo closeDoor desde


la lnea 14 a la 18).

El ascensor puede ascender un piso (mtodo goUp desde la lnea 20 a


la 24).

El ascensor puede descender un piso (mtodo goDown desde la


lnea 26 a la 30).

A lo largo de este mdulo y los mdulos sucesivos tendr ocasin de ver


diferentes variaciones de esta clase Elevator, en algunas de las cuales se
ilustra el uso de construcciones de toma de decisiones.

has
r)

a
om
c
Una clase de prueba similar a la siguiente somete el cdigo o ascensor a
o del e
yah uid
diferentes comprobaciones.
@
n G
ano deen tel directorio
e
Cdigo 6-2
Archivo ElevatorTest.java situado
ald s Stu
opsdec
g
vo_ e thi
1
public class ElevatorTest { sta
s
(gu e to u
o s
2
public static void n
a main(String args[]) {
lde licen
3
a le
4
ElevatorG
o myElevator = new Elevator();
ric sferab
5
e
6
myElevator.openDoor();
Fed -tran
a o myElevator.closeDoor();
t7 v a non
s
myElevator.goDown();
Gu 8
9
myElevator.goUp();
10
11
12
13
14
15
16
17
18
19

myElevator.goUp();
myElevator.goUp();
myElevator.openDoor();
myElevator.closeDoor();
myElevator.goDown();
myElevator.openDoor();
myElevator.goDown();
myElevator.openDoor();
}
}

Uso de operadores y construcciones de toma de decisiones


Copyright 2008 Sun Microsystems, Inc. Todos los derechos reservados. Sun Services, Revisin E.1

6-7

Fundacin Proydesa
Uso de operadores relacionales y condicionales

Operadores relacionales

Unauthorized reproduction or distribution prohibited Copyright 2014, Oracle and/or its affiliates

Los operadores relacionales comparan dos valores para determinar su


relacin.
En la tabla siguiente guran las distintas condiciones que pueden
comprobarse utilizando este tipo de operadores.
Tabla 6-1 Operadores relacionales
Condicin

Operador

Ejemplo

Es igual que (o es lo mismo que)

==

int i=1;
(i == 1)

No es igual que (o no es lo mismo que)

!=

int i=2;
(i != 1)

m
co
Es menor que
<
int i=0;
hoo ide
a <
@y (iGu1)
t
ano denint i=1;
Es menor o igual que
<=
e tu
d
(i <= 1)
gal is S
_ th
o
Es mayor que
int i=2;
tav use >
us o
(i > 1)
o (g se t
n
Es mayor o igual que
>=
int i=1;
dea licen
l
(i >= 1)
Ga ble
rico sfera
e n de todos
es
Fed Eltresultadobooleanoslos operadores relacionales Porun valor boolean.
o onLos a
- r valores
pueden ser true o false.
ejemplo, todos los
tav a n ejemplos de la tabla anterior dan como resultado el valor true.
s
Gu

Nota El signo igual (=) se utiliza para realizar asignaciones.

6-8

Programacin Java para no Programadores


Copyright 2008 Sun Microsystems, Inc. Todos los derechos reservados. Sun Services, Revisin E.1

has
r)

Fundacin Proydesa
Uso de operadores relacionales y condicionales

Unauthorized reproduction or distribution prohibited Copyright 2014, Oracle and/or its affiliates

Comprobacin de la igualdad entre dos secuencias de


caracteres
Si se utiliza el operador == para comparar diferentes referencias a objetos
String, el operador comprueba si la direccin contenida en dichas
referencias es la misma, no su contenido.
Discusin Son iguales todas las referencias a objetos String siguientes?

String helloString1 = (hola);


String helloString2 = hola;
String helloString3 = new String(hola);

has
r)

Si quiere vericar la equivalencia entre secuencias de caracteres, por


ejemplo, para averiguar si el nombre Fred Smith es igual que Joseph
Smith utilice el mtodo equals de la clase String. La clase siguiente
contiene dos nombres de empleados y un mtodo para compararlos.

a
om
c
oo e
yah uid
@
G
Cdigo 6-3
Archivo Employees.java situado en el directorio opsdec
ano dent
e
1
public class Employees {
ald s Stu
g
2
vo_ e thi
3
public String name1 = Fred sta
Smith;
gu to us
4
public String name2 = Joseph Smith;
(
no nse
5
a
6
public void areNamesEqual() {
lde lice
a
7
o G rable
8
if eric
(name1.equals(name2)) {
e
dSystem.out.println(Mismo nombre.);
9
e transf
F} 10vo
a
on
st11 a nelse {
Gu 12
System.out.println(Nombre distinto.);
13
14
15
16

}
}
}

Uso de operadores y construcciones de toma de decisiones


Copyright 2008 Sun Microsystems, Inc. Todos los derechos reservados. Sun Services, Revisin E.1

6-9

Fundacin Proydesa
Uso de operadores relacionales y condicionales

Operadores condicionales

Unauthorized reproduction or distribution prohibited Copyright 2014, Oracle and/or its affiliates

Tambin necesitar tener la posibilidad de tomar una sola decisin en


funcin de varias condiciones. En tales circunstancias, puede utilizar los
operadores condicionales para evaluar condiciones complejas como un
todo.
En la tabla siguiente guran los operadores condicionales comunes del
lenguaje Java.
Tabla 6-2 Operadores condicionales comunes
Operacin

Operador

Ejemplo

Si una condicin Y otra


condicin

&&

int i = 2;
int j = 8;
((i < 1) && (j > 6))

a
om
c
oo e
Si una condicin U otra
||
int i = yah
2;
id
condicin
int o@ 8; Gu
j =
an d nt
e((i <u1)e|| (j > 10))
d St
gal iint i = 2;
NO
!
_
s
avo se th (!(i < 3))
t
gus to u
( e
noejemplos de la tabla anterior dan como resultado el
s
Por ejemplo todos los
dea licen
l
valor booleano false.
Ga ble
rico sferQu operadores relacionales y condicionales se reflejan en el
e n a
Discusin
a
Fed prrafo siguiente?
! o on-tr
v n
? a
ust a
G
Si el juguete es rojo, lo comprar. Sin embargo, si el juguete es amarillo y

has
r)

cuesta menos que uno rojo, tambin lo adquirir. Si el juguete es amarillo y


cuesta lo mismo o ms que otro artculo rojo, no lo comprar. Por ltimo,
si el juguete es verde, no lo comprar.

6-10

Programacin Java para no Programadores


Copyright 2008 Sun Microsystems, Inc. Todos los derechos reservados. Sun Services, Revisin E.1

Fundacin Proydesa
Creacin de construcciones if e if/else

Unauthorized reproduction or distribution prohibited Copyright 2014, Oracle and/or its affiliates

Creacin de construcciones if e if/else


Una sentencia o construccin if es aquella que ejecuta un bloque de
cdigo si una expresin es true.

Construccin if
Existen diferentes variantes de la construccin if bsica. No obstante, la
ms sencilla es:
if (expresin_booleana) {
bloque_cdigo;
} // fin de la construccin if

has
r)

a
om
c
oo e
Donde:
yah uid
@ tG
La expresin_booleana es una combinacin den
ano de operadores
e
relacionales, operadores condicionales yStu
ald s valores que da como
g
resultado el valor true o false. hi
vo_ e t
a
bloque_cdigo representa uslneas de cdigo que se ejecutan si (if)
ust o las
la expresin es true. t
o (g se
ean i
dlugar secen la expresin_booleana. Si la expresin es
l
En primer
Ga ble l evala
rico sfse programa salta directamentelaa expresin_booleana del bloque
e ejecuta
e true, el ra bloque_cdigo. Si la llave que marca el n no es
true,
a cdigo de la construccin if.
Fed -trden
vo non
a
ust a
La clase ElevatorTest comprueba un objeto Elevator efectuando
G
// el programa contina aqu

llamadas a sus mtodos. Uno de los primeros mtodos a los que llama la
clase ElevatorTest es goDown.

Uso de operadores y construcciones de toma de decisiones


Copyright 2008 Sun Microsystems, Inc. Todos los derechos reservados. Sun Services, Revisin E.1

6-11

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2014, Oracle and/or its affiliates

Creacin de construcciones if e if/else


Llamar al mtodo goDown antes de que el ascensor haya comenzado a
subir genera un problema porque el ascensor empieza en el primer piso y
no hay otros pisos por debajo (la constante MIN_FLOORS indica que el
primer piso es la planta baja). Cuando se ejecuta, la clase ElevatorTest
muestra lo siguiente (en la versin inglesa):
Opening door.
Door is open.
Closing door.
Door is closed.
Going down one floor.
Floor: 0 <--- esto es un error en la lgica
Going up one floor.
Floor: 1
Going up one floor.
Floor: 2
...

a
om
c
oogoDown

Dos sentencias if pueden solucionar este problema. El mtodo


ide
yahel ascensor
siguiente contiene dos construcciones if que determinan si Gu
@
debera descender o mostrar un error.
ano dent
e
ald s Stu
g
Cdigo 6-4
Archivo IfElevator.java situado en el directorio opsdec
vo_ e thi
a
1
ust o us
(g e t
2
public class IfElevator { o
n
s
3
dea licen // Puertas cerradas de forma
l
4
public boolean doorOpen=false;
Ga ble
predeterminada ico
er nsfera
5
public int currentFloor = 1; // Todos los ascensores empiezan en el
ed tra
primero F
piso
6 tavpublic n
o final int TOP_FLOOR = 10;
s public final int MIN_FLOORS = 1;
an
7
Gu

has
r)

8
9
10
11
12
13

public void openDoor() {


System.out.println(Se est abriendo la puerta.);
doorOpen = true;
System.out.println(La puerta est abierta.);
}

14
15
16
17
18

public void closeDoor() {


System.out.println(Se est cerrando la puerta.);
doorOpen = false;
System.out.println(La puerta est cerrada.);
}

6-12

Programacin Java para no Programadores


Copyright 2008 Sun Microsystems, Inc. Todos los derechos reservados. Sun Services, Revisin E.1

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2014, Oracle and/or its affiliates

Creacin de construcciones if e if/else


19
20
21
22
23

public void goUp() {


System.out.println(Subiendo una planta.);
currentFloor++;
System.out.println(Piso: + currentFloor);
}

24
25
26
27
28

public void goDown() {

29
30
31
32
33
34

if (currentFloor == MIN_FLOORS) {
System.out.println(Imposible bajar);
}
if (currentFloor > MIN_FLOORS) {
System.out.println(Bajando una planta.);
currentFloor--;
System.out.println(Piso: + currentFloor);
}

has
r)

a
om
c
}
oo e
yah uid
@
G
ano dent
35 }
e
ald s Stu
g
Si el valor de la variable currentFloorhi igual que el de la constante
vo_ e t es
a
MIN_FLOORS, aparecer entla pantalla un mensaje de error y el ascensor no
us a lao us el valor de la variable currentFloor
descender (lneas deg 26 t 28). Si
o ( la se
nde la constante MIN_FLOORS, el ascensor baja (lneas de la
es mayor quea
e el icen
29 a la ald
32).
l
o G rable
Cuando
eric nsfese ejecuta, la clase IfElevatorTest muestra lo siguiente (en la
a
Fed -trversin inglesa):
vo non
a
Opening door.
ust a
G
Door is open.
Closing door.
Door is closed.
Cannot Go down <--- la lgica del ascensor evita el
problema
Going up one floor.
Floor: 2
Going up one floor.
Floor: 3
...

Uso de operadores y construcciones de toma de decisiones


Copyright 2008 Sun Microsystems, Inc. Todos los derechos reservados. Sun Services, Revisin E.1

6-13

Fundacin Proydesa
Creacin de construcciones if e if/else

Unauthorized reproduction or distribution prohibited Copyright 2014, Oracle and/or its affiliates

Sentencias if anidadas
En ocasiones, puede ser necesario ejecutar una sentencia if como parte de
otra sentencia if. En el ejemplo siguiente se muestra cmo usar sentencias
if anidadas para comprobar los valores de dos variables.
Cdigo 6-5

Archivo NestedIfElevator.java situado en el directorio


opsdec

1
2
public class NestedIfElevator {
3
4
public boolean doorOpen=false; // Puertas cerradas de forma
predeterminada
5
public int currentFloor = 1; // Todos los ascensores empiezan en el
primer piso
6
public final int TOP_FLOOR = 10;
7
public final int MIN_FLOORS = 1;
8
9
public void openDoor() {
10
System.out.println(Se est abriendo la puerta.);
11
doorOpen = true;
12
System.out.println(La puerta est abierta.);
13
}
14
15
public void closeDoor() {
16
System.out.println(Se est cerrando la puerta.);
17
doorOpen = false;
18
System.out.println(La puerta est cerrada.);
19
}
20
21
public void goUp() {
22
System.out.println(Subiendo una planta.);
23
currentFloor++;
24
System.out.println(Piso: + currentFloor);
25
}
26
27
public void goDown() {
28
29
if (currentFloor == MIN_FLOORS) {
30
System.out.println(Imposible bajar);
31
}
32
33
if (currentFloor > MIN_FLOORS) {
34
35
if (!doorOpen) {
36

has
r)

m
co
hoo ide
a
@y t Gu
ano den
e
ald s Stu
g
vo_ e thi
a
ust o us
o (g se t
n
dea licen
l
Ga ble
rico sfera
e
Fed -tran
o
tav a non
s
Gu

6-14

Programacin Java para no Programadores


Copyright 2008 Sun Microsystems, Inc. Todos los derechos reservados. Sun Services, Revisin E.1

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2014, Oracle and/or its affiliates

Creacin de construcciones if e if/else


37
38
39
40
41
42
43
44
45
46

System.out.println(Bajando una planta.);


currentFloor--;
System.out.println(Piso: + currentFloor);
}
}
}

Si el valor de la variable currentFloor es igual que el de la constante


MIN_FLOORS, aparecer en la pantalla un mensaje de error y el ascensor no
descender (lneas de la 29 a la 31). Si el valor de la variable currentFloor
es mayor que el de la constante MIN_FLOORS y las puertas estn cerradas,
el ascensor baja (lneas de la 33 a la 40).

has
r)

a
om
c
oofrecuencia
Nota No utilice las construcciones if/else con demasiada de
yah ui
porque pueden ser complicadas de depurar.
@
G
ano dent
e
ald s Stu
g
vo_ e thi
a
Construccin if/else t
us o us
o (g se t
an que se
A menudo e
dsucedeicen quiere ejecutar un bloque de cdigo si la
l
Ga ble l
expresin es true y otro bloque de cdigo cuando la expresin es false.
r
Para
rico sestosa puede utilizar una construccin if para ejecutar un
f de casos,
de bloquee cdigo si la expresin es true junto con una construccin else
e
an
o F on-trque slo se ejecute en caso de que la expresin sea false. La sintaxis de
v
las construcciones if/else es como sigue:
sta a n
Gu
if (expresin_booleana) {
bloque_cdigo1;
} // fin de la construccin if
else {
bloque_cdigo2;
} // fin de la construccin else
// el programa contina aqu

Uso de operadores y construcciones de toma de decisiones


Copyright 2008 Sun Microsystems, Inc. Todos los derechos reservados. Sun Services, Revisin E.1

6-15

Fundacin Proydesa
Creacin de construcciones if e if/else
Donde:

Unauthorized reproduction or distribution prohibited Copyright 2014, Oracle and/or its affiliates

expresin_booleana es una combinacin de operadores


relacionales, operadores condicionales y valores que dan como
resultado el valor true o false.

bloque_cdigo1 representa las lneas de cdigo que se ejecutan si


la expresin es true y bloque_cdigo2 representa las lneas de
cdigo que se ejecutan si la expresin es false.

Puede utilizar una sentencia if/else para corregir el problema del


ascensor que se dirige a una planta no vlida. El mtodo goDown siguiente
contiene una construccin if que determina si el ascensor debera
descender o mostrar un error.
Cdigo 6-6

Archivo IfElseElevator.java situado en el directorio


opsdec

a
om
c
1
public class IfElseElevator {
oo e
2
yah uid
@
3
public boolean doorOpen=false; // Puertas cerradas de forma
G
ano dent
predeterminada
e
4
public int currentFloor = 1; // Todos los lascensores empiezan en el
a d s Stu
g
primer piso
vo_ e thi
5
public final int TOP_FLOOR = 10; a
st
gu1; to us
6
public final int MIN_FLOORS =
(
no nse
7
a
8
public void openDoor() { lice
lde
Ga
9
System.out.println(Se est abriendo la puerta.);
otrue; able
i=
r
10
doorOpenc
der ansfe
e
11
System.out.println(La puerta est abierta.);
o F on-tr
12 v}
a
ust a n
G 13 public void closeDoor() {

has
r)

14
15
16
17
18
19
20
21
22
23
24
25
26

6-16

System.out.println(Se est cerrando la puerta.);


doorOpen = false;
System.out.println(Door is closed.);
}
public void goUp() {
System.out.println(Subiendo una planta.);
currentFloor++;
System.out.println(Piso: + currentFloor);
}
public void goDown() {

Programacin Java para no Programadores


Copyright 2008 Sun Microsystems, Inc. Todos los derechos reservados. Sun Services, Revisin E.1

Fundacin Proydesa
Creacin de construcciones if e if/else

Unauthorized reproduction or distribution prohibited Copyright 2014, Oracle and/or its affiliates

27
28
29

if (currentFloor == MIN_FLOORS) {
System.out.println(Imposible bajar);
}

30
31
32
33
34
35
36

else {
System.out.println(Bajando una planta.);
currentFloor--;
System.out.println(Piso: + currentFloor);
}
}
}
Si el valor de la variable currentFloor es igual que el de la constante
MIN_FLOORS, aparecer en la pantalla un mensaje de error y el ascensor no
descender (lneas de la 27 a la 30). En caso contrario (else), se considerar
que el valor de currentFloor es mayor que el de la constante MIN_FLOORS
y el ascensor bajar de planta (lneas de la 31 a la 34). Cuando se ejecuta,
la clase IfElseElevatorTest muestra lo siguiente (en la versin inglesa):

has
r)

m
co
hoo ide
a
Opening door.
@y t Gu
Door is open.
ano den
e
Closing door.
ald s Stu
g
Door is closed.
vo_ e thidel ascensor evita el
Cannot Go down <--- la lgica
a
ust o us
(g e t problema
Going upno floor.
one
s
Floor: 2
dea licen
l
Going up
Ga bleone floor.
Floor:
rico sfera 3
de an ...
e
o F on-tr
v
sta a n
Gu

Uso de operadores y construcciones de toma de decisiones


Copyright 2008 Sun Microsystems, Inc. Todos los derechos reservados. Sun Services, Revisin E.1

6-17

Fundacin Proydesa
Creacin de construcciones if e if/else

Construcciones if/else encadenadas

Unauthorized reproduction or distribution prohibited Copyright 2014, Oracle and/or its affiliates

Es posible encadenar varias construcciones if y else para evaluar


sucesivas expresiones que den lugar a diferentes salidas en funcin
del resultado. La sintaxis de las construcciones if/else encadenadas es
como sigue:
if (expresin_booleana) {
bloque_cdigo1;
} // fin de la construccin if
else if (expresin_booleana) {

a
om
c
oo e
} // fin de la construccin else if
yah uid
@
G
ano dent
else {
e
ald s Stu
bloque_cdigo3;
g
}
vo_ e thi
a
// el programa contina aqu
ust o us
o (g se t
n
Donde:
dea licen
l
Ga ble
expresin_booleana es una combinacin de operadores
rico sfera operadores condicionales y valores que da como
de arelacionales, valor true o false.
n
resultado el
e
o F on-tr bloque_cdigo1 representa las lneas de cdigo que se ejecutan si la
v
sta a n
expresin es true. bloque_cdigo2 representa las lneas de cdigo
Gu

has
r)

bloque_cdigo2;

que se ejecutan si la expresin es false y la condicin del segundo


if es true. bloque_cdigo3 representa las lneas de cdigo que se
ejecutan si la expresin del segundo if tambin se evala como
false.

6-18

Programacin Java para no Programadores


Copyright 2008 Sun Microsystems, Inc. Todos los derechos reservados. Sun Services, Revisin E.1

Fundacin Proydesa
Creacin de construcciones if e if/else
A continuacin se muestra una clase IfElseDate con varias construcciones
if/else encadenadas que determinan cuntos das tiene un mes.

Unauthorized reproduction or distribution prohibited Copyright 2014, Oracle and/or its affiliates

Cdigo 6-7
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27

Archivo IfElseDate.java situado en el directorio opsdec

public class IfElseDate {


public int month = 10;
public void calculateNumDays() {
if (month == 1 || month == 3 || month == 5 || month == 7 ||
month == 8 || month == 10 || month == 12) {

has
r)

a
om
c
oo e
else if (month == 2) {
yah uid
System.out.println(Ese mes tiene 28 das.);
@
G
}
ano dent
de
almonthStu9 || month == 11) {
else if (month == 4 || month == 6 g
o_ || this ==
System.out.println(Ese stav
mes tiene 30 das.);
e
}
gu to us
(
no nse
a
else {
lde lice
a
System.out.println(Mes no vlido);
o G rable
} ric
e nsfe
}ed
a
}F
vo non-tr
a
ust a
G
System.out.println(Ese mes tiene 31 das.);

El mtodo calculateNumDays encadena tres sentencias if/else para


determinar el nmero de das que tiene un mes. Aunque el cdigo es
sintcticamente correcto, el encadenamiento de sentencias if/else puede
dar como resultado un cdigo algo confuso y debera evitarse.

Uso de operadores y construcciones de toma de decisiones


Copyright 2008 Sun Microsystems, Inc. Todos los derechos reservados. Sun Services, Revisin E.1

6-19

Fundacin Proydesa
Uso de la construccin switch

Uso de la construccin switch


Unauthorized reproduction or distribution prohibited Copyright 2014, Oracle and/or its affiliates

Otra palabra clave utilizada para tomar decisiones en el programa


es switch. La construccin switch ayuda a evitar confusiones en la
programacin porque simplica la organizacin de los distintos bloques
de cdigo que pueden ejecutarse.
El ejemplo de la clase IfElseDate podra escribirse utilizando una
construccin switch. La sintaxis de la construccin switch es:
switch (variable) {
case valor_literal:

has
r)

bloque_cdigo;

a
om
c
oo e
bloque_cdigo;
yah uid
@
G
[break;]
ano dent
e
[default:]
ald s Stu
g i
bloque_cdigo; vo_
th
sta use
}
u
o (g se to
n
Donde:
dea licen
al le
LaG
palabra clave switch indica una sentencia switch.
rico sferab la variable cuyo valor se quiere vericar. La variable
e variable es
n
Fed -traslo puede ser de los tipos char, byte, short o int.
o on
v
La palabra clave case indica un valor que se est comprobando.
sta a n
Gu
La combinacin de la palabra case y un valor_literal se conoce
[break;]

case otro_valor_literal:

como etiqueta case.

6-20

El valor_literal es cualquier valor vlido que pueda contener una


variable. Es posible tener una etiqueta case por cada valor que se
quiera evaluar. Los valores literales no pueden ser ni variables,
ni expresiones ni llamadas a mtodos. S pueden ser constantes
(variables nales como MAX_NUMBER, denida anteriormente),
literales (como A o 10) o ambas cosas.
La sentencia [break;] es una palabra clave opcional que provoca la
salida inmediata de la sentencia switch durante la ejecucin. Sin esta
sentencia, se ejecutarn todas las sentencias de bloque_cdigo que
sigan a la sentencia case aceptada (hasta llegar a una sentencia break
o al nal de la construccin switch).

Programacin Java para no Programadores


Copyright 2008 Sun Microsystems, Inc. Todos los derechos reservados. Sun Services, Revisin E.1

Fundacin Proydesa
Uso de la construccin switch

Unauthorized reproduction or distribution prohibited Copyright 2014, Oracle and/or its affiliates

La palabra clave default indica un bloque_cdigo predeterminado


que se ejecuta si no se cumple ninguna de las otras condiciones.
La etiqueta default es similar a la construccin else de las
sentencias if/else. La palabra clave default es opcional.

El ejemplo siguiente contiene una clase SwitchDate que utiliza una


construccin switch para determinar cuntos das tiene un mes.
Cdigo 6-8
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33

Archivo SwitchDate.java situado en el directorio opsdec

public class SwitchDate {


public int month = 10;
public void calculateNumDays() {

has
r)

m
co
switch(month) {
hoo ide
case 1:
a
@y t Gu
case 3:
ano den
case 5:
e
case 7:
ald s Stu
g
case 8:
vo_ e thi
a
case 10:
ust o us
case 12:
o (g smest tiene 31 das.);
n
System.out.println(Ese e
dea licen
break;
al le
case 2: G
rico sferab
System.out.println(Ese mes tiene 28 das.);
e n
a
Fedbreak;
vo ncase tr
n- 4:
a
o
ust a case 6:
G
case 9:
case 11:
System.out.println(Ese mes tiene 30 das.);
break;
default:
System.out.println(Mes no vlido);
break;
}
}
}

Uso de operadores y construcciones de toma de decisiones


Copyright 2008 Sun Microsystems, Inc. Todos los derechos reservados. Sun Services, Revisin E.1

6-21

Fundacin Proydesa
Uso de la construccin switch

Unauthorized reproduction or distribution prohibited Copyright 2014, Oracle and/or its affiliates

El mtodo calculateNumDays de la clase SwitchDate utiliza una


sentencia switch para bifurcar el cdigo en funcin del valor de la
variable month (lnea 8). Si la variable month es igual a 1, 3, 5, 7, 8 o 10,
el cdigo salta hasta la etiqueta case adecuada y desciende para ejecutar la
lnea 16.

Cundo usar construcciones switch


La construccin switch slo se utiliza para vericar igualdades, no para
comprobar si los valores son mayores o menores que otro valor. No es
posible usar switch para realizar comprobaciones con respecto a varios
valores y slo puede utilizarse con tipos enteros.

has
La construccin switch puede considerarse como una opcin vlida para: r)
a
Pruebas de igualdad
om
c
oo e
Pruebas con respecto a un solo valor, como customerStatus
h d
yabyteuichar
@
Pruebas con respecto al valor de un tipo int, short, t G o
ano den
e
ald s Stu
g
Nota Es posible anidar otras construcciones, como if/else, dentro de
vo_ e thi
a
las sentencias switch.
ust o us
o (g se t
n
dea licen
l
Ga ble
rico sfera
e
Fed -tran
o
tav a non
s
Gu

6-22

Programacin Java para no Programadores


Copyright 2008 Sun Microsystems, Inc. Todos los derechos reservados. Sun Services, Revisin E.1

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2014, Oracle and/or its affiliates

Mdulo 7

Uso de construcciones en bucle


Objetivos

has
r)

El estudio de este mdulo le proporcionar los conocimientos necesarios


para:

a
om
c
Crear bucles while.
oo e
Desarrollar bucles for.
yah uid
@
G
Crear bucles do/while.
ano dent
e
aldtiposStu
g
En este mdulo se explican los distintos is de construcciones en bucle
vo_ e th de sentencias de programacin
que controlan la repeticintde un conjunto
s a us
en lenguaje Java. (gu
o
no nse t
a
lde lice
a
o G rable
eric nsfe
Fed -tra
o
tav a non
s
Gu

7-1
Copyright 2008 Sun Microsystems, Inc. Todos los derechos reservados. Sun Services, Revisin E.1

Fundacin Proydesa
Comprobacin de los progresos

Comprobacin de los progresos


Unauthorized reproduction or distribution prohibited Copyright 2014, Oracle and/or its affiliates

Introduzca un nmero del 1 al 5 en la columna Principio del mdulo a


n de evaluar su capacidad para cumplir cada uno de los objetivos
propuestos. Al nalizar el mdulo, vuelva a evaluar sus capacidades y
determine la mejora de conocimientos conseguida por cada objetivo.

Objetivos del mdulo

Evaluacin
(1 = No puedo cumplir
este objetivo,
5 = Puedo cumplir este
objetivo)
Principio del Final del
mdulo
mdulo

Mejora de
conocimientos
(Final
Principio)

a
om
c
Crear bucles while.
oo e
Desarrollar bucles for.
yah uid
@
G
Crear bucles do/while.
ano dent
e
ald s Stu
g
El resultado de esta evaluacin ayudar a los i
vo_ e thServicios de Formacin Sun
a
(SES) a determinar la efectividad de usformacin. Por favor, indique una
ust (un 0su un 1 en la columna de la derecha) si
(g e
escasa mejora de conocimientos to o
oconsidere la necesidad de presentar ms material de
n ns
quiere que el profesor
e
deaclases. Asimismo, esta informacin se enviar al grupo
l
apoyo durante las lic
Ga dele de SES para revisar el temario de este curso.
de elaboracin b cursos
rico sfera
e
Fed -tran
o
tav a non
s
Gu

has
r)

7-2

Programacin Java para no Programadores


Copyright 2008 Sun Microsystems, Inc. Todos los derechos reservados. Sun Services, Revisin E.1

Fundacin Proydesa
Aspectos relevantes

Unauthorized reproduction or distribution prohibited Copyright 2014, Oracle and/or its affiliates

Aspectos relevantes

Discusin La pregunta siguiente es relevante para comprender los


conceptos sobre los bucles:

Cules son aquellas situaciones en que querra seguir realizando una


determinada accin mientras se d una cierta condicin?

has
r)

m
co
hoo ide
a
@y t Gu
ano den
e
ald s Stu
g
vo_ e thi
a
ust o us
o (g se t
n
dea licen
l
Ga ble
rico sfera
e
Fed -tran
o
tav a non
s
Gu

Uso de construcciones en bucle


Copyright 2008 Sun Microsystems, Inc. Todos los derechos reservados. Sun Services, Revisin E.1

7-3

Fundacin Proydesa
Creacin de bucles while

Creacin de bucles while


Unauthorized reproduction or distribution prohibited Copyright 2014, Oracle and/or its affiliates

Un bucle while repite la ejecucin (itera) de un bloque de cdigo


mientras una determinada expresin d como resultado el valor true.
La sintaxis del bucle while es como sigue:
while (expresin_booleana) {
bloque_cdigo;
} // fin de la construccin while
// el programa contina aqu
Todos los bucles tienen los siguientes componentes:

a
om
c
oo e
yah uid
@
G
bloque_cdigo representa las lneas de cdigo que nt ejecutan si la
ano de se
e
expresin_booleana es true.
ald s Stu
o_g th
vdel bloque ide cdigo de cero a muchas
a
El bucle while repite la ejecucin
ust o use se procesa antes que el cuerpo
veces. La parte de la expresin_booleana
o (g se t
del bucle y, si el primer resultado de la evaluacin es false, el cuerpo del
n
bucle no se procesa encen
dea li absoluto. Por ejemplo:
al
Gi=0;ble
int
rico sfer(i<5) {
e while a
Fed -tran System.out.println(Hola Toms);
o
tav a non } ++i
s
Gu

has
r)

expresin_booleana es una expresin que slo puede dar como


resultado true o false. Esta expresin se procesa antes de cada
iteracin del bucle.

En el ejemplo anterior, la frase Hola Toms aparece cinco veces.

7-4

Programacin Java para no Programadores


Copyright 2008 Sun Microsystems, Inc. Todos los derechos reservados. Sun Services, Revisin E.1

Fundacin Proydesa
Creacin de bucles while
El siguiente ejemplo de cdigo muestra un mtodo setFloor con un
bucle while que hace que el ascensor suba o baje.

Unauthorized reproduction or distribution prohibited Copyright 2014, Oracle and/or its affiliates

Cdigo 7-1

Archivo WhileElevator.java situado en el directorio


loops

1
2
public class WhileElevator {
3
4
public boolean doorOpen=false;
5
public int currentFloor = 1;
6
7
public final int TOP_FLOOR = 5;
8
public final int BOTTOM_FLOOR = 1;
9
10
public void openDoor() {
11
System.out.println(Se est abriendo la puerta.);
12
doorOpen = true;
13
System.out.println(La puerta est abierta.);
14
}
15
16
public void closeDoor() {
17
System.out.println(Se est cerrando la puerta.);
18
doorOpen = false;
19
System.out.println(La puerta est cerrada.);
20
}
21
22
public void goUp() {
23
System.out.println(Subiendo una planta.);
24
currentFloor++;
25
System.out.println(Piso: + currentFloor);
26
}
27
28
public void goDown() {
29
System.out.println(Bajando una planta.);
30
currentFloor--;
31
System.out.println(Piso: + currentFloor);
32
}
33
34
public void setFloor() {
35
36
// Normalmente pasara el valor de desiredFloor como argumento al
37
// mtodo setFloor, pero, como an no ha aprendido a
38
// hacer esta operacin, desiredFloor se define con un nmero
especfico (5)
39
// a continuacin.
40

has
r)

m
co
hoo ide
a
@y t Gu
ano den
e
ald s Stu
g
vo_ e thi
a
ust o us
o (g se t
n
dea licen
l
Ga ble
rico sfera
e
Fed -tran
o
tav a non
s
Gu

Uso de construcciones en bucle


Copyright 2008 Sun Microsystems, Inc. Todos los derechos reservados. Sun Services, Revisin E.1

7-5

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2014, Oracle and/or its affiliates

Creacin de bucles while


41
42
43
44
45
46
47
48
49
50
51
52
53

int desiredFloor = 5;
while (currentFloor != desiredFloor){
if (currentFloor < desiredFloor) {
goUp();
}
else {
goDown();
}
}
}

El mtodo setFloor de la clase Elevator utiliza un bucle while para


determinar si el ascensor se encuentra en el piso elegido (lneas de la 35
a la 50). Si el valor de currentFloor no es igual que el de la variable
desiredFloor, el ascensor continuar su recorrido hasta el piso elegido
(lnea 43).

a
om
c
oo e
yah uid
@
G
ano dent
e
Bucles while anidados
ald s Stu
g
vo_ e thi
a
Piense lo que necesitara para tdibujar s rectngulo como el que se
us o u un caracteres de uno en uno:
muestra a continuacin(introduciendo los
o g se t
n
@@@@@@@@@@
dea licen
l
@@@@@@@@@@ e
Ga bl
rico sfera
e @@@@@@@@@@
n
Fed Podra utilizar un bucle while para dibujar una la del rectngulo y
o on-tra
v
sta a n colocar ese bucle dentro de otro bucle para dibujar tres las. El segundo
Gu
bucle es un bucle anidado.

has
r)

7-6

Programacin Java para no Programadores


Copyright 2008 Sun Microsystems, Inc. Todos los derechos reservados. Sun Services, Revisin E.1

Fundacin Proydesa
Creacin de bucles while

Unauthorized reproduction or distribution prohibited Copyright 2014, Oracle and/or its affiliates

El siguiente ejemplo de cdigo imprime en la pantalla un rectngulo de


caracteres @ compuesto de 10 columnas y 3 las (3 las formadas por
10 caracteres @). La escritura de cada la se realiza mediante el bucle
interno. El bucle externo imprime el resultado de ese cdigo tres veces.
Cdigo 7-2
1

Archivo WhileRectangle.java situado en el directorio


loops

public class WhileRectangle {

2
3

public int height = 3;


public int width = 10;

public void displayRectangle() {

5
6

int colCount = 0;
int rowCount = 0;

has
r)

a
om
c
oo e
7
while (rowCount < height) {
yah uid
8
colCount=0;
@
G
ano dent
e
9
while (colCount < width) {
ald s Stu
g
10
System.out.print(@);
vo_ e thi
11
colCount++;
a
ust o us
12
}
o (g se t
n
13
System.out.println(); n
dea lice
l
14
rowCount++;
Ga ble
15
} rico
e nsfera
16
}
Fed -tra
17 o
}
tav a non
s
Gu
El segundo bucle (interno) escribe en la pantalla una la de caracteres @
hasta que se alcanza el valor de la variable que indica la anchura, width
(lneas de la 9 a la 12). El primer bucle (externo) comprueba si se ha
alcanzado el valor de la variable que indica la altura, height (lnea 7).
Si no se ha alcanzado la altura, se crea una la ms utilizando el bucle
interno. De lo contrario, el rectngulo estar completo.

Uso de construcciones en bucle


Copyright 2008 Sun Microsystems, Inc. Todos los derechos reservados. Sun Services, Revisin E.1

7-7

Fundacin Proydesa
Creacin de bucles while

Discusin Cmo modificara el cdigo del ejemplo anterior para


imprimir un rectngulo de 4 por 11?

Unauthorized reproduction or distribution prohibited Copyright 2014, Oracle and/or its affiliates

Como convertira el rectngulo en otro de 3 por 10 sin usar los nmeros


0, 1, 3 y 10?

has
r)

m
co
hoo ide
a
@y t Gu
ano den
e
ald s Stu
g
vo_ e thi
a
ust o us
o (g se t
n
dea licen
l
Ga ble
rico sfera
e
Fed -tran
o
tav a non
s
Gu

7-8

Programacin Java para no Programadores


Copyright 2008 Sun Microsystems, Inc. Todos los derechos reservados. Sun Services, Revisin E.1

Fundacin Proydesa
Desarrollo de un bucle for

Unauthorized reproduction or distribution prohibited Copyright 2014, Oracle and/or its affiliates

Desarrollo de un bucle for


El bucle for permite al programa repetir una secuencia de sentencias un
nmero predeterminado de veces. Este bucle funciona exactamente de la
misma manera que el bucle while, incluido el hecho de que repite la
ejecucin de cero a muchas veces, pero tiene una estructura ms pensada
para recorrer un rango de valores. La sintaxis del bucle for es como sigue:
for (inicializar[,inicializar]; expresin_booleana;
actualizar[,actualizar]) {
bloque_cdigo;
}

has
r)

a
om
c
La parte inicializar[,inicializar] de la construccin
oo e for
contiene sentencias que inicializan las variables (por ejemplo, los
yah uid
@
contadores del bucle) utilizadas a lo largo del bucle. G parte del
n Esta
ano dotratparte del bucle.
cdigo se procesa una vez, antes que ninguna e
e
ald s Stu
Las diferentes variables deben separarse mediante comas.
o_g thi
vuna expresin que slo puede dar como
expresin_booleanaa
es
e
ust o u expresin se procesa antes de cada
resultado true(o false. Esta s
g
iteracin del bucle.se
no n t
a
lde lice
La seccin actualizar[,actualizar] es donde se incrementa
a le
o
o G decrementa el valor de las variables (contadores del bucle).
ric sferab se procesa despus del cuerpo pero antes de cada
Esta seccin
ede tran vez que se repite la evaluacin de la expresin_booleana.
F
vo nonLas diferentes variables deben separarse mediante comas.
sta a
bloque_cdigo representa las lneas de cdigo que se ejecutan si la
Gu
Donde:

expresin_booleana es true.
El bucle for tambin repite la ejecucin del cdigo de cero a muchas
veces. La parte del bucle que contiene la expresin se procesa antes del
cuerpo del bucle y, si se evala inmediatamente como false, el cuerpo
del bucle no se procesa. Por ejemplo:
for (int i=0; i<5; i++) {
System.out.println(Hola Toms);
}
En el ejemplo anterior, el saludo Hola Toms aparece cinco veces.

Uso de construcciones en bucle


Copyright 2008 Sun Microsystems, Inc. Todos los derechos reservados. Sun Services, Revisin E.1

7-9

Fundacin Proydesa
Desarrollo de un bucle for
El ejemplo siguiente muestra un mtodo setFloor que contiene un bucle
for.

Unauthorized reproduction or distribution prohibited Copyright 2014, Oracle and/or its affiliates

Cdigo 7-3

Archivo ForElevator.java situado en el directorio loops

1
2
public class ForElevator {
3
4
public boolean doorOpen=false;
5
public int currentFloor = 1;
6
7
public final int TOP_FLOOR = 5;
8
public final int BOTTOM_FLOOR = 1;
9
10
public void openDoor() {
11
System.out.println(Se est abriendo la puerta.);
12
doorOpen = true;
13
System.out.println(La puerta est abierta.);
14
}
15
16
public void closeDoor() {
17
System.out.println(Se est cerrando la puerta.);
18
doorOpen = false;
19
System.out.println(La puerta est cerrada.);
20
}
21
22
public void goUp() {
23
System.out.println(Subiendo una planta.);
24
currentFloor++;
25
System.out.println(Piso: + currentFloor);
26
}
27
28
public void goDown() {
29
System.out.println(Bajando una planta.);
30
currentFloor--;
31
System.out.println(Piso: + currentFloor);
32
}
33
34
public void setFloor() {
35
36
// Normalmente pasara el valor de desiredFloor como argumento al
37
// mtodo setFloor. pero, como an no ha aprendido a
38
// hacer esta operacin, desiredFloor se define con un nmero
especfico (5)
39
// a continuacin.

has
r)

m
co
hoo ide
a
@y t Gu
ano den
e
ald s Stu
g
vo_ e thi
a
ust o us
o (g se t
n
dea licen
l
Ga ble
rico sfera
e
Fed -tran
o
tav a non
s
Gu

7-10

Programacin Java para no Programadores


Copyright 2008 Sun Microsystems, Inc. Todos los derechos reservados. Sun Services, Revisin E.1

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2014, Oracle and/or its affiliates

Desarrollo de un bucle for


40
41
42
43
44
45
46

int desiredFloor = 5;

47
48
49
50
51
52
53
54

else {
for (int up = currentFloor; up != desiredFloor; ++up) {
goUp();
}
}

if (currentFloor > desiredFloor) {


for (int down = currentFloor; down != desiredFloor; --down) {
goDown();
}
}

has
r)

a
om
c con
En este ejemplo, el valor de la variable currentFloor se oo
compara
el de la variable desiredFloor para determinar si el ah
de
yascensoridebera
ugoDown o
G
subir o bajar (lnea 42). Dos bucles for llaman o@ mtodos
a los
an el valornt la variable
e de
goUp el nmero de veces necesarias hasta que
e
ald s Stud
desiredFloor sea igual que el de g variable currentFloor (lneas de
la
i
la 43 a la 45 y de la 48 a la 50). o_
av se th
t
gus to u
(
no nse
a
lde lice
a
o G rable
eric nsfe
Fed -tra
o
tav a non
s
Gu

Uso de construcciones en bucle


Copyright 2008 Sun Microsystems, Inc. Todos los derechos reservados. Sun Services, Revisin E.1

7-11

Fundacin Proydesa
Desarrollo de un bucle for

Unauthorized reproduction or distribution prohibited Copyright 2014, Oracle and/or its affiliates

Bucles for anidados


El siguiente ejemplo de cdigo imprime en la pantalla un rectngulo de
caracteres @ compuesto de 10 columnas de anchura y 3 las de altura
(3 las formadas por 10 caracteres @). El bucle interno imprime cada la
y el bucle externo imprime el resultado de ese cdigo tres veces.
Cdigo 7-4
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17

Archivo ForRectangle.java situado en el directorio


loops

public class ForRectangle {


public int height = 3;
public int width = 10;

a
om
public void displayRectangle() {
c
oo e
yah
for (int rowCount = 0; rowCount < height; rowCount++) { uid
@
G
for (int colCount = 0; colCount < width; colCount++) {
ano dent
e
System.out.print(@);
ald s Stu
}
g
System.out.println();
vo_ e thi
a
}
ust o us
}
o (g se t
n
}
dea licen
l
Ga ble
co fera
risegundo bucle (interno) escribe en la pantalla una la de caracteres @
e
El
s
Fed hasta n se alcanza el valor de la variable width (lneas de la 10 a la 12).
tra que
o
tav a nonEl primer bucle (externo) comprueba si se ha alcanzado el valor de altura,
s
height (lnea 9). En caso negativo, se crea una la ms utilizando el bucle
Gu

has
r)

interno. De lo contrario, el rectngulo estar completo.

7-12

Programacin Java para no Programadores


Copyright 2008 Sun Microsystems, Inc. Todos los derechos reservados. Sun Services, Revisin E.1

Fundacin Proydesa
Codificacin de un bucle do/while

Unauthorized reproduction or distribution prohibited Copyright 2014, Oracle and/or its affiliates

Codicacin de un bucle do/while


El bucle do/while repite la ejecucin del bloque de cdigo de una a
muchas veces: la condicin se sita al nal del bucle y se procesa despus
del cuerpo del bloque. Por tanto, el cuerpo del bucle se procesa al menos
una vez. Si quiere que la sentencia o sentencias del cuerpo se procesen al
menos una vez, utilice un bucle do/while en lugar de los bucles while
o for. La sintaxis del bucle do/while es como sigue:
do {
bloque_cdigo;
}
while (expresin_booleana);// El signo de punto y coma
es obligatorio.

has
r)

a
om
Donde:
c
oo e ms
bloque_cdigo representa las lneas de cdigo que se ejecutan
yah uid
de una vez si la expresin_booleana es@
true. G
ano daent resultado true
e
expresin_booleana es una expresin que d como
ald s Stu despus de cada
g
o false. La expresin_booleanai se procesa
vo_ e th
iteracin del bucle. ta
s
s
(gu e to u
s
ano punto y coma despus de la expresin_booleana
Nota Elde de en
signo
l
c
es obligatoriolporque dicha expresin se sita al nal del bucle. Por el
Ga b e li
no
rico sfera es preciso usar el punto sita al principio del bucle y while
e contrario, expresin_booleana se y coma al nal de los bucles va
an
Fed -trporque la un bloque_cdigo que naliza con una llave de cierre.
o on seguida de
v
sta a n
Gu

Uso de construcciones en bucle


Copyright 2008 Sun Microsystems, Inc. Todos los derechos reservados. Sun Services, Revisin E.1

7-13

Fundacin Proydesa
Codificacin de un bucle do/while
El siguiente ejemplo de cdigo muestra un mtodo setFloor con un
bucle do/while que hace que el ascensor suba o baje.

Unauthorized reproduction or distribution prohibited Copyright 2014, Oracle and/or its affiliates

Cdigo 7-5

Archivo DoWhileElevator.java situado en el directorio


loops

1
2
public class DoWhileElevator {
3
4
public boolean doorOpen=false;
5
public int currentFloor = 1;
6
7
public final int TOP_FLOOR = 5;
8
public final int BOTTOM_FLOOR = 1;
9
10
public void openDoor() {
11
System.out.println(Se est abriendo la puerta.);
12
doorOpen = true;
13
System.out.println(La puerta est abierta.);
14
}
15
16
public void closeDoor() {
17
System.out.println(Se est cerrando la puerta.);
18
doorOpen = false;
19
System.out.println(La puerta est cerrada.);
20
}
21
22
public void goUp() {
23
System.out.println(Subiendo una planta.);
24
currentFloor++;
25
System.out.println(Piso: + currentFloor);
26
}
27
28
public void goDown() {
29
System.out.println(Bajando una planta.);
30
currentFloor--;
31
System.out.println(Piso: + currentFloor);
32
}
33
34
public void setFloor() {
35
36
// Normalmente pasara el valor de desiredFloor como argumento al
37
// mtodo setFloor. pero, como an no ha aprendido a
38
// hacer esta operacin, desiredFloor se define con un nmero
especfico (5)
39
// a continuacin.

has
r)

m
co
hoo ide
a
@y t Gu
ano den
e
ald s Stu
g
vo_ e thi
a
ust o us
o (g se t
n
dea licen
l
Ga ble
rico sfera
e
Fed -tran
o
tav a non
s
Gu

7-14

Programacin Java para no Programadores


Copyright 2008 Sun Microsystems, Inc. Todos los derechos reservados. Sun Services, Revisin E.1

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2014, Oracle and/or its affiliates

Codificacin de un bucle do/while


40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55

int desiredFloor = 5;
do {
if (currentFloor < desiredFloor) {
goUp();
}
else if (currentFloor > desiredFloor) {
goDown();
}
}
while (currentFloor != desiredFloor);
}

has
r)

a
om
c
El mtodo setFloor de la clase Elevator utiliza un bucle do/while para
oo e
determinar si el ascensor se encuentra en el piso elegido (lneasd la 43 a
yah ui de
@ t al
la 52). Si el valor de la variable currentFloor no es igual Gde la variable
ano de41) o bajando
desiredFloor, el ascensor contina subiendo (lnea n
e
ald s Stu
(lnea 48).
g
vo_ e thi
a
ust o us
o (g se t
n
dea licen
l
Ga ble
rico sfera
e
Fed -tran
o
tav a non
s
Gu

Uso de construcciones en bucle


Copyright 2008 Sun Microsystems, Inc. Todos los derechos reservados. Sun Services, Revisin E.1

7-15

Fundacin Proydesa
Codificacin de un bucle do/while

Unauthorized reproduction or distribution prohibited Copyright 2014, Oracle and/or its affiliates

Bucles do/while anidados


El siguiente cdigo imprime en la pantalla un rectngulo de caracteres @
compuesto de 10 columnas de anchura y 3 las de altura (3 las formadas
por 10 caracteres @). La escritura de cada la se realiza mediante el
bucle interno. El bucle externo imprime el resultado del cdigo tres veces.
Cdigo 7-6
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27

Archivo DoWhileRectangle.java situado en el directorio


loops

public class DoWhileRectangle {


public int height = 3;
public int width = 10;

m
public void displayRectangle() {
co
hoo ide
a
int rowCount = 0;
@y t Gu
int colCount = 0;
ano den
e
ald s Stu
do {
g
colCount = 0;
vo_ e thi
a
ust o us
do {
o (g se t
n
System.out.print(@);
dea licen
l
colCount++;
Ga ble
}
co fera
ri(colCount < width);
e
while
s
Fed -tran
o System.out.println();
tav a non
s
rowCount++;
Gu
}
while (rowCount < height);

}
}

El segundo bucle (interno) escribe en la pantalla una la de caracteres @


hasta que se alcanza el valor de la variable width (lneas de la 15 a la 19).
Al menos se imprime un carcter @ antes de comprobar el valor de la
variable width.

7-16

Programacin Java para no Programadores


Copyright 2008 Sun Microsystems, Inc. Todos los derechos reservados. Sun Services, Revisin E.1

has
r)

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2014, Oracle and/or its affiliates

Codificacin de un bucle do/while


El primer bucle (externo) comprueba si se ha alcanzado el valor de la
variable de altura, height (lnea 24). Si no se ha alcanzado el valor de
height, se crea una la ms utilizando el bucle interno. De lo contrario, el
rectngulo estar completo. Al menos se crea una la antes de comprobar
el valor de la variable height.

Comparacin de las construcciones en bucle


Los bucles for, while y do/while funcionan de forma muy similar.
No obstante, en determinadas situaciones, una construccin ser
probablemente mejor que la otra. Utilice las directrices siguientes para
determinar cul de ellas utilizar:

has
r)

Utilice el bucle while para recorrer las sentencias indenidamente y


ejecutarlas cero o ms veces.

a
om
Utilice el bucle do/while para recorrer las sentencias c
indenidamente y ejecutarlas una o ms veces.
hoo ide
a
@y t Gu
Utilice el bucle for para recorrer las sentencias un nmero
o
a es d compacto y fcil de
predenido de veces. Este tipo de buclen msen
e
leer que while porque est pensado para contabilizar un rango nito
ald s Stu
g
de valores.
vo_ e thi
a
ust o us
o (g se t
n
dea licen
l
Ga ble
rico sfera
e
Fed -tran
o
tav a non
s
Gu

Uso de construcciones en bucle


Copyright 2008 Sun Microsystems, Inc. Todos los derechos reservados. Sun Services, Revisin E.1

7-17

Unauthorized reproduction or distribution prohibited Copyright 2014, Oracle and/or its affiliates

Fundacin Proydesa

m
co
hoo ide
a
@y t Gu
ano den
e
ald s Stu
g
vo_ e thi
a
ust o us
o (g se t
n
dea licen
l
Ga ble
rico sfera
e
Fed -tran
o
tav a non
s
Gu

has
r)

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2014, Oracle and/or its affiliates

Mdulo 8

Desarrollo y uso de mtodos


Objetivos

has
r)

El estudio de este mdulo le proporcionar los conocimientos necesarios


para:

a
om y de
c
Describir las ventajas de los mtodos y denir mtodos worker
oo e
llamada.
yah uid
@
Declarar y llamar a un mtodo.
G
ano dent
e
Comparar objetos y mtodos estticos.
ald s Stu
g
Usar mtodos sobrecargados.
vo_ e thi
a
ust o us y usar mtodos para combinar la
g
En este mdulo se explica cmo crear
o (y llevar ta cabo un determinada tarea.
n
lgica del programa nse
dea lice
l
Ga ble
rico sfera
e
Fed -tran
o
tav a non
s
Gu

8-1
Copyright 2008 Sun Microsystems, Inc. Todos los derechos reservados. Sun Services, Revisin E.1

Fundacin Proydesa
Comprobacin de los progresos

Comprobacin de los progresos


Unauthorized reproduction or distribution prohibited Copyright 2014, Oracle and/or its affiliates

Introduzca un nmero del 1 al 5 en la columna Principio del mdulo a


n de evaluar su capacidad para cumplir cada uno de los objetivos
propuestos. Al nalizar el mdulo, vuelva a evaluar sus capacidades y
determine la mejora de conocimientos conseguida por cada objetivo.

Objetivos del mdulo

Evaluacin
(1 = No puedo cumplir
este objetivo,
Mejora de
5 = Puedo cumplir este
conocimientos
objetivo)
(Final
Principio
Final del Principio)

a
om
c
Describir las ventajas de los
oo e
mtodos y denir mtodos
yah uid
worker y de llamada.
@
G
ano dent
Declarar y llamar a un
e
ald s Stu
mtodo.
g
vo_ e thi
Comparar objetos y mtodos ta
s
s
estticos.
(gu e to u
no ns
Usar mtodos ea
sobrecargados.
ld
ce
Ga ble li
El iresultado ra esta evaluacin ayudar a los Servicios de Formacin Sun
r co sfe de
e a
formacin. Por favor,
Fed (SES) ndeterminar la efectividad de0su un 1 en la columna de indique unasi
tra mejora de conocimientos (un o
escasa
la derecha)
o
tav a nonquiere que el profesor considere la necesidad de presentar ms material de
s
Gu
apoyo durante las clases. Asimismo, esta informacin se enviar al grupo

has
r)

del mdulo mdulo

de elaboracin de cursos de SES para revisar el temario de este curso.

8-2

Programacin Java para no Programadores


Copyright 2008 Sun Microsystems, Inc. Todos los derechos reservados. Sun Services, Revisin E.1

Fundacin Proydesa
Comprobacin de los progresos

Unauthorized reproduction or distribution prohibited Copyright 2014, Oracle and/or its affiliates

Notas

has
r)

m
co
hoo ide
a
@y t Gu
ano den
e
ald s Stu
g
vo_ e thi
a
ust o us
o (g se t
n
dea licen
l
Ga ble
rico sfera
e
Fed -tran
o
tav a non
s
Gu

Desarrollo y uso de mtodos


Copyright 2008 Sun Microsystems, Inc. Todos los derechos reservados. Sun Services, Revisin E.1

8-3

Fundacin Proydesa
Aspectos relevantes

Unauthorized reproduction or distribution prohibited Copyright 2014, Oracle and/or its affiliates

Aspectos relevantes

Discusin Las preguntas siguientes son relevantes para comprender los


conceptos sobre los mtodos:

Cmo se estructuran o implementan las operaciones realizadas sobre un


objeto?

has
r)

m
co
hoo ide
a
@y t Gu
ano den
e
ald s Stu
g
vo_ e thi
a
ust o us
o (g se t
n
dea licen
l
Ga ble
rico sfera
e
Fed -tran
o
tav a non
s
Gu

8-4

Programacin Java para no Programadores


Copyright 2008 Sun Microsystems, Inc. Todos los derechos reservados. Sun Services, Revisin E.1

Fundacin Proydesa
Creacin de mtodos y llamadas a mtodos

Unauthorized reproduction or distribution prohibited Copyright 2014, Oracle and/or its affiliates

Creacin de mtodos y llamadas a mtodos


La mayor parte del cdigo que se escribe para una clase est contenido
dentro de uno o varios mtodos. Los mtodos permiten dividir el trabajo
que realiza el programa en diferentes tareas o comportamientos lgicos.
Por ejemplo, puede que quiera desarrollar un programa que calcule y
muestre en la pantalla una cifra total. Aunque todo el cdigo necesario
para realizar estas tareas puede incluirse en un solo mtodo, agrupar las
distintas tareas puede ayudar a crear programas orientados a objetos ms
apropiados. En otras palabras, se trata de dividir las tareas en bloques para
que cada mtodo pueda utilizarse de forma independiente. Por ejemplo,
puede que quiera llamar a un mtodo que calcule el total en una clase,
pero no muestre el resultado del clculo.

has
r)

a
om
c
oo e
[modificadores] tipo_retorno identificador_mtodo
yah uid
([argumentos]) {
@
G
bloque_cdigo_mtodo
ano dent
e
}
ald s Stu
g
vo_ e thi
a
Donde:
ust o us
[modificadores] representan determinadas palabras clave de
o (g se t
n n la
Java quea
de modicansonforma en que se utilizan los mtodos.
ce
Losl
e li
Ga modicadores opcionales (como indican los corchetes).
l
tipo_retorno es el tipo de valor que devuelve un mtodo y que
rico sferab
e
otro lugar del programa. Los mtodos
Fed -tran puede utilizarse en algn elemento (valor literal, variable, referencia
o on
pueden devolver slo un
v
a un objeto, etc.). Si el mtodo no debe devolver ningn valor,
sta a n
Gu
es preciso especicar la palabra clave void como tipo de retorno.
La sintaxis de todas las declaraciones de mtodos es como sigue:

identificador_mtodo es el nombre del mtodo.

Los ([argumentos]) representan una lista de variables cuyos valores


se pasan al mtodo para que ste los utilice. Los argumentos son
opcionales (como indican los corchetes) y muchos mtodos no aceptan
argumentos.

bloque_cdigo_mtodo es una secuencia de sentencias ejecutadas


por el mtodo. En el bloque o cuerpo del cdigo del mtodo pueden
tener lugar una amplia variedad de tareas.

Desarrollo y uso de mtodos


Copyright 2008 Sun Microsystems, Inc. Todos los derechos reservados. Sun Services, Revisin E.1

8-5

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2014, Oracle and/or its affiliates

Creacin de mtodos y llamadas a mtodos

Lo saba? A menudo, un conjunto de declaraciones de mtodos dentro


de una clase se conoce con el nombre de interfaz porque dene la forma
en que los objetos deben interaccionar o relacionarse con otros objetos.
Las declaraciones de mtodos tambin se denominan prototipos de mtodos
porque proporcionan al programador suciente informacin como para
determinar la forma en que se utiliza el mtodo.

Forma bsica de un mtodo


El mtodo en su forma bsica no acepta argumentos ni devuelve ningn
valor. El siguiente mtodo display de la clase Shirt es un mtodo bsico:
public void displayInformation() {
System.out.println(ID de camisa: " + shirtID);
System.out.println(Descripcin de la camisa : + description);
System.out.println("Cdigo de color: " + colorCode);
System.out.println("Precio de la camisa: " + price);
System.out.println("Cantidad en stock: " + quantityInStock);
} // fin del mtodo display

a
om
c
oo e
yah uid
@
G
ano dent
e
ald s Stu
g
vo_ e thi
ta varias
Este mtodo muestra en gus
la pantalla us lneas de informacin tal como
(
o
el valor de las variables itemID t price.
no nse y
a
lde lice
a
o G rable
eric nsfe
Fed -tra
o
tav a non
s
Gu

has
r)

8-6

Programacin Java para no Programadores


Copyright 2008 Sun Microsystems, Inc. Todos los derechos reservados. Sun Services, Revisin E.1

Fundacin Proydesa
Creacin de mtodos y llamadas a mtodos

Unauthorized reproduction or distribution prohibited Copyright 2014, Oracle and/or its affiliates

Llamada a un mtodo desde una clase diferente


Para llamar o ejecutar un mtodo situado en otra clase, puede utilizar el
operador punto (.) con una variable de referencia a objeto tal y como lo
hara para acceder a las variables public de un objeto. En el siguiente
ejemplo de cdigo se muestra la clase ShirtTest.
Cdigo 8-1
1
2
3
4
5
6
7
8
9
10
11
12
13
14

Archivo ShirtTest.java situado en el directorio


getstarted

public class ShirtTest {


public static void main (String args[]) {

has
r)

a
om
c
oo e
yah uid
myShirt.displayInformation();
@
G
ano dent
e
ald s Stu
}
g
}
vo_ e thi
a
ust o us
o (g se t
n n
En este ejemplo, se declara e inicializa una variable de referencia a
dea limyShirt con un objeto Shirt en las lneas 6 y 7.
l
ce
un objeto llamada
Ga ble esa variable hace una llamada al mtodo display dentro
A continuacin,
rico objetoa (lnea 9).
e del sfer Shirt
Fed -tran
o
tav a non Mtodos worker y de llamada
s
Gu
Shirt myShirt;
myShirt = new Shirt();

En el ejemplo anterior, la clase ShirtTest llama al mtodo display


desde el interior de otro mtodo (el mtodo main). Por tanto, el mtodo
main se considera como el mtodo de llamada porque est invocando o
llamando a otro mtodo para que realice algn trabajo. Por su parte, el
mtodo display se considera como el mtodo de ejecucin o worker
porque ejecuta algn trabajo para el mtodo main.
Nota Muchos mtodos pueden ser de llamada o workers porque no slo
realizan algn trabajo, sino que adems llaman a otros mtodos.

Desarrollo y uso de mtodos


Copyright 2008 Sun Microsystems, Inc. Todos los derechos reservados. Sun Services, Revisin E.1

8-7

Fundacin Proydesa
Creacin de mtodos y llamadas a mtodos

Unauthorized reproduction or distribution prohibited Copyright 2014, Oracle and/or its affiliates

Cuando un mtodo de llamada ejecuta un mtodo worker, el primero


detiene su propia ejecucin hasta que naliza el mtodo worker.
Cuando ste naliza, se indica al ujo del programa que regrese al punto
del mtodo de llamada situado justo despus de la llamada al mtodo
worker (vuelve a la lnea 9 de la clase ShirtTest.java).
En la gura siguiente se ilustra el concepto de mtodos worker y de
llamada.

Mtodo de llamada

has
r)

m
co
hoo ide
a
@y t Gu
ano TM en
e
Mtodo worker
ald s Stud
_g t
vollamadahi
a
Figura 8-1 Mtodos workerty de se
us o u
o (g se t
n
dea licen
l
Ga ble
rico sfera
e
Fed -tran
o
tav a non
s
Gu

8-8

Programacin Java para no Programadores


Copyright 2008 Sun Microsystems, Inc. Todos los derechos reservados. Sun Services, Revisin E.1

Fundacin Proydesa
Creacin de mtodos y llamadas a mtodos

Llamada a un mtodo en la misma clase

Unauthorized reproduction or distribution prohibited Copyright 2014, Oracle and/or its affiliates

Llamar a un mtodo dentro de la misma clase es fcil. Slo tiene que


incluir el nombre del mtodo worker y sus argumentos, si los tiene.
El ejemplo de cdigo siguiente contiene una clase con un mtodo que
llama a otro mtodo en la misma clase.
Cdigo 8-2
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35

Archivo Elevator.java situado en el directorio methods

public class Elevator {


public boolean doorOpen=false;
public int currentFloor = 1;

has
r)

m
public final int TOP_FLOOR = 5;
co
public final int BOTTOM_FLOOR = 1;
hoo ide
a
@y t Gu
public void openDoor() {
ano den
e
System.out.println(Se est abriendo lla puerta.);
a d s Stu
doorOpen = true;
o_gabierta.);
vest e thi
System.out.println(La puerta
a
ust o us
}
o (g se t
n
public void closeDoor() { n
dea liceest cerrando la puerta.);
l
System.out.println(Se
Ga ble
doorOpen = false;
rico sfera
e
System.out.println(La puerta est cerrada.);
Fed -tran
}
avo non
ust apublic void goUp() {
G
System.out.println(Subiendo una planta.);
currentFloor++;
System.out.println(Piso: + currentFloor);

}
public void goDown() {
System.out.println(Bajando una planta.);
currentFloor--;
System.out.println(Piso: + currentFloor);
}
public void setFloor(int desiredFloor) {
while (currentFloor != desiredFloor){

Desarrollo y uso de mtodos


Copyright 2008 Sun Microsystems, Inc. Todos los derechos reservados. Sun Services, Revisin E.1

8-9

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2014, Oracle and/or its affiliates

Creacin de mtodos y llamadas a mtodos


36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53

if (currentFloor < desiredFloor){


goUp();
}
else {
goDown();
}
}
}
public int getFloor() {
return currentFloor;
}
public boolean checkDoorStatus() {
return doorOpen;
}

a
om
c
oo e
yah uid
@
G
El mtodo setFloor llama a los mtodos goUp y goDown (lneas 37 y 40).
ano dent
Los tres mtodos estn incluidos en la clase e
Elevator.
ald s Stu
g
vo_ e thi
a
Directrices para realizarsllamadas a mtodos
u t o us
o (g se t
n
stas son las dea paran
normas e crear y realizar llamadas a mtodos:
l
ic
Ga blmites en cuanto al nmero de llamadas a mtodos que
le l
No existen
rico sferealizar un mtodo de llamada.
e puede ra
n
Fed -traEl mtodo de llamada y el worker pueden estar en la misma clase o
o on
v
en clases diferentes.
sta a n
u
G

has
r)

8-10

La forma de llamar al mtodo worker vara segn se encuentre en la


misma clase o en una clase distinta de la del mtodo de llamada.
Las llamadas a mtodos pueden hacerse en cualquier orden. Su
ejecucin no necesariamente debe efectuarse en el orden en el que
guran dentro de la clase en la que se han declarado (la clase que
contiene los mtodos worker).

Programacin Java para no Programadores


Copyright 2008 Sun Microsystems, Inc. Todos los derechos reservados. Sun Services, Revisin E.1

Fundacin Proydesa
Creacin de mtodos y llamadas a mtodos

Unauthorized reproduction or distribution prohibited Copyright 2014, Oracle and/or its affiliates

Autoevaluacin Seleccione las declaraciones de mtodos que se ajusten


a la sintaxis de declaracin de mtodos adecuada.
a. ___

public displayInfo()

b. ___

public void displayInfo

c. ___

public String getColor()

d. ___

public void displayInfo()

e. ___

public setColor(int Color)

has
r)

m
co
hoo ide

a
public class Circle {
@y t Gu
private int radius;
ano den
private String color; alde
g is Stu
_
public void setColor(String myColor){
avo se th
st
color = gu
myColor; u
(
o
}
no nse t
a e
} lde
c
Ga ble li
Respuesta:
rico sfera___________________________________________
de an
e
o F on-tr
v
sta a n
Gu

Autoevaluacin Cmo llamara al mtodo setColor desde la clase


Circle (es decir, desde la misma clase en la que se ha declarado)?

Desarrollo y uso de mtodos


Copyright 2008 Sun Microsystems, Inc. Todos los derechos reservados. Sun Services, Revisin E.1

8-11

Fundacin Proydesa
Paso de argumentos y devolucin de valores

Paso de argumentos y devolucin de valores


Unauthorized reproduction or distribution prohibited Copyright 2014, Oracle and/or its affiliates

Como hemos mencionado, es posible hacer llamadas a mtodos mediante


un mtodo de llamada con una lista de argumentos (variables o valores
que el mtodo worker puede utilizar). Asimismo, los mtodos pueden
devolver un valor al mtodo de llamada para que ste lo utilice.
Objeto 1

Objeto 2

Mtodo worker
Mtodo de llamada

1
2
3
9
10

V1

El valor 1 se pasa
del objeto 1 al objeto 2

4
5
6
7
8

m
co
hoo ide
a
@y t Gu
V2
ano den
El objeto 2 de
devuelve
al s 1 u
el valor 2 al objeto St
_g
vovaloresthi
Figura 8-2 Paso y devolucin de
a
ust o use
o (g se t
n
dea licen
l
Ga ble
rico sfera
e
Fed -tran
o
tav a non
s
Gu

8-12

Programacin Java para no Programadores


Copyright 2008 Sun Microsystems, Inc. Todos los derechos reservados. Sun Services, Revisin E.1

has
r)

Fundacin Proydesa
Paso de argumentos y devolucin de valores

Unauthorized reproduction or distribution prohibited Copyright 2014, Oracle and/or its affiliates

Declaracin de mtodos con argumentos


Muchos mtodos de los que se declaran o se usan a travs de las bibliotecas
de clases de Java aceptan argumentos. Por ejemplo, el siguiente mtodo
setFloor de la clase Elevator acepta el valor int desiredFloor, que se
utiliza en el cuerpo del mtodo.
public void setFloor(int desiredFloor) {
while (currentFloor != desiredFloor) {
if (currentFloor < desiredFloor) {
goUp();
}
else {
goDown();
}
}
}
public void multiply(int numberOne, int numberTwo)

has
r)

a
om
c
oo e
yah uid
@
G
Mtodo main
ano dent
lde
aestado Stu en las clases de
_ ha is utilizado
Recuerde que el mtodo main que g
avo se th
prueba tambin debe escribirse de forma que acepte argumentos: una o
t
varias (un array) referencias ao u
gus t objetos String.
(
no nse main (String args[])
public a
lde static void
ce
Ga ble li
rico sfera
e
Fed -tran
o
tav a non
s
Gu

Desarrollo y uso de mtodos


Copyright 2008 Sun Microsystems, Inc. Todos los derechos reservados. Sun Services, Revisin E.1

8-13

Fundacin Proydesa
Paso de argumentos y devolucin de valores

Unauthorized reproduction or distribution prohibited Copyright 2014, Oracle and/or its affiliates

Por qu el mtodo main acepta estos argumentos? El lenguaje Java obliga


a escribir el mtodo main de forma que acepte valores cuando el programa
se ejecute desde la lnea de comandos. Por ejemplo, para pasar un precio
de 12.99 y el color R a la clase ShirtTest, ejecute la clase utilizando la
mquina virtual de Java con el argumento adicional de precio:
java ShirtTest 12.99 R
Para que los valores numricos pasados al mtodo main sean tiles para
el programa, deben convertirse las secuencias de caracteres en un tipo de
datos primitivo.
Nota Pasar argumentos utilizando el mtodo main es una funcin
de utilidad para probar los programas. No necesita pasar argumentos
al mtodo main para cumplir ninguno de los objetivos de este curso.
Asimismo, para manejar los argumentos pasados al mtodo main,
es preciso tener conocimientos de utilizacin de arrays, que es un tema
de nivel intermedio explicado ms adelante en este curso.

a
om
c
oo e
yah uid
@
G
ano dent
e
ald s
Llamadas a mtodos con argumentosStu
g
vo_ e thi
sta us
Para pasar argumentos (gu mtodo a otro, incluya los argumentos en el
de un
o
parntesis de la llamada del mtodo. Como argumentos, puede pasar
no nse t
a
valores literales o variables. Como en el caso de la asignacin de valores
lde lice escribir las cadenas literales entre comillas,
literalesGa variables, debe
a las
le
c la fe F despus de los tipos float, etc.
usar o letra rab
i
der ans
e tr
o F onEscriba la lista de argumentos en el mismo orden que tengan en la
tav a n declaracin del mtodo worker y pase todos los argumentos necesarios.
s
Gu
El compilador verica si el tipo, orden y nmero de los parmetros

has
r)

pasados coincide con el tipo, orden y nmero de los parmetros


aceptados por el mtodo.
Nota No es necesario usar los mismos nombres de variables como
argumentos al llamar a un mtodo. No obstante, los nombres de variables
deben ser de un tipo de datos compatible (puede pasar un tipo byte a un
tipo int, etc.).

8-14

Programacin Java para no Programadores


Copyright 2008 Sun Microsystems, Inc. Todos los derechos reservados. Sun Services, Revisin E.1

Fundacin Proydesa
Paso de argumentos y devolucin de valores
En el ejemplo siguiente se muestra cmo se pasa un valor numrico a un
mtodo que realiza una operacin utilizando el valor.

Unauthorized reproduction or distribution prohibited Copyright 2014, Oracle and/or its affiliates

Cdigo 8-3
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24

Archivo ElevatorTest.java situado en el directorio


methods

public class ElevatorTest {


public static void main(String args[]) {
Elevator myElevator = new Elevator();
myElevator.openDoor();
myElevator.closeDoor();
myElevator.goUp();
myElevator.goUp();
myElevator.goUp();
myElevator.openDoor();
myElevator.closeDoor();
myElevator.goDown();
myElevator.openDoor();
myElevator.closeDoor();
myElevator.goDown();

has
r)

a
om
c
oo e
yah uid
@
G
ano dent
e
ald s Stu
g
vo_ e thi
a
ust o us
myElevator.setFloor(myElevator.TOP_FLOOR);
o (g se t
n
myElevator.openDoor(); n
dea lice
l
}
Ga ble
}
rico sfera
e
Fed -tran
o
tav a non Este ejemplo llama al mtodo setFloor con un valor entero para establecer
s
Gu
el piso de destino (lnea 19).

Desarrollo y uso de mtodos


Copyright 2008 Sun Microsystems, Inc. Todos los derechos reservados. Sun Services, Revisin E.1

8-15

Fundacin Proydesa
Paso de argumentos y devolucin de valores

Declaracin de mtodos con valores de retorno

Unauthorized reproduction or distribution prohibited Copyright 2014, Oracle and/or its affiliates

La mayora de las declaraciones de mtodos que ha visto no devuelven


ningn valor (void). Sin embargo, muchos de los mtodos que crear
tendrn valores de retorno y muchos mtodos de las bibliotecas de clases
de Java tambin los tienen.
Para declarar un mtodo que devuelva un valor, coloque el tipo de valor
de retorno deseado antes del identicador del mtodo. Por ejemplo,
la siguiente declaracin de mtodo acepta dos tipos int y devuelve un
tipo int:
public int sum(int numberOne, int numberTwo)

a
om
c
oo e
yah uid
@
G
ano dent
e
Devolucin de un valor
ald s Stu
g
vo_ e thi
ta us
Para devolver un valor deus mtodo, utilice la palabra clave return.
un
Por ejemplo, el cdigo siguiente to
o (g se devuelve el valor contenido en la variable
n
sum.
dea licen
l
Ga bl sum(int numberOne, int numberTwo) {
public int e
rico sfera
de an int result= numberOne + numberTwo;
e
o F on-tr return result;
v
sta a n
}
Gu

has
r)

Nota Un mtodo slo puede devolver un valor, pero puede aceptar


mltiples argumentos.

El siguiente mtodo getFloor de la clase Elevator devuelve el valor


contenido en la variable currentFloor.
public int getFloor() {
return currentFloor;
}

8-16

Programacin Java para no Programadores


Copyright 2008 Sun Microsystems, Inc. Todos los derechos reservados. Sun Services, Revisin E.1

Fundacin Proydesa
Paso de argumentos y devolucin de valores

Recepcin de valores de retorno

Unauthorized reproduction or distribution prohibited Copyright 2014, Oracle and/or its affiliates

Si llama a un mtodo que devuelve un valor, como en el caso del mtodo


getFloor anterior, puede usar el valor de retorno en el mtodo de llamada.
El ejemplo de cdigo siguiente contiene una clase de prueba que crea una
instancia de la clase Elevator, llama a su mtodo getFloor y espera de
vuelta un valor int.
Cdigo 8-4
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28

Archivo ElevatorTestTwo.java situado en el directorio


methods

has
r)

public class ElevatorTestTwo {

m
co
Elevator myElevator = new Elevator();
hoo ide
a
@y t Gu
myElevator.openDoor();
ano den
e
myElevator.closeDoor();
ald s Stu
g
myElevator.goUp();
vo_ e thi
myElevator.goUp();
a
myElevator.goUp();
ust o us
myElevator.openDoor();
o (g se t
n
myElevator.closeDoor();
dea licen
l
myElevator.goDown();
Ga ble
myElevator.openDoor();
rico sfera
e
myElevator.closeDoor();
Fed -tran
myElevator.goDown();
avo non
ust a int curFloor = myElevator.getFloor();
G
public static void main(String args[]) {

System.out.println(Piso actual: + curFloor);


myElevator.setFloor(curFloor+1);
myElevator.openDoor();

}
}

En la lnea 20 se declara la variable curFloor y se utiliza para recibir el


valor de retorno entero del mtodo getFloor de la clase Elevator.

Desarrollo y uso de mtodos


Copyright 2008 Sun Microsystems, Inc. Todos los derechos reservados. Sun Services, Revisin E.1

8-17

Fundacin Proydesa
Paso de argumentos y devolucin de valores

Ventajas de usar mtodos

Unauthorized reproduction or distribution prohibited Copyright 2014, Oracle and/or its affiliates

Los mtodos son los mecanismos mediante los cuales interaccionan


los objetos. En los programas Java, es habitual tener varios objetos que
interaccionan a travs de llamadas recprocas a sus mtodos. He aqu
algunas ventajas de usar mtodos en los programas:

Los mtodos facilitan la lectura y el mantenimiento de los programas.


Por ejemplo, es mucho ms fcil imaginar lo que hace un programa
si el cdigo se divide en diferentes mtodos con nombres que
explican el comportamiento de cada uno de ellos.

Los mtodos agilizan el desarrollo y el mantenimiento del cdigo.


Por ejemplo, es posible optar por crear y probar un programa
mtodo a mtodo para garantizar que funcionar como un todo una
vez que se haya nalizado.

a
om
c
Los mtodos son un componente esencial del software reutilizable.
oo e
yah uid
Por ejemplo, las bibliotecas de clases de Java contienen numerosas
@
G
clases con mtodos que pueden utilizarse una y otrant en los
ano de vezmtodos
e
programas. Igualmente, un programador puede escribir
ald los Stu
g
para que otros programadores tambin is utilicen.
vo_ e th
a
Los mtodos permiten separar objetos para comunicar y distribuir el
ust o us
trabajo realizado por el programa.
o (g se t
n
Un mtodo a un objeto puede llamar a un mtodo de otro objeto.
de de licen
l
El Ga puede pasar la informacin del mtodo y recibir un valor
objeto le
rico sferab
e de retorno.
Fed -tran
o
tav a non
s
Gu

has
r)

8-18

Programacin Java para no Programadores


Copyright 2008 Sun Microsystems, Inc. Todos los derechos reservados. Sun Services, Revisin E.1

Fundacin Proydesa
Creacin de mtodos y variables static

Unauthorized reproduction or distribution prohibited Copyright 2014, Oracle and/or its affiliates

Creacin de mtodos y variables static


Hasta ahora hemos explicado cmo acceder a los mtodos y las variables
creando un objeto de la clase a la que pertenecen el mtodo o la variable y
llamando al mtodo o accediendo a la variable (si sta es de tipo public).
Los mtodos y variables que son exclusivos de una instancia se
denominan mtodos y variables de instancia.
Tambin hemos explicado el uso de mtodos que no requieren
instanciacin de objetos, como es caso del mtodo main. stos se
denominan mtodos de clase o estticos y se les puede llamar sin tener
que crear primero un objeto.

has
r)

Igualmente, el lenguaje Java permite crear variables estticas o variables


de clase, que pueden utilizarse sin crear ningn objeto.

a
om
c
oo e
yah uid
@
G
ano dent
e
ald s Stu
g
vo_ quethi ha utilizado. No necesita crear
Nota main es un mtodota
static e ya
gus paraus
ninguna instancia de objeto to usarlo.
(
no nse
a
lde lice
a
o G rable
eric nsfe de mtodos static
d a
FeDeclaracin
tr
avo nonLos mtodos estticos se declaran con la palabra clave static.
ust a
G
A continuacin gura la declaracin del mtodo getProperties en la
clase System del API de Java:
static Properties getProperties()

Llamada a los mtodos static


Dado que los mtodos static o de clase no forman parte de ninguna
instancia de objeto (slo de la clase) no deberan utilizarse variables de
referencia a objetos para llamarlos. En su lugar, debe utilizarse el nombre
de la clase. La sintaxis para llamar a un mtodo static es como sigue:
Nombreclase.mtodo();

Desarrollo y uso de mtodos


Copyright 2008 Sun Microsystems, Inc. Todos los derechos reservados. Sun Services, Revisin E.1

8-19

Fundacin Proydesa
Creacin de mtodos y variables static

Unauthorized reproduction or distribution prohibited Copyright 2014, Oracle and/or its affiliates

Lo saba? La mquina virtual de Java utiliza el nombre de clase


suministrado en la lnea de comandos para llamar al mtodo main.
Por ejemplo, si se escribe java Shirt, la mquina virtual llama al mtodo
Shirt.main.
A continuacin se muestra un ejemplo de un mtodo que podra
agregarse a la clase Shirt para convertir los nmeros de tamao de las
camisas en tamaos expresados en forma de caracteres, como pequea,
mediana o grande. Este mtodo es static porque:

No utiliza directamente ningn atributo de la clase Shirt.

Puede que sea conveniente llamar al mtodo aunque no se disponga


de ningn objeto Shirt.

public static char convertShirtSize(int numericalSize) {

m
co
if (numericalSize < 10) {
hoo ide
return S;
a
}
@y t Gu
ano den
e tu
else if (numericalSize < 14) ald
{
S
return M;
o_g this
v
}
sta use
u
o (g se to 18) {
else if (numericalSize <
an
returne
d L;licen
al le
} G
rico sferab
e else {
Fed -tranreturn X;
o
tav a non }
s
Gu
}

El mtodo convertShirtSize acepta un tamao numrico, determina a


qu letra corresponde ese tamao (S, M, L o X) y devuelve esa letra.
Por ejemplo, para acceder al mtodo static convertShirtSize de la
clase Shirt:
char size = Shirt.convertShirtSize(16);

8-20

Programacin Java para no Programadores


Copyright 2008 Sun Microsystems, Inc. Todos los derechos reservados. Sun Services, Revisin E.1

has
r)

Fundacin Proydesa
Creacin de mtodos y variables static

Unauthorized reproduction or distribution prohibited Copyright 2014, Oracle and/or its affiliates

Declaracin de variables static


Tambin puede usar la palabra clave static para indicar que slo puede
haber en la memoria una copia de la variable asociada a una clase, no una
copia por cada instancia de un objeto. Por ejemplo:
static double salesTax = 8.25;

Acceso a las variables static


Para acceder a una variable static, debe utilizarse el nombre de la clase.
La sintaxis para llamar a una variable static es como sigue:
Nombreclase.variable;

has
r)

a
om
Por ejemplo, para acceder al valor de la variable static PI de la clase
c
Math:
oo e
yah uid
double myPI;
@
G
myPI = Math.PI;
ano dent
e
ald s Stu
g
vo_ tenerhi el modicador static
a
Lo saba? Las variables tpuedense t tanto
us parau
como el modicador g
indicar que slo hay una copia de la
o ( final no puede cambiarse. La variable PI de la
e to
n ns
variable y que su contenido
dea variable static final.
clase Math es unalice
l
Ga ble
rico sfera
e
Fed -tran
o
tav a non
s
Gu

Desarrollo y uso de mtodos


Copyright 2008 Sun Microsystems, Inc. Todos los derechos reservados. Sun Services, Revisin E.1

8-21

Fundacin Proydesa
Creacin de mtodos y variables static

Mtodos y variables estticos en el API de Java

Unauthorized reproduction or distribution prohibited Copyright 2014, Oracle and/or its affiliates

Determinadas bibliotecas de clases de Java, como la clase System, slo


contienen mtodos y variables static. La clase System contiene mtodos
utilitarios para manejar tareas especcas del sistema operativo (no actan
sobre instancias de objetos). Por ejemplo, el mtodo getProperties de la
clase System obtiene informacin sobre el equipo informtico que se est
utilizando.
Existen varias clases del API Java que son clases utilitarias. Estas clases
contienen mtodos static que son tiles para todo tipo de objetos.
Algunos ejemplos de clases y mtodos utilitarios son:

has
r)

Clase Math
Esta clase contiene mtodos y variables para realizar operaciones
numricas bsicas tales como las funciones exponenciales, de raz
cuadrada, logartmicas y trigonomtricas elementales.

a
om
c
oo e
Clase System
yah uid
@
G
Esta clase contiene mtodos y variables para realizar funciones del
ano dent
e
nivel del sistema tales como recuperar informacin de las variables
ald s Stu
g
de entorno del sistema operativo.
vo_ e thi
a
ust o us
o (g se t
n
dea licen
l
Ga ble
rico sfera
e
Fed -tran
o
tav a non
s
Gu

8-22

Programacin Java para no Programadores


Copyright 2008 Sun Microsystems, Inc. Todos los derechos reservados. Sun Services, Revisin E.1

Fundacin Proydesa
Creacin de mtodos y variables static

Unauthorized reproduction or distribution prohibited Copyright 2014, Oracle and/or its affiliates

Cundo declarar un mtodo o una variable static


He aqu algunas pistas para saber cundo declarar un mtodo o una
variable como static. Considere la posibilidad de declarar un mtodo o
una variable como static si:

No es importante realizar la operacin sobre un objeto independiente


o asociar la variable a un tipo de objeto concreto.

Es importante acceder a la variable o el mtodo antes de instanciar


un objeto.

El mtodo o la variable no pertenece lgicamente a ningn objeto


pero posiblemente pertenece a una clase utilitaria, como Math,
incluida en el API de Java. La clase Math contiene varios mtodos
utilitarios static que pueden emplearse en ecuaciones matemticas.

has
r)

a
om
oc
omtodos y las
Autoevaluacin De las siguientes armaciones sobre h
los
e
ya
variables de instancia, seleccione aquellas que sean ciertas. uid
@
G

ano dent
e
a. ___
Las variables de instancialson exclusivas
a d s Stu
g
de objetos individuales.
vo_ e thi
a
ust o us
b. ___
Los mtodos y las variables de instancia
necesitan instanciacin de objetos.
o (g se t
an en
deLos mtodos y las variables de instancia no
c
c. ___ al
G ble li instanciacin de objetos.
necesitan
o
ricd. ___era Los mtodos y las variables de instancia se
e
sf
Fed -tran
declaran con la palabra clave instance.
avo non
e. ___
El acceso a los mtodos y las variables de
ust a
G
instancia suele realizarse mediante una
variable de referencia a un objeto.

Desarrollo y uso de mtodos


Copyright 2008 Sun Microsystems, Inc. Todos los derechos reservados. Sun Services, Revisin E.1

8-23

Fundacin Proydesa
Creacin de mtodos y variables static

Unauthorized reproduction or distribution prohibited Copyright 2014, Oracle and/or its affiliates

Autoevaluacin De las siguientes armaciones sobre las variables y los


mtodos estticos, seleccione aquellas que sean ciertas.
a. ___

Los mtodos y variables estticos son


exclusivos de objetos individuales.

b. ___

Los mtodos y variables estticos necesitan


instanciacin de objetos.

c. ___

Los mtodos y variables estticos no


necesitan instanciacin de objetos.

d. ___

Los mtodos y variables estticos se


declaran con la palabra clave static.

e. ___

A menudo, la llamada a los mtodos


estticos se realiza utilizando el nombre de
la clase.

m
co
hoo ide
a
@y t Gu
ano den
e
ald s Stu
g
vo_ e thi
a
ust o us
o (g se t
n
dea licen
l
Ga ble
rico sfera
e
Fed -tran
o
tav a non
s
Gu

8-24

Programacin Java para no Programadores


Copyright 2008 Sun Microsystems, Inc. Todos los derechos reservados. Sun Services, Revisin E.1

has
r)

Fundacin Proydesa
Uso de la sobrecarga de mtodos

Unauthorized reproduction or distribution prohibited Copyright 2014, Oracle and/or its affiliates

Uso de la sobrecarga de mtodos


En programacin Java, puede haber varios mtodos en una clase que
tengan el mismo nombre pero diferentes argumentos (diferentes rmas de
mtodo). Este concepto se denomina sobrecarga de mtodos. De la misma
forma que puede distinguir entre dos alumnos de la misma clase que se
llamen Juan llamndolos, por ejemplo, Juan el de la camisa verde y
Juan el moreno, tambin puede diferenciar dos mtodos por su nombre
y sus argumentos.
Por ejemplo, puede que quiera crear varios mtodos para agregar dos
nmeros como, por ejemplo, dos tipos int o dos tipos float. Con la
sobrecarga de mtodos, puede crear varios mtodos con el mismo nombre
pero diferentes rmas. Por ejemplo, el siguiente ejemplo de cdigo
contiene varios mtodos sum cada uno de los cuales acepta un conjunto
distinto de argumentos.

has
r)

m
co
hoo ide
Cdigo 8-5
Archivo Calculator.java situado en a directorio
el
@y t Gu
methods
ano den
e
1
ald s Stu
g
2
public class Calculator {
vo_ e thi
3
a
ust o s
4
public int sum(int numberOne, intunumberTwo){
o (g se t
5
n
6
System.out.println(Mtodo uno);
dea licen
l
7
Ga ble
8
return numberOne + numberTwo;
rico sfera
9
} e
Fed -tran
10 o
av non
st11 apublic float sum(float numberOne, float numberTwo) {
Gu 12
13
14
15
16
17
18
19
20
21
22
23
24
25

System.out.println(Mtodo dos);
return numberOne + numberTwo;
}
public float sum(int numberOne, float numberTwo) {
System.out.println(Mtodo tres);
return numberOne + numberTwo;
}
}

Desarrollo y uso de mtodos


Copyright 2008 Sun Microsystems, Inc. Todos los derechos reservados. Sun Services, Revisin E.1

8-25

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2014, Oracle and/or its affiliates

Uso de la sobrecarga de mtodos


El primer mtodo sum (lneas de la 4 a la 9) acepta dos argumentos int y
devuelve un valor int. El segundo mtodo sum (lneas de la 11 a la 16)
acepta dos argumentos float y devuelve un valor float. El tercer
mtodo sum (lneas de la 18 a la 23) acepta un tipo int y un tipo float
como argumentos y devuelve un tipo float.
Para llamar a cualquiera de los mtodos sum anteriores, el compilador
compara la rma de mtodo de la llamada con las rmas de mtodo de
una clase. Por ejemplo, a continuacin se muestra un mtodo main que
llama a cada uno de los mtodos sum contenidos en un objeto
Calculator.
Cdigo 8-6
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16

Archivo CalculatorTest.java situado en el directorio


methods

public class CalculatorTest {

m
co
public static void main(String [] args) {
hoo ide
a
Calculator myCalculator = new Calculator();
@y t Gu
ano den
e tu
int totalOne = myCalculator.sum(2,3); ald
S
System.out.println(totalOne);
o_g this
v
sta use 12.85F);
u
float totalTwo = myCalculator.sum(15.99F,
o (g se to
System.out.println(totalTwo);
n
dea licen
l
Ga ble
float totalThree = myCalculator.sum(2, 12.85F);
System.out.println(totalThree);
rico sfera
e
}
Fed -tran
} o
tav a non
s
Gu

8-26

Programacin Java para no Programadores


Copyright 2008 Sun Microsystems, Inc. Todos los derechos reservados. Sun Services, Revisin E.1

has
r)

Fundacin Proydesa
Uso de la sobrecarga de mtodos

Unauthorized reproduction or distribution prohibited Copyright 2014, Oracle and/or its affiliates

Sobrecarga de mtodos y el API de Java


Muchos mtodos del API de Java estn sobrecargados, incluido el mtodo
System.out.println. La tabla siguiente contiene todas las variaciones
del mtodo println.
Tabla 8-1 Variaciones del mtodo System.out.println
Mtodo

Uso

void println()

Finaliza la lnea actual escribiendo la


secuencia de separacin de lneas.

void println(boolean x) Imprime en la pantalla un valor boolean y


luego naliza la lnea.

has
r)

a
om
void println(char[] x) Imprime un array de caracteres c termina
oo y e
la lnea.
yah uid
@ tG
void println(double x) Imprime un tipoo
n
an double y termina la lnea.
lde tipo tude y termina la lnea.
void println(float x)
Imprime un S float
_ga this
o
void println(int x) tavImprime un tipo int y termina la lnea.
e
u
gx)s to us un tipo long y termina la lnea.
(
void println(long
no nse Imprime
a
void println(Objeto x) Imprime un objeto y termina la lnea.
lde lice
a
o G rable
void println(String x) Imprime una secuencia de caracteres y
eric nsfe
termina la lnea.
Fed -tra
o
tav a non
s
Gu
void println(char x)

Imprime un carcter y termina la lnea.

Desarrollo y uso de mtodos


Copyright 2008 Sun Microsystems, Inc. Todos los derechos reservados. Sun Services, Revisin E.1

8-27

Fundacin Proydesa
Uso de la sobrecarga de mtodos

Unauthorized reproduction or distribution prohibited Copyright 2014, Oracle and/or its affiliates

Es posible imprimir en la pantalla valores de tipo String, int, float u


otros tipos utilizando el mtodo System.out.println porque es un
mtodo sobrecargado que utiliza diferentes argumentos segn el tipo
de dato.

Autoevaluacin Cuntas variaciones del mtodo System.out.print


existen en el API de Java?
a. ___

b. ___

10

c. ___

d. ___

e. ___

a
om
c
oo e
yah uid
@
G
ano dent nombres
e tu
Sin la sobrecarga, necesitara crear varios mtodos con diferentes
ald ejemplo, printlnint,
para imprimir diferentes tipos de datos, por s S
_grealizar
v que e thi gran nmero de
printlnfloat, etc. O bien tendrao
a
conversiones de unos tipos en otrosus de usar un mtodo.
ust o antes
o (g se t
n
dea licende mtodos
l
Usos de la sobrecarga
Ga ble
rico sfera
e n
Fed Cuando escribasicdigo, recuerde que conviene denir mtodos con
-tra
las acciones asociadas al mtodo deben realizarse
vo nonsobrecargados de datos. Tambin puede utilizar la sobrecarga para
ta a
diferentes tipos
s
Gu
crear varios mtodos con el mismo nombre pero con diferente nmero de

has
r)

parmetros. Por ejemplo, podra crear tres mtodos sum, cada uno con un
nmero de argumentos diferente para sumar:
public int sum(int numberOne, int numberTwo)
public int sum(int numberOne, int numberTwo, int numberThree)
public int sum(int numberOne, int numberTwo,int numberThree, int
numberFour)

8-28

Programacin Java para no Programadores


Copyright 2008 Sun Microsystems, Inc. Todos los derechos reservados. Sun Services, Revisin E.1

Fundacin Proydesa
Uso de la sobrecarga de mtodos
El siguiente ejemplo de cdigo contiene un mtodo sobrecargado con
diferentes argumentos.

Unauthorized reproduction or distribution prohibited Copyright 2014, Oracle and/or its affiliates

Cdigo 8-7

Archivo ShirtTwo.java situado en el directorio methods

1
2
public class ShirtTwo {
3
4
public int shirtID = 0; // ID predeterminado para la camisa
5
public String description = -description required-; //
predeterminada
6
7
// Los cdigos de color son R=Rojo, B=Azul, G=Verde, U=Sin definir
8
public char colorCode = U;
9
public double price = 0.0; // Precio predeterminado para todas las
camisas
10
public int quantityInStock = 0; // Cantidad predeterminada para
todos los artculos
11
12
public void setShirtInfo(int ID, String desc, double cost){
13
shirtID = ID;
14
description = desc;
15
price = cost;
16
}
17
18
public void setShirtInfo(int ID, String desc, double cost, char
color){
19
shirtID = ID;
20
description = desc;
21
price = cost;
22
colorCode = color;
23
}
24
25
public void setShirtInfo(int ID, String desc, double cost, char
color, int quantity){
26
shirtID = ID;
27
description = desc;
28
price = cost;
29
colorCode = color;
30
quantityInStock = quantity;
31
}
32
33
// Este mtodo muestra los valores de un artculo
34
public void display() {
35
36
System.out.println(ID de artculo: + shirtID);

has
r)

m
co
hoo ide
a
@y t Gu
ano den
e
ald s Stu
g
vo_ e thi
a
ust o us
o (g se t
n
dea licen
l
Ga ble
rico sfera
e
Fed -tran
o
tav a non
s
Gu

Desarrollo y uso de mtodos


Copyright 2008 Sun Microsystems, Inc. Todos los derechos reservados. Sun Services, Revisin E.1

8-29

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2014, Oracle and/or its affiliates

Uso de la sobrecarga de mtodos


37
38
39
40
41
42
43
44

System.out.println(Descripcin del artculo: + description);


System.out.println(Cdigo de color: + colorCode);
System.out.println(Precio del artculo: + price);
System.out.println(Cantidad en stock: + quantityInStock);
} // fin del mtodo display
} // fin de la clase

La clase ShirtTwo contiene un mtodo, setShirtInformation, que se ha


sobrecargado dos veces: una para aceptar un valor de colorCode (lnea18)
y otra para aceptar los valores de colorCode y quantityInStock
(lnea 25).
En el siguiente ejemplo de cdigo se crean tres instancias de objeto de la
clase ShirtTwo y se utilizan sus mtodos sobrecargados.

has
r)

m
co
Cdigo 8-8
Archivo ShirtTwoTest.java situado en el directorioe
hoo id
a
methods
@y t Gu
ano den
0
e
1
class ShirtTwoTest {
ald s Stu
g
2
vo_ e thi
3
public static void main (String ta
args[]) {
gus to us
4
ShirtTwo shirtOne = new ShirtTwo();
o ( se
5
ShirtTwo shirtTwo =an ShirtTwo();
new
6
ShirtTwo shirtThree = neweShirtTwo();
lde lic n
a
7
o G rable
8
shirtOne.setShirtInfo(100, Button Down, 12.99);
eric nsfe
9
shirtTwo.setShirtInfo(101, Long Sleeve Oxford, 27.99, G);
Fed -tra
10 vo shirtThree.setShirtInfo(102, Shirt Sleeve T-Shirt, 9.99, B,
n
sta a no
50);
Gu
11
12
13
14
15
16
17

8-30

shirtOne.display();
shirtTwo.display();
shirtThree.display();
}
}

Programacin Java para no Programadores


Copyright 2008 Sun Microsystems, Inc. Todos los derechos reservados. Sun Services, Revisin E.1

Fundacin Proydesa
Uso de la sobrecarga de mtodos
La clase ShirtTwoTest llama al mtodo setShirtInfo sobrecargado
llamndolo tres veces:

Unauthorized reproduction or distribution prohibited Copyright 2014, Oracle and/or its affiliates

1.

La llamada al mtodo setShirtInfo se realiza con un ID, una


descripcin y un precio como argumentos (lnea 8).

2.

La llamada al mtodo setShirtInfo se realiza con un ID, una


descripcin, un precio y un cdigo de color como argumentos
(lnea 9).

3.

La llamada al mtodo setShirtInfo se realiza con un ID, una


descripcin, un precio, un cdigo de color y una cantidad en stock
como argumentos (lnea 10).

has
r)

m
co
hoo ide
a
@y t Gu
ano den
e
ald s Stu
g
vo_ e thi
a
ust o us
o (g se t
n
dea licen
l
Ga ble
rico sfera
e
Fed -tran
o
tav a non
s
Gu

Desarrollo y uso de mtodos


Copyright 2008 Sun Microsystems, Inc. Todos los derechos reservados. Sun Services, Revisin E.1

8-31

Unauthorized reproduction or distribution prohibited Copyright 2014, Oracle and/or its affiliates

Fundacin Proydesa

m
co
hoo ide
a
@y t Gu
ano den
e
ald s Stu
g
vo_ e thi
a
ust o us
o (g se t
n
dea licen
l
Ga ble
rico sfera
e
Fed -tran
o
tav a non
s
Gu

has
r)

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2014, Oracle and/or its affiliates

Mdulo 9

Implementacin de la encapsulacin y los


constructores
Objetivos

has
r)

a
om
c
oo e
h id
Usar la encapsulacin para proteger los datos. ya
u
no@ ent G
Crear constructores para inicializar objetos.
a
lde Stud
_ga this
En este mdulo se describe la forma de combinar los conceptos de
o
programacin OO y el lenguaje de se
tav u programacin Java presentados en este
s
curso para escribir programaso
(gu e t orientados a objetos con elementos
encapsuladosano se utilice un buen diseo y una buena
donde
e icens
implementacin.
ld
Ga ble l
rico sfera
e
Fed -tran
o
tav a non
s
Gu
El estudio de este mdulo le proporcionar los conocimientos necesarios
para:

9-1
Copyright 2008 Sun Microsystems, Inc. Todos los derechos reservados. Sun Services, Revisin E.1

Fundacin Proydesa
Comprobacin de los progresos

Comprobacin de los progresos


Unauthorized reproduction or distribution prohibited Copyright 2014, Oracle and/or its affiliates

Introduzca un nmero del 1 al 5 en la columna Principio del mdulo a


n de evaluar su capacidad para cumplir cada uno de los objetivos
propuestos. Al nalizar el mdulo, vuelva a evaluar sus capacidades y
determine la mejora de conocimientos conseguida por cada objetivo.

Objetivos del mdulo

Evaluacin
(1 = No puedo cumplir
este objetivo,
Mejora de
5 = He podido cumplir el
conocimientos
objetivo)
(Final
Principio del Final del Principio)

a
om
c
Usar la encapsulacin para
oo e
proteger los datos.
yah uid
@
G
Crear constructores para
ano dent
inicializar objetos.
e
ald s Stu
g
vo_ e los iServicios de Formacin Sun
th
El resultado de esta evaluacin a
st ayudarformacin. Por favor, indique una
sa
u o su
(SES) a determinar la efectividad de u
o (g se (un 0 o un 1 en la columna de la derecha) si
escasa mejora de conocimientos t
n
quiere que el dea
profesor cen
considere la necesidad de presentar ms material de
al lase li Asimismo, esta informacin se enviar al grupo
apoyo durante l clases.
G
deielaboracin de cursos de SES para revisar el temario de este curso.
co ferab
der ans
e
o F on-tr
v
sta a n
Gu

has
r)

mdulo

9-2

mdulo

Programacin Java para no Programadores


Copyright 2008 Sun Microsystems, Inc. Todos los derechos reservados. Sun Services, Revisin E.1

Fundacin Proydesa
Aspectos relevantes

Unauthorized reproduction or distribution prohibited Copyright 2014, Oracle and/or its affiliates

Aspectos relevantes

!
?

Discusin Las preguntas siguientes son relevantes para comprender los


conceptos sobre la encapsulacin y los constructores:

Los primeros ascensores y montacargas necesitaban la intervencin de


un operador que manejase una o varias poleas, cuerdas y engranajes
para hacer funcionar el mecanismo. Los ascensores modernos ocultan
al usuario los detalles y slo necesitan la pulsacin de unos cuantos
botones para funcionar. Cules son las ventajas de los ascensores
modernos comparados con los antiguos?

Muchos ascensores, como los montacargas de algunas fbricas,


requieren el uso de llaves para poder poner la maquinaria en
funcionamiento. Otros ascensores no pueden subir a determinados
pisos (como la planta superior de un hotel) si no se utiliza una llave.
Por qu estas llaves son importantes?

has
r)

m
co
hoo ide
a
Qu le sugieren las palabras private y public? y
@ t Gu
ano den
e
ald s Stu
g
vo_ e thi
a
ust o us
o (g se t
n
dea licen
l
Ga ble
rico sfera
e
Fed -tran
o
tav a non
s
Gu

Implementacin de la encapsulacin y los constructores


Copyright 2008 Sun Microsystems, Inc. Todos los derechos reservados. Sun Services, Revisin E.1

9-3

Fundacin Proydesa
Uso de la encapsulacin

Uso de la encapsulacin
Unauthorized reproduction or distribution prohibited Copyright 2014, Oracle and/or its affiliates

En programacin OO, el trmino encapsulacin se reere a la accin de


ocultar los datos dentro de una clase (una cpsula de seguridad) y hacer
que estn disponibles slo a travs de ciertos mtodos. La encapsulacin
es importante porque facilita a los programadores el uso de clases de
otros programadores e impide la modicacin inadecuada de ciertos
datos dentro de una clase.
En la gura siguiente se ilustra el concepto de encapsulacin mediante
una caja fuerte con una interfaz pblica (la combinacin de la caja) que,
cuando se utiliza de la forma adecuada, permite acceder al contenido
privado.

has
r)

m
co
hoo ide
a
@y t Gu
ano den
e
ald s Stu
g
vo_ e thi
a
ust o us
o (g se t
n
dea licen
l
Ga ble
rico sfera
e
Fed -tran
o
tav a non
s
Gu
Figura 9-1

Encapsulacin

El primer paso para conseguir que las clases estn bien encapsuladas es
aplicar los modicadores de visibilidad apropiados a la clase, las variables
de atributo y las declaraciones de mtodos.

Modificadores de visibilidad
Los atributos y mtodos pueden tener modicadores, como public,
que indican los niveles de acceso que otros objetos tienen para utilizar el
atributo o el mtodo. Los modicadores ms habituales son public y
private.

9-4

Programacin Java para no Programadores


Copyright 2008 Sun Microsystems, Inc. Todos los derechos reservados. Sun Services, Revisin E.1

Fundacin Proydesa
Uso de la encapsulacin

Unauthorized reproduction or distribution prohibited Copyright 2014, Oracle and/or its affiliates

Modificador public
En todos los ejemplos vistos en este curso se utiliza el modicador
public. Este modicador hace que la clase, sus atributos y mtodos estn
visibles para cualquier objeto de su programa.
En la gura siguiente se ve la imagen del ascensor de un hotel con acceso
libre (pblico) a cualquier planta de un edicio, incluidas aquellas reas
donde visitantes o huspedes no registrados normalmente no entraran.

Mandos
del ascensor

has
r)

m
5
Acceso pblico
co
hoo ide
a
4
Acceso pblico
@y t Gu
no en
3
Acceso pblicoa
e
ald s Stud
g i
2 o_
v Acceso pblico
th
sta use
u
o (g se1to Acceso pblico
n
dea licen P Acceso pblico
l
Ga ble
rico sfera
e
Fed -tran
o
tav a non
s
Gu
Figura 9-2 Plantas de acceso pblico con el ascensor

TM

Para hacer que un atributo o mtodo sea de acceso pblico, ponga el


modicador public delante del mtodo o de la variable correspondiente
al atributo.
public int currentFloor=1;
public void setFloor(int desiredFloor) {
...
}

Implementacin de la encapsulacin y los constructores


Copyright 2008 Sun Microsystems, Inc. Todos los derechos reservados. Sun Services, Revisin E.1

9-5

Fundacin Proydesa
Uso de la encapsulacin

Problemas potenciales derivados de los atributos Public

Unauthorized reproduction or distribution prohibited Copyright 2014, Oracle and/or its affiliates

El ejemplo de cdigo siguiente ilustra los problemas que surgen cuando


todos los atributos de un programa son public.
Cdigo 9-1

1
2
3
4
5
6
7
8
9
10
11
12

Archivo PublicElevator.java situado en el


directorio object_structure

public class PublicElevator {


public boolean doorOpen=false;
public int currentFloor = 1;
public int weight =0;

a
om
c
oo e
}
yah uid
@
G
ano dent
e
ald s Stu
En el cdigo anterior, todos los atributos son public, lo que permite
g
cambiar sus valores sin comprobar posibleshi
vo_ e t errores.
a
ust o us
El ejemplo siguiente o (g
cmo
escribirse un programa
n muestra e t podraobjeto PublicElevator, para
a ens
acceder directamente a los atributos de un
lo que
lde lic
provoca varios problemas.
Ga b
oCdigo 9-2le Archivo PublicElevatorTest.java situado en el
eric nsfera
directorio object_oriented
Fed -tra
o
tav a non
1s
Gu

has
r)

2
3
4
5
6
7
8
9
10
11
12
13
14
15

9-6

public final int CAPACITY=1000;


public final int TOP_FLOOR = 5;
public final int BOTTOM_FLOOR = 1;

public class PublicElevatorTest {

public static void main(String args[]) {


PublicElevator pubElevator = new PublicElevator();
pubElevator.doorOpen = true; //los usuarios entran en el ascensor
pubElevator.doorOpen = false; //las puertas se cierran
//descender a la planta 0 (debajo de la planta baja del edificio)
pubElevator.currentFloor--;
pubElevator.currentFloor++;
//pasar a la planta 7 (slo hay 5 plantas en el edificio)
pubElevator.currentFloor = 7;

Programacin Java para no Programadores


Copyright 2008 Sun Microsystems, Inc. Todos los derechos reservados. Sun Services, Revisin E.1

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2014, Oracle and/or its affiliates

Uso de la encapsulacin
16
17
18
19
20
abierta
21
22
23
24
}
25 }
26

pubElevator.doorOpen = true; //los usuarios entran/salen


pubElevator.doorOpen = false;
pubElevator.currentFloor = 1; //ir a la primera planta
pubElevator.doorOpen = true; //los usuarios entran/salen
pubElevator.currentFloor++; //el ascensor se mueve con la puerta
pubElevator.doorOpen = false;
pubElevator.currentFloor--;
pubElevator.currentFloor--;

Como la clase PublicElevator no utiliza encapsulacin, la clase


PublicElevatorTest puede cambiar los valores de sus atributos con
libertad y de muchas formas no deseables. Por ejemplo, en la lnea 11, el
valor del atributo currentFloor se reduce a 0, que podra no ser un piso
vlido. Asimismo, en la lnea 15, el atributo currentFloor se dene con
el valor 7, que, de acuerdo con la constante TOP_FLOOR, no es un piso
vlido (slo hay cinco plantas). stas son slo dos formas en las que la
clase PublicElevatorTest podra modicar un objeto PublicElevator
y provocar problemas en un programa.

has
r)

a
om
c
oo e
yah uid
@
G
ano dent
e
ald s Stu
g
vo_ e thi
a s
ustusar el modicador public slo con mtodos y
u
Nota En general, debera to
o (ga los que deban acceder directamente otros objetos.
n
variables de atributos nse
dea lice
l
Ga ble
rico sfera
e
Fed -tran
o
tav a non
s
Gu

Implementacin de la encapsulacin y los constructores


Copyright 2008 Sun Microsystems, Inc. Todos los derechos reservados. Sun Services, Revisin E.1

9-7

Fundacin Proydesa
Uso de la encapsulacin

Modificador private

Unauthorized reproduction or distribution prohibited Copyright 2014, Oracle and/or its affiliates

El modicador private impide que otros objetos puedan acceder a los


objetos de una determinada clase, sus atributos y sus mtodos.
En la gura siguiente se muestra la imagen de un ascensor donde hay una
planta de acceso privado. El acceso privado a determinados pisos protege
a sus huspedes y propiedades del acceso no autorizado por parte de
visitantes o personas no registradas.

Mandos
del ascensor

a
om
c
oo e
4
Acceso pblico
yah uid
@
G
3
Acceso pblico
ano dent
lde Stu
2
Accesoa
pblico
g
vo_ e this
ta us
us1 oAcceso pblico
o (g se t Acceso pblico
n
P
dea licen
l
Ga ble
4
rico sfera
e n
TM
Fed -tra
o
tav a non
s
Figura 9-3 Plantas de acceso privado con el ascensor
Gu

has
r)

Acceso privado
(cerrar puerta)

Para hacer que un atributo o mtodo sea de acceso privado, ponga el


modicador private delante del mtodo o de la variable correspondiente
al atributo.
private int currentFloor=1;
private void calculateCapacity() {
...
}

9-8

Programacin Java para no Programadores


Copyright 2008 Sun Microsystems, Inc. Todos los derechos reservados. Sun Services, Revisin E.1

Fundacin Proydesa
Uso de la encapsulacin
El siguiente ejemplo de cdigo ilustra la forma de encapsular los datos
dentro del ejemplo anterior del ascensor para impedir que los datos se
puedan modicar de forma inadecuada.

Unauthorized reproduction or distribution prohibited Copyright 2014, Oracle and/or its affiliates

Cdigo 9-3

1
2
3
4
5
6
7
8
9
10
11
12

Archivo PrivateElevator1.java situado en el


directorio object_oriented

public class PrivateElevator1 {


private boolean doorOpen=false;
private int currentFloor = 1;
private int weight =0;
private final int CAPACITY=1000;
private final int TOP_FLOOR = 5;
private final int BOTTOM_FLOOR = 1;

has
r)

a
om
c
}
oo e
yah uid
@ tG
ano denatributos private.
La clase PrivateElevator1 slo contiene variables de
e
ald s Stu
g
En el siguiente ejemplo de cdigo, unatreferencia a un objeto intenta
vo_ e hi
modicar las variables usta
privadas de la clase PrivateElevator1.
s
(g e to u
Cdigo 9-4
ano eArchivo PrivateElevator1Test.java situado en
ns
de lic el directorio object_oriented
l
Ga ble
rico sfera
1
e
2
public class PrivateElevator1Test {
Fed -tran
3 o
t4 v apublic static void main(String args[]) {
non
sa
Gu 5
6
PrivateElevator1 privElevator = new PrivateElevator1();
7
8
/*************************************************
9
* Las siguientes lneas de cdigo no se compilan *
10
* porque intentan acceder a variables de
*
11
* acceso privado.
*
12
**************************************************/
13
14
privElevator.doorOpen = true; //los usuarios entran en el ascensor
15
privElevator.doorOpen = false; //las puertas se cierran
16
//descender a currentFloor 0 (debajo de la planta baja del
edificio)
17
privElevator.currentFloor--;
18
privElevator.currentFloor++;

Implementacin de la encapsulacin y los constructores


Copyright 2008 Sun Microsystems, Inc. Todos los derechos reservados. Sun Services, Revisin E.1

9-9

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2014, Oracle and/or its affiliates

Uso de la encapsulacin
19
20
//pasar a currentFloor 7 (slo hay 5 plantas en el edificio)
21
privElevator.currentFloor = 7;
22
privElevator.doorOpen = true; //los usuarios entran/salen del
ascensor
23
privElevator.doorOpen = false;
24
privElevator.currentFloor = 1; //ir a la primera planta
25
privElevator.doorOpen = true; //los usuarios entran/salen del
ascensor
26
privElevator.currentFloor++; //el ascensor se mueve con la
puerta abierta
27
privElevator.doorOpen = false;
28
privElevator.currentFloor--;
29
privElevator.currentFloor--;
30
}
31 }
32

a
om
oc de
omain e la
El ejemplo de cdigo anterior no se compila porque el mtodo
ah de los
clase PrivateElevator1Test est intentando cambiar y valor uid
el
@ de G
atributos private de la clase PrivateElevator1o
an (lneasnt la 14 a la 29).
de Stude
alno es de mucha utilidad porque
g is
Sin embargo, la clase PrivateElevator1
vo_ de lahclase.
t
no hay forma de modicar los a
st valoresse
u ou
t
o (gmayora de los atributos de una clase, o todos
En un programa an la se
ideal,
ellos, se mantienen como n
lde
aver nie lice private. Ninguna clase externa a su propia
clase podr
G bl modicar los atributos privados. nicamente podrn
coy modicarlos los mtodos de su clase. Estos mtodos deberan
verlos
eri nsel cdigo y la lgica de negocio necesarios para garantizar que
fera
Fed contener
-t a
vo nonno rse asignarn valores inadecuado a las variables de los atributos.
a
ust a
G

has
r)

Interfaz e implementacin

Las declaraciones de mtodos y variables de atributos public a menudo


se conocen como la interfaz de una clase porque son los nicos elementos
que otra clase puede utilizar. Los detalles sobre cmo una clase realiza
una operacin dentro de un mtodo se denomina implementacin del
mtodo. Uno de los objetivos de una buena programacin OO es declarar
mtodos y variables de atributos public de forma que la implementacin
pueda cambiar sin que ello afecte a la interfaz.

9-10

Programacin Java para no Programadores


Copyright 2008 Sun Microsystems, Inc. Todos los derechos reservados. Sun Services, Revisin E.1

Fundacin Proydesa
Uso de la encapsulacin

Unauthorized reproduction or distribution prohibited Copyright 2014, Oracle and/or its affiliates

En la gura siguiente se ilustra la interfaz de un ascensor y dos


implementaciones distintas. Puede haber muchos ascensores en el mundo
que tengan la misma interfaz y diferentes implementaciones.

Mandos
del ascensor

has
r)

a
om
c
Sube
oo e
yah uid
Baja
@
G
ano dent
e
ald s Stu
g
vo_ e thi
a
ust o us
Ascensor 1 subiendo (g
Ascensor 2 subiendo
no nse t
a
lde lice
a
o G rable
e
eric nsfFigura 9-4 Interfaz e implementacin
ed tra
F
vo nona
Cuando las clases se encapsulan, otros objetos interaccionan slo con
ust a
G
algunas partes (mtodos) de las otras clases. Por ejemplo, un programador
puede cambiar el bloque de cdigo de un mtodo print tanto como sea
necesario, pero, si la declaracin de dicho mtodo print no cambia,
el cdigo que hace referencia a esa declaracin tampoco cambiar.

Implementacin de la encapsulacin y los constructores


Copyright 2008 Sun Microsystems, Inc. Todos los derechos reservados. Sun Services, Revisin E.1

9-11

Fundacin Proydesa
Uso de la encapsulacin

Unauthorized reproduction or distribution prohibited Copyright 2014, Oracle and/or its affiliates

Mtodos get y set


Si se asigna el modicador private a los atributos, cmo pueden
acceder a ellos otros objetos? Un objeto puede acceder a los atributos
private de otro objeto si ste ltimo proporciona mtodos public para
cada operacin que deban efectuar con los valores de los atributos. Por
ejemplo, es habitual proporcionar mtodos public para establecer (set) y
obtener (get) el valor contenido en cada atributo private de una clase.
El ejemplo siguiente contiene una clase PrivateShirt1 con atributos
private y un mtodo public para obtener y establecer el valor de la
variable colorCode.
Cdigo 9-5

Archivo PrivateShirt1.java situado en el


directorio object_oriented

has
r)

m
co
hoo ide
a
@y t Gu
ano den
e
ald s Stu
g
vo_ e thi
a
ust o us
o (g se t
n
dea licen
l
Ga ble
rico sfera
e
Fed -tran
o
tav a non
s
Gu

1
2
public class PrivateShirt1 {
3
4
private int shirtID = 0; // ID predeterminado para la camisa
5
private String description = -description required-; //
predeterminada
6
7
// Los cdigos de color son R=Rojo, B=Azul, G=Verde, U=Sin definir
8
private char colorCode = U;
9
private double price = 0.0; // Precio predeterminado para todos los
artculos
10
private int quantityInStock = 0; // Cantidad predeterminada para
todos los artculos
11
12
public char getColorCode() {
13
return colorCode;
14
}
15
16
public void setColorCode(char newCode) {
17
colorCode = newCode;
18
}
19
20
// Se agregaran otros mtodos get y set para shirtID, description,
21
// price y quantityInStock
22
23 } // fin de la clase
24
Aunque el cdigo es sintcticamente correcto, el mtodo setcolorCode
no contiene la lgica necesaria para garantizar el establecimiento de los
valores correctos.

9-12

Programacin Java para no Programadores


Copyright 2008 Sun Microsystems, Inc. Todos los derechos reservados. Sun Services, Revisin E.1

Fundacin Proydesa
Uso de la encapsulacin
La clase de prueba (test) del siguiente ejemplo establece un cdigo de
color no vlido en un objeto PrivateShirt1.

Unauthorized reproduction or distribution prohibited Copyright 2014, Oracle and/or its affiliates

Cdigo 9-6

Archivo PrivateShirt1Test.java situado en el


directorio object_oriented

1
2
public class PrivateShirt1Test {
3
4
public static void main (String args[]) {
5
6
PrivateShirt1 privShirt = new PrivateShirt1();
7
char colorCode;
8
9
// Establece un cdigo de color (colorCode) vlido
10
privShirt.setColorCode(R);
11
colorCode = privShirt.getColorCode();
12
13
// La clase PrivateShirtTest1 puede establecer un valor vlido para
colorCode
14
System.out.println(Cdigo de color: + colorCode);
15
16
// Establece un cdigo de color no vlido
17
privShirt.setColorCode(Z);
18
colorCode = privShirt.getColorCode();
19
20
// La clase PrivateShirtTest1 puede establecer un valor no vlido
para colorCode
21
System.out.println(Cdigo de color: + colorCode);
22
}
23 }
24

has
r)

a
om
c
oo e
yah uid
@
G
ano dent
e
ald s Stu
g
vo_ e thi
a
ust o us
o (g se t
n
dea licen
l
Ga ble
rico sfera
e
Fed -tran
o
tav a non
s
Gu
El cdigo de la clase test anterior no slo establece un color vlido (R) en la
lnea 10, sino tambin un color incorrecto (Z) en la lnea 17. Puede hacerlo
porque la clase PrivateShirt1 no est adecuadamente encapsulada para
impedir el establecimiento de cdigos de color no vlidos.
Lo saba? Los mtodos destinados a obtener y establecer valores a
menudo se conocen como mtodos get y set.

Los mtodos que utilice deberan contener lgica de negocio adicional para
validar la accin que se va a realizar. Por ejemplo, deberan comprobar si
los valores se encuentran en el rango adecuado antes de establecerlos.

Implementacin de la encapsulacin y los constructores


Copyright 2008 Sun Microsystems, Inc. Todos los derechos reservados. Sun Services, Revisin E.1

9-13

Fundacin Proydesa
Uso de la encapsulacin
A continuacin gura otra versin de la clase PrivateShirt1.
No obstante, antes de establecer el valor, esta clase se asegura de que
todos los valores que recibe sean vlidos.

Unauthorized reproduction or distribution prohibited Copyright 2014, Oracle and/or its affiliates

Cdigo 9-7

Archivo PrivateShirt2.java situado en el


directorio object_oriented

1
2
public class PrivateShirt2 {
3
4
private int shirtID = 0; // ID predeterminado para la camisa
5
private String description = -description required-; //
predeterminada
6
7
// Los cdigos de color son R=Rojo, B=Azul, G=Verde, U=Sin definir
8
private char colorCode = U;
9
private double price = 0.0; // Precio predeterminado para todos los
artculos
10
private int quantityInStock = 0; // Cantidad predeterminada para
todos los artculos
11
12
public char getColorCode() {
13
return colorCode;
14
}
15
16
public void setColorCode(char newCode) {
17
18
switch (newCode) {
19
case R:
20
case G:
21
case B:
22
colorCode = newCode;
23
break;
24
default:
25
System.out.println(Cdigo de color no vlido. Utilice R, G o
B);
26
}
27
}
28
29
// Se agregaran otros mtodos get y set para shirtID, description,
30
// price y quantityInStock
31
32 } // fin de la clase
33

has
r)

m
co
hoo ide
a
@y t Gu
ano den
e
ald s Stu
g
vo_ e thi
a
ust o us
o (g se t
n
dea licen
l
Ga ble
rico sfera
e
Fed -tran
o
tav a non
s
Gu

9-14

Programacin Java para no Programadores


Copyright 2008 Sun Microsystems, Inc. Todos los derechos reservados. Sun Services, Revisin E.1

Fundacin Proydesa
Uso de la encapsulacin

Unauthorized reproduction or distribution prohibited Copyright 2014, Oracle and/or its affiliates

El mtodo setColorCode (lnea 16) comprueba la validez del cdigo de


color utilizando una sentencia switch. Si se pasa un cdigo de color no
vlido al mtodo setColorCode, aparece un error en la pantalla (lnea 25).
Despus de escribir una clase encapsulando sus datos con la palabra clave
private y declarar los mtodos get y set, puede escribir una clase que
llame a los citados mtodos para acceder a los valores del objeto.
El ejemplo de cdigo siguiente contiene una clase de prueba que llama a
los mtodos get y set de la clase PrivateShirt2 encapsulada.
Cdigo 9-8

Archivo PrivateShirt2Test.java situado en el


directorio object_oriented

1
2
public class PrivateShirt2Test {
3
4
public static void main (String args[]) {
5
PrivateShirt2 privShirt = new PrivateShirt2();
6
char colorCode;
7
8
// Establece un cdigo de color (colorCode) vlido
9
privShirt.setColorCode(R);
10
colorCode = privShirt.getColorCode();
11
12
// La clase PrivateShirtTest2 puede establecer un valor vlido
para colorCode
13
System.out.println(Cdigo de color: + colorCode);
14
15
// Establece un cdigo de color no vlido
16
privShirt.setColorCode(Z);
17
colorCode = privShirt.getColorCode();
18
19
// La clase PrivateShirtTest2 puede establecer un valor no
vlido para colorCode
20
// El cdigo de color sigue siendo R
21
System.out.println(Cdigo de color: + colorCode);
22
}
23 }
24

has
r)

m
co
hoo ide
a
@y t Gu
ano den
e
ald s Stu
g
vo_ e thi
a
ust o us
o (g se t
n
dea licen
l
Ga ble
rico sfera
e
Fed -tran
o
tav a non
s
Gu

La clase de prueba del ejemplo anterior no puede asignar el color incorrecto


(Z) en la lnea 16. No puede hacerlo porque PrivateShirt2Test est
adecuadamente encapsulada para impedir el establecimiento de cdigos
de color no vlidos.

Implementacin de la encapsulacin y los constructores


Copyright 2008 Sun Microsystems, Inc. Todos los derechos reservados. Sun Services, Revisin E.1

9-15

Fundacin Proydesa
Uso de la encapsulacin

Programa de ascensor encapsulado

Unauthorized reproduction or distribution prohibited Copyright 2014, Oracle and/or its affiliates

En el ejemplo de cdigo siguiente se ilustra la forma de encapsular el


programa del ascensor para impedir problemas durante su uso.
Cdigo 9-9

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24

Archivo PrivateElevator2.java situado en el


directorio object_oriented

public class PrivateElevator2 {


private boolean doorOpen=false;
private int currentFloor = 1;
private int weight = 0;

m
co
hoo ide
a
@y t Gu
public void openDoor() {
ano den
e
doorOpen = true;
ald s Stu
g
}
vo_ e thi
ta us
public void closeDoor() { gus
( e to
calculateCapacity(); no
s
dea licen
l
if (weight <= a
e
G CAPACITY) {
doorOpen = false;
co ferabl
ri s
} de
Fe { n
o else n-tra
v System.out.println(El ascensor est sobrecargado.);
sta a no
System.out.println(Las puertas permanecern abiertas hasta
Gu
private final int CAPACITY = 1000;
private final int TOP_FLOOR = 5;
private final int BOTTOM_FLOOR = 1;

que salga alguien!);

25
26
27
28
29
30
31
32
33

9-16

}
}
//
//
//
//

En realidad, el ascensor debera tener sensores de peso para


comprobar el peso, pero, para mayor
simplicidad, hemos utilizado un nmero aleatorio para
representar la carga que lleva

private void calculateCapacity() {

Programacin Java para no Programadores


Copyright 2008 Sun Microsystems, Inc. Todos los derechos reservados. Sun Services, Revisin E.1

has
r)

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2014, Oracle and/or its affiliates

Uso de la encapsulacin
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
{
70
71
72
73
74
75
76
77
78

weight = (int) (Math.random() * 1500);


System.out.println(El peso es + weight);
}
public void goUp() {
if (!doorOpen) {
if (currentFloor < TOP_FLOOR) {
currentFloor++;
System.out.println(currentFloor);
}
else {
System.out.println(Ya est en la planta superior.);
}
}
else {
System.out.println(Las puertas siguen abiertas!);
}
}

has
r)

m
co
hoo ide
a
@y t Gu
public void goDown() {
ano den
if (!doorOpen) {
e
if (currentFloor > BOTTOM_FLOOR) { ld
a s Stu
g
currentFloor--;
vo_ e thi
a
System.out.println(currentFloor);
ust o us
}
o (g se t
n
else {
dea licen est en la planta baja.);
System.out.println(Ya
al le
} o G
b
}eric
era
f
else ans
{
Fed -System.out.println(Las puertas siguen abiertas!);
tr
avo non }
ust a }
G

public void setFloor(int desiredFloor) {


if ((desiredFloor >= BOTTOM_FLOOR) && (desiredFloor<=TOP_FLOOR))

while (currentFloor != desiredFloor) {


if (currentFloor < desiredFloor) {
goUp();
}
else {
goDown();
}

Implementacin de la encapsulacin y los constructores


Copyright 2008 Sun Microsystems, Inc. Todos los derechos reservados. Sun Services, Revisin E.1

9-17

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2014, Oracle and/or its affiliates

Uso de la encapsulacin
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93

}
}
else {
System.out.println(Piso no vlido);
}
}
public int getFloor() {
return currentFloor;
}
public boolean getDoorStatus() {
return doorOpen;
}

m
co
hoo ide
a
@y t Gu
ano den
e
ald s Stu
g
vo_ e thi
a
ust o us
o (g se t
n
dea licen
l
Ga ble
rico sfera
e
Fed -tran
o
tav a non
s
Gu
El ejemplo anterior contiene atributos private y mtodos public que
se utilizan para acceder a las variables de los atributos. Los mtodos
garantizan que los valores que se establezcan para las variables de
atributo sern apropiados.

9-18

has
r)

Programacin Java para no Programadores


Copyright 2008 Sun Microsystems, Inc. Todos los derechos reservados. Sun Services, Revisin E.1

Fundacin Proydesa
Uso de la encapsulacin
En el ejemplo de cdigo siguiente se muestra cmo acceder a las variables
de atributo de la clase PrivateElevator2 utilizando mtodos public.

Unauthorized reproduction or distribution prohibited Copyright 2014, Oracle and/or its affiliates

Cdigo 9-10

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32

Archivo PrivateElevator2Test.java situado en


el directorio object_oriented

public class PrivateElevator2Test {


public static void main(String args[]) {
PrivateElevator2 privElevator = new PrivateElevator2();
privElevator.openDoor();
privElevator.closeDoor();
privElevator.goDown();
privElevator.goUp();
privElevator.goUp();
privElevator.openDoor();
privElevator.closeDoor();
privElevator.goDown();
privElevator.openDoor();
privElevator.goDown();
privElevator.closeDoor();
privElevator.goDown();
privElevator.goDown();

has
r)

m
co
hoo ide
a
@y t Gu
ano den
e
ald s Stu
g
vo_ e thi
a
ust o us
o (g se t
n
dea licen
l
Ga ble
int curFloor = privElevator.getFloor();
rico sfera
e n
if
a
Fed -(curFloor != 5 && ! privElevator.getDoorStatus()) {
privElevator.setFloor(5);
vo non tr
a
ust a }
G
privElevator.setFloor(10);
privElevator.openDoor();
}
}

Dado que la clase PrivateElevator2 no permite la manipulacin directa


de los atributos de la clase, PrivateElevator2Test slo puede hacer
llamadas a mtodos que acten sobre las variables de atributos de la clase.
Estos mtodos realizan comprobaciones para conseguir que se utilicen los
valores correctos antes de realizar una tarea y que el ascensor no haga
nada inesperado.

Implementacin de la encapsulacin y los constructores


Copyright 2008 Sun Microsystems, Inc. Todos los derechos reservados. Sun Services, Revisin E.1

9-19

Fundacin Proydesa
Uso de la encapsulacin

Unauthorized reproduction or distribution prohibited Copyright 2014, Oracle and/or its affiliates

Toda la lgica compleja de este programa est encapsulada en los


mtodos public de la clase PrivateElevator2. Por tanto, el cdigo de
la clase de prueba es fcil de leer y mantener. Este concepto es una de las
muchas ventajas de la encapsulacin.

Ejemplo de resultado del cdigo


La salida de la clase PrivateElevator2 es distinta cada vez que se
ejecuta. A continuacin se muestra un ejemplo del resultado de la clase
Elevator2Test (en la versin inglesa).
Cdigo 9-11

Archivo sample.txt situado en el directorio


object_oriented

The weight is 453


Already on bottom floor.
2
3
The weight is 899
2
Doors still open!
The weight is 974
1
Already on bottom floor.
2
3
4
5

a
om
c
oo e
yah uid
@
G
ano dent
e
ald s Stu
g
vo_ e thi
a
ust o us
o (g se t
n
dea licen
l
Ga ble
rico sfera
e
Fed -tran
o
tav a nonLa clase Elevator2 no admite instrucciones para efectuar tareas no
s
vlidas porque est adecuadamente encapsulada. Por ejemplo, el ascensor
Gu

has
r)

no puede desplazarse a un piso no vlido ni cargar ms de 500 kilos de


peso o moverse cuando las puertas estn abiertas.

9-20

Programacin Java para no Programadores


Copyright 2008 Sun Microsystems, Inc. Todos los derechos reservados. Sun Services, Revisin E.1

Fundacin Proydesa
Descripcin del mbito de las variables

Unauthorized reproduction or distribution prohibited Copyright 2014, Oracle and/or its affiliates

Descripcin del mbito de las variables


Las variables declaradas dentro de un mtodo, un constructor u otro
bloque de cdigo no pueden utilizarse a lo largo de una clase. El mbito
de una variable se reere a la medida en que esa variable puede utilizarse
dentro de un programa. Por ejemplo, las variables de atributos se declaran
al comienzo de una clase, lo que permite utilizarlas a lo largo de todo el
objeto. No obstante, si una variable se dene dentro de un mtodo, slo
puede utilizarse dentro de ese mtodo. Este tipo de variables se
denominan variables locales.
En el ejemplo siguiente se muestra el mbito de la variable de atributo
age y la variable name.
Cdigo 9-12

Archivo Person2.java situado en el directorio


object_oriented

m
co
hoo ide
1
public class Person2 {
a
2
@y t Gu
3
// principio del mbito de int age
ano den
e
4
private int age = 34;
ald s Stu
g
5
vo_ e thi
6
public void displayName() { sta
s
(gu e to u
7
// principio del mbito de String name
s
ano Simmons;
8
String name = de
Petericen
l
9
System.out.println(Me llamo + name + y tengo + age );
Ga ble l
10
rico sfera
e fin
11
}
Fed// trandel mbito de String name
12 o
a
ont13v apublic String getName () {
n
s
Gu 14
15
16
17

has
r)

return name; // esto provoca un error


}
}

// fin del mbito de int age


Dado que la variable de atributo age est denida fuera de los mtodos
(lnea 4), dicha variable existir mientras dure un objeto basado en la clase
(el mbito de age es la clase completa).

Implementacin de la encapsulacin y los constructores


Copyright 2008 Sun Microsystems, Inc. Todos los derechos reservados. Sun Services, Revisin E.1

9-21

Fundacin Proydesa
Descripcin del mbito de las variables

Unauthorized reproduction or distribution prohibited Copyright 2014, Oracle and/or its affiliates

Sin embargo, la variable name se ha declarado en el mtodo displayName


(lnea 6), lo que hace que slo exista mientras dure el mtodo. Si se hace
referencia a la variable name desde otro mtodo como, por ejemplo,
getName (lneas de la 13 a la 16), provoca un error del compilador.
Dado que las variables declaradas en bucles o sentencias if slo son
vlidas en el interior del bucle o la sentencia, debera identicar los
problemas relativos al mbito de las variables en todo momento,
especialmente al utilizar bucles y sentencias if.

Forma en que las variables de instancia y locales


aparecen en la memoria

has
r)

Las variables de instancia o atributo se almacenan en una parte de la


memoria distinta de aquella utilizada para almacenar las variables locales.

m
co
hoo de e
En la gura siguiente se ilustra cmo se almacenan las ya
variables d
@ t Gui
instancia y las locales.
n
anoargs[]) {
public static void main (String ude
lde St
_ga this
o
int counter = 100;
tavnewsShirt ( );
s
Shirt myShirt = u e
(gu e to = 425566 ;
myShirt.shirtID
o s
} ean
n
ld
ice
a le l
o G counter 100
0x034009
ric sferab
de an
e
425566 shirtID
o F on-tr
0.0
price
v
myShirt 0x034009
sta a n
U
colorCode
Gu
Memoria
de la pila

Figura 9-5

9-22

Memoria dinmica

Variables de instancia y locales en la memoria

Programacin Java para no Programadores


Copyright 2008 Sun Microsystems, Inc. Todos los derechos reservados. Sun Services, Revisin E.1

Fundacin Proydesa
Descripcin del mbito de las variables

Unauthorized reproduction or distribution prohibited Copyright 2014, Oracle and/or its affiliates

La variable shirtID es una variable de instancia o atributo que est


contenida en un objeto Shirt. Como hemos dicho anteriormente, todos
los atributos de objetos y mtodos se almacenan en el espacio de memoria
dinmica.
counter es una variable local declarada dentro de un mtodo, un
constructor u otro bloque de cdigo. La variable counter se almacena en
la pila de memoria porque slo es necesaria hasta que naliza el mtodo,
el constructor el bloque de cdigo que la contiene.
Autoevaluacin De las armaciones siguientes sobre las variables
locales, seleccione aquellas que sean ciertas.
a. ___

Las variables locales tambin se denominan


variables de atributo.

m
b. ___
Las variables locales se almacenan en la pila.
co
hoo i
c. ___
Las variables locales se almacenan en el espacio dede
a
memoria dinmica.
@y t Gu
n
ano daelo largo de
d. ___
Las variables locales puedene
ld utilizarse
u
t
toda la clase.
_ga this S
vo e
e. ___
Las variables ta
locales slo estn disponibles durante
s
s
el tiempo que setejecute un mtodo, un constructor
(gu e o u
u otro bloque de cdigo.
ano ens
e
ald le lic
G
co ferab
i
s
der Autoevaluacin Cul es el mbito de la variable x?
Fe -tran
o
tav a non 1 public void counter(int startingNumber) {
s
Gu
2
3
4
5
6

has
r)

for (int x = startingNumber; x<100; ++x) {


System.out.println(Total: + x);
}
}

a. ___

Lneas de la 1 a la 6

b. ___

Desde la lnea 3 hasta el nal de la 4

c. ___

Desde la lnea 3 hasta la llave de cierre de la lnea 5

d. ___

Desde la lnea 3 hasta la llave de cierre de la lnea 6

e. ___

Desde la lnea 3 hasta el nal de la clase

Implementacin de la encapsulacin y los constructores


Copyright 2008 Sun Microsystems, Inc. Todos los derechos reservados. Sun Services, Revisin E.1

9-23

Fundacin Proydesa
Creacin de constructores

Creacin de constructores
Unauthorized reproduction or distribution prohibited Copyright 2014, Oracle and/or its affiliates

Los constructores son estructuras similares a los mtodos a las que se


llama automticamente cuando se instancia un objeto. Normalmente se
utilizan para inicializar valores en un objeto.
La sintaxis de los constructores es similar a la de las declaraciones de
mtodos:
[modificadores] class NombreClase {
[modificadores] NombreConstructor([argumentos]) {
bloque_cdigo
}
}

a
om
c
Donde:
oo e
[modificadores] representa determinadas palabras claveuid
yah de Java
G
que modican la forma en que se accede a no@
los constructores.
a dent
Los modicadores son opcionales (como indican los corchetes).
de
alde un Stu constructor.
g
NombreConstructor es el nombre
s mtodo
vo_ e thial valor de NombreClase en
El nombre de constructor a
debe ser igual
t
la declaracin de clase.
gus to us
( e
norepresenta uno o varios valores opcionales pasados
s
[argumentos]
dea licen
l
al constructor.
Ga ble
bloque_cdigo representa una o varias lneas de cdigo opcionales
rico sfera
de adel constructor.
n
e
o F on-tr
v
sta a n
Gu

has
r)

9-24

Programacin Java para no Programadores


Copyright 2008 Sun Microsystems, Inc. Todos los derechos reservados. Sun Services, Revisin E.1

Fundacin Proydesa
Creacin de constructores
El ejemplo de cdigo siguiente muestra una clase con un constructor que
establece el valor de una variable de atributo.

Unauthorized reproduction or distribution prohibited Copyright 2014, Oracle and/or its affiliates

Cdigo 9-13

Archivo ConstructorShirt1.java situado en el


directorio object_oriented

1
2
public class ConstructorShirt1 {
3
4
private int shirtID = 0; // ID predeterminado para la camisa
5
private String description = -description required-; //
predeterminada
6
7
// Los cdigos de color son R=Rojo, B=Azul, G=Verde, U=Sin definir
8
private char colorCode = U;
9
private double price = 0.0; // Precio predeterminado para todos los
artculos
10
private int quantityInStock = 0; // Cantidad predeterminada para
todos los artculos
11
12
public ConstructorShirt1(char startingCode) {
13
14
switch (startingCode) {
15
case R:
16
case G:
17
case B:
18
colorCode = startingCode;
19
break;
20
default:
21
System.out.println(Cdigo de color no vlido. Utilice R, G o
B);
22
}
23
}
24
25
public char getColorCode() {
26
return colorCode;
27
}
28 } // fin de la clase
29

has
r)

m
co
hoo ide
a
@y t Gu
ano den
e
ald s Stu
g
vo_ e thi
a
ust o us
o (g se t
n
dea licen
l
Ga ble
rico sfera
e
Fed -tran
o
tav a non
s
Gu

La clase mostrada en el ejemplo anterior contiene un constructor


llamado ConstructorShirt1 que acepta un valor char para inicializar
el cdigo de color de ese objeto (lneas de la 12 a la 23). El constructor
ConstructorShirt1 garantiza el paso de un cdigo vlido antes de
establecer el cdigo.

Implementacin de la encapsulacin y los constructores


Copyright 2008 Sun Microsystems, Inc. Todos los derechos reservados. Sun Services, Revisin E.1

9-25

Fundacin Proydesa
Creacin de constructores
El siguiente ejemplo de cdigo ilustra una clase que crea una variable de
referencia a un objeto ConstructorShirt1 e inicializa la variable de
atributo colorCode.

Unauthorized reproduction or distribution prohibited Copyright 2014, Oracle and/or its affiliates

Cdigo 9-14

1
2
3
4
5
6
7
8
9
10
11
12
13
14

Archivo ConstructorShirt1Test.java situado en


el directorio object_oriented

public class ConstructorShirt1Test {


public static void main (String args[]) {
ConstructorShirt1 constShirt = new ConstructorShirt1(R);
char colorCode;

a
om
c
System.out.println(Cdigo de color: + colorCode);
oo e
}
yah uid
}
@
G
ano dent
e
ald s Stu
g i
En este ejemplo, se crea una variable de referencia a un objeto llamada
vo_ e objeto ConstructorShirt1.
th
constShirt y se inicializa cona nuevo
st un us
u o
Cuando se crea el objetog
ConstructorShirt1,
t
o (conse cdigo de color la llamada al constructor
n
de ese objeto se efecta n un
(lnea 6).
dea lice
l
Ga ble
Nota Comoa el caso de los mtodos, es posible sobrecargar los
rico sfer en
e n
una clase, cada
Fed constructores incluyendo varios constructores en de argumentos. uno
o ondetra con el mismo nombre y diferentes series
- ellos
v
sta a n
Gu

has
r)

colorCode = constShirt.getColorCode();

Constructor predeterminado
Si el compilador de Java encuentra una clase que no tiene ningn
constructor denido de forma explcita (uno que haya escrito el
programador), introduce un constructor predeterminado. El constructor
predeterminado slo se crea para cumplir los requisitos del compilador.
De hecho, a lo largo de todo este curso hemos estado utilizando el
constructor predeterminado. Cuando se utiliza el modicador new para
instanciar un objeto cuya clase no contiene ningn constructor explcito, la
palabra clave new llama automticamente al constructor predeterminado
de la clase.

9-26

Programacin Java para no Programadores


Copyright 2008 Sun Microsystems, Inc. Todos los derechos reservados. Sun Services, Revisin E.1

Fundacin Proydesa
Creacin de constructores

Unauthorized reproduction or distribution prohibited Copyright 2014, Oracle and/or its affiliates

Shirt shirt1 = new Shirt();


Shirt() es el constructor predeterminado (introducido por el compilador)
de la clase Shirt. Sin embargo, el constructor predeterminado nunca
aparece en el cdigo en s.
Si declara su propio constructor, o constructores, evitar que el
compilador introduzca el constructor predeterminado en el cdigo.
Puesto que la clase ConstructorShirtOne ya contiene un constructor
denido de forma expresa, la siguiente lnea de cdigo provocara un
error:
ConstructorShirt1 constShirt = new ConstructorShirt1();

has
No obstante, puede crear su propio constructor sin argumentos agregando
ar)
a la clase un constructor que no acepte argumentos. En el siguiente m
co ejemplo
de cdigo se muestra una clase que contiene un constructor o una
con
declaracin similar a la del constructor predeterminado. h
a o uide
y
G
o@situado en el
Cdigo 9-15 Archivo DefaultShirt.java nt
an de
e
directorio object_oriented
ald s Stu
g
vo_ e thi
a
1
ust o us
2
public class DefaultShirt (g
{
o se t
3
n
4
private int shirtID = 0;en ID predeterminado para la camisa
dea lic //
l
5
private String description = -description required-; //
Ga ble
predeterminada o
eric nsfera
6
ed cdigos de color son R=Rojo, B=Azul, G=Verde, U=Sin definir
7 o F Los tra
//
a
ont8 v aprivate char colorCode = U;
n
s
private double price = 0.0; // Precio predeterminado para todos los
Gu 9
artculos
10
private int quantityInStock = 0; // Cantidad predeterminada para
todos los artculos
11
12
public DefaultShirt() {
13
colorCode = R;
14
}
15
16
public char getColorCode() {
17
return colorCode;
18
}
19 } // fin de la clase
20

En este ejemplo, cuando se efecta la llamada al constructor predeterminado


(lnea 12), la variable de atributo colorCode se inicializa con R.
Implementacin de la encapsulacin y los constructores
Copyright 2008 Sun Microsystems, Inc. Todos los derechos reservados. Sun Services, Revisin E.1

9-27

Fundacin Proydesa
Creacin de constructores

Sobrecarga de constructores

Unauthorized reproduction or distribution prohibited Copyright 2014, Oracle and/or its affiliates

Al igual que los mtodos, los constructores tambin pueden sobrecargarse.


La sobrecarga de constructores ofrece una amplia variedad de formas de
crear e inicializar objetos utilizando una sola clase. En el ejemplo de cdigo
siguiente, hay tres constructores.
Cdigo 9-16

Archivo ConstructorShirt2.java situado en el


directorio object_oriented

1
2
public class ConstructorShirt2 {
3
4
private int shirtID = 0; // ID predeterminado para la camisa
5
private String description = -description required-; //
predeterminada
6
7
// Los cdigos de color son R=Rojo, B=Azul, G=Verde, U=Sin definir
8
private char colorCode = U;
9
private double price = 0.0; // Precio predeterminado para todos los
artculos
10
private int quantityInStock = 0; // Cantidad predeterminada para
todos los artculos
11
12
public ConstructorShirt2() {
13
colorCode = R;
14
}
15
16
public ConstructorShirt2 (char startingCode) {
17
18
switch (startingCode) {
19
case R:
20
case G:
21
case B:
22
colorCode = startingCode;
23
break;
24
default:
25
System.out.println(Cdigo de color no vlido. Utilice R, G o
B);
26
}
27
}

has
r)

m
co
hoo ide
a
@y t Gu
ano den
e
ald s Stu
g
vo_ e thi
a
ust o us
o (g se t
n
dea licen
l
Ga ble
rico sfera
e
Fed -tran
o
tav a non
s
Gu

28
{
29

9-28

public ConstructorShirt2 (char startingCode, int startingQuantity)

Programacin Java para no Programadores


Copyright 2008 Sun Microsystems, Inc. Todos los derechos reservados. Sun Services, Revisin E.1

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2014, Oracle and/or its affiliates

Creacin de constructores
30
31
32
33
34
35
36
37
38
39
40
41
B);
42
43
44
45
46
47
48
49
50
51
52
53
54
55

switch (startingCode) {
case R:
colorCode = startingCode;
break;
case G:
colorCode = startingCode;
break;
case B:
colorCode = startingCode;
break;
default:
System.out.println(Cdigo de color no vlido. Utilice R, G o
}

has
r)

a
om
c
oo e
yah uid
else {
no@ t G
aDebe den> 0 o < 2000);
System.out.println(Cantidad no vlida.
ser
e
}
ald s Stu
g
}
vo_ e thi
a
u{st o us
public char getColorCode()
o (g se t
return colorCode; n
a
}
lde licen
a
o G rable
c
eriint sfe
n
56
public
Fedreturn getQuantityInStock() {
o on-tra quantityInStock;
57v
a
st58 a}n
u 59
G
60
61

if (startingQuantity > 0 && startingQuantity < 2000) {


quantityInStock = startingQuantity;
}

} // fin de la clase

La clase ConstructorShirt2 contiene tres constructores declarados en


las lneas 12, 16 y 28. El constructor ConstructorShirt2() no acepta
argumentos e inicializa la variable de atributo colorCode con el valor R
(lneas de la 12 a la 14). El constructor ConstructorShirt2(char
startingCode) acepta un cdigo de color inicial (lneas de la 16 a la 27).
Por ltimo, el constructor ConstructorShirt2(char startingCode,
int startingQuantity) acepta un cdigo de color inicial y una cantidad
en stock (lneas de la 28 a la 51).

Implementacin de la encapsulacin y los constructores


Copyright 2008 Sun Microsystems, Inc. Todos los derechos reservados. Sun Services, Revisin E.1

9-29

Fundacin Proydesa
Creacin de constructores
El siguiente ejemplo de cdigo crea tres objetos utilizando los tres
constructores de la clase ConstructorShirt2.

Unauthorized reproduction or distribution prohibited Copyright 2014, Oracle and/or its affiliates

Cdigo 9-17

Archivo ConstructorShirt2Test situado en el


directorio object_oriented

1
2
public class ConstructorShirt2Test {
3
4
public static void main (String args[]) {
5
6
ConstructorShirt2 constShirtFirst = new ConstructorShirt2();
7
ConstructorShirt2 constShirtSecond = new ConstructorShirt2(G);
8
ConstructorShirt2 constShirtThird = new ConstructorShirt2(B,
1000);
9
10
char colorCode;
11
int quantity;
12
13
colorCode = constShirtFirst.getColorCode();
14
System.out.println(Cdigo de color del objeto 1: + colorCode);
15
16
colorCode = constShirtSecond.getColorCode();
17
System.out.println(Cdigo de color del objeto 2: + colorCode);
18
19
colorCode = constShirtThird.getColorCode();
20
quantity = constShirtThird.getQuantityInStock();
21
System.out.println(Cdigo de color del objeto 3: + colorCode);
22
System.out.println(Cantidad en stock del objeto 3: + quantity);
23
}
24 }
25

has
r)

m
co
hoo ide
a
@y t Gu
ano den
e
ald s Stu
g
vo_ e thi
a
ust o us
o (g se t
n
dea licen
l
Ga ble
rico sfera
e
Fed -tran
o
tav a non
s
Gu

La clase ConstructorShirt2Test crea tres objetos ConstructorShirt2


y llama a cada uno de los tres constructores (lneas de la 6 a la 8).

9-30

Programacin Java para no Programadores


Copyright 2008 Sun Microsystems, Inc. Todos los derechos reservados. Sun Services, Revisin E.1

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2014, Oracle and/or its affiliates

Mdulo 10

Creacin y uso de matrices (arrays)


Objetivos

has
r)

El estudio de este mdulo le proporcionar los conocimientos necesarios


para:

a
om
Escribir cdigo con arrays unidimensionales.
oc
olength y un
Establecer los valores del array utilizando el atributo
yah uide
@ tG
bucle.
anouso enun programa.
Pasar argumentos al mtodo mainde su ud en
al para St
g
Crear arrays bidimensionales.
vo_ e this
a s
ustla forma de usar arrays para manejar mltiples
u
g
En este mdulo se describe to
o (variable.
n
valores en la misma nse
dea lice
l
Ga ble
rico sfera
e
Fed -tran
o
tav a non
s
Gu

10-1
Copyright 2008 Sun Microsystems, Inc. Todos los derechos reservados. Sun Services, Revisin E.1

Fundacin Proydesa
Comprobacin de los progresos

Comprobacin de los progresos


Unauthorized reproduction or distribution prohibited Copyright 2014, Oracle and/or its affiliates

Introduzca un nmero del 1 al 5 en la columna Principio del mdulo a


n de evaluar su capacidad para cumplir cada uno de los objetivos
propuestos. Al nalizar el mdulo, vuelva a evaluar sus capacidades y
determine la mejora de conocimientos conseguida por cada objetivo.

Objetivos del mdulo

Evaluacin
(1 = No puedo cumplir
este objetivo,
Mejora de
5 = Puedo cumplir este
conocimientos
objetivo)
(Final
Principio
Final del Principio)

a
om
c
Codicar arrays
oo e
unidimensionales.
yah uid
@
G
Establecer los valores del array
ano dent
utilizando el atributo length y
e
ald s Stu
un bucle.
g
vo_ e thi
Pasar argumentos al mtodo ta
s
s
main para su uso en un gu
( e to u
programa.
ano ens
e
Crear arrays bidimensionales.
ald le lic
G
co ferab
i
s
der resultado de esta evaluacin ayudar a los Servicios de Formacin Sun
El
Fe (SES) ndeterminar la efectividad de su formacin. Por favor, indique una
traa
o
tav a nonescasa mejora de conocimientos (un 0 o un 1 en la columna de la derecha) si
s
Gu
quiere que el profesor considere la necesidad de presentar ms material de

has
r)

del mdulo mdulo

apoyo durante las clases. Asimismo, esta informacin se enviar al grupo


de elaboracin de cursos de SES para revisar el temario de este curso.

10-2

Programacin Java para no Programadores


Copyright 2008 Sun Microsystems, Inc. Todos los derechos reservados. Sun Services, Revisin E.1

Fundacin Proydesa
Comprobacin de los progresos

Unauthorized reproduction or distribution prohibited Copyright 2014, Oracle and/or its affiliates

Notas

has
r)

m
co
hoo ide
a
@y t Gu
ano den
e
ald s Stu
g
vo_ e thi
a
ust o us
o (g se t
n
dea licen
l
Ga ble
rico sfera
e
Fed -tran
o
tav a non
s
Gu

Creacin y uso de matrices (arrays)


Copyright 2008 Sun Microsystems, Inc. Todos los derechos reservados. Sun Services, Revisin E.1

10-3

Fundacin Proydesa
Aspectos relevantes

Unauthorized reproduction or distribution prohibited Copyright 2014, Oracle and/or its affiliates

Aspectos relevantes

!
?

Discusin Las preguntas siguientes son relevantes para comprender los


conceptos sobre los arrays:

Un array es una serie de elementos dispuestos en orden, como una


lista. Para qu utiliza la gente los arrays en su vida cotidiana?

Si un array unidimensional es una lista de elementos, qu es un


array bidimensional?

Cmo se accede a los elementos de un array?

has
r)

m
co
hoo ide
a
@y t Gu
ano den
e
ald s Stu
g
vo_ e thi
a
ust o us
o (g se t
n
dea licen
l
Ga ble
rico sfera
e
Fed -tran
o
tav a non
s
Gu

10-4

Programacin Java para no Programadores


Copyright 2008 Sun Microsystems, Inc. Todos los derechos reservados. Sun Services, Revisin E.1

Fundacin Proydesa
Creacin de arrays unidimensionales

Unauthorized reproduction or distribution prohibited Copyright 2014, Oracle and/or its affiliates

Creacin de arrays unidimensionales


Imagine un programa en el que almacene las edades de 10 personas.
Podra crear variables diferentes para guardar cada uno de los 10 valores.
Por ejemplo:
int
int
int
int
int
int
int
int
int
int

ageOne = 27;
ageTwo = 12;
ageThree = 82;
ageFour = 70;
ageFive = 54;
ageSix = 6;
ageSeven = 1;
ageEight = 30;
ageNine = 34;
ageTen = 42;

has
r)

a
om
c
oo eA
Pero, qu pasara si tuviese que almacenar 1000 o 10000 edades?
ah u d
medida que crece el nmero de valores, el programay vuelveims y ms
se
@
G
difcil de manejar.
ano dent
e
ald s Studel mismo tipo (listas)
El lenguaje Java permite agrupar _g
mltiplesi valores
vo Lostarrays son tiles cuando se dispone
utilizando arrays unidimensionales. e h
a
ust o u las
de varios datos relacionados (comos edades de diferentes personas) pero
o (g se t
no se quieren crear variables distintas para guardar cada dato.
n
dea licen
l
En la gura siguiente se ilustran varios arrays unidimensionales.
Ga ble
rico sfderenteros (int)
e Array e a
Fed -tran
o
425566
15
200
1
1151
7205
8000
609834
tav a non
s
Gu
Array de camisas (Shirts)

Array de secuencias de caracteres (Strings)

gh

Hu

Mo

i
at

ro

Aa

an

St

ki

ng

Di

be

rt

Al

r
Ke

Ca

rr

ie

re

u
ng

ey

K
De

er

lo

l
Me

lt

Wa

gh

Hu

ri

r
Mo

aw

L
De

Mo

Figura 10-1 Ejemplos de arrays unidimensionales

Creacin y uso de matrices (arrays)


Copyright 2008 Sun Microsystems, Inc. Todos los derechos reservados. Sun Services, Revisin E.1

10-5

Fundacin Proydesa
Creacin de arrays unidimensionales
Es posible crear un array de tipos primitivos, como int, o un array de
referencias a tipos de objetos, como Shirt.

Unauthorized reproduction or distribution prohibited Copyright 2014, Oracle and/or its affiliates

Cada parte del array es un elemento. Si declara un array de 100 tipos int,
habr 100 elementos.
Puede acceder a cada elemento concreto utilizando su ubicacin o ndice
dentro del array.

Declaracin de un array unidimensional


Los arrays se controlan mediante un objeto Array implcito (que no est
disponible en el API de Java, pero est disponible en su cdigo). Como en
el caso de cualquier otro objeto, debe declarar una referencia al array,
instanciar un objeto Array e inicializar ese objeto para poder utilizarlo.
La sintaxis utilizada para declarar matrices unidimensionales es como
sigue:

a
om
c
oo e
yah uid
@
G
tipo [] identificador_array;
ano dent
e
ald s Stu
Donde:
g
vo_ e thi o el tipo de objeto
tipo representa el tiposta
de dato primitivo
us
gu toalmacenados en el array.
correspondiente a ( valores
los
o se
an[], indican al compilador que se est declarando un
Los corchetes,
lde licen
a
array.
o G rable
e
eric identificador_array es el nombre asignado al array.
ed transf
F vo nonUtilice el cdigo siguiente para declarar un array de valores char llamado
a
status y un array de valores int llamado ages.
ust a
G

has
r)

char [] status;
int [] ages;
Utilice el cdigo siguiente para declarar un array de referencias a Shirt
llamado shirts y un array de referencias a String llamado names.
Shirt [] shirts;
String [] names;

Nota Los corchetes de apertura y cierre tambin pueden aparecer despus


del identificador. Por ejemplo: tipo identificador_array [].

10-6

Programacin Java para no Programadores


Copyright 2008 Sun Microsystems, Inc. Todos los derechos reservados. Sun Services, Revisin E.1

Fundacin Proydesa
Creacin de arrays unidimensionales

Unauthorized reproduction or distribution prohibited Copyright 2014, Oracle and/or its affiliates

Cuando declara un array, el compilador y la mquina virtual de Java


(JVM) no saben qu longitud tendr porque ha declarado variables de
referencia que en ese momento no sealan a ningn objeto.

Instanciacin de un array unidimensional


Para poder inicializar un array, es preciso instanciar un objeto Array lo
sucientemente grande como para dar cabida a todos los valores del
array. Un array se instancia deniendo el nmero de elementos que
contiene. La sintaxis para instanciar objetos Array es como sigue:
identificador_array = new tipo [longitud];

has
r)

Donde:

a
om
c
tipo representa el tipo de dato primitivo o el tipo de objeto
oo e
h
correspondiente a los valores almacenados en el a
y array. uid
@
G
longitud representa el tamao (nmeroo elementos) del array.
an de dent
e
ald s Stu
Utilice el cdigo siguiente parao_g
h
v instanciariun array de valores char
llamado status y un arraya valores t
de
st use int llamado ages.
gu [20];
status = o ( char to
new
e
ages = new ints
ean icen [5];
ld
l
Ga cdigo siguiente para instanciar un objeto Array llamado names
o elrable
Utilice
eric nsfe referencias a String y un array de referencias al objeto
que contiene
a
Fed -trShirt llamado shirts.
vo non
a
names = new String [7];
ust a
G

identificador_array es el nombre asignado al array.

shirts = new Shirt [3];

Cuando se instancia un objeto Array cada elemento primitivo se inicializa


con el valor cero correspondiente al tipo especicado. En el caso del
array de tipo char llamado status, cada valor se inicializa con \u0000
(el carcter vaco del juego de caracteres Unicode). En el caso del array
int llamado ages, el valor inicial es el valor entero 0. En cuanto a los
arrays names y shirt, las referencias al objeto se inicializan con null.
Nota Los arrays de un determinado tipo de objeto pueden contener
referencias de objeto.

Creacin y uso de matrices (arrays)


Copyright 2008 Sun Microsystems, Inc. Todos los derechos reservados. Sun Services, Revisin E.1

10-7

Fundacin Proydesa
Creacin de arrays unidimensionales

Inicializacin de un array unidimensional

Unauthorized reproduction or distribution prohibited Copyright 2014, Oracle and/or its affiliates

Es posible escribir el contenido un array despus de crear el array.


La sintaxis para denir los valores de un array es:
identificador_array[ndice] = valor;
Donde:

identificador_array es el nombre asignado al array.

ndice representa el lugar del array donde se situar el valor.

Nota El primer elemento de un array se sita en el ndice 0 y el ltimo


elemento se sita en el lugar correspondiente al valor de longitud
menos 1. Por tanto, el ltimo elemento de un array de seis elementos es
el ndice 5.

has
r)

m
co
hoo ide
a
valor es el valor que se asigna al ndice en el array.
@y t Gu
ano den ages:
e
Utilice el cdigo siguiente para establecerllos valores del array
a d s Stu
g
ages[0] = 19;
vo_ e thi
a s
ages[1] = 42; ust
u
ages[2] = 92; (g
o se to
ages[3] = n
a 33;
lde licen
ages[4] = 46;
a
o G rable
e
eric nel fcdigo siguiente para establecer los valores del array shirts:
ed Utilice s
F -tra
vo nonshirts[0] = new Shirt();
a
shirts[1] = new Shirt(G);
ust a
G
shirts[2] = new Shirt(G, 1000);

La palabra clave new se utiliza para crear los objetos Shirt y situar las
referencias a dichos objetos en cada posicin del array.

10-8

Programacin Java para no Programadores


Copyright 2008 Sun Microsystems, Inc. Todos los derechos reservados. Sun Services, Revisin E.1

Fundacin Proydesa
Creacin de arrays unidimensionales

Unauthorized reproduction or distribution prohibited Copyright 2014, Oracle and/or its affiliates

Declaracin, instanciacin e inicializacin de arrays


unidimensionales
Si conoce los valores que va a incluir en el array en el momento de
declararlo, puede declarar, instanciar y denir los valores del objeto
Array en la misma lnea de cdigo. La sintaxis de esta declaracin,
instanciacin e inicializacin combinada de valores es como sigue:
tipo [] identificador_array =
{lista_de_valores_o_expresiones_separados_por_coma};
Donde:

has
r)

tipo representa el tipo de dato primitivo o el tipo de objeto


correspondiente a los valores almacenados en el array.

a
om
c
oo e
h
identificador_array es el nombre asignado ya
al array.uid
@
G
{lista_de_valores_o_expresiones_separados_por_coma}
ano dent
e a
representa una lista de valores que se van tu
ald s Sse almacenar en en array o
gresultados almacenarn el el array.
_
una lista de expresiones cuyos
i
avo se th
t
gus to u
La sentencia siguiente combina los anteriores ejemplos de declaracin,
( e
instanciacin ano
e inicializacin del array ages:
s
de agese=n{19, 42, 92, 33, 46};
c
al
Gint []le li
ab
rico sferse pueden establecer valores para cada objeto (con una referencia
e n
a se almacena en un array) utilizando el constructor de cada objeto.
Fed -trTambin
vo non quesentencia siguiente combina el anterior ejemplo de declaracin,
a
La
ust a
instanciacin e inicializacin del array shirt:
G

Los corchetes, [], indican al compilador que se est declarando un


array.

Shirt [] shirts = { new Shirt(), new Shirt(G), new Shirt(G,1000) };


No es posible declarar e inicializar un array en lneas diferentes utilizando
la lista de valores separados por coma. El cdigo siguiente devolvera un
error:
int [] ages;
ages = {19, 42, 92, 33, 46};

Creacin y uso de matrices (arrays)


Copyright 2008 Sun Microsystems, Inc. Todos los derechos reservados. Sun Services, Revisin E.1

10-9

Fundacin Proydesa
Creacin de arrays unidimensionales

Acceso a un valor dentro de un array

Unauthorized reproduction or distribution prohibited Copyright 2014, Oracle and/or its affiliates

El acceso a cada elemento de un array se realiza a travs de su ndice.


Para acceder a un valor del array, indique el nombre del array y el
nmero de ndice del elemento (entre corchetes []) a la derecha de un
operador de asignacin.
En el siguiente ejemplo de cdigo se muestra cmo establecer el valor de
un determinado ndice del array:
status[0] = 3;
names[1] = "Fred Smith";
ages[1] = 19;
prices[2] = 9.99F;

m
co
hoo ide
a
char s = status[0];
@y t Gu
String name = names [1];
ano den
int age = ages[1];
e tu
double price = prices[2]; gald
S
o_ this
v
sta use
u
o (g se to
n
dea licen
l
Ga ble
rico sfera
e
Fed -tran
o
tav a non
s
Gu
En el ejemplo siguiente se muestra cmo recuperar valores de un
determinado ndice del array:

10-10

Programacin Java para no Programadores


Copyright 2008 Sun Microsystems, Inc. Todos los derechos reservados. Sun Services, Revisin E.1

has
r)

Fundacin Proydesa
Creacin de arrays unidimensionales

Unauthorized reproduction or distribution prohibited Copyright 2014, Oracle and/or its affiliates

Almacenamiento de arrays unidimensionales en la


memoria
Los arrays son objetos a los que hace referencia una variable de referencia
a objetos.
En la gura siguiente se ilustra la forma en que se almacena en la
memoria un array de tipos de datos primitivos frente a la forma en que se
almacena un tipo primitivo.
char size = ' L'
char [] sizes = {'S','M','L'};

has
r)

a
om
c
oo e
0x334009 yah
d
@ t Gui
0
o n
nS
1a M de
e
ald 2s Stu
g i L
size
L o_
v
th
sta use
sizes u 0x334009
o (g se to
n
Memoria
dea licen de la pila Memoria dinmica
l
a le
o G 10-2 bAlmacenamiento de variables primitivas y arrays de datos
Figura
eric nsfera primitivos en la memoria
d a
e
o F on-tr
v
sta a n
Gu
Nota La lnea de cdigo de la gura aparecera en algn mtodo como,
por ejemplo, main.

El valor de la variable size (un tipo primitivo char) es L. El valor de


sizes[] es 0x334009 y seala a un objeto del tipo array de valores
char compuesto de tres valores. El valor de sizes[0] es char S, el valor
de sizes[1] es char M y el valor de sizes[2] es char L.

Creacin y uso de matrices (arrays)


Copyright 2008 Sun Microsystems, Inc. Todos los derechos reservados. Sun Services, Revisin E.1

10-11

Fundacin Proydesa
Creacin de arrays unidimensionales

Almacenamiento de variables de referencia y arrays de


referencias en la memoria

Unauthorized reproduction or distribution prohibited Copyright 2014, Oracle and/or its affiliates

En la gura siguiente se muestra cmo se guarda un array de referencias


en la memoria.
1 Shirt myShirt = new Shirt();
2 Shirt [] shirts = {new Shirt(),
new Shirt(),
new Shirt()};
0x99f311
0
0.0
U

shirtID
price
colorCode

m
co
shirtID
0
myShirt 0x99f311
hoo ide
a
0.0 y price u
@ tG
shirts 0x179009
colorCode
anoU den
lde Stu
0x179009
_ga this 0x00327
vo
0 ta
0x00099e
shirtID
0
us
gus 0x00327
1
(
0.0
to
price
no n2se 0x00990
a
U
colorCode
lde lice
a le
G
0x00990
co ferab
ri s
e
shirtID
0
Fed -tran
o
0.0
price
tav a non
s
U
colorCode
Gu
0x00099

Memoria
de la pila

Memoria dinmica

Figura 10-3 Almacenamiento de variables de referencia y arrays de


referencias en la memoria

Nota La lnea de cdigo de la gura aparecera en un mtodo como,


por ejemplo, main.

10-12

Programacin Java para no Programadores


Copyright 2008 Sun Microsystems, Inc. Todos los derechos reservados. Sun Services, Revisin E.1

has
r)

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2014, Oracle and/or its affiliates

Creacin de arrays unidimensionales


El valor de la referencia al objeto myShirt es x99f311, que es una
direccin que seala a un objeto de tipo Shirt con los valores 0, 0.0 y U.
El valor de la referencia al objeto shirts[] es x179009, una direccin que
seala a un objeto de tipo array de referencias a objetos Shirt formado
por tres referencias a objetos:

El valor del ndice shirts[0] es 0x00099, es decir, una referencia


que seala a un objeto de tipo Shirt con los valores 0, 0 y U.

El valor del ndice shirts[1] es 0x00327, es decir, una referencia


que seala a un objeto de tipo Shirt con los valores 0, 0 y U.

El valor del ndice shirts[2] es 0x00990, es decir, una referencia


que seala a un objeto de tipo Shirt con los valores 0, 0 y U.

has
r)

m
co
hoo ide
a
@y t Gu
ano den
e
ald s Stu
g
vo_ e thi
a
ust o us
o (g se t
n
dea licen
l
Ga ble
rico sfera
e
Fed -tran
o
tav a non
s
Gu

Creacin y uso de matrices (arrays)


Copyright 2008 Sun Microsystems, Inc. Todos los derechos reservados. Sun Services, Revisin E.1

10-13

Fundacin Proydesa
Establecimiento de valores de arrays utilizando el atributo length y un bucle

Establecimiento de valores de arrays utilizando el atributo


length y un bucle
Unauthorized reproduction or distribution prohibited Copyright 2014, Oracle and/or its affiliates

Establecer los valores de los arrays es una tarea tediosa porque es


preciso escribir una lnea de cdigo para denir cada elemento del array.
Sin embargo, es posible usar un bucle para ir recorriendo cada elemento
del array y establecer los distintos valores.

Atributo length
Todos los objetos Array tienen una variable de atributo llamada length
que contiene la longitud del array.

a
om
c
oo e
yah uid
@ tG
El nmero de elementos de un array se almacenan como n
ano de parte del objeto
e utiliza
array. El software de la mquina virtualald
de Java Stu la longitud para
g
asegurarse de que cada acceso al array se corresponda con un elemento
vo_ e this
a
actual del array.
ust o us
o (g se t a un elemento que no existe, por
Si se produce unan
intento de acceder
de licenn cdigo un valor ages[21] para un array
ejemplo, especicando e el
al longitud [10], se producir un error.
ageso Gtiene ble
que
eric nsfera
Fed -tra
o Establecimiento de los valores del array utilizando un
tav a non
s
bucle
Gu

has
r)

La longitud se conoce tambin como los lmites del array. Los lmites de
un array como ages[10] van de ages[0] a ages[9] porque todos los
arrays empiezan con el elemento cero (0).

Es posible usar el atributo length de la clase Array en la parte condicional


de un bucle para iterar en un array. En el ejemplo siguiente se ilustra la
forma de iterar a lo largo de un array utilizando un bucle.
int [] myArray;
myArray = new int[100];
for (int count = 0; count < myArray.length; count++) {
myArray[count] = count;
}

10-14

Programacin Java para no Programadores


Copyright 2008 Sun Microsystems, Inc. Todos los derechos reservados. Sun Services, Revisin E.1

Fundacin Proydesa
Establecimiento de valores de arrays utilizando el atributo length y un bucle

Unauthorized reproduction or distribution prohibited Copyright 2014, Oracle and/or its affiliates

En este ejemplo, cada ndice de myArray se llena con un valor equivalente


al nmero de ndice (count). Por ejemplo, myArray[10] es 10,
myArray[99] es 99 y as sucesivamente.

Bucle for mejorado


Existe otra forma de la sentencia for diseada para iterar en los arrays.
A veces esta forma se conoce como sentencia for mejorada y puede
utilizarse para hacer los bucles ms compactos y fciles de leer. Observe el
array siguiente, que est formado por una serie de nmeros:
int [] numbers ={1,3,5,7,9,11,13,15,17,19}
El programa siguiente utiliza la sentencia for mejorada para ir
recorriendo el array incluido en el bucle y mostrar la suma de los
nmeros que contiene.

has
r)

a
om
c
oo e
class ExampleFor {
yah uid
public static void main(String[] args){
@
G
int[] numbers = {1,3,5,7,9,11,13,15,17,19};
ano dent
e
int sum=0;
ald s Stu
for (int item : numbers) {
_g i
sum = sum avo
+ item; th
t
e
}
gus to us suma es: " + sum);
(
System.out.println("La
no nse
a
lde lice
a}
o G rable
}
eric nsfe
a
Fed -trSe recomienda usar esta forma de sentencia for siempre que sea posible.
vo non
a
ust a
G

Creacin y uso de matrices (arrays)


Copyright 2008 Sun Microsystems, Inc. Todos los derechos reservados. Sun Services, Revisin E.1

10-15

Fundacin Proydesa
Uso del array args en el mtodo main

Uso del array args en el mtodo main


Unauthorized reproduction or distribution prohibited Copyright 2014, Oracle and/or its affiliates

Ya hemos visto un ejemplo de uso de un array como argumento del


mtodo main. El array args acepta un nmero indeterminado de objetos
String:
public static void main (String args[]);
Cuando se pasan secuencias o cadenas de caracteres a un programa
desde la lnea de comandos, esas secuencias se escriben en el array args.
Para utilizarlas, es preciso extraerlas del array args y, opcionalmente,
convertirlas en el tipo de dato apropiado.
El siguiente ejemplo de cdigo ilustra el paso de secuencias de caracteres
al mtodo main de un programa.

ma
olnea
La clase ArgsTest extrae dos argumentos String pasados desde c
oo la e
de comandos y los muestra en la pantalla.
yah uid
@ tG
Cdigo 10-1 Archivo ArgsTest.java en el directorio en
ano d arrays
e
ald s Stu
g
1
public class ArgsTest {
vo_ e thi
2
a
ust o us
3
public static void main (String args[]) {
o (g se t
4
n
5
System.out.println(args[0] es + args[0]);
dea licen es + args[1]);
l
6
System.out.println(args[1]
Ga ble
7
}
rico sfera
e
8
}
Fed -tran
9
o
tav a non
s
Gu

has
r)

Nota Sus programas deberan mostrar una lista de argumentos vlidos a


cualquier usuario que los utilice. La mayora de los programas utilizados
desde la lnea de comandos presenta una lista de argumentos aceptados si:
se introduce el nombre del programa sin ningn argumento, se introduce
el nombre del programa con un argumento no vlido o se introduce
explcitamente un argumento que indique al programa que debe mostrar
una lista de argumentos aceptados (tal como la -h de ayuda).

10-16

Programacin Java para no Programadores


Copyright 2008 Sun Microsystems, Inc. Todos los derechos reservados. Sun Services, Revisin E.1

Fundacin Proydesa
Uso del array args en el mtodo main

Unauthorized reproduction or distribution prohibited Copyright 2014, Oracle and/or its affiliates

Conversin de argumentos String en otros tipos


El mtodo main trata todo lo que se escribe como una secuencia literal.
Si quiere utilizar la representacin literal de un nmero en una expresin,
debe convertir la secuencia en el valor numrico equivalente. Cada tipo de
dato tiene una clase asociada que contiene mtodos utilitarios static para
convertir las secuencias literales en ese tipo de dato (clase Integer para
int, clase Byte para byte, clase Long para long y as sucesivamente).
Por ejemplo, para convertir el primer argumento pasado al mtodo main
en un tipo int:
int ID = Integer.parseInt(args[0]);

has
r)

a
om
c
oomtodo que
La funcin varargs (argumentos variables) permite crear un
de
yah uiejemplo
pueda aceptar un nmero variable de argumentos. Imagine el
@
G
siguiente:
ano dent
e
ald s Stu
class VarMessage{
g
public static void showMessage(String... names) {
vo_ e thi
a
for (String ust names)
list: us
System.out.println(list);
o (g se to
n
}
dea licen main (String args[]){
l
public static
e
GashowMessage void
(args)
co ferabl
ri s
e
Fed -tran}
o
tav a non }En primer lugar, el argumento names est denido como un tipo String....
s
Gu
Funcin varargs

La declaracin del parmetro contiene puntos suspensivos. Esto indica


al compilador que el cdigo de llamada puede pasar un nmero variable
de parmetros String. De esta forma, es posible compilar y ejecutar el
programa anterior, por ejemplo:
java VarMessage Joe Harry o
java VarMessage Joe Harry Sam Henry Peter

En general, un mtodo puede tener como mximo un parmetro que sea


un argumento variable (vararg), debe ser el ltimo parmetro recibido por
el mtodo y se expresa mediante el tipo de objeto, los puntos suspensivos
(... ) y el nombre de la variable.

Creacin y uso de matrices (arrays)


Copyright 2008 Sun Microsystems, Inc. Todos los derechos reservados. Sun Services, Revisin E.1

10-17

Fundacin Proydesa
Descripcin de los arrays bidimensionales

Descripcin de los arrays bidimensionales


Unauthorized reproduction or distribution prohibited Copyright 2014, Oracle and/or its affiliates

Es posible almacenar tambin matrices de datos utilizando arrays


multidimensionales (arrays de arrays). Un array bidimensional (un array
de arrays) es parecido a una hoja de clculo con mltiples columnas (cada
columna representa un array o una lista de elementos) y mltiples las.

Sbado

Viernes

Jueves

Mircoles

Martes

Lunes

Domingo

En la gura siguiente se ilustra un array bidimensional.

Semana 1

m
co
Semana 2
hoo ide
a
@y t Gu
Semana 3
ano den
e
ald s Stu
g
Semana 4
vo_ e thi
a
ust o us
o (g se t
n
Figura 10-4 Array bidimensional
dea licen
l
Ga ble
rico sfera
e
Fed -tran
o
tav a non
s
Gu

10-18

Programacin Java para no Programadores


Copyright 2008 Sun Microsystems, Inc. Todos los derechos reservados. Sun Services, Revisin E.1

has
r)

Fundacin Proydesa
Descripcin de los arrays bidimensionales

Unauthorized reproduction or distribution prohibited Copyright 2014, Oracle and/or its affiliates

Declaracin de un array bidimensional


Los arrays bidimensionales necesitan un segundo par de corchetes en la
declaracin. Por lo dems, el proceso de crear y usar arrays bidimensionales
es similar al de los arrays unidimensionales. La sintaxis para declarar un
array bidimensional es como sigue:
tipo [][] identificador_array;
Donde:

tipo representa el tipo de dato primitivo o el tipo de objeto


correspondiente a los valores almacenados en el array.

Los corchetes, [] [], indican al compilador que se est declarando


un array bidimensional.

has
r)

a
om la
identificador_array es el nombre asignado al array durante
c
oo e
declaracin.
yah uid
@ paraG
En el ejemplo siguiente se declara un array de o
an arrays nt conocer las
e
ventas trimestrales durante cinco aos.de
al s Stud
g
int [][] yearlySales;o
v _ e thi
a
ust o us
(g e t
oun array bidimensional
Instanciacin an ens
de
lde lic
Ga ble
osintaxis para instanciar un array bidimensional es como sigue:
La
eric nsfera
a
Fed -tridentificador_array = new tipo [nmero_de_arrays] [longitud];
vo non
a
ust a
G
Donde:

identificador_array es el nombre asignado al array durante la


declaracin.

nmero_de_arrays es el nmero de arrays contenidos en el array.

longitud es la longitud de cada array dentro del array.

Creacin y uso de matrices (arrays)


Copyright 2008 Sun Microsystems, Inc. Todos los derechos reservados. Sun Services, Revisin E.1

10-19

Fundacin Proydesa
Descripcin de los arrays bidimensionales
En el ejemplo siguiente se instancia un array de arrays para obtener las
ventas trimestrales durante cinco aos.

Unauthorized reproduction or distribution prohibited Copyright 2014, Oracle and/or its affiliates

// Instancia un array bidimensional: 5 arrays de 4 elementos cada uno


yearlySales = new int[5][4];
Este array bidimensional crea una matriz como sta:
Trimestre 1

Trimestre 2

Trimestre 3

Trimestre 4

Ao 1
Ao 2
Ao 3

has
r)

Ao 4

a
om
c
oo e
ah uid
El array yearlySales contiene cinco arrays de tipo inty
(cinco subarrays).
G
o@
Cada subarray tiene un tamao de cuatro elementos y hace el seguimiento
anao.dent
de las ventas durante los cuatro trimestresde un tu
de
gal is S
_
avo se th
t
Inicializacin de un array bidimensional
gus to u
(
no nse
a
Al establecerde valorese un array bidimensional, indique el valor de
l los lic de
a
e
ndice utilizando lun nmero para representar la la seguido de otro
o G rrepresente la columna. He aqu algunos ejemplos de cmo
c que ab
i
nmero
der ansfe valores del array yearlySales (ventas anuales):
e establecer los
o F on-tr yearlySales[0][0] = 1000;
v
sta a n
yearlySales[0][1] = 1500;
Gu
Ao 5

yearlySales[0][2]
yearlySales[1][0]
yearlySales[2][0]
yearlySales[3][3]

10-20

=
=
=
=

1800;
1000;
1400;
2000;

Programacin Java para no Programadores


Copyright 2008 Sun Microsystems, Inc. Todos los derechos reservados. Sun Services, Revisin E.1

Fundacin Proydesa
Descripcin de los arrays bidimensionales
El ejemplo de cdigo anterior da lugar a la siguiente matriz o array
bidimensional:

Unauthorized reproduction or distribution prohibited Copyright 2014, Oracle and/or its affiliates

Trimestre 1

Trimestre 2

Trimestre 3

Ao 1

1000

1500

1800

Ao 2

1000

Ao 3

1400

Ao 4

Trimestre 4

2000

Ao 5

has
r)

m
co
hoo ide
a
@y t Gu
ano den
e
ald s Stu
g
vo_ e thi
a
ust o us
o (g se t
n
dea licen
l
Ga ble
rico sfera
e
Fed -tran
o
tav a non
s
Gu

Creacin y uso de matrices (arrays)


Copyright 2008 Sun Microsystems, Inc. Todos los derechos reservados. Sun Services, Revisin E.1

10-21

Unauthorized reproduction or distribution prohibited Copyright 2014, Oracle and/or its affiliates

Fundacin Proydesa

m
co
hoo ide
a
@y t Gu
ano den
e
ald s Stu
g
vo_ e thi
a
ust o us
o (g se t
n
dea licen
l
Ga ble
rico sfera
e
Fed -tran
o
tav a non
s
Gu

has
r)

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2014, Oracle and/or its affiliates

Mdulo 11

Implementacin de la herencia
Objetivos

has
r)

El estudio de este mdulo le proporcionar los conocimientos necesarios


para:

a
om
c
Denir y vericar el uso de la herencia.
oo e
Explicar el concepto de abstraccin.
yah uid
@
Identicar de forma explcita las bibliotecas de clases G
ano dent utilizadas en su
e
cdigo.
ald s Stu
_g th
voconceptosi de herencia y abstraccin, y la
En este mdulo se describen los
e
sta conceptos en el lenguaje Java.
forma de implementar u
amboso us
g
(
no nse t
a
lde lice
a
o G rable
eric nsfe
Fed -tra
o
tav a non
s
Gu

11-1
Copyright 2008 Sun Microsystems, Inc. Todos los derechos reservados. Sun Services, Revisin E.1

Fundacin Proydesa
Comprobacin de los progresos

Comprobacin de los progresos


Unauthorized reproduction or distribution prohibited Copyright 2014, Oracle and/or its affiliates

Introduzca un nmero del 1 al 5 en la columna Principio del mdulo a


n de evaluar su capacidad para cumplir cada uno de los objetivos
propuestos. Al nalizar el mdulo, vuelva a evaluar sus capacidades y
determine la mejora de conocimientos conseguida por cada objetivo.

Objetivos del mdulo

Evaluacin
(1 = No puedo cumplir
este objetivo,
Mejora de
5 = Puedo cumplir este
conocimientos
objetivo)
(Final
Principio
Final del Principio)

a
om
c
Denir y vericar el uso de la
oo e
herencia.
yah uid
@
G
Explicar el concepto de
ano dent
abstraccin.
e
ald s Stu
g
Identicar de forma explcita
vo_ e thi
a
las bibliotecas de clases
ust o us
utilizadas en su cdigo. g
(
no nse t
dea lice
El resultado lde esta evaluacin ayudar a los Servicios de Formacin Sun
a
(SES)o determinar la efectividad de su formacin. Por favor, indique una
a G able
escasa mejora
eric nsfer de conocimientos (un 0 o un 1 en la columna de la derecha) si
ed quiere que el profesor considere la necesidad de presentar ms material de
F -tra
vo nonapoyo durante las clases. Asimismo, esta informacin se enviar al grupo
a
de elaboracin de cursos de SES para revisar el temario de este curso.
ust a
G

has
r)

del mdulo mdulo

11-2

Programacin Java para no Programadores


Copyright 2008 Sun Microsystems, Inc. Todos los derechos reservados. Sun Services, Revisin E.1

Fundacin Proydesa
Comprobacin de los progresos

Unauthorized reproduction or distribution prohibited Copyright 2014, Oracle and/or its affiliates

Notas

has
r)

m
co
hoo ide
a
@y t Gu
ano den
e
ald s Stu
g
vo_ e thi
a
ust o us
o (g se t
n
dea licen
l
Ga ble
rico sfera
e
Fed -tran
o
tav a non
s
Gu

Implementacin de la herencia
Copyright 2008 Sun Microsystems, Inc. Todos los derechos reservados. Sun Services, Revisin E.1

11-3

Fundacin Proydesa
Aspectos relevantes

Unauthorized reproduction or distribution prohibited Copyright 2014, Oracle and/or its affiliates

Aspectos relevantes

!
?

Discusin Las preguntas siguientes son relevantes para comprender los


conceptos sobre la herencia:

La herencia se reere a la transferencia de propiedades de un


organismo a otro. Qu caractersticas fsicas ha heredado?

De quin ha heredado esas caractersticas?

De qu jerarqua de clases procede?

Ha heredado caractersticas de mltiples clases?

A qu nos referimos cuando decimos que algo es abstracto?

Qu cree que es una clase abstracta?

m
co
hoo ide
a
@y t Gu
ano den
e
ald s Stu
g
vo_ e thi
a
ust o us
o (g se t
n
dea licen
l
Ga ble
rico sfera
e
Fed -tran
o
tav a non
s
Gu

11-4

Programacin Java para no Programadores


Copyright 2008 Sun Microsystems, Inc. Todos los derechos reservados. Sun Services, Revisin E.1

has
r)

Fundacin Proydesa
Herencia

Unauthorized reproduction or distribution prohibited Copyright 2014, Oracle and/or its affiliates

Herencia
Caso de estudio Utilizaremos el siguiente caso para ilustrar conceptos
intermedios del anlisis y el diseo OO.
El mximo responsable de DirectClothing, Inc. ha decidido que la compaa
ample su lnea de productos para incluir gorros, calcetines y pantalones.
La decisin le lleva a darse cuenta de que necesitar cambiar el sistema de
introduccin de pedidos previamente desarrollado. Como consecuencia,
DirectClothing le ha contratado para poner al da el citado sistema de forma
que incorpore estos tipos de productos.
A fin de poder desarrollar las clases necesarias para hacer la actualizacin,
deber realizar un breve anlisis del nuevo sistema y determinar que los
gorros, los calcetines y los pantalones son los nicos objetos nuevos que van
a introducirse (en el dominio del problema). Adems recibe la siguiente
informacin:

has
r)

a
om
c
oo e
yah d
Slo se vendern gorros y calcetines de talla nica. Gui
@ t
anopara hombres y mujeres.
Los modelos de pantalones sern distintos den
e
ald s Styu
Los pantalones se vendern eng
colores azul tostado, mientras que los
vo_ e tse ivendern en rojo, azul y verde.
gorros, los calcetines y a camisas h
las
ust o us
o (g se t
A continuacin, deber disear el nuevo sistema modelando las clases
n
que se utilizarn para n
dea lice crear estos objetos. En las dos guras siguientes se
l
ilustran las nuevas clases y la clase Shirt previamente denida.
Ga ble
rico sfera
de an
Hat Fe
Socks
vo non-tr
a
ID
ust ID a
G

price
description
colorCode R=Red, B=Blue, G=Green
quantityInStock

price
description
colorCode R=Red, B=Blue, G=Green
quantityInStock

calculateID()
displayInformation()

calculateID()
displayInformation()

Figura 11-1 Clases Hat (Gorro) y Socks (Calcetines)

Implementacin de la herencia
Copyright 2008 Sun Microsystems, Inc. Todos los derechos reservados. Sun Services, Revisin E.1

11-5

Fundacin Proydesa
Herencia

Unauthorized reproduction or distribution prohibited Copyright 2014, Oracle and/or its affiliates

Pants

Shirt

ID
price
size
gender M=Male, F=Female
description
colorCode B=Blue, T=Tan
quantityInStock

ID
price
description
colorCode R=Red, B=Blue, G=Green
quantityInStock

calculateID()
displayInformation()

calculateID()
displayInformation()

a
om
c
oo Shirt.
Estas nuevas clases tienen muchas de las caractersticas de h clase de
yala ui
Por ejemplo, todas tienen ID, precios y descripciones. Todas tienen
G
o@
operaciones para calcular un ID y mostrar los an Sin embargo,
datos. ent
e
el mtodo de salida a la pantalla de cada subclase presenta diferente
ald s Stud
g
contenido.
vo_ e thi
a
ust de us esta informacin en cada
Es posible eliminar la necesidadto duplicar
(
oung se de la programacin OO denominado
n concepto
clase implementando
a en
herencia. lde
c
Ga ble li
rico sfera
e
Superclases y subclases
Fed -tran
o
tav a nonLa herencia permite a los programadores poner miembros comunes
s
Gu

has
r)

Figura 11-2 Clases Pants (Pantalones) y Shirt (Camisa)

(variables y mtodos) en una clase y hacer que otras clases hereden esos
miembros comunes.

La clase que contiene miembros comunes a otras clases se denomina


superclase o clase de nivel superior. Las clases que heredan miembros
(amplan) de la superclase se denominan subclases o clases subordinadas.
La herencia da como resultado una jerarqua de clases de la tecnologa
Java similar a la clasicacin taxonmica que se utiliza en biologa,
por ejemplo, La ballena azul es una subclase de la ballena.

11-6

Programacin Java para no Programadores


Copyright 2008 Sun Microsystems, Inc. Todos los derechos reservados. Sun Services, Revisin E.1

Fundacin Proydesa
Herencia

Unauthorized reproduction or distribution prohibited Copyright 2014, Oracle and/or its affiliates

En la gura siguiente se ilustra una jerarqua de ballenas.

Mamfero
sangre caliente
respira aire

Ballena
cola
aletas

has
r)

a
om
c
oo e
yah uid
@
G
ano dent
e
ald s Stu
g
vo_ e thi
a
ust o us
Figura 11-3 Herencia y taxonoma
o (g se t
n
dea lies enatributo de la superclase mamferos. La frase
l
Sangre caliente c un
Gaairelrepresenta una actividad que tambin forma parte de la
respira
be
co feramamferos. La cola y las aletas son atributos especcos de las
i
der superclase es una subclase de los mamferos.
ans
Fe -trballenas, que
o
tav a non
s
Gu

Implementacin de la herencia
Copyright 2008 Sun Microsystems, Inc. Todos los derechos reservados. Sun Services, Revisin E.1

11-7

Fundacin Proydesa
Herencia

Comprobacin de las relaciones entre superclases y


subclases
Unauthorized reproduction or distribution prohibited Copyright 2014, Oracle and/or its affiliates

En el lenguaje Java, cada clase puede heredar miembros de una sola clase,
por lo que es muy importante sopesar la mejor forma de usar la herencia
y utilizarla slo cuando sea completamente vlida o inevitable.
Lo saba? Algunos lenguajes de programacin, como C++, permiten a
una clase heredar de diferentes superclases. Este concepto se denomina
herencia mltiple. El lenguaje Java no admite la herencia mltiple porque
su implementacin puede resultar confusa para los programadores. En su
lugar, el lenguaje Java utiliza el concepto de interfaz.

a
om
c
oo e
yah uid
@
G
ano dent
e yu
En el caso estudiado, camisas, pantalones,ld
a gorrosStcalcetinesnombre para
g(Prendas) es un buen son tipos de
_ his
prendas de vestir. Por tanto, Clothing
avo se prendas de vestir.
la superclase de estas subclases (tipos) de t
t
gus to u
(
no nse
a
lde lice
a
o G rable
eric nsfe
Fed -tra
o
tav a non
s
Gu

has
r)

La forma de comprobar si un vnculo de herencia propuesto es vlido es


utilizar la expresin es un/una. La frase una Camisa es una Prenda de
vestir expresa un vnculo de herencia vlido. La frase un Gorro es un
Calcetn expresa un vnculo de herencia incorrecto.

11-8

Programacin Java para no Programadores


Copyright 2008 Sun Microsystems, Inc. Todos los derechos reservados. Sun Services, Revisin E.1

Fundacin Proydesa
Herencia
En la gura siguiente se ilustra esta nueva jerarqua de clases.

Unauthorized reproduction or distribution prohibited Copyright 2014, Oracle and/or its affiliates

Prendas
id
descripcin
precio
cantidad

Calcetines

Camisa

Gorro

Pantalones

color
(rojo,
azul,
verde)

tamao
color
(rojo,
azul,
verde)

color
(rojo,
azul,
verde)

tamao
gnero
(hombre,
mujer)
color
(azul,
tostado)

m
co
hoo ide
a
@y t Gu
ano den
e
ald s Stu
g
vo_ e thi
a
ust o us
o (g se t
n
dea licen
l
Ga ble
rico sfera
e n
a
Fed -trFigura 11-4 Superclase Clothing (Prendas) y subclases
vo non
a
ust a
G

Implementacin de la herencia
Copyright 2008 Sun Microsystems, Inc. Todos los derechos reservados. Sun Services, Revisin E.1

has
r)

11-9

Fundacin Proydesa
Herencia

Unauthorized reproduction or distribution prohibited Copyright 2014, Oracle and/or its affiliates

Modelado de las superclases y subclases


Despus de identificar la relacin entre la superclase y las subclases, puede
remodelar todas sus clases. Las subclases slo contendrn caractersticas
propias de ellas mismas. En las tres figuras siguientes se muestran las
nuevas clases, la clase Shirt denida anteriormente y la subclase
Clothing.
Hat:Clothing

Socks:Clothing

colorCode R=Red, B=Blue, G=Green

colorCode R=Red, B=Blue, G=Green

displayInformation()

displaySockInformation()

Figura 11-5 Clases Hat (Gorro) y Socks (Calcetines)

m
co
Pants:Clothing
Shirt:Clothing
hoo ide
a
@y t Gu
size
size
no e G=Green
gender M=Male, F=Female
colorCode R=Red,aB=Blue, n
e
ald s Stud
colorCode B=Blue, T=Tan
g
vo_ e thi
displayClothingInformation()
displayInformation()
a
ust o us
o (g se t
n
Figura 11-6 Clases Pants y Shirt
dea licen
l
Ga ble
rico sfe
Clothing ra
e
Fed -id an
tr
avo non price
ust a
description
G

quantityInStock
calculateID()

Figura 11-7 Clase Clothing


Las caractersticas comunes a todas las subclases estn en la clase
clothing.

11-10

Programacin Java para no Programadores


Copyright 2008 Sun Microsystems, Inc. Todos los derechos reservados. Sun Services, Revisin E.1

has
r)

Fundacin Proydesa
Herencia

Discusin Qu otras clases del sistema de prendas de DirectClothing,


Inc. utilizaran la herencia? Compruebe cada vnculo de herencia para
asegurarse de que sea vlido.

Discusin Dado que la variable colorCode aparece en todas las


subclases de Clothing, cmo rediseara la clase Clothing? Tenga en
cuenta que no todas las subclases admiten las mismas opciones de color.

Unauthorized reproduction or distribution prohibited Copyright 2014, Oracle and/or its affiliates

Declaracin de una superclase

has
Los siguientes ejemplos de cdigo contienen una superclase Clothing.r)
a
om
c
Cdigo 11-1 Archivo Clothing.java situado en el directorio
oo e
inheritance
yah uid
@
G
1
ano dent
e
2
public class Clothing {
ald s Stu
3
g
4
private int ID = 0; // ID predeterminadohpara todas las prendas
vo_ e t i
ta us
5
private String descriptionus -description required-; //
=
predeterminada
o (g se to
n
6
dea =licen // Precio predeterminado para todas las
7
private double lprice
0.0;
a
prendas
o G rable
eric n fe
8
private intsquantityInStock = 0; // Cantidad predeterminada para
d a
todas Fe prendas
las
tr
9 v
a o nonust10 aprivate static int instanceCounter=0; //Miembro esttico utilizado
G
en el constructor para generar un ID exclusivo
11
12
public Clothing() {
13
ID = instanceCounter++;

Implementacin de la herencia
Copyright 2008 Sun Microsystems, Inc. Todos los derechos reservados. Sun Services, Revisin E.1

11-11

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2014, Oracle and/or its affiliates

Herencia
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45

}
public int getID() {
return ID;
}
public void setDescription(String d) {
description = d;
}
public String getDescription() {
return description;
}
public void setPrice(double p) {
price = p;
}

m
co
hoo ide
public double getPrice() {
a
@y t Gu
return price;
ano den
}
e
ald s Stu
public void setQuantityInStock(intvq)_{
o g thi
a
quantityInStock = q;
ust o use
}
o (g se t
n
dea licen {
public int getQuantityInStock()
l
Ga ble
return quantityInStock;
rico sfera
}
e
Feddetran
o o ta}v// fin n la clase
s
an
Gu

La clase Clothing contiene los mtodos utilizados por todas las


subclases, por ejemplo las clases Shirt o Pants. Cada subclase heredar
estos mtodos.

11-12

Programacin Java para no Programadores


Copyright 2008 Sun Microsystems, Inc. Todos los derechos reservados. Sun Services, Revisin E.1

has
r)

Fundacin Proydesa
Herencia

Unauthorized reproduction or distribution prohibited Copyright 2014, Oracle and/or its affiliates

Declaracin de una subclase


Utilice la palabra clave extends para indicar que una clase hereda
miembros de otra clase. Para indicar que una clase es una subclase de
otra, utilice la sintaxis siguiente en la declaracin de la clase:
[modificador_clase] class identificador_clase extends
identificador_superclase
Donde:

La palabra clave modificador_clase es opcional (como indican


los corchetes) y puede ser public, abstract o final. Si no se
incluye modificador_clase en la declaracin de clase, sta adopta
automticamente un valor predeterminado que algunas veces se
denomina nivel de paquete y permite acceder nicamente a otras
clases del mismo paquete.

has
r)

a
om
c
oo de
La palabra clave class indica al compilador que elh
bloque
cdigo
ya uide
contiene una declaracin de clase.
@
G
ano dentla subclase.
identificador_clase es el nombre asignado a
de Stu
alal compilador que se trata de una
La palabra clave extends indica
_g this
subclase de otra clase. avo
t
e
gus to us
identificador_superclase es el nombre de la superclase
( e
ampliada no esta subclase.
por
s
dea licen
l
Ga ble
rico sfera
e
Fed -tran
o
tav a non
s
Gu

Implementacin de la herencia
Copyright 2008 Sun Microsystems, Inc. Todos los derechos reservados. Sun Services, Revisin E.1

11-13

Fundacin Proydesa
Herencia

Ejemplo de declaracin de una subclase

Unauthorized reproduction or distribution prohibited Copyright 2014, Oracle and/or its affiliates

Por ejemplo, el cdigo siguiente contiene una clase Shirt actualizada que
ampla la clase Clothing.
Cdigo 11-2

Archivo Shirt.java situado en el directorio inheritance

1
public class Shirt extends Clothing {
2
3
// Los cdigos de color son R=Rojo, B=Azul, G=Verde, U=Sin definir
4
public char colorCode = U;
5
6
// Este mtodo muestra los valores de un artculo
7
public void displayInformation() {
8
9
System.out.println(ID de camisa: + getID());
10
System.out.println(Descripcin de la camisa : +
getDescription());
11
System.out.println(Cdigo de color: + colorCode);
12
System.out.println(Precio de la camisa: + getPrice());
13
System.out.println(Cantidad en stock: + getQuantityInStock());
14
15
} // fin del mtodo display
16 } // fin de la clase
17

has
r)

m
co
hoo ide
a
@y t Gu
ano den
e
ald s Stu
g
vo_ e thi
a
ust o us
o (g se t
n n
dea liceclase Clothing en la lnea 1. Observe que la
l
La claseGa
Shirt ampla la
e
claseo
slo
c Shirt rablcontiene las variables y los mtodos especcos de un
i
objeto Shirt.
der ansfe
e
o F on-tr
v
sta a n
Gu

11-14

Programacin Java para no Programadores


Copyright 2008 Sun Microsystems, Inc. Todos los derechos reservados. Sun Services, Revisin E.1

Fundacin Proydesa
Abstraccin

Unauthorized reproduction or distribution prohibited Copyright 2014, Oracle and/or its affiliates

Abstraccin
Una de las caractersticas de una buena solucin programada en Java es
que la jerarqua de las clases que se cree sea muy generalizada en la parte
superior a n de dejar espacio para posteriores aadidos ms concretos.

!
?

Discusin Si DirectClothing decidiese seguir diversificando productos y


vender juguetes y perfumes, qu otras clases necesitara en su sistema de
introduccin de pedidos?

La abstraccin en el anlisis y el diseo

has
r)

a
om
c
oo e
yah uid
@
G
ano dent
e
ald s Stu
g
vo_ e thi
a
ust o us
o (g se t
n
dea licen
l
Ga ble
rico sfera
e
a posible que le interese dedicar ms tiempo al anlisis y el diseo para
Fed -trEsn
vo non asegurarse de que su solucin tenga el suciente nivel de abstraccin
a
ust a
como para garantizar la exibilidad.
G

La abstraccin se reere a la creacin de clases que son muy generales y


no contienen mtodos con una implementacin concreta o cdigo del
cuerpo del mtodo. Un buen ejemplo de clase abstracta es la clase Item
(artculo). Un artculo es un concepto abstracto (normalmente no se entra
en una tienda para decir quiero comprar un artculo) que puede
referirse a cualquier elemento vendido en una tienda. Sin embargo,
todos los artculos podran tener caractersticas similares en un sistema
de introduccin de pedidos, por ejemplo, un ID o un mtodo para ver la
informacin sobre el artculo. Las clases que son genricas y no pueden
denirse por completo, como es el caso de la clase Item, se conocen
como clases abstractas. Las clases que amplan una clase abstracta pueden
implementar mtodos vacos de la clase abstracta con cdigo especco de
la superclase.

Implementacin de la herencia
Copyright 2008 Sun Microsystems, Inc. Todos los derechos reservados. Sun Services, Revisin E.1

11-15

Fundacin Proydesa
Abstraccin

!
Unauthorized reproduction or distribution prohibited Copyright 2014, Oracle and/or its affiliates

Discusin Imagine que posee varios objetos que representan formas


como un rectngulo, un tringulo y un crculo. Cada forma contiene
mtodos para calcular el rea y la circunferencia. Adems, el rectngulo
posee mtodos para obtener y definir los valores de altura y anchura, y el
crculo tiene un mtodo para obtener y definir el radio. Utilizando el
concepto de abstraccin, cmo creara las relaciones de superclase y
subclase de estas figuras?

has
r)

m
co
hoo ide
a
@y t Gu
ano den
e
ald s Stu
g
vo_ e thi
a
ust o us
o (g se t
n
dea licen
l
Ga ble
rico sfera
e
Fed -tran
o
tav a non
s
Gu

11-16

Programacin Java para no Programadores


Copyright 2008 Sun Microsystems, Inc. Todos los derechos reservados. Sun Services, Revisin E.1

Fundacin Proydesa
Clases del API de Java

Unauthorized reproduction or distribution prohibited Copyright 2014, Oracle and/or its affiliates

Clases del API de Java


Como programador con escasos conocimientos de Java, una de sus
primeras tareas ser familiarizarse con las clases del API de Java.
Las clases del lenguaje Java se agrupan en paquetes segn su
funcionalidad. Por ejemplo, todas las clases relacionadas con el ncleo del
lenguaje Java se encuentran en el paquete java.lang, que contiene clases
fundamentales para la programacin en Java tales como String, Math e
Integer.
Existen dos categoras de clases en el API de Java: aquellas a las que es
posible hacer referencia de forma implcita en cualquier cdigo que escriba
(como la clase System utilizada para acceder al mtodo println) y
aquellas que es preciso importar o calicar en su totalidad.

has
r)

a
om
c
oo e
Clases disponibles de forma implcita yah uid
@
G
ano ddent implcita a
e
En todos los programas es posible hacer e
tu
ald referencia forma que no
todas las clases del paquete java.lang. Este concepto signica
is S
o_gclase cuando utilice la clase.
v
th
necesita mencionar el paquete ni la
sta use
u
o (g se to
n
dea licen
l
Ga ble
rico sfera
e
Fed -tran
o
tav a non
s
Gu

Implementacin de la herencia
Copyright 2008 Sun Microsystems, Inc. Todos los derechos reservados. Sun Services, Revisin E.1

11-17

Fundacin Proydesa
Clases del API de Java

Importacin y calificacin de clases

Unauthorized reproduction or distribution prohibited Copyright 2014, Oracle and/or its affiliates

La mayora de las clases del API de Java no estn disponibles de forma


implcita para usarlas en los programas. Es preciso utilizar sentencias de
importacin o hacer referencia a ellas utilizando sus nombres totalmente
calicados (nombre del paquete y la clase) para todos los paquetes que
quiera utilizar en sus programas. Estos paquetes incluyen los siguientes:

El paquete java.awt contiene clases que componen las herramientas


AWT (abstract windowing toolkit). Se utiliza para construir y manejar
la interfaz grfica de usuario (GUI) de la aplicacin.

El paquete java.applet contiene clases que proporcionan


comportamiento especco de los applets.

El paquete java.net contiene clases para realizar operaciones


relacionadas con la red tales como las conexiones de sockets y URL.

a
om
c
El paquete java.io contiene clases que manejan la entrada/salida
oo unidad
(E/S) de archivos, por ejemplo, la lectura o escritura en una e
yah uid
de disco duro.
@
n G
ano dparattareas tales
El paquete java.util contiene clases e
utilitarias e
u
ald s Stdenicin de
como la generacin de nmeros aleatorios, la
g i
_
propiedades del sistema y el o de funciones relacionadas con las
avusose th
fechas y el calendario. st
u
u
o (g se to
n
Hay dos formas a hacer n estas clases estn disponibles para un
dede lice que
programa:al
G ble
co feimportar la clase utilizando la sentencia import.
eri Puede ra
ns
Fed -traPuede hacer referencia a ella utilizando un nombre de clase con
o
tav a non todos sus calicadores.
s
Gu

has
r)

11-18

Programacin Java para no Programadores


Copyright 2008 Sun Microsystems, Inc. Todos los derechos reservados. Sun Services, Revisin E.1

Fundacin Proydesa
Clases del API de Java

Unauthorized reproduction or distribution prohibited Copyright 2014, Oracle and/or its affiliates

Sentencia import
Puede utilizar sentencias import para facilitar la lectura del cdigo ya que
estas sentencias acortan el cdigo que debe escribir para hacer referencia
explcita a una clase del API de Java. Hay dos formas de sentencias de
importacin:
import nombre_paquete.nombre_clase;
import nombre_paquete.*;
Donde:

La palabra clave import permite hacer referencia a las clases del API
de Java utilizando un nombre abreviado.

nombre_paquete es el nombre del paquete en el que se encuentra la


clase.

has
r)

a
om
nombre_clase es el nombre de una clase concreta que sec a
o va
opodrn
importar. Si no se especica ningn nombre de clase,
e
yah
utilizarse todas las clases del paquete en el programa. uid
@ tG
Como alternativa, puede sustituir nombre_clasen un asterisco (*)
ano de por
e t del
a n de poder hacer referencia acada claseu paquete por su
a ld
g is S
nombre de clase concreto.o_
v
th
sta use
gu to
o (import resulta confusa para muchos programadores
e
Nota La sentencia
ean icenns
porqueald
sugiere que e realidad estn eligiendo las clases que se
G blesul programa durante la compilacin. Por el contrario,
combinarn en
rico sfera las sentencias import para claricar el cdigo al lector
puede utilizar
ede trporque estas sentencias acortan el cdigo que debe escribirse para hacer
an
o F on- referencia a un mtodo de una clase.
v
sta a n
Gu

Por ejemplo, la clase siguiente importa el paquete java.awt para


posibilitar a la clase el acceso a las clases de interfaz grca de AWT.
import java.awt.*;
public class MyPushButton1 extends Button {
// sentencias class
}

Implementacin de la herencia
Copyright 2008 Sun Microsystems, Inc. Todos los derechos reservados. Sun Services, Revisin E.1

11-19

Fundacin Proydesa
Clases del API de Java

Especicacin del nombre totalmente calicado

Unauthorized reproduction or distribution prohibited Copyright 2014, Oracle and/or its affiliates

En lugar de especicar el paquete java.awt, puede hacer referencia a la


clase Button mediante el nombre java.awt.Button a lo largo de todo el
programa. Por ejemplo, a continuacin gura una declaracin de clase
que utiliza el nombre calicado al especicar su superclase. La sintaxis del
nombre calicado es como sigue:
nombre_paquete.nombre_clase
Donde:

nombre_paquete es el nombre del paquete en el que se encuentra la


clase.

nombre_clase es el nombre de una clase concreta a la que se est


haciendo referencia.

m
co
Por ejemplo, en la siguiente declaracin de clase se utiliza el oo
h nombree
a
calicado para ampliar la clase Button.
d
@y t Gui
public class MyPushButton2 extends no
n
ea java.awt.Button {
// sentencias class
ld Stude
}
_ga this
o
tav use
s
(gu e to
ano ens
e
ald le lic
G
co ferab
i
der ans
e
o F on-tr
v
sta a n
Gu

11-20

Programacin Java para no Programadores


Copyright 2008 Sun Microsystems, Inc. Todos los derechos reservados. Sun Services, Revisin E.1

has
r)

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2014, Oracle and/or its affiliates

Apndice A

Siguientes pasos
Este apndice sirve de orientacin para saber en qu direccin continuar
con la formacin terica y prctica sobre tecnologa Java. En concreto,
contiene:

has
Instrucciones para obtener e instalar la especicacin del API de Java
ar)
m
SE.
co Java.
Informacin sobre los entornos de desarrollo de lahoo
a tecnologa
ide
y
Otras referencias de utilidad sobre la tecnologa Java. u
@
G
ano dent
e
ald s Stu
g
vo_ e thi
a
ust o us
o (g se t
n
dea licen
l
Ga ble
rico sfera
e
Fed -tran
o
tav a non
s
Gu

Instrucciones para obtener e instalar el SDK de Java SE.

A-1
Copyright 2008 Sun Microsystems, Inc. Todos los derechos reservados. Sun Services, Revisin E.1

Fundacin Proydesa
Cmo prepararse para programar

Cmo prepararse para programar


Unauthorized reproduction or distribution prohibited Copyright 2014, Oracle and/or its affiliates

La informacin de esta seccin tiene como objetivo ayudarle a seguir


programando una vez nalizado este curso. Para utilizar la plataforma
Java SE fuera de este curso:
1.

Descargue el SDK de Java SE.

2.

Descargue la especicacin del API de Java SE.

3.

Congure su PC para que pueda acceder al SDK de Java SE.

4.

Opcional: descargue o consiga un depurador o un entorno de


desarrollo integrado.

Descarga de la tecnologa Java

m
co
Debe descargar el SDK de Java SE para poder utilizar el lenguaje Java.
hoo ide
a
@y t Gu
ano a continuacin
Nota Puede seguir las instrucciones proporcionadasden
e
ald s Stu
pero recuerde que podran no ser totalmente exactas si los nombres de
_g thi
productos o las direcciones URL vo cambiado desde la fecha de
han
a
publicacin de este manual. st
u o use
o (g se t
n n
Para descargare kit de e
d ela lic desarrollo de Java SE, versin 6.0 (JDK 6.0):
l
Ga el navegador web para ir a:
le
1.ico
Utilice rab
e
der ahttp://java.sun.com/javase/downloads/index.jsp
e tr nsf
F vo non2. Haga clic en el vnculo Get the JDK Download (descargar JDK).
a
ust a
G
Descarga de la especificacin del API de Java SE
Cada revisin de la versin del JDK tiene su propia especicacin del
API. Para descargar la especicacin del JDK:
1.

Utilice el navegador web para ir a:


http://java.sun.com/javase/downloads/index.jsp

2.

A-2

Haga clic en el vnculo Get the JDK Download situado en la seccin


Download J2SE 6.0 Documentation.

Programacin Java para no Programadores


Copyright 2008 Sun Microsystems, Inc. Todos los derechos reservados. Sun Services, Revisin E.1

has
r)

Fundacin Proydesa
Cmo prepararse para programar

Unauthorized reproduction or distribution prohibited Copyright 2014, Oracle and/or its affiliates

Configuracin del equipo para desarrollar y ejecutar


programas Java
Es preciso establecer como ruta de acceso a las clases la ubicacin donde
se haya instalado la versin del JDK. Durante el proceso de descarga
encontrar un vnculo a un sitio web con instrucciones completas sobre el
modo de congurar la ruta de acceso a las clases, la ruta regular y otros
aspectos que pueden causarle problemas.

Descarga de un entorno de desarrollo o un depurador

has
r)

Toda la programacin de este curso se realiza con un editor de archivos de


texto. Muchos programadores utilizan entornos de desarrollo integrados
(IDE) en lugar de editores de texto. Estos entornos son aplicaciones con
una interfaz de usuario grfica que contienen numerosas funciones de
utilidad tales como un cdigo de colores especial de los componentes de
las clases de Java y herramientas de depuracin.

a
om
c
oo e
yah uid
@
G
ano dent en el mercado.
Hay numerosos entornos de desarrollo lde
gratuitos tu
disponibles
ga i http://www.netbeans.org.
Puede descargar el entorno NetBeans en:s S
_
avo se th
t
En la pgina de descarga de software de la tecnologa Java encontrar
gus to u
(
vnculos con otros entornos.
no nse
a
lde lice
a
o G rable
eric nsfe
Fed -tra
o
tav a non
s
Gu
Nota Algunos entornos de desarrollo le ayudan en el trabajo de
codicacin. Sin embargo, tenga presente que el cdigo que generan
algunos de ellos no siempre est bien escrito.

Siguientes pasos
Copyright 2008 Sun Microsystems, Inc. Todos los derechos reservados. Sun Services, Revisin E.1

A-3

Fundacin Proydesa
Referencias

Referencias
Unauthorized reproduction or distribution prohibited Copyright 2014, Oracle and/or its affiliates

Utilice los siguientes recursos para obtener informacin sobre temas


concretos. Adems de los recursos indicados, puede obtener informacin
sobre otros cursos de los Servicios de Formacin Sun en la direccin URL
siguiente:
http://sun.es/services/training
Entre los cursos sugeridos se incluyen los siguientes:

SL-275: Programacin Java

OO-226: Anlisis y Diseo OO con UML

SL-285: Desarrollo de Aplicaciones Avanzadas en Java

a
om
c
Nociones bsicas sobre tecnologa Java
oo e
yah uid
@
G
La informacin bsica sobre la tecnologa Java puede encontrarse en los
ano dent
e
documentos siguientes:
ald s Stu
g
Farrell, Joyce. Java Programming: Comprehensive. Course Technology.
vo_ e thi
a
1999.
ust o us
Es un libro excelente para no programadores. Explica conceptos que
o (g se t
n
no se tratana profundidad en otros libros ms avanzados.
de en licen
l
Ga ble
Naughton, Patrick and Herbert Schildt. Java 2: The Complete Reference.
rico sfera
Osborne McGraw-Hill, 2004.
n
ede traEckel, Bruce. Thinking in Java. Prentice Hall Computer Books, 2006.
o F onv
Deitel and Deitel. Java: How to Program. Prentice Hall, 2004.
sta a n
Gu

has
r)

Libro ms avanzado para quienes quieren sumergirse de lleno en el


lenguaje de programacin Java. Incluye numerosos ejercicios y
ejemplos de cdigo.

A-4

Documentacin sobre la plataforma Java Standard Edition. [En la


web]. Disponible en: http://java.sun.com/docs/index.html.

Programacin Java para no Programadores


Copyright 2008 Sun Microsystems, Inc. Todos los derechos reservados. Sun Services, Revisin E.1

Fundacin Proydesa
Referencias

Applets

Unauthorized reproduction or distribution prohibited Copyright 2014, Oracle and/or its affiliates

La informacin sobre los applets puede encontrarse en el documento


siguiente:
Hopson, Stephen. Developing Professional Java Applets. 1996.
Este libro est dirigido a diseadores de pginas web y describe cmo
utilizar el cdigo de applets Java del libro y el CD-ROM incluido.

Tutorial en Internet
Encontrar un tutorial sobre la tecnologa Java en:
http://java.sun.com/docs/books/tutorial/

has
r)

a
om
c
oo e
yah uid
@
G
ano dent
Artculos, consejos y documentos tcnicos
e
ald s Stu
g
vo_y otra hi
Puede encontrar artculos tcnicos e t informacin tcnica de utilidad en:
a
ust o us
http://java.sun.com/javase/reference/techart.jsp
o (g se t
n
http://java.sun.com/javase/whitepapers.jsp
dea licen
l
Ga ble
rico sfera
e
Fed -tran
o
tav a non
s
Gu
Se trata de un excelente tutorial de autoformacin que cubre una
amplia variedad de temas e incluye numerosos ejemplos de cdigo.

Siguientes pasos
Copyright 2008 Sun Microsystems, Inc. Todos los derechos reservados. Sun Services, Revisin E.1

A-5

Unauthorized reproduction or distribution prohibited Copyright 2014, Oracle and/or its affiliates

Fundacin Proydesa

m
co
hoo ide
a
@y t Gu
ano den
e
ald s Stu
g
vo_ e thi
a
ust o us
o (g se t
n
dea licen
l
Ga ble
rico sfera
e
Fed -tran
o
tav a non
s
Gu

has
r)

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2014, Oracle and/or its affiliates

Apndice B

Palabras clave del lenguaje de programacin


Java
Este apndice contiene la lista de palabras clave del lenguaje Java.

has
r)

m
co
hoo ide
a
@y t Gu
ano den
e
ald s Stu
g
vo_ e thi
a
ust o us
o (g se t
n
dea licen
l
Ga ble
rico sfera
e
Fed -tran
o
tav a non
s
Gu

B-1
Copyright 2008 Sun Microsystems, Inc. Todos los derechos reservados. Sun Services, Revisin E.1

Fundacin Proydesa
Palabras clave

Palabras clave
Unauthorized reproduction or distribution prohibited Copyright 2014, Oracle and/or its affiliates

Las palabras clave son trminos especiales del lenguaje de programacin


reservados para dar instrucciones al compilador. No deben utilizarse
como identicadores para clases, mtodos, variables u otros componentes.
La tabla siguiente contiene todas las palabras clave de la tecnologa Java.
Tabla B-1 Palabras reservadas para la tecnologa Java
abstract default

for

package

synchronized

assert

do

if

private

this

boolean

double

implements

protected

throw

a
om
c
byte
enum
instanceof return
transient
oo e
yah uid
case
extends
int
short
true
o@ nt G
catch
false
interface
static
ean tude try
ld S
gastrictfp
char
final
long
void
vo_ e this
a
class
finally
native
volatile
ust o us super
(g e t
continue float o
new
switch
while
ean icens
ld
Ga ble l
rico sfera
e n
a
Fed Nota Las palabras true, false y null son literales en el lenguaje Java.
vo non-tr
a
ust a
G

has
r)

break

B-2

else

import

public

throws

Programacin Java para no Programadores


Copyright 2008 Sun Microsystems, Inc. Todos los derechos reservados. Sun Services, Revisin E.1

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2014, Oracle and/or its affiliates

Apndice C

Convenciones de asignacin de nombres en


el lenguaje Java
En este apndice se resumen las reglas y directrices de uso de la
nomenclatura comentadas a lo largo del curso. Una regla es algo impuesto
por el compilador o el intrprete de Java. Una directriz es una sugerencia
que ofrecemos para mejorar el cdigo.

has
r)

a
om
La informacin de referencia completa sobre las convenciones c
de
oo e
codicacin del lenguaje Java est disponible en:
yah uid
http://java.sun.com/docs/codeconv/html/CodeConvTOC.doc.html
@
G
ano dent
e
ald s Stu
g
vo_ e thi
a
ust o us
o (g se t
n
dea licen
l
Ga ble
rico sfera
e
Fed -tran
o
tav a non
s
Gu

C-1
Copyright 2008 Sun Microsystems, Inc. Todos los derechos reservados. Sun Services, Revisin E.1

Fundacin Proydesa
Identificadores de clases, mtodos y variables

Identicadores de clases, mtodos y variables


Unauthorized reproduction or distribution prohibited Copyright 2014, Oracle and/or its affiliates

Las reglas siguientes determinan el contenido y la estructura de los


identicadores:

El primer carcter de un identicador debe ser uno de los siguientes:

Una letra minscula (az)

El signo de subrayado (_)

El signo de dlar ($)

Una letra mayscula (AZ)

Cualquier smbolo monetario del juego de caracteres Unicode

No se pueden utilizar como identicadores las palabras clave del


lenguaje Java.

a
om
c
Las directrices siguientes le ayudarn a asignar identicadores o
o adecuados:
del
yah uiy e
Empiece cada variable o mtodo con una letra @minscula
en
G
resto de las palabras con la inicial en mayscula, por ejemplo,
ano dent
e
miVariable o getValores.
ald s Stu
g i
Escriba el nombre de las clases con lath
vo_ e primera letra en mayscula y
a
la primera letra de las palabrasus
ust o sucesivas tambin en mayscula,
como en CamisaTest. e t
o (g s
an mayscula y palabras separadas mediante signos
n
Utilice lde enlice
letras
a
de subrayado
o G rablepara los identicadores de las constantes, como en
e
eric IMPUESTO_VENTA.
ns
ed traElijafnombres que sean nemotcnicos e indiquen a cualquier posible
F
vo non- lector el propsito de la variable.
a
ust a
G

has
r)

He aqu algunos ejemplos de identicadores adecuados:

estaCerrado (identicador de variable boolean)

interpretar (identicador de mtodo)

interpretarMusica (identicador de mtodo)

C-2

idCliente (identicador de variable)

Pedido (identicador de clase)

Programacin Java para no Programadores


Copyright 2008 Sun Microsystems, Inc. Todos los derechos reservados. Sun Services, Revisin E.1

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2014, Oracle and/or its affiliates

Identificadores de clases, mtodos y variables

Nota En el lenguaje Java, el atributo de mayscula y minscula es un


rasgo pertinente. La pertinencia de la grafa en mayscula/minscula
signica que existe diferencia entre la representacin en mayscula o
minscula de cada carcter alfabtico. El lenguaje de programacin Java
considera que dos identicadores son diferentes simplemente con que
dicha grafa sea diferente. Por ejemplo, si crea una variable llamada
pedido, no podr referirse a ella ms adelante con la palabra Pedido.

has
r)

m
co
hoo ide
a
@y t Gu
ano den
e
ald s Stu
g
vo_ e thi
a
ust o us
o (g se t
n
dea licen
l
Ga ble
rico sfera
e
Fed -tran
o
tav a non
s
Gu

Convenciones de asignacin de nombres en el lenguaje Java


Copyright 2008 Sun Microsystems, Inc. Todos los derechos reservados. Sun Services, Revisin E.1

C-3

Unauthorized reproduction or distribution prohibited Copyright 2014, Oracle and/or its affiliates

Fundacin Proydesa

m
co
hoo ide
a
@y t Gu
ano den
e
ald s Stu
g
vo_ e thi
a
ust o us
o (g se t
n
dea licen
l
Ga ble
rico sfera
e
Fed -tran
o
tav a non
s
Gu

has
r)

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2014, Oracle and/or its affiliates

Apndice D

Desplazamiento por el sistema operativo


Solaris
Este apndice contiene una lista de los comandos ms habituales para
desplazarse por el SO Solaris desde una ventana de terminal.

has
r)

m
co
hoo ide
a
@y t Gu
ano den
e
ald s Stu
g
vo_ e thi
a
ust o us
o (g se t
n
dea licen
l
Ga ble
rico sfera
e
Fed -tran
o
tav a non
s
Gu

D-1
Copyright 2008 Sun Microsystems, Inc. Todos los derechos reservados. Sun Services, Revisin E.1

Fundacin Proydesa
Gua de referencia rpida de Solaris

Unauthorized reproduction or distribution prohibited Copyright 2014, Oracle and/or its affiliates

Gua de referencia rpida de Solaris


La tabla siguiente contiene la lista de comandos de terminal bsicos para
el sistema operativo Solaris y para Windows de Microsoft.
Tabla D-1 Comandos bsicos de la ventana de terminal
Comando

Solaris

Microsoft Windows

Ver el nombre del directorio


actual

pwd

cd

Ver el contenido del


directorio actual

ls
ls -l para mayor detalle

dir /w
dir para mayor detalle

Cambiar a un directorio
situado por encima del
directorio actual

cd ..

cd ..

Trasladar un directorio

mv directorio destino

move directorio destino

Crear un nuevo archivo

touch nombre

N/A (usar un editor de


texto)

Borrar un archivo

rm archivo

del archivo

Crear un directorio nuevo

mkdir directorio

mkdir directorio

Borrar un directorio

rmdir directorio
(slo directorios vacos)
rm -r directorio
(directorios con contenido)

del directorio
deltree directorio
(el directorio y todo su
contenido)

m
co
hoo ide
Cambiar a un directorio
cd ../..
cd ..\.. ya
u
situado varios niveles por
(repetir ../ tantas veces
no@ ent G
a
encima del directorio actual como sea necesario)
lde Stud
Cambiar a un directorio
cd directorio
cd
_ga thisdirectorio
vo e
situado debajo del directorio
a
ust o us
actual
o (g se t
Cambiar a un directorio
cd ruta_completa
e n icen
dcdaruta_completa
l
concreto
l
a
b archivo destino
o G racple
Copiar un archivo ic
copy archivo destino
der ansfe mv archivo destino
Trasladar Fearchivo
un
move archivo destino
vo non-tr
cp -r directorio
xcopy /s /e directorio
sta a
uCopiar un directorio
G
destino
destino

D-2

Programacin Java para no Programadores


Copyright 2008 Sun Microsystems, Inc. Todos los derechos reservados. Sun Services, Revisin E.1

has
r)

Fundacin Proydesa
Gua de referencia rpida de Solaris
Tabla D-1 Comandos bsicos de la ventana de terminal (Continuacin)

Unauthorized reproduction or distribution prohibited Copyright 2014, Oracle and/or its affiliates

Comando

Solaris

Microsoft Windows

Cambiar el nombre de un
archivo

mv nombreantiguo
nombrenuevo

ren nombreantiguo
nombrenuevo

Cambiar el nombre de un
directorio

mv nombreantiguo
nombrenuevo

ren nombreantiguo
nombrenuevo

Compilar una aplicacin


Java

javac
nombrearchivo.java

javac
nombrearchivo.java

Ejecutar una aplicacin Java

java nombrearchivo

java nombrearchivo

Tambin puede utilizar el Gestor de archivos de Solaris para realizar


muchas de estas funciones. Esta aplicacin proporciona una interfaz
grca bsica.

has
r)

a
om
oc
oWindows,
En caso de necesitar ayuda con los comandos de Solaris o
yah uide
@
pregunte a su profesor.
G
ano dent
e
ald s Stu
g
vo_ e thi
a
ust o us
o (g se t
n
dea licen
l
Ga ble
rico sfera
e
Fed -tran
o
tav a non
s
Gu

Desplazamiento por el sistema operativo Solaris


Copyright 2008 Sun Microsystems, Inc. Todos los derechos reservados. Sun Services, Revisin E.1

D-3

Unauthorized reproduction or distribution prohibited Copyright 2014, Oracle and/or its affiliates

Fundacin Proydesa

m
co
hoo ide
a
@y t Gu
ano den
e
ald s Stu
g
vo_ e thi
a
ust o us
o (g se t
n
dea licen
l
Ga ble
rico sfera
e
Fed -tran
o
tav a non
s
Gu

has
r)

Das könnte Ihnen auch gefallen