Está en la página 1de 54

CLASES Y LOS OBJETOS

CLASES, OBJETOS Y VARIABLES DE INSTANCIA


Para realizar una tarea en una aplicacin se requiere un mtodo. El mtodo describe los mecanismos que se encargan de realizar sus tareas; y oculta al usuario las tareas complejas que realiza. En Java, empezamos por crear una unidad de aplicacin llamada clase para alojar a un mtodo En una clase se proporcionan uno o ms mtodos, los cuales estn diseados para realizar las tareas de esa clase Por ejemplo, una clase que representa a una cuenta bancaria podra contener un mtodo para depositar dinero en una cuenta, otro para retirar dinero de una cuenta y un tercero para solicitar el saldo actual de la cuenta.

De manera similar, se envan mensajes a un objeto; cada mensaje se conoce como la llamada a un mtodo, e indica a un mtodo del objeto que realice su tarea. Un objeto tiene atributos que lleva consigo cuando se utiliza en un programa. stos se especifican como parte de la clase del objeto. Por ejemplo, un objeto tipo cuenta bancaria tiene un atributo llamado saldo, el cual representa la cantidad de dinero en la cuenta. Cada objeto tipo cuenta bancaria conoce el saldo en la cuenta que representa, pero no los saldos de las otras cuentas en el banco. Los atributos se especifican mediante las variables de instancia de la clase.

DECLARACIN DE UNA CLASE CON UN MTODO E INSTANCIAMIENTO DE UN OBJETO DE UNA CLASE


Ejemplo que consiste en las clases LibroCalificaciones y PruebaLibroCalificaciones. La clase LibroCalificaciones (declarada en el archivo LibroCalificaciones.java) se utilizar para mostrar un mensaje en la pantalla, para dar la bienvenida al instructor a la aplicacin del libro de calificaciones. La clase PruebaLibroCalificaciones (declarada en el archivo PruebaLibroCalificaciones.java) es una clase de aplicacin en la que el mtodo main utilizar a la clase LibroCalificaciones. Cada declaracin de clase que comienza con la palabra clave public debe almacenarse en un archivo que tenga el mismo nombre que la clase, y que termine con la extensin de archivo .java. Por lo tanto, las clases Libro-Calificaciones y PruebaLibroCalificaciones deben declararse en archivos separados, ya que cada clase se declara como public.

LA CLASE LIBROCALIFICACIONES
La declaracin de la clase LibroCalificaciones contiene un mtodo llamado mostrarMensaje el cual muestra un mensaje en la pantalla public void mostrarMensaje (){ System.out. Println(Bienvenido al Libro de calificaciones)} } La lnea System.out. Println(Bienvenido al Libro de calificaciones)de la clase realiza el trabajo de mostrar el mensaje. Recuerde que una clase es como un plano de construccin; necesitamos crear un objeto de esta clase y llamar a su mtodo para hacer que se ejecute la lnea System.out.Println(Bienvenido al Libro de calificaciones) y que muestre su mensaje. La declaracin de la clase empieza en la lnea public class LibroCalificaciones la palabra clave public es un modificador de acceso. Por ahora, simplemente declararemos cada clase como public. Toda declaracin de clase contiene la palabra clave class, seguida inmediatamente por el nombre de la clase. El cuerpo de toda clase se encierra entre una llave izquierda y una derecha ({ y }). Cada clase que declaramos tena un mtodo llamado main. La clase LibroCalificaciones tambin tiene un mtodo: mostrarMensaje. Recuerde que main es un mtodo especial, que siempre es llamado, automticamente, por la Mquina Virtual de Java (JVM) a la hora de ejecutar una aplicacin.

La declaracin del mtodo comienza con la palabra clave public para indicar que el mtodo est disponible al pblico; es decir, los mtodos de otras clases pueden llamarlo desde el exterior del cuerpo de la declaracin de la clase. La palabra clave void indica que este mtodo realizar una tarea pero no devolver (es decir, regresar) informacin al mtodo que hizo la llamada cuando complete su tarea. El nombre del mtodo, mostrarMensaje, va despus del tipo de valor de retorno. Por convencin, los nombres de los mtodos comienzan con una letra minscula, y el resto de las palabras en el nombre empiezan con letra mayscula. Los parntesis despus del nombre del mtodo indican que ste es un mtodo. Un conjunto vaco de parntesis, indica que este mtodo no requiere informacin adicional para realizar su tarea. La lnea public void mostrarMensaje() se conoce comnmente como el encabezado del mtodo. El cuerpo de cada mtodo se delimita mediante una llave izquierda y una llave derecha ({ y }).

// LibroCalificaciones.java // Declaracin de una clase con un mtodo. public class LibroCalificaciones{ // muestra un mensaje de bienvenida al usuario de LibroCalificaciones public void mostrarMensaje() { System.out.println( Bienvenido al Libro de calificaciones! ); } // fin del mtodo mostrarMensaje } // fin de la clase LibroCalificaciones

LA CLASE PRUEBALIBROCALIFICACIONES
La declaracin de la clase PruebaLibroCalificaciones contiene el mtodo main que controlar la ejecucin de nuestra aplicacin. Cualquier clase que contiene el mtodo main, declarado, puede utilizarse para ejecutar una aplicacin. La declaracin de la clase PruebaLibroCalificaciones empieza en la lnea public class PruebaLibroCalificaciones . La clase slo contiene un mtodo main, algo comn en muchas clases que empiezan la ejecucin de una aplicacin. Una parte clave para permitir que la JVM localice y llame al mtodo main para empezar la ejecucin de la aplicacin es la palabra clave static, la cual indica que main es un mtodo static. Un mtodo static es especial, ya que puede llamarse sin tener que crear primero un objeto de la clase en la cual se declara ese mtodo.

