You are on page 1of 48

CONCEPTOS BSICOS DE PROGRAMACIN CON JAVA Tercera edicin

LUZ ELENA JIMNEZ COLLAZOS UNIVERSIDAD ICESI


1
4 Conceptos Bsicos de Programacin Orientada a Objetos.

4.1 Programacin Orientada a Objetos

La programacin orientada a objetos, se basa en que una situacin puede ser
modelada, y los problemas que se presenten en su interior resueltos, mediante la
utilizacin de objetos de clases existentes o que deben ser creadas. En este libro,
en los captulos previos, se han presentado problemas cuya solucin ha requerido
el uso de objetos creados a partir de clases que trae java; por ello, este captulo
estar dedicado a la identificacin objetos, cuyo comportamiento, creacin y
relaciones se definir a travs de clases que se aprendern a definir en l.

4.2 Objetos.

Al hacer referencia a un objeto, se habla de una unidad que tiene identidad propia,
y puede tener caractersticas y, adems, estar en capacidad de prestar servicios.
Liste algunas de las clases, cuyos objetos ha utilizado en el cdigo que hasta ahora ha
elaborado. Incluya, tambin, los mtodos que ha requerido.






Ejercicio Resuelto.
Problema: Presente un objeto y mencione para l, al menos dos cosas que tenga y un
servicio que pueda prestar.
Solucin:
Objeto: mi perro
Caractersticas: Tiene color: Es negro y blanco.
Tiene una raza: Es Shih Tzu.
Servicio: Juega con los nios.
Haga una lista de diez objetos, para cada uno de ellos defina al menos dos cosas que
se puedan saberse de cada uno de ellos y un servicio que cada uno pueda prestar.








Ejercicio Resuelto
Problema: Identifique caractersticas y servicios para el color rojo.
CONCEPTOS BSICOS DE PROGRAMACIN CON JAVA Tercera edicin
LUZ ELENA JIMNEZ COLLAZOS UNIVERSIDAD ICESI
2
Solucin: Esto no es posible, ya que no es una unidad que posea caractersticas, ni preste
servicios, o sea que no es un objeto. El color rojo bien podra ser una caracterstica de un
objeto determinado.

Ejercicio Propuesto
Seleccione cuales de las siguientes menciones corresponden a objetos.

Mencin
Es objeto? - recuerde justificar su respuesta -
la argolla matrimonial de su abuela
materna.

el color negro del asta de la banderas
del parque Panamericano

los perros
el cinco
true
la mesa de la cafetera en la cual
'mecate' la ltima vez.

el florero de Llorente
la inteligencia
el vaso en el cual se sirvi su ltimo jugo
de naranja.

la pelota de ftbol

Ejemplo:
A continuacin se presenta un ejercicio, en el cual se trabaja con diferentes objetos, para
llegar a identificar algunas de las caractersticas que ellos presentan, este ejercicio se
retomar a lo largo del captulo, as que se pide al lector prestar mucha atencin.

Se est trabajando con una compaa que quiere producir un software para que la gente
pueda trabajar con figuras geomtricas de diferentes tipos, as que se requiere que se
describa la siguiente figura geomtrica:
1












"Se trata de un tringulo, cuyo lado base mide 3 centmetros y su lado altura mide 4 centmetros.
Adems uno de sus ngulos es recto, por lo cual se puede afirmar que se trata de un tringulo
rectngulo. Para los tringulos se calcula el rea como la longitud de la base - 3 cm. - multiplicada

1
Es importante hacer claridad frente al hecho de que quienes escriben estas notas no son expertos en
geometra y aunque se ha tratado de verificar cada cosa que se incluye, a fin de evitar errores, es posible que
alguno se haya colado.
4
c
3
c
CONCEPTOS BSICOS DE PROGRAMACIN CON JAVA Tercera edicin
LUZ ELENA JIMNEZ COLLAZOS UNIVERSIDAD ICESI
3
por la longitud de la altura - 4 cm. - y esto dividido entre 2. O sea que este tringulo tiene un rea
de 6 cm
2
. Adems como es un tringulo rectngulo se sabe que su hipotenusa - el lado cuya
longitud desconocemos - se calcula como la raz cuadrada de la suma de los cuadrados de los
catetos - que son los lados cuyas longitudes conocemos, o sea que la hipotenusa de este tringulo,
mide 5 centmetros -. Tambin se podra calcular su permetro, que sera la suma de las longitudes
de sus lados, en este caso 3 cm. + 4 cm. + 5 cm. = 12 centmetros. "

Al revisar el prrafo anterior, se puede identificar que las caractersticas que se
mencionan para esta figura geomtrica son:
la longitud de sus lados.
el ngulo de uno de sus vrtices.

y los servicios:
el contar con un mtodo para calcular su rea.
el contar con un mtodo para calcular su permetro.
el contar con un mtodo para calcular la longitud de su hipotenusa.

Y ahora se pide describir esta figura:










"Se trata de un tringulo, que tiene un lado que mide 3 centmetros, de los otros dos lados se
desconoce su longitud. Sin embargo, se nos dice que su altura es de 4 centmetros. Adems los
dos lados, cuya longitud se desconoce, parecen medir lo mismo, as que parece ser un tringulo
issceles. Como sigue siendo un tringulo su rea se sigue calculando como la longitud de la base
- 3 cm. - multiplicada por la longitud de la altura - 4 cm. - y esto dividido entre 2. O sea que este
tringulo tambin tiene un rea de 6 cm
2
. Su permetro tambin es la suma de los lados, pero como
se desconoce la longitud de dos lados se debe hacer un razonamiento: es muy sencillo, si
trazamos una lnea desde el punto ms alto al centro de la base, este tringulo estar formado por
dos tringulos rectngulos unidos, y la longitud de sus catetos se conoce (cateto uno = 1.5
centmetros, cateto dos = 4 centmetros), as que de nuevo se puede calcular la hipotenusa y se
obtendr la longitud de los otros dos lados. As la longitud desconocida corresponde a 4.27
centmetros (que es la raz cuadrada de (1.5
2
+ 4
2
)). Con esta informacin se puede obtener el
permetro como la suma de 4.27 centmetros + 4.27 centmetros + 3 centmetros = 11.54
centmetros."

En esta figura se identifican estas caractersticas:
la longitud de su base: 3 centmetros.
la longitud de su altura: 4 centmetros.

y servicios:
el mtodo para calcular su rea.
el mtodo para calcular el permetro.
el mtodo para obtener la longitud de sus lados, a partir de su base y altura.
3 cm.
4 cm.
CONCEPTOS BSICOS DE PROGRAMACIN CON JAVA Tercera edicin
LUZ ELENA JIMNEZ COLLAZOS UNIVERSIDAD ICESI
4

Ahora una figura realmente diferente:
















"Se trata de un crculo, que tiene un radio de 2 centmetros. Al ser un crculo, la forma en la cual se
obtiene su rea es diferente, pues se debe calcular como (3.1416) por la longitud del radio
elevado al cuadrado - 2 centmetros, en este caso -. O sea que este crculo tiene un rea de
12.5664 centmetros cuadrados. Los crculos tambin tiene un permetro, y la frmula para
obtenerlo es 2 por la longitud del radio, o sea que el permetro de este crculo es 12.5664
centmetros"

De lo cual se puede decir que la caracterstica que se presenta de esta figura es:
la longitud de su radio: 2 centmetros.

y sus servicios:
el mtodo para calcular su rea.
el mtodo para calcular el permetro
Sigue prestando estos servicios! - aunque lo haga de forma diferente -

Por ltimo se requiere la descripcin de la siguiente figura:












"Se trata de un cuadrado, que tiene como longitud de lado 3 centmetros. Para los cuadrados la
frmula para calcular el rea se reduce a elevar al cuadrado la longitud de su lado, o sea que en
este caso correspondera a 3
2
, o sea que sera 9 centmetros cuadrados, y el permetro se calcula
3 cm.
3 cm.
radio: 2 cm.
CONCEPTOS BSICOS DE PROGRAMACIN CON JAVA Tercera edicin
LUZ ELENA JIMNEZ COLLAZOS UNIVERSIDAD ICESI
5
multiplicando la longitud del lado por 4, o sea que este cuadrado tendra como permetro 12
centmetros."

Y las caractersticas de esta figura, segn la descripcin, son:
la longitud de su lado: 3 centmetros.

y sus servicios:
el mtodo para calcular su rea.
el mtodo para calcular su permetro.
De nuevo presta estos servicios, y tambin lo hace en forma diferente a las figuras
vistas anteriormente.

Si se revisan las descripciones presentadas hasta ahora, qu cosas se tienen en comn
estas figuras geomtricas?

en cuanto a caractersticas:

nombre base altura lados
iguales
radio lado
figura uno
si si si si
figura dos
si si si si si
figura tres
si si
figura cuatro
si si si

en cuanto a servicios:

hallar
hipotenus
a
hallar rea hallar
permetro
figura uno
si si si
figura dos
si si si
figura tres
si si
figura cuatro
si si

As que si se quisiera obtener conclusiones, se podra decir que:
las figuras geomtricas tienen un nombre.
permiten calcular un rea
permiten calcular un permetro.

Pero tambin se podra decir que las figuras uno y dos tienen varias cosas en comn
entre ellas, y que no comparten con las otras figuras:
ambas tienen base y altura
ambas pueden calcular la longitud de la hipotenusa.

As que se podra afirmar que toda figura geomtrica tiene un nombre, un rea y un
permetro, tambin se podra decir que algunas figuras geomtricas tienen una base, una
altura y pueden calcular la longitud de la hipotenusa.

CONCEPTOS BSICOS DE PROGRAMACIN CON JAVA Tercera edicin
LUZ ELENA JIMNEZ COLLAZOS UNIVERSIDAD ICESI
6
Despus de estos ejercicios se debe tratar de volver a la definicin de lo que es un
objeto, y se podra decir que un objeto es la unidad bsica con la cual se trabaja
en programacin orientada a objetos. Esta unidad contiene una informacin, y a
partir de esta informacin el objeto est en capacidad de prestar una serie de
servicios que le pueden ser solicitados. La informacin que de l se guarda, lo que
hasta ahora se ha presentado como caractersticas, se conoce como sus atributos
y los servicios que puede prestar se denominan mtodos. Es importante dejar
presente el hecho de que los atributos son las caractersticas del objeto y otra
cosa son los valores que puedan tener esos atributos en un momento
determinado.
Defina con sus propias palabras qu es un objeto.






Ejercicio Resuelto
Problema: Identifique cinco caractersticas para los objetos casa; despus d algunos
ejemplos de los valores que podran tomar.
Solucin: Algunas de las caractersticas de los objetos casa son:
Nmero de pisos.
Nmero de habitaciones.
Cantidad de baos.
Cantidad de parqueaderos.
Si est dentro de una unidad.

Y, algunos de los valores que podran tomar estas caractersticas son:

Nmero
de pisos

Nmero de
habitaciones
Cantidad de
baos
Cantidad de
parqueaderos
Si est dentro de
una unidad
1 4 5 2 no
1 3 4 1 si
2 5 4 1 si
3 4 3 3 si


Ejercicio Propuesto
Identifique dentro del siguiente prrafo de qu tipo de objetos se est hablando, y
mencione, al menos, cinco caractersticas que se presenten de ellos.

Se conoce a los Reyes Magos a aquellos que, guiados por una estrella, fueron de Oriente a Beln para adorar
al Nio Jess. El Evangelio de San Mateo narra la ofrenda de oro, incienso y mirra, hecha a Dios Nio, recin
nacido, por tres poderosos y sabios peregrinos.
As, la tradicin popular ha ido perfilando las figuras de los tres oferentes, a quienes el evangelista llama
Magos, aunque la exgesis les niega condicin real. Fue San Cesreo de Arls quien, en el s. VI, as los
clasific extendindose entonces por la Cristiandad el apelativo.
CONCEPTOS BSICOS DE PROGRAMACIN CON JAVA Tercera edicin
LUZ ELENA JIMNEZ COLLAZOS UNIVERSIDAD ICESI
7
De su pas de origen, slo dice San Mateo que procedan de Oriente; los testimonios ms antiguos de la
Iglesia de Siria y de los padres griegos afirman que procedan de Persia, donde, como es sabido, exista la
casta de los magos o astrlogos. Otros hablan de Caldea, de donde surgi la astrologa. Tambin se remonta
al s. V la suposicin de que eran tres, aunque se ha hablado de dos, cuatro, siete y hasta doce.
Los nombres de Melchor, Gaspar y Baltasar se popularizaron en la Iglesia desde el s. IX, siguiendo el texto
del venerable Beda, en su Collectnea, recogido en la tradicin y que ha perdurado hasta ahora: Melchor,
anciano de barba blanca, que ofreci el oro, como a rey; Gaspar, joven y rubio, rasurado, incienso, como a
Dios, y Baltasar, negro y con barba, mirra, como a hombre.
Simboliza esta aquiescencia y pleitesa la Epifana y la Teofana: manifestacin, revelacin de Dios, y a modo
de primicia en la conversin de los gentiles. La estrella que con su fulgor gui a los Reyes Magos, fue luz
milagrosa, no astro natural, y aunque la Epifana se celebra por la Iglesia pocos das despus de la Natividad,
el 6 de enero, parece ser que entre ambos hechos medi ms tiempo, acaso ms de un ao.
De los regalos que ofrecieron los Reyes al Nio, procede la costumbre espaola y, por ende, de muchos
pases iberoamericanos, de los obsequios a los pequeos en la fecha precitada. En otros pases cumplen
anloga misin en los das navideos otros personajes santos o laicos, como Santa Claus o San Nicols de
Bari, en Holanda, que, segn la tradicin, llega de Espaa; y el norte de Europa adopt la figura laica de un
anciano grueso y bonachn, de cabello, barba y bigote blancos y vestido de rojo (al que los franceses, que
han adoptado esta costumbre, llaman Papa Noel), cuyo smbolo es el rbol, como el beln o nacimiento lo es
de los Reyes Magos.
2


Adems de los atributos y mtodos que hasta ahora se han identificado en los
diferentes objetos que se han presentado, es muy importante mencionar que los
objetos tienen algo ms, y esto es identidad. Identidad es la propiedad que le
permite al objeto ser l, y ser nico. La identidad no debe estar relacionada con los
valores que tomen uno o varios de los atributos que los objetos tengan, pues la
identidad puede servir para diferenciar a un objeto de otro, an si todos los
atributos tienen los mismos valores y estn en capacidad de prestar los mismos
servicios. Qu pasa si dos personas tienen lapiceros rojos, exactamente iguales:
la misma marca, el mismo peso, la misma tapa, y todo exactamente igual? Cmo
se puede diferenciar cul es el de cada uno? La forma ms sencilla es por su
ubicacin, se podra pensar que cada lapicero est en poder de su dueo. As la
identidad de estos lapiceros no est dada por el valor que toma ninguna de sus
caractersticas, ni por los servicios que estn en capacidad de prestar; en este
caso su identidad est dada por su ubicacin.

En conclusin, se puede decir que un objeto puede tener una o varias
caractersticas, o atributos, puede prestar unos servicios, pero ahora se sabe que
tambin tiene una identidad que lo hace nico.

4.3 Clases.

Es importante tener presente que hasta ahora se ha hablado de objetos, es decir,
de elementos concretos, que pueden ser identificados, pues tienen identidad, y
que pueden poseer unos atributos y prestar unos servicios. Sin embargo, no se ha
presentado la forma a travs de la cual se define para un objeto determinado
cules son las caractersticas que se deben conocer, o qu servicios se puede
esperar que ese objeto determinado preste. Esta es la funcin de las clases.


2
Dicionario Enciclopdico Espasa. Tomado de la pgina web: yaviennlosreyes.com Web de los Reyes
Magos de Oriente.
CONCEPTOS BSICOS DE PROGRAMACIN CON JAVA Tercera edicin
LUZ ELENA JIMNEZ COLLAZOS UNIVERSIDAD ICESI
8
Las clases son el patrn que define qu tendr un objeto y qu servicios estar en
capacidad de prestar; de manera que los objetos no podran existir si no existieran
las clases. Las clases permiten la creacin de los objetos, pues no slo definen
qu tiene que tener cada objeto que pertenezca a ella, sino que guarda la
informacin requerida para que cada uno de ellos sea capaz de prestar los
servicios que de l se requieren. Tambin est en capacidad de prestar servicios
comunes a todos sus objetos o guardar valores que ellos puedan requerir. Otra de
las funciones de las clases, es decir qu se debe hacer al momento de crear un
nuevo objeto, por esto ellas deben definir un servicio que no prestan los objetos,
sino que tiene por funcin definir cmo ser la creacin de cada uno de ellos; este
mtodo se denomina el constructor. De lo anterior se puede concluir que no
podran existir los objetos, de no existir las clases.
Defina con sus propias palabras qu es una clase y en qu se diferencia de los
objetos.








Responda las siguientes preguntas:
Podra existir el Deportivo Huila si no existieran los equipos de ftbol?
Podra existir Donald, si no existieran los dibujos animados?
Habra podido existir Laika, si los perros no existieran?









4.4 Clases en java
3
.

Java es un lenguaje de programacin orientado a objetos, por ello dentro del
lenguaje las construcciones bsicas son las clases. De hecho, hasta el momento
cada vez que se ha elaborado cdigo para resolver los problemas propuestos, se
ha incluido en este cdigo la sentencia:


