Vous êtes sur la page 1sur 5

15/10/2015

TCollectioneGenericsnoFreePascalUmabrevevisosobrelistadeobjetoscomoLazarus[Artigo]pgina3

Home(/index.php) / Artigos(/artigos/index.php) / Kylix(/artigos/categoriaIndex.php?codigo=10)


/ Avanado(/artigos/verSubCategoria.php?codigo=91)
/ TCollectioneGenericsnoFreePascalUmabrevevisosobrelistadeobjetoscomoLazarus

TCollectioneGenericsnoFreePascalUmabrevevisosobrelistadeobjetos
comoLazarus
OFreePascalpodenosertopoderosoquantooC++,masemseus

(/~PedroAraujo)

termos,estbemmaduraetemevoludoeparaaplicaessimples
poderepresentarumexcelentecustobenefcio,numaprovadeque

PedroAraujo(/~PedroAraujo)

comelepossvelconciliarrecursospoderososcomsimplicidade.
Por:PedroArajoem05/05/2010|Blog:

[Hits:16.952]

http://www.pedroaraujo.com/(http://www.pedroaraujo.com/)
0

Denuncie(/denuncie/index.php)Favoritos(/addBookmark.php?tipo=artigo&codigo=11460)Indicar
(/formIndicar.php?tipo=artigo&codigo=11460)Impressora(/artigos/impressora.php?codigo=11460)

USANDOGENERICS
OrecursodegenericsrecenteatmesmonoObjectPascaldoDelphi,surgiunoDelphi2009(meadosde2008).
NoFreePascalestpresenteapartirdaverso2.3.1(fimde2007).
Aquicomearemosavercomotrabalharcomlistasdeobjetosmesmo.Notemosmaisumaclassedeitem(com
suaspropriedades)quepropriedadedeumacoleotemosnossoobjetoautnomoecomsuaidentidade
prpria,podemosinstanciloeusloindividualmenteouentofazerumalistacomvriosdessesobjetos.Outro
grandelancequeessalistanorecebeumnicotipodeobjeto,elapodearmazenarqualquertipodeobjetoque
descendadaclassedesseobjetobase(noiremosestenderpraisso,masdaumaexplicaoprotermo
"generics",podemosfazerlistasdequalquertipodeobjeto,colocarnelanosobjetosdotipoprdefinidona
declaraomastambmseusdescendentes,enquantonacoleostnhamoslistadeumnicotipodeobjeto,o
TCollectionItem).
Entovamoscomearpelaclassedosobjetosaseremlistados.Comonossoexemploumasimplesagenda,a
classeumaclassesimplescujaspropriedadessooscamposdecadaobjetoqueumregistro(umapessoana
agenda).Tambmnemprecisaimplementarmtodospraessaclasse,elastemmesmopropriedades
declaradas.

{TAgendaTelefonicaObj}
TAgendaTelefonicaObj=class
private
FCodigo:Integer
FNome:String
FTelefone:String
public
propertyCodigo:IntegerreadFCodigo
propertyNome:StringreadFNomewriteFNome
propertyTelefone:StringreadFTelefonewriteFTelefone
end

Oprximopassocriaralista.Eudeiumnomeaeladentrodocontextoeimplementeiummtodoeumafuno
semelhanteaoquefoifeitonoexemplodacoleopramanipularainseroeadeleodeobjetosdalista,mas
nogeralissonoserianecessrio,mesmoassim,umavezquealistagenrica,seosmtodosforem'genricos'
essamesmadeclaraodelistapoderiaseraproveitadapramaisdeumtipodeobjetosalmdoesquema
pai/descendentes,poisnaverdadenadeclaraoelanosabequetipodeobjetosvaireceber.

{TAgendaTelefonicaGeneric}
genericTAgendaTelefonicaGeneric=class(TList)
http://www.vivaolinux.com.br/artigo/TCollectioneGenericsnoFreePascalUmabrevevisaosobrelistadeobjetoscomoLazarus?pagina=3

1/5

15/10/2015

TCollectioneGenericsnoFreePascalUmabrevevisosobrelistadeobjetoscomoLazarus[Artigo]pgina3

public
functionAdd(Item:T):Integer
procedureDeleteByCodigo(Codigo:Integer)
end

