Desculpem .. escrevi o e-mail anterior tarde da noite e não reparei que a linha abaixo não faz muito sentido:
 
Set dfNomeProduto = oNF[nIndice].gotoPrimeiro( )
 
o correto deveria ser
 
if oNF[nIndice].gotoPrimeiro( )
 
ou Call oNF[nIndice].gotoPrimeiro( )
 
 
 
Abraços,
Lairton

 
Em 11/01/06, Lairton Júnior <[EMAIL PROTECTED]> escreveu:
Leandro, é como eu disse no meu e-mail inicial....
 
"Dessa forma, a variável de instância __inCodigo não é mostrada nos assistentes de codificação, impedindo que o programador saiba que elas existem e que venha a utilizá-las. Porém, caso ele faça uso na instância de uma dessas variáveis ou funções, o SQLWindows permitirá normalmente que seja utilizada. Este bloqueio é apenas visual nos assistentes. "
 
Portanto não há como criar variáveis private no SQLWindows.
 
 
Quanto a questão levantada por você sobre Interface ... não entendi muito bem sua colocação quanto a interface ( pois isso sempre foi citado nos manuais da Gupta como um exemplo de polimorfismo) mas ... para que vc force a execução do método fOK( ) que foi definido na instância .. basta utilizar o conceito late bound, realizando a chamada do método desta forma:
 
call ..fOK( )
 
Assim, o compilador executará o fOK() da instância e não o da classe.
 
Devo lembrar que, isso não caracteriza obrigatoriedade, mas sim flexibilidade.
 
Porém, se o que vc tentou demonstrar foi a obrigatoriedade de que seja implementado o fOK() na instância eu sugiro que vc efetue um teste no método fOK() definido na classe e que nunca deveria ser ativado não é mesmo. Faça um teste que se for executado mostre uma mensagem de erro de programação, desta forma o desenvolvedor, assim que testar a aplicação saberá que esqueceu de algo.
 
Vou tentar mostrar a flexibilidade e depois a obrigatoriedade:
 
Classe Base: Animal
Método: Mover
Evento: OnMover
Ação: Call ..Mover( )
 
Classe: Peixe
Derivated from: Animal
Método: Mover
 
Classe: Gente
Derivated from: Animal
Método:
 
Classe: Pássaro
Derivated from: Animal
Método: Mover
 
Imagine que, como somos humanos e estamos codificando essa aplicação ... codificamos o método mover na classe base para mover andando, como a maioria de nós faz :)
 
Mas em tempo de execução, essa aplicação poderá ter como instância um peixe ou um passarinho (só pra exemplificar) ... como eles andam de forma diferente ... cada classe implementou seu próprio método mover( ) ... assim cada um anda do jeito que sabe ou gosta :)
 
Mas observe que a classe Gente, não implementa o método Mover( ) ... pois as instancias dessa classe devem mover-se do modo default da classe.
 
Acho isso bem interessante.
 
Mas ... caso nosso desejo seja a Obrigatoriedade de que se implemente o método mover( ) em todas as subclasses e/ou instâncias ... o método mover( ) da classe Animais poderia ser implementado assim:
 
Classe Base: Animal
Método: Mover
  Actions
     Call MessageBox( "Querido Programador, você esqueceu de implementar o método mover( ) na classe ou na instância." )
     Call SalQuit( )
 
 
caso o programador "esqueça" de codificar o mover( ) nas instâncias a aplicação avisará e imediatamente será interrompida.
 
Eu gostaria de destacar aqui mais uma vez que esses recursos de OOP são implementados no SQLWindows de forma flexivel (ou incompleta para alguns) bastando que sejam implementados alguns "workarounds" para que o SQLWindows faça o que queremos.
 
:)
 
Ivan,
Para utilizar o tipo de dado Variant vc precisa incluir a biblioteca Automation.apl na sua aplicação.
 
Gerson,
Caso vc queira sugerir algum aspecto a ser comentado, fique a vontade, caso eu coheça terei maior prazer em ajustar para que implementemos em SQLWindows.
 
Realmente esta conversa sobre OOP no SQLWindows é muito interessante, dá para esclarecer algumas coisas :)
 