En esta aplicacin vamos llamar al mtodo mostrarMensaje de la clase LibroCalificaciones para mostrar el mensaje de bienvenida en la ventana de comandos. Por lo general, no podemos llamar a un mtodo que pertenece a otra clase, sino hasta crear un objeto de esa clase, LibroCalificaciones miLibroCalificaciones = new LibroCalificaciones();. Empezaremos por declarar la variable miLibroCalificaciones. Observe que el tipo de la variable es LibroCalificaciones; la clase que declaramos . Cada nueva clase que creamos se convierte en un nuevo tipo, que puede usarse para declarar variables y crear objetos. Los programadores pueden declarar nuevos tipos de clases segn lo necesiten; sta es una razn por la cual Java se conoce como un lenguaje extensible. La variable miLibroCalificaciones se inicializa con el resultado de la expresin de creacin de instancia de clase new LibroCalificaciones().

La palabra clave new crea un nuevo objeto de la clase especificada a la derecha de la palabra clave (es decir, LibroCalificaciones). Los parntesis a la derecha de LibroCalificaciones son obligatorios. Esos parntesis en combinacin con el nombre de una clase representan una llamada a un constructor, que es similar a un mtodo, pero se utiliza slo cuando se crea un objeto, para inicializar los datos de ste. As como podemos usar el objeto System.out para llamar a los mtodos print, printf y println, tambin podemos usar el objeto miLibroCalificaciones para llamar al mtodo mostrarMensaje.

La lnea miLibroCalificaciones.mostrarMensaje llama al mtodo mostrarMensaje usando miLibroCalificaciones seguida de un separador punto (.), el nombre del mtodo mostrarMensaje y un conjunto vaco de parntesis. Esta llamada hace que el mtodo mostrarMensaje realice su tarea, al inicio de la lnea de, miLibroCalificaciones. Indica que main debe utilizar el objeto miLibroCalificaciones que se cre en la lneaLibroCalificaciones miLibroCalificaciones = new LibroCalificaciones(); La lnea public void MostrarMensaje () indica que el mtodo mostrarMensaje tiene una lista de parmetros vaca; es decir, mostrarMensaje no requiere informacin adicional para realizar su tarea. Por esta razn, la llamada al mtodo especifica un conjunto vaco de parntesis despus del nombre del mtodo, para indicar que no se van a pasar argumentos al mtodo mostrarMensaje. Cuando el mtodo mostrarMensaje completa su tarea, el mtodo main contina su ejecucin. ste es el final del mtodo main, por lo que el programa termina.

// Fig. 3.2: PruebaLibroCalificaciones.java // Crea un objeto LibroCalificaciones y llama a su mtodo mostrarMensaje. public class PruebaLibroCalificaciones { // el mtodo main empieza la ejecucin del programa public static void main( String args[] ) { // crea un objeto LibroCalificaciones y lo asigna a miLibroCalificaciones LibroCalificaciones miLibroCalificaciones = new LibroCalificaciones(); // llama al mtodo mostrarMensaje de miLibroCalificaciones miLibroCalificaciones.mostrarMensaje(); } // fin de main } // fin de la clase PruebaLibroCalificaciones

LENGUAJE UNIFICADO DE MODELADO

UML

Es un lenguaje grfico para visualizar, especificar, construir y documentar un sistema. UML ofrece un estndar para describir un "plano" del sistema (modelo), incluyendo aspectos conceptuales tales como procesos de negocio, funciones del sistema, y aspectos concretos como expresiones de lenguajes de programacin, esquemas de bases de datos y compuestos reciclados. Es importante remarcar que UML es un "lenguaje de modelado" para especificar o para describir mtodos o procesos. Se utiliza para definir un sistema, para detallar los artefactos en el sistema y para documentar y construir. En otras palabras, es el lenguaje en el que est descrito el modelo.

TIPOS DE DIAGRAMAS DE UML


Diagrama de clases Diagrama de objetos Diagrama de componentes Diagrama de estructura compuesta Diagrama de paquetes Diagrama de despliegue

DIAGRAMA DE CLASES DE UML PARA LA CLASE LIBROCALIFICACIONES


En UML, cada clase se modela en un diagrama de clases en forma de un rectngulo con tres componentes.

El compartimiento superior contiene el nombre de la clase, centrado en forma horizontal y en negrita. El compartimiento de en medio contiene los atributos de la clase, que en Java corresponden a las variables de instancia.

El compartimiento de en medio est vaco, ya que la versin de la clase LibroCalificaciones no tiene atributos

El compartimiento inferior contiene las operaciones de la clase, que en Java corresponden a los mtodos. Para modelar las operaciones, UML lista el nombre de la operacin precedido por un modificador de acceso y seguido de un conjunto de parntesis. La clase LibroCalificaciones tiene un solo mtodo llamado mostrarMensaje, por lo que el compartimiento inferior lista una operacin con este nombre. El mtodo mostrarMensaje no requiere informacin adicional para realizar sus tareas, por lo que los parntesis que van despus del nombre del mtodo en el diagrama de clases estn vacos. El signo ms (+) que va antes del nombre de la operacin indica que mostrarMensaje es una operacin public en UML (es decir, un mtodo public en Java).

DECLARACIN DE UN MTODO CON UN PARMETRO


