15. Parámetros o argumentos



Documentos relacionados
11. Algunas clases estándar de Java (II)

9. Objetos y clases Clases

8. Sentencia return y métodos

Tema 6. Reutilización de código. Programación Programación - Tema 6: Reutilización de código

Programación Orientada a Objetos en Java

10. Algunas clases estándar de Java (I)

ISTP CIDET COMPUTACION E INFORMATICA ARREGLOS EN JAVA

Java Inicial (20 horas)

RESUMEN DE CONCEPTOS BASICOS DE PROGRAMACION JAVA

Programación Orientada a Objetos con Java

Clases abstractas e interfaces

2. Estructura de un programa en Java

Introducción a la programación orientada a objetos

Programación orientada a objetos

Aquí se declaran los. Aquí se declaran los métodos de la clase. *Atributos de la clase

Contenidos. Funciones (suplemento) Funciones. Justificación del uso de Funciones

Programación Orientada a Objetos en JAVA

Modulo 1 El lenguaje Java

Universidad de Cantabria

GESTIÓN DE EXCEPCIONES EN JAVA. CAPTURA CON BLOQUES TRY CATCH Y FINALLY. EJEMPLOS RESUELTOS. (CU00927C)

Ejercicios del tema 7: Clases y objetos

Partes de un programa en Java. A. Ejemplo de un Programa en Java /* Programa Ejemplo de Java: Muestra una Ventana Archivo: Ejemplo1.

Tema: Arreglos de Objetos en C++.

Ejercicio 1 (3 puntos).-

TEMA 3. CLASES. EJERCICIOS

Clases. Java: Clases y Objetos. Clases. Clases. Modificadores de clase. Definición de una clase. Cada objeto es un ejemplar de una clase

Conceptos. ELO329: Diseño y Programación Orientados a Objetos. ELO 329: Diseño y Programación Orientados a Objetos

EXAMEN FINAL Metodología y Programación Orientada a Objetos. Curso Cuatrimestre de otoño. 17 de Enero de 2011

Tema 3: Herencia en C++ Programación Orientada a Objetos Curso 2008/2009 Begoña Moros Valle

El lenguaje C. #define MAX LINEA 1000 /* maximo tamanio de linea de entrada */

POLIMORFISMO "una interfaz, múltiples métodos".

Constructores y Destructores

VARIABLES, CONSTANTES Y EXPRESIONES ASIGNACIÓN. TIPOS ELEMENTALES. PRECEDENCIA DE LOS ESTRUCTURAS DE CONTROL. CONDICIONAL E

Curso de Java POO: Programación orientada a objetos

Definición de clases: Herencia, polimorfismo, ligadura dinámica

class Nombre_Clase extends Nombre_SuperClase { cuerpo de la clase extendida }

12. Tipos de atributos

PROGRAMACIÓN ORIENTADA A OBJETOS (L40629) Sabino Miranda-Jiménez

1. Ejemplo de clase : La clase Cuenta 2. Uso de la clase Cuenta. 3. Métodos y objetos receptores de mensajes (Importante)

Programación Avanzada para Sistemas de Telecomunicación. Objetos y clases. J.C. Cruellas. Objetos y clases

Trabajo Práctico N 4: Diseño por Contratos

1. Visión general de RMI

Computación III. Objetivo de aprendizaje del tema

Modelo de Objetos Distribuidos

Objetivo de aprendizaje del tema

Resumen Lenguaje Java

Clases y Objetos. Informática II Ingeniería Electrónica

Pruebas de unidad con JUnit

Multitarea en Java. Rafa Caballero - UCM

Estructura de las Aplicaciones Orientadas a Objetos Herencia y Polimorfismo

Introducción a la Programación Orientada a Objetos

INSTITUTO TECNOLOGICO de la laguna Programación Orientada a Objetos en C++

2.1. Introducción al lenguaje Java

Introducción al lenguaje Java

Benemérita Universidad Autónoma del Estado de Puebla

Programación Orientada a Objetos. Java: Excepciones

Programación Orientada a Objetos en Java

ALGORITMICA Y PROGRAMACION POR OBJETOS I

Las propiedades de la clase en java es el equivalente a las variables globales en lenguajes estructurados como el C.

Clases y funciones amigas: friend

1.00 Clase 8. Datos y métodos estáticos. Datos y métodos estáticos de las clases. Campos de datos estáticos:

En cualquier caso, tampoco es demasiado importante el significado de la "B", si es que lo tiene, lo interesante realmente es el algoritmo.

Primer Parcial Septiembre 5 de 2009

Programación Orientada a Objetos en C#.NET CAPÍTULO 8 E V E N T O S. Ing. Bruno López Takeyas, M.C.

Facultad de Ingeniería Escuela de Ingeniería de Sistemas y Computación Algoritmia y Programación

Clase adicional 3. Métodos. Temas

Ingeniería del Software Arquitectura Física en 3 niveles

Solución al Examen de Prácticas de Programación (Ingeniería Informática)

Tutorial básico del entorno de desarrollo Eclipse.

Programación en Java. Programación en OO

FACULTAD DE INGENIERÍA