Um recurso que acho muito interessante no SQLWindows e quem não sei se tem "nome" (OOP falando) é a possibilidade de ter trechos de código escritos assim:
 
Variables: oNF [*]
Actions
Set dfNomeProduto = oNF[nIndice].gotoPrimeiro( )
Set colNomeProduto = oNF[nIndice].oItem( ).GetNomeItem( )
 
Isso é possível pois dá para uma função retornar um objeto.
 
Outra coisa legal, mas que não tem muito a ver com OOP é
 
Carregar o resultado de um select em vetores sendo um vetor para cada coluna e fazendo a atribuição da coluna do banco para o vetor diretamente no comando select.
 
Call SQLPrepareAndExecute( hSql, "Select dbCol1, dbCol2,.. INTO :as1[n], :as2[n], ... " )
While SqlFetchNext( hSql ...)
    Set n = n + 1
 
Estas três linhas são o suficiente :)
 
 
 
 
 
Abraços,
Lairton.
 

 
Em 10/01/06, [EMAIL PROTECTED] <[EMAIL PROTECTED] > escreveu:






Leandro,

Você possui algum exemplo aplicável para polimorfismo? O que vem a ser um
Factory ?

Obrigado pela ajuda...

Ivan Napolitano

<<< Memo from [EMAIL PROTECTED]@Internet on 09 January, 2006, 22:45
Monday >>>


[EMAIL PROTECTED]@Internet on 9 Jan 2006, 22:45 Monday

Please respond to sqlwin@virtualand.net@Internet

Sent by [EMAIL PROTECTED]


To:    sqlwin
cc:      (bcc: Ivan Napolitano)
Subject:    Re: [sqlwin] Classes em Gupta


- Declarar atributos "private" nas functional class onde somente ela
poderia visualizar diretamente o atributo

Não... todos os metodos e variaveis de instancia são publicos.

- Existe uma forma de se inicializar os atributos de uma classe no momento
em que ela é instanciada. Equivalente ao método construtor do Java

Você pode criar um metodo chamado create e ao utilizar chamar este metodo.
Não tem metodo construtor.

- É possível utilizar polimorfismo no Centura, ou então, o mesmo parâmetro
de um método pode receber objetos diferentes ?

Sim poliformismo e perfeitamente aceito pelo SQLWindows.

Com  SQLWindows você utilizar todos os recurso da OOP... porem alguns
conceitos são diferentes. como propriedade de proteção dos metodos e
variaveis, e a forma como e instanciada. No SQL Windows assim que vc
declara
ela e colocada em memoria, portanto e indicado usar os objetos dentro de
funções, ao inves de colocar no frm ou app.

No SQLWIndow tambem é possivel trabalhar com Factory.

Espero ter ajudado

Atenciosamente
Leandro Neves


Espero ter ajudado.

Leandro Neves


On 1/9/06, [EMAIL PROTECTED] < [EMAIL PROTECTED]> wrote:
>
>
>
>
>
> Pessoal,
>
> Gostaria de obter algumas informações/dicas sobre programação orientada a
> objetos no Gupta. Algum de vocês sabe se é possível:
>
> - Declarar atributos "private" nas functional class onde somente ela
> poderia visualizar diretamente o atributo
>
> - É possível utilizar polimorfismo no Centura, ou então, o mesmo
parâmetro
> de um método pode receber objetos diferentes ?
>
> Valeu,
>
> Ivan Napolitano
>
>
> ==============================================
> Lista de Centura SQLWindows
> Administrador : [EMAIL PROTECTED]
> [ http://www.centuraexplorer.com ]
> Para sair desta lista mande mensagem para:
> [EMAIL PROTECTED] sem nada no Subject e
> com o comando a seguir no corpo da msg:
> "unsubscribe sqlwin" (sem as aspas)
> ==============================================
>
(See attached file: C.htm)


To:    sqlwin@virtualand.net@Internet
cc:     (bcc: CN=Ivan Napolitano/OU=SAO-SP/OU=BR/OU=Marsh/O=MMC)
From:  [EMAIL PROTECTED]@Internet






--

Lairton N de Almeida Jr.
[EMAIL PROTECTED]



--

Lairton N de Almeida Jr.
[EMAIL PROTECTED]

Responder a