Foros del Web » Programación para mayores de 30 ;) » Java »

Argumentos opcionales

Estas en el tema de Argumentos opcionales en el foro de Java en Foros del Web. Existen los argumentos opcionales en las funciones (métodos) java?...
  #1 (permalink)  
Antiguo 01/10/2007, 10:33
 
Fecha de Ingreso: abril-2005
Ubicación: Ramos Mejía
Mensajes: 113
Antigüedad: 19 años
Puntos: 0
Sonrisa Argumentos opcionales

Existen los argumentos opcionales en las funciones (métodos) java?
  #2 (permalink)  
Antiguo 01/10/2007, 15:42
Avatar de chuidiang
Colaborador
 
Fecha de Ingreso: octubre-2004
Mensajes: 3.774
Antigüedad: 19 años, 7 meses
Puntos: 454
Re: Argumentos opcionales

Hola:

No existen en java. La única solución es definir el método varias veces, en cada una con parámetros distintos. El código sólo tienes que hacerlo en el que lleva más parámetros. Los otros métodos basta con que llamen al de más parámetros añadiendo los parámetros opcionales con su valor por defecto.

Se bueno.
__________________
Apuntes Java
Wiki de Programación
  #3 (permalink)  
Antiguo 02/10/2007, 00:50
 
Fecha de Ingreso: octubre-2003
Mensajes: 3.578
Antigüedad: 20 años, 6 meses
Puntos: 51
Re: Argumentos opcionales

Ummm depende. A partir de Java 5 existen los varargs, asi que si tienes argumentos opcionales que son del mismo tipo y todos van al final del metodo... pues podría hacerse así.

Pero como reglar general, lo que dice chuidiang: no.

S!
  #4 (permalink)  
Antiguo 02/10/2007, 09:19
Avatar de elAntonie  
Fecha de Ingreso: febrero-2007
Mensajes: 894
Antigüedad: 17 años, 2 meses
Puntos: 10
Re: Argumentos opcionales

Wenas

Si no tienes java 5 como dice greeneyed, no existe. Podrias simularlo pasandole un ArrayList con todos los parametros que necesites.

Pero eso es un poco mas complicado y dependiendo de la situacion te merecera la pena o no.

Saludos.
  #5 (permalink)  
Antiguo 02/10/2007, 12:02
 
Fecha de Ingreso: abril-2005
Ubicación: Ramos Mejía
Mensajes: 113
Antigüedad: 19 años
Puntos: 0
Re: Argumentos opcionales

Muchas gracias a los 3, soy nuevo en java aunque no en programación ya que poseo más de 15 años en el tema. Por un lado soy programador en C y eso ayuda pero también desarrollo en VB lo que añade métodos poco elegantes a la programación.
(Disculpas a los fans de Microsoft).
Java es un excelente lenguaje y estoy seguro que aplicando patrones de diseño y una buena arquitectura se puede prescindir de los parámetros opcionales.
He notado que tampoco existen los Property sub o functions. Pero confío en la gente de sun Microsistems.
Desde ya les estoy muy agradecido a los tres. Thaks.
  #6 (permalink)  
Antiguo 02/10/2007, 15:52
 
Fecha de Ingreso: junio-2007
Mensajes: 128
Antigüedad: 16 años, 10 meses
Puntos: 1
Re: Argumentos opcionales

a mi me parece que un function o un sub se puede igualar completamente a un método en java
__________________
todo en la vida nos ofrece una oportunidad de aprender.
Raúl Orlando Otálvaro Cardona
Licenciado en Matemáticas y Física
  #7 (permalink)  
Antiguo 02/10/2007, 17:28
 
Fecha de Ingreso: abril-2005
Ubicación: Ramos Mejía
Mensajes: 113
Antigüedad: 19 años
Puntos: 0
Re: Argumentos opcionales

Hola otalva..., quizá me expresé mal.

En Visual Basic hay una estructura llamada "property" que se emplea como procedimiento de propiedad: Código de la clase "Persona" en Visual Basic:


' Miembro de privado
Private m_nombre as string

'Constructorn on parametrizado (ufa!!!)
Private Sub Class_Initialize()
m_nombre = "Juan"
End Sub

' Procedimiento de lectura (función)
Public property get nombre() as string
nombre = m_nombre
End Property

' Procedimiento de escritura (sub y opcional)
Public property let nombre(nuevo_nombre as string)
m_nombre = nuevo_nombre
End Property

' El siguiente código está en un módulo estándar (no hay en Java).
' que no es una clase pero puede ejecutar un procedimiento main
' Similar al static public void main(String args[]) pero en Visual Basic.

Public Sub Main()
' Declaración de referencia y creación de instancia
' Se puede hacer por separado y no existen constructore parametrizados...
' ... ojo!!! parametrizado.

Dim p as new Persona

' Mostrar el nombre en un cuadro o ventana
' Aquí se emplea el property get...

Msgbox p.nombre

' Modificar el nombre
' Aquí se emplea el property let

p.nombre = "Pedro"
End Sub


Si alguien sabe cuál es el costo de su empleo (a nivel de compilador y rendimiento en Run Time), estaría bueno. End Sub Bien, en Java no hay

Aclaro que no estoy despreciando a Java, al contrario. Pero me gustaría saber, como cosa personal, las razones por la cuales Java no cuenta con características como los procedimientos de propiedad. Aguante Java.

Última edición por jorgelujanm; 02/10/2007 a las 17:37
  #8 (permalink)  
Antiguo 04/10/2007, 00:49
 
Fecha de Ingreso: octubre-2003
Mensajes: 3.578
Antigüedad: 20 años, 6 meses
Puntos: 51
Re: Argumentos opcionales

En realidad la posibilidad de añadir este tipo de estructuras se esta discutiendo para Java 7, no esta decidido todavia si se incluira o no, pero el por que todavia no está...

Java intenta ser un lenguaje "claro" en todo momento para que sepas lo que estas haciendo, y en esta caso al ver p.nombre en realidad no sabes si estas accediendo a la propiedad directamente o si estas accediendo a traves del "setter", que es como se llaman en Java por que se usa, por convenio, setNombre().

Así que entre eso y que escribir setNombre(x) no es tan dificil comparando con .nombre = x, pues no está.

Es decir, la filosofia inicial de Java tendía más a "si ya hay una forma de hacerlo, no incluyas otra" y "no a las soluciones ambiguas", lo cual ayuda a la hora de hacer codigo robusto y mantenible, aunque es más "coñazo" de escribir. Ahora se esta perdiendo un poco esa filosofia, lo cual a mi personalmente me parece una pena.

Por cierto que Groovy, lenguaje dinamico derivado/relacionado con Java si tiene ese tipo de construcciones .

S!
  #9 (permalink)  
Antiguo 04/10/2007, 00:57
 
Fecha de Ingreso: abril-2005
Ubicación: Ramos Mejía
Mensajes: 113
Antigüedad: 19 años
Puntos: 0
Re: Argumentos opcionales

Desde el punto de vista de notación, es más fácil x.nombre = "Juán" que x.setNombre("Juan");.

Desde el punto de vista de comprensión, el encapsulamiento nos dice que nadie tiene que saber si x.nombre es una variable o un setter. A los fines de la seguridad se oculta el qué del cómo.

Pero, al ver que en cosas tan importantes como las Interfaces (polimorfismo y esas cosas) no hay forma de implementar setters (en los lenguajes que lo tienen) se convierten en algo problemático.

Los que estudiemos diseño sabemos que las interfaces son los límites de los módulos y son las articulaciones que permiten implementar múltiples soluciones... aislan el qué del cómo y en eso no habría una alta cohesión y un bajo acoplamiento que es base del diseño.

Yo creo que debe ser por eso.
  #10 (permalink)  
Antiguo 04/10/2007, 02:11
 
Fecha de Ingreso: octubre-2003
Mensajes: 3.578
Antigüedad: 20 años, 6 meses
Puntos: 51
Re: Argumentos opcionales

Cita:
Desde el punto de vista de notación, es más fácil x.nombre = "Juán" que x.setNombre("Juan");.
No digo que sea más o menos fácil. Sólo digo que a nivel practico no hay una gran diferencia (5 caracteres extra) y que como motivo para introducir ese cambio.... es pobre. Es puro "syntactic sugar".

Y no es cuestion de encapsulamiento o no lo que digo. Es por no saber si está encapsulado o no. con p.getXXX() sabes que esta encapsulado sin mirar nada mas. con p.XXX tienes que buscar si existe o no el metodo getXXX() o en caso contrario estas accediendo directamente a la variable sin encapsulamiento. Y eso es ambigüo y la ambigüedad no es deseable.

No entiendo a que te refieres con lo de las Interfaces.
  #11 (permalink)  
Antiguo 05/10/2007, 22:32
 
Fecha de Ingreso: abril-2005
Ubicación: Ramos Mejía
Mensajes: 113
Antigüedad: 19 años
Puntos: 0
Re: Argumentos opcionales

Cita:
Iniciado por GreenEyed Ver Mensaje
No entiendo a que te refieres con lo de las Interfaces.

