Logo Studenta

LPIII_Lab 03_2022

¡Este material tiene más páginas!

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...

Continuar navegando