A la informacin adicional se le conoce como parmetro. Un mtodo puede requerir uno o ms parmetros que representan la informacin adicional que necesita para realizar su tarea. La llamada a un mtodo proporciona valores (llamados argumentos) para cada uno de los parmetros de ese mtodo. Por ejemplo, el mtodo System.out.println requiere un argumento que especifica los datos a mostrar en una ventana de comandos. De manera similar, para realizar un depsito en una cuenta bancaria, un mtodo llamado deposito especifica un parmetro que representa el monto a depositar. Cuando se hace una llamada al mtodo deposito, se asigna al parmetro del mtodo un valor como argumento, que representa el monto a depositar. Entonces, el mtodo realiza un depsito por ese monto.

EJEMPLO
// PruebaLibroCalificaciones.java // Crea un objeto LibroCalificaciones y pasa un objeto String a su mtodo mostrarMensaje. import java.util.Scanner; // el programa usa la clase Scanner public class PruebaLibroCalificaciones { // el mtodo main empieza la ejecucin del programa public static void main( String args[] ) { // crea un objeto Scanner para obtener la entrada de la ventana de comandos Scanner entrada = new Scanner( System.in ); // crea un objeto LibroCalificaciones y lo asigna a miLibroCalificaciones LibroCalificaciones miLibroCalificaciones = new LibroCalificaciones(); // pide y recibe el nombre del curso como entrada System.out.println( Escriba el nombre del curso: ) String nombreDelCurso = entrada.nextLine(); // lee una lnea de texto System.out.println(); // imprime una lnea en blanco // llama al mtodo mostrarMensaje de miLibroCalificaciones y pasa nombreDelCurso como argumento miLibroCalificaciones.mostrarMensaje( nombreDelCurso ); } // fin de main } // fin de la clase PruebaLibroCalificaciones

// LibroCalificaciones.java // Declaracin de una clase con un mtodo que tiene un parmetro. public class LibroCalificaciones { // muestra un mensaje de bienvenida al usuario de LibroCalificaciones public void mostrarMensaje( String nombreDelCurso ) { System.out.printf( Bienvenido al libro de calificaciones para\n%s!\n,nombreDelCurso ); } // fin del mtodo mostrarMensaje } // fin de la clase LibroCalificaciones

Nuestro siguiente ejemplo declara la clase LibroCalificaciones, con un mtodo mostrarMensaje que muestra el nombre del curso como parte del mensaje de bienvenida. El nuevo mtodo mostrarMensaje requiere un parmetro que representa el nombre del curso a imprimir en pantalla. Antes de hablar sobre las nuevas caractersticas de la clase LibroCalificaciones, veamos cmo se utiliza la nueva clase desde el mtodo main de la clase PruebaLibroCalificaciones. Scanner entrada = new Scanner( System.in ); crea un objeto Scanner llamado entrada, para recibir el nombre del curso escrito por el usuario. La lnea LibroCalificaciones miLibroCalificaciones = new LibroCalificaciones(); crea un objeto de la clase LibroCalificaciones y lo asigna a la variable miLibroCalificaciones. La lnea System.out.println( Escriba el nombre del curso: ) pide al usuario que escriba el nombre de un curso.

La lnea String nombreDelCurso = entrada.nextLine(); lee el nombre que introduce el usuario y lo asigna a la variable nombreDelCurso, mediante el uso del mtodo nextLine de Scanner para realizar la operacin de entrada. El usuario escribe el nombre del curso y oprime Intro para enviarlo al programa. Observe que al oprimir Intro se inserta un carcter de nueva lnea al final de los caracteres escritos por el usuario. El mtodo nextLine lee los caracteres que escribi el usuario hasta encontrar el carcter de nueva lnea, y despus devuelve un objeto String que contiene los caracteres hasta, pero sin incluir, la nueva lnea. El carcter de nueva lnea se descarta. La clase Scanner tambin cuenta con un mtodo similar (next) para leer palabras individuales. Cuando el usuario oprime Intro despus de escribir la entrada, el mtodo next lee caracteres hasta encontrar un carcter de espacio en blanco (espacio, tabulador o nueva lnea), y despus devuelve un objeto String que contiene los caracteres hasta, pero sin incluir, el carcter de espacio en blanco (que se descarta). No se pierde toda la informacin que va despus del primer carcter de espacio en blanco; estar disponible para que la lean otras instrucciones que llamen a los mtodos de Scanner, ms adelante en el programa.

La lnea miLibroCalificaciones.mostrarMensaje( nombreDelCurso ); llama al mtodo mostrarMensaje de miLibroCalificaciones. La variable nombreDelCurso entre parntesis es el argumento que se pasa al mtodo mostrarMensaje, para que ste pueda realizar su tarea. El valor de la variable nombreDelCurso en main se convierte en el valor del parmetro nombreDelCurso del mtodo mostrarMensaje. Al ejecutar esta aplicacin, observe que el mtodo mostrarMensaje imprime en pantalla el nombre que usted escribi como parte del mensaje de bienvenida.

OBSERVACIN DE INGENIERA DE SOFTWARE


Por lo general, los objetos se crean mediante el uso de new. Una excepcin es la literal de cadena que est encerrada entre comillas, como hola. Las literales de cadena son referencias a objetos String que Java crea de manera implcita.

MS SOBRE LOS ARGUMENTOS Y LOS PARMETROS

