Criar Objeto

Delphi

24/03/2008

Olá pessoal.
Tenho uma dúvida.
Estou vendo OO com Delphi, e pelo que entendi quando vc faz declara um Objeto vc não acessa ele diretamente, e sim o endereço do local da memória que ele se encontra(refrência), é isso?
Ex:
Var
  ObjRoda:TRoda; {Variável do tipo TRoda que irá armazenar o endereço da                       memória alocada para o objeto ObjRoda}
begin
  ObjRoda:=TRoda.Create; //Instânciação do Objeto

Ou seja, eu declaro uma variável e nela quando dou o comando ´TRoda.Create´ eu estou alocando memória e colocando em ObjRoda o endereço no Objeto não o objeto em si, esta correto isso?
Se estiver, aonde foi parar o objeto?O que eu quero dizer é, pq não é feito como uma variável, vc tem que usar Create(eu até entendo um pouco do uso dos construtores(com ou sem inicialização explicita)) só não entendo pq não posso fazer diretamente ´Obj.Método´, eu tenho inicializar, já que isso não faço com uma variável...
Tudo bem que vc´s podem até dizer ´pq a linguagem é assim e pronto´... :P

Obrigado.


Fabiorubim

Fabiorubim

Curtidas 0

Respostas

Rodc

Rodc

24/03/2008

Fica meio difícil de pelo forum explicar Orientação à Objetos. Sugiro você buscar uma apostila sobre o assunto.

A variável ObjRoda realmente só tem o endereço de memória onde começa a classe que está instanciada em memória.
A variáveis e regitros não precisam ser instanciados usando Create() porque o compilador sabe o tamanho delas e já aloca espaço na memória suficiente para o objeto. Integer tem 4 bytes, double tem 8, char tem 1, byte tem 1, e assim por adiate. Com excessão da classe String que é uma classe porém o compilador trata de forma especial, como se fosse variável.


GOSTEI 0
Marco Salles

Marco Salles

24/03/2008

Num precisa ir longe naõ

vamos analisar uma situação aonde voce faz uso de n objetos ( n no sentido de muitos) e cada uma desses objetos voce usa apenas uma
propriedade um método ou mesmo Um Atributo .

Será que seria interresante , allocar memória para esses objetos de uma so vez , memso que iremos utiliza-los tão pouco ???
Resposta : Claro que não . O iterressante é alocar somente o necessário e melhor ainda no momento que estamos utilizando esses objetos

Seria o compilador ou o gerenciador de memória tão ´iteligente´ que fizesse esta alocação e desalocação nos poupando o ´Trabalho´ de criar e
destruir esses objetos ????

o Problema é que no Delphi a única forma de alocar e desalocar Memoria de objetos é utilizando-se o mecanismo de Owner, que funciona apenas com componentes Ou criando e Destruindo Objetos na Mão .
Porém as interfaces, possuem Reference Count.

Em ambientes gerenciados, como o .NET e Java, a desalocação de memória é feita pela própria plataforma, através do Garbage Collector. Desta forma não é necessário explicitamente destruir objetos, pois isso será feito automaticamente assim que eles perderem referência (RefCount = 0).

Vale lembrar que recursos como Vazamento de Memória (memory leaks)ja estão dispoveis a partir do delphi 2007 e podem ser incorporados
pelo gerenciador de memória desenvolvido por Pierre Le Riche .

No mais é o programador quem deve se preocupar em liberar a memória utilizada.

Tudo bem que vc´s podem até dizer ´pq a linguagem é assim e pronto´...

Acredito que por ja ter este recurso em outra plataforma , ha sim , esperança que se estenda para a plataforma win32 .

Agora eu confesso que acho ´romântico´ criar e destruir Objetos , mas não se assuste pois :

Todo Gênio é Doido e nen todo Doido e gênio . Eu sou apenas um Doido



GOSTEI 0
POSTAR