3
Se incluye, en el Apndice B de este material, la descripcin de todos los elementos que pueden
manejarse al definir clases en Java. Se recomienda que ante cualquier duda se revise dicho documento.
CONCEPTOS BSICOS DE PROGRAMACIN CON JAVA Tercera edicin
LUZ ELENA JIMNEZ COLLAZOS UNIVERSIDAD ICESI
9
public class ResolviendoProblemas {

Con ella se est diciendo que se empieza la definicin de una clase. Sin embargo,
en los cdigos elaborados hasta ahora no se han creado objetos de estas clases,
ello tiene un razn clara y es que en java se cuenta con dos grandes grupos de
clases, las clases que se emplean para dar estructura a los objetos, y las clases
que la mquina virtual de java reconoce como ejecutables. Estas ltimas son las
que se han definido hasta el momento, pues en todas ellas se ha incluido la
sentencia:

public static void main (String[] arg) {

que es la que permite identificar la clase como ejecutable.

Ahora se empezar a trabajar en la definicin y utilizacin de clases del otro grupo
que se mencion: las clases que permiten crear objetos y resolver los problemas
trabajando con ellos.
Escriba los nombres de las clases a partir de las cuales ha creado objetos en las
clases ejecutables que usted ha creado.









4.4.1 Definicin de atributos de instancia en java.

Java permite que cada clase defina qu atributos deben tener los objetos que a
partir de ella se creen, para lo cual se debe decir qu visibilidad tendrn
4
, de qu
tipo sern y el nombre que se les quiere dar; en este orden. Es importante tener
presente que al definir de qu tipo ser cada atributo, este tipo bien puede ser
alguno de los tipos bsicos o un tipo referenciado.
Describa, usando sus palabras, los elementos fundamentales para definir un atributo
de instancia.







4
En este material se trabajarn los atributos con la visibilidad mnima, es decir como privados.
CONCEPTOS BSICOS DE PROGRAMACIN CON JAVA Tercera edicin
LUZ ELENA JIMNEZ COLLAZOS UNIVERSIDAD ICESI
10







4.4.2 Definicin de mtodos de instancia en java.

Java permite que cada clase defina qu mtodos deben estar en capacidad de
prestar los objetos que a partir de ella se creen, para lo cual se debe decir qu
visibilidad tendrn
5
, qu retornaran, el nombre que se les quiere dar y, entre
parntesis, los parmetros que debe recibir para poder prestar el servicio que se
pide; en este orden. Aqu es importante aclarar que se denomina parmetro a los
valores que se pasa a un mtodo para que dentro de l se trabaje con ellos; para
definirlos se debe indicar el tipo al cual pertenecen y el nombre con el cual se
trabajarn en el mtodo, java no establece ninguna restriccin referente a la
cantidad de parmetros que puede definir un mtodo.
Describa, usando sus palabras, los elementos fundamentales para definir un mtodo
de instancia.












Ejercicio Resuelto:
Problema: Se necesita escribir, en java, una clase llamada Cuadrado, que permita definir
objetos con las caractersticas identificadas:
longitud de su lado.
y que estn en capacidad de prestar estos servicios:
calcular su rea.
calcular su permetro.
Solucin: Lo primero que debe hacerse es mostrar en un Diagrama de Clases
6
, la
informacin que se requiere de los objetos que se crearn a partir de la clase, y describir
los mtodos que se deben ofrecer.


5
En este material se trabajarn los mtodos, por lo general, con la visibilidad mxima, es decir como
pblicos.
6
Herramienta de diagramacin definida por el Lenguaje de Modelamiento Unificado UML
El atributo de instancia que se define en la clase, estar en todos los objetos que se creen de
ella, sin importar cuntos sean. Por ejemplo, sera incorrecto definir ms de un atributo para
guardar el nmero de la cdula, en la clase Persona, an sabiendo que se van a crear muchos
objetos Persona, con cdula diferente.

En adelante, el proceso de anlisis que se haga consistir en la elaboracin del Diagrama de
Clases y la descripcin de los mtodos que las clases involucradas en la solucin del problema
contengan.
CONCEPTOS BSICOS DE PROGRAMACIN CON JAVA Tercera edicin
LUZ ELENA JIMNEZ COLLAZOS UNIVERSIDAD ICESI
11
Diagrama de Clases:

Descripcin de mtodos:
rea: No recibe nada como parmetro.
Retorna el valor del rea del cuadrado: lado * lado:
permetro: No recibe nada como parmetro.
Retorna el valor del permetro del cuadrado: 4 * lado.
Cdigo en java:
public class Cuadrado {
private double lado;
/** La lnea anterior define el nico atributo que tendrn los objetos que a partir de esta
clase se creen; lado, de tipo double. */
public Cuadrado(double longitudLado) {
lado = longitudLado; }
/** Las lneas anteriores corresponden a la definicin del mtodo constructor. */
public double rea() {
return (lado * lado); }
/** Las lneas anteriores corresponden a la definicin del mtodo rea. */
public double permetro() {
return (4 * lado); }
/** Las lneas anteriores corresponden a la definicin del mtodo permetro. */
}

Ejercicio Propuesto:
Problema: Se necesita escribir, en java, una clase llamada Crculo, que permita definir
objetos con las caractersticas identificadas:
longitud de su radio.
y que estn en capacidad de prestar estos servicios:
calcular su rea.
calcular su permetro.




Cuadrado
- lado: double

+ Cuadrado(double)
+ rea():double
+ permetro():double
Esta es la forma de incluir comen-
tarios en UML.
En este recuadro, va el nombre
de la clase.
En este recuadro se definen los
atributos.

En este recuadro se definen los
mtodos.
CONCEPTOS BSICOS DE PROGRAMACIN CON JAVA Tercera edicin
LUZ ELENA JIMNEZ COLLAZOS UNIVERSIDAD ICESI
12
Anlisis:
Diagrama de Clases:










Descripcin de mtodos:










Cdigo en java:
























CONCEPTOS BSICOS DE PROGRAMACIN CON JAVA Tercera edicin
LUZ ELENA JIMNEZ COLLAZOS UNIVERSIDAD ICESI
13
Ejercicio Resuelto:
Ahora, y haciendo referencia a la clase Cuadrado, si alguien quisiera conocer la
dimensin del lado de un objeto cuadrado, podra ste drsela? No, pues la clase a la
cual el objeto pertenece, no posee ningn mtodo que permita conocer la longitud del
lado. Para permitir que esto se haga, se debe adicionar al cdigo que se present en el
ejercicio anterior el siguiente cdigo:
public double getLado() {
return lado; }

Por convencin, entre los programadores que trabajan con java, se acostumbra
que los mtodos que retornarn el valor contenido en un atributo del objeto
reciban como nombre get seguido del nombre del atributo: getLado, en este caso.
Tambin existen la convencin de que el mtodo que permite cambiar el valor de
un atributo, reciben el nombre set seguido del nombre del atributo; en este caso no
se defini, pues no es comn que un cuadrado cambie la longitud de su lado, pero
si se hubiese requerido debera llevar el nombre de setLado.

Para el caso particular de los atributos booleanos, en lugar de utilizar el prefijo get,
se utiliza el prefijo is. Si se tiene una variable booleana mayorDeEdad, el mtodo
para retornar el valor sera isMayorDeEdad y el tipo de dato retornado sera
boolean.

Ejercicios Propuestos:
1. Se necesita adicionar a la clase Crculo un mtodo que permita conocer la longitud de
su radio.
Anlisis:
Diagrama de Clases:










Descripcin del mtodo:





Cdigo en java del mtodo:

CONCEPTOS BSICOS DE PROGRAMACIN CON JAVA Tercera edicin
LUZ ELENA JIMNEZ COLLAZOS UNIVERSIDAD ICESI
14
2. Se tiene informacin de muchos estudiantes y se quiere crear una clase, en java, que
permita guardar la informacin de ellos. De cada uno se requiere saber el cdigo,
nombre, plan de estudios y semestre. Adems se requiere que permita modificar y
consultar el valor de cada atributo. Se tiene el siguiente diagrama de clase, as que
usted debe describir los mtodos y escribir el cdigo en java.

Diagrama de Clases:











4.4.3 Caractersticas de la Programacin Orientada a Objetos.

Los conceptos de orientacin a objetos, por lo general, se presentan enmarcados
entre tres grandes caractersticas:
abstraccin: Cuando se habla de abstraccin, al menos en este contexto, se
hace referencia a la capacidad de construir una estructura que contenga
informacin fuertemente relacionada dentro del contexto que se est
estudiando. Estas estructuras de que se habla, son lo que se denomina objetos.
Pero debe tenerse presente que la unidad mxima de abstraccin es la clase,
pues es ella la que recopila la esencia de la abstraccin, o sea qu se necesita
para representar un objeto y poder trabajar con l.
As que es la clase la responsable de definir, entre otras cosas, las siguientes:
qu atributos van a tener los objetos que se construyan a partir de ella.
qu servicios van a estar en capacidad de prestar estos objetos.
si ella, la clase, va a definir algn atributo o servicio como suyo, es decir va a
permitir que pueda ser utilizado an sin crear objetos.
de qu manera quiere que se creen objetos, a partir de ella.






encapsulamiento: Se denomina as a la capacidad que tiene un objeto de
esconder, a otros, parte de la informacin que contiene o algunos de los
servicios que puede prestar. Igual que en el punto anterior, es importante hacer
claridad que es la clase la que define el nivel de encapsulamiento de los objetos
que pertenezcan a ella. De esta forma puede definir desde a quien quiere dejar
saber que ella existe, hasta si quiere o no que los atributos y servicios de sus
objetos puedan ser vistos, y por objetos de qu clases.
Estudiante
- cdigo: String
- nombre: String
- planDeEstudios: int
- semestreQueCursa: int
+ Estudiante(String,String,int,int)
+ setNombre(String):void
+ setPlanDeEstudios(int):void
+ setSemestreQueCursa(int):void
+ getCdigo():String
+ getNombre():String
+ getPlanDeEstudios():int
+ getSemestreQueCursa():int
Al momento de realizar la abstraccin de la situacin que se desea modelar, es importante
tomar solamente los atributos y servicios que son relevantes a la solucin que se pretende realizar.
El incluir atributos y servicios innecesarios puede hacer ms compleja y confusa la solucin
resultante.

CONCEPTOS BSICOS DE PROGRAMACIN CON JAVA Tercera edicin
LUZ ELENA JIMNEZ COLLAZOS UNIVERSIDAD ICESI
15





herencia: Los objetos pueden heredar de otros, tanto informacin como
servicios, sin que esto impida que pueda contener nueva informacin o prestar
servicios adicionales. Igual que en el caso de la abstraccin y la herencia, son
las clases quienes definen la jerarqua de herencia. Y aqu es muy importante
dejar presente que la jerarqua de herencia es irrompible, o sea que si una clase
dice que va a heredar de otra, los objetos que se creen a partir de ella, heredan
TODA la estructura que tiene la clase padre para sus objetos, as ella haya
decidido encapsular al mximo sus atributos o mtodos.
De acuerdo a lo anterior, si se regresa al ejercicio de las figuras geomtricas, se
puede llegar a pensar que existe una clase raz, denominada FiguraGeomtrica,
de la cual heredan las clases Tringulo, Crculo y Cuadrado; tambin puede
pensarse que la clase TringuloRectngulo debera heredar de Tringulo, en
lugar de heredar, directamente, de la clase FiguraGeomtrica.
Esta relacin entre clases, la herencia, se representa en UML con una flecha
que termina en un tringulo vaco, el cual seala a la clase padre, as:














polimorfismo: Es la capacidad que tiene un servicio para devolver cosas
diferentes. Esta capacidad puede depender de dos cosas:
De la informacin que se le proporciona para prestarlo, o sea que un mismo
servicio se puede prestar de diversas formas, dependiendo del tipo y
cantidad de informacin que se suministra al pedirlo. Esto se conoce como
polimorfismo a nivel de sobrecarga. Aqu es importante hacer claridad frente
al hecho de que a la informacin que se proporciona al utilizar un servicio se
le conoce como parmetro.
De a quien se le pide este servicio, o sea que un mismo servicio puede ser
prestado por diferentes tipos de objetos, y que cada uno de ellos puede
prestarlo de forma diferente. Esto se conoce como sobreescritura.
FiguraGeomtrica
Crculo Cuadrado Tringulo
TringuloRectngulo
En la mayora de los casos, la opcin a tomar ser dejar los atributos ocultos para ser utilizados
solo dentro de la clase; y los servicios visibles para que objetos de otras clases los puedan utilizar.

Este es un ejemplo, y el que todas las clases involucradas en la solucin de la situacin
problemtica planteada hereden de una nica clase, no se puede interpretar como que en cada
caso deba haber herencia explcita, y de haberla deba haber una nica clase padre.

CONCEPTOS BSICOS DE PROGRAMACIN CON JAVA Tercera edicin
LUZ ELENA JIMNEZ COLLAZOS UNIVERSIDAD ICESI
16
Especifique cuales de los elementos fundamentales para definir un mtodo de
instancia pueden cambiar cuando se aplica polimorfismo a un servicio.





4.5 Caractersticas de la Programacin Orientada a Objetos en java.

Cada una de las caractersticas que se mencionaron en el tem anterior, tiene una
forma de implementacin dentro de java:
abstraccin: Tal como se mencion cuando se present el tema, en java las
clases permiten definir los atributos y mtodos con que contar cada objeto;
constituyndose en la forma ms alta de abstraccin.
encapsulamiento: java permite definir varios niveles de encapsulamiento. Por
conveniencia en este material se trabajarn todos los atributos con el mximo
nivel de encapsulamiento, es decir se definirn todos los atributos como
privados; en cambio los mtodos, por lo general, se trabajarn con el mnimo,
es decir sern pblicos. Si se requiere conocer todos los niveles existentes, se
recomienda consultar el Apndice B.
herencia: En java la herencia es obligatoria, es decir todas las clases tienen
que heredar de una clase ya existente. La forma en la cual se indica, en java,
que una clase hereda de otra es mediante el uso de la palabra reservada
extends, en el encabezado de la clase; para ver esto en ms detalle, se
recomienda consultar el Apndice B.
Sin embargo, en las clases que se han definido hasta ahora no se indica de
quien se heredar. Esto no ha representado ningn problema debido a que el
lenguaje, cuando no se indica explcitamente de quien se hereda, asume que se
hereda de la clase Object.

Ejercicio Resuelto:
Problema: Se necesita escribir, en java, las clases necesarias para registrar la informacin
de los libros pertenecientes a la biblioteca del Seor Prez. l ha informado que de cada
libro desea guardar el nombre del mismo, el nombre del autor o autores, el ao de edicin
y si se trata de una edicin de lujo o no. Tambin ha dicho que tiene una serie de libros
que forman colecciones, en cuyo caso, adems de lo anterior, requiere guardar el nombre
de la coleccin y el nmero que ocupa el libro en la coleccin. La nica aclaracin
adicional que ha hecho es que si se trata de un libro con ms de dos autores, quiere
guardar el primer autor, y en el nombre del segundo debe aparecer y otros.







CONCEPTOS BSICOS DE PROGRAMACIN CON JAVA Tercera edicin
LUZ ELENA JIMNEZ COLLAZOS UNIVERSIDAD ICESI
17
Diagrama de Clases:



Descripcin de mtodos:
Constructor de la clase DeColeccin: Este mtodo recibe tantos parmetros como
atributos tienen la clase Libro y DeColeccin, ya que por herencia cada objeto creado a
partir de la clase DeColeccin tiene los atributos definidos por la clase Libro, y se requiere
darles valor al momento de crear cada objeto.
Cdigo en java:
public class Libro {
private String nombre;
private String autorUno;
private String autorDos;
private int aoEdicin;
private boolean lujo;
public Libro(String elNombre, String uno, String dos, int ao, boolean lujos){
nombre = elNombre;
autorUno = uno;
autorDos = dos;
aoEdicin = ao;
lujo = lujos;
}
public int getAoEdicin(){
return aoEdicin;
}
public String getNombre(){
return nombre;
}
public String getAutores(){
if (autorDos == null){
return autorUno;
}
return (autorUno+" "+autorDos);
Libro
- nombre: String
- autorUno: String
- autorDos: String
- aoEdicin: int
- lujo: boolean
+ Libro(String,String,String,int,boolean)
+ getNombre(): String
+ getAutores(): String
+ getAoEdicin(): int
+ isLujo(): boolean
- nombreColeccin: String
- posicin: int
+ DeColeccin(String,String,String,int,
boolean,String,int)
+ getNombreColeccin(): String
+ getPosicin(): int
DeColeccin
CONCEPTOS BSICOS DE PROGRAMACIN CON JAVA Tercera edicin
LUZ ELENA JIMNEZ COLLAZOS UNIVERSIDAD ICESI
18
}
public boolean isLujo(){
return lujo;
}
}
public class DeColeccin extends Libro {
private String nombreColeccin;
private int posicin;
public DeColeccin (String nombre, String uno, String dos, int ao, boolean lujo,String
coleccin, int laPosicin) {
super(nombre, uno, dos, ao, lujo);
/** siempre se invoca el constructor de la clase padre, y la forma de invocarlo es con la
palabra reservada super. Si se omite, java invoca el constructor del padre sin
parmetros, as que si la clase padre no tiene constructor sin parmetros se genera un
error al compilar.
*/
nombreColeccin = coleccin;
posicin = laPosicin;
}
public String getNombreColeccin(){
return nombreColeccin;
}
public int getPosicin(){
return posicin;
}
}

4.6 Otros tpicos referentes a la herencia.

Cuando se empez a tratar el tema de la herencia en java, se dijo que en este
lenguaje la herencia era obligatoria, es decir que todas las clases tienen una clase
padre, excepto Object que es, finalmente, la clase padre de todas. Pero el
lenguaje tiene algunas otras definiciones interesantes que deben tenerse en
cuenta al abordar el tema de la herencia. Es a estas definiciones a las cuales se
har referencia en este tem:
la herencia es nica, pues java no permite que una clase herede de dos o ms
clases. Sin embargo, lo que si es posible es que una clase determinada sea la
clase padre de tantas clases como se requiera.
la herencia no tiene relacin con el encapsulamiento. Es decir, no importa si
una clase define un atributo, o un mtodo, como privado, las clases que
hereden de ella lo tendrn, pero no podrn hacer referencia a l.
la herencia permite definir clases que inician una jerarqua, pero no tienen toda
la informacin para ser instanciadas. Es decir, una clase puede indicar que
tiene la estructura necesaria para que un grupo de clases inicien el proceso de
especializacin a partir de ella, pero que ella no debe poder ser instanciada.
Para esto se emplea la palabra reservada abstract, en el encabezado de la
clase. Por ejemplo, y haciendo referencia al ejemplo de las figuras
geomtricas, se tendra:

public abstract class FigurasGeomtricas{

CONCEPTOS BSICOS DE PROGRAMACIN CON JAVA Tercera edicin
LUZ ELENA JIMNEZ COLLAZOS UNIVERSIDAD ICESI
19
Con lo cual se estara indicando que la clase FigurasGeomtricas, inicia una
jerarqua de clases, pero que cualquier figura geomtrica que se desee crear,
debe tener ms informacin de la que contiene dicha clase. En estas clases es
posible tener servicios con su comportamiento definido, as como servicios cuyo
comportamiento se deja pendiente.
Al respecto es interesante anotar, que estas clases pueden definir que todas las
clases que hereden directamente de ellas deben prestar uno o varios servicios,
pero que cada una tiene que hacerlo de una forma diferente; para ello se usa la
misma palabra reservada, abstract, pero en el encabezado del mtodo. Solo las
clases que se definen como abstract pueden tener mtodos abstract. Por
ejemplo, para indicar que los mtodos rea y permetro los debe definir cada
clase que herede de figura geomtrica, se tendra:

public abstract double rea();
public abstract double permetro();

En las dos definiciones anteriores, es importante resaltar, que un mtodo
abstracto no puede llevar cuerpo, es decir, no puede asociarse a l llaves ({ }),
sino que debe terminar su encabezado con punto y coma (;).
Qu diferencia existe entre definir una clase como abstract y definir un mtodo
como abstract?





Implica el que una clase sea definida como abstract, que todos sus mtodos deben
ser definidos como abstract? Implica el que un mtodo sea definido como abstract, que
la clase a la que pertenece deba ser definida como abstract?








Por ltimo, estn las clases que no pueden tener hijos, estas clases, al
contrario de las clases abstractas, terminan una jerarqua de herencia
determinada. La forma en la cual se definen es utilizando la palabra reservada
final en el encabezado de la clase. Por ejemplo, y haciendo referencia al
mismo ejemplo pero ahora para definir la clase TringuloRectngulo, se
tendra:

public final class TringuloRectngulo{
CONCEPTOS BSICOS DE PROGRAMACIN CON JAVA Tercera edicin
LUZ ELENA JIMNEZ COLLAZOS UNIVERSIDAD ICESI
20

Haciendo un smil al tem anterior, tambin existen mtodos final, pero estos
mtodos se pueden definir en cualquier clase. Y el significado que tiene esta
definicin es que deshabilita el polimorfismo por sobreescritura; es decir si una
clase define un mtodo como final, las clases que hereden de ella no podrn
sobrescribirlo. Siguiendo con el ejemplo de las figuras geomtricas, si se pidiera
que el mtodo permetro definido por la clase Tringulo, no pudiera ser
cambiado en ninguna clase que heredara de ella, se tendra:

public final double permetro(){
// Y aqu se escribira el cdigo correspondiente.
}
Qu diferencia existe entre definir una clase como final y definir un atributo como
final?







4.7 Relaciones de asociacin entre clases.

Cuando se present el tema correspondiente a la definicin de atributos de
instancia, se dijo que estos atributos podan ser valores o podan ser objetos. Sin
embargo en los ejercicios que hasta ahora se han presentado los atributos han
sido de algn tipo bsico, o cadenas de caracteres String .

Dentro de los conceptos de orientacin a objetos, no hay ninguna restriccin
referente a esto, y de hecho se espera que este tipo de relaciones entre objetos de
diferentes clases se d, es decir que un objeto se forme acoplando objetos de
otras clases. De manera que es frecuente encontrar que las clases establecen
relaciones entre ellas, permitiendo que sus objetos tengan atributos, que a su vez
sern objetos. Para lograr lo que se acaba de describir se deben establecer las
relaciones entre las clases y, adems, dar las caractersticas correspondientes a
cada relacin, es decir la direccin y la cardinalidad.

Referente a la direccin, se debe indicar que las relaciones entre clases pueden
ser bidireccionales, es decir cada objeto de la ClaseA tendr, como uno de sus
atributos, un objeto de la ClaseB; y cada objeto de la ClaseB tendr, como uno de
sus atributos, un objeto de la ClaseA. Pero tambin puede ser que la relacin sea
unidireccional, en cuyo caso se entendera que cada objeto de la ClaseA tendr,
como uno de sus atributos, un objeto de la ClaseB; pero a los objetos de la ClaseB
no les interesa saber con qu objeto de la ClaseA estn relacionados. Debe
tenerse presente que, para todas las situaciones presentadas en este prrafo, la
ClaseA y la ClaseB pueden ser, realmente, la misma clase. Es decir una clase
CONCEPTOS BSICOS DE PROGRAMACIN CON JAVA Tercera edicin
LUZ ELENA JIMNEZ COLLAZOS UNIVERSIDAD ICESI
21
puede definir que uno de los atributos que tendrn los objetos que a partir de ella
se creen, puede ser otro objeto de esa misma clase.

La forma de representar la direccin de la relacin, en UML es:

Bidireccional: Cada objeto de la ClaseA tendr, como atributo, un objeto de la
ClaseB, y viceversa.


Unidireccional: Cada objeto de la ClaseA tendr, como atributo, un objeto de la
ClaseB, pero los objetos de la ClaseB no establecern relacin con los objetos de
la ClaseA.

Describa, al menos, dos situadiones en las cuales existan objetos que requieren
conocer al otro; y otras dos en las cuales slo a uno de ellos le interese conocer al otro.






Referente a la cardinalidad, se puede establecer que la relacin se establece con
una cantidad determinada de objetos de la otra clase, o que se establece con un
nmero de objetos, que no puede ser menor al mnimo dado, ni mayor al mximo,
es decir se establece un rango.

Cantidad nica: Cada objeto de la ClaseA tendr, como atributo, dos objetos de la
ClaseB, y cada objeto de la ClaseB tendr, como atributo, un objeto de la ClaseA.


Cada objeto de la ClaseA tendr, como atributo, dos objetos de la ClaseB, pero a
los objetos de la ClaseB no les interesa establecer relacin con los objetos de la
ClaseA.




Rango: Cada objeto de la ClaseA tendr, como atributo, cero o un objeto de la
ClaseB, cada objeto de la ClaseB tendr, como atributo, entre uno y cinco objetos
de la ClaseA.
ClaseB ClaseA ClaseB
ClaseB ClaseA ClaseB
ClaseB ClaseA ClaseB
2
1
ClaseA ClaseB
2
CONCEPTOS BSICOS DE PROGRAMACIN CON JAVA Tercera edicin
LUZ ELENA JIMNEZ COLLAZOS UNIVERSIDAD ICESI
22



Cada objeto de la ClaseA tendr, como atributo, cero o un objeto de la ClaseB,
pero a los objetos de la ClaseB no les interesa establecer relacin con los objetos
de la ClaseA.




Hay un caso especial, que es el caso en el cual no se sabe cuntos objetos de la
otra clase contendr, en esa situacin se emplea el asterisco (*), y se entiende
que cada objeto de la ClaseA, tendr entre 0 y muchos objetos de la ClaseB como
sus atributos.




Piense en situaciones, de la vida diaria, en las que un objeto deba conocer o tener
algn tipo de relacin con un nmero determinado de objetos de otro tipo.







4.8 El concepto de igualdad entre objetos.

Antes de entrar a definir el concepto de igualdad entre objetos se quiere presentar
lo que ocurre en memoria cuando se crean variables asociadas a los tipos bsicos
y variables asociadas a los tipos referenciados. Para esto, suponga que se tiene el
siguiente cdigo:

System.out.println(Digite la longitud del lado del cuadrado);
int lado = lector.nextInt);
Cuadrado unCuadrado = new Cuadrado(lado);
/** Se crea un objeto Cuadrado, cuyo lado tendr la longitud digitada por el usuario, se le
referencia a travs de la variable unCuadrado, y se asumir para todos los casos que el
usuario digita 5 */
Cuadrado otroCuadrado = new Cuadrado(lado);
/** Se crea otro objeto Cuadrado, cuyo lado tendr tambin la longitud digitada por el
usuario, y se le referenciar a travs de la variable otroCuadrado */
Cuadrado elltimo = unCuadrado;
/** Se crea una nueva referencia a un objeto Cuadrado, y se le asigna la misma referencia
que tiene unCuadrado. */
int otraLongitud = lado;
System.out.println(lado y otraLongitud son iguales? +(otraLongitud== lado));
System.out.print(unCuadrado y otroCuadrado son iguales? );
ClaseA ClaseB
ClaseA ClaseB
1..5 0..1
0..1
ClaseA ClaseB
*
CONCEPTOS BSICOS DE PROGRAMACIN CON JAVA Tercera edicin
LUZ ELENA JIMNEZ COLLAZOS UNIVERSIDAD ICESI
23
System.out.println(unCuadrado==otroCuadrado);
System.out.println(unCuadrado y elltimo son iguales? +(unCuadrado == elltimo));

El resultado que se obtendra sera:

lado y otraLongitud son iguales? true
unCuadrado y otroCuadrado son iguales? false
unCuadrado y elltimo son iguales? true

Por qu? A continuacin se presenta lo que ocurrira en la memoria del
computador:


El operador de la igualdad, verifica si lo contenido por las variables es igual o no.
En el ejemplo presentado, se ve que las variables que se definen a travs de los
tipos bsicos, contienen los valores que se les asignan, pero las variables que se
definen a travs de los tipos referenciados, contienen una referencia a un objeto.
As que cuando se emplea el operador de la igualdad, con variables asociadas a
tipos referenciados, lo que se est verificando es si ambas variables hacen
referencia al mismo objeto; y no si los objetos referenciados son iguales. Por ellos
unCuadrado es igual a elltimo, pero no es igual a otroCuadrado.

Pero el comportamiento descrito en los prrafos anteriores no es, siempre, el que
se desea; pues la mayora de las veces lo que se desea es verificar si los objetos
pertenecen a la misma clase y, adems, si sus atributos tienen los mismos
valores. Esto es posible, pero no empleando estos operadores, sino utilizando un
mtodo que haga esta comparacin. Para ilustrar esto, y siguiendo con el ejemplo
presentado, suponga que a la clase Cuadrado se le agregan los siguientes
mtodos:

public boolean equals(Object otro) {
if (otro instanceof Cuadrado){
Cuadrado elOtro = (Cuadrado) otro;
return elOtro.getLado() == getLado();
}
return false;
}
CONCEPTOS BSICOS DE PROGRAMACIN CON JAVA Tercera edicin
LUZ ELENA JIMNEZ COLLAZOS UNIVERSIDAD ICESI
24
/** Las lneas anteriores corresponden a la definicin del mtodo que verifica la igualdad
entre objetos. En esta definicin, lo primero que se hace es verificar que el objeto con el
cual se le pide a un objeto compararse, se haya creado a travs de la clase Cuadrado, si
esto es as, se devuelve el resultado de comparar la longitud de sus lados. De no ser
instancia de esta clase, se devuelve que no son iguales: false. */
public void setLado(double nuevaLongitud) {
lado = nuevaLongitud; }
/** Las lneas anteriores corresponden a la definicin de un mtodo que permite modificar
la longitud del lado de un cuadrado. */

y el cdigo a travs del cual se hacen las comparaciones entre los cuadrados
creados, en el cdigo previamente presentado, se cambia de esta forma:

System.out.print(unCuadrado y otroCuadrado son iguales? );
System.out.println(unCuadrado.equals(otroCuadrado));
System.out.print(unCuadrado y elltimo son iguales? );
System.out.println(unCuadrado.equals(elltimo));

El resultado que se obtendra, en este caso, sera:

unCuadrado y otroCuadrado son iguales? true
unCuadrado y elltimo son iguales? true

Lo que pas fue que ahora java compar los objetos referenciados por
unCuadrado y por otroCuadrado, empleando la forma de comparacin que se le
dio, y en este caso esa forma retorna que son iguales, pues ambos objetos tienen
el mismo valor en su atributo lado. Entonces, qu pasara si se cambiara la
longitud del lado a unCuadrado?

unCuadrado.setLado(15);

El resultado que se obtendra al efectuar la comparacin, sera:

unCuadrado y otroCuadrado son iguales? false
unCuadrado y elltimo son iguales? true

pues estos dos objetos ya no tienen el mismo valor en su atributo lado.

El mtodo equals se define en la clase Object, y todos los objetos lo tienen. En este
caso se redefini, qu tipo de polimorfismo es este?





Cree que siempre se debe modificar la forma de verificar la igualdad entre objetos?



CONCEPTOS BSICOS DE PROGRAMACIN CON JAVA Tercera edicin
LUZ ELENA JIMNEZ COLLAZOS UNIVERSIDAD ICESI
25


Ejercicios Propuestos:
1. Explique la razn por la cual, en todas las comparaciones que se presentaron se
obtuvo que unCuadrado y elltimo eran iguales.
2. Modifique la clase Crculo, que defini en ejercicio previo, agregando el mtodo que
permita decir, a un objeto Crculo, si es igual a otro. Emplee como criterio de
comparacin, el que pertenezcan a la misma clase y que la longitud de sus radios sea
igual.
3. Modifique la clase Libro de manera que permita a un objeto Libro decir si es igual a
otro. Emplee como criterio de comparacin el que pertenezcan a la misma clase y que
tengan el mismo nombre. Qu pasa si a un objeto que es instancia de la clase Libro
se le pide que se compare con un objeto que sea instancia de la clase DeColeccin?
Es esto correcto?

4.9 Atributos y mtodos de la clase static .

Hasta ahora siempre que se ha hablado de definir atributos y mtodos, estos han
estado relacionados con los objetos que se creen a partir de la definicin de la
clase. Pero hay situaciones en las cuales se requiere poder contar con un servicio
determinado, sin necesidad de que existan objetos de la clase que estn en
capacidad de prestar este servicio; o puede ocurrir que se requiera contar con un
atributo determinado que no pertenezca a ningn objeto, pero que est disponible
para todos ellos. Esto es posible, y la forma de hacerlo es utilizando la palabra
reservada static, en la definicin del atributo o en el encabezado del mtodo.

Ha resuelto problemas que le hayan obligado a emplear la palabra reservada static?
En qu caso? Ahora que ya conoce su significado para java, podra explicar, con sus
palabras, por que debi usarla en esas ocasiones?











Ejercicio Resuelto:
Problema: Se necesita modificar la clase Estudiante, la cual se elabor en un ejercicio
anterior, para que ahora permita saber cuntos estudiantes se han matriculado.




CONCEPTOS BSICOS DE PROGRAMACIN CON JAVA Tercera edicin
LUZ ELENA JIMNEZ COLLAZOS UNIVERSIDAD ICESI
26

Diagrama de Clases:














Cdigo en java:
public class Estudiante {
private String cdigo;
private String nombre;
private int planDeEstudios;
private int semestreQueCursa;
private static int matriculados;
public Estudiante(String elCdigo, String elNombre, int plan, int semestre){
cdigo = elCdigo;
nombre = elNombre;
planDeEstudios = plan;
semestreQueCursa = semestre;
matriculados++;
// cada vez que se crea un nuevo estudiante se incrementa la cantidad de matriculados
}
public String getCdigo(){
return cdigo; }
public static int getMatriculados(){
return matriculados; }
public String getNombre(){
return nombre; }
public int getPlanDeEstudios(){
return planDeEstudios; }
public int getSemestreQueCursa(){
return semestreQueCursa; }
public void setNombre(String nuevoNombre){
nombre = nuevoNombre; }
public void setPlanDeEstudios(int nuevoPlan){
planDeEstudios = nuevoPlan; }
public void setSemestreQueCursa(int nuevoSemestre){
semestreQueCursa = nuevoSemestre; }
}

Ejercicio Resuelto:
Problema: Se necesita crear una clase que pueda ser ejecutada, y permita crear una
cantidad de estudiantes dada por el usuario. Despus de tener los estudiantes, debe
permitir consultar o modificar su informacin, en ambos casos se debe pedir el cdigo del
estudiante cuya informacin se quiere consultar o modificar.

+ Estudiante(String, String, int, int)
+ getCdigo() : String
+ getNombre() : String
+ getPlanDeEstudios() : int
+ getSemestreQueCursa() : int
+ setNombre(String) : void
+ setSemestreQueCursa(int) : void
+ setPlanDeEstudios(int) : void
+ getMatriculados() : int
Estudiante
- cdigo: String
- nombre: String
- planDeEstudios: int
- semestreQueCursa: int
- matriculados: int
Tanto el atributo como el mtodo
que aparecen subrayados son
static.
Estudiante
CONCEPTOS BSICOS DE PROGRAMACIN CON JAVA Tercera edicin
LUZ ELENA JIMNEZ COLLAZOS UNIVERSIDAD ICESI
27
Diagrama de Clases:

Cdigo en java:
import java.util.Scanner.*;
public class GestinEstudiantes {
private static Estudiante[] losEstudiantes;
private static Scanner = new Scanner(System.in);
static {
System.out.println("Con cuntos estudiantes desea trabajar?");
int cantidad = lector.nextInt();
losEstudiantes = new Estudiante[cantidad];
}
public static Estudiante buscarEstudiante(String elCdigo) {
for (int contador = 0; contador <= Estudiante.getMatriculados(); contador++) {
if (losEstudiantes[contador] != null){
if (losEstudiantes[contador].getCdigo().equals(elCdigo)) {
return losEstudiantes[contador];
}
}
}
return null;
}
public static void consultarEstudiante() {
System.out.println("\nDigite el cdigo del estudiante");
String cdigo = lector.nexLine();
consultarEstudiante(cdigo);
}
public static void consultarEstudiante(String cdigo) {
Estudiante bsqueda = buscarEstudiante(cdigo);
System.out.println("\nCdigo: "+cdigo);
System.out.println("El nombre del estudiante es: " + bsqueda.getNombre());
System.out.println("El cdigo del plan de estudios que cursa: " +
bsqueda.getPlanDeEstudios());
System.out.println("El semestre en el cual est matriculado es: "+
bsqueda.getSemestreQueCursa());
}
public static void ingresarEstudiantes() {
for (int contador = 0; contador < losEstudiantes.length; contador++) {
System.out.println("\nDigite el cdigo del estudiante");
String cdigo = lector.nexLine();
Estudiante bsqueda = buscarEstudiante(cdigo);
if (bsqueda == null) {
System.out.println("Digite el nombre");
String nombre = lector.nexLine();
System.out.println("Digite el cdigo del plan de estudios");
Estudiante
- cdigo: String
- nombre: String
- planDeEstudios: int
- semestreQueCursa: int
- matriculados: int
+ Estudiante(String,String,int,int)
+ setNombre(String):void
+ setPlanDeEstudios(int):void
+ setSemestreQueCursa(int):void
+ getCdigo():String
+ getNombre():String
+ getPlanDeEstudios():int
+ getSemestreQueCursa():int
+ getMatriculados():int

GestinEstudiantes
+ main(String[]):void
+ ingresarEstudiantes():void
+ buscarEstudiante(String):Estudiante
+ consultarEstudiante():void
+ modificarEstudiante():void
*
CONCEPTOS BSICOS DE PROGRAMACIN CON JAVA Tercera edicin
LUZ ELENA JIMNEZ COLLAZOS UNIVERSIDAD ICESI
28
int planDeEstudios = lector.nextInt();
System.out.println("Digite el semestre que cursa");
int semestre = lector.nextInt();
losEstudiantes[contador] = new Estudiante(cdigo, nombre, planDeEstudios,
semestre);
} else {
System.out.println("\nYa existe un estudiante con ese cdigo\n");
}
}
}
public static void main(java.lang.String[] args) {
ingresarEstudiantes();
Estudiante[] otro = losEstudiantes;
int opcin = 0;
do {
do {
System.out.println("\n\nMen Gestin de estudiantes");
System.out.println("1. Consultar un estudiante");
System.out.println("2. Modificar la informacin de un estudiante");
System.out.println("3. Consultar todos los estudiantes.");
System.out.println("4. Terminar");
System.out.println("==> ");
opcin = lector.nextInt();
}while (opcin != 1 && opcin != 2 && opcin != 3 && opcin != 4);
switch (opcin){
case 1:
{ consultarEstudiante();
break; }
case 2:
{ modificarEstudiante();
break; }
case 3:
{ for (int contador = 0; contador < losEstudiantes.length; contador++){
String elCdigo = losEstudiantes[contador].getCdigo();
consultarEstudiante(elCdigo);
}
break; }
}
}while (opcin != 4);
}
public static void modificarEstudiante() {
System.out.println("\nDigite el cdigo del estudiante");
String cdigo = lector.nexLine();
Estudiante bsqueda = buscarEstudiante(cdigo);
if (bsqueda != null) {
System.out.printlnt("Qu desea modificar? \n1. El nombre \n2. El plan de estudios
\n3. El semestre que cursa");
int opcin = lector.nextInt();
switch (opcin){
case 1:
{ System.out.println("Digite el nombre correcto ");
String nuevo = lector.nexLine();
bsqueda.setNombre(nuevo);
break; }
case 2:
{ System.out.println("Digite el plan de estudios correcto ");
int nuevo = lector.nextInt();
bsqueda.setPlanDeEstudios(nuevo);
break; }
case 3:
{ System.out.println("Digite el semestre que cursa ");
CONCEPTOS BSICOS DE PROGRAMACIN CON JAVA Tercera edicin
LUZ ELENA JIMNEZ COLLAZOS UNIVERSIDAD ICESI
29
int nuevo = lector.nextInt();
bsqueda.setSemestreQueCursa(nuevo);
break; }
default: System.out.println("Opcin no habilitada");
}
} else {
System.out.println("\nNo existe estudiante con ese cdigo\n");
}
}
}

Es importante hacer algunas precisiones referentes al uso de atributos y mtodos
static, particularmente frente a su comportamiento frente a la herencia, pues no es
similar al de los atributos y mtodos de instancia.

Los atributos que son static no se heredan, se hereda el acceso a ellos. Es decir
que las clases hijas podrn hacer referencia a un atributo static, definido por la
clase padre, como si fuera propio, pero si llega a cambiar su valor, este cambio
afectar a la clase padre y a todas las clases que hereden de ella, pues se trata de
un atributo nico para todas las clases.

Referente a los mtodos es interesante resaltar que, tambin se hereda el acceso
a ellos, y que dentro de la clase hija pueden utilizarse como si estuviesen definidos
en ella.
Qu situacin, le parece, podra ser apropiada para definir un atributo cuyo valor
sea igual para todas las instancias de una clase?




Ejercicio Resuelto:
Problema: Se necesita escribir el cdigo correspondiente a las clases FigurasGeomtricas
y Crculo que se han discutido hasta ahora. Se requiere que el valor de la constante PI, se
defina dentro de la clase FigurasGeomtricas.
Cdigo en java:
public abstract class FigurasGeomtricas {
private final static double PI = 3.1416;
public FigurasGeomtricas(){}
public static double getPI (){
return PI; }
public abstract double rea();
public abstract double permetro();
}
public class Crculo extends FigurasGeomtricas {
private double radio;
public Crculo(double elRadio){
radio = elRadio; }
public double rea(){
return super.getPI() * radio * radio;
/** para calcular el rea se utiliza el mtodo FigurasGeomtricas.getPI(),
para lo cual se emplea la palabra reservada super asociada al nombre del mtodo */
}
CONCEPTOS BSICOS DE PROGRAMACIN CON JAVA Tercera edicin
LUZ ELENA JIMNEZ COLLAZOS UNIVERSIDAD ICESI
30
public static double getPI(){
return 3.141592;
/** esta clase requiere mayor precisin en el valor de la constante, as que define
nuevamente el mtodo */
}
public double permetro() {
return 2 * getPI() * radio;
// para el permetro se utiliza el mtodo Crculo.getPI()
}
}

Ejercicios Propuestos:
1. Para el siguiente cdigo, conteste las preguntas includas en l, y complete el cdigo
donde se le pida.
package matemtica;
public class Fraccionario {
private int numerador;
private int denominador;
private Fraccionario(int numerador, int denominador) {
Por qu cree que se define el mtodo constructor privado?


this.numerador = numerador;
this.denominador = denominador;
}
public static Fraccionario crearFraccionario(int numerador, int denominador) {
Qu hace este mtodo? Explique el propsito que tiene el mtodo, no las instrucciones que lo
componen.


if (denominador == 0) {
return null;
}
return new Fraccionario(numerador, denominador);
}
public static Fraccionario multiplicarFraccionarios(Fraccionario uno,
Fraccionario dos) {
int elNumerador = uno.numerador * dos.numerador;
int elDenominador = uno.denominador * dos.denominador;
Fraccionario resultado = new Fraccionario(elNumerador, elDenominador);
return resultado;
}
public static Fraccionario dividirFraccionarios(Fraccionario uno,
Fraccionario dos) {
int elNumerador = uno.numerador * dos.denominador;
int elDenominador = uno.denominador * dos.numerador;
return crearFraccionario(elNumerador, elDenominador);
}
private static int mnimoComnMltiplo(int primero, int otro) {
if (otro == primero)
return otro;
int menor = otro;
int mayor = primero;
if (menor > mayor) {
mayor = otro;
menor = primero;
}
CONCEPTOS BSICOS DE PROGRAMACIN CON JAVA Tercera edicin
LUZ ELENA JIMNEZ COLLAZOS UNIVERSIDAD ICESI
31
if (mayor % menor == 0)
return mayor;
for (int valor = mayor * 2; valor <= mayor * menor; valor += mayor) {
if (valor % menor == 0) {
return valor;
}
}
return 0;
}
public static Fraccionario restaFraccionarios(Fraccionario uno,Fraccionario dos) {
int elDenominador = mnimoComnMltiplo(uno.denominador,dos.denominador);
int primerTrmino = (elDenominador / uno.denominador) * uno.numerador;
int segundoTrmino = (elDenominador / dos.denominador) * dos.numerador;
int elNumerador = primerTrmino - segundoTrmino;
Fraccionario resultado = new Fraccionario(elNumerador, elDenominador);
return resultado;
}
public static Fraccionario sumarFraccionarios(Fraccionario uno,Fraccionario dos) {
int elDenominador = mnimoComnMltiplo(uno.denominador,dos.denominador);
int primerTrmino = (elDenominador / uno.denominador) * uno.numerador;
int segundoTrmino = (elDenominador / dos.denominador) * dos.numerador;
int elNumerador = primerTrmino + segundoTrmino;
Fraccionario resultado = new Fraccionario(elNumerador, elDenominador);
return resultado;
}
public String toString() {
if (denominador != 1)
return (numerador + "/" + denominador);
return (numerador + " ");
}
public int valorEntero() {
if (numerador % denominador == 0) {
return (numerador / denominador);
}
return 0;
}
public boolean setDenominador(int valor) {
Normalmente los mtodos set no retornan nada, por qu cree que este set devuelve un valor
boolean?




if (valor != 0) {
denominador = valor;
return true;
}
return false;
}
public void setNumerador(int valor) {
numerador = valor;
}
public void simplifica() {
int elDenominador = denominador;
int elNumerador = numerador;
if (elNumerador == elDenominador) {
setNumerador(1);
setDenominador(1);
} else {
if (elNumerador % elDenominador == 0) {
CONCEPTOS BSICOS DE PROGRAMACIN CON JAVA Tercera edicin
LUZ ELENA JIMNEZ COLLAZOS UNIVERSIDAD ICESI
32
setNumerador(elNumerador / elDenominador);
setDenominador(1);
} else {
int divide = mximoComnDivisor(elNumerador, elDenominador);
setNumerador(elNumerador / divide);
setDenominador(elDenominador / divide);
}
}
}
public boolean equals(Object obj) {
Este mtodo compara si dos fraccionarios son idnticos, pero 1/3 es igual a 2/6. Se debe
modificar este mtodo para que, tambin, indique la igualdad cuando un fraccionario corresponde
a la simplificacin del otro. ( Un nmero dividido por si mismo da 0).
if (obj instanceof Fraccionario) {
Fraccionario uno = (Fraccionario) obj;
if (numerador == uno.numerador && denominador == uno.denominador)
return true;
}
return false;
}
public int mximoComnDivisor(int unValor, int otroValor) {
if (otroValor == unValor)
return otroValor;
int menor = otroValor;
int mayor = unValor;
if (menor > mayor) {
mayor = otroValor;
menor = unValor;
}
if (mayor % menor == 0)
return menor;
for (int valor = menor / 2; valor > 1; valor--) {
if (menor % valor == 0 && mayor % valor == 0) {
return valor;
}
}
return 1;
}
Los mtodos que ofrece esta clase permiten sumar, restar, multiplicar y dividir dos
fraccionarios (que se reciben como parmetros), y retorna un nuevo fraccionario que es el
resultado; ahora, se requiere agregar los mtodos necesarios para que un fraccionario reciba otro
y modifique su numerador y denominador como resultado de sumar, restar, multiplicar o dividir
sus valores con los del fraccionario que recibi como parmetro.
Estos deben ser los encabezados de los mtodos que se piden:
public void sumarse(Fraccionario otro) {}
public void restarse(Fraccionario otro) {}
public void multiplicarse(Fraccionario otro){}
public void dividirse(Fraccionario otro) {}
}
2. La Universidad Icesi est organizando un equipo de ftbol, cuyos integrantes deben
ser hombres que trabajen o estudien en ella; este equipo deber representar a la
universidad en los diversos torneos a los cuales lo inviten. El director de deportes
espera el anlisis completo y el software necesario para poder guardar y gestionar la
siguiente informacin:
"Mira la idea es que podamos formar un equipo bien 'jalao', que se va a llamar La
Amenaza Verde, de l necesitamos guardar informacin acerca de cuntos jugadores
hay, cuntos partidos ha jugado, cuntos ha ganado, perdido y empatado, adems de
CONCEPTOS BSICOS DE PROGRAMACIN CON JAVA Tercera edicin
LUZ ELENA JIMNEZ COLLAZOS UNIVERSIDAD ICESI
33
los goles a favor y en contra. De cada jugador queremos guardar el nombre, la edad, el
rea de la universidad en que trabaja o el plan de estudio en que est matriculado, la
posicin en que juega mejor y una posicin alternativa.
Lo que requieren en este momento es:
1. Capturar la informacin de cada miembro de Icesi que quiera ser tenido en cuenta.
2. Registrar el equipo, sin la informacin de los candidatos que no fueron
seleccionados.
3. Registrar un campeonato con su nombre y el nmero de partidos que debe jugar
Icesi en l.
4. Registrar, al concluir el campeonato, de cada partido jugado:
a) Quin fue el equipo contrario.
b) Resultado del partido, incluye el marcador.
c) Si Icesi hizo goles en ese partido, quien o quienes hicieron los goles.
5. Consultar, al concluir el ingreso de la informacin de un campeonato:
a) Goleador del equipo, indicando si se trata de un empleado o un estudiante.
b) Rendimiento (puntos obtenidos / puntos posibles)
c) Cantidad de partidos empatados.
3. La empresa Disfrutemos el Ro Cauca, le ha contratado para que les ayude con el
software necesario para el control de sus embarcaciones y puertos sobre el ro.
Para empezar la relacin comercial, le han solicitado que elabore el diagrama de
clases para la siguiente situacin:
Nosotros ofrecemos dos servicios de transporte, como usted probablemente sabr, el
transporte turstico y el trasporte de carga.
Para atender el trasporte turstico contamos con dos tipos de embarcaciones, las
sencillas que son para recorridos que no sobrepasan las cuatro horas; y las casa -
barca, para el resto de recorridos, que pueden durar desde 12 horas hasta una
semana. De cada embarcacin necesitamos llevar un registro, el cual debe incluir su
nombre, su capacidad y la cantidad de tripulacin que requiere para un viaje. Para las
sencillas la capacidad est dada por el nmero de pasajeros que pueden transportar y
el costo del pasaje es idntico para todos los pasajeros; pero para las casa-barca est
dada, adems de por la cantidad de pasajeros que puede alojar, por el que haya o no
un cuarto exclusivo libre para la persona o grupo de personas que lo solicitan, o por el
que haya o no cupo en el saln comn, el precio depende del tipo de alojamiento que
la persona pida, ya que las personas que viajan en cuartos exclusivos tienen un
recargo del 50% sobre el costo del pasaje.
Para atender el transporte de carga se tiene un tipo nico de embarcacin, cuya
capacidad est dada por la cantidad de toneladas que puede transportar, y el valor del
trasporte se calcula de acuerdo al siguiente rango:
1 20 toneladas: transporte = valorTonelada * nmeroToneladas.
21 50 toneladas: tiene un descuento del 5 %.
50 100 toneladas: tiene un descuento del 10%.
De estas embarcaciones necesitamos saber, tambin, su nombre, capacidad, cantidad
de tripulacin y compaa de seguros que la cubre.
De nuestros puertos fluviales necesitamos saber su nombre, el kilmetro del ro en el
cual se encuentra ubicado, el responsable del puerto, la capacidad del mismo, el nivel
de ocupacin en un momento determinado y el tipo de embarcacin que puede recibir.
Si es un puerto para carga, necesitamos conocer la cantidad de bodegas con que
cuenta y el nmero de cuartos fros, adems de saber cuntas bodegas y cuartos fros
estn disponibles en un momento determinado. De los puertos tursticos se requiere
CONCEPTOS BSICOS DE PROGRAMACIN CON JAVA Tercera edicin
LUZ ELENA JIMNEZ COLLAZOS UNIVERSIDAD ICESI
34
saber cuntos restaurantes tiene y el tipo de comida que ofrece cada uno, adems de
saber si tiene tienda de recuerdos o no.
Tambin le han pedido que, de acuerdo al diagrama de clases que elabor escriba el
cdigo en java, correspondiente al manejo de los puertos.
4. Como hoy en da hay tantas posibilidades de intercambios comerciales entre los
pases, se ha decidido crear la Asamblea de los Pases Amigables. En esta
asamblea los pases podrn establecer lazos de cooperacin entre ellos. Los
organizadores de la asamblea quieren tener la informacin de los pases que la
conforman. De cada pas desean tener su nombre, extensin y nmero de
habitantes. De los pases con democracia se necesita saber los aos de cada
perodo de gobierno y de los otros pases se debe saber cul es el nombre de su
sistema de gobierno.
Para todos los pases es importante saber con cules pases comercia, cules son los
productos que exporta y cules los productos que importa. Los productos tienen un
nombre, descripcin, precio e indicacin de si pagan impuestos o no.
Con todo muy bien organizado se podr insertar la informacin de nuevos pases que
se inscriban en la asamblea, consultar la informacin de un pas y definir nuevos
convenios entre pases.
La Asamblea de Pases Amigables desea evaluar su habilidad en la programacin OO,
para saber si lo contrata para trabajar con ellos, y por esto le pedido que elabore:
El diagrama de clases.
El cdigo correspondiente a las clases, atributos y encabezados de los mtodos. No
es necesario hacer el cdigo de los mtodos.
5. La compaa de salas de cine Cine Locura quiere organizar todo su sistema, para
poder automatizar algunos de sus procesos. Un ingeniero que tiene algunos
conocimientos de OO ha elaborado un diagrama de clases preliminar. Sin embargo,
en este diagrama falta definir los atributos y los mtodos de la clase
SalaPreferencial. Usted debe, de acuerdo con la descripcin que hay despus del
diagrama de clases:
Completar el diagrama de clases.
Elaborar el cdigo completo de las clases SalaPreferencial y Multiplex. NO es
necesario hacer el cdigo de la clase SalaNormal, pues el ingeniero que trabaja en la
compaa de cine ya la elabor.


















