Teoria de Programacion

download Teoria de Programacion

of 19

Transcript of Teoria de Programacion

  • 8/18/2019 Teoria de Programacion

    1/19

    3.1 Introducción

    En la sección 1.16 le presentamos la terminología básica y los conceptos acerca de laprogramación orientada aobjetos. El capítulo 2 comenzó a utilizar esos conceptos para crearaplicaciones simples que mostraran mensajesal usuario, que obtuvieran información del usuario,realizaran cálculos y tomaran decisiones. Una característicacomún de todas las aplicaciones del

    capítulo 2 fue que todas las instrucciones que realizaban tareas se encontrabanen el método main.Por lo general, las aplicaciones que usted desarrollará en este libro consistirán de dos o másclases,cada una de las cuales contendrá dos o más métodos. Si usted se integra a un equipo de desarrolloen laindustria, podría trabajar en aplicaciones que contengan cientos, o incluso hasta miles declases. En este capítulopresentaremos un marco de trabajo simple para organizar las aplicacionesorientadas a objetos en Java.Primero explicaremos el concepto de las clases mediante el uso de unejemplo real. Después presentaremoscinco aplicaciones completas para demostrarle cómo crear yutilizar sus propias clases. Los primeros cuatro ejemplosempiezan nuestro ejemplo práctico acercade cómo desarrollar una clase tipo libro de calificaciones, quelos instructores pueden utilizar paramantener las calificaciones de las pruebas de sus estudiantes. Durante lossiguientes capítulos

    ampliaremos este ejemplo práctico y culminaremos con la versión que se presenta en el capítulo7,Arreglos. El último ejemplo en este capítulo introduce los números de punto flotante (es decir,númerosque contienen puntos decimales, como 0.0345, –7.23 y 100.7) en el contexto de una clasetipo cuenta bancaria,la cual mantiene el saldo de un cliente.

    3.2 Clases, objetos, métodos y variables de instancia

    Comenzaremos con una analogía simple, para ayudarle a comprender el concepto de las clases ysu contenido.Suponga que desea conducir un automóvil y, para hacer que aumente su velocidad,debe presionar el pedal del acelerador.¿Qué debe ocurrir antes de que pueda hacer esto? Bueno,antes de poder conducir un automóvil, alguientiene que diseñarlo. Por lo general, un automóvilempieza en forma de dibujos de ingeniería, similares a los planosde construcción que se utilizanpara diseñar una casa. Estos dibujos de ingeniería incluyen el diseño del pedaldel acelerador, paraque el automóvil aumente su velocidad. El pedal “oculta” los complejos mecanismos queseencargan de que el automóvil aumente su velocidad, de igual forma que el pedal del freno“oculta” los mecanismosque disminuyen la velocidad del automóvil y por otro lado, el volante“oculta” los mecanismos que hacen que elautomóvil de vuelta. Esto permite que las personas conpoco o nada de conocimiento acerca de cómo funcionan losmotores puedan conducir unautomóvil con facilidad.

    Desafortunadamente, no puede conducir los dibujos de ingeniería de un auto. Antes de poder

    conducir unautomóvil, éste debe construirse a partir de los dibujos de ingeniería que lo describen.Un automóvil completo

    tendrá un pedal acelerador verdadero para hacer que aumente su velocidad, pero aún así no essuficiente; el automóvilno acelerará por su propia cuenta, así que el conductor debe oprimir elpedal del acelerador.

  • 8/18/2019 Teoria de Programacion

    2/19

    Ahora utilizaremos nuestro ejemplo del automóvil para introducir los conceptos clave deprogramación de

    esta sección. Para realizar una tarea en una aplicación se requiere un método. El método describelos mecanismosque se encargan de realizar sus tareas; y oculta al usuario las tareas complejas querealiza, de la misma forma que elpedal del acelerador de un automóvil oculta al conductor los

    complejos mecanismos para hacer que el automóvilvaya más rápido. En Java, empezamos porcrear una unidad de aplicación llamada clase para alojar a un método,así como los dibujos deingeniería de un automóvil alojan el diseño del pedal del acelerador. En una clase seproporcionanuno o más métodos, los cuales están diseñados para realizar las tareas de esa clase.Por ejemplo, unaclase que representa a una cuenta bancaria podría contener un método paradepositar dinero en una cuenta, otropara retirar dinero de una cuenta y un tercero para solicitar elsaldo actual de la cuenta.Así como no podemos conducir un dibujo de ingeniería de un automóvil,tampoco podemos “conducir” unaclase. De la misma forma que alguien tiene que construir unautomóvil a partir de sus dibujos de ingeniería parapoder conducirlo, también debemos construirun objeto de una clase para poder hacer que un programa realicelas tareas que la clase le describe

    cómo realizar. Ésta es una de las razones por las cuales Java se conoce como unlenguaje deprogramación orientado a objetos.Cuando usted conduce un automóvil, si oprime el pedal delacelerador se envía un mensaje al automóvil paraque realice una tarea-hacer que el automóvilvaya más rápido. De manera similar, se envían mensajes a un objeto;cada mensaje se conocecomo la llamada a un método , e indica a un método del objeto que realice su tarea.Hasta ahora,hemos utilizado la analogía del automóvil para introducir las clases, los objetos y losmétodos.Además de las capacidades con las que cuenta un automóvil, también tiene muchosatributos como su color, elnúmero de puertas, la cantidad de gasolina en su tanque, su velocidadactual y el total de kilómetros recorridos (esdecir, la lectura de su odómetro). Al igual que lascapacidades del automóvil, estos atributos se representan comoparte del diseño en sus diagramas

    de ingeniería. Cuando usted conduce un automóvil, estos atributos siempre estánasociados con él.Cada uno mantiene sus propios atributos. Por ejemplo, cada conductor sabe cuánta gasolinatieneen su propio tanque, pero no cuánta hay en los tanques de otros automóviles. De manerasimilar, un objeto tieneatributos que lleva consigo cuando se utiliza en un programa. Éstos seespecifi can como parte de la clase del objeto.Por ejemplo, un objeto tipo cuenta bancaria tieneun atributo llamado saldo, el cual representa la cantidad de dineroen la cuenta. Cada objeto tipocuenta bancaria conoce el saldo en la cuenta que representa, pero no los saldos delas otrascuentas en el banco. Los atributos se especifi can mediante las variables de instancia de la clase.Elresto de este capítulo presenta ejemplos que demuestran los conceptos que presentamos aquí,dentro delcontexto de la analogía del automóvil. Los primeros cuatro ejemplos se encargan de

    construir en forma incrementaluna clase llamada LibroCalificaciones para demostrar estosconceptos:

    1. El primer ejemplo presenta una clase llamada LibroCalificaciones, con un método quesimplementemuestra un mensaje de bienvenida cuando se le llama. Después le mostraremoscómo crear un objeto de

    esa clase y cómo llamarlo, para que muestre el mensaje de bienvenida.

  • 8/18/2019 Teoria de Programacion

    3/19

    2. El segundo ejemplo modifica el primero, al permitir que el método reciba el nombre de un cursocomoargumento, y al mostrar ese nombre como parte del mensaje de bienvenida.

    3. El tercer ejemplo muestra cómo almacenar el nombre del curso en un objeto tipoLibroCalificaciones.Para esta versión de la clase, también le mostraremos cómo utilizar losmétodos para establecer elnombre del curso y obtener este nombre.

    4. El cuarto ejemplo demuestra cómo pueden inicializarse los datos en un objeto tipoLibroCalificaciones,a la hora de crear el objeto; el constructor de la clase se encarga de realizar elproceso de inicialización.El último ejemplo en el capítulo presenta una clase llamada Cuenta, lacual refuerza los conceptos presentadosen los primeros cuatro ejemplos, e introduce los númerosde punto flotante. Para este fi n, presentamos una clasellamada Cuenta, la cual representa unacuenta bancaria y mantiene su saldo como un número de punto flotante.La clase contiene dosmétodos —uno para acreditar un depósito a la cuenta, con lo cual se incrementa el saldo,y otropara obtener el saldo. El constructor de la clase permite inicializar el saldo de cada objeto tipoCuenta,a la hora de crear el objeto. Crearemos dos objetos tipo Cuenta y haremos depósitos encada uno de ellos, paramostrar que cada objeto mantiene su propio saldo. El ejemplo tambiéndemuestra cómo recibir e imprimir enpantalla números de punto flotante.

    3.3 Declaración de una clase con un método e instanciamientode un objeto de una clase

    Comenzaremos con un ejemplo que consiste en las clases LibroCalificaciones (fi gura 3.1) yPruebaLibroCalificaciones(fi gura 3.2). La clase LibroCalificaciones (declarada en el archivoLibroCalificaciones.java)

    3.3 Declaración de una clase con un método e instanciamiento de un objeto de una clase 77 seutilizará para mostrar un mensaje en la pantalla (fi gura 3.2), para dar la bienvenida al instructor a

    la aplicacióndel libro de calificaciones. La clase PruebaLibroCalificaciones (declarada en el archivoPruebaLibroCalificaciones.java) es una clase de aplicación en la que el método main utilizará a laclase LibroCalificaciones.Cada declaración de clase que comienza con la palabra clave public debealmacenarse en un archivo que tengael mismo nombre que la clase, y que termine con laextensión de archivo .java. Por lo tanto, las clases Libro-Calificaciones y PruebaLibroCalificacionesdeben declararse en archivos separados, ya que cada clase sedeclara como public.

    Error común de programación 3.1

    Declarar más de una clase public en el mismo archivo es un error de compilación.

    La clase LibroCalificaciones

    La declaración de la clase LibroCalificaciones (fi gura 3.1) contiene un método llamadomostrarMensaje(líneas 7-10), el cual muestra un mensaje en la pantalla. La línea 9 de la claserealiza el trabajo de mostrar el mensaje.

    Recuerde que una clase es como un plano de construcción; necesitamos crear un objeto de estaclase y llamara su método para hacer que se ejecute la línea 9 y que muestre su mensaje.La

  • 8/18/2019 Teoria de Programacion

    4/19

    declaración de la clase empieza en la línea 4. La palabra clave public es un modificador deacceso .Por ahora, simplemente declararemos cada clase como public. Toda declaración de clasecontiene la palabraclave class, seguida inmediatamente por el nombre de la clase. El cuerpo detoda clase se encierra entre una llaveizquierda y una derecha ({ y }), como en las líneas 5 y 12 de laclase LibroCalificaciones.En el capítulo 2, cada clase que declaramos tenía un método llamadomain. La clase LibroCalificacionestambién tiene un método: mostrarMensaje (líneas 7-10).Recuerde que main es un método especial, que siemprees llamado, automáticamente, por laMáquina Virtual de Java (JVM) a la hora de ejecutar una aplicación.La mayoría de los métodos nose llaman en forma automática. Como veremos en breve, es necesario llamar almétodomostrarMensaje para decirle que haga su trabajo.La declaración del método comienza con lapalabra clave public para indicar que el método está “disponibleal público”; es decir, los métodosde otras clases pueden llamarlo desde el exterior del cuerpo de la declaraciónde la clase. Lapalabra clave void indica que este método realizará una tarea pero no devolverá (es decir,regresará)información al método que hizo la llamada cuando complete su tarea. Ya hemosutilizado métodos quedevuelven información; por ejemplo, en el capítulo 2 utilizó el métodonextInt de Scanner para recibir unentero escrito por el usuario desde el teclado. Cuando nextIntrecibe un valor de entrada, devuelve ese valor parautilizarlo en el programa.El nombre delmétodo, mostrarMensaje, va después del tipo de valor de retorno. Por convención, losnombres delos métodos comienzan con una letra minúscula, y el resto de las palabras en el nombreempiezancon letra mayúscula. Los paréntesis después del nombre del método indican que éste esun método. Un conjuntovacío de paréntesis, como se muestra en la línea 7, indica que estemétodo no requiere información adicional pararealizar su tarea. La línea 7 se conoce comúnmentecomo el encabezado del método . El cuerpo de cada métodose delimita mediante una llaveizquierda y una llave derecha ({ y }), como en las líneas 8 y 10.

    El cuerpo de un método contiene una o varias instrucciones que realizan su trabajo. En este caso,el métodocontiene una instrucción (línea 9) que muestra el mensaje "Bienvenido al Libro decalificaciones!",seguido de una nueva línea en la ventana de comandos. Una vez que se ejecuta

  • 8/18/2019 Teoria de Programacion

    5/19

    esta instrucción, el método hacompletado su trabajo.A continuación, nos gustaría utilizar la claseLibroCalificaciones en una aplicación. Como aprendió en elcapítulo 2, el método main empieza laejecución de todas las aplicaciones. Una clase que contiene el método maines una aplicación deJava. Dicha clase es especial, ya que la JVM puede utilizar a main como un punto de entradaparaempezar la ejecución. La clase LibroCalificaciones no es una aplicación, ya que no contiene a main.Porlo tanto, si trata de ejecutar LibroCalificaciones escribiendo java LibroCalificaciones en laventana decomandos, recibirá un mensaje de error como este:Exception in thread "main" java.lang.NoSuchMethodError: mainEsto no fue un problema en el capítulo 2, ya que cada claseque declaramos tenía un método main. Para corregireste problema con la claseLibroCalificaciones, debemos declarar una clase separada que contenga un métodomain, o colocarun método main en la clase LibroCalificaciones. Para ayudarlo a prepararse para los programasmásextensos que encontrará más adelante en este libro y en la industria, utilizamos una claseseparada (Prueba-LibroCalificaciones en este ejemplo) que contiene el método main para probarcada nueva clase que vayamosa crear en este capítulo.

    La clase PruebaLibroCalificaciones

    La declaración de la clase PruebaLibroCalificaciones (fi gura 3.2) contiene el método main quecontrolará laejecución de nuestra aplicación. Cualquier clase que contiene el método main,declarado como se muestra enla línea 7, puede utilizarse para ejecutar una aplicación. Ladeclaración de la clase PruebaLibroCalificacionesempieza en la línea 4 y termina en la línea 16. Laclase sólo contiene un método main, algo común en muchasclases que empiezan la ejecución deuna aplicación.Las líneas 7 a la 14 declaran el método main. En el capítulo 2 vimos que elencabezado main debe aparecercomo se muestra en la línea 7; en caso contrario, no se ejecutarála aplicación. Una parte clave para permitir quela JVM localice y llame al método main paraempezar la ejecución de la aplicación es la palabra clave static(línea 7), la cual indica que main es

    un método static. Un método static es especial, ya que puede llamarsesin tener que crear primeroun objeto de la clase en la cual se declara ese método. En el capítulo 6, Métodos: unanálisis másdetallado, explicaremos a detalle los métodos static.

  • 8/18/2019 Teoria de Programacion

    6/19

    Figura 3.2 | Cómo crear un objeto de la clase LibroCalificaciones y llamar a su métodomostrarMensaje. En esta aplicación nos gustaría llamar al método mostrarMensaje de la claseLibroCalificaciones paramostrar el mensaje de bienvenida en la ventana de comandos. Por logeneral, no podemos llamar a un métodoque pertenece a otra clase, sino hasta crear un objeto deesa clase, como se muestra en la línea 10. Empezaremospor declarar la variablemiLibroCalificaciones. Observe que el tipo de la variable es LibroCalificaciones; laclase quedeclaramos en la fi gura 3.1. Cada nueva clase que creamos se convierte en un nuevo tipo, quepuedeusarse para declarar variables y crear objetos. Los programadores pueden declarar nuevostipos de clases según lonecesiten; ésta es una razón por la cual Java se conoce como un lenguaje

    extensible .La variable miLibroCalificaciones se inicializa con el resultado de laexpresión decreación de instanciade clase new LibroCalificaciones(). La palabra clave new crea un nuevoobjeto de la clase especifi cada a laderecha de la palabra clave (es decir, LibroCalificaciones). Losparéntesis a la derecha de LibroCalificacionesson obligatorios. Como veremos en la sección 3.7,esos paréntesis en combinación con el nombre de una claserepresentan una llamada a unconstructor , que es similar a un método, pero se utiliza sólo cuando se crea unobjeto, parainicializar los datos de éste. En esa sección verá que los datos pueden colocarse entre paréntesisparaespecifi car los valores iniciales para los datos del objeto. Por ahora, sólo dejaremos losparéntesis vacíos.Así como podemos usar el objeto System.out para llamar a los métodos print,printf y println, tambiénpodemos usar el objeto miLibroCalificaciones para llamar al método

    mostrarMensaje. La línea 13 llamaal método mostrarMensaje (líneas 7-10 de la fi gura 3.1),usando miLibroCalificaciones seguida de unseparadorpunto (.), el nombre del métodomostrarMensaje y un conjunto vacío de paréntesis. Esta llamada haceque el métodomostrarMensaje realice su tarea. La llamada a este método difi ere de las del capítulo 2 en lasquese mostraba la información en una ventana de comandos; cada una de estas llamadas almétodo proporcionabanargumentos que especificaban los datos a mostrar. Al inicio de la línea 13,“miLibroCalificaciones”. Indica quemain debe utilizar el objeto miLibroCalificaciones que se creó

  • 8/18/2019 Teoria de Programacion

    7/19

    en la línea 10. La línea 7 de la fi gura 3.1 indicaque el método mostrarMensaje tiene unalistadeparámetros vacía; es decir, mostrarMensaje no requiere informaciónadicional para realizarsu tarea. Por esta razón, la llamada al método (línea 13 de la fi gura 3.2) especificaun conjuntovacío de paréntesis después del nombre del método, para indicar que no se van a pasarargumentosal método mostrarMensaje. Cuando el método mostrarMensaje completa su tarea, elmétodo main continúasu ejecución en la línea 14. Éste es el fi nal del método main, por lo que elprograma termina. Compilación de una aplicación con varias clases Debe compilar las clases de lasfi guras 3.1 y 3.2 antes de poder ejecutar la aplicación. Primero, cambie al directorioque contienelos archivos de código fuente de la aplicación. Después, escriba el comandojavacLibroCalificaciones.java PruebaLibroCalificaciones.javapara compilar ambas clases a la vez. Si eldirectorio que contiene la aplicación sólo incluye los archivos de estaaplicación, puede compilartodas las clases que haya en el directorio con el comandojavac *.javaEl asterisco (*) en *.javaindica que deben compilarse todos los archivos en el directorio actual que terminencon laextensión de nombre de archivo “.java”.

    Diagrama de clases de UML para la clase LibroCalificaciones

    La fi gura 3.3 presenta un diagrama de clases de UML para la clase LibroCalificaciones de la fi gura3.1. Enla sección 1.16 vimos que UML es un lenguaje gráfico, utilizado por los programadores pararepresentar sistemasorientados a objetos en forma estandarizada. En UML, cada clase se modelaen un diagrama de clases en formade un rectángulo con tres componentes. El compartimientosuperior contiene el nombre de la clase, centradoen forma horizontal y en negrita. Elcompartimiento de en medio contiene los atributos de la clase, que en Javacorresponden a lasvariables de instancia. En la fi gura 3.3, el compartimiento de en medio está vacío, ya que laversiónde la clase LibroCalificaciones en la fi gura 3.1 no tiene atributos. El compartimiento inferiorcontienelas operaciones de la clase, que en Java corresponden a los métodos. Para modelar las

    operaciones, UML lista elnombre de la operación precedido por un modificador de acceso yseguido de un conjunto de paréntesis. La claseLibroCalificaciones tiene un solo método llamadomostrarMensaje, por lo que el compartimiento inferior dela fi gura 3.3 lista una operación coneste nombre. El método mostrarMensaje no requiere información adicionalpara realizar sustareas, por lo que los paréntesis que van después del nombre del método en el diagrama de

    clases están vacíos, de igual forma que como aparecieron en la declaración del método, en la línea7 de la fi gura 3.1. El signo más ( +) que va antes del nombre de la operación indica quemostrarMensaje es una operación public en UML (es decir, un método public en Java). Utilizaremos losdiagramas de clases de UML a menudo para sintetizar los atributos y las operaciones de unaclase.

  • 8/18/2019 Teoria de Programacion

    8/19

    3.4 Declaración de un méto do con u n parámetroEn nuestra analogía del automóvil de la sección 3.2, hablamos sobre el hecho de que al oprimir elpedal del aceleradorse envía un mensaje al automóvil para que realice una tarea: hacer que vayamás rápido. Pero ¿qué tan rápidodebería acelerar el automóvil? Como sabe, entre más oprima elpedal, mayor será la aceleración del automóvil.Por lo tanto, el mensaje para el automóvil enrealidad incluye tanto la tarea a realizar como información adicionalque ayuda al automóvil aejecutar su tarea. A la información adicional se le conoce como parámetro ; el valor delparámetro ayuda al automóvil a determinar qué tan rápido debe acelerar. De manera similar, unmétodo puederequerir uno o más parámetros que representan la información adicional quenecesita para realizar su tarea. Lallamada a un método proporciona valores (llamados argumentos)para cada uno de los parámetros de ese método. Por ejemplo, el método System.out.printlnrequiere un argumento que especifica los datos a mostrar enuna ventana de comandos. De manera similar, para realizar un depósito en una cuenta bancaria,un métodollamado deposito especifica un parámetro que representa el monto a depositar. Cuandose hace una llamadaal método deposito, se asigna al parámetro del método un valor comoargumento, que representa el monto adepositar. Entonces, el método realiza un depósito por esemonto.Nuestro siguiente ejemplo declara la clase LibroCalificaciones (fi gura 3.4), con un métodomostrar-Mensaje que muestra el nombre del curso como parte del mensaje de bienvenida (en la figura 3.5 podrá ver laejecución de ejemplo). El nuevo método mostrarMensaje requiere unparámetro que representa el nombre delcurso a imprimir en pantalla.

    Antes de hablar sobre las nuevas características de la clase LibroCalificaciones, veamos cómo se

    utiliza lanueva clase desde el método main de la clase PruebaLibroCalificaciones (fi gura 3.5). Lalínea 12 crea un objetoScanner llamado entrada, para recibir el nombre del curso escrito por elusuario. La línea 15 crea un objetode la clase LibroCalificaciones y lo asigna a la variablemiLibroCalificaciones. La línea 18 pide al usuarioque escriba el nombre de un curso. La línea 19lee el nombre que introduce el usuario y lo asigna a la variablenombreDelCurso, mediante el usodel método nextLine de Scanner para realizar la operación de entrada. El

  • 8/18/2019 Teoria de Programacion

    9/19

    usuario escribe el nombre del curso y oprime Intro para enviarlo al programa. Observe que aloprimir Intro seinserta un carácter de nueva línea al fi nal de los caracteres escritos por el usuario.

  • 8/18/2019 Teoria de Programacion

    10/19

    El método nextLine lee loscaracteres que escribió el usuario hasta encontrar el carácter de nuevalínea, y después devuelve un objeto Stringque contiene los caracteres hasta, pero sin incluir, lanueva línea. El carácter de nueva línea se descarta. La claseScanner también cuenta con un método similar (next) para leer palabras individuales. Cuando elusuario oprime Intro después de escribir la entrada, el método next lee caracteres hasta encontrarun carácter de espacio en blanco(espacio, tabulador o nueva línea), y después devuelve un objetoString que contiene los caracteres hasta, perosin incluir, el carácter de espacio en blanco (que sedescarta). No se pierde toda la información que va despuésdel primer carácter de espacio enblanco; estará disponible para que la lean otras instrucciones que llamen a losmétodos de Scanner, más adelante en el programa.La línea 24 llama al método mostrarMensajede miLibroCalificaciones. La variable nombreDelCursoentre paréntesis es el argumento que sepasa al método mostrarMensaje, para que éste pueda realizar su tarea. Elvalor de la variablenombreDelCurso en main se convierte en el valor del parámetro nombreDelCurso delmétodomostrarMensaje, en la línea 7 de la fi gura 3.4. Al ejecutar esta aplicación, observe que elmétodo mostrarMensajeimprime en pantalla el nombre que usted escribió como parte del mensajede bienvenida (fi gura 3.5)Observación de i ngeniería de softw are 3.1Por lo general, los objetos se crean mediante el uso de new. Una excepción es la literal de cadenaque está encerradaentre comillas, como “hola”. Las literales de cadena son referencias a objetosString que Java crea de maneraimplícita.Más sobre los argumentos y lo s parámetro s

    Al declarar un método, debe especifi car si el método requiere datos para realizar su tarea. Paraello es necesariocolocar información adicional en la list a de parámetros del método, la cual seencuentra en los paréntesis que vandespués del nombre del método. La lista de parámetros puedecontener cualquier número de parámetros, inclusoninguno. Los paréntesis vacíos después delnombre del método (como en la fi gura 3.1, línea 7) indican que unmétodo no requiere parámetros.En la fi gura 3.4, la lista de parámetros de mostrarMensaje (línea 7) declara queel método requiere un parámetro. Cada parámetro debe especifi car un tipo y un identificador. Eneste caso, el tipoString y el identificadornombreDelCurso indican que el método mostrarMensajerequiere un objeto Stringpara realizar su tarea. En el instante en que se llama al método, el valordel argumento en la llamada se asignaal parámetro correspondiente (en este caso,nombreDelCurso) en el encabezado del método. Después, el cuerpodel método utiliza el parámetronombreDelCurso para acceder al valor. Las líneas 9 y 10 de la fi gura 3.4 muestranel valor del parámetro nombreDelCurso, mediante el uso del especificador de formato %s en la

    cadena de formatode printf. Observe que el nombre de la variable de parámetro (fi gura 3.4, línea7) puede ser igual o distinto alnombre de la variable de argumento (fi gura 3.5, línea 24).Un método puede especifi car múltiples parámetros; sólo hay que separar un parámetro de otromediante unacoma (en el capítulo 6 veremos un ejemplo de esto). El número de argumentos en lallamada a un método debecoincidir con el número de parámetros en la lista de parámetros de ladeclaración del método que se llamó. Además,los tipos de los argumentos en la llamada al método deben ser “consistentes con” los tipos de losparámetroscorrespondientes en la declaración del método (como veremos en capítulos posteriores,no siempre se requiereque el tipo de un argumento y el tipo de su correspondiente parámetro seanidénticos). En nuestro ejemplo, lallamada al método pasa un argumento de tipo String(nombreDelCurso se declara como String en la línea 19de la fi gura 3.5) y la declaración del método especifica un parámetro de tipo String (línea 7 en la figura 3.4).Por lo tanto, en este ejemplo, el tipo del argumento en la llamada al método coincideexactamente con el tipo delparámetro en el encabezado del método.Error común de programación 3.2Si el número de argumentos en la llamada a un método no coincide con el número de parámetrosen la declaracióndel método, se produce un error de compilación.Error común de programación 3.3Si los tipos de los argumentos en la llamada a un método no son consistentes con los tipos de losparámetros correspondientesen la declaración del método, se produce un error de compilación.Diagrama de clases de UML actualizado para la clase Libr oCalificacionesEl diagrama de clases de UML de la fi gura 3.6 modela la clase LibroCalificaciones de la fi gura 3.4.

    Al igualque la Figura 3.1, esta clase LibroCalificaciones contiene la operación public llamada

  • 8/18/2019 Teoria de Programacion

    11/19

    mostrarMensaje. Sinembargo, esta versión de mostrarMensaje tiene un parámetro. La forma enque UML modela un parámetro esun poco distinta a la de Java, ya que lista el nombre delparámetro, seguido de dos puntos y del tipo del parámetroentre paréntesis, después del nombre dela operación. UML tiene sus propios tipos de datos, que son similares alos de Java (pero comoveremos, no todos los tipos de datos de UML tienen los mismos nombres que lostiposcorrespondientes en Java). El tipo String de UML corresponde al tipo String de Java. Elmétodo mostrarMensajede LibroCalificaciones (fi gura 3.4) tiene un parámetro String llamadonombreDelCurso, por lo que enla fi gura 3.6 se lista a nombreDelCurso :String entre los paréntesisque van después de mostrarMensaje.

    Observaciones acerca del uso de las declaraciones impo rtObserve la declaración import en la fi gura 3.5 (línea 4). Esto indica al compilador que el programautiliza la claseScanner. ¿Por qué necesitamos importar la clase Scanner, pero no las clasesSystem, String o LibroCalificaciones?La mayoría de las clases que utilizará en los programas de

    Java deben importarse. Las clases System yString están en el paquete java.lang, que se importade manera implícita en todo programa de Java, por lo quetodos los programas pueden usar lasclases del paquete java.lang sin tener que importarlas de manera explícita.Hay una relación especial entre las clases que se compilan en el mismo directorio en el disco,como las clasesLibroCalificaciones y PruebaLibroCalificaciones. De manera predeterminada, seconsidera que dichasclases se encuentran en el mismo paquete; a éste se le conoce como elpaquete predeterminado . Las clases enel mismo paquete se importan implícitamente en losarchivos de código fuente de las otras clases en el mismopaquete. Por ende, no se requiere unadeclaración import cuando la clase en un paquete utiliza a otra en el mismopaquete; como cuando PruebaLibroCalificaciones utiliza a la clase LibroCalificaciones.La declaración import en la línea 4 no es obligatoria si siempre hacemos referencia a la claseScanner comojava.util.Scanner, que incluye el nombre completo del paquete y de la clase. Esto seconoce como el nombr ede clase compl etamente califi cado . Por ejemplo, la línea 12 podríaescribirse comojava.util.Scanner entrada = new java.util.Scanner( System.in );

    Observación de i ngeniería de softw are 3.2El compilador de Java no requiere declaraciones import en un archivo de código fuente de Java, sise especifica elnombre de clase completamente califi cado cada vez que se utilice el nombre deuna clase en el código fuente. Pero lamayoría de los programadores de Java consideran que eluso de nombres completamente califi cados es incómodo, porlo cual prefi eren usar declaracionesimport.

    3.5 Variables de inst ancia, métodos establecer y m étodos ob tenerEn el capítulo 2 declaramos todas las variables de una aplicación en el método main. Las variablesque se declaranen el cuerpo de un método específico se conocen como variables locales , y sólose pueden utilizar en ese método.Cuando termina ese método, se pierden los valores de susvariables locales. En la sección 3.2 vimos que un objetotiene atributos que lleva consigo cuando se

    utiliza en un programa. Dichos atributos existen antes de que unobjeto llame a un método, ydespués de que el método completa su ejecución.Por lo general, una clase consiste en uno o másmétodos que manipulan los atributos pertenecientes a unobjeto específico de la clase. Losatributos se representan como variables en la declaración de la clase. Dichasvariables se llamancampos , y se declaran dentro de la declaración de una clase, pero fuera de los cuerpos de lasdeclaraciones de los métodos de la clase. Cuando cada objeto de una clase mantiene su propiacopia de un atributo,el campo que representa a ese atributo se conoce también como variable deinstancia; cada objeto (instancia)de la clase tiene una instancia separada de la variable enmemoria. El ejemplo en esta sección demuestra unaclase LibroCalificaciones, que contiene una

  • 8/18/2019 Teoria de Programacion

    12/19

    variable de instancia llamada nombreDelCurso para representar elnombre del curso de un objetoLibroCalificacionesespecífico.La clase LibroCalificaciones con una variable de instancia, un método establecery unmétodo obtener En nuestra siguiente aplicación (fi guras 3.7 y 3.8), la clase LibroCalificaciones (fi gura 3.7)mantiene el nombredel curso como una variable de instancia, para que pueda usarse o modificarseen cualquier momento, durantela ejecución de una aplicación. Esta clase contiene tres métodos:establecerNombreDelCurso, obtenerNombreDelCursoy mostrarMensaje. El métodoestablecerNombreDelCurso almacena el nombre de un curso enun LibroCalificaciones. El métodoobtenerNombreDelCurso obtiene el nombre del curso de un LibroCalificaciones.El método mostrarMensaje, que en este caso no especifica parámetros, sigue mostrando unmensajede bienvenida que incluye el nombre del curso; como veremos más adelante, el métodoahora obtiene el nombredel curso mediante una llamada a otro método en la misma clase:obtenerNombreDelCurso.Por lo general, un instructor enseña más de un curso, cada uno con supropio nombre. La línea 7 declara quenombreDelCurso es una variable de tipo String. Como lavariable se declara en el cuerpo de la clase, pero fuerade los cuerpos de los métodos de la misma(líneas 10 a la 13, 16 a la 19 y 22 a la 28), la línea 7 es una declaraciónpara una variable deinstancia. Cada instancia (es decir, objeto) de la clase LibroCalificaciones contiene una

    copia de cada variable de instancia. Por ejemplo, si hay dos objetos LibroCalificaciones, cadaobjeto tiene supropia copia de nombreDelCurso (una por cada objeto). Un benefi cio de hacer denombreDelCurso una variablede instancia es que todos los métodos de la clase (en este caso,LibroCalificaciones) pueden manipular cualquiervariable de instancia que aparezca en la clase (eneste caso, nombreDelCurso).

  • 8/18/2019 Teoria de Programacion

    13/19

    Los modificadores de acceso public y privateLa mayoría de las declaraciones de variables de instancia van precedidas por la palabra claveprivate (como en lalínea 7). Al igual que public, la palabra clave private es un modificador deacceso. Las variables o los métodosdeclarados con el modificador de acceso private sonaccesibles sólo para los métodos de la clase en la quese declaran. Así, la variablenombreDelCurso sólo puede utilizarse en los métodosestablecerNombreDelCurso,obtenerNombreDelCurso y mostrarMensaje de (cada objeto de) laclase LibroCalificaciones.Observación de i ngeniería de softw are 3.3Es necesario colocar un modificador de acceso antes de cada declaración de un campo y de unmétodo. Como regla empírica,las variables de instancia deben declararse como private y losmétodos, como public. (Más adelante veremosque es apropiado declarar ciertos métodos comoprivate, si sólo van a estar accesibles por otros métodos de la clase).Buena práctica de prog ramación 3.1Preferimos listar los campos de una clase primero, para que, a medida que usted lea el código,pueda ver los nombresy tipos de las variables antes de ver su uso en los métodos de la clase. Esposible listar los campos de la clase encualquier parte de la misma, fuera de las declaraciones desus métodos, pero si se esparcen por todo el código, éste serámás difícil de leer.

    Buena práctica de progr amación 3.2Coloque una línea en blanco entre las declaraciones de los métodos, para separarlos y mejorar la

    legibilidad delprograma.El proceso de declarar variables de instancia con el modificador de accesoprivate se conoce como ocultamientode datos . Cuando un programa crea (instancia) un objeto dela clase LibroCalificaciones, la variablenombreDelCurso se encapsula (oculta) en el objeto, y sólo está accesible para los métodos de laclase de ese objeto.En la clase LibroCalificaciones, los métodos establecerNombreDelCurso yobtenerNombreDelCurso manipulana la variable de instancia nombreDelCurso.El método establecerNombreDelCurso (líneas 10 a la 13) no devuelve datos cuando completa sutarea, porlo que su tipo de valor de retorno es void. El método recibe un parámetro (nombre), elcual representa el nombredel curso que se pasará al método como un argumento. La línea 12asigna nombre a la variable de instancianombreDelCurso.El método obtenerNombreDelCurso(líneas 16 a la 19) devuelve un nombreDelCurso de un objeto Libro-Calificaciones específico. Elmétodo tiene una lista de parámetros vacía, por lo que no requiere informaciónadicional pararealizar su tarea. El método especifica que devuelve un objeto String; a éste se le conoce como el

    tipo de valor de retorno del método. Cuando se hace una llamada a un método que especifica untipo de valorde retorno, y éste completa su tarea, devuelve un resultado al método que lo llamó.Por ejemplo, cuando ustedva a un cajero automático (ATM) y solicita el saldo de su cuenta, esperaque el ATM le devuelva un valor querepresenta su saldo. De manera similar, cuando unainstrucción llama al método obtenerNombreDelCurso en unobjetoLibroCalificaciones, la instrucción espera recibir el nombre del curso de LibroCalificaciones(en estecaso, un objeto String, como se especifica en el tipo de valor de retorno de la declaracióndel método). Si tieneun método cuadrado que devuelve el cuadrado de su argumento, es deesperarse que la instrucciónint resultado = cuadrado( 2 );devuelva 4 del método cuadrado y asigne4 a la variable resultado. Si tiene un método maximo que devuelve elmayor de tres argumentos enteros, es de esperarse que la siguiente instrucciónintmayor = maximo(27, 114, 51 );devuelva 114 del método maximo y asigne 114 a la variable mayor.Observe que cadauna de las instrucciones en las líneas 12 y 18 utilizannombreDelCurso, aun cuando estavariable nose declaró en ninguno de los métodos. Podemos utilizar nombreDelCurso en los métodos de laclaseLibroCalificaciones, ya que nombreDelCurso es un campo de la clase. Observe además queel orden en el quese declaran los métodos en una clase no determina cuándo se van a llamar entiempo de ejecución. Por lo tanto,el método obtenerNombreDelCurso podría declararse antes delmétodo establecerNombreDelCurso.El método mostrarMensaje (líneas 22 a la 28) no devuelve datos cuando completa su tarea, por loque sutipo de valor de retorno es void. El método no recibe parámetros, por lo que la lista deparámetros está vacía. Laslíneas 26 y 27 imprimen un mensaje de bienvenida, que incluye el valorde la variable de instancia nombreDel-Curso. Una vez más, necesitamos crear un objeto de la

  • 8/18/2019 Teoria de Programacion

    14/19

    clase LibroCalificaciones y llamar a sus métodos parapoder mostrar en pantalla el mensaje debienvenida. La clase PruebaLibroCalif icaciones que demuestr a a la clase LibroCalificaciones La clase PruebaLibroCalificaciones (fi gura 3.8) crea un objeto de la clase LibroCalificaciones ydemuestrael uso de sus métodos. La línea 11 crea un objeto Scanner, que se utilizará para obtenerel nombre de un cursodel usuario. La línea 14 crea un objeto LibroCalificaciones y lo asigna a lavariable local miLibroCalificaciones,de tipo LibroCalificaciones. Las líneas 17-18 muestran elnombre inicial del curso mediante una llamadaal método obtenerNombreDelCurso del objeto. Observe que la primera línea de la salida muestra elnombre“null”. A diferencia de las variables locales, que no se inicializan de manera automática,cada campo tiene un valor inicial predeterminado : un valor que Java proporciona cuando elprogramador no especifica el valor inicialdel campo. Por ende, no se requiere que los campos seinicialicen explícitamente antes de usarlos en un programa,a menos que deban inicializarse convalores distintos de los predeterminados. El valor predeterminado para uncampo de tipo String (como nombreDelCurso en este ejemplo) es null, de lo cual hablaremos conmás detalleen la sección 3.6.La línea 21 pide al usuario que escriba el nombre para el curso. Lavariable String local elNombre (declaradaen la línea 22) se inicializa con el nombre del curso queescribió el usuario, el cual se devuelve mediantela llamada al método nextLine del objeto Scannerllamado entrada. La línea 23 llama al método establecerNombreDelCursodel objetomiLibroCalificaciones y provee elNombre como argumento para el método.Cuando se hace la llamada al método, el valor del argumento se asigna al parámetro nombre(línea10, fi gura 3.7)del método establecerNombreDelCurso (líneas 10 a la 13, fi gura 3.7).

    Después, el valor del parámetro se asignaa la variable de instancia nombreDelCurso (línea 12, figura 3.7). La línea 24 (fi gura 3.8) salta una línea en lasalida, y después la línea 27 llama al métodomostrarMensaje del objeto miLibroCalificaciones para mostraren pantalla el mensaje debienvenida, que contiene el nombre del curso.

    Los método s establecer y obtenerLos campos private de una clase pueden manipularse sólo mediante los métodos de esa clase. Porlo tanto, un cliente de un objeto (es decir, cualquier clase que llame a los métodos del objeto)llama a los métodos public dela clase para manipular los campos private de un objeto de esa clase.Esto explica por qué las instrucciones enel método main (fi gura 3.8) llaman a los métodosestablecerNombreDelCurso, obtenerNombreDelCurso ymostrarMensaje en un objetoLibroCalificaciones. A menudo, las clases proporcionan métodos public parapermitir a los clientesde la clase establecer (es decir, asignar valores a) u obtener (es decir, obtener los valores

    de) variables de instancia private. Los nombres de estos métodos no necesitan empezar conestablecer u obtener,pero esta convención de nomenclatura es muy recomendada en Java, y esrequerida para ciertos componentesde software especiales de Java, conocidos como JavaBeans,que pueden simplifi car la programación en muchosentornos de desarrollo integrados (IDEs). Elmétodo que establece la variable nombreDelCurso en este ejemplo sellamaestablecerNombreDelCurso, y el método que obtiene el valor de la variable de instancianombreDelCursose llama obtenerNombreDelCurso.

  • 8/18/2019 Teoria de Programacion

    15/19

    Diagrama de clases de UML para la clase Libro Califi caciones con u na variable de instancia,y métodos establecer y obtenerLa fi gura 3.9 contiene un diagrama de clases de UML actualizado para la versión de la claseLibroCalificacionesde la fi gura 3.7. Este diagrama modela la variable de instancia nombreDelCursode la clase Libro-Calificaciones como un atributo en el compartimiento intermedio de la clase. UMLrepresenta a las variables deinstancia como atributos, listando el nombre del atributo, seguido de

    dos puntos y del tipo del atributo. El tipode UML del atributo nombreDelCurso es String. La variablede instancia nombreDelCurso es private en Java,por lo que el diagrama de clases lista un signomenos (-) en frente del nombre del atributo correspondiente. Laclase LibroCalificaciones contienetres métodos public, por lo que el diagrama de clases lista tres operacionesen el tercercompartimiento. Recuerde que el signo más (+) antes de cada nombre de operación indica queésta espublic. La operación establecerNombreDelCurso tiene un parámetro String llamado nombre.UML indicael tipo de valor de retorno de una operación colocando dos puntos y el tipo de valor deretorno después de losparéntesis que le siguen al nombre de la operación. El métodoobtenerNombreDelCurso de la clase LibroCalificaciones(fi gura 3.7) tiene un tipo de valor deretorno String en Java, por lo que el diagrama de clases muestraun tipo de valor de retorno String

  • 8/18/2019 Teoria de Programacion

    16/19

    en UML. Observe que las operaciones establecerNombreDelCursoy mostrarMensajeno devuelvenvalores (es decir, devuelven void en Java), por lo que el diagrama de clases de UMLno especificaun tipo de valor de retorno después de los paréntesis de estas operaciones.

    3.6 Comparación entre tipos pr imiti vos y tipo s por referenciaLos tipos de datos en Java se dividen en dos categorías: tipos primitivos y tipos por referencia(algunas vecesconocidos como tipos no primitivos ). Los tiposprimitivos son boolean, byte, char,short, int, long,float y double. Todos los tipos no primitivos son tipos por referencia, por lo cual lasclases, que especifi can lostipos de objetos, son tipos por referencia.Una variable de tipo primitivo puede almacenar sólo un valor de su tipo declarado a la vez. Por

    ejemplo, unavariable int puede almacenar un número completo (como 7) a la vez. Cuando seasigna otro valor a esa variable,se sustituye su valor inicial. Las variables de instancia de tipoprimitivo se inicializan de manera predeterminada;las variables de los tipos byte, char, short, int,long, float y double se inicializan con 0, y las variablesde tipo boolean se inicializan con false.Usted puede especifi car sus propios valores iniciales para las variables detipo primitivo. Recuerdeque las variables locales no se inicializan de manera predeterminada.Tip para prevenir errores 3.1Cualquier intento de utilizar una variable local que no se haya inicializado produce un error decompilación.Los programas utilizan variables de tipo por referencia (que por lo general se llamanreferencias ) para almacenarlas ubicaciones de los objetos en la memoria de la computadora. Se dice que dicha variable hacereferencia aun ob jeto en el programa. Cada uno de los objetos a los que se hace referenciapueden contener muchas variablesde instancia y métodos. La línea 14 de la fi gura 3.8 crea unobjeto de la clase LibroCalificaciones, y la variable miLibroCalificaciones contiene una referencia a ese objeto LibroCalificaciones. Las variables deinstanciade tipo por referencia se inicializan de manera predeterminada con el valor null: unapalabra reservada que representauna “referencia a nada”. Esto explica por qué la primera llamadaa obtenerNombreDelCurso en la línea 18de la fi gura 3.8 devolvía null; no se había establecido elvalor de nombreDelCurso, por lo que se devolvía el valorinicial predeterminado null. En el apéndiceC, Palabras clave y palabras reservadas, se muestra una lista completade las palabras reservadasy las palabras clave.Es obligatorio que una referencia a un objeto invoque (es decir, llame) a losmétodos de un objeto. En laaplicación de la fi gura 3.8, las instrucciones en el método main utilizanla variable miLibroCalificaciones paraenviar mensajes al objeto LibroCalificaciones. Estos mensajesson llamadas a métodos (como establecer-NombreDelCurso y obtenerNombreDelCurso) quepermiten al programa interactuar con el objeto LibroCalificaciones.Por ejemplo, la instrucción en la línea 23 utiliza a miLibroCalificaciones para enviar el mensajeestablecerNombreDelCurso al objeto LibroCalificaciones. El mensaje incluye el argumento que

    requiere establecerNombreDelCursopara realizar su tarea. El objeto LibroCalificaciones utiliza estainformación paraestablecer la variable de instancia nombreDelCurso. Tenga en cuenta que lasvariables de tipo primitivo no hacenreferencias a objetos, por lo que dichas variables no puedenutilizarse para invocar métodos.

    Observación de i ngeniería de softw are 3.4El tipo declarado de una variable (por ejemplo, int, double o LibroCalificaciones) indica si la variablees detipo primitivo o por referencia. Si el tipo de una variable no es uno de los ocho tipos primitivos,

  • 8/18/2019 Teoria de Programacion

    17/19

    entonces es un tipopor referencia. (Por ejemplo, Cuenta cuenta1 indica que cuenta1 es unareferencia a un objeto Cuenta).

    3.7 Inicialización de objetos mediante const ructo resComo mencionamos en la sección 3.5, cuando se crea un objeto de la clase LibroCalificaciones (figura 3.7),su variable de instancia nombreCurso se inicializa con null de manera predeterminada.¿Qué pasa si usted deseaproporcionar el nombre de un curso a la hora de crear un objetoLibroCalificaciones? Cada clase que usteddeclare puede proporcionar un constructor, el cualpuede utilizarse para inicializar un objeto de una clase almomento 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 inicialización. La llamada alconstructor seindica mediante el nombre de la clase, seguido de paréntesis; el constructor debetener el mismo nombre que laclase. Por ejemplo, la línea 14 de la fi gura 3.8 primero utiliza newpara crear un objeto LibroCalificaciones. Losparéntesis vacíos después de "newLibroCalificaciones" indican una llamada sin argumentos al constructor dela clase. De manerapredeterminada, el compilador proporciona un constructor predeterminado sin parámetros,en cualquier clase que no incluya un constructor en forma explícita. Cuando una clase sólo tiene elconstructorpredeterminado, sus variables de instancia se inicializan con sus valorespredeterminados. Las variables de los tiposchar, byte, short, int, long, float y double se inicializancon 0, las variables de tipo boolean se inicializan confalse, y las variables de tipo por referencia seinicializan con null.Cuando usted declara una clase, puede proporcionar su propio constructor para

    especifi car una inicializaciónpersonalizada para los objetos de su clase. Por ejemplo, tal vez unprogramador quiera especifi car el nombre de uncurso para un objeto LibroCalificaciones cuandose crea este objeto, como enLibroCalificacionesmiLibroCalificaciones =new LibroCalificaciones("CS101 Introduccion a la programacion en Java" );En este caso, el argumento "CS101 Introducciona la programacion en Java" se pasa al constructor delobjeto LibroCalificaciones y se utiliza parainicializar el nombreDelCurso. La instrucción anterior requiere quela clase proporcione unconstructor con un parámetro String. La fi gura 3.10 contiene una clase LibroCalificacionesmodifi cada con dicho constructor.

  • 8/18/2019 Teoria de Programacion

    18/19

    Las líneas 9 a la 12 declaran el constructor para la clase LibroCalificaciones. Un constructor debe

    tener elmismo nombre que su clase. Al igual que un método, un constructor especifica en su listade parámetros los datosque requiere para realizar su tarea. Cuando usted crea un nuevo objeto(como haremos en la fi gura 3.11), estosdatos se colocan en los paréntesis que van después delnombre de la clase. La línea 9 indica que el constructor dela clase LibroCalificaciones tiene unparámetro String llamado nombre. El nombre que se pasa al constructorse asigna a la variable deinstancia nombreCurso en la línea 11 del cuerpo del constructor.La fi gura 3.11 demuestra la inicialización de objetos LibroCalificaciones mediante el uso de esteconstructor.Las líneas 11 y 12 crean e inicializan el objeto libroCalificaciones1 deLibroCalificaciones. Elconstructor de la clase LibroCalificaciones se llama con el argumento"CS101 Introduccion a la programación en Java" para inicializar el nombre del curso. La expresiónde creación de la instancia de la clase ala derecha del signo = en las líneas 11 y 12 devuelve unareferencia al nuevo objeto, el cual se asigna a la variablelibroCalificaciones1. Las líneas 13 y 14repiten este proceso para otro objeto LibroCalificaciones llamadolibroCalificaciones2, pero esta vezse le pasa el argumento "CS102 Estructuras de datos en Java" parainicializar el nombre del cursopara libroCalificaciones2. Las líneas 17 a la 20 utilizan el método obtenerNombreDelCursode cada objeto para obtener los nombres de los cursos y mostrar que, sin duda, se inicializaron enel momento en el que se crearon los objetos. En la introducción a la sección 3.5, aprendió quecada instancia (esdecir, objeto) de una clase contiene su propia copia de las variables de instanciade la clase. La salida confirma quecada objeto LibroCalificaciones mantiene su propia copia de lavariable de instancia nombreCurso.

  • 8/18/2019 Teoria de Programacion

    19/19

    Tip para prevenir erro res 3.2

    A menos que sea aceptable la inicialización predeterminada de las variables de instancia de suclase, deberá proporcionarun constructor para asegurarse que las variables de instancia de suclase se inicialicen en forma apropiada convalores signifi cativos, a la hora de crear cada nuevoobjeto de su clase.

    Agregar el cons tr ucto r al d iagram a de c las es de UML d e la c lase Li br oCal if icacionesEl diagrama de clases de UML de la fi gura 3.12 modela la clase LibroCalificaciones de la fi gura3.10, la cualtiene un constructor con un parámetro llamado nombre, de tipo String. Al igual que lasoperaciones, en undiagrama de clases, UML modela a los constructores en el tercercompartimiento de una clase. Para diferenciar aun constructor de las operaciones de una clase,UML requiere que se coloque la palabra “constructor” entre lossignos « y » antes del nombre delconstructor. Es costumbre listar los constructores antes de otras operaciones enel tercer compartimiento.