Al declarar un mtodo, debe especificar si el mtodo requiere datos para realizar su tarea. Para ello es necesario colocar informacin adicional en la lista de parmetros del mtodo, la cual se encuentra en los parntesis que van despus del nombre del mtodo. La lista de parmetros puede contener cualquier nmero de parmetros, incluso ninguno. Los parntesis vacos despus del nombre del mtodo indican que un mtodo no requiere parmetros. En la lnea public void mostrarMensaje( String nombreDelCurso ) la lista de parmetros de mostrarMensaje) declara que mtodo requiere un parmetro. Cada parmetro debe especificar un tipo y un identificador. En este caso, el tipo String y el identificador nombreDelCurso indican que el mtodo mostrarMensaje requiere un objeto String para realizar su tarea. En el instante en que se llama al mtodo, el valor del argumento en la llamada se asigna al parmetro correspondiente (en este caso, nombreDelCurso) en el encabezado del mtodo. Despus, el cuerpo del mtodo utiliza el parmetro nombreDelCurso para acceder al valor. Las lneas System.out.printf( Bienvenido al libro de calificaciones para\n%s!\n, nombreDelCurso ); muestran el valor del parmetro nombreDelCurso, mediante el uso del especificador de formato %s en la cadena de formato de printf. Observe que el nombre de la variable de parmetro puede ser igual o distinto al nombre de la variable de argumento-

Un mtodo puede especificar mltiples parmetros; slo hay que separar un parmetro de otro mediante una coma. El nmero de argumentos en la llamada a un mtodo debe coincidir con el nmero de parmetros en la lista de parmetros de la declaracin del mtodo que se llam. Adems, los tipos de los argumentos en la llamada al mtodo deben ser consistentes con los tipos de los parmetros correspondientes en la declaracin del mtodo (como veremos en captulos posteriores, no siempre se requiere que el tipo de un argumento y el tipo de su correspondiente parmetro sean idnticos). En nuestro ejemplo, la llamada al mtodo pasa un argumento de tipo String (nombreDelCurso se declara como String en la lnea 19 de la fi gura 3.5) y la declaracin del mtodo especifi ca un parmetro de tipo String (lnea 7 en la fi gura 3.4). Por lo tanto, en este ejemplo, el tipo del argumento en la llamada al mtodo coincide exactamente con el tipo del parmetro en el encabezado del mtodo.

ERROR COMN DE PROGRAMACIN


Si el nmero de argumentos en la llamada a un mtodo no coincide con el nmero de parmetros en la declaracin del mtodo, se produce un error de compilacin. Si los tipos de los argumentos en la llamada a un mtodo no son consistentes con los tipos de los parmetros correspondientes en la declaracin del mtodo, se produce un error de compilacin.

DIAGRAMA DE CLASES DE UML ACTUALIZADO PARA LA CLASE LIBROCALIFICACIONES


El diagrama de clases de UML modela la clase LibroCalificaciones. Esta clase LibroCalificaciones contiene la operacin public llamada mostrarMensaje. Sin embargo, esta versin de mostrarMensaje tiene un parmetro. La forma en que UML modela un parmetro es un poco distinta a la de Java, ya que lista el nombre del parmetro, seguido de dos puntos y del tipo del parmetro entre parntesis, despus del nombre de la operacin. UML tiene sus propios tipos de datos, que son similares a los de Java. El tipo String de UML corresponde al tipo String de Java. El mtodo mostrarMensaje de LibroCalificaciones tiene un parmetro String llamado nombreDelCurso, por lo que en se lista a nombreDelCurso : String entre los parntesis que van despus de mostrarMensaje.

OBSERVACIONES ACERCA DEL USO DE LAS DECLARACIONES IMPORT


Las variables que se declaran en el cuerpo de un mtodo especfico se conocen como variables locales, y slo se pueden utilizar en ese mtodo. Cuando termina ese mtodo, se pierden los valores de sus variables locales. Por lo general, una clase consiste en uno o ms mtodos que manipulan los atributos pertenecientes a un objeto especfico de la clase. Los atributos se representan como variables en la declaracin de la clase. Dichas variables se llaman campos, y se declaran dentro de la declaracin de una clase, pero fuera de los cuerpos de las declaraciones de los mtodos de la clase. Cuando cada objeto de una clase mantiene su propia copia de un atributo, el campo que representa a ese atributo se conoce tambin como variable de instancia; cada objeto (instancia) de la clase tiene una instancia separada de la variable en memoria.

// LibroCalificaciones.java // Clase LibroCalificaciones que contiene una variable de instancia nombreDelCurso y mtodos para establecer y obtener su valor. public class LibroCalificaciones{ private String nombreDelCurso; // nombre del curso para este LibroCalificaciones // mtodo para establecer el nombre del curso public void establecerNombreDelCurso( String nombre ){ nombreDelCurso = nombre; // almacena el nombre del curso } // fin del mtodo establecerNombreDelCurso

// mtodo para obtener el nombre del curso public String obtenerNombreDelCurso() { return nombreDelCurso; } // fin del mtodo obtenerNombreDelCurso
// muestra un mensaje de bienvenida al usuario de LibroCalificaciones public void mostrarMensaje() { // esta instruccin llama a obtenerNombreDelCurso para obtener el // nombre del curso que representa este LibroCalificaciones System.out.printf( Bienvenido al libro de calificaciones para\n%s!\n, obtenerNombreDelCurso() ); } // fin del mtodo mostrarMensaje } // fin de la clase LibroCalificaciones

