Sunteți pe pagina 1din 27

Tema 5 Objetos, clases y mtodos e

Cuando se comparan diferentes lenguajes de programacin, como C, Pascal, Fortran, o C++, java, etc, podemos reconocer unos elementos comunes a todos ellos, como variables, expresiones e instrucciones de asignacin, condicionales y de repeticin. Evidentemente, la o o existencia de esos aspectos comunes no implica que no haya diferencias entre unos lenguajes y otros. Por ejemplo, en algunos lenguajes deberemos declarar expl citamente las variables antes de utilizarlas, mientras que en otros no existe esa obligacin. As mismo, el repertorio o de tipos de datos y operaciones disponibles o el repertorio de instrucciones de E/S tambin e var notablemente, al menos en apariencia, de unos lenguajes a otros. En cualquier caso, se a trata de diferencias menores que no llevan consigo grandes cambios en la manera de abordar la escritura de programas. Por lo que se reere a los tipos de datos, en todos los lenguajes encontraremos todos o casi todos de los tipos de datos utilizados hasta ahora: nmeros enteros, nmeros en coma u u otante, valores lgicos, caracteres y strings. Sin embargo, esas herramientas son insucientes o para manipular informaciones de otra naturaleza con un esfuerzo razonable, por lo que todos los lenguajes de programacin incluyen mecanismos que permiten denir nuevos tipos de o datos. A diferencia de lo que vemos al comparar los repertorios de instrucciones de diferentes lenguajes, cuando comparamos los mecanismos disponibles para denir nuevos tipos de datos encontramos diferencias importantes entre lenguajes como C, Pascal, Fortran, etc y otros como Smalltalk, C++ o java. Finalmente, es un hecho bien conocido que las aplicaciones informticas, lo que llamamos a el software, se hacen cada vez ms sosticadas y complejas: en la gura 5.1 puede verse el a tamao de sistemas operativos, aparecidos en diferentes fechas 1 o el tamao de las ultimas n n 2 versiones de Eclipse . Tambin es un hecho bien conocido que las dicultades que plantea e el desarrollo de una aplicacin crecen extrardinariamente a medida que crece el nmero de o u l neas de cdigo necesarias. o Para desarrollar una aplicacin que sea de alguna utilidad, aunque sea de un tamao o n mucho menor que las referidas, se necesitan mecanismos que nos permitan: dividir el cdigo de la aplicacin en mdulos que puedan ser desarrollados, analizados o o o
D. A. Wheeler. More than a gigabuck: Estimating gnu/linuxs size. Web report, June 2001. URL http://www.dwheeler.com/sloc/redhat71-v1/redhat71sloc.html 2 URL http://www.eclipse.org/org/press-release/20070627 europarelease.php
1

39

Tema 5. Objetos, clases y metodos Producto L neas de cdigo (en miles) o MS-DOS 1.0 (1981) 4 Microsoft Windows 3.1 (1992) 3000 Microsoft Windows 95 15000 Microsoft Windows 98 18000 Microsoft Windows NT (1992) 4000 Microsoft Windows 2000 35000 Windows XP (2001) 45000 Red Hat Linux 6.2 (2000) 17000 Sun Solaris (1998-2000) 7000-8000 Eclipse (Calisto 2006) 7000 Eclipse (Europa 2007) 17000 Figura 5.1: Ejemplos de aumento del tamao del software n

40

y probados separadamente unos de otros reutilizar mdulos desarrollados para una aplicacin en posteriores desarrollos, sin reo o currir al mtodo obvio de cut & paste y sin que sea necesario disponer de su cdigo e o fuente En la forma de responder a esas necesidades es donde pueden verse las diferencias ms a importantes entre los lenguajes similares a C o Pascal de un lado, y los lenguajes de Programacin Orientada a Objetos (P.O.O.), como Smalltalk, C++ o java, de otro. Aunque o no existe una varita mgica que permita resolver de manera totalmente satisfactoria esas dos a necesidades, s puede decirse que la P.O.O. aporta los conceptos y mecanismos que, a d de a hoy, han demostrado mayor utilidad para atenuar las dicultades que plantea el desarrollo de programas no triviales.

5.1.

Objetos, clases y mensajes

Desde el punto de vista de la P.O.O., la memoria del ordenador es algo ms que una a gigantesca maraa de bits. Es mas bien una especie de universo virtual poblado por represenn taciones virtuales de cosas o seres existentes en el mundo real, a las cuales llamamos objetos. A medida que progresa la ejecucin de un programa se crean y destruyen personas, robots, o coches, etc un lenguaje de P.O.O. como java nos permite crear cualquier objeto que podamos imaginar.! Cuando en P.O.O. hablamos de objetos, nos referimos siempre a objetos virtuales, que solamente existen en la memoria del ordenador, representados en forma de ceros y unos. No obstante, esos objetos tienen una caracter stica muy importante, que es su capacidad de interaccionar unos con otros, envindose mensajes de unos a otros. Al igual que una persona se a puede dirigir a otra para preguntarle la hora o para darle una orden, por ejemplo, tambin uno e cualquiera de esos objetos puede enviarle un mensaje a otro para obtener cierta informacin o

Tema 5. Objetos, clases y metodos

41

o para conseguir que realice cierta tarea. De hecho, cada uno de los objetos creados por un programa, al margen de que represente una persona, un animal o una cosa, sirve para hacer ciertas tareas, que realizar cuando reciba el mensaje oportuno. En cierto modo, es como si los a objetos creados durante la ejecucin de un programa fuesen mquinas o instrumentos, cada o a uno con su propio repertorio de funciones, y el env de un mensaje la manera de seleccionar o una de ellas. Para hacer esto posible, los lenguajes de P.O.O. incluyen un nuevo tipo de instrucciones, cuyos detalles veremos ms adelante. a En el mbito de la P.O.O., todos los objetos creados durante la ejecucin de un programa a o estn agrupados o clasicados por categor que reciben el nombre de clases. De la misma a as, manera que en el mundo real somos capaces de reconocer que varios veh culos distintos son ejemplares del mismo modelo (por ejemplo, Seat Toledo 1600), en P.O.O. cada objeto pertenece a una clase determinada. En la jerga de la P.O.O. se dice que cada objeto es una instancia de tal clase. Esta clasicacin tiene una gran importancia. Por una parte, y al o igual que en el mundo real, todos los objetos creados por un programa, y que pertenezcan a la misma clase, tienen las mismas caracter sticas o prestaciones. Dicho de otra manera, si vemos esos objetos como mquinas o instrumentos virtuales, todos los objetos pertenecientes a a la misma clase tienen las mismas funciones. Por otra parte, cuando se usa un lenguaje de P.O.O., uno no puede usar instrucciones para crear objetos de cierta clase, a menos que esa clase haya sido denida con todo detalle. Para eso es necesario escribir una pieza de cdigo, o llamada clase, que incluso suele almacenarse separadamente del texto del programa original. Esa pieza de cdigo determina qu funciones tienen los objetos de la clase correspondiente, y o e tambin cmo se realiza cada una de ellas. La gura siguiente representa la relacin existente e o o entre los objetos creados en un programa y sus clases.

