Functions com o mesmo nome!

Discussão em 'Progress 4GL' iniciado por rbaselio, Janeiro 5, 2011.

  1. rbaselio

    rbaselio Membro Participativo

    Existe alguma forma de criar funções de mesmo mudando apenas o tipo(s) do(s) parâmetro(s) passados??
    Similar a sobrecarga em Java.

    Obrigado.

    Roberto Lopes.
  2. kirchner

    kirchner Membro Participativo Moderador

    Roberto,

    A ABL tem algumas extensões OO, pelo que eu vi dá pra sobrecarregar sim. Nunca tentei. Se eu conseguir te mando um exemplo.
  3. Rodrigo Rossetto

    Rodrigo Rossetto Membro Participativo

    Via OO deve ter como.

    Existe a função dinâmica, não funciona do mesmo jeito, mas pode ser útil.
    Veja um exemplo:

    Código:
    /* Requires a connection to the Sports2000 database. Define data items */
    DEFINE VARIABLE funcs   AS CHARACTER NO-UNDO EXTENT 5   
        INITIAL ["firstrec","lastrec","nextrec","prevrec","quitting"].
    
    DEFINE VARIABLE action  AS CHARACTER NO-UNDO LABEL "Action" FORMAT "x"   INITIAL "N".
    DEFINE VARIABLE idx     AS INTEGER   NO-UNDO.
    DEFINE VARIABLE alldone AS LOGICAL   NO-UNDO.
    
    FORM WITH FRAME x SIDE-LABELS 2 COLUMNS 1 DOWN COLUMN 25.
    
    /* Define user-defined functions */
    FUNCTION dispcust RETURNS LOGICAL:  
        DISPLAY Customer EXCEPT Customer.Comments WITH FRAME X SCROLLABLE.
    END.
    
    FUNCTION firstrec RETURNS LOGICAL:  
        FIND FIRST Customer.
        dispcust().
        RETURN yes.
    END.
    
    FUNCTION lastrec RETURNS LOGICAL:  
        FIND LAST Customer.
        dispcust().
        RETURN yes.
    END.
    
    FUNCTION nextrec RETURNS LOGICAL:  
        FIND NEXT Customer NO-ERROR.
        IF AVAILABLE Customer THEN  
            dispcust().
        RETURN AVAILABLE(Customer).
    END.
    
    FUNCTION prevrec RETURNS LOGICAL:  
        FIND PREV Customer NO-ERROR.
        IF AVAILABLE Customer THEN  
            dispcust().
        RETURN AVAILABLE(Customer).
    END.
    
    FUNCTION quitting RETURNS LOGICAL:  
        alldone = yes.
        RETURN no.
    END.
    
    /* Main routine */
    REPEAT WHILE NOT alldone:  
        UPDATE action 
            HELP "Enter F(irst), L(ast), N(ext), P(rior), or Q(uit) to navigate.".
    
        idx = LOOKUP(action,"f,l,n,p,q").
    
        IF idx EQ 0 THEN 
        DO:    
            MESSAGE "Enter F(irst), L(ast), N(ext), P(rior), or Q(uit)"  VIEW-AS ALERT-BOX.
            NEXT.
        END.
    
        DISPLAY DYNAMIC-FUNCTION(funcs[idx]) LABEL "Record Found?".
    END.
  4. CarlosNobrega

    CarlosNobrega Membro Participativo

    Você pode utilizar o mecanismo de sobrecarga de métodos desde que seja um arquivo ".cls" ou seja uma classe.

    No 4GL básico não.

    Segue um exemplo do manual Progress

    USING acme.myObjs.*.
    USING acme.myObjs.Common.*.
    USING acme.myObjs.Interfaces.*.
    CLASS acme.myObjs.CustObj INHERITS CommonObj
    IMPLEMENTS IBusObj:
    ...
    DEFINE PROTECTED TEMP-TABLE ttCustomer NO-UNDO
    FIELD ...
    ...
    /* First version of printObj prints a single copy of a report */
    METHOD PUBLIC VOID printObj ( ):
    OUTPUT TO PRINTER.
    DISPLAY dtTimestamp.
    FOR EACH ttCustomer:
    DISPLAY ttCustomer.
    END.
    OUTPUT CLOSE.
    PublishOutputGenerated("One copy of report sent to printer").
    END METHOD.
    /* Second version of printObj takes an integer parameter representing the
    number of copies to print. */
    METHOD PUBLIC VOID printObj (INPUT piCopies AS INTEGER):
    DEFINE VARIABLE iCnt AS INTEGER NO-UNDO.
    OUTPUT TO PRINTER.
    IF piCopies <> 0 THEN
    DO iCnt = 1 TO ABS(piCopies):
    DISPLAY dtTimestamp.
    FOR EACH ttCustomer:
    DISPLAY ttCustomer.
    END.
    END.
    OUTPUT CLOSE.
    PublishOutputGenerated(STRING(piCopies)
    + " copies of report sent to printer").
    END METHOD.
    ...
    END CLASS.


    no site da progress tem os PDFs para baixa...

    localize o PDF
    OpenEdge® Development:
    Object-oriented Programming

    abraço

Compartilhe esta Página