Mantiene el nombre del curso como una variable de instancia, para que pueda usarse o modificarse en cualquier momento, durante la ejecucin de una aplicacin. Esta clase contiene tres mtodos: establecerNombreDelCurso, obtenerNombreDelCurso y mostrarMensaje. El mtodo establecerNombreDelCurso almacena el nombre de un curso en un LibroCalificaciones. El mtodo obtenerNombreDelCurso obtiene el nombre del curso de un LibroCalificaciones. El mtodo mostrarMensaje, que en este caso no especifica parmetros, sigue mostrando un mensaje de bienvenida que incluye el nombre del curso; como veremos ms adelante, el mtodo ahora obtiene el nombre del curso mediante una llamada a otro mtodo en la misma clase: obtenerNombreDelCurso. Por lo general, un instructor ensea ms de un curso, cada uno con su propio nombre. La lnea private String nombreDelCurso; declara que nombreDelCurso es una variable de tipo String. Como la variable se declara en el cuerpo de la clase, pero fuera de los cuerpos de los mtodos de la misma, la lnea private String nombreDelCurso; es una declaracin para una variable de instancia. Cada instancia (es decir, objeto) de la clase LibroCalificaciones contiene una copia de cada variable de instancia. Por ejemplo, si hay dos objetos LibroCalificaciones, cada objeto tiene su propia copia de nombreDelCurso (una por cada objeto). Un beneficio de hacer de nombreDelCurso una variable de instancia es que todos los mtodos de la clase (en este caso, LibroCalificaciones) pueden manipular cualquier variable de instancia que aparezca en la clase (en este caso, nombreDelCurso).

1// PruebaLibroCalificaciones.java 2 // Crea y manipula un objeto LibroCalificaciones. 3 import java.util.Scanner; // el programa usa la clase Scanner 4 5 public class PruebaLibroCalificaciones 6{ 7 // el mtodo main empieza la ejecucin del programa 8 public static void main( String args[] ) 9{ 10 // crea un objeto Scanner para obtener la entrada de la ventana de comandos 11 Scanner entrada = new Scanner( System.in ); 12 13 // crea un objeto LibroCalificaciones y lo asigna a miLibroCalificaciones 14 LibroCalificaciones miLibroCalificaciones = new LibroCalificaciones(); 15 16 // muestra el valor inicial de nombreDelCurso 17 System.out.printf( El nombre inicial del curso es: %s\n\n, 18 miLibroCalificaciones.obtenerNombreDelCurso() ); 19 20 // pide y lee el nombre del curso 21 System.out.println( Escriba el nombre del curso: ); 22 String elNombre = entrada.nextLine(); // lee una lnea de texto 23 miLibroCalificaciones.establecerNombreDelCurso( elNombre ); // establece el nombre del curso 24 System.out.println(); // imprime una lnea en blanco 25 26 // muestra el mensaje de bienvenida despus de especificar el nombre del curso 27 miLibroCalificaciones.mostrarMensaje(); 28 } // fin de main 29 30 } // fin de la clase PruebaLibroCalificaciones

LOS MODIFICADORES DE ACCESO PUBLIC Y PRIVATE


La mayora de las declaraciones de variables de instancia van precedidas por la palabra clave private. Al igual que public, la palabra clave private es un modificador de acceso. Las variables o los mtodos declarados con el modificador de acceso private son accesibles slo para los mtodos de la clase en la que se declaran. As, la variable nombreDelCurso slo puede utilizarse en los mtodos establecerNombreDelCurso, obtenerNombreDelCurso y mostrarMensaje de (cada objeto de) la clase LibroCalificaciones.

OBSERVACIN DE INGENIERA DE SOFTWARE


Es necesario colocar un modifcador de acceso antes de cada declaracin de un campo y de un mtodo. Como regla emprica, las variables de instancia deben declararse como private y los mtodos, como public. (Ms adelante veremos que es apropiado declarar ciertos mtodos como private, si slo van a estar accesibles por otros mtodos de la clase).

BUENA PRCTICA DE PROGRAMACIN


Preferimos listar los campos de una clase primero, para que, a medida que usted lea el cdigo, pueda ver los nombres y tipos de las variables antes de ver su uso en los mtodos de la clase. Es posible listar los campos de la clase en cualquier parte de la misma, fuera de las declaraciones de sus mtodos, pero si se esparcen por todo el cdigo, ste ser ms difcil de leer. Coloque una lnea en blanco entre las declaraciones de los mtodos, para separarlos y mejorar la legibilidad del programa.

El proceso de declarar variables de instancia con el modificador de acceso private se conoce como ocultamiento de datos. Cuando un programa crea (instancia) un objeto de la clase LibroCalificaciones, la variable nombreDelCurso se encapsula (oculta) en el objeto, y slo est accesible para los mtodos de la clase de ese objeto. En la clase LibroCalificaciones, los mtodos establecerNombreDelCurso y obtenerNombreDelCurso manipulan a la variable de instancia nombreDelCurso. El mtodo establecerNombreDelCurso (lneas 10 a la 13) no devuelve datos cuando completa su tarea, por lo que su tipo de valor de retorno es void. El mtodo recibe un parmetro (nombre), el cual representa el nombre del curso que se pasar al mtodo como un argumento. La lnea 12 asigna nombre a la variable de instancia nombreDelCurso.

