Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
ADVPL Avanado
(Capacitao Interna)
ESTRUTURA DO TREINAMENTO
OBJETIVOS DO CURSO ............................................................................................................................... 11
MDULO 05: Introduo orientao objetos ........................................................................................ 12
1.
Definies ................................................................................................................................. 12
1.2.
1.3.
O
1.3.1.
1.3.2.
1.3.3.
1.3.4.
2.
3.
2.2.
2.3.
3.2.
-2ADVPL Avanado
6.
7.
6.2.
6.3.
-3ADVPL Avanado
8.2.
8.3.
Aplicaes com controle de comunio com o Banco de Dados ............................................... 249
8.3.1. MaWndBrowse com Alias Temporrio gerado por Query ............................................................... 249
Exemplo: MaWndBrowse com Alias Temporrio gerado por Query ..................................................... 250
8.3.2. Banco de dados de interface .................................................................................................... 261
Consideraes relevantes sobre as funes TCLink() e TCSetConn() .................................................. 261
Consideraes complementares sobre o conceito de Banco de Dados de Interface .............................. 263
8.4.
9.
11.
11.1.
-9ADVPL Avanado
- 10 ADVPL Avanado
OBJETIVOS DO CURSO
Objetivos especficos do curso:
Ao final do curso o treinando dever ter desenvolvido os seguintes conceitos, habilidades e
atitudes:
a) Conceitos a serem aprendidos
- 11 ADVPL Avanado
1.1. Definies
Objeto
Um objeto uma entidade do mundo real que tem uma identidade. Objetos podem
representar entidades concretas (um arquivo no meu computador, uma bicicleta) ou entidades
conceituais (uma estratgia de jogo, uma poltica de escalonamento em um sistema
operacional). Cada objeto ter sua identidade significa que dois objetos so distintos mesmo
que eles apresentem exatamente as mesmas caractersticas.
Embora objetos tenham existncia prpria no mundo real, em termos de linguagem de
programao um objeto necessita um mecanismo de identificao. Esta identificao de objeto
deve ser nica, uniforme e independente do contedo do objeto. Este um dos mecanismos
que permite a criao de colees de objetos, as quais so tambm objetos em si.
A estrutura de um objeto representada em termos de atributos. O comportamento de um
objeto representado pelo conjunto de operaes que podem ser executadas sobre o objeto.
- 12 ADVPL Avanado
Classe
Objetos com a mesma estrutura e o mesmo comportamento so agrupados em classes. Uma
classe uma abstrao que descreve propriedades importantes para uma aplicao e
simplesmente ignora o resto.
Cada classe descreve um conjunto (possivelmente infinito) de objetos individuais. Cada objeto
dito ser uma instncia de uma classe. Assim, cada instncia de uma classe tem seus prprios
valores para cada atributo, mas dividem os nomes dos atributos e mtodos com as outras
instncias da classe. Implicitamente, cada objeto contm uma referncia para sua prpria
classe, em outras palavras, ele sabe o que ele .
- 13 ADVPL Avanado
Polimorfismo
Polimorfismo significa que a mesma operao pode se comportar de forma diferente em
classes diferentes. Por exemplo, a operao move quando aplicada a uma janela de um
sistema de interfaces tem um comportamento distinto do que quando aplicada a uma pea de
um jogo de xadrez. Um mtodo uma implementao especfica de uma operao para uma
certa classe.
Polimorfismo tambm implica que uma operao de uma mesma classe pode ser
implementada por mais de um mtodo. O usurio no precisa saber quantas implementaes
existem para uma operao, ou explicitar qual mtodo deve ser utilizado: a linguagem de
programao deve ser capaz de selecionar o mtodo correto a partir do nome da operao,
classe do objeto e argumentos para a operao. Desta forma, novas classes podem ser
adicionadas sem necessidade de modificao de cdigo j existente, pois cada classe apenas
define os seus mtodos e atributos.
No mundo real, alguns objetos e classes podem ser descritos como casos especiais, ou
especializaes, de outros objetos e classes. Por exemplo, a classe de computadores pessoais
com processador da linha 80x86 uma especializao de computadores pessoais, que por sua
vez uma especializao de computadores. No desejvel que tudo que j foi descrito para
computadores tenha de ser repetido para computadores pessoais ou para computadores
pessoais com processador da linha 80x86.
Herana
Herana o mecanismo do paradigma de orientao a objetos que permite compartilhar
atributos e operaes entre classes baseada em um relacionamento hierrquico. Uma classe
pode ser definida de forma genrica e depois refinada sucessivamente em termos de
subclasses ou classes derivadas. Cada subclasse incorpora, or herda, todas as propriedades de
sua superclasse (ou classe base) e adiciona suas propriedades nicas e particulares. As
propriedades da classe base no precisam ser repetidas em cada classe derivada. Esta
capacidade de fatorar as propriedades comuns de diversas classes em uma superclasse pode
reduzir dramaticamente a repetio de cdigo em um projeto ou programa, sendo uma das
principais vantagens da abordagem de orientao a objetos.
- 14 ADVPL Avanado
- 15 ADVPL Avanado
- 16 ADVPL Avanado
1.3.2. Atributos
Um atributo um valor de dado assumido pelos objetos de uma classe. Nome, idade e peso
so exemplos de atributos de objetos Pessoa. Cor, peso e modelo so possveis atributos de
objetos Carro. Cada atributo tem um valor para cada instncia de objeto. Por exemplo, o
atributo idade tem valor ``29'' no objeto Pedro Y. Em outras palavras, Pedro Y tem 29 anos de
idade. Diferentes instncias de objetos podem ter o mesmo valor para um dado atributo.
Cada nome de atributo nico para uma dada classe, mas no necessariamente nico entre
todas as classes. Por exemplo, ambos Pessoa e Companhia podem ter um atributo chamado
endereo.
No diagrama de classes, atributos so listados no segundo segmento da caixa que representa
a classe. O nome do atributo pode ser seguido por detalhes opcionais, tais como o tipo de
dado assumido e valor default. A Figura abaixo mostra esta representao.
- 17 ADVPL Avanado
- 18 ADVPL Avanado
- 19 ADVPL Avanado
CLASS
CLASSDATA
CONSTRUCTOR
DATA
ENDCLASS
EXPORT
FROM
HIDDEN
METHOD
PROTECTED
SELF
CLASS
Descrio
Sintaxe 1
CLASS <nome_da_classe>
Sintaxe 2
CLASSDATA
Descrio
Sintaxe 1
CONSTRUCTOR
Descrio
Sintaxe
- 20 ADVPL Avanado
DATA
Descrio
Sintaxe
DATA <nome_do_atributo>
ENDCLASS
Descrio
Sintaxe
ENDCLASS
EXPORT
Descrio
Simular
EXPORT ou [PUBLIC]
Sintaxe 1
DATA cNome
Sintaxe 2
FROM
Descrio
Sintaxe
HIDDEN
Descrio
Simular
HIDDEN ou [LOCAL]
Sintaxe
METHOD
Descrio
Sintaxe 1
METHOD <nome_do_mtodo()>
Sintaxe 2
- 21 ADVPL Avanado
PROTECTED
Descrio
Simular
PROTECTED ou [READONLY]
Sintaxe
SELF
Descrio
Sintaxe
Return SELF
Operadores especficos
Exemplo 1
cNome := oAluno:sNome
Exemplo 2
cNota := oAluno:GetNota(cCurso)
::
Exemplo
IF nPosCurso > 0
nNota := ::aCursos[nPosCurso][2]
ENDIF
Return nNota
- 22 ADVPL Avanado
- 23 ADVPL Avanado
Exemplo:
#include protheus.ch
CLASS Pessoa()
DATA cNome
DATA nIdade
METHOD Create() CONSTRUCTOR
METHOD SetNome()
METHOD SetIdade()
ENDCLASS
- 24 ADVPL Avanado
Manipulao de atributos
Os atributos definidos para uma classe com a utilizao da palavra reservada DATA em sua
declarao podem ser manipulados por seus mtodos utilizando o operador ::.
A utilizao deste operador permite ao interpretador ADVPL diferenciar variveis comuns
criadas pelas funes e mtodos que utilizam este objeto dos atributos propriamente ditos.
Exemplo:
#include protheus.ch
CLASS Pessoa()
DATA cNome
DATA nIdade
METHOD Create() CONSTRUCTOR
METHOD SetNome()
METHOD SetIdade()
ENDCLASS
METHOD Create(cNome, nIdade) CLASS Pessoa
::cNome := cNome
::nIdade := nIdade
Return SELF
oPessoa
cNome :=
dNascimento:= CTOD()
aDados := {}
aDados := GetDados()
oPessoa := Pessoa():Create(cNome,dNascimento)
Return
- 25 ADVPL Avanado
- 26 ADVPL Avanado
Create() CONSTRUCTOR
Inscrever()
Avaliar()
GetNota()
GetStatus()
ENDCLASS
// Os objetos da classe Aluno, possuem todos os mtodos e atributos da classe
Pessoa, alm
// dos mtodos e atributos declarados na prpria classe.
- 27 ADVPL Avanado
DTOS
ELSE
ELSEIF
EMPTY
ENDCASE
ENDDO
LOWER
SETPOS
COL
FIELDNAME
PCOL
TIME
DEVPOS
IF
RECNO
THROW
INKEY
INT
LASTREC
LEN
LOCK
LOG
SELECT
CMONTH
FCOUNT
MONTH
SUBSTR
DELETED
FUNCTION
RECCOUNT
UPPER
Palavras reservadas no
procedimentos ou funes;
REPLICATE
RLOCK
ROUND
ROW
RTRIM
SECONDS
CHR
EXP
MIN
STR
DAY
FOUND
PROW
TYPE
TRY
podem
ser
VAL
VALTYPE
WHILE
WORD
YEAR
CDOW
EOF
MAX
SQRT
DATE
FLOCK
PROCEDURE
TRIM
DTOC
AS
utilizadas
para
variveis,
- 28 ADVPL Avanado
Funcionalidade
Permite apenas caracteres alfabticos.
Exibe CR depois de nmeros positivos.
Exibe numrico com o ponto e vrgula invertidos (formato Europeu).
Insere caracteres diferentes dos caracteres de template na exibio, mas no os
insere na varivel do GET.
Permite rolamento horizontal do texto dentro do GET, <n> um nmero inteiro
que identifica o tamanho da regio.
Exibe DB depois de nmeros negativos.
Exibe zeros como brancos.
Exibe nmeros negativos entre parnteses com os espaos em branco iniciais.
Exibe nmeros negativos entre parnteses sem os espaos em branco iniciais.
Converte caracteres alfabticos para maisculo.
Templates
Contedo Funcionalidade
X
Permite qualquer caractere.
9
Permite apenas dgitos para qualquer tipo de dado, incluindo o sinal para
numricos.
#
Permite dgitos, sinais e espaos em branco para qualquer tipo de dado.
!
Converte caracteres alfabticos para maisculo.
*
Exibe um asterisco no lugar dos espaos em branco iniciais em nmeros.
.
Exibe o ponto decimal.
,
Exibe a posio do milhar.
Exemplo 01 Picture campo numrico
CT2_VALOR Numrico 17,2
Picture: @E 99,999,999,999,999.99
- 29 ADVPL Avanado
Classes Auxiliares
Tfont
Classes de Janelas
Msdialog
Tdialog
Twindow
Classes de Componentes
Tcontrol
- 30 ADVPL Avanado
Classes de Componentes
Visuais
Brgetddb
Mscalend
Mscalendgrid
Msselbr
Msworktime
Sbutton
Tbar
Tbitmap
Tbrowsebutton
Tbtnbmp
Tbtnbmp2
Tbutton
Tcbrowse
Tcheckbox
Tcolortriangle
Tcombobox
Tfolder
Tfont
Tget
Tgroup
Thbutton
Tibrowser
Tlistbox
Tmenu
Tmenubar
Tmeter
Tmsgraphic
Tmsgbar
Tmultibtn
Tmultiget
Tolecontainer
Tpageview
Tpanel
Tradmenu
Tsbrowse
Tsay
Tscrollbox
Tsimpleeditor
Tslider
Classes de Componentes
Visuais
Tsplitter
Ttabs
Ttoolbox
Twbrowse
Vcbrowse
Propriedades:
nLeft
nTop
nWidth
nHeight
cCaption
cTooltip
lShowHint
cMsg
nClrText
nClrPane
bWhen
bValid
blClicked
brClicked
blDblClick
oWnd
lVisible
Cargo
bLostFocus
bGotFocus
Parmetros:
Nenhum
- 32 ADVPL Avanado
Mtodos auxiliares:
SetFocus
Descrio: Fora mudana do foco de entrada de dados para o controle.
Sintaxe: SetFocus( )
Parmetros:
Nenhum
Retorno:
Nil
Hide
Descrio: Torna objeto invisvel.
Sintaxe: Hide( )
Parmetros:
Nenhum
Retorno:
Nil
Show
Descrio: Torna objeto visvel.
Sintaxe: Show( )
Parmetros:
Nenhum
Retorno:
Nil
Enable
Descrio: Habilita o objeto.
Sintaxe: Enable( )
Parmetros:
Nenhum
Retorno:
Nil
- 33 ADVPL Avanado
Disable
Descrio: Desabilita o objeto.
Sintaxe: Disable( )
Parmetros:
Nenhum
Retorno:
Nil
Refresh
Descrio: Fora atualizao (sincronia) de propriedades entre o programa e o
Protheus Remote.
Sintaxe: Refresh( )
Parmetros:
Nenhum
Retorno:
Nil
Exemplo:
- 34 ADVPL Avanado
Classes auxiliares
TFONT()
Descrio: Classe de objetos que define a fonte do texto utilizado nos controles
visuais.
Propriedades:
-
Parmetros:
acName
nPar2
anHeight
lPar4
alBold
nPar6
lPar7
nPar8
alItalic
alUnderline
Aparncia:
Exemplo:
#include 'protheus.ch'
User Function Teste()
Local oDlg, oSay
DEFINE MSDIALOG oDlg FROM 0,0 TO 200,200 TITLE 'My dialog' PIXEL
// Cria font para uso
oFont:= TFont():New('Courier New',,-14,.T.)
// Apresenta o tSay com a fonte Courier New
oSay := TSay():New( 10, 10, {|| 'Mensagem'},oDlg,, oFont,,,, .T.,
CLR_WHITE,CLR_RED )
oSay:lTransparent:= .F.
ACTIVATE MSDIALOG oDlg CENTERED
Return
- 35 ADVPL Avanado
Classes de janelas
MSDIALOG()
Descrio: Classe de objetos que deve ser utilizada como padro de janela para
entrada de dados. MSDialog um tipo de janela dilogo modal, isto
, no permite que outra janela ativa receba dados enquanto esta
estiver ativa.
Propriedades:
-
Parmetros:
anTop
anLeft
anBotom
anRight
acCaption
cPar6
nPar7
lPar8
nPar9
anClrText
anClrBack
oPar12
aoWnd
alPixel
oPar15
oPar16
nPar17
- 36 ADVPL Avanado
Aparncia:
Exemplo:
#include 'protheus.ch'
User Function Teste()
// cria dilogo
Local oDlg := MSDialog():New(10,10,300,300,'Meu
dialogo',,,,,CLR_BLACK,CLR_WHITE,,,.T.)
// ativa dilogo centralizado
oDlg:Activate(,,,.T.,{||msgstop('validou!'),.T.},,{||msgstop('iniciando'
)} )
Return
TDIALOG()
Propriedades:
-
Parmetros:
anTop
anLeft
anBotom
anRight
ou caracteres.
Caractere, opcional. Ttulo da janela.
Reservado.
Reservado.
Reservado.
Reservado.
Numrico,opcional. Cor do texto.
Numrico,opcional. Cor de fundo.
Reservado.
Objeto, opcional. Janela me da janela a ser criada, padro
a janela principal do programa.
Lgico, opcional. Se .T. considera as coordenadas passadas
em pixels, se .F. considera caracteres.
Reservado.
Reservado.
Reservado.
Numrico, opcional. Largura da janela em pixels.
Numrico, opcional. Altura da janela em pixels.
acCaption
cPar6
nPar7
lPar8
nPar9
anClrText
anClrBack
oPar12
aoWnd
alPixel
oPar15
oPar16
nPar17
anWidth
anHeight
Mtodos auxiliares:
Activate
Descrio: Ativa (exibe) o dilogo. Chamar somente uma vez este
mtodo.
Sintaxe: Activate([bPar1], [bPar2], [bPar3], [alCentered], [abValid],
[lPar6], [abInit], [bPar8], [bPar9] )
Parmetros:
Reservado.
Reservado.
Reservado.
Lgico, opcional. Se .T. exibe a janela centralizada, .F.
padro.
Bloco de cdigo, opcional. Deve retornar .T. se contedo
do dilogo vlido, se retornar .F. o dilogo no fechar
quando solicitada de encerrar.
Reservado.
Bloco de cdigo, opcional. Executado quando o dilogo
inicia exibio.
Reservado.
Reservado.
bPar1
bPar2
bPar3
alCentered
abValid
lPar6
abInit
bPar8
bPar9
Retorno:
Nenhum
- 38 ADVPL Avanado
End
Descrio: Encerra (fecha) o dilogo.
Sintaxe: End( )
Parmetros:
Nenhum
Aparncia:
Exemplo:
#include 'protheus.ch'
User Function Teste()
Local oDlg
// cria dilogo
oDlg := MSDialog():New(10,10,300,300,'Meu
dialogo',,,,,CLR_BLACK,CLR_WHITE,,,.T.)
// ativa dilogo centralizado
oDlg:Activate(,,,.T.,{||msgstop('validou!'),.T.},,{||msgstop('iniciando..
.')} )
/* os comandos abaixo proporcionam o mesmo resultado
// cria dilogo
DEFINE DIALOG oDlg TITLE 'Meu dialogo' FROM 10,10 TO 300,300 COLOR
CLR_BLACK,CLR_WHITE PIXEL
// ativa dilogo centralizado
ACTIVATE DIALOG oDlg CENTER ON INIT (msgstop('iniciando...')) VALID
(msgstop('validou!'),.T.)
*/
Return Nil
- 39 ADVPL Avanado
TWINDOW()
Propriedades:
-
Parmetros:
nTop
nLeft
nBottom
nRight
cTitle
nPar6
oPar7
oPar8
oPar9
oParent
lPar11
lPar12
nClrFore
nClrText
oPar15
cPar16
lPar17
lPar18
lPar19
lPar20
lPixel
- 40 ADVPL Avanado
Mtodos auxiliares:
Activate
Descrio: Ativa (exibe) a janela. Chamar esse mtodo apenas uma vez.
Sintaxe: Activate([acShow], [bPar2], [bPar3], [bPar4], [bPar5], [bPar6],
[ abInit ], [bPar8], [bPar9], [bPar10], [bPar11], [bPar12] ,[bPar13],
[bPar14], [bPar15], [abValid], [bPar17], [bPar18] ).
Parmetros:
acShow
bPar2
bPar3
bPar4
bPar5
bPar6
abInit
bPar8
bPar9
bPar10
bPar11
bPar12
bPar13
bPar14
bPar15
abValid
bPar17
bPar18
Retorno:
Nenhum
End
Descrio: Solicita encerramento da janela.
Sintaxe: End( )
Parmetros:
Nenhum
- 41 ADVPL Avanado
Center
Descrio: Centraliza a janela.
Sintaxe: Center( )
Parmetros:
Nenhum
Aparncia:
Exemplo:
#include 'protheus.ch'
User Function Teste()
Local oWindow
Local abInit:= {||conout('ativando!')}
Local abValid:= {||conout('encerrando!'),.T.}
oWindow:= tWindow():New( 10, 10, 200, 200, 'Meu
programa',,,,,,,,CLR_WHITE,CLR_BLACK,,,,,,,.T. )
oWindow:Activate('MAXIMIZED',,,,,,abInit,,,,,,,,,abValid,,)
/* os comandos abaixo proporcionam o mesmo resultado
DEFINE WINDOW oWindow FROM 10, 10 TO 200,200 PIXEL TITLE 'Meu programa'
COLOR CLR_WHITE,CLR_BLACK
ACTIVATE WINDOW oWindow MAXIMIZED ON INIT abInit VALID abValid
*/
Return
.
- 42 ADVPL Avanado
- 43 -
ERROR: undefined
OFFENDING COMMAND: ~
STACK: