Descarga la aplicación para disfrutar aún más
Vista previa del material en texto
Lenguajes de Programación III Pág. 1 Karim Guevara Puente de la Vega , Mario Santillana Valdivia Lab. 03 UNIVERSIDAD CATÓLICA DE SANTA MARÍA ESCUELA PROFESIONAL DE INGENIERÍA DE SISTEMAS LABORATORIO 03: MIEMBROS DE INSTANCIA Y DE CLASE I OBJETIVOS • Identificar el ambito de uso de los diferentes tipos de variables y de métodos. • Definir adecuadamente los diferentes tipos de variables • Implementar adecuadamente los diferentes tipos de métodos • Evidenciar el uso adecuado de los tipos de variables y métodos en la implementación de la funcionalidad de diferentes clases. II TEMAS A TRATAR • Función, método o procedimiento • Miembros de una clase • Tipos de variables o Variables de instancia o Variables de clase o Variables final o constantes • Tipos de métodos o Métodos de instancia o Métodos de clase III MARCO TEÓRICO 1. ¿Función, Método o Procedimiento? Los métodos en Java, las funciones y los procedimientos, especialmente en Java, son una herramienta indispensable para programar. Java nos permite crear o hacer nuestros propios métodos y usarlos sencillamente como también nos facilita hacer uso de los métodos de otras librerías (funciones matemáticas, aritméticas, de archivos, de fechas, etc.). Cualquiera que sea el caso, las funciones permiten automatizar tareas que requerimos con frecuencia y que además se pueden generalizar por medio de parámetros o argumentos, lo cual permite separar nuestro código en módulos y según las tareas que requerimos. Lenguajes de Programación III Pág. 2 Karim Guevara Puente de la Vega , Mario Santillana Valdivia Lab. 03 En java una función debe contener la implementación de una utilidad de nuestra aplicación, esto nos pide que por cada utilidad básica (abrir, cerrar, cargar, mover, etc.) sería adecuado tener al menos una función asociada a ésta, pues sería muy complejo usar o crear un método que haga todo de una sola vez, por esto es muy buena idea separar cada tarea en una función o método (según corresponda). En Java es mucho más común hablar de métodos que de funciones y procedimientos y esto se debe a que en realidad un método, una función y un procedimiento NO son lo mismo, veamos la diferencia: • Funciones: Las funciones son un conjunto de líneas de código (instrucciones), encapsulados en un bloque, usualmente reciben parámetros, cuyos valores utilizan para efectuar operaciones y adicionalmente retornan un valor (si no retorna algo, entonces no es una función). • Métodos: Los métodos y las funciones en Java están en capacidad de realizar las mismas tareas, es decir, son funcionalmente idénticos, pero su diferencia radica en la manera en que hacemos uso de uno u otro (el contexto). Un método también puede recibir valores, efectuar operaciones con estos y retornar valores, sin embargo en método está asociado a un objeto SIEMPRE, mientras que una función existe por sí sola, sin necesidad de un objeto para ser usada. • Procedimientos: Los procedimientos son básicamente un conjunto de instrucciones que se ejecutan sin retornar ningún valor, hay quienes dicen que un procedimiento no recibe valores o argumentos, sin embargo en la definición no hay nada que se lo impida. En el contexto de Java un procedimiento es básicamente un método cuyo tipo de retorno es void que no nos obliga a utilizar una sentencia return. Sintaxis para declarar una función/método/ procedimiento en Java: [acceso] [modificador] tipo nombreFuncion ([tipo arg1, [tipo arg2] …]) { /* * Bloque de instrucciones */ [return valor; | return;] } Acerca de los argumentos o parámetros • Una función, un método o un procedimiento pueden tener una cantidad cualquier de parámetros, es decir pueden tener cero, uno, tres, diez, cien o más parámetros. Aunque habitualmente no suelen tener más de 4 o 5. • Si una función tiene más de un parámetro cada uno de ellos debe ir separado por una coma. • Los argumentos de una función también tienen un tipo y un nombre que los identifica. El tipo del argumento puede ser cualquiera y no tiene relación con el tipo del método. • Al recibir un argumento nada nos obliga a hacer uso de éste al interior del método, sin embargo para qué recibirlo si no lo vamos a usar. • En Java los parámetros que podemos recibir pueden ser por valor por referencia, esto implica que si modificamos los valores recibidos al interior del método, estos pueden mantener sus cambios o no después de ejecutada el método. Lenguajes de Programación III Pág. 3 Karim Guevara Puente de la Vega , Mario Santillana Valdivia Lab. 03 Acerca de return • Cualquier instrucción que se encuentre después de la ejecución de return NO será ejecutada. • El tipo del valor que se retorna en una función debe coincidir con el del tipo declarado a la función, es decir si se declara int, el valor retornado debe ser un número entero. • En el caso de los procedimientos (void) podemos usar la sentencia return pero sin ningún tupo de valor, sólo la usaríamos como una manera de terminar la ejecución del procedimiento. 2. Miembros de la clase Son las variables, funciones, métodos y procedimientos definidas en el contexto de una clase. Podemos clasificar las variables y los métodos que han sido definidos en la clase en dos grupos: o variables de instancia y variables de clase o métodos de instancia y métodos de clase. 3. Tipos de variables a) Variables de Instancia Una variable de instancia almacena un dato que corresponde a una característica de un objeto que tiene su propio valor. Las variables de instancia también pueden denominarse miembros de instancia, campos no estáticos y miembros de datos. Estas variables están asociadas a los objetos por lo tanto, son accedidas desde el contexto de un objeto. Se utilizan para definir los atributos de un objeto. Por ejemplo: suponga que tenemos la clase Bicycle siguiente: A partir de esta clase se crean los siguientes objetos, en donde la variable owerName tiene su propio valore para cada objeto (no es la misma variable), pero estos existen y dependen de la existencia del objeto. Lenguajes de Programación III Pág. 4 Karim Guevara Puente de la Vega , Mario Santillana Valdivia Lab. 03 b) Variables de Clase A diferencia de las variables de instancia, que están vinculadas a cada objeto en particular, las variables de clase tienen un único valos, y este valor es el mismo para todos los objetos del tipo apropiado, es decir, sus valores son los mismos para todas las instancias de la clase donde hayan sido definidos (pertenecen a la clase y no a los objetos). A estas variables a menudo se les denomina variables estáticas, se definen con el modificador static. Por ejemplo, defininamos la clase Bycicle, y crearemos dos objetos los cuales acceden a la variable count c) Variables Finales o Constantes Una clase puede contener atributos de valor constante o variables finales. Este tipo de atributo se indica con la palabra reservada final. Las variables finales se suelen declarar además como variables de clase (static final) por razones de ahorro de memoria ya que, al no modificar su valor sólo suele ser necesaria una copia en memoria por clase (y no una por instancia). La palabra reservada final indica que el atributo debe comportarse como una constante, es decir, no puede ser modificada una vez declarada e inicializada. Por otro lado, se puede separar la declaración de la inicialización de la variable final, realizándose ésta más tarde. En este caso, el valor asignado a la variable final puede hacerse en función de otros datos o de llamadas a métodos, con lo que el valor de la constante no tiene porqué ser el mismo para diferentes ejecuciones del programa. Lenguajes de Programación III Pág. 5 Karim Guevara Puentede la Vega , Mario Santillana Valdivia Lab. 03 4. Tipos de métodos a) Métodos de Instancia Los métodos de instancia operan sobre las variables de instancia de los objetos pero también tienen acceso a las variables de clase. La sintaxis de llamada a un método de instancia es: idObjeto.método(parametros); Todas las instancias de una clase comparten la misma implementación para un método de instancia. Dentro de un método de instancia, el identificador de una variable de instancia hace referencia al atributo de la instancia concreta que hace la llamada al método. Por ejemplo, los getter y setter de los atributos de la clase Bicycle son métodos de instancia. b) Métodos de Clase Los métodos de clase no operan sobre las variables de instancia de los objetos. Los métodos de clase pueden trabajar con las variables de clase pero no pueden acceder a las variables de instancia declaradas dentro de la clase, a no ser que se crea una nueva instancia y se acceda a las variables de instancia a través del nuevo objeto. Los métodos de clase también pueden ser llamados precediendolos con el identificador de la clase, sin necesidad de utilizar el de una instancia. idClase.método(parametros); La palabra static determina la declaración de un método de clase. Por defecto, si no se indica la palabra static, el método declarado se considera un método de instancia. Por ejemplo en la clase MATH encontramos varios métodos de clase que determinan un conjunto de operaciones para cálculos matemáticos, algunos de los cuales son: Lenguajes de Programación III Pág. 6 Karim Guevara Puente de la Vega , Mario Santillana Valdivia Lab. 03 IV ACTIVIDADES 1. Dadas las siguientes clases identifique cuales son variables de clase, variables de instancia, métodos de instancia y métodos de clase. Posteriormente implemente y compruebe la funcionalidad de las mismas. Lenguajes de Programación III Pág. 7 Karim Guevara Puente de la Vega , Mario Santillana Valdivia Lab. 03 2. Sean las siguientes clases Contador y ContadorTest. Analicelas, pruebe su funcionamiento. 3. Elabore un informe en el que evidencie y responda las siguientes preguntas en relación al ejericicio anterior: (El informe debe ser subido al aula virtual al término de la sesión). a) ¿Se pueden realizar las siguientes modificaciones en el código de la clase Contador, sin que cambie el funcionamiento de la clase? ¿Por qué? 3.a.1. Cambiar en el constructor Contador: “acumulador += valor” por “this.acumulador += valor” 3.a.2. Cambiar en el constructor Contador: “acumulador += valor” por “Contador.acumulador += valor” 3.a.3. Cambiar en el método inc(): “valor++” por “this.valor++” b) ¿Qué valores imprime el programa ContadorTest? ¿Por qué? c) Si cambiamos en la clase Contador la línea: “static int acumulador = 0” por “private static int acumulador = 0” ¿aparece algún error? ¿por qué? Lenguajes de Programación III Pág. 8 Karim Guevara Puente de la Vega , Mario Santillana Valdivia Lab. 03 d) Qué sucede si no inicializamos el valor del campo acumulador? e) Vamos a agregar una constante (VALOR_INICIAL) a la clase Contador y otro constructor, tal como se muestra a continuación (las modificaciones están enmarcadas): f) Fijate en la instrucción “this(Contador.VALOR_INICIAL)”. ¿Qué hace está instrucción? g) Escriba una clase ContadorTest2 que compruebe y evidencie el funcionamiento de la clase modificada y de la respuesta al ejercicio anterior. h) ¿Qué sucede si cambiamos la instrucción “this(Contador.VALOR_INICIAL)” por “new Contador(Contador.VALOR_INICIAL)” ? i) ¿Qué sucede si el primer constructor lo modificamos de la siguiente forma? j) Realice las siguientes modificaciones en la clase Contador: 3.j.1. Añada una variable de clase nContadores que contenga el número de contadores creados. 3.j.2. Añada una variable de clase ultimoContador que almacene el valor inicial del último contador creado. 3.j.3. Escriba una clase ContadorTest3 que compruebe y evidencie el funcionamiento de la clase con estas úlltimas modificaciones. Lenguajes de Programación III Pág. 9 Karim Guevara Puente de la Vega , Mario Santillana Valdivia Lab. 03 V EJERCICIOS A. Proyecto de Rectángulo 1. Cree un proyecto en Java, en el que defina e implemente las clases del diagrama. 2. Agregue a la clase Rectangulo un constructor que cree un rectangulo partiendo de la base y la altura, de forma que su vértice inferior izquierdo esté en (0,0). 3. Agregue los siguientes métodos a la clase Manejador: a. Método de clase denominado area que permita calcular el área de un rectángulo. b. Método de clase denominado perímetro que permita calcular el perímetro de un rectángulo. c. Método de clase denominado moverX que desplace un rectángulo en el eje X, de acuerdo a la cantidad de puntos que se reciba como parámetro. d. Método de clase denominado moverY que desplace un rectángulo en el eje Y, de acuerdo a la cantidad de puntos que se reciba como parámetro. Agregue instrucciones a la clase Principal de modo que se evidencie el funcionamiento de los métodos de la clase Manejador. 4. Agregue una variable de instancia color a la clase Rectangulo. El color de un rectángulo debe ser asignado al momento de su creación y debe serguir la secuencia: verde, amarillo, rojo, verde, amarillo, etc. Para determinar el color que debe tomar un nuevo rectangulo, defina una variable de clase en Rectangulo que le permita saber cual fue el color del último rectangulo creado. Agregue las instrucciones a la clase Principal de modo que se evidencie estas últimas modificaciones relativas al color de los rectangulos. B. Proyecto de Fechas Cree un nuevo proyecto en Java y agrega la clase Fecha con atributos para el día, el mes y el año de la fecha. Incluye, al menos, los siguientes métodos: 1. Constructor predeterminado con el 1-1-1900 como fecha por defecto. 2. Constructor parametrizado con día, mes y año. Lenguajes de Programación III Pág. 10 Karim Guevara Puente de la Vega , Mario Santillana Valdivia Lab. 03 3. leer(): pedirá al usuario el día (1 a 31), el mes (1 a 12) y el año (1900 a 2050). 4. bisiesto(): indicará si el año de la fecha es bisiesto o no. 5. diasMes(int): devolverá el número de días del mes que se le indique (para el año de la fecha). 6. valida(): comprobará si la fecha es correcta (entre el 1-1-1900 y el 31-12-2050); si el día no es correcto, lo pondrá a 1; si el mes no es correcto, lo pondrá a 1; y si el año no es correcto, lo pondrá a 1900. Será un método auxiliar (privado). Este método se llamará en el constructor parametrizado y en leer(). 7. Accesor y mutators. 8. corta(): mostrará la fecha en formato corto (02-09-2003). 9. diasTranscurridos(): devolverá el número de días transcurridos desde el 1-1-1900 hasta la fecha. 10. diaSemana(): devolverá el día de la semana de la fecha (0 para domingo, ..., 6 para sábado). El 1-1-1900 fue domingo. 11. larga(): mostrará la fecha en formato largo, empezando por el día de la semana (martes 2 de septiembre de 2003). 12. fechaTras(long): hará que la fecha sea la correspondiente a haber transcurrido los días que se indiquen desde el 1-1-1900. 13. diasEntre(Fecha): devolverá el número de días entre la fecha y la proporcionada. 14. siguiente(): pasará al día siguiente. 15. anterior(): pasará al día anterior. 16. fechaFutura(long): actualiza la fecha, agregandole los días que se le indique. 17. copia(): devolverá un clon de la fecha. 18. igualQue(Fecha1, Fecha2): método de clase, devuelve True si ambas fechas son iguales, de lo contrario devuelve False. 19. menorQue(Fecha1, Fecha2): método de clase que devuelve True si la Fecha1 es anterior a la Fecha2, de lo contrario devuelve False.20. mayorQue(Fecha1, Fecha2): método de clase que devuelve True si la Fecha1 es posterior a la Fecha2, de lo contrario retorna False. VI BIBLIOGRAFÍA • Deitel Paul, Deitel Harvey. “COMO PROGRAMAR EN JAVA”, 9na. Edición, Edit. Prentice Hall, 2012. Lenguajes de Programación III Pág. 11 Karim Guevara Puente de la Vega , Mario Santillana Valdivia Lab. 03 RÚBRICA PARA LA CALIFICACIÓN DEL LABORATORIO CRITERIO A SER EVALUADO Nivel A B C D NP R1 Uso de estándares y buenas práticas de programación 2.0 1.5 1.0 0.5 0 R2 Registro oportuno de los commits en el repositorio local y el remoto del avance realizado en las sesiones de labs. 2.0 1.5 1.0 0.5 0 R3 Informe detallado, bien redactado y ordenado con las respuestas y evidencias de las actividades del punto 3. 6.0 - - - 0 R4 Resolución de los ejercicios donde se hace uso adecuado de los tipos de variables y métodos, lo cual es evidenciado en los commits de cada ejercicio. 10.0 - - - 0 Total 20 En java una función debe contener la implementación de una utilidad de nuestra aplicación, esto nos pide que por cada utilidad básica (abrir, cerrar, cargar, mover, etc.) sería adecuado tener al menos una función asociada a ésta, pues sería muy comple...
Compartir