El mtodo obtenerNombreDelCurso (lneas 16 a la 19) devuelve un nombreDelCurso de un objeto LibroCalificaciones especfico. El mtodo tiene una lista de parmetros vaca, por lo que no requiere informacin adicional para realizar su tarea. El mtodo especifi ca que devuelve un objeto String; a ste se le conoce como el tipo de valor de retorno del mtodo. Cuando se hace una llamada a un mtodo que especifi ca un tipo de valor de retorno, y ste completa su tarea, devuelve un resultado al mtodo que lo llam. Por ejemplo, cuando usted va a un cajero automtico (ATM) y solicita el saldo de su cuenta, espera que el ATM le devuelva un valor que representa su saldo. De manera similar, cuando una instruccin llama al mtodo obtenerNombreDelCurso en un objeto LibroCalificaciones, la instruccin espera recibir el nombre del curso de LibroCalificaciones (en este caso, un objeto String, como se especifi ca en el tipo de valor de retorno de la declaracin del mtodo). Si tiene un mtodo cuadrado que devuelve el cuadrado de su argumento, es de esperarse que la instruccin int resultado = cuadrado( 2 ); devuelva 4 del mtodo cuadrado y asigne 4 a la variable resultado. Si tiene un mtodo maximo que devuelve el mayor de tres argumentos enteros, es de esperarse que la siguiente instruccin int mayor = maximo( 27, 114, 51 ); Observe que cada una de las instrucciones en las lneas 12 y 18 utilizan nombreDelCurso, aun cuando esta variable no se declar en ninguno de los mtodos. Podemos utilizar nombreDelCurso en los mtodos de la clase LibroCalificaciones, ya que nombreDelCurso es un campo de la clase. Observe adems que el orden en el que se declaran los mtodos en una clase no determina cundo se van a llamar en tiempo de ejecucin. Por lo tanto, el mtodo obtenerNombreDelCurso podra declararse antes del mtodo establecerNombreDelCurso. El mtodo mostrarMensaje (lneas 22 a la 28) no devuelve datos cuando completa su tarea, por lo que su tipo de valor de retorno es void. El mtodo no recibe parmetros, por lo que la lista de parmetros est vaca. Las lneas 26 y 27 imprimen un mensaje de bienvenida, que incluye el valor de la variable de instancia nombreDelCurso. Una vez ms, necesitamos crear un objeto de la clase LibroCalificaciones y llamar a sus mtodos para poder mostrar en pantalla el mensaje de bienvenida.

LA CLASE PRUEBALIBROCALIFICACIONES QUE DEMUESTRA A LA CLASE LIBROCALIFICACIONES


La clase PruebaLibroCalificaciones crea un objeto de la clase LibroCalificaciones y demuestre el uso de sus mtodos. La lnea Scanner entrada = new Scanner( System.in ); crea un objeto Scanner, que se utilizar para obtener el nombre de un curso del usuario. La lnea LibroCalificaciones miLibroCalificaciones = new LibroCalificaciones(); crea un objeto LibroCalificaciones y lo asigna a la variable local miLibroCalificaciones, de tipo LibroCalificaciones. Las lneas System.out.printf( El nombre inicial del curso es: %s\n\n, miLibroCalificaciones.obtenerNombreDelCurso() ); muestran el nombre inicial del curso mediante una llamada al mtodo obtenerNombreDelCurso del objeto. Observe que la primera lnea de la salida muestra el nombre null. A diferencia de las variables locales, que no se inicializan de manera automtica, cada campo tiene un valor inicial predeterminado: un valor que Java proporciona cuando el programador no especifica el valor inicial del campo. Por ende, no se requiere que los campos se inicialicen explcitamente antes de usarlos en un programa, a menos que deban inicializarse con valores distintos de los predeterminados. El valor predeterminado para un campo de tipo String (como nombreDelCurso en este ejemplo) es null.

La lnea System.out.println( Escriba el nombre del curso: ); pide al usuario que escriba el nombre para el curso. La variable String local elNombre (declarada en la lnea String elNombre = entrada.nextLine();) se inicializa con el nombre del curso que escribi el usuario, el cual se devuelve mediante la llamada al mtodo nextLine del objeto Scanner llamado entrada. La lnea miLibroCalificaciones.establecerNombreDelCurso( elNombre ); llama al mtodo establecerNombreDelCurso del objeto miLibroCalificaciones y provee elNombre como argumento para el mtodo. Cuando se hace la llamada al mtodo, el valor del argumento se asigna al parmetro nombre del mtodo establecerNombreDelCurso. Despus, el valor del parmetro se asigna a la variable de instancia nombreDelCurso. La lnea System.out.println(); salta una lnea en la salida, y despus la lnea miLibroCalificaciones.mostrarMensaje(); llama al mtodo mostrarMensaje del objeto miLibroCalificaciones para mostrar en pantalla el mensaje de bienvenida, que contiene el nombre del curso.

LOS MTODOS ESTABLECER Y OBTENER


Los campos private de una clase pueden manipularse slo mediante los mtodos de esa clase. Por lo tanto, un cliente de un objeto (es decir, cualquier clase que llame a los mtodos del objeto) llama a los mtodos public de la clase para manipular los campos private de un objeto de esa clase. Esto explica por qu las instrucciones en el mtodo main llaman a los mtodos establecerNombreDelCurso, obtenerNombreDelCurso y mostrarMensaje en un objeto LibroCalificaciones. A menudo, las clases proporcionan mtodos public para permitir a los clientes de la clase establecer (es decir, asignar valores a) u obtener (es decir, obtener los valores de) variables de instancia private. Los nombres de estos mtodos no necesitan empezar con establecer u obtener, pero esta convencin de nomenclatura es muy recomendada en Java, y es requerida para ciertos componentes de software especiales de Java, conocidos como JavaBeans, que pueden simplificar la programacin en muchos entornos de desarrollo integrados (IDEs). El mtodo que establece la variable nombreDelCurso en este ejemplo se llama establecerNombreDelCurso, y el mtodo que obtiene el valor de la variable de instancia nombreDelCurso se llama obtenerNombreDelCurso.

