{$codepage utf8} {$mode objfpc} Uses sysutils; Type TClassAvion=Class of TAvion; TAvion=class class var FAviones:integer; //atributos o variables de clase var constructor create(Nombre:string);virtual; End; TAvComercial=class(TAvion) class var FAvionesComerciales:integer; Constructor create(Nombre:string);override; End; TAvGuerra=class(TAvion) class var FAvionesGuerra:integer; Constructor create(Nombre:string);override; End; TEscenario=Class Ref:TClassAvion; A:array of TAvion; Procedure GenerarAvionesAzar; End; Constructor TAvion.create(Nombre:string); Begin Faviones +=1; Writeln('[',Nombre,'] Creado Avion Generico '); End; Constructor TAvComercial.create(Nombre:string); Begin FAvionesComerciales+=1; Writeln('[',Nombre,'] Creado Avion Comercial '); End; Constructor TAvGuerra.create(Nombre:string); Begin FAvionesGuerra+=1; Writeln('[',Nombre,'] Creado Avion Guerra '); End; Procedure TEscenario.GenerarAvionesAzar; Var i,j,c:integer; Begin randomize; c:=random(20); setlength(A,c); for i:=1 to c-1 do Begin j:=random(3); ref:=TAvion; if j=1 then ref:=TAvComercial; If j=2 then ref:=TAvGuerra; A[i]:=ref.create(IntToStr(i)); End; Writeln(TAvion.FAviones,' aviones genericos creados'); Writeln(TAvComercial.FAvionesComerciales,' aviones comerciales creados'); Writeln(TAvGuerra.FAvionesGuerra,' aviones de guerra creados'); End; Var Escenario:TEscenario; Begin Escenario:=TEscenario.create; Escenario.GenerarAvionesAzar End.