SalaNormal
- nmero: int
- capacidad: int
- boletasVendidas: int
+ precioBsico: double

+ SalaNormal(String, int, int)
+ toString(): String
+ getCapacidad():int
+ getBoletasVendidas():int
+ setBoletasVendidas(int):void
+ valorBoleta(): double
+ venderBoletas(int):void
Multiplex
- salas: ArrayList

+ main(String[]):void
+ iniciarVenta():void
+ venderBoletas():void
+ adicionarSala():void
+ consultarSala():void



SalaPreferencial
CONCEPTOS BSICOS DE PROGRAMACIN CON JAVA Tercera edicin
LUZ ELENA JIMNEZ COLLAZOS UNIVERSIDAD ICESI
35
En esta compaa se tienen diferentes salas de cine, que pueden ser normales o
preferenciales (que tienen asientos ms cmodos y cafetera interna). Todas las salas
de cine tienen un nmero y la capacidad (nmero de sillas). Para cada sala tambin
deben saber cuntas boletas se han vendido para una funcin. Cada sala preferencial
tiene un tipo de cafetera, que puede ser de alimentos dietticos, de comidas de sal o
de dulces. Adems, algunas de las salas preferenciales pueden tener sonido
ambiental. El valor de cada boleta depende de la sala. En las salas normales se cobra
el precio bsico (que es igual para todas las salas), pero si la sala tiene ms de 100
asientos se da un 10% de descuento. En las salas preferenciales se cobra el precio
bsico ms un incremento de $200 si tiene sonido ambiental, y otro incremento
dependiendo del tipo de cafetera: para las cafeteras dietticas hay un incremento de
$500, para las de dulce $300 y para las de sal $400.
Los administradores del mltiplex desean que el sistema les permita: ingresar la
informacin de nuevas salas, consultar la informacin de una sala dado su nmero,
decir cuando se va a iniciar una venta de boletas para una sala de cine y vender
boletas. Para vender boletas se debe preguntar el nmero de la sala y mostrar el
nmero de asientos disponibles (se descuenta de la capacidad las boletas vendidas).
Luego se pregunta al usuario cuntas boletas desea y se le muestra el valor total a
pagar. Si el usuario acepta se deben incrementar el nmero de boletas vendidas para
esa sala.
Cuando se dice que se iniciar la venta de boletas para una sala se debe volver a cero
el nmero de boletas vendidas, pues ahora comienza una nueva funcin.

