Questão - a field refering to another class

258 views
Skip to first unread message

Francisco Adriano Flores

unread,
Nov 3, 2013, 6:41:21 PM11/3/13
to certifica...@googlegroups.com
If a class has a field refering to another class, which of the following is true?
A) Delphi will allocate memory for the internal object automatically
B) Delphi won't allocate memory for the internal object, so you must do it before using the object ( and generally Free it in destructor )
C) Delphi will allocate the memory for the internal object if you mark the field as auto
D) Delphi won't allocate the memory for internal object, so you must override special memory alocation functions
E) Delphi won't allocate the memory for the internal object, so you must do it in the constructor and destructor
F) Delphi will use reference counting for the internal object

Jhosef Marks

unread,
Nov 3, 2013, 7:27:56 PM11/3/13
to certifica...@googlegroups.com
E)


Att,


Jhosef Marks de Carvalho
Celular: (47) 9708-6420
skype: jhosef.marks
Twitter: @jhosefmarks

Jesus está voltando!!!

"E se o meu povo, que se chama pelo meu nome, se humilhar, e orar, e buscar a minha face e se converter dos seus maus caminhos, então eu ouvirei dos céus, e perdoarei os seus pecados, e sararei a sua terra. Agora estarão abertos os meus olhos e atentos os meus ouvidos à oração deste lugar. Porque agora escolhi e santifiquei esta casa, para que o meu nome esteja nela perpetuamente; e nela estarão fixos os meus olhos e o meu coração todos os dias." (2 Cr 7:16)

###################################################################################################
CAMPANHA POR UMA INTERNET SEGURA
Proteja o endereço de seus amigos como estou protegendo o seu. Ao enviar 
mensagens use SEMPRE o "Cco" (cópia oculta).
Assim TODOS os endereços estarão preservados. E, claro, antes de encaminhar 
um e-mail, delete todas as informações que apareçam no corpo do e-mail e que 
possam ser usadas por hackers.
###################################################################################################


--
--
Você recebeu esta mensagem porque está inscrito no Grupo
"Certificação Delphi" nos Grupos do Google.
Para postar neste grupo, envie um e-mail para
certifica...@googlegroups.com
Para cancelar a sua inscrição neste grupo, envie um e-mail para
certificacao-de...@googlegroups.com
Para ver mais opções, visite este grupo em
http://groups.google.com/group/certificacao-delphi?hl=pt?hl=pt-BR
 
---
Você está recebendo esta mensagem porque se inscreveu no grupo "Certificação Delphi" dos Grupos do Google.
Para cancelar a inscrição neste grupo e parar de receber seus e-mails, envie um e-mail para certificacao-de...@googlegroups.com.
Para obter mais opções, acesse https://groups.google.com/groups/opt_out.

Rafael Pimenta

unread,
Nov 4, 2013, 7:49:47 AM11/4/13
to certifica...@googlegroups.com
resposta é E. 

BlogToDeBarba Barba

unread,
May 21, 2015, 6:39:45 PM5/21/15
to certifica...@googlegroups.com
Pessoal,

Gostaria de mais informações do porque é a letra E e não a letra B. Afinal é necessário que seja nos métodos "Constructor" e "Destructor"?

Grato pela atenção,

João Henrique Souza

unread,
May 22, 2015, 5:06:59 AM5/22/15
to certifica...@googlegroups.com

Existe mvarias abordagens....Imagine assim....

Cada vez q usar VC cria o o objeto....
Depois só no destructor da classe VC libere ele...
E se VC antes do destructor precisar chamar mais de uma vez o método q cria o objeto?

Agora imagine TB sr VC tem outro método q necessita desse field oq seria super normal.
E se eu chamar esse método antes do q cria o field?
Pegou a ideia?

Em termos de classe é importante q VC deixe esse tipo de field disponível para qualquer método e ainda se proteja para q não crie o mesmo toda hora e mais de uma vez.

Abraços
Joao

--
--
Você recebeu esta mensagem porque está inscrito no Grupo
"Certificação Delphi" nos Grupos do Google.
Para postar neste grupo, envie um e-mail para
certifica...@googlegroups.com
Para cancelar a sua inscrição neste grupo, envie um e-mail para
certificacao-de...@googlegroups.com
Para ver mais opções, visite este grupo em
http://groups.google.com/group/certificacao-delphi?hl=pt?hl=pt-BR

---
Você recebeu essa mensagem porque está inscrito no grupo "Certificação Delphi" dos Grupos do Google.
Para cancelar inscrição nesse grupo e parar de receber e-mails dele, envie um e-mail para certificacao-de...@googlegroups.com.
Para mais opções, acesse https://groups.google.com/d/optout.

Elazar Dornelles Ceza

unread,
Jun 8, 2015, 2:00:07 PM6/8/15
to certifica...@googlegroups.com
As questões da prova se baseiam na ideia do que você deve fazer baseado não apenas em termos técnicos do que a linguagem permite mas também no quesito de boas práticas.

A linguagem OO baseia-se no conceito de que você deve reutilizar seu fonte, e com isto você não "vai ficar verificando" o fonte já pronto, ele está certo ou não, pois segue-se a boa prática de considerar que ele está e nunca terá um AV por conta desta situação.