// PruebaLibroCalificaciones.java // Crea y manipula un objeto LibroCalificaciones. import java.util.Scanner; // el programa usa la clase Scanner public class PruebaLibroCalificaciones { // el mtodo main empieza la ejecucin del programa public static void main( String args[] ) { // crea un objeto Scanner para obtener la entrada de la ventana de comandos Scanner entrada = new Scanner( System.in ); // crea un objeto LibroCalificaciones y lo asigna a miLibroCalificaciones LibroCalificaciones miLibroCalificaciones = new LibroCalificaciones(); // muestra el valor inicial de nombreDelCurso System.out.printf( El nombre inicial del curso es: %s\n\n, miLibroCalificaciones.obtenerNombreDelCurso() ); // pide y lee el nombre del curso System.out.println( Escriba el nombre del curso: ); String elNombre = entrada.nextLine(); // lee una lnea de texto miLibroCalificaciones.establecerNombreDelCurso( elNombre ); // establece el nombre del curso System.out.println(); // imprime una lnea en blanco // muestra el mensaje de bienvenida despus de especificar el nombre del curso miLibroCalificaciones.mostrarMensaje(); } // fin de main } // fin de la clase PruebaLibroCalificaciones

RESULTADO

DIAGRAMA DE CLASES DE UML PARA LA CLASE LIBROCALIFICACIONES CON UNA VARIABLE DE INSTANCIA, Y MTODOS ESTABLECER Y OBTENER
Contiene un diagrama de clases de UML actualizado para la versin de la clase LibroCalificaciones Este diagrama modela la variable de instancia nombreDelCurso de la clase LibroCalificaciones como un atributo en el compartimiento intermedio de la clase. UML representa a las variables de instancia como atributos, listando el nombre del atributo, seguido de dos puntos y del tipo del atributo. El tipo de UML del atributo nombreDelCurso es String. La variable de instancia nombreDelCurso es private en Java, por lo que el diagrama de clases lista un signo menos (-) en frente del nombre del atributo correspondiente. La clase LibroCalificaciones contiene tres mtodos public, por lo que el diagrama de clases lista tres operaciones en el tercer compartimiento. Recuerde que el signo ms (+) antes de cada nombre de operacin indica que sta es public. La operacin establecerNombreDelCurso tiene un parmetro String llamado nombre. UML indica el tipo de valor de retorno de una operacin colocando dos puntos y el tipo de valor de retorno despus de los parntesis que le siguen al nombre de la operacin. El mtodo obtenerNombreDelCurso de la clase LibroCalificaciones tiene un tipo de valor de retorno String en Java, por lo que el diagrama de clases muestra un tipo de valor de retorno String en UML. Observe que las operaciones establecerNombreDelCurso y mostrarMensaje no devuelven valores (es decir, devuelven void en Java), por lo que el diagrama de clases de UML no especifica un tipo de valor de retorno despus de los parntesis de estas operaciones.

Diagrama de clases de UML, en el que se indica que la clase LibroCalificaciones tiene un atributo nombreDelCurso de tipo String en UML, y tres operaciones: establecerNombreDelCurso (con un parmetro nombre de tipo String de UML), obtenerNombreDelCurso (que devuelve el tipo String de UML) y mostrarMensaje.

COMPARACIN ENTRE TIPOS PRIMITIVOS Y TIPOS POR REFERENCIA

Los tipos de datos en Java se dividen en dos categoras: tipos primitivos y tipos por referencia (algunas veces conocidos como tipos no primitivos). Los tipos primitivos son boolean, byte, char, short, int, long, float y double. Todos los tipos no primitivos son tipos por referencia, por lo cual las clases, que especifican los tipos de objetos, son tipos por referencia. Una variable de tipo primitivo puede almacenar slo un valor de su tipo declarado a la vez. Por ejemplo, una variable int puede almacenar un nmero completo (como 7) a la vez. Cuando se asigna otro valor a esa variable, se sustituye su valor inicial. Las variables de instancia de tipo primitivo se inicializan de manera predeterminada; las variables de los tipos byte, char, short, int, long, float y double se inicializan con 0, y las variables de tipo boolean se inicializan con false. Usted puede especifcar sus propios valores iniciales para las variables de tipo primitivo. Recuerde que las variables locales no se inicializan de manera predeterminada.

Los programas utilizan variables de tipo por referencia (que por lo general se llaman referencias) para almacenar las ubicaciones de los objetos en la memoria de la computadora. Se dice que dicha variable hace referencia a un objeto en el programa. Cada uno de los objetos a los que se hace referencia pueden contener muchas variables de instancia y mtodos. La lnea LibroCalificaciones miLibroCalificaciones = new LibroCalificaciones(); crea un objeto de la clase LibroCalificaciones, y la variable miLibroCalificaciones contiene una referencia a ese objeto LibroCalificaciones. Las variables de instancia de tipo por referencia se inicializan de manera predeterminada con el valor null: una palabra reservada que representa una referencia a nada. Esto explica por qu la primera llamada a obtenerNombreDelCurso en la lnea miLibroCalificaciones.obtenerNombreDelCurso() devolva null; no se haba establecido el valor de nombreDelCurso, por lo que se devolva el valor inicial predeterminado null. Es obligatorio que una referencia a un objeto invoque (es decir, llame) a los mtodos de un objeto. En la aplicacin, las instrucciones en el mtodo main utilizan la variable miLibroCalificaciones para enviar mensajes al objeto LibroCalificaciones. Estos mensajes son llamadas a mtodos (como establecer NombreDelCurso y obtenerNombreDelCurso) que permiten al programa interactuar con el objeto LibroCalificaciones. Por ejemplo, la instruccin en la lnea miLibroCalificaciones.establecerNombreDelCurso( elNombre ); utiliza a miLibroCalificaciones para enviar el mensaje establecerNombreDelCurso al objeto LibroCalificaciones. El mensaje incluye el argumento que requiere establecerNombreDelCurso para realizar su tarea. El objeto LibroCalificaciones utiliza esta informacin para establecer la variable de instancia nombreDelCurso. Tenga en cuenta que las variables de tipo primitivo no hacen referencias a objetos, por lo que dichas variables no pueden utilizarse para invocar mtodos.