4.10 Diseo de medios interactivos
Ejercicios resueltos
Los siguientes ejercicios pueden ser ejecutados en Processing, han sido
elaborados en la versin 0135, la ltima versin se puede descargar gratuitamente
desde http://processing.org

4.10.1 Mtodos

4.10.1.1 Ejemplo de mtodo para dibujar figura con posicin como
parmetro
/* Repeticin de figuras - mtodos
Dibujar anillos compuestos de crculos que se repitan con desplazamiento diagonal en el lienzo.
Autor: Juan Carlos Muoz - Marzo 2008
Para: Fundamentos de programacin para el diseo - Universidad Icesi
Descripcin: Se utiliza un mtodo para definir una figura y sus parmetros para dibujarla variando la
posicin.
**No se utilizan tildes ni caracteres especiales por compatibilidad con Processing en Mac
*/
Anlisis
Variables globales: 1. cantidadFiguras 2. separacionFiguras
3. posicionInicial
setup():
variables globales utilizadas: 1, 2, 3
salidas: dibujar las figuras (lienzo)
proceso:
establecer el tamao de la ventana y color de fondo
desde contador =0 hasta contador igual a cantidadFiguras - 1
incrementando de uno en uno
Resultado obtenido
CONCEPTOS BSICOS DE PROGRAMACIN CON JAVA Tercera edicin
LUZ ELENA JIMNEZ COLLAZOS UNIVERSIDAD ICESI
36
llamar al mtodo anillo para dibujar la figura en
posicionInicial+separacionFiguras*contador
anillo():
entradas: posicionX
posicionY
retorno:
salidas: La figura en las coordenadas (lienzo)
proceso:
fijar los parmetros
inicializar el ngulo en 0
desde contador = 0 hasta contador igual a cantidadFiguras -1
incrementando de uno en uno
calcular la posicin relativa en X y Y con seno y coseno de
acuerdo al ngulo y el radio.
dibujar el crculo en la posicin absoluta ms la relativa
incrementar el ngulo de acuerdo a cantidadFiguras
*/
Cdigo
// Variables
int cantidadFiguras = 5,posicionInicial = 30;
int separacionFiguras = 35;
void setup(){
size(200,200);
background(0);
// Dibuja cinco veces la figura
for (int cont = 0; cont < cantidadFiguras; cont++) {
// Llama al mtodo que dibuja la figura con valores
// aleatorios para posicin
anillo (posicionInicial + separacionFiguras * cont,
posicionInicial + separacionFiguras * cont);
}
}
void anillo(int pPosX, int pPosY){
// Valores que definen la figura base
int ancho = 10, cantidadCirculos = 10, radio = 20;
// ngulo para recorrer la circunferencia imaginaria
float angulo = 0;
// Dibuja la figura y obteniendo cada posicin cartesiana
for (int cont = 0; cont < cantidadCirculos; cont++) {
// Calcula las posiciones en X y Y de acuerdo al ngulo
int x = (int)(sin(angulo) * radio);
int y = (int)(cos(angulo) * radio);
ellipse(x + pPosX, y + pPosY, ancho, ancho);
// Incrementa el ngulo de acuerdo a la cantidad de
// crculos
angulo += 2* PI / cantidadCirculos;
}
}