Comoditoacima,aexemplodacoleo,manipulamosafunoAddprageraronossocdigointernodoregistro
automaticamenteetemosomtodoDeleteByCodigoquelocalizaoobjetopelarespectivapropriedadeeodeleta
dalista.Notequecomoalistagenricanahorademanipularositensdela(nossosobjetos)precisamosfazer
usodetypecastprateracessospropriedadesdeles.

functionTAgendaTelefonicaGeneric.Add(Item:T):Integervar
I:Integer
begin
//Pegaapropriedadecdigodoltimoobjeto
//eincrementapraobterocdigopronovo
ifCount=0then
TAgendaTelefonicaObj(Item).FCodigo:=1
else
begin
forI:=0toCount1do
TAgendaTelefonicaObj(Item).FCodigo:=TAgendaTelefonicaObj(Items[I]).Codigo+1
end
//Insere
Result:=inheritedAdd(Item)
end
procedureTAgendaTelefonicaGeneric.DeleteByCodigo(Codigo:Integer)
var
I:Integer
begin
forI:=0toCount1do
ifTAgendaTelefonicaObj(Items[I]).Codigo=Codigothen
begin
Delete(I)
Break
end
end

Parausarmosemnossoprogramaentraaltimapartedadeclarao,queaclassequeserinstanciadaequeno
tipoespecificaanossalistagenrica.umanicalinha:

TAgendaTelefonicaListaGeneric=specializeTAgendaTelefonicaGeneric

EdalnoprogramatemosentotemoscomopropriedadeumaAgendaTelefonicaListadotipo
TAgendaTelefonicaListaGenericqueserdefatoalistausada.Nomtodoprainserirdeclaramosumavar
AgendaTelefonicadotipoTAgendaTelefonicaObj(lembra,onossoobjetobase).Noiremosmaispassarvalores
praumnovoitemcomonacoleo,iremosinserirnalistaumobjetojexistente.

AgendaTelefonica:=TAgendaTelefonicaObj.Create()
AgendaTelefonica.Nome:=LabeledEdit1.Text
AgendaTelefonica.Telefone:=LabeledEdit2.Text
AgendaTelefonicaLista.Add(AgendaTelefonica)

http://www.vivaolinux.com.br/artigo/TCollectioneGenericsnoFreePascalUmabrevevisaosobrelistadeobjetoscomoLazarus?pagina=3

2/5

15/10/2015

TCollectioneGenericsnoFreePascalUmabrevevisosobrelistadeobjetoscomoLazarus[Artigo]pgina3

Pradeletarachamadadomtodocustomizadoigualaodacoleo.

AgendaTelefonicaLista.DeleteByCodigo(15)

EnumexemplodeexibiodalistadeobjetosnumaListViewsemelhanteaoquefoiditosobreacoleotemos:

forI:=0toAgendaTelefonicaLista.Count1do
begin
Item:=ListView1.Items.Add()
Item.Caption:=IntToStr(TAgendaTelefonicaObj(AgendaTelefonicaLista.Items[I]).Codigo)
Item.SubItems.Add(TAgendaTelefonicaObj(AgendaTelefonicaLista.Items[I]).Nome)
Item.SubItems.Add(TAgendaTelefonicaObj(AgendaTelefonicaLista.Items[I]).Telefone)
end

Pginaanterior(/artigo/TCollectioneGenericsnoFreePascalUmabrevevisaosobrelistadeobjetoscomoLazarus?pagina=2)

Prximapgina(/artigo/TCollectioneGenericsnoFreePascalUmabrevevisaosobrelistadeobjetoscomoLazarus?pagina=4)

Pginasdoartigo
1.Apresentao(/artigo/TCollectioneGenericsnoFreePascalUmabrevevisaosobrelistadeobjetoscomo
Lazarus?pagina=1)
2.Colees(TCollection)(/artigo/TCollectioneGenericsnoFreePascalUmabrevevisaosobrelistade
objetoscomoLazarus?pagina=2)
3.Usandogenerics
4.Interfaceecdigocompletodoexemplo(/artigo/TCollectioneGenericsnoFreePascalUmabrevevisao
sobrelistadeobjetoscomoLazarus?pagina=4)
Outrosartigosdesteautor
Uma"fbula"sobreacessaremapearunidadesderededoWindowsnoLinux(/artigo/Umafabulasobre
acessaremapearunidadesderededoWindowsnoLinux)
LanamentodoGFP0.1.4.5GerenciadorFinanceiroPessoal(/artigo/LancamentodoGFP0145
GerenciadorFinanceiroPessoal)