Las interfaces son contratos con operaciones que las clases que implementan dichas interfaces deben cumplir. Son uno de los mecanismos que mejor garantizan los principios básicos de la programación orientada a objetos: El polimorfismo.

"Una interfaz múltiples métodos"

También, las Interfaces, son un mecanismo que permite garantizar el principio de Liskov; este principio del diseño dice que "Toda Generalización debe poder ser reemplazada por sus especializaciones" o "Toda superclase debe poder ser reemplazada por por sus sub-clases".

En cuanto a la diferencia entre x.nombre y x.getNombre() te paso a explicar una enorme diferencia: La construcción de árboles de objetos con raíz.

no es lo mismo colocar:
Empresa.Administracion.Deudas.Informes.imprimir()
Que:
Empresa.getAdministracion().getDeudar().getInforme s().imprimir();
Es decir,... que la notación en forma de getters y setters es más clara cuando se tiene que mantener la diferencia entre un objeto rama y un método de un objeto de esa rama.

Supongo, sin ofender, que no tenés mucha experiencia en ramas de objetos. Pero eso no es requisito para ser buen programador ni mucho menos. Sólo digo que en Java se debe implementar lo mismo de una forma diferente.

Básicamente, todo proyecto responde a dos conjuntos de requerimientos:

Funcionales: Necesidades puntuales y específicas tales cómo "alta de clientes, modificaciones, etc".

No funcionales: Esas son las peores: "Trazabilidad, velocidad, seguridad, persistencia, estabilidad, modularidad, extensibilidad, etc."

En el caso de los Requerimientos no funcionales, no importa qué tan bueno programador seas si no sabés diseño de sistemas y me refiero no a sistemas informáticos o software necesariamente. Y para garantizar esas cosas como la extensibilidad o la solidez se necesitan implementar mecanismos que van mucho más allá de los lenguajes. Por eso te recomiendo ver cosas como Liskov, Patrones de diseño y Abierto/Cerrado.

Mi paso por java (espero quedarme a vivir) apunta a utilizarlo en virtud de esos requerimientos que son los más importantes y por eso cuestiono las herramientas y mecanismos de java.

Disculpá lo extenso y seguiré aprendiendo Java que creo es uno de los pocos lenguajes que tienen los mecanismos necesarios para crear un buen sistema.
  #12 (permalink)  
Antiguo 06/10/2007, 08:59
Avatar de chuidiang
Colaborador
 
Fecha de Ingreso: octubre-2004
Mensajes: 3.774
Antigüedad: 19 años, 7 meses
Puntos: 454
Re: Argumentos opcionales

Hola:

Supongo que GreenEyed sabe lo que son las interfaces. Lo que creo que no entendía es esta frase

Cita:
Pero, al ver que en cosas tan importantes como las Interfaces (polimorfismo y esas cosas) no hay forma de implementar setters (en los lenguajes que lo tienen) se convierten en algo problemático.
más que nada, porque a mí también me ha resultado extraña ... . No sé en qué impiden las interfaces poner setters y getters...

Por cierto, no sabía lo de los varargs...

Se bueno.
__________________
Apuntes Java
Wiki de Programación
  #13 (permalink)  
Antiguo 06/10/2007, 13:22
 
Fecha de Ingreso: abril-2005
Ubicación: Ramos Mejía
Mensajes: 113
Antigüedad: 19 años
Puntos: 0
Re: Argumentos opcionales

Perdón por no comprender entonces:

Aclaro la cita:

En ningún lenguaje que yo conozca (Java, C#, C, C++, Visual Basic, .net, etc) se permiten setters o getters en una interfaz.
  #14 (permalink)  
Antiguo 06/10/2007, 15:14
Avatar de TolaWare
Colaborador
 
Fecha de Ingreso: julio-2005
Mensajes: 4.352
Antigüedad: 18 años, 9 meses
Puntos: 24
Re: Argumentos opcionales

Cita:
Iniciado por jorgelujanm Ver Mensaje
Perdón por no comprender entonces:

Aclaro la cita:

En ningún lenguaje que yo conozca (Java, C#, C, C++, Visual Basic, .net, etc) se permiten setters o getters en una interfaz.
En realidad se permiten colocar, pero no se les puede implementar ya que los métodos de las interfaces son abstractos (y además porque la interfaz no tiene atributos, por lo que no habria que setear/getear).

Me parece que este hilo se fue totalmente de su tema inicial.
  #15 (permalink)  
Antiguo 06/10/2007, 16:04
 
Fecha de Ingreso: abril-2005
Ubicación: Ramos Mejía
Mensajes: 113
Antigüedad: 19 años
Puntos: 0
Re: Argumentos opcionales

Estoy totalmente de acuerdo.

Este foro es genial.
  #16 (permalink)  
Antiguo 06/10/2007, 17:47
 
Fecha de Ingreso: octubre-2003
Mensajes: 3.578
Antigüedad: 20 años, 6 meses
Puntos: 51
Re: Argumentos opcionales

Cita:
Iniciado por jorgelujanm Ver Mensaje
...Supongo, sin ofender, que no tenés mucha experiencia en ramas de objetos...
Naaaa... 11 años programando con Java y antes de eso algun tiempo con SmallTalk etc. así que apenas entiendo de que va la cosa.

Y los interfaces no es que no se permitan "implementar" setters o getters... es que no se puede implementar nada. Y si, como dice Chuidiang alguna idea tengo de que son los interfaces, es la frase esa a la que no le veia/veo el sentido.

Lo que pasa es que tanto principio teorico de diseño está muy bien para dar charlas, pero los sistemas hay que implementarlos en la realidad, ya que ahi es donde los sistemas han de funcionar. La tozuda realidad suele inyectarle a uno una buena dosis de pragmatismo .

S!
  #17 (permalink)  
Antiguo 06/10/2007, 21:22
Avatar de TolaWare
Colaborador
 
Fecha de Ingreso: julio-2005
Mensajes: 4.352
Antigüedad: 18 años, 9 meses
Puntos: 24
Re: Argumentos opcionales

Cita:
Iniciado por GreenEyed Ver Mensaje
Naaaa... 11 años programando con Java y antes de eso algun tiempo con SmallTalk etc. así que apenas entiendo de que va la cosa.

Y los interfaces no es que no se permitan "implementar" setters o getters... es que no se puede implementar nada. Y si, como dice Chuidiang alguna idea tengo de que son los interfaces, es la frase esa a la que no le veia/veo el sentido.

Lo que pasa es que tanto principio teorico de diseño está muy bien para dar charlas, pero los sistemas hay que implementarlos en la realidad, ya que ahi es donde los sistemas han de funcionar. La tozuda realidad suele inyectarle a uno una buena dosis de pragmatismo .

S!
Pienso que el diseño de software es necesario. Hoy en día estoy en un proyecto de software (en JSP) y justamente hoy detecte algunos bugs bastantes jodidos que se hubiesen evitado con un poco de diseño preliminar.

Vale aclarar que el único diseño que ahí, es el de diagramas de clase de negocio y está hecho porque yo lo llevo y mantengo.

Se pueden evitar muchísimos dolores de cabeza haciendo un diagrama de secuencia antes de programar un caso de uso. Muchos lo ven como una pérdida de tiempo, pero desde mi punto de vista es una inversión que inicial de tiempo que te ahorrará bastante tiempo en el futuro.

EL dilema está en que hay que saber hasta donde enroscarnos con el diseño. Hay que analizar que cosas es necesario analizar, que componentes del programa pueden ser críticos.

En resumen hay que encontrar un balance entre diseño e implementación. Como dijo chuidiang en el post anterior:

Cita:
Lo que pasa es que tanto principio teórico de diseño está muy bien para dar charlas, pero los sistemas hay que implementarlos en la realidad, ya que ahí es donde los sistemas han de funcionar.
  #18 (permalink)  
Antiguo 07/10/2007, 07:58
 
Fecha de Ingreso: octubre-2003
Mensajes: 3.578
Antigüedad: 20 años, 6 meses
Puntos: 51
Re: Argumentos opcionales

No he dicho que el diseño no sirva o que no haya que hacerlo, valgame Dios. Sólo que las discusiones teóricas hay que despues adaptarlas a lo práctico y, como bien dices tú, hallar un equilibrio.

Aplicar patrones de diseño "por que sí" es tan malo como programar sin pensar y basta verlo en tus propias palabras. Crees que es bueno aplicar X por que te ahorrará dolores de cabeza... en el mundo real, no por que alguien escribiera en un libro que es lo mejor despues de la rueda así por que sí sin ninguna base.

S!
  #19 (permalink)  
Antiguo 08/10/2007, 02:12
Avatar de elAntonie  
Fecha de Ingreso: febrero-2007
Mensajes: 894
Antigüedad: 17 años, 2 meses
Puntos: 10
Re: Argumentos opcionales

Ambos teneis razon, en parte.

Todo eso del analisis, diseño, captura de requisitos, documentacion ... si se llevar a cabo se ahorrarian muchos dolores de cabeza.

Pero ya sabeis cual es la frase que prima en este mundo "Tiene que estar para ayer".

El dia que me encuentre con un proyecto que tenga eso, hare puenting (y tengo vertigo)

Saludos.
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 12:51.