4.10.1.2 Ejemplo de mtodo para dibujar figura con posicin, tamao y
color como parmetros
/* Repeticin de figuras
Dibujar anillos en posiciones aleatorias del lienzo, variando el color y tamao tambin aleatoriamente.
Autor: Juan Carlos Muoz - Marzo 2008
Para: Fundamentos de programacin para el diseo - Universidad Icesi
Descripcin: Se utiliza un mtodo para definir una figura y sus parmetros para dibujarla variando
caractersticas
**No se utilizan tildes ni caracteres especiales por compatibilidad con Processing en Mac
*/
Anlisis Resultado obtenido
CONCEPTOS BSICOS DE PROGRAMACIN CON JAVA Tercera edicin
LUZ ELENA JIMNEZ COLLAZOS UNIVERSIDAD ICESI
37
/*
Variables globales: cantidadFiguras
setup():
variables globales utilizadas: cantidadFiguras
entradas:
retorno:
salidas: Las figuras (lienzo)
proceso:
establecer el tamao de la ventana y color de fondo
desde contador=0 hasta contador igual a cantidadFiguras-1
incrementando de uno en uno
llamar al mtodo anillo para dibujar la figura generando los
valores aleatorios para posicin, tamao y color
anillo():
entradas: posicionX, posicionY, escala, color
retorno:
salidas: La figura de acuerdo las coordenadas, escala y
color (lienzo)
proceso:
fijar los parmetros
inicializar el ngulo en 0
desde contador = 0 hasta contador igual a cantidadFiguras-1
incrementando de uno en uno
calcular la posicin relativa en X y Y con seno y coseno de
acuerdo al ngulo, el radio y la escala.
dibujar el crculo en la posicin absoluta ms la relativa, su
tamao depende de la escala
incrementar el ngulo de acuerdo a cantidadFiguras
*/
Codigo
// Variables
int cantidadFiguras = 5;
void setup(){
size(200,200);
background(0);
// Dibuja cinco veces la figura
for (int cont = 0; cont < cantidadFiguras; cont++) {
// Llama al mtodo que dibuja la figura con valores
// aleatorios para posicin, tamao y color
anillo ((int)random(2,18)*10, (int)random(2,18)*10,
random(0.5,2), color(random(30,255), random(30,255),
random(30,255)));
}
}
void anillo(int pPosX, int pPosY,float pEscala, color pColor){
// Valores que definen la figura base
int ancho = 10, cantidadCirculos = 10, radio = 20;
// ngulo para recorrer la circunferencia imaginaria
float angulo = 0;
// Dibuja la figura y obteniendo cada posicin cartesiana
for (int cont = 0; cont < cantidadCirculos; cont++) {
// Calcula las posiciones en X y Y de acuerdo al ngulo
int x = (int)(sin(angulo) * radio * pEscala);
int y = (int)(cos(angulo) * radio * pEscala);
fill(pColor);
ellipse(x + pPosX, y + pPosY,
ancho * pEscala, ancho * pEscala);
// Incrementa el ngulo de acuerdo a la cantidad de
// crculos
angulo += 2* PI / cantidadCirculos;
}



CONCEPTOS BSICOS DE PROGRAMACIN CON JAVA Tercera edicin
LUZ ELENA JIMNEZ COLLAZOS UNIVERSIDAD ICESI
38
}

