ENUNCIADO: "ome uno de lo1 len2ua3e1 4lanteado1 en la 4rctica nro, 1 5 de1arrolle un e3em4lo en el cual 1e mue1tre el u1o de lo1 diferente1 ti4o1 de 6aria7le1 8ue el len2ua3e 4o1ee 1e29n la cla1ificaci:n de la1 mi1ma1 4or 1u momento de li2adura con el l&6alor, 'etalle tam7i;n lo1 atri7uto1 de la1 6aria7le1) indicando 1u momento de li2adura, .onte1te adem1 la1 1i2uiente1 4re2unta1: <tiene e1to relaci:n con la 1inta=i1 5 la 1emntica del le2ua3e> <.:mo> Lenguaje Java: Para em4e?ar el conce4to) una 6aria7le re4re1enta un contenedor de 7it1 8ue 1e encuentra en la memoria referenciada con un identificador 4ara almacenar un dato) una 6aria7le 1:lo 4uede almacenar un 1olo ti4o de dato) @Aa7lando de 3a6a 8ue e1 un len2ua3e fuertemente ti4adoB 8ue 4uede 6ariar durante la e3ecuci:n de un 4ro2rama,
*a6a e1 un len2ua3e orientado a o73eto1) al Aa7lar de atri7uto1 no1 4odemo1 referir a lo1 atri7uto1 de una cla1e, #n e1te ca1o e1tamo1 Aa7lando de lo1 atri7uto1 de la1 6aria7le1) con e1to 8ueremo1 decir 8ue cuando mencionamo1 un atri7uto) no1 referimo1 a lo1 6alore1 e14ecCfico1 de la 6aria7le) 4or e3em4lo: 6aria7le 1e=o) lo1 atri7uto1 1erCan Aom7re o mu3er, La a1ociaci:n entre un identificador o nom7re) con un atri7uto @6alor o ti4oB) 1e conoce como Dli2aduraE) de4endiendo del momento de a1ociaci:n la li2adura 4uede 1er dinmica @tiem4o de e3ecuci:nB o e1ttica @tiem4o de com4ilaci:nB,
La1 6aria7le1 4ueden cla1ificar1e como 6aria7le1 4rimiti6a1 5 6aria7le1 referenciada1, VARIABLES PRIMITIVAS: almacenan dato1 num;rico1 @int) 1Aort) lon2) 75te) float) dou7leB) 6alore1 l:2ico1 @7ooleanB o caractere1 @cAarB, Por e3em4lo: & int mi(aria7le#ntera F 100G & 7oolean mi(aria7leLo2ica F trueG
VARIABLES REFERENCIADAS: #1tn a1ociada1 a in1tancia1 de una cla1e) 4or e3em4lo 4ara almacenar cadena1 de caractere1 1e em4lear una 6aria7le referenciada a la cla1e %trin2) en e1te ca1o la 6aria7le contendr un 4untero a la u7icaci:n donde 1e encuentra el dato en memoria, Por e3em4lo: & %trin2 mi.adena'e.aractere1 F DHola mundoEG
$Aora refiri;ndono1 a la1 li2adura1) 3a6a cuenta con Aerramienta1 9tile1 4ara el mane3o de dato1 5 li2adura1 en tiem4o de e3ecuci:n) 4or e3em4lo el ca1tin2) el cual e1 un 4rocedimiento 4ara tran1formar una 6aria7le 4rimiti6a de un ti4o a otro 1iem4re 5 cuando com4artan el mi1mo dominio de 6alore1) o tran1formar un o73eto de una cla1e a otra 1iem4re 5 cuando e=i1ta una relaci:n de Aerencia, #l ca1tin2 4uede cla1ificar1e en im4lCcito 5 e=4lCcito, & Casting Implcito: no 1e nece1ita e1cri7ir c:di2o 4ara 8ue 1e lle6e a ca7o) ocurre cuando 1e reali?a una con6er1i:n ancAa) e1 decir) cuando 1e coloca un 6alor 4e8ueIo en un contenedor 2rande, o #3em4lo 1: Int num1F100G //ocu4a 75te1 Lon2 num2Fnum1G // num1 enca3a automticamente en un contenedor de 0 75te1 o #3em4lo 2: Lon2 num1F1000000000000 //No com4ila 4or 8ue 1000000000000 1ale del ran2o de int, #1 nece1ario ca1tin2 e=4lCcito, o #3em4lo 3: Per1ona 4er1ona F neJ Per1ona@BG O73ect o73ect F Per1onaG // ca1t im4lCcito) un o73eto ti4o 4adre 6a a contener un o73eto de ti4o Ai3o,
& Casting explcito: %i e1 nece1ario e1cri7ir c:di2o) ocurre cuando 1e coloca un 6alor 2rande en un contenedor 4e8ueIo, %on 1u1ce4ti7le1 a 4erdida de dato1, o #3em4lo 1: Int num1F100G //ocu4a 75te1 %Aort num2F @1AortB num1G //num1 no enca3a en un contenedor de 2 75te1 Aace falta ca1tin2 e=4lCcito) 1i el 6alor del ori2en e1 mu5 2rande 4uede 4erder1e informaci:n, o #3em4lo 2: int aF5G 75te b F 5G 7 F @75teB @7 K 2BG float c F @floatB a / 7G //di6i1i:n real
*a6a 4ermite u1ar 6aria7le1 de ti4o 4rimiti6a1 como o73eto1 4or medio de Dcla1e1 en6oltorio1E de ti4o1 de dato1 4rimiti6o1) 4or e3em4lo 1e 4uede u1ar una 6aria7le como Ai3a de la cla1e DInte2erE en lu2ar de u1ar el 4rimiti6o DintE,
*a6a al momento de la li2adura) no 4ermite 8ue lo1 o73eto1 e1t;n in1tanciado1 en memoria e1ttica) ni 8ue lo1 dato1 4rimiti6o1 e1t;n en memoria dinmica, La creaci:n de una 6aria7le 4rimiti6a 1ucede en tiem4o de com4ilaci:n 1e definen e1tticamente 5 no 4ueden cam7iar 1u tamaIo en tiem4o de e3ecuci:n) la1 dinmica1 1on a8uella1 8ue 4ueden cam7iar de tamaIo en tiem4o de e3ecuci:n, #3em4lo1 de definici:n: & (aria7le e1ttica: o cAar c F M?NG & (aria7le dinmica: o O73ect o F neJ O73ect@BG
$Aora Aa7lando de la1 6aria7le1 8ue a4untan a un o73eto) 4odemo1 di1tin2uir) de7ido a la Aerencia) do1 ti4o1:
aB #l ti4o declarado en el c:di2o fuente: 1e llama tipo esttico. 7B #l ti4o de o73eto al 8ue a4unta en tiem4o de e3ecuci:n) 4uede 1er el declarado en el c:di2o fuente o un 1u7ti4o: 1e llama tipo dinmico. #3em4lo: & Profe1orInterino 4rofe F neJ Profe1orInterino@BG Per1ona 41 F neJ Per1ona@BG 41 F 4rofeG
#l ti4o e1ttico de 41 e1 Per1ona) mientra1 8ue tra1 la e3ecuci:n de la 3er lCnea 1u ti4o dinmico 4a1a a 1er DProfe1orInterinoE) 4or8ue el o73eto al 8ue 4a1a a a4untar e1 a un 4rofe1or interino, PodrCamo1 decir 8ue inicialmente el contenedor de 41 e1 una ca3a de ti4o DPer1onaE 5 8ue en la 3er lCnea la ca3a 4a1a a 1er de ti4o DProfe1orInterinoE, #3em4lo: & Per1ona 41 F neJ Profe1orInterino@BG
#l ti4o e1ttico e1 Per1ona) 5 el ti4o dinmico e1 Profe1orInterino,<Por 8u;> Por8ue e1tamo1 creando una 6aria7le de ti4o 4er1ona e inmediatamente a1i2nndole de forma dinmica un o73eto an:nimo de ti4o Profe1orInterino, %in em7ar2o) no 4odemo1 in6ocar un m;todo e=clu1i6o de Profe1orInterino 1o7re 41 4or8ue el com4ilador 1e 7a1a en lo1 ti4o1 e1ttico1 4ara Aacer com4ro7acione1, #l com4ilador controla lo1 ti4o1 7a1ndo1e en el ti4o e1ttico @declaradoB) no conoce 1i en un momento la 6aria7le e1t a4untando a un 1u7ti4o, 'e7ido a e1to no 1e 4ueden llamar m;todo1 de dicAa 1u7cla1e) 1in em7ar2o la limitaci:n e1 relati6a) 4ue1to a 8ue 1i el 1u7ti4o tiene un m;todo D1o7ree1critoE 1C 1e da cuenta 1i corre14onde a un 1u7ti4o o un 1u4erti4o, #1to 1ucede 4or8ue 1i 7ien en tiem4o de com4ilaci:n el com4ilador 1e 7a1a en el ti4o e1ttico) en la e3ecuci:n 1e 4riori?a el ti4o dinmico, %i el m;todo no 1e encuentra en el ti4o dinmico) 3a6a 7u1ca en la1 1u4ercla1e1 Aa1ta lle2ar a o73ect 1i e1 nece1ario) 1i no 1e encuentra en o73ect) el 4ro2rama no lle2arCa a com4ilar, "enemo1 8ue di1tin2uir do1 momento1 tem4orale1 en un 4ro2rama) la com4ilaci:n durante la cual el com4ilador reali?a una 1erie de 6erificacione1 5 tran1forma el c:di2o fuente en c:di2o m8uina) 5 la e3ecuci:n) durante la cual una 6aria7le 4uede cam7iar de ti4o de7ido al 4olimorfi1mo 8ue admite *a6a, #l com4ilador 1olo conoce un ti4o: el ti4o e1ttico o declarado en el c:di2o fuente, No o71tante) durante la e3ecuci:n la m8uina 6irtual *a6a e1 ca4a? de identificar el ti4o dinmico de la1 6aria7le1 8ue a4untan a o73eto1 5 a1i2nar un m;todo u otro en funci:n de e1e ti4o dinmico,
#3em4lo Li2adura #1ttica:
public class StaticBindingTest {
public static void main(String args[]) { Collection c = new HashSet(); StaticBindingTest et = new StaticBindingTest(); et.sort(c);
//another overloaded method which takes HashSet argument which is sub class public Collection sort(HashSet hs){ System.out.println("Inside HashSet sort method"); return hs; }
}
Output: Inside Collection sort method
#n el e3em4lo tenemo1 un m;todo 1ort@B 1o7recar2ado) uno ace4ta .ollection 5 otro ace4ta Ha1A%et como ti4o de ar2umento, #n el main tenemo1 un m;todo llamado 1ort@B con Ha1A%et como o73eto) 4ero referenciado con ti4o .ollection, #ntonce1 cuando e3ecutamo1 el m;todo) 1e llama con .ollection como ti4o de ar2umento) 4or8ue 1e Aace la li2adura en tiem4o de com4ilaci:n) 7a1ada en el ti4o de la 6aria7le @li2adura e1tticaB) 8ue era .ollection,
#3em4lo Li2adura 'inmica:
public class DynamicBindingTest { public static void main(String args[]) { Vehicle vehicle = new Car(); //el tipo ac es Vehculo pero el objeto //ser Car vehicle.start();//El mtodo start llamado es el de Car porque start() //es un mtodo redefinido } } class Vehicle { public void start() { System.out.println("Inside start method of Vehicle"); } } class Car extends Vehicle { @Override public void start() { System.out.println("Inside start method of Car"); } } Output: Inside start method of Car
.ar e=tiende (eAiculo 5 redefine el m;todo 1tart@B, .uando llamamo1 al m;todo 1tart@B de1de una 6aria7le de referencia de ti4o (eACculo) no llama al m;todo 1tart@B de la cla1e (eACculo, #n lu2ar de e1to) llama al m;todo 1tart@B de la 1u7cla1e .ar) 4or8ue el o73eto referenciado 4or la 6aria7le de ti4o (eAiculo e1 un o73eto .ar, #1ta re1oluci:n 1olo ocurre en tiem4o de e3ecuci:n 4or8ue el o73eto 1olo 1e crea en tiem4o de e3ecuci:n 5 1e llama li2adura dinmica en *a6a, La li2adura dinmica e1 m1 lenta 8ue la li2adura e1ttica) 4or8ue ocurre en tiem4o de e3ecuci:n 5 4a1a al29n tiem4o 4ara encontrar el m;todo real a 1er llamado, Li2adura e1ttica u1a "i4o1 5 li2adura dinmica u1a O73eto1 4ara li2ar,
La1 6aria7le1 declarada1 dentro del cuer4o de un m;todo 1on variables locales, 5 1:lo e=i1tirn 5 1e 4odr Aacer referencia a ella1 dentro del cuer4o del m;todo, La1 6aria7le1 8ue 1e declaran fuera del cuer4o de un m;todo 1on 6aria7le1 de in1tancia 5 cada in1tancia de la cla1e tendr una co4ia de dicAa1 6aria7le1, La1 6aria7le1 declarada1 fuera del cuer4o de lo1 m;todo1 5 en cu5a declaraci:n 1e e14ecifi8ue la 4ala7ra static 1on 6aria7le1 de cla1e) e1to 8uiere decir 8ue no 1e Aar una co4ia de ella1 4ara cada uno de lo1 o73eto1 de la cla1e 5) 4or tanto) 1u 6alor 1er com4artido 4or toda1 la1 in1tancia1 de la mi1ma, La1 constantes 1on dato1 cu5o 6alor no 4uede 6ariar durante la e3ecuci:n de un 4ro2rama, #n un 4ro2rama 4ueden a4arecer con1tante1 de do1 ti4o1: literales 5 simblicas. La1 constantes simblicas o con nombre re4re1entan dato1 4ermanente1 8ue nunca cam7ian 5 1e declaran como la1 6aria7le1) 4ero iniciali?ndo1e en el momento de la declaraci:n 5 comen?ando dicAa declaraci:n con la 4ala7ra re1er6ada final) 8ue 1ir6e 4ara 8ue el 6alor a1i2nado no 4ueda 1er modificado, La1 constantes de clase 1e declaran en el cuer4o de la cla1e 5 fuera de todo1 lo1 m;todo1) 1iendo nece1ario comen?ar 1u declaraci:n con la1 4ala7ra1 re1er6ada1 final 5 static, La 4ala7ra cla6e final e1 o7li2atoria en la declaraci:n de con1tante1) mientra1 8ue static con1i2ue 8ue 1:lo e=i1ta una co4ia de la con1tante 4ara todo1 lo1 o73eto1 8ue 1e declaren de e1a cla1e, La 1inta=i1 4ara declarar una con1tante de cla1e e1:
sttic !in" ti4o'ato NO-LR#.ON%"$N"# F 6alorG Lo1 m;todo1 5 6aria7le1 static) private 5 final, 1on re1uelto1 durante la com4ilaci:n u1ando li2adura e1ttica) lo 8ue Aace 8ue la e3ecuci:n 1ea m1 r4ida 4or8ue no 1e de14erdicia tiem4o 7u1cando el m;todo correcto durante el tiem4o de e3ecuci:n,
La 1int=i1 de 3a6a 4artici4a a la Aora de definir la li2adura) definiendo re2la1 donde 1e de1cri7e como definir lo1 ti4o1 5 6alore1, Por e3em4lo: cAar cadena OP F neJ cAar O30PG %u 1inta=i1 e1 8ue 4ara declarar un arre2lo) 1e e1cri7e 4rimero el ti4o de dato) lue2o el nom7re 5 4or 9ltimo el tamaIo encerrado entre corcAete1
La 1emntica define el 1i2nificado de una 1entencia e1crita con la 1inta=i1 definida 4or e3em4lo en la 1entecia dada) 4odrCa decir1e 8ue 1e Aa declarado un arre2lo de ti4o carcter) de nom7re cadena 5 tamaIo 30, La 1emntica inter6iene en ca1o de 8ue en una 1entencia no 1e e14ecifi8ue el 1i2nificado de al29n dato) 4or e3em4lo:
cAar cadena OPF 6aria7le$G
%i D6aria7le$E no e1ta definida el com4ilador dara un error 5a 8ue 6aria7le$ no e1ta en el l;=ico del len2ua3e,
Refle=ion 2ru4al: #l tra7a3o no1 a5ud: a refre1car lo1 conocimiento1 1o7re 3a6a) 5 entender me3or el 1i2nificado de la 1emntica 5 la 1inta=i1 en lo1 len2ua3e1, #ntender la1 li2adura1 dinmica1 5 e1ttica1 a5udan a 1a7er la1 4o1i7ilidade1 8ue 1e tiene con el len2ua3e a la Aora del mane3o de la1 6aria7le1,