5.1.1.

Cmo se dene una nueva clase de objetos? o

Programa 1 Denicin de una clase de objetos en java o


1 2 3 4 5 6 7 8 9

package ehu . s t u d e n t ; / E j e m p l o de d e f i n i c i o n de una c l a s e de o b j e t o s . Los o b j e t o s de e s t a c l a s e no s i r v e n de mucho ! ! ! / public class I n u t i l { }

En el caso ms sencillo, para denir una clase de objetos debemos indicar unicamente a cul es su nombre; por ejemplo, el programa 1 dene una clase de objetos llamada Inutil. a Vistos como mquinas virtuales, los objetos de esa clase se caracterizan por no poseer ninguna a funcin que se pueda seleccionar; de ah el nombre de la clase. Aunque crear objetos de esa o clase no parece que tenga mucho inters, ese programa sirve para indicar que en java una e pieza de texto con la estructura siguiente:

Tema 5. Objetos, clases y metodos

42

Figura 5.2: Relacin entre objetos y clases o

 

package Nombre de Paquete ;

public class Nombre de clase {


Declaraciones

dene una clase de objetos. Las partes llamadas Nombre de Paquete y Declaraciones son partes opcionales que pueden no existir. Ms adelante se ver cul es su estructura y a a a signicado, caso de existir. Lo que s puede decirse ya es que, incluso el t pico programa para escribir Hola mundo!, como el siguiente: sirve, adems, para denir una clase de objetos, a llamada en este caso HolaMundo.

5.1.2.

Cmo se crean objetos? o

Una vez denida una clase, podemos crear objetos de esa clase en otros programas. El programa 3 crea varios objetos de la clase Inutil que hemos denido antes, aunque su ejecucin termina sin producir ningn resultado. o u

Tema 5. Objetos, clases y metodos Programa 2 Denicin de una clase de objetos en java o
1 2 3 4 5 6 7 8 9 10 11 12 13 14

43

package ehu . s t u d e n t ; / E j e m p l o de d e f i n i c i o n de una c l a s e de o b j e t o s . Los o b j e t o s de e s t a c l a s e no s i r v e n de mucho ! ! ! / p u b l i c c l a s s HolaMundo { p u b l i c s t a t i c v o i d main ( S t r i n g [ ] a r g s ) { System . o u t . p r i n t l n ( "Hola , mundo !" ) ; } }

Cmo se crean objetos? o La ejecucin de: o new NombreDeClase ( codigo )


 

crea un nuevo objeto de la clase llamada NombreDeClase


Ms adelante se comentarn los detalles relacionados con la estructura del codigo entre a a parntesis; en este punto, basta con decir que en muchas ocasiones existe. Tambin veremos e e que para crear objetos de cierta clase no necesitamos tener disponible el cdigo java de esa o clase, sino que unicamente necesitamos haber instalado en nuestro entorno de desarrollo (por ejemplo, Eclipse) su traduccin a byte-codes, es decir, el archivo .class generado por un o compilador de java. Por el momento, no obstante, daremos por supuesto que estamos usando Eclipse, y que todas las clases forman parte del mismo proyecto y tienen el mismo Nombre de Paquete.

5.1.3.

Mtodos y mensajes e

Si queremos crear objetos que nos sirvan realmente para algo, primero debemos identicar cules son sus funciones. Adems, esa informacin debe incluirse en el texto de la clase a a o correspondiente. El programa 4 dene una nueva clase de objetos, que pretenden ser representaciones virtuales de reproductores MP3 con dos funciones: play y stop. Como indica ese ejemplo, en el texto de una clase, la parte que se llam antes o Declaraciones puede , sustituirse por piezas de texto con la estructura siguiente:

Tema 5. Objetos, clases y metodos Programa 3 Creacin de objetos en java o


1 2 3 4 5 6 7 8 9 10 11 12 13 14 15

44

package ehu . s t u d e n t ; / E j e m p l o de c r e a c i o n de o b j e t o s . Se c r e a n 1000 o b j e t o s de c l a s e I n u t i l / public class CrearObjetosInutil { p u b l i c s t a t i c v o i d main ( S t r i n g [ ] a r g s ) { f o r ( i n t i = 0 ; i < 1 0 0 0 ; i ++){ new I n u t i l ( ) ; } } }

public void Nombre de mtodo (){ e } Cada una de esas piezas es una declaracin de mtodo, debe tener un nombre distinto a o e las dems, y representa tanto una funcin que los objetos de esa clase son capaces de realizar a o como un tipo de mensaje que son capaces de interpretar. 5.1.3.1. Env de mensajes o

Una vez denida la clase MP3Inutil podemos crear objetos de esa clase como se muestra en el programa 5. En la gura 5.3 se ha tratado de representar el estado de la memoria justo antes de terminarse la ejecucin de ese programa, aunque los objetos MP3Inutil creados por o el programa no son tan sosticados como los que se muestran en la gura; al n y al cabo solo tienen las funciones play y stop! Ya que los objetos creados por el programa 5 pretenden ser representaciones virtuales de reproductores MP3, parece razonable que deseemos hacer algo as como apretar alguno de sus botones; por ejemplo, el correspondiente a la funcin de reproduccin, es decir, play. Dicho o o en la jerga de P.O.O., querr amos enviar el mensaje play a algunos de esos objetos; al creado en primer lugar, por ejemplo. Para hacer eso posible, todos los lenguajes de P.O.O.incluyen un nuevo tipo de instruccin: las instrucciones de llamada a mtodo. Una instruccin de ese o e o tipo sirve para enviar un mensaje a un objeto creado previamente y hace que el destinatario realice una de sus funciones. Su formato es muy parecido en casi todos los lenguajes de programacin; en java es como sigue: o

Expresion de referencia Nombre de metodo ); (

Por ejemplo: unReproductor.play();

Tema 5. Objetos, clases y metodos Programa 4 Una clase de objetos con dos funciones en java
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16

45

package ehu . s t u d e n t ; / E j e m p l o de d e f i n i c i o n de una c l a s e de o b j e t o s . Los o b j e t o s de e s t a c l a s e p o s e e n v a r i a s f u n c i o n e s , p e r o no ha ce n nada / public class MP3Inutil { public void p l a y (){ } public void stop (){ } }

En los lenguajes de P.O.O., el s mbolo indica el env de un mensaje a un objeto. La o parte llamada Expresion de referencia sirve para decidir, en el momento de ejecutarse la instruccin, qu objeto es el destinatario del mensaje. Dicho de otra manera, si se han creado o e tres objetos MP3Inutil, como en la gura 5.3, poniendo en esa parte el cdigo adecuado, o podremos decidir a cul de esos reproductores le damos la orden play. Por otra parte, en a java se exige que el Nombre de metodo incluido despus del s e mbolo sea el nombre de alguna de los mtodos incluidos en la clase del destinatario. Es decir, que se puede ejecutar la e funcin play de un objeto MP3Inutil pero no de un objeto Inutil. En java el compilador o rechazar una instruccin si con ella se pretende enviar a un objeto un mensaje que no se a o corresponde con ninguna de las funciones que puede realizar. 5.1.3.2. Variables de tipo referencia

Habitualmente lo que hemos llamado arriba Expresion de referencia es simplemente un nombre de variable. En java pueden declararse, adems de las variables de tipo entero o a lgico, variables de tipo referencia. Dicho informalmente, una instruccin como la siguiente: o o MP3Inutil miMp3 = new MP3Inutil( ); sirve para dos propsitos. Por una parte, se crea un nuevo objeto de la clase cuyo nombre o aparece tras el operador new. Por otra parte, sirve para asociar el objeto creado con el nombre miMp3; es como si con esa instruccin dijramos algo as como eh, mira, en lo sucesivo voy o e a llamar miMp3 a ese reproductor que acabo de crear!. En java una instruccin como la anterior es, en denitiva, una declaracin de variable y o o tiene un signicado similar a las declaraciones de variables numricas o lgicas. La diferencia es e o que una variable de ese tipo no tiene asociado un valor numrico o lgico sino un objeto. Dicho e o algo groseramene, almacena la referencia de un objeto, es decir, la direccin de memoria o donde se encuentra ese objeto. Una variable de tipo referencia se declara como sigue:

Tema 5. Objetos, clases y metodos Programa 5 Creacin de objetos en java o


1 2 3 4 5 6 7 8 9 10 11 12 13 14 15

46

package ehu . s t u d e n t ; / E j e m p l o de c r e a c i o n de o b j e t o s . Se c r e a n o b j e t o s de c l a s e M P 3 I n u t i l / public class CrearObjetosMP3Inutil { p u b l i c s t a t i c v o i d main ( S t r i n g [ ] a r g s ) { new M P 3 I n u t i l ( ) ; new M P 3 I n u t i l ( ) ; new M P 3 I n u t i l ( ) ; } }

Nombre de Clase

variable

= new NombreDeClase ( );

Tambin puede declararse una variable sin crear ningn objeto: e u


Nombre de Clase

variable

= null;

En este caso, antes de que esa variable sea usada para enviar un mensaje, debe habrsele e asignado la referencia de un objeto. De lo contrario, la ejecucin del programa se aboro tar produciendo un error llamado NullPointerException. a El programa 6 muestra una versin diferente del programa 5. Adems de crear varios o a objetos MP3Inutil, ahora se declaran otras tantas variables y a cada una de ellas se le asigna la referencia de uno de los objetos creados. En la gura 5.4 se representa grcamente la a correspondencia existente entre variables y objetos, despus de crear esas variables, es decir, e cuando se llega a la l nea 15. Las l neas 16 a 21 del programa 6 son instrucciones de envio de mensajes. Esas instrucciones tienen a menudo la estructura siguiente:
Variable

referencia Nombre de metodo ) (

y sirven para que el objeto asociado con la variable referida ejecute la funcin indicada. o Aunque el programa 6 ha creado varios reproductores MP3Inutil y a pesar de que se han ejecutado las funciones disponibles en cada uno de ellos, la ejecucin de ese programa termina o sin que se produzca ningn resultado visible. A continuacin veremos cmo se debe denir u o o una clase de manera que los objetos creados en un programa exhiban un comportamiento ms interesante. a

Tema 5. Objetos, clases y metodos

47

Figura 5.3: Objetos creados por CrearObjetosMP3Inutil

Programa 6 Creacin de objetos y variables o


1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23

package ehu . s t u d e n t ; / E j e m p l o de c r e a c i o n de o b j e t o s y e n v i o de m e n s a j e s . Se c r e a n o b j e t o s de c l a s e M P 3 I n u t i l y se ejecutan sus funciones . / public c l a s s SendMsgs2MP3Inutil { p u b l i c s t a t i c v o i d main ( S t r i n g [ ] a r g s ) { M P 3 I n u t i l u n R e p r o d u c t o r = new M P 3 I n u t i l ( ) ; M P 3 I n u t i l o t r o R e p r o d u c t o r = new M P 3 I n u t i l ( ) ; M P 3 I n u t i l e l R e p r o d u c t o r = new M P 3 I n u t i l ( ) ; unReproductor . play ( ) ; unReproductor . stop ( ) ; otroReproductor . play ( ) ; otroReproductor . stop ( ) ; elReproductor . play ( ) ; elReproductor . stop ( ) ; } }

Tema 5. Objetos, clases y metodos

48

Figura 5.4: Objetos y variables

5.2.

Mtodos, instrucciones y parmetros e a

El programa 7 dene una clase de mayordomos virtuales que son capaces de realizar dos funciones: salutacion y despedida. La estructura de ese programa es ligeramente distinta de la que ten el programa 4. La declaracin de cada mtodo incluye ahora, adems de su a o e a nombre, un bloque de instrucciones. Ese bloque de instrucciones es ejecutado cuando se hace una llamada al mtodo correspondiente de un objeto Mayordomo. e El programa 8 crea dos mayordomos virtuales. Adems, en las l a neas 15 y 16 se env an los mensajes salutacion y despedida al primero y al segundo de ellos, respectivamente. La gura 5.5 representa grcamente el proceso de ejecucin del programa 8. Con ella se quiere a o indicar que, cuando se ejecuta una llamada a un mtodo, se pasa a la instruccin siguiente e o despus de haberse completado el bloque de instrucciones de ese mtodo. e e

Figura 5.5: Env de mensajes a mayordomos o

Tema 5. Objetos, clases y metodos Programa 7 Denicin de una clase de objetos en java o
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18

49

package ehu . s t u d e n t ; / E j e m p l o de d e f i n i c i o n de una c l a s e de o b j e t o s . Los o b j e t o s de e s t a c l a s e p o s e e n v a r i a s f u n c i o n e s ; e s c r i b e n t e x t o s en l a s a l i d a s t a n d a r d / p u b l i c c l a s s Mayordomo { public void s a l u t a c i o n (){ System . o u t . p r i n t l n ( "Saludos , sir/ madam " ) ; } public void despedida (){ System . o u t . p r i n t l n ( " Goodbye !, sir/ madam " ) ; } }

En el bloque de instrucciones de un mtodo pueden incluirse instrucciones de cualquier e tipo, conforme a las reglas habituales del lenguaje. Por ejemplo, el programa 9 dene una clase de objetos que representan tutores virtuales para el aprendizaje de la tabla de multiplicar del cinco. Esos objetos solamente van a tener una funcin, que servir para imprimir la tabla o a del cinco. Por eso la clase TutorMate incluye la declaracin del mtodo printTablaDel5. o e Como puede verse, el bloque de instrucciones de ese mtodo incluye declaraciones de variables e y una instruccin de repeticin. Las variables declaradas en el bloque de instrucciones de un o o mtodo se denominan variables locales y unicamente pueden usarse en el bloque de instruce ciones en el cual se encuentran declaradas. Adems, todas las variables locales de un mtodo a e se destruyen cuando se completa la ejecucin del bloque de instrucciones correspondiente. o As pues, a medida que progresa la ejecucin de un programa y los objetos que ha creado van o interpretando los mensajes recibidos, se van creando y destruyendo variables.

5.2.1.

Mtodos y parmetros formales e a

Los objetos de la clase TutorMate (ver programa 9,) no son muy utiles, incluso si sola mente deben servir para ensear tablas de multiplicar. Parece obvio que esos objetos tambin n e debieran ser capaces de escribir la tabla de multiplicar del uno, del dos, del tres, etc. Tambin e parece obvio que no es una buena solucin incluir en la clase TutorMate una multitud de o mtodos, que son prcticamente copia del ya existente: e a printTablaDel1 printTablaDel2 . . . printTablaDel9 . . . De alguna manera, lo que necesitamos es declarar un mtodo de manera que algunos valores e numricos que aparecen incrustados en su bloque de instrucciones puedan ser tuneados cada e vez que se hace una llamada a ese mtodo. En otras palabras, si imaginamos que los mensajes e enviados a los objetos son mensajes de correo electrnico, querr o amos tener la posibilidad de enviar a un objeto TutorMate mensajes como los siguientes:

Tema 5. Objetos, clases y metodos Programa 8 Creacin de objetos en java o


1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18

50

package ehu . s t u d e n t ; / E j e m p l o de c r e a c i o n de o b j e t o s y e n v i o de m e n s a j e s . Se c r e a n o b j e t o s de c l a s e Mayordomo y se ejecutan sus funciones . / p u b l i c c l a s s SendMsgs2Mayordomo { p u b l i c s t a t i c v o i d main ( S t r i n g [ ] a r g s ) { Mayordomo unMayordomo = new Mayordomo ( ) ; Mayordomo otroMayordomo = new Mayordomo ( ) ; unMayordomo . s a l u t a c i o n ( ) ; otroMayordomo . d e s p e d i d a ( ) ; } }

Asunto printTablaDel Anexo 1 1

Asunto printTablaDel Anexo 1 5

El programa 10 dene una clase similar a TutorMate, pero con un mtodo para imprimir e tablas de multiplicar ms verstil que el mtodo printTablaDel5 incluido en TutorMate. a a e Ahora, despus del nombre del mtodo, entre parntesis, aparece un texto que recuerda e e e una declaracin de variable. Una variable como x que aparece declarada entre los parntesis o e despus del nombre de un mtodo es un parmetro formal, o simplemente parmetro, del e e a a mtodo. El parmetro x en la declaracin del mtodo printTablaDel indica que los objetos e a o e TutorMatePlus necesitan que se les proporcione un valor numrico para poder ejecutar la e funcin referida. o Cuando la declaracin de un mtodo incluye tambin la declaracin de un parmetro o e e o a formal, las instrucciones de llamada correspondientes deben incluir el valor elegido para ese parmetro, como se hace, por ejemplo, en las l a neas 14 a 16 del programa 11. Dicho de manera algo burda, una instruccin como: o
miTutor . p r i n t T a b l a D e l ( 2 ) ;

se ejecuta como sigue: 1. se examina la variable miTutor para determinar quin es el destiatario del mensaje e 2. se crea una nueva variable x y se le asigna el valor encerrado entre parntesis e 3. se ejecutan las instrucciones del mtodo printTablaDel e 4. se destruyen las variables locales del mtodo y tambin x e e

Tema 5. Objetos, clases y metodos Programa 9 Denicin de mtodos o e


1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22

51

package ehu . s t u d e n t ; / E j e m p l o de d e f i n i c i o n de una c l a s e de o b j e t o s . Los o b j e t o s de e s t a c l a s e p o s e e n f u n c i o n e s con p a r a m e t r o s . / p u b l i c c l a s s TutorMate { public void p r i n t T a b l a D e l 5 (){ int x = 5; int i = 0; w h i l e ( i <= 1 0 ) { i n t tmp = x i ; System . o u t . p r i n t ( x ) ; System . o u t . p r i n t ( " x " ) ; System . o u t . p r i n t ( i ) ; System . o u t . p r i n t ( " = " ) ; System . o u t . p r i n t ( tmp ) ; } } }

Este proceso se representa grcamente en la gura 5.6. a En el bloque de instrucciones de un mtodo, los parmetros formales se utilizan a todos los e a efectos como si de variables locales se tratase. En particular, pueden usarse como operandos en una expresin, como se hace en la l o nea 8 de la clase TutorMatePlus (programa 10.) En java, como en cualquier otro lenguaje de programacin, pueden declararse mtodos o e con ms de un parmetro. Por ejemplo, si queremos incluir en la clase TutorMate un mtodo a a e para imprimir las n primeras l neas de la tabla de multiplicar de un nmero x, podr u amos hacerlo as :
1 2 3 4 5 6 7 8 9 10 11 12

public void printLineasDeTablaDe ( i n t n , i n t x ) { int i = 0; w h i l e ( i <= n ) { i n t tmp = x i ; System . o u t . p r i n t ( x ) ; System . o u t . p r i n t ( " x " ) ; System . o u t . p r i n t ( i ) ; System . o u t . p r i n t ( " = " ) ; System . o u t . p r i n t ( tmp ) ; } }

Cuando en un mtodo se declaran varios parmetros formales, las instrucciones de llamada al e a mismo deben incluir el valor correspondiente a cada uno de ellos. Por ejemplo, el programa 11 podr modicarse como sigue para usar tambin el mtodo printLineasDeTablaDe denido a e e arriba (suponemos que ese mtodo est incluido ya en la clase TutorMate): e a

Tema 5. Objetos, clases y metodos Programa 10 Denicin de mtodos con parmetros o e a


1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16

52

package ehu . s t u d e n t ; public c l a s s TutorMatePlus { public void p r i n t T a b l a D e l ( i n t x ){ int i = 0; w h i l e ( i <= 1 0 ) { i n t tmp = x i ; System . o u t . p r i n t ( x ) ; System . o u t . p r i n t ( " x " ) ; System . o u t . p r i n t ( i ) ; System . o u t . p r i n t ( " = " ) ; System . o u t . p r i n t ( tmp ) ; } } }

1 2 3 4 5 6 7 8 9

p u b l i c c l a s s SendMsgs2TutorMatePlus { p u b l i c s t a t i c v o i d main ( S t r i n g [ ] a r g s ) { T u t o r M a t e P l u s miTutor = new T u t o r M a t e P l u s ( ) ; miTutor . p r i n t T a b l a D e l ( 2 ) ; miTutor . p r i n t L i n e a s D e T a b l a D e ( 5 , 7 ) ; } }

En java las llamadas a un mtodo tienen la estructura siguiente: e Expresin referencia.Nombre de mtodo( exp1 , exp2 , exp3 , . . . expn1 , expn ); o e y se ejecutan de la manera apuntada arriba; es decir: 1. se determina quin es el destinatario del mensaje, ejecutando el cdigo en e o Expresion referencia como sabemos, eso se reduce a menudo a examinar el valor de una variable 2. se crea una nueva variable por cada parmetro formal declarado en el mtodo y se le a e asigna el valor de la expresin correspondiente: el resultado de exp1 se asigna al primer o parmetro, el resultado de exp2 al segundo, y as sucesivamente. a Habitualmente, se dice que esas expresiones, y los resultados obtenidos al ejecutarse la instruccin, son los argumentos reales o simplemente argumentos de la llamada o 3. se ejecutan las instrucciones del mtodo indicado e 4. se destruyen las variables locales del mtodo; tambin las correspondientes a los parmee e a tros formales

Tema 5. Objetos, clases y metodos Programa 11 Llamadas a mtodos con parmetros e a


1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18

53

package ehu . s t u d e n t ; / E j e m p l o de c r e a c i o n de o b j e t o s y e n v i o de m e n s a j e s . Se c r e a n o b j e t o s de c l a s e TutorMateConParam y se ejecutan sus funciones . / p u b l i c c l a s s SendMsgs2TutorMatePlus { p u b l i c s t a t i c v o i d main ( S t r i n g [ ] a r g s ) { T u t o r M a t e P l u s miTutor = new T u t o r M a t e P l u s ( ) ; miTutor . p r i n t T a b l a D e l ( 2 ) ; miTutor . p r i n t T a b l a D e l ( 5 ) ; miTutor . p r i n t T a b l a D e l ( 7 ) ; } }

En la gura 5.7 se representa grcamente este proceso para la instruccin: a o


miTutor . p r i n t L i n e a s D e T a b l a D e ( 5 , 7 ) ;

del programa anterior. En java, el compilador rechazar las llamadas a un mtodo que no a e incluya una expresin por cada uno de los parmetros formales declarados en ese mtodo. o a e Adems, tambin se exige que cada expresin tenga una estructura acorde con el tipo del a e o parmetro correspondiente. Por ejemplo, no ser aceptable incluir las instrucciones siguientes a a en el programa anterior:
miTutor . p r i n t L i n e a s D e T a b l a D e ( 5 ) ; / f a l t a n a r g u m e n t o s / miTutor . p r i n t L i n e a s D e T a b l a D e ( 5 , 7 , 9 ) ; / s o b r a n a r g u m e n t o s / miTutor . p r i n t L i n e a s D e T a b l a D e ( true , 7 ) ; / argumento de t i p o i n a d e c u a d o /

5.2.2.

Mtodos con resultado: instrucciones return e

En el mundo real nos dirijimos con frecuencia a otras personas solicitndoles alguna infora macin. Tambin estamos acostumbrados a usar instrumentos tales como relojes, termmeo e o tros, etc para saber la hora, la temperatura ambiente, etc. En la jerga de la P.O.O., dir amos que en cada una esas situaciones se ha enviado un mensaje a cierto objeto (una persona, un termmetro, un reloj, etc) y ste nos ha devuelto una respuesta con la informacin solicitao e o da. Naturalmente, ese comportamiento se reeja tambin en el cdigo que hay que escribir e o para denir la clase de objetos correspondiente, y en la manera de usar las funciones de esos objetos. El programa 12 muestra la denicin de una clase de objetos que representan termmeo o tros. Los objetos de esa clase solamente sirven para una cosa, a saber, medir la temperatura ambiente. As pues, la clase TermometroCelsius incluye la declaracin del mtodo o e medirTemperatura. Sin entrar en detalles, observaremos que la declaracin de ese mtodo o e

Tema 5. Objetos, clases y metodos

54

Figura 5.6: Ejecucin de miTutor.printTablaDel(2) o

presenta dos novedades. Por una parte, en la cabecera (ver l nea 11) se ha sustituido la panea 12) aparece labra void por double. Por otra parte, en el bloque de instrucciones (ver l una instruccin nueva. Esas dos novedades indican que cada vez que enviemos a un objeto o TermometroCelsius el mensaje medirTemperatura, ese objeto nos devolver un nmero a u en coma otante; que ese nmero sea siempre el valor -1, es un detalle sin importancia. u Al disear una nueva clase de objetos, java nos obliga a decidir cules de sus mtodos n a e producen una respuesta o resultado y cules no (en este caso tambin podemos decir que se a e produce una respuesta vac Adems, en java no se permite que la respuesta de un mtodo a.) a e sea unas veces un valor entero, otras un valor lgico, y otras que esa respuesta est vac o e a. En otras palabras, al declarar un mtodo estamos obligados a decidir qu tipo de respuesta e e produce, y esa informacin se incluye en su declaracin, que tiene la estructura siguiente: o o
  

public tipo


nombre ( parametros formales ){

Instrucciones

} donde tipo debe sustituirse por:


el nombre de alguno de los tipos de datos de java int long double . . . boolean

el nombre de una clase de objetos

Tema 5. Objetos, clases y metodos

55

Figura 5.7: Ejecucin de miTutor.printLineasDeTablaDe(5, 7) o

MP3Inutil

TutorMate . . .

(veremos ms adelante que a menudo conviene denir mtodos cuyo resultado es la a e referencia de un objeto) la palabra void si el mtodo no produce ningn resultado e u Por lo general, cuando usamos un mtodo de un objeto y ese mtodo nos devuele e ve un resultado, es porque estamos interesados, de alguna manera, en ese resultado. El programa 13 muestra varios usos posibles del mtodo medirTemperatura de un objeto e TermometroCelsius. Como puede verse, podemos asignar ese resultado a una variable (ver l nea 14), o bien usarlo como parte de una expresin ms compleja (ver l o a nea 19), o incluso olvidarnos de ese resultado (ver l nea 23). En el segundo caso, el compilador de java comprobar que la llamada a un mtodo se usa conforme al tipo de resultado que producir ese a e a mtodo. As en el programa anterior ser ilegal incluir cosas como: e , a
i n t v = termometro . medirTemperatura ( ) ; / r e s u l t a d o no c a s a con i n t / boolean f l a g = t e r m o m e t r o . m e d i r T e m p e r a t u r a ( ) ; / r e s u l t a d o no c a s a con . . . /

5.2.2.1.

La instruccin return o

El mtodo medirTemperatura de la clase TermometroCelsius (ver programa 12) soe lamente consta de una instruccin. Adems, cuando un objeto TermometroCelsius ejecuta o a esa funcin siempre devuelve el mismo resultado. Por lo general, es necesario denir un bloque o de instrucciones ms complicado, para calcular el resultado deseado. El programa 14 dene a una clase de objetos que representan calculadores con dos funciones:

Tema 5. Objetos, clases y metodos Programa 12 Denicin de mtodos con respuesta o e


1 2 3 4 5 6 7 8 9 10 11 12 13 14

56

package ehu . s t u d e n t ; / E j e m p l o de d e f i n i c i o n de una c l a s e de o b j e t o s . Los o b j e t o s de e s t a c l a s e p o s e e n f u n c i o n e s que d e v u e l v e n un r e s u l t a d o . / public class TermometroCelsius { p u b l i c double m e d i r T e m p e r a t u r a ( ) { r e t u r n 1; } }

maximoComunDivisor

esPrimo

A diferencia de los mtodos cuyo resultado es vac (es decir, void), un mtodo que e o, e o declara un tipo de resultado no vac debe incluir una instruccin return. Una instruccin de o o este tipo tiene la estructura siguiente:
 

return expresion ;

y hace que se termine la ejecucin del bloque de instrucciones del mtodo. El resultado o e devuelto es el valor de la expresion, y es ilegal una instruccin que no incluya una expresin o o del tipo adecuado, conforme al tipo de resultado declarado. Eso quiere decir que si el tipo de resultado de un mtodo es boolean ser ilegal la instruccin: e a o
return 5;

Anlogamente, si el tipo de resultado de un mtodo es int ser ilegal la instruccin: a e a o


return (5 < 3 ) ;

Como puede verse en el programa 14, un mtodo puede incluir varias instrucciones de este e tipo, aunque no es recomendable abusar de esa posiblidad, ya que se hace ms dif entender a cil el comportamiento del programa. En cualquier caso, en java es ilegal cualquier mtodo en e el que se pueda llegar a la ultima instruccin sin ejecutar una instruccin de return, como o o podr ocurrir en el mtodo esPrimo del programa 14 si se eliminase la l a e nea 31.

5.3.

Objetos con estado: atributos

En el mundo real, est claro que cualquier persona podr, en principio, decirnos cul es a a a su nombre, edad, etc. Anlogamente, en P.O.O. se considera que los objetos creados por a un programa tambin almacenan o memorizan informacin. Adems, todos los objetos de e o a la misma clase almacenan el mismo tipo de informacin, aunque cada uno de ellos pueda o

Tema 5. Objetos, clases y metodos Programa 13 Uso de mtodos con respuesta e


1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25

57

package ehu . s t u d e n t ; / E j e m p l o de c r e a c i o n de o b j e t o s y e n v i o de m e n s a j e s . Se c r e a n o b j e t o s de c l a s e T e r m o m e t r o C e l s i u s y se ejecutan sus funciones . / public c l a s s SendMsgs2TermometroCelsius { p u b l i c s t a t i c v o i d main ( S t r i n g [ ] a r g s ) { T e r m o m e t r o C e l s i u s t e r m o m e t r o = new T e r m o m e t r o C e l s i u s ( ) ; double t = t e r m o m e t r o . m e d i r T e m p e r a t u r a ( ) ; System . o u t . p r i n t l n ( " Temperatura : " + t ) ; S t r i n g msg = " Delta : " + ( t termometro . medirTemperatura ( ) ) ; System . o u t . p r i n t l n ( msg ) ; / p a s a n d o d e l r e s u l t a d o ! / termometro . medirTemperatura ( ) ; } }

almacenar unos datos distintos, que pueden cambiar tambin durante la ejecucin del prograe o ma. Dicho de otra manera, las instancias de una eventual clase Persona, podr almacenar an su nombre, edad y NIF, pero dos objetos de esa clase podr tener distintos nombres, por an ejemplo. En P.O.O.todo esto se traduce en que cada cada instancia de una clase posee sus propias variables. Los valores asignados en un momento dado a esas variables son los datos almacenados por su propietario en ese momento y denen el estado en que se halla el objeto. El programa 15 dene una nueva clase de objetos que representan coches y poseen las funciones: encenderLuces apagarLuces printInfo

En el programa 16 se crean dos objetos CocheConLuz, se les env mensajes para encender an y apagar sus luces, y nalmente se les ordena escribir un texto indicando el estado en que se encuentran las luces de cada uno de ellos. En la clase CocheConLuz (programa 15) podemos ver un elemento que no hab aparecido a hasta ahora. La l nea 11 indica que cada objeto CocheConLuz poseer una variable de nombre a cdgLuces. La gura 5.8 representa la situacin que se producir despus de ejecutarse las o a e l neas 8 y 9 del programa 16. En java la denicin de una clase tiene la estructura siguiente: o

Tema 5. Objetos, clases y metodos Programa 14 Denicin de mtodos con resultado en java o e
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33

58

package ehu . s t u d e n t ; / E j e m p l o de d e f i n i c i o n de una c l a s e de o b j e t o s . Los o b j e t o s de e s t a c l a s e p o s e e n f u n c i o n e s con p a r a m e t r o s . / public class Calculador { / D e v u e l v e e l maximo comun d i v i s o r de d o s v a l o r e s d a d o s . / p u b l i c i n t maximoComunDivisor ( i n t x , i n t y ) { w h i l e ( x != y ) { i n t max = Math . max ( x , y ) ; i n t min = Math . max ( x , y ) ; x = max min ; y = min ; } return x ; } / D e v u e l v e t r u e s i un v a l o r dado e s p r i m o ; f a l s e , en c a s o c o n t r a r i o . / p u b l i c boolean e s P r i m o ( i n t x ) { f o r ( i n t i = 2 ; i < x ; i ++){ i f ( x % i == 0 ) r e t u r n f a l s e ; } return true ; } }

 

package Nombre de paquete ;

public class Nombre de clase {


declaracin de variables o declaracin de metodos o

}
o donde la parte declaracin de variables , que es opcional, debe estar formada por declaraciones de variables como:
p r i v a t e i n t edad = 0 ; p r i v a t e S t r i n g nombre = "John" ;

Tema 5. Objetos, clases y metodos Programa 15 La clase CocheConLuz


1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37

59

package ehu . s t u d e n t ; / E j e m p l o de d e f i n i c i o n de una c l a s e de o b j e t o s . Cada o b j e t o de e s t a c l a s e memoriza e l e s t a d o de s u s l u c e s : e n c e n d i d a s o a p a g a d a s . / p u b l i c c l a s s CocheConLuz { private int cdgLuces = 0; / Las l u c e s d e l c o c h e quedan e n c e n d i d a s . / public void encenderLuces (){ cdgLuces = 1; } / Las l u c e s d e l c o c h e quedan a p a g a d a s . / public void apagarLuces (){ cdgLuces = 0; } / Se e s c r i b e un m e n s a j e i n f o r m a n d o d e l e s t a d o de l a s l u c e s . / public void p r i n t I n f o (){ boolean f l a g ; i f ( c d g L u c e s == 1 ) f l a g = t r u e ; else flag = false ; System . o u t . p r i n t l n ( " Luces encendidas ? " + f l a g ) ; } }

Las variables declaradas de esa manera se suelen denominar variables de instancia o atributos. Las variables de instancia de una clase pueden utilizarse en los mtodos de esa clase, e como se hace por ejemplo en las l neas 32, 17 y 24 de CocheConLuz (programa 15). De hecho, esas variables se usan conforme a las mismas reglas que rigen el uso de las variables locales declaradas dentro de un mtodo. Sin embargo, estas ultimas se crean y destruyen e en cada ejecucin del mtodo en el que estn declaradas. Por el contrario, cada vez que se o e e crea una instancia de una clase se crean sus variables de instancia particulares, que existirn a mientras exista la instancia a la cual pertenecen, y que solamente cambiarn de valor cuando a ese objeto ejecute alguna de sus funciones. La gura 5.9 representa grcamente la ejecucin a o

Tema 5. Objetos, clases y metodos Programa 16 Creacin y uso de objetos CocheConLuz o


1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18

60

package ehu . s t u d e n t ;

p u b l i c c l a s s CocheTest { p u b l i c s t a t i c v o i d main ( S t r i n g [ ] a r g s ) { CocheConLuz unCoche = new CocheConLuz ( ) ; CocheConLuz o t r o C o c h e = new CocheConLuz ( ) ; unCoche . e n c e n d e r L u c e s ( ) ; otroCoche . encenderLuces ( ) ; otroCoche . apagarLuces ( ) ; unCoche . p r i n t I n f o ( ) ; otroCoche . p r i n t I n f o ( ) ; } }

del programa 16 y el cambio de las variables de cada objeto. Un aspecto crucial a la hora de denir una clase de objetos se reere a la informacin que o esos objetos necesitan poseer para cumplir su cometido. Es importante observar que, al elegir una familia de variables de instancia particular (en el programa 15, la variable cdgLuces de tipo int) estamos decidiendo cmo representar la informacin que posee cada objeto. Sin o o embargo, el aspecto ms relevante no es cmo se representa esa informacin sino qu infora o o e macin almacena. Por ejemplo, en la clase CocheConLuz, tambin podr o e amos haber decidido representar el estado de las luces con una variable de tipo boolean o incluso de tipo String; otra cuestin es que esas elecciones sean ms o menos afortunadas. o a Por ultimo, observaremos tambin las variables de instancia de una clase no siempre e tendrn valores numricos o lgicos. De la misma manera que un coche real est formado por a e o a multitud de componentes, un objeto puede estar formado, a su vez, por otros objetos. Eso quiere decir que las variables de instancia de una clase sern, a menudo, de tipo referencia. a Por ejemplo, cabe imaginar una clase como la siguiente:
public c l a s s CocheConPiezas { p r i v a t e GPS elGPS = new GPS ( ) ; p r i v a t e Motor e l M o t o r = new Motor ( ) ; / Aqui i r i a n d e c l a r a c i o n e s de metodos / }

Tema 5. Objetos, clases y metodos

61

Figura 5.8: Dos objetos con variables

Figura 5.9: Evolucin de dos objetos CocheConLuz o

Tema 5. Objetos, clases y metodos Programa 17 La clase CartaBaraja


1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39

62

package ehu . s t u d e n t ; / E j e m p l o de d e f i n i c i o n de una c l a s e de o b j e t o s . Los o b j e t o s de e s t a c l a s e r e p r s e n t a n c a r t a s de l a b a r a j a . Los p a l o s y l a s f i g u r a s de cada p a l o s e s u p o n e n numerados c o n s e c u t i v a m e n t e : p a l o s : 0 ( Oros ) , 1 ( Copas ) , 2 ( E s p a d a s ) , 3 ( B a s t o s ) f i g u r a s : 0 ( As ) , 1 ( Dos ) , . . . 8 ( C a b a l l o ) , 9 ( Rey ) / public class CartaBaraja { / e l c o d i g o d e l p a l o / private int s u i t = 0; private int f i g u r e = 0; / e l c o d i g o de l a f i g u r a /

public int getSuit () { return s u i t ; } public int getFigure () { return f i g u r e ; } p u b l i c v o i d s e t S u i t ( i n t cdg ) { s u i t = cdg ; } p u b l i c v o i d s e t F i g u r e ( i n t cdg ) { f i g u r e = cdg ; } public String toString (){ String s = "[Palo: " + s u i t + "; Figura : " + f i g u r e + "]" ; return s ; } }

5.4.

Clases y constructoras: objetos inmutables

El programa 27 dene una nueva clase de objetos que representan naipes de la baraja espaola. Cada naipe va a almacenar la informacin correspondiente a su palo y su gura; n o eso justica la declaracin de variables de instancia en las l o neas 14 y 15. Adems, cada naipe a tiene funciones para poder saber cul es su palo y su gura: a getSuit getFigure

Ahora, imaginemos que se crean objetos CartaBaraja como sigue:

Tema 5. Objetos, clases y metodos


p u b l i c s t a t i c v o i d main ( S t r i n g [ ] a r g s ) { C a r t a B a r a j a A s c o p a s = New C a r t a B a r a j a ( ) ; C a r t a B a r a j a r e y B a s t o s = new C a r t a B a r a j a ( ) ; System . o u t . p r i n t l n ( a s C o p a s . t o S t r i n g ( ) ) ; System . o u t . p r i n t l n ( r e y B a s t o s . t o S t r i n g ( ) ) ; }

63

Sin embargo, y a pesar de que los nombres de las variables sugieren otra cosa, los dos objetos creados son iguales, en el sentido de que los valores de sus variables son iguales. Bsicamente, a ese es el motivo por el cual la clase CartaBaraja incluye tambin los mtodos: e e setSuit setFigure

Con esos mtodos podemos cambiar los valores asignados por defecto a las variables de e instancia de cada CartaBaraja, como se muestra en el programa 18. Programa 18 Manipulacin de objetos CartaBaraja o
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18

package ehu . s t u d e n t ; public class CartaBarajaTest { p u b l i c s t a t i c v o i d main ( S t r i n g [ ] a r g s ) { C a r t a B a r a j a a s C o p a s = new C a r t a B a r a j a ( ) ; C a r t a B a r a j a r e y B a s t o s = new C a r t a B a r a j a ( ) ; asCopas . s e t S u i t ( 1 ) ; asCopas . s e t F i g u r e ( 0 ) ; reyBastos . setSuit (3); reyBastos . setFigure (9); System . o u t . p r i n t l n ( a s C o p a s . t o S t r i n g ( ) ) ; System . o u t . p r i n t l n ( r e y B a s t o s . t o S t r i n g ( ) ) ; } }

La necesidad de escribir instrucciones como las incluidas entre las l neas 9 a 12 del programa 18, acaba por ser algo molesta. Peor todav es que esa necesidad es el motivo por el a cual se han incluido en la clase CartaBaraja los mtodos setSuit y setFigure. Es muy e posible que, desde el punto de vista de la estructura de nuestra aplicacin, no sea buena idea o permitir que puedan cambiarse cosas como el palo o la gura de un naipe, una vez creado. Por todo ello, los lenguajes de P.O.O. permiten incluir en la denicin de una clase un tipo o particular de mtodos, que se suelen llamar constructores. El aspecto ms relevante de esos e a mtodos es que su bloque de instrucciones se ejecuta automticamente, cada vez que se crea e a una instancia de la clase correspondiente. Un constructor sirve, por tanto, para establecer el estado inicial adecuado de cada instancia. El programa 19 muestra otra manera de denir objetos que representen naipes. Por una parte, han desaparecido los mtodos setSuit y setFigure. Por otra parte, entre las l e neas 9 a 12 se ha incluido la declaracin de uno de esos mtodos que llamamos constructores. o e

Tema 5. Objetos, clases y metodos Programa 19 La clase CartaBarajaInmutable


1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27

64

package ehu . s t u d e n t ; public class CartaBarajaInmutable { private f i n a l int s u i t ; private f i n a l int f i g u r e ;

/ e l c o d i g o d e l p a l o / / e l c o d i g o de l a f i g u r a /

public CartaBarajaInmutable ( int cdgSuit , int cdgFigure ) { s u i t = cdgSuit ; f i g u r e = cdgFigure ; } public int getSuit () { return s u i t ; } public int getFigure () { return f i g u r e ; } public String toString (){ String s = "[Palo: " + s u i t + "; Figura : " + f i g u r e + "]" ; return s ; } }

En java, la denicin de un constructor tiene el formato siguiente: o


 

public }

Nombre de Clase ( parametros formales ){

Instrucciones

y conviene tener en cuenta que en el bloque de instrucciones no puede incluirse ninguna instruccin return. o Cuando en una clase se incluye una constructora con parmetros, el operador new debe a incluir los argumentos correspondientes, conforme a la declaracin de parmetros formales de o a la constructora. Eso quiere decir que podemos crear objetos CartaBarajaInmutable como sigue:
C a r t a B a r a j a I n m u t a b l e a s C o p a s = new C a r t a B a r a j a I n m u t a b l e ( 1 , 0 ) ; C a r t a B a r a j a I n m u t a b l e r e y B a s t o s = new C a r t a B a r a j a I n m u t a b l e ( 3 , 9 ) ;

Adems, tambin quiere decir que no est permitido usar el operador new sin los argumentos a e a necesarios; es decir, que lo siguiente:

Tema 5. Objetos, clases y metodos


C a r t a B a r a j a I n m u t a b l e a s C o p a s = new C a r t a B a r a j a I n m u t a b l e ( ) ; C a r t a B a r a j a I n m u t a b l e r e y B a s t o s = new C a r t a B a r a j a I n m u t a b l e ( ) ;

65

ser ilegal, a menos que en la clase CartaBarajaInmutable se incluya tambin una consa e tructora sin parmetros. a Siempre que sea posible, es recomendable denir y usar clases como CartaBarajaInmutable o String, cuyas instancias estn obligadas a mantener su estado inalterado durante toda la a ejecucin del programa. En P.O.O. se usa en ocasiones el trmino objeto inmutable para o e referirse a objetos con esa caracter stica.

S-ar putea să vă placă și