4.10.1.3 Ejemplo de mtodo para dibujar figura con posicin, tamao,
color y forma como parmetros

/* Repeticin de figuras 3
Dibujar anillos en posiciones aleatorias del lienzo, variando el color, forma y tamao tambin
aleatoriamente
Autor: Juan Carlos Muoz - Marzo 2008
Para: Fundamentos de programacin para el diseo - Universidad Icesi
Descripcin : Se utiliza un mtodo para definir una figura y sus parmetros para dibujarla variando
forma y otros aspectos
**No se utilizan tildes ni caracteres especiales por compatibilidad con Processing en Mac
*/
Anlisis
/*
Variables Globales: cantidadFiguras
setup():
variables globales utilizadas: cantidadFiguras
entradas:
retorno:
salidas: Las figuras (lienzo)
proceso:
establecer el tamao de la ventana y color de fondo
desde contador=0 hasta contador igual cantidadFiguras-1
incrementando de uno en uno
llamar al mtodo anillo para dibujar la figura generando
los valores aleatorios para posicin, tamao y color
anillo():
entradas: posicionX, posicionY, escala, color, forma
retorno:
salidas: La figura de acuerdo las coordenadas, escala y color
(lienzo)
proceso:
fijar los parmetros
calcular el valor del radio en cada dimensin dependiendo
del parmetro
inicializar el ngulo en 0
desde contador=0 hasta contador igual a cantidadFiguras-1
incrementando de uno en uno
calcular la posicin relativa en X y Y con seno y coseno de
acuerdo al ngulo, el radio y la escala.
dibujar el crculo en la posicin absoluta ms la relativa, su
tamao depende de la escala
incrementar el ngulo de acuerdo a la cantidadFiguras
*/
Cdigo
// Variables
int cantidadFiguras = 5;
void setup(){
size(200,200);
background(0);
// Dibuja cinco veces la figura
for (int cont = 0; cont < cantidadFiguras; cont++) {
// Llama al mtodo que dibuja la figura con valores
// aleatorios para posicin, tamao y color
anillo ((int)random(2,18)*10,
(int)random(2,18)*10,
random(0.5,2),
color(random(30,255),random(30,255),random(30,255)),
Resultado obtenido



CONCEPTOS BSICOS DE PROGRAMACIN CON JAVA Tercera edicin
LUZ ELENA JIMNEZ COLLAZOS UNIVERSIDAD ICESI
39
(int)random(1,4.9));
}
}
void anillo(int pPosX, int pPosY,float pEscala, color pColor, int
pForma){
// Valores que definen la figura base
int ancho = 10;
int cantidadCirculos = 10;
int radio = 20;
int radioX = (int)(pForma%2==0?radio:radio*1.5);
int radioY = (int)(pForma/2==0?radio:radio*0.5);
// ngulo para recorrer la circunferencia imaginaria
float angulo = 0;
// Dibuja la figura y obteniendo cada posicin cartesiana
for (int cont = 0; cont < cantidadCirculos; cont++) {
// Calcula las posiciones en X y Y de acuerdo al ngulo
int x = (int)(sin(angulo) * radioX * pEscala);
int y = (int)(cos(angulo) * radioY * pEscala);
fill(pColor);
ellipse(x + pPosX, y + pPosY,
ancho * pEscala, ancho * pEscala);
// Incrementa el ngulo de acuerdo a la cantidad de
// crculos
angulo += 2* PI / cantidadCirculos;
}
}


4.10.2 Objetos

4.10.2.1 Ejemplo de creacin de mltiples objetos a partir de una clase

/ * Bosque en crecimiento
Dibujar rboles (con tringulos y rectngulos) de colores y tamaos variados que vayan creciendo
conforme pasa el tiempo con desplazamiento diagonal en el lienzo.
Autor: Juan Carlos Muoz - Abril 2008
Para: Fundamentos de programacin para el diseo - Universidad Icesi
Descripcin: Se utiliza una clase que define los atributos del rbol y su comportamiento; son creados
en el mtodo setup y modificados y mostrados en el mtodo draw
**No se utilizan tildes ni caracteres especiales por compatibilidad con Processing en Mac
*/
//******** TAB principal ********
/*
Variables globales: 1. cantidadArboles 2. arboles (arreglo)
setup():
variables globales utilizadas: 1, 2
salidas:
proceso:
establecer el tamao de la ventana y velocidad de actualizacin
desde contArbol = 0 hasta cantidadArboles incrementando de uno en uno
arboles[contArbol] = nuevo Arbol con valores aleatorios
draw():
variables globales utilizadas: 1, 2
salidas: dibujo de los rboles (lienzo)
proceso:
llamar al mtodo crecer en arboles[posicion aleatoria]
desde contArbol = 0 hasta cantidadArboles incrementando de uno en uno
llamar al mtodo pintar en arboles[contArbol]
*/
int cantidadArboles = 30;
CONCEPTOS BSICOS DE PROGRAMACIN CON JAVA Tercera edicin
LUZ ELENA JIMNEZ COLLAZOS UNIVERSIDAD ICESI
40
Arbol [] arboles = new Arbol[cantidadArboles];
void setup(){
size(350, 400);
frameRate(5);
smooth();
//Se crean todos los arboles
for (int contArbol = 0; contArbol < cantidadArboles; contArbol++) {
arboles[contArbol] = new Arbol((int) random(0,300), (int) random(10,280),
color(200, (int) random(150,251), 123),
(int) random(5,10), (int) random(10,15));
}
}
void draw(){
background(0);
//Aleatoriamente a un rbol se lle realiza el llamado al mtodo crecer
arboles[(int)random(0,cantidadArboles)].crecer();
//Se dibujan nuevamente todos los arboles
for (int contArbol = 0; contArbol < cantidadArboles; contArbol++) {
arboles[contArbol].pintar();
}
}
//******** TAB Arbol ********
* Descripcin: Define los atributos del rbol y su comportamiento permite pintarlo e incrementar el
tamao
* Anlisis:
Atributos: 1. alturaMaxRama 2. alturaRama 3. cantidadRamas 4. colorRamas 5. posX 6. posY
Arbol(int, int, color, int int):
atributos utilizados: todos (excepto 1)
salidas:
proceso:
asignar todos los atributos, excepto el 1.
pintar():
atributos utilizados: todos (excepto 1)
salidas: dibuja un rbol (lienzo)
proceso:
definir variable ancho = 10
establecer como color de relleno colorRamas
desde contRama = 0 hasta cantidadRamas incrementando de uno en uno
dibujar un tringulo ancho += alturaRama / 2
definir el color del tallo
dibujar el tallo
crecer():
atributos utilizados: 1, 2, 6
salidas:
proceso:
Si alturaMaxRama es mayor alturaRama
alturaRama++
posY -= cantidadRama
*/
public class Arbol{
private int alturaMaxRama = 15;
private int alturaRama;
private int cantidadRamas;
private color colorRamas;
private int posX;
private int posY;
public Arbol(int pPosX, int pPosY, color pColorRamas, int pAlturaRama, int pCantidadRamas) {
posX = pPosX;
posY = pPosY;
colorRamas = pColorRamas;
alturaRama = pAlturaRama;
CONCEPTOS BSICOS DE PROGRAMACIN CON JAVA Tercera edicin
LUZ ELENA JIMNEZ COLLAZOS UNIVERSIDAD ICESI
41
cantidadRamas = pCantidadRamas;
}
public void pintar() {
int ancho = 10;
fill(colorRamas);
for (int contRama = 0; contRama < cantidadRamas; contRama++) {
triangle(posX + (cantidadRamas - contRama) * alturaRama / 4 , posY + alturaRama *
(contRama + 1),
posX + (cantidadRamas - contRama) * alturaRama / 4 + ancho, posY + alturaRama *
(contRama + 1),
posX + (cantidadRamas - contRama) * alturaRama / 4 + ancho/2, posY + alturaRama *
contRama);
ancho += alturaRama / 2;
}
fill(100, 48, 4);
rect(posX + ancho / 2 - 3, posY + alturaRama * (cantidadRamas), 6,20);
}
public void crecer() {
if (alturaMaxRama > alturaRama) {
alturaRama++;
posY -= cantidadRamas;
}
}
}

Resultado obtenido



4.10.2.2 Ejemplo de creacin de una animacin utilizando mltiples
objetos de una clase
/* Animacin del recorrido del mouse
Autor: Juan Carlos Muoz - Mayo 2008
Para: Fundamentos de programacin para el diseo - Universidad Icesi
Descripcin: Se utiliza un ArrayList para almacenar cada uno de los objetos que se van creando como
rastro del mouse, despus de un tiempo se animan y finalmente se borran
**No se utilizan tildes ni caracteres especiales por compatibilidad con Processing en Mac
*/
CONCEPTOS BSICOS DE PROGRAMACIN CON JAVA Tercera edicin
LUZ ELENA JIMNEZ COLLAZOS UNIVERSIDAD ICESI
42
//TAB principal
/*
Variables globales: 1. cuadros (ArrayList) 2. contGuardadas
setup():
variables globales utilizadas: ninguna
salidas:
proceso:
establecer el tamao de la ventana
quitar las lineas
draw():
variables globales utilizadas: 1
salidas: dibujo de los cuadros (lienzo)
proceso:
establecer el color de fondo
desde contCuadros = 0 hasta tamao del ArrayList incrementando de uno en uno
si (decimas de segundo mayor momentoDibujo de cuadros en posicion contCuadros +100)
borrar de cuadros la posicin contCuadros
sino
llamar a pintar de cuadros en contCuados con apha 95
llamar a pintar de cuadros en contCuados con apha 100
mouseMoved():
variables globales utilizadas: 1
salidas:
proceso:
adicionar el nuevo cuadro al arreglo con las posiciones del mouse y el tiempo actual
mousePressed():
variables globales utilizadas: 2
salidas:
proceso:
guardar una imagen jpg cada vez que se hace clic en la carpeta del proyecto, incrementando el
contador
*/
// Se define y crea un ArrayList el cual es un arreglo de capacidad dinmica que adicional a la
// capacidad de almacenar brinda unos servicios para administrar los elementos
ArrayList cuadros = new ArrayList();
int contGuardadas=0;
void setup() {
size (350,400);
noStroke();
}
void draw(){
background(0);
noStroke();
for (int contCuadros = 0; contCuadros<cuadros.size();contCuadros++){
//La funcin millis se obtiene la cantidad de milisegundos que han transcurrido desde el inicio
if (millis()/100 > ((Cuadro)cuadros.get(contCuadros)).getMomentoDibujo()+100){
//borrar del ArrayList elementos que han estado por lo menos 10 segundos visualizados
cuadros.remove(contCuadros);
} else {
((Cuadro)cuadros.get(contCuadros)).pintar(95);
((Cuadro)cuadros.get(contCuadros)).pintar(100);
}
}
}
void mouseMoved() {
//Se adiciona un nuevo elemento al ArrayList con las coordenadas del mouse
cuadros.add(new Cuadro(mouseX, mouseY, color(140, 15, 60), (int)millis() / 100));
}
void mousePressed() {
saveFrame("frame"+contGuardadas++ +".jpg");
}
CONCEPTOS BSICOS DE PROGRAMACIN CON JAVA Tercera edicin
LUZ ELENA JIMNEZ COLLAZOS UNIVERSIDAD ICESI
43
//TAB Cuadro
/ * Descripcin: Define los atributos del cuadro y su comportamiento
Permite pintarlo dependiendo del momento
* Anlisis:
Atributos: 1. colorReal 2. iteracion 3. posX 4. posY 5. momentoDibujo
Cuadro(int, int, color, int):
atributos utilizados: todos
salidas:
proceso:
asignar todos los atributos, excepto el 2 de los parmetros.
iteracion = 50
pintar(int):
atributos utilizados: todos
salidas: dibuja un cuadro (lienzo)
proceso:
si decimas de segundo mayor a momentoDibujo + 30
si iteracion mayor 0
fijar color de relleno colorReal-3000+iteracion *2 y apha-30
iteracion
sino
fijar color de relleno colorReal - 3000 y apha 30
sino
fijar color de relleno colorReal y apha - 30
dibujar rectangulo con posX posY y alpha
getMomentoDibujo():
*/
public class Cuadro{
private color colorReal;
// define la cantidad de cambios que se realizan antes de obtener el color final
private int iteracion;
private int posX;
private int posY;
private int momentoDibujo;
public Cuadro (int pPosX, int pPosY, color pColorReal, int pMomentoDibujo){
posX = pPosX;
posY = pPosY;
colorReal = pColorReal;
momentoDibujo = pMomentoDibujo;
iteracion = 50;
}

public int getMomentoDibujo() {
return momentoDibujo;
}
public void pintar(int pAlpha) {
//Valida si pararon 3 segundos, para iniciar la animacion del elemento
if (millis() / 100 > momentoDibujo + 30){
if (iteracion > 0) {
fill (colorReal - 3000 + iteracion * 2, pAlpha - 30);
iteracion--;
} else {
fill(colorReal - 3000, pAlpha - 30);
}
} else {
fill(colorReal, pAlpha - 30);
}
rect (posX+(-95+pAlpha)/2, posY+(-95+pAlpha)/2,20+100-pAlpha, 20+100-pAlpha);
}
}