LanamentodoGFPOpen(GerenciadorFinanceiroPessoal)verso0.0.1.2(/artigo/LancamentodoGFP
Open(GerenciadorFinanceiroPessoal)versao0.0.1.2)
Aimbecilidaderealreveladapelarealidadevirtual(/artigo/Aimbecilidaderealreveladapelarealidadevirtual)
5fatores(subjetivos)quetornamosoftwareproprietrioinsustentvelparaasmicro,pequenasemdio
empresas(/artigo/5fatores(subjetivos)quetornamosoftwareproprietarioinsustentavelparaasmicro
pequenasemedioempresas)
Leiturarecomendada
ColocandoaplicaoKylixnoTrayIcondoKDE(/artigo/ColocandoaplicacaoKylixnoTrayIcondoKDE)
Capturandoseudesktopcomumaaplicaofeitaemkylix(/artigo/Capturandoseudesktopcomuma
aplicacaofeitaemkylix)
ComofazerseuprogramaKylixchamarumaaplicaoexterna(/artigo/ComofazerseuprogramaKylix
chamarumaaplicacaoexterna)
CriandoaplicaoparadetectarinformaesdosistemaemKylix(/artigo/Criandoaplicacaoparadetectar
informacoesdosistemaemKylix)
Criandoumaaplicaoquemostraosprocessosemexecuo(/artigo/Criandoumaaplicacaoquemostraos
processosemexecucao)
http://www.vivaolinux.com.br/artigo/TCollectioneGenericsnoFreePascalUmabrevevisaosobrelistadeobjetoscomoLazarus?pagina=3

3/5

15/10/2015

TCollectioneGenericsnoFreePascalUmabrevevisosobrelistadeobjetoscomoLazarus[Artigo]pgina3

AnnciosGoogle Freepascal Lazarus

Delphi7 Freedelphi

Comentrios
[1]Comentrioenviadoporbarao(/~barao)em06/05/201011:23h
BomartigoPedro,tambemgostomuitodalinguagempascaledoc,maiscomasfacilidadesqueoLazarosvem
incroporandoacadadiaeleficamelhor.
Meublogwww.blig.ig.com.br/mauriciobaron(http://www.blig.ig.com.br/mauriciobaron)
0

[2]Comentrioenviadoporandrezc(/~andrezc)em07/05/201020:02h
Parabnspeloartigo!Massereisincerocomvoc,odeioPascal,rs,issomaispqeunogosteidasintaze,foi
odioaprimeiravista,emumcursoqueeufiz.
Umabrao,parabnspeloartigo.
0

Contribuircomcomentrio

Enviar

(/)

AmaiorcomunidadeGNU/LinuxdaAmricaLatina!Artigos,dicas,tutoriais,frum,scriptsemuitomais.Idealpara
quembuscaautoajuda.

FAQPerguntasfrequentes(/faq.php)
Estatsticasdosite(/estatisticas.php)
Equipedemoderadores(/equipe/)
Membrosdacomunidade(/membros/)

http://www.vivaolinux.com.br/artigo/TCollectioneGenericsnoFreePascalUmabrevevisaosobrelistadeobjetoscomoLazarus?pagina=3

4/5

15/10/2015

TCollectioneGenericsnoFreePascalUmabrevevisosobrelistadeobjetoscomoLazarus[Artigo]pgina3

Anuncie(/anuncie/)
Contato(/falecom/)
Polticadeprivacidade(/privacidade/)
Quemsomos(/quemsomos/)
Termosdeuso(/termosdeuso/)

Sitehospedadopor:

(/verBanner.php?codigo=247)

Visitetambm:BRLinux.org(/verBanner.php?codigo=134)DicasL(/verBanner.php?codigo=135)Diolinux(/verBanner.php?
codigo=506)SoftwareLivre.org(/verBanner.php?codigo=133)UnderLinux(/verBanner.php?codigo=131)

http://www.vivaolinux.com.br/artigo/TCollectioneGenericsnoFreePascalUmabrevevisaosobrelistadeobjetoscomoLazarus?pagina=3

5/5

Vous aimerez peut-être aussi