Então por isto considera-se que todo Field deve ser inicializado e finalizado nos locais corretos (must be in constructor / destructor);

Isto é quase como reacender a questão de usar ou não o FreeAndNil, pois, não á necessidade de testar a existência de instância do objeto.


-- 
 
Atenc;
Elazar Dornelles Ceza

André Celestino

unread,
Jun 17, 2015, 11:42:56 AM6/17/15
to certifica...@googlegroups.com
Pessoal, a minha dúvida é a mesma do membro "BlogToDeBarba".

A letra "B" diz: "Delphi won't allocate memory for the internal object, so you must do it before using the object ( and generally Free it in destructor )"
Está correto, não está? O Delphi não vai alocar memória para o objeto, então eu devo criá-lo antes de usar (que não precisa ser necessariamente no constructor) e liberá-lo com o Free.

Porque a "B" estaria errada e a resposta certa é "E"?


Em domingo, 3 de novembro de 2013 21:41:21 UTC-2, Francisco Adriano Flores escreveu:

João Henrique Souza

unread,
Jun 18, 2015, 5:57:32 AM6/18/15
to certifica...@googlegroups.com

Ola...
Ja exposmos nossos pontos de vista em outras respostas.
Conforme outdo colega tb disse... Boas praticas tb sao analisadas, e no seu exemplo vc nao seguiu uma boa pratica.

Abracos

--

André Celestino

unread,
Aug 14, 2015, 9:48:30 AM8/14/15
to Certificação Delphi
Pessoal, é o seguinte.
Essa questão faz parte do contexto de "Classes and Objects". Ontem fiz a prova e fui aprovado.
Respondi a letra "B", conforme defendi nas minhas respostas anteriores (e o BlogToDeBarba também questionou), portanto, como tirei 100% nesse contexto, a minha resposta estava correta.

Foi por esse motivo que eu pedi uma explicação plausível sobre a resposta "E" que vocês mencionaram. Acredito que não se trate de "boas práticas" mas, sim, parte da documentação do próprio Delphi.

Espero que ajude aqueles que visitaren esse grupo e, para aqueles que responderam a letra "E", gostaria que explicassem a definição.



Em domingo, 3 de novembro de 2013 21:41:21 UTC-2, Francisco Adriano Flores escreveu:

João Henrique Souza

unread,
Aug 14, 2015, 8:30:24 PM8/14/15
to certifica...@googlegroups.com
Ok. Vamos pensar juntos?

O que eu entendo com a resposta E:

type
  TExemplo = class
  private
     FField: TStringList;
  public
     constructor Create;
     destructor Destroy;
 
     procedure MetodoQualquer(aStr: string);
  end; 

constructor TExemplo.Create;
begin
   FField := TStringList.Create;
end;

destructor TExemplo.Destroy;
begin
   FreeAndNil(FField);
end;

procedure TExemplo.MetodoQualquer(aStr: string);
begin
   FField.Add(aStr);
end;



Oq entendo com a Resposta B:

type
  TExemplo = class
  private
     FField: TStringList;
  public
     constructor Create;
     destructor Destroy;
 
     procedure MetodoQualquer(aStr: string);
  end; 

constructor TExemplo.Create;
begin
//
end;

destructor TExemplo.Destroy;
begin
   FreeAndNil(FField);
end;

procedure TExemplo.MetodoQualquer(aStr: string);
begin
   FField := TStringList.Create;
   FField.Add(aStr);
end;


Desse jeito imagina se chamar varias vezes o MetodoQualquer antes de destruir o objeto?
O B no meu ponto de vista só é valido se você antes de instanciar o FField você verificar se ele já não esta instanciado.
Neste caso OK, e talvez seja por isso que a B não pode ser considerada errada também.
Porém imagina se vc tem outros métodos que usam esse FField....
Cada vez que usar tem que verificar se ele ja não ta instanciado.... por isso é melhor vc instanciar ele no constructor e não se preocupar mais com isso nos métodos. Dae que eu digo que o E é uma boa pratica e o B não. Mas volto a repetir... os dois podem estar corretos desde que considere oq acabei de dizer sobre verificar se já esta instanciado ou não. Porém uma solução é melhor que a outra.

Abraços e parabens pela certificação. ;)
João Henrique de Souza

--
--
Você recebeu esta mensagem porque está inscrito no Grupo
"Certificação Delphi" nos Grupos do Google.
Para postar neste grupo, envie um e-mail para
certifica...@googlegroups.com
Para cancelar a sua inscrição neste grupo, envie um e-mail para
certificacao-de...@googlegroups.com
Para ver mais opções, visite este grupo em
http://groups.google.com/group/certificacao-delphi?hl=pt?hl=pt-BR

---
Você recebeu essa mensagem porque está inscrito no grupo "Certificação Delphi" dos Grupos do Google.
Para cancelar inscrição nesse grupo e parar de receber e-mails dele, envie um e-mail para certificacao-de...@googlegroups.com.
Para mais opções, acesse https://groups.google.com/d/optout.



--


João Henrique de Souza
55 11 98182-9103

My LinkedIn's profile:
Reply all
Reply to author
Forward
0 new messages