Resultado obtenido
CONCEPTOS BSICOS DE PROGRAMACIN CON JAVA Tercera edicin
LUZ ELENA JIMNEZ COLLAZOS UNIVERSIDAD ICESI
44


4.10.3 Herencia

4.10.3.1 Ejemplo de utilizacin de herencia y polimorfismo para
modificar la forma de dibujar los elementos

/ * Exhibicin de sillas
Mostrar sillas de tres tipos diferentes, que tienen como atributos en comn los colores, altura, y
posicin. Una silla mvil adicionalmente tiene una cantidad de patas. Una silla con ruedas
adicionalmente tiene el color del las ruedas.
Autor: Juan Carlos Muoz - Abril 2008
Para: Fundamentos de programacin para el diseo - Universidad Icesi
Descripcin: Se utiliza una clase general y dos clases ms que heredan una de la otra, adicionando los
nuevos atributos solicitados. Dependiendo de los atributos, se definen o sobrescriben los mtodos
para dibujar las partes de objetos. Se crea un arreglo de sillas y de los colores para cambiarlos
fcilmente
**No se utilizan tildes ni caracteres especiales por compatibilidad con Processing en Mac
*/
// TAB principal
/*
Variables globales: 1. cantidadSillas 2. sillas (arreglo) 3. coloresBase (arreglo) 4. coloresTela (arreglo)
5. coloresRuedas (arreglo)
setup():
variables globales utilizadas: todas
salidas: mostrar las lneas divisorias y las sillas (lienzo)
proceso:
establecer el tamao de la ventana y color de fondo
crear la silla 0, 1, 4 de tipo Silla
crear la silla 2, 3, 5 de tipo SillaMovil
crear la silla 6, 7, 8 de tipo SillaHidraulica
desde contSillas = 0 hasta cantidadSillas incrementando de uno en uno
llamar a pintar() en sillas[contSillas]
*/
int cantidadSillas = 9;
Silla sillas[] = new Silla[cantidadSillas];
//Se crean los arreglos que definen los colores
color coloresBase[] = {color(20,20,20),color(30,30,20),color(30,30,20),color(30,30,20)};
CONCEPTOS BSICOS DE PROGRAMACIN CON JAVA Tercera edicin
LUZ ELENA JIMNEZ COLLAZOS UNIVERSIDAD ICESI
45
color coloresTela[] = {color(193,0,0),color(0,4,193),color(25,193,0),color(30,30,120)};
color coloresRuedas[] = {color(16,116,1),color(16,116,1),color(1,17,116)};
void setup () {
size(400,350);
background(255);
noStroke();
fill(150,150,150);
rect(40,310,320,10);
rect(40,210,320,10);
rect(40,110,320,10);
rect(40,10,320,10);
//Se crean todas las sillas, cada una con atributos diferentes
sillas[0] = new Silla(40,270,coloresBase[0],coloresTela[0],30);
sillas[1] = new Silla(130,260,coloresBase[1],coloresTela[1],40);
sillas[4] = new Silla(130,170,coloresBase[0],coloresTela[0],30);
sillas[2] = new SillaMovil(220,270,coloresBase[2],coloresTela[2],30,4);
sillas[3] = new SillaMovil(310,260,coloresBase[3],coloresTela[3],40,4);
sillas[5] = new SillaMovil(220,160,coloresBase[1],coloresTela[1],40,5);
sillas[6] = new SillaHidraulica(310,170,coloresBase[2],coloresTela[2],30,4,coloresRuedas[0]);
sillas[7] = new SillaHidraulica(220,60,coloresBase[2],coloresTela[2],40,4,coloresRuedas[1]);
sillas[8] = new SillaHidraulica(310,70,coloresBase[3],coloresTela[3],30,4,coloresRuedas[2]);
for (int contSillas = 0; contSillas < cantidadSillas; contSillas++) {
sillas[contSillas].pintar();
}
}
//****TAB Silla
/*
* Descripcin: Define los atributos de la silla y su comportamiento.
Permite pintarla
* Anlisis:
Atributos: 1. altura 2. anchoSilla 3. colorBase 4. colorTela 5. posX 6. posY
Silla(int, int, color, color, int):
atributos utilizados: todos (excepto 2)
salidas:
proceso:
asignar todos los atributos.
pintarAsiento():
atributos utilizados: 2, 4, 5, 6
salidas: dibujar el asiento de la silla (lienzo)
proceso:
establecer como color de relleno colorTela
dibujar una elipse con posX, posY y anchoSilla
pintarPatas():
atributos utilizados: 1, 3, 4, 5, 6
salidas: dibuja la pata de la silla (lienzo)
proceso:
establecer como color de relleno colorBase
dibujar un rectngulo con posX, posY y altura
pintar():
atributos utilizados:
salidas: dibuja la silla (lienzo)
proceso:
llamar a pintarAsiento
llamar a pintarPatas
get*
*/
public class Silla{
private int altura;
private int anchoSilla;
private color colorBase;
private color colorTela;
CONCEPTOS BSICOS DE PROGRAMACIN CON JAVA Tercera edicin
LUZ ELENA JIMNEZ COLLAZOS UNIVERSIDAD ICESI
46
private int posX;
private int posY;
public Silla (int pPosX, int pPosY, color pColorBase, color pColorTela, int pAltura){
anchoSilla = 50;
posX = pPosX;
posY = pPosY;
colorBase = pColorBase;
colorTela = pColorTela;
altura = pAltura;
}
public void pintarAsiento() {
fill(colorTela);
ellipse(posX + anchoSilla / 2, posY + 5,
anchoSilla, 10);
}
public void pintarPatas() {
fill(colorBase);
stroke(colorBase);
rect (posX + anchoSilla / 2 - 3, posY + 10, 6, altura);
}
//Dibuja la silla sencilla
public void pintar () {
pintarPatas();
pintarAsiento();
}
public int getPosX() {
return posX; }
public int getPosY() {
return posY; }

public int getAnchoSilla(){
return anchoSilla; }
public int getAltura() {
return altura; }
public int getColorTela(){
return colorTela; }
public int getColorBase(){
return colorBase; }
}
//****TAB Silla Movil
* Descripcin: Define los atributos de la silla mvil y su comportamiento, heredando de Silla.
Sobrescribe el mtodo para pintar las patas
* Anlisis:
Atributos: 1. numeroPatas
SillaMovil(int, int, color, color, int,int):
atributos utilizados: 1
salidas:
proceso:
llamar al constructor de la clase padre
asignar atributo adicional.
pintarPatas():
atributos utilizados: 1
salidas: dibuja las patas de la silla (lienzo)
proceso:
establecer el grosor de la lnea en 4
desde contPatas = 0 hasta numeroPatas incrementando de uno en uno
dibujar una linea desde el punto medio de la silla hacia abajo
establecer el grosor de la linea en 1
get*
*/
public class SillaMovil extends Silla{
CONCEPTOS BSICOS DE PROGRAMACIN CON JAVA Tercera edicin
LUZ ELENA JIMNEZ COLLAZOS UNIVERSIDAD ICESI
47
private int numeroPatas;
//Constructor
public SillaMovil (int pPosX, int pPosY, color pColorBase, color pColorTela,int pAltura, int
pNumeroPatas) {
super (pPosX, pPosY, pColorBase, pColorTela, pAltura );
numeroPatas = pNumeroPatas;
}
//Se cambia el mtodo pintarPatas para pintar todas las patas
public void pintarPatas() {
strokeWeight(4);
stroke(getColorBase());
for (int contPatas = 0; contPatas < numeroPatas; contPatas++) {
line(getPosX()+getAnchoSilla()/2, getPosY()+10,
getPosX()+getAnchoSilla()/numeroPatas*(contPatas + 0.5), getPosY()+10+getAltura());
}
strokeWeight(1);
}
public int getNumeroPatas(){
return numeroPatas;
}
}
//**** TAB Silla Hidrulica
* Descripcin: Define los atributos de la silla hidrulica y su comportamiento, heredando de SillaMovil.
Sobrescribe el mtodo para pintar
* Anlisis:
Atributos: 1. colorRuedas
SillaMovil(int, int, color, color, int, int, color):
atributos utilizados: 1
salidas:
proceso:
llamar al constructor de la clase padre
asignar atributo adicional.
pintarRuedas():
atributos utilizados: 1
salidas: dibuja las ruedas de la silla (lienzo)
proceso:
establecer el color de relleno con colorRuedas
desde contRuedas = 0 hasta numeroRuedas incrementando de uno en uno
dibujar una elipse con la ubicacin dependiendo de contRuedas
pintar()
atributos utilizados:
salidas: dibuja la silla (lienzo)
proceso:
llamar a pintar de la clase padre
llamar a pintarRuedas
get*
*/
public class SillaHidraulica extends SillaMovil{
private color colorRuedas;
public SillaHidraulica (int pPosX, int pPosY, color pColorBase, color pColorTela,int pAltura, int
pNumeroPatas, color pColorRuedas) {
super (pPosX, pPosY, pColorBase, pColorTela, pAltura, pNumeroPatas );
colorRuedas = pColorRuedas;
}
public void pintarRuedas() {
fill (colorRuedas);
for (int contRuedas = 0; contRuedas < getNumeroPatas(); contRuedas++){
ellipse(getPosX()+getAnchoSilla()/getNumeroPatas()*(contRuedas+0.5)-3,
getPosY()+10+getAltura(), 6, 6);
}
}
CONCEPTOS BSICOS DE PROGRAMACIN CON JAVA Tercera edicin
LUZ ELENA JIMNEZ COLLAZOS UNIVERSIDAD ICESI
48
//Se modifica el mtodo pintar para mostrar tambin las ruedas
public void pintar() {
super.pintar();
pintarRuedas();
}
}
Resultado obtenido




Ejercicios propuestos
Los siguientes ejercicios se proponen para ser realizados en Processing. Se sugiere
primero realizar el anlisis y posteriormente escribir el cdigo.

4.10.4 Mtodos
Disee una figura que pueda ser elaborada a partir de uno o varios elementos simples.
Elabore un mtodo para dibujar cada uno de los elementos simples que va a requerir.
Posteriormente elabore un mtodo que dibuje la figura haciendo uso de los mtodos
inicialmente definidos. Finalmente realice una animacin de una o varias de estas figuras
realizando cambios en los parmetros desde el mtodo draw al mtodo que dibuja las
figuras.

4.10.5 Objetos
Crear una hilera de hormigas arrieras que caminan estrictamente una detrs de la otra.
La primera hormiga de la hilera desde una esquina de la pantalla en forma lineal hasta
otra esquina, las dems debern seguir en orden a su predecesora hasta que todas
salgan de la pantalla. Cada hormiga debe ser una instancia de la clase hormiga. Aunque
todas las hormigas son hijas de la clase hormiga, no deben ser idnticas, deben existir
variaciones en sus atributos, por ejemplo unas pueden ser ms negritas que otras, o
tener patas ms largas que otras o simplemente ser ms gorditas que las otras.

You might also like