Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Otros entornos y lenguajes > JAVA
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 15-01-2008
Mick Mick is offline
Miembro
 
Registrado: may 2003
Posts: 405
Poder: 22
Mick Va por buen camino
Intentar que una funcion/metodo haga algo distinto dependiendo de la funcion desde la que es llamada es una aberracion. Si una funcion debe comportarse de distinta forma precisamente para eso estan los parametros: pasarle informacion a la funcion, que necesita para hacer lo que sea.

Ahora si, seria interesante saber exactamente que se requiere que haga esa funcion, porque puede haber otras soluciones mas logicas ademas de la de pasar un parametro, pero dependeria de cada caso concreto (por ejemplo sobrecargar metodos, usar clases hijas, etc).

Saludos
Responder Con Cita
  #2  
Antiguo 16-01-2008
Avatar de oracle
oracle oracle is offline
Miembro
 
Registrado: feb 2005
Posts: 99
Poder: 20
oracle Va por buen camino
Gracias Mick por tu respuesta, si lo hubiese sabido que lo que estaba preguntando era una "aberracion" ni lo hubiese mencionado, en fin ya me he tenido que decidir por la via de un parametro adicional asi que gracias otra vez...

//oracle
__________________
El único hombre que no se equivoca es el que nunca hace nada.
Responder Con Cita
  #3  
Antiguo 16-01-2008
Fate Fate is offline
Invitado
 
Registrado: dic 2007
Posts: 108
Poder: 0
Fate Va por buen camino
Suena un tanto extraño

1) Los metodos en java puedes distinguirlos ya sea por el numero de parametros:

Código:
- public void doIt(String x, String y)
- public void doIt(String x, String y, int m)
2) Los metodos en java puedes distinguirlos ya sea por el tipo de parametros:

Código:
- public void doIt(String x, String y)
 - public void doIt(String x, Integer y)
Bueno, quizas ya conocias esto(probablemente), lo cual es lo mas cercano que puedo yo brindarte como solucion.

Sin embargo, el hacer lo que has descrito con el método F1() que has dicho me parece que es una mala programación, porque asi estas condicionando a tu método F1() a funcionar en base a F2() y a F3(), pero, pierdes el sentido de lo que es en escencia un objeto y su capacidad de ser rehusado.

Creo que deberias volver a analizar tus métodos, cualquier cosa, aqui sigo...



_______________"Dios esta muerto y su cadaver apesta, su amor por los hombres le ha matado"
Responder Con Cita
  #4  
Antiguo 16-01-2008
Avatar de __hector
[__hector] __hector is offline
Miembro Premium
 
Registrado: may 2003
Ubicación: Santo Domingo, Rep. Dom.
Posts: 1.075
Poder: 23
__hector Va por buen camino
Podrias quizas tambien utilizar programacion orientada a aspectos (AOP) para esto. Mira a ver si AspectJ te sirve.
__________________
Héctor Geraldino
Software Engineer
Responder Con Cita
  #5  
Antiguo 17-01-2008
Avatar de oracle
oracle oracle is offline
Miembro
 
Registrado: feb 2005
Posts: 99
Poder: 20
oracle Va por buen camino
Wink

Bueno amigos, para que no haya dudas, aqui os dejo lo que termine haciendo, lo de hacer 3 funciones fue solo una idea, ya que lo unico que yo necesitaba que cambiara era solo una linea de codigo en dependencia desde donde fuera llamada la funcione, aqui os la dejo:

Código:
public void AddAtomo(Atom A, boolean M){
    
        if(viewer.getMolecula().EsAdyacente(A, this)){

             if(listAtomos.size() == 0){
                listAtomos.add(A);
                matrizAdj = new int[1][1];
                matrizAdj[0][0] = 0;
            ............................
            }
            else
            {
            ...........................
           }
            else if(M){
                viewer.showMessage("Error, seleccione un fragmento correcto", "Accion Invalida", 2);
            }                
            
    };
Lo que sucedia era que en ocasiones yo hacia esta llamada desde un formulario, en este caso necesitaba lanzar un mensaje en algunos casos, y de la otra forma era cuando necesitaba utilizar esta misma funcion de manera interna, para otro proposito pero sin lanzar el mensaje.....Espero hayamos quedado claros todos....

Un saludo


oracle
__________________
El único hombre que no se equivoca es el que nunca hace nada.
Responder Con Cita
  #6  
Antiguo 17-01-2008
Avatar de oracle
oracle oracle is offline
Miembro
 
Registrado: feb 2005
Posts: 99
Poder: 20
oracle Va por buen camino
Wink

Bueno amigos, para que no haya dudas, aqui os dejo lo que termine haciendo, lo de hacer 3 funciones fue solo una idea, ya que lo unico que yo necesitaba que cambiara era solo una linea de codigo en dependencia desde donde fuera llamada la funcione, aqui os la dejo:

Código:
public void AddAtomo(Atom A, boolean M){
    
        if(viewer.getMolecula().EsAdyacente(A, this)){

             if(listAtomos.size() == 0){
                listAtomos.add(A);
                matrizAdj = new int[1][1];
                matrizAdj[0][0] = 0;
            ............................
            }
            else
            {
            ...........................
           }
            else if(M){
                viewer.showMessage("Error, seleccione un fragmento correcto", "Accion Invalida", 2);
            }                
            
    };
Lo que sucedia era que en ocasiones yo hacia esta llamada desde un formulario, en este caso necesitaba lanzar un mensaje en algunos casos, y de la otra forma era cuando necesitaba utilizar esta misma funcion de manera interna, para otro proposito pero sin lanzar el mensaje.....Espero hayamos quedado claros todos....

En cuanto a la AOP Hector creo que no es conveniente en mi caso mezclarlo, ya que esto desarrollando con POO, aunque siempre seria bueno analizar las alternativas.....

Un saludo


oracle
__________________
El único hombre que no se equivoca es el que nunca hace nada.
Responder Con Cita
  #7  
Antiguo 17-01-2008
Mick Mick is offline
Miembro
 
Registrado: may 2003
Posts: 405
Poder: 22
Mick Va por buen camino
La solucion propuesta no me parece correcta, se esta mezclando dos cosas diferentes en una misma funcion no se debe mezclar el interface con la implementacion.

Que pasaria si en lugar de mostrar o no mostrar un simple mensaje de error fuese necesario hacer muy diferentes acciones segun desde donde se llame ? , por ejemplo en unos casos podriamos necesitar enviar por correo electronico un aviso, en otros poner un simple mensaje, en otros casos no hacer nada, en otros mostrar el error de otra forma distinta a una simple ventana con un mensaje, etc. tendrias que pasarle a esa funcion un monton de parametros no una simple variable booleana.

Lo logico en ese caso es que la funcion devuelva un valor verdadero o falso que indique si ha hecho lo que tenga que hacer, y el mensaje se muestre desde el formulario que hace la llamada a esa funcion en funcion del resultado devuelto por la funcion.

Incluso podria paracer mas logico que el siguiente codigo tambien estuviese fuera de la funcion:

Código:
 if(!viewer.getMolecula().EsAdyacente(A, this)){
                viewer.showMessage("Error, seleccione un fragmento correcto", "Accion Invalida", 2);
            }
Saludos
Responder Con Cita
  #8  
Antiguo 17-01-2008
Avatar de Ñuño Martínez
Ñuño Martínez Ñuño Martínez is offline
Moderador
 
Registrado: jul 2006
Ubicación: Ciudad Catedral, Españistán
Posts: 6.000
Poder: 25
Ñuño Martínez Tiene un aura espectacularÑuño Martínez Tiene un aura espectacular
Supongo que la máquina virtual de Java tiene pila y que también es posible obtener la "dirección" de una función. Si es así, entonces podría hacerse obteniendo la dirección de las funciones F2() y F3(). Luego, en F1(), se extrae la dirección del llamante de la pila y se vuelve a apilar para evitar problemas. Al menos en las máquinas "reales" puede hacerse.

[edit]En Pascal sería algo así:

Código Delphi [-]
PROCEDURE F1;
VAR
  DireccionFuncion: POINTER;
BEGIN
  ASM
    POP AX;
    PUSH AX;
    MOVE @DireccionFuncion, AX;
  END;
  IF (DireccionFuncion = POINTER (@F2)) THEN
  BEGIN
  ...
  END
  ELSE IF (DireccionFuncion = POINTER (@F3)) THEN
  BEGIN
  ...
  END;
  ...
END;
__________________
Proyectos actuales --> Allegro 5 Pascal ¡y Delphi!|MinGRo Game Engine

Última edición por Ñuño Martínez fecha: 17-01-2008 a las 12:00:54.
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Funcion para buscar cadena dentro de otra cadena y el numero de veces flystar Varios 3 02-07-2007 22:48:08
Llamar de una función a otra jorgegetafe Varios 6 05-06-2007 15:53:19
Como invoco un documento PDF ASAPLTDA Varios 3 09-04-2007 03:46:02
Funcion del tabulador con otra tecla gryphus OOP 2 18-04-2005 11:00:44
ejecutar una funcion d otra Unit negama Varios 2 08-09-2003 19:32:18


La franja horaria es GMT +2. Ahora son las 12:47:20.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi