Al llegar a este punto del capítulo ha encontrado una gran cantidad de conceptos nuevos. Para ayudar a reforzar esos conceptos los revisaremos en un contexto familiar pero diferente. Abra el proyecto curso-de-laboratorio que trabajamos en el Capítulo 1 y
luego examine la clase Estudiante en el editor (Código 2.9).
48 Capítulo 2 Comprender las definiciones de clases
/**
* La clase Estudiante representa un estudiante en un sistema
* administrativo de estudiantes. Contiene los detalles relevantes
Código 2.9
La clase
2.17 Revisar un ejemplo familiar 49
* en nuestro contexto.
*
* @author Michael Kolling y David Barnes * @version 2006.03.30
*/
public class Estudiante {
// nombre completo del estudiante private String nombre;
// ID (identificador)del estudiante private String id;
// la cantidad de créditos que tiene hasta ahora private int creditos;
/**
* Crea un nuevo estudiante con un determinado nombre y con
* un determinado número de identificación. */
public Estudiante(String nombreCompleto, String IdEstudiante) { nombre = nombreCompleto; id = IdEstudiante; creditos = 0; } /**
* Devuelve el nombre completo de este estudiante. */
public String getNombre() {
return nombre; }
/**
* Asigna un nuevo nombre a este estudiante. */
public void cambiarNombre(String nuevoNombre) {
nombre = nuevoNombre; }
/**
* Devuelve el Id de este estudiante. */
public String getIdEstudiante() {
return id; }
/**
* Suma algunos puntos a los créditos acumulados del estudiante. Código 2.9 (continuación) La clase Estudiante 02 CAPITULO 02 9/1/07 17:31 Página 49
La clase contiene tres campos: nombre, idy creditos. Cada uno de ellos es ini- cializado en un único constructor. Los valores iniciales de los primeros dos campos están determinados por los valores pasados al constructor mediante parámetros. Cada uno de estos campos tiene un método de acceso get pero solamente los
campos nombre y creditos tienen asociados métodos de modificación: esto sig- nifica que el valor de un campo id permanece fijo una vez que se ha construido el objeto.
El método getNombreDeUsuarioilustra una nueva característica que será fuertemente explorada:
50 Capítulo 2 Comprender las definiciones de clases
*/
public void sumarCreditos(int puntosAdicionales) {
creditos += puntosAdicionales; }
/**
* Devuelve el número de créditos que el estudiante ha acumulado.
*/
public int getCreditos() {
return creditos; }
/**
* Devuelve el nombre de usuario del estudiante. * El nombre de usuario es una combinación de los cuatro primeros
* caracteres del nombre del estudiante y los tres primeros
* caracteres del número del ID de estudiante. */
public String getNombreDeUsuario() {
return nombre.substring(0,4) + id.substring(0,3); }
/**
* Imprime el nombre y el número de ID del estudiante en la
* terminal de salida. */
public void imprimir() { System.out.println(nombre + " (" + id + ")"); } } Código 2.9 (continuación) La clase Estudiante
public String getNombreDeUsuario()
{
return nombre.substring(0,4) + id.substring(0,3); }
Tanto nombre como id son cadenas, y la clase String tiene un método de acceso, substring, con la siguiente signatura en Java:
/**
* Return a new string containing the characters from * beginIndex to (endIndex-1) from this string.
*/
public String substring(int beginIndex, int endIndex)
El valor cero del índice representa el primer carácter de una cadena, de modo que get- NombreDeUsuariotoma los primeros cuatro caracteres de la cadena nombre, los pri- meros tres caracteres de la cadena idy los concatena formando una nueva cadena que, en definitiva, es el resultado que devuelve el método. Por ejemplo, si nombre es la
cadena «Leonardo da Vinci» y el ides la cadena «468366», entonces este método
devuelve la cadena «Leon468» .
Ejercicio 2.69Dibuje una figura similar a la que muestra la Figura 2.3 para representar el estado inicial de un objeto Estudiante después de su cons- trucción, con los siguientes valores para sus parámetros actuales.
new Estudiante("Benjamín Jonson", "738321")
Ejercicio 2.70Si el nombre de un estudiante es «Henry Moore» y su id es «557214» ¿Qué debiera retornar el método getNombreDeUsuario?
Ejercicio 2.71Cree un estudiante de nombre “djb”y con id “859012”.¿Qué ocurre cuando se invoca getNombreDeUsuario sobre este objeto estudiante? ¿Por qué considera que es así?
Ejercicio 2.72La clase String define el método de acceso length con la
siguiente signatura
/**
* Return the number of characters in this string. */
public int length()
Es decir que el método de acceso length de la clase String de Java devuelve la cantidad de caracteres de una cadena.
Agregue una sentencia condicional al constructor de Estudiante para emitir un mensaje de error si el largo del parámetro nombre es menor de cuatro carac- teres o el largo del parámetro idEstudiante es menor de tres caracteres. Sin embargo, el constructor debe seguir usando esos parámetros para preparar los campos nombre e idEstudiante,aun cuando se imprima el mensaje de error. Pista:use sentencias if de la siguiente forma (sin su parte «else») para imprimir los mensajes de error.
if(se realiza la prueba sobre uno de los parámetros) {
2.17 Revisar un ejemplo familiar 51
Si la prueba dio resultado verdadero, imprimir un mensaje de error.
}
Si es necesario, vea el Apéndice C para encontrar más detalles sobre los dife- rentes tipos de sentencias if.
Ejercicio 2.73 Desafío. Modifique el método getNombreDeUsuario de la
clase Estudiante de modo que siempre genere un nombre de usuario, aun cuando alguno de sus campos nombre o id no tengan la longitud necesaria. Para las cadenas más cortas que las del largo requerido, use la cadena com- pleta.
2.18
Resumen
En este capítulo hemos sentado las bases para crear una definición de clase. Las clases contienen campos, constructores y métodos que definen el estado y el comportamiento de los objetos. Dentro de los constructores y de los métodos, una secuencia de sen- tencias define cómo un objeto cumple con las tareas diseñadas. Hemos abordado las sentencias de asignación y las sentencias condicionales y agregaremos otros tipos más de sentencias en capítulos posteriores.