Array
(
)

variavei publicas ?

Pereiramarcos
   - 18 jan 2006

Boa boite

estou criando um programa frente de caixa. E quando o usuario entra no sistemas tem que informar a Filial e codigo ae faço uma busca por Filial + codigo retorno o nome ate ae tudo bem, agora :

como posso saber o que foi recuperado durante toda a execução do sistema, enquanto o ususario estiver logado.

qual e a melhor maneira, Propriedade no form etc...


obrigado


Thomaz_prg
   - 19 jan 2006

O que você quer é armazenar o código e filial??

Se for, basta criar as variáveis públicas mesmo.


Pereiramarcos
   - 19 jan 2006

thomaz , valeu cara

vou Armazenar sim, e tudo que o uzuario fizer, por exemplo :
que foi o usuario e de qual filial.

o usuario que recebeu a fatura xyz, ou o cupom xyz nao sei se estou sendo claro ele sera o caixa aberto. E tudo que o caixa fizer sera registrado com o codigo dele.

ae fiquei em duvida se criar uma variavel publica ou uma propriedade no form, haja visto que sera varios forms.
é um programa de frente de caixa
logo ele baica contas a receber, baixa estoque da entrada de cheque cartao etc....


Michael
   - 19 jan 2006

Use sempre que possível propriedades e campos de formulários, e evite ao máximo variáveis globais.

Mesmo programando RAD, mantenha os bons constumes da orientação a objetos. ;-)

[]´s


Thomaz_prg
   - 19 jan 2006

Mas tipo, se ele preferir, pode criar uma ´Classe´ simples, para as variáveis. Em uma unit separada. Assim daria maior organização do que vincular isso a um formulário.


Michael
   - 19 jan 2006

Não vejo problemas de organização ao se usar propriedades em formulários. O que se está fazendo é apenas extender a classe TForm, com características próprias de cada tela do programa. Um form é uma classe como qualquer outra, e pode ser derivado e extendido tbm.

[]´s


Pereiramarcos
   - 19 jan 2006

Thomaz, obrigado pela dica pode me dar um exemplo pra eu ver como ficaria.

obrigado michael, pode me dar um exemplo, ou seria isso :

form=class(tform)

property codigo:string

end;

acho que estou misturando Foxpro com delphi...


Michael
   - 19 jan 2006

Segue abaixo o exemplo:

#Código

TForm1 = class(TForm)
...
private
FMinhaPropriedade: string;
public
property MinhaPropriedade: string read FMinhaPropriedade write FMinhaPropriedade;
end;

...

Form1.MinhaPropriedade := ´Michael´;


Se quiser que a propriedade seja somente-leitura, retire o write FMinhaPropriedade do código.

[]´s


Pereiramarcos
   - 20 jan 2006

obrigado michael, vou implementar.


Siam
   - 20 jan 2006

Mas se a property é read e write, qual a diferença de definir uma variável pública diretamente ?


Michael
   - 23 jan 2006

Variáveis globais (ou públicas, tanto faz) não são recomendadas por várias razões, entre elas por fazerem a aplicação depender de units, e não de objetos.

É altamente aconselhável programar OO em uma ferramenta OO, como o Delphi, do que seguir o modelo linear e procedural do antigo Pascal.

Se quiser saber mais sobre o assunto, acho q ele já foi discutido antes aqui no fórum. Faça uma pesquisa rápida e tente achar algo. ;-)

[]´s


Siam
   - 23 jan 2006


Citação:
Variáveis globais (ou públicas, tanto faz) não são recomendadas por várias razões, entre elas por fazerem a aplicação depender de units, e não de objetos.
Como assim ?
Em seu exemplo anterior:#Código

TForm1 = class(TForm) 
...
private
FMinhaPropriedade: string;
public
property MinhaPropriedade: string read FMinhaPropriedade write FMinhaPropriedade;
end;

...

Form1.MinhaPropriedade := ´Michael´;
Para vc utilizar MinhaPropriedade do objeto Form1 vc não tem que enxergar a unit onde ele está se for acessada de outra unit ?

O que quiz dizer é que não vejo diferença entre colocar FMinhaPropriedade como pública e utilizar uma property read/write.


Aroldo Zanela
   - 23 jan 2006

Colega,

Usando este exemplo simples, parecem ser a mesma ´coisa´. Entretanto, há uma significativa diferença conceitual. Em OO, atributos são privados e métodos são públicos e o Delphi possue as propriedades que são mais abrangentes que simples métodos Gets e Sets. Isto visa evitar furos de encapsulamento.


Pereiramarcos
   - 23 jan 2006

Complicou um pouco , se eventos sao publicos e propriedades sao privadas, assim nao esta errado, porem nao e aconselhavel e isso ?
pq fere os conceitos do Delphi.....

alguem pode dar um exemplo para dar uma clareada


Aroldo Zanela
   - 23 jan 2006


Citação:
Complicou um pouco , se eventos sao publicos e propriedades sao privadas, assim nao esta errado, porem nao e aconselhavel e isso ?
pq fere os conceitos do Delphi.....

alguem pode dar um exemplo para dar uma clareada

Colega,

Por curiosidade, em que parte do texto eu disse que propriedades são privadas? Onde foi mencionado eventos?


Siam
   - 24 jan 2006

Colegas, no meu caso; utilizo uma property se ela for somente read ou somente write. Se for read/write eu declaro como variável pública.
Sempre programei assim e nunca me deu nenhum problema.
Citação:
...Isto visa evitar furos de encapsulamento
Poderia dar algum exemplo de furo de encapsulamento ?


Rjun
   - 24 jan 2006

Temos também que considerar o fato que com atributos podemos validar os valores que são inseridos através dos métodos get/set, o que não é possível fazer quando usamos variáveis públicas.


Pereiramarcos
   - 24 jan 2006


Citação:

Citação:
Complicou um pouco , se eventos sao publicos e propriedades sao privadas, assim nao esta errado, porem nao e aconselhavel e isso ?
pq fere os conceitos do Delphi.....

alguem pode dar um exemplo para dar uma clareada

Colega,

Por curiosidade, em que parte do texto eu disse que propriedades são privadas? Onde foi mencionado eventos?


Aroldo eu me expressei mal, mas pode me dizer a diferenca de propriedade para atributos. e de eventos para metodos. Talvez esteja com o cenceito umpouco deturpado. agradeco a sua ajuda. e a de todo do forum


Aroldo Zanela
   - 24 jan 2006

Colega,

20 Rules For OOP In Delphi


Citação:

Rule 6:
Avoid Global Variables Global variables (that is, variables declared in the interface portion of a unit) should be avoided. Here are a few suggestions to help you do this. If you need extra data storage for a form, add some private fields to it. In this case each form instance will have its own copy of the data.
You might use unit variables (declared in the implementation portion of the unit) for data shared among multiple instances of the form class. If you need data shared among forms of different types, you can share them by placing the data in the main form, or in a global object, and use methods or properties to access the data.