Programación Orientada a Objetos: Arreglos en Java

Vectores y matrices. Arrays Declaración Creación Acceso a los elementos de un array Manipulación de vectores y matrices

Curso de Python Inicial

1. Manejo de memoria estática 2. Manejo de memoria dinámica

Caso práctico Alquiler de películas en un vídeo-club

FUNDAMENTOS DE PROGRAMACIÓN. SEPTIEMBRE 2005

2.2.- Paradigmas de la POO

ELO329: Diseño y Programación Orientados a Objetos 20 de Junio de Certamen Final

JavaScript como Orientación a Objetos

El lenguaje de Programación C. Fernando J. Pereda

Tema 3: Genericidad en Java. Tema 3: Genericidad en Java. Objetivos y Bibliografía. Modelos de Datos Genéricos

Compiladores e Intérpretes Proyecto N 1 Sintaxis de MiniJava Segundo Cuatrimestre de 2015

Java Avanzado Facultad de Ingeniería. Escuela de computación.

Tema: Sobrecarga de Operadores.

Etapa 3.1. Implementación de la clase Operacion

Práctica 3 mtp. metodoloxía e tecnoloxía da programación. Presentar detalles básicos sobre la sintaxis del lenguaje de programación Java.

Práctica 2: Simón dice

GUIA PROGRAMACIÓN ORIENTADA A OBJETOS

Prof. Dr. Paul Bustamante

MONITORES EN JAVA. Antonio Tomeu Control de la Concurrencia en Java: API Estándar

Tema 4. Gestión de entrada/salida

Examen Junio- Grupo A Lunes 17 de Junio - Programación en C++ Pág. 1

1. Qué tipos de relación hay entre las siguientes clases?

Uso de excepciones en Java

Se guardan en archivos con extencion c y los cabezales con extension h

Patrones para persistencia (I) Ingeniería del Software II

Elementos léxicos del lenguaje de programación Java

Primer Parcial Febrero 24 de 2007

Capítulo 6. Asociaciones y Declaraciones.

Transcripción:

Programación orientada a objetos con Java 161 15. Parámetros o argumentos Objetivos: a) Profundizar en el concepto de parámetro de una clase e indicar su mecanismo de funcionamiento. b) Interpretar el código fuente de una aplicación Java donde aparecen parámetros de distintos tipos c) Construir una aplicación Java sencilla, convenientemente especificada, que declare métodos con diferentes tipos de parámetros Los parámetros o argumentos son una forma de intercambiar información con el método. Pueden servir para introducir datos para ejecutar el método (entrada) o para obtener o modificar datos tras su ejecución (salida). 15.1. Declaración de parámetros Los parámetros se declaran en la cabecera de la declaración de los métodos. Al declararse el parámetro, se indica el tipo de dato y el identificador correspondiente. Los parámetros o argumentos de un constructor o de un método pueden ser de cualquier tipo, ya sean tipos primitivos o referencias de objetos (en este caso debe indicarse el identificador de la clase correspondiente). Ejemplos de declaraciones de cabeceras de métodos: public double devuelve() // Sin parametros {... return... ; public void asigna(double x) // Un parametro, x de tipo double {... public int elmayor(int a, int b) // Dos parametros, a y b de tipo int {... public static double sumatorio (double [] v) // Un parametro, v, array real {... public boolean caducado (Fecha fechalimite) // Un parámetro de la clase Fecha {... El identificador del parámetro se emplea sólo dentro del método para hacer referencia al argumento correspondiente y puede coincidir con el de un atributo de la misma clase. En tal caso, se dice que oculta a la variable miembro. Esta técnica suele emplearse en los constructores para inicializar una instancia. Por ejemplo en la clase Circulo: public class Circulo { int x, y, radio; public circulo(int x, int y, int radio) {... La clase Circulo tiene tres atributos o variables miembro x, y y radio y un constructor con tres argumentos con los mismos identificadores que facilitan los valores iniciales a los atributos respectivamente. Los identificadores de los parámetros ocultan a las variables miembro dentro del cuerpo del constructor, de forma que x, y y radio dentro del constructor hacen referencia a los parámetros y no a las variables miembro. Para acceder a las variables miembro, es necesario emplear la palabra reservada this que referencia a la instancia que está siendo inicializada por el constructor.

162 A. García-Beltrán y J.M. Arranz public class Circulo { int x, y, radio; public Circulo(int x, int y, int radio) { this.x = x; // this.x hace referencia al atributo x // x hace referencia al parametro x this.y = y; // this.y hace referencia al atributo y // y hace referencia al parametro y this.radio = radio; // this.radio hace referencia al atributo radio // radio hace referencia al parametro radio Normalmente dentro del cuerpo del método de una clase puede hacerse referencia directa a las variables miembro de las instancias. Salvo en el caso del ejemplo anterior en el que las variables miembro están ocultas. Por otro lado, los parámetros de un mismo método no puede compartir el mismo identificador (no pueden coincidir) con el de una variable local. El siguiente código genera un error de compilación: public void asigna(double x) { double x;... // Un parametro, x de tipo double // Error de compilacion 15.2. Uso alternativo de this como referencia al parámetro implícito En la clase CuentaBancaria se implementa un método transferencia que transfiere el saldo de una cuenta origen (parámetro formal explícito) a otra cuenta (parámetro implícito): * Declaracion de la clase CuentaBancaria * Ejemplo de declaracion de variables * metodos estaticos y uso de this * Ultima revision: abril, 2003 public class CuentaBancaria { // Atributos o variables miembro private double saldo; public static int totalcuentas=0; // Metodos public CuentaBancaria( ) { this(0.0); public CuentaBancaria( double ingreso ) { saldo = ingreso; inccuentas(); public double saldo() { return saldo; public static void inccuentas () { totalcuentas++; // Transfiere todo el dinero de la cuenta origen a la actual public void transferencia( CuentaBancaria origen ) { saldo += origen.saldo; origen.saldo=0;

Programación orientada a objetos con Java 163 Ejemplo de programa que emplea la clase CuentaBancaria con una llamada al método transferencia: * Ejemplo de uso de la clase CuentaBancaria * Ultima revision: abril, 2003 public class PruebaCuentaBancaria { public static void main (String [] args) { CuentaBancaria c1; c1 = new CuentaBancaria(17.5); System.out.println("Nueva cuenta con: " + c1.saldo() + " euros"); CuentaBancaria c2; c2 = new CuentaBancaria(20.0); System.out.println("Nueva cuenta con: " + c2.saldo() + " euros"); System.out.println("Transferencia de cuenta 2 a cuenta 1"); c1.transferencia(c2); System.out.println("Cuenta 1 con: " + c1.saldo() + " euros"); System.out.println("Cuenta 2 con: " + c2.saldo() + " euros"); La ejecución del código anterior origina la siguiente salida por pantalla: $>java PruebaCuentaBancaria Total cuentas: 0 Nueva cuenta con: 17.5 euros Total cuentas: 1 Nueva cuenta con: 20.0 euros Total cuentas: 2 Transferencia de cuenta 2 a cuenta 1 Cuenta 1 con: 37.5 euros Cuenta 2 con: 0.0 euros En principio, el programa funciona correctamente, pero el código del método transferencia puede dar lugar a que el saldo de las cuentas origen y destino se anule si ambas son la misma cuenta (la llamada al método sería c1.transferenciapeligrosa(c1);). Se propone la siguiente modificación del código para que considere este caso (en el que no se realiza ninguna operación con ningún saldo). public void transferenciasegura( CuentaBancaria origen ) { if ( this == origen ) // Test de verificacion: destino igual a origen? return; saldo += origen.saldo; origen.saldo=0; 15.3. Paso por valor y paso por referencia En Java todos los parámetros de los métodos se pasan por valor. Cuando se realiza la llamada a un método, los parámetros formales (parámetros indicados en la declaración) reservan un espacio en memoria independiente y reciben los valores de los parámetros reales (parámetros indicados en la llamada al método). Qué consecuencias tiene el paso por valor de los parámetros?

164 A. García-Beltrán y J.M. Arranz Cuando el argumento es de tipo primitivo, el paso por valor significa que durante la ejecución del método se reserva un nuevo espacio para el parámetro formal y no se puede modificar el parámetro real durante la ejecución del método. Cuando el argumento es de tipo referencia (por ejemplo, un array, un objeto,...) el paso por valor significa que no puede modificarse la referencia pero se pueden realizar llamadas a los métodos del objeto y modificar el valor asignado a las variables miembro accesibles del objeto durante la ejecución del método. Por ejemplo, en el siguiente programa el método cambiar utiliza un parámetro de tipo primitivo (a, un valor numérico entero) y un parámetro de tipo referencia (b, un array de valores enteros): * Ejemplo de uso de parametros de distintos tipos * Ultima revision: abril, 2004 public class Parametros { public static void main (String [] args ) { int n; int [] v = new int[2]; n=10; v[0]=20; v[1]=30; System.out.println("Antes: " + n + " " + v[0] +" "+ v[1]); cambiar(n, v); System.out.println("Despues: " + n + " " + v[0] +" "+ v[1]); public static void cambiar (int a, int [] b) { a = 50; b[0] = 60; b[1] = 70; System.out.println("Dentro: " + a + " " + b[0] +" "+ b[1]); La ejecución del código anterior origina la siguiente salida por pantalla: $>java Parametros Antes: 10 20 30 Dentro: 50 60 70 Despues: 10 60 70 Esto es a menudo una fuente de errores: el programador escribe un método que trata de modificar el valor de uno de sus parámetros y el método no funciona como esperaba. 15.4. Variables locales En el cuerpo de un método pueden declararse variables adicionales que sólo pueden emplearse dentro del propio método. Estas variables locales pueden ser de un tipo primitivo o de un tipo referencia. Su existencia (reserva de espacio en memoria) sólo dura mientras se está ejecutando la llamada al método. public static double sumatorio (double [] v) { int k; // Variable local entera double x=0; // Variable local real

Programación orientada a objetos con Java 165 for (int k=0; k<v.length; k++) x += v[k]; return x; Una vez finalizada la ejecución del método, las variables locales k y x dejan de existir.