INICIALIZACIN DE OBJETOS MEDIANTE CONSTRUCTORES


LA PALABRA CLAVE NEW LLAMA AL CONSTRUCTOR DE LA CLASE PARA REALIZAR LA INICIALIZACIN

Cuando se crea un objeto de la clase LibroCalificaciones su variable de instancia nombreCurso se inicializa con null de manera predeterminada. Qu pasa si usted desea proporcionar el nombre de un curso a la hora de crear un objeto LibroCalificaciones? Cada clase que usted declare puede proporcionar un constructor, el cual puede utilizarse para inicializar un objeto de una clase al momento de crear ese objeto. De hecho, Java requiere una llamada al constructor para cada objeto que se crea. La palabra clave new llama al constructor de la clase para realizar la inicializacin. La llamada al constructor se indica mediante el nombre de la clase, seguido de parntesis; el constructor debe tener el mismo nombre que la clase. Por ejemplo, la lnea LibroCalificaciones miLibroCalificaciones = new LibroCalificaciones(); primero utiliza new para crear un objeto LibroCalificaciones. Los parntesis vacos despus de "new LibroCalificaciones" indican una llamada sin argumentos al constructor de la clase. De manera predeterminada, el compilador proporciona un constructor predeterminado sin parmetros, en cualquier clase que no incluya un constructor en forma explcita. Cuando una clase slo tiene el constructor predeterminado, sus variables de instancia se inicializan con sus valores predeterminados. Las variables de los tipos char, byte, short, int, long, float y double se inicializan con 0, las variables de tipo boolean se inicializan con false, y las variables de tipo por referencia se inicializan con null.

Cuando usted declara una clase, puede proporcionar su propio constructor para especificar una inicializacin personalizada para los objetos de su clase. Por ejemplo, tal vez un programador quiera especificar el nombre de un curso para un objeto LibroCalificaciones cuando se crea este objeto, como en LibroCalificaciones miLibroCalificaciones = new LibroCalificaciones( "CS101 Introduccion a la programacion en Java" ); En este caso, el argumento "CS101 Introduccin a la programacin en Java" se pasa al constructor del objeto LibroCalificaciones y se utiliza para inicializar el nombreDelCurso. La instruccin anterior requiere que la clase proporcione un constructor con un parmetro String.

1 // PruebaLibroCalificaciones.java 2 // El constructor de LibroCalificaciones se utiliza para especificar el 3 // nombre del curso cada vez que se crea cada objeto LibroCalificaciones. 4 5 public class PruebaLibroCalificaciones 6{ 7 // el mtodo main empieza la ejecucin del programa 8 public static void main( String args[] ) 9{ 10 // crea objeto LibroCalificaciones 11 LibroCalificaciones libroCalificaciones1 = new LibroCalificaciones( 12 CS101 Introduccion a la programacion en Java ); 13 LibroCalificaciones libroCalificaciones2 = new LibroCalificaciones( 14 CS102 Estructuras de datos en Java ); 15 16 // muestra el valor inicial de nombreDelCurso para cada LibroCalificaciones 17 System.out.printf( El nombre del curso de libroCalificaciones1 es: %s\n, 18 libroCalificaciones1.obtenerNombreDelCurso() ); 19 System.out.printf( El nombre del curso de libroCalificaciones2 es: %s\n, 20 libroCalificaciones2.obtenerNombreDelCurso() ); 21 } // fin de main 22 23 } // fin de la clase PruebaLibroCalificaciones

1 // LibroCalificaciones.java 2 // La clase LibroCalificaciones con un constructor para inicializar el nombre del curso. 3 4 public class LibroCalificaciones 5{ 6 private String nombreDelCurso; // nombre del curso para este LibroCalificaciones 7 8 // el constructor inicializa nombreDelCurso con el objeto String que se provee como argumento 9 public LibroCalificaciones( String nombre ) 10 { 11 nombreDelCurso = nombre; // inicializa nombreDelCurso 12 } // fin del constructor 13 14 // mtodo para establecer el nombre del curso 15 public void establecerNombreDelCurso( String nombre ) 16 { 17 nombreDelCurso = nombre; // almacena el nombre del curso 18 } // fin del mtodo establecerNombreDelCurso 19 20 // mtodo para obtener el nombre del curso 21 public String obtenerNombreDelCurso() 22 { 23 return nombreDelCurso; 24 } // fin del mtodo obtenerNombreDelCurso 25 26 // muestra un mensaje de bienvenida al usuario de LibroCalificaciones 27 public void mostrarMensaje() 28 { 29 // esta instruccin llama a obtenerNombreDelCurso para obtener el 30 // nombre del curso que este LibroCalificaciones representa 31 System.out.printf( Bienvenido al Libro de calificaciones para\n%s!\n, 32 obtenerNombreDelCurso() ); 33 } // fin del mtodo mostrarMensaje 34 35 } // fin de la clase LibroCalificaciones

Al igual que los mtodos, los constructores tambin pueden recibir argumentos. No obstante, una importante diferencia entre los constructores y los mtodos es que los constructores no pueden devolver valores, por lo cual no pueden especificar un tipo de valor de retorno (ni siquiera void). Por lo general, los constructores se declaran como public. Si una clase no incluye un constructor, las variables de instancia de esa clase se inicializan con sus valores predeterminados. Si un programador declara uno o ms constructores para una clase, el compilador de Java no crear un constructor predeterminado para esa clase.

También podría gustarte