Programación Orientada a Objetos
I.T.S.A.
Unidad 2 Clases y Objetos .
Clases y Objetos. Como ya se había mencionado en temas anteriores una Clase es una arte de un rograma comuesta or un conjunto de miembros! estos ueden ser" Atributos! #$todos y Objetos Cuan Cuando do habl hablam amos os de Atributos! nos re%eri re%erimos mos a las caract caracterí erísti sticas cas rinciales o instancias a la cuales se recurren ara guardar y conser&ar un dato. 'l control y manejo de esos datos se lle&an a cabo en un Método or medio de un algoritmo! donde un algoritmo es un conjunto de acti&idades (ue ermiten encontrar la solución un roblema o una tarea esecí%ica.
1.
)eclaración de clases" Para la declaración o imlementación de una clase! sabiendo (ue est* comuesta or miembros entre ellos el m$todo! ara los m$todo e+isten dos dos tios tios!! uno uno llam llamad ado o m$to m$todo do rim rimar ario io ,mai ,mainn- y el otro otro llam llamad ado o secundario! este ltimo se crea con cual(uier nombre o cadena de caracteres! (ue sir&an como identi%icador ara di%erenciar el m$todo or su nombre. Una clase se uede dar de dos maneras! una de ellas donde sólo uede contar o imlementar nicamente nicamente m$todos secundarios y dicha clase se llama clase de alicación y cuando la clase contiene imlementado el m$todo rincial se le conoce como clase rincial! como se muestra en inciso a-! b- de la /igura 0.
Ing. C. S*nche1 P.
P*gina 0
Programación Orientada a Objetos
I.T.S.A.
1.1. Atributos! #$todos! 'ncasulamiento.
os Atributos se ueden di%erenciar dos maneras rincialmente! (ue son" os atributos de rimera instancia ,&ariables 3lobales- y los instanciados al m$todo ,&ariables ocales-! este ltimo se utili1a ara el en&ío y receción de datos conocidos como instancias o &ariables de acarreo! ara los asos de ar*metros 'l aso de ar*metro es una t$cnica en la maniulación de datos de un m$todo a otro o de una clase a otra. )eclaración de atributos" Para la declaración de los atributos tambi$n ti ene ciertas di%erencias entre las instanciadas a la clase y al m$todo" /ormato" #odoacceso Tiode)ato identi%icador4 Para los modos de acceso e+isten &arios modos! (ue son" redeterminado ,static-! blico ,ublic-! ri&ado ,ri&ate- y rotegido ,rotected-! cada uno con su resecti&a característica! las di%erencias se arecian al &incular m*s de una clase. 'l Tio de )ato! se re%iere a los tios de datos rimiti&os (ue son" 5um$rico 'ntero" 5um$rico /raccional Car*cter Cadena
short! int! long! byte doubl$! %loat char String
'+isten otros tios llamados tios re%erenciados! no son m*s (ue tios re%abricados del mismo lenguaje de rogramación! ara el caso de ja&a! e+isten los" Array! inter%a1! clase! etc. Sinta+is! ara la declaración de &ariables y constantes de rimera instancias"
%inal
static int &ar4 static int &arCte6074
la di%erencia e+iste en (ue la constante se declara anteoni$ndole la alabra reser&ada 8%inal9! con esto se le indica (ue es una identi%icador constante! ,uesta en código! con la %igura 2- .
Ing. C. S*nche1 P.
P*gina 2
Programación Orientada a Objetos
I.T.S.A.
y ara la declaración de &ariables instanciadas al m$todo! son similares con la di%erencia (ue no tienen el modo de acceso con en la %igura :"
os Métodos no son m*s (ue algoritmos o sub algoritmos de un roblema general! estos m$todos ayudan a comrender mejor la solución de roblema! ya (ue cada uno de ellos uede reali1ar una tarea esecí%ica y hace (ue un roblema e+tenso se desglose en sub algoritmos! donde en un m$todo rincial ,main- se uedan controlar ara su interacción! como en la %igura ;.
'l t$rmino de Encapsulamiento! no m*s (ue una característica y caacidad del lenguaje ara hacer (ue un identi%icador soorte m*s de un dato a la &e1. Ing. C. S*nche1 P.
P*gina :
Programación Orientada a Objetos
I.T.S.A.
Para algunos lenguajes manejaron y maniularon los arreglos de datos! esto consistía en (ue un identi%icador declarado de cierto tio de dato udiera almacenar m*s de un elementos a la &e1 y oder controlarlos or medio un índice! (ue se
Con la &ariable 8Obj9! se uede re%erenciar los m$todos y los atributos de rimera instancia de la clase! or el modo de acceso (ue se tenga ara ello! hay otros medios (ue m*s adelante estudiaremos 2.
Instanciación de una clase. a instanciación de una clase consiste en las declaraciones de sus miembros! como se ha mencionado en los temas anteriores! es rimordial eseci%icar estos miembros el modo de acceso (ue se le har*! ara (ue se ueden re%erenciar or los objetos. Sinta+is ara in&ocar un miembro or medio de un objeto" /ormato" Objeto.#iembro4 'ste miembro uede ser una &ariable o un m$todo y el objeto es una &ariable declarada or la clase! (ue m*s adelante detallaremos. Sinta+is" Obj.>ar4 // para cuando se trata de una variable de primera instancia
Ing. C. S*nche1 P.
P*gina ;
Programación Orientada a Objetos
I.T.S.A.
Obj.#etodo,-4 // para cuando se trata de un método
3.
?e%erencia al objeto actual. Como ya se había dicho en temas anteriores! ara re%erenciar un miembro de la clase! se debe hacer con el objeto declarado y creado or la clase! esta declaración se lle&a a cabo or la clase y la creación or su constructor este o no imlementado. 'l constructor consiste en un m$todo (ue lle&a el mismo nombre (ue la clase! en algunos caso es necesario imlementarlo y de no hacerlo e+iste uno or de%ault! donde la declaración y creación se reali1a de la siguiente manera. /ormato en la declaración y creación de un objeto. 5omClase Obj4 // declaración del objeto Obj 6 ne@ 5omClase,-4 // creación del objeto. 'stas dos instrucciones se ueden escribir en una sola línea! de la %orma" 5omClase Obj 6 ne@ 5omClase,-4 )esu$s de esta instrucción el objeto 8Obj9 tiene todos los derechos de maniular los miembros de la clase (ue lo declara y crea. Pero no siemre es así! e+iste una alabra reser&ada del lenguaje llamada this! $sta %unciona o hace el ael de un objeto creado! y se uede utili1ar sin ser declarada y creada! con la di%erencia (ue no %unciona en los m$todos est*ticos y se usa de la misma %orma (ue un objeto creado! ara instanciar los miembros. Por ejemlo" this.#etodo,-4
//llamando el miembro metodo
o bien this. Atributo4 //siendo Atributo una variable de primera instancia
4.
#$todos"
Ing. C. S*nche1 P.
P*gina =
Programación Orientada a Objetos
I.T.S.A.
>eamos el siguiente ejemlo ara la imlementación de m$todos! tal como lo indica el ejemlo del 'jercicio 0. /* Ejemplo 1 * Esta Clase permite probar la utilidad de los métodos; * Elaborado por: */ import java.util.Scanner; class MetodoSuma { // El metodo Suma opera con dos variables public static void Suma( {int !"#$ %"#$ &"#; Scanner 'eer " ne Scanner(S%stem.in; S%stem.out.print()i+ite el vaolr de !); !" 'eer.ne!t,nt(; //lee un valor para ! S%stem.out.print()ijite el valor de %); %" 'eer.ne!t,nt(; //lee un valor para % &" !-%; //suma !-% S%stem.out.println()'a suma de )-!-) - )-%-) " )-&; //prepara au0 los dems método de la aritmética public static void main(Strin+23 var { Suma(; // preparar au0 el men4 ue controle los métodos
Pr*ctica0! Considera el ejemlo de la 'jercicio 0 y comlemente los m$todo de la aritm$tica de ?esta,-! #ultilar,-! #odulo,- y la )i&ison,-! controlados en un men. Pr*ctica 2. Una clase (ue haga lo mismo de la rimera r*ctica! donde se ali(ue el OtionPane! ara las entradas y salidas de dato
4.1. )eclaración! mensajes! aso de Par*metros! retorno de &alores.
Paso de ar*metro. 's una t$cnica en la rogramación (ue ermite y %acilita la comartición de datos comatibles de un sitio a otro! ara ello e+iste dos tios de aso de ar*metros"
Paso de parámetro por valor Paso de parámetro por referencia
Ing. C. S*nche1 P.
P*gina B
Programación Orientada a Objetos
I.T.S.A.
'n el Paso de parámetro por valor ! consiste en (ue una &ariable otorga una coia de su &alor a otra &ariable! dicha de otra manera! asar el &alor o contenido de una &ariable a otra. Por ejemlo" 6D! siendo !D dos &ariables del mismo tio y la asignación como el aso de ar*metro m*s simle (ue uede haber. Para el Paso de parámetro por referencia! tiene un en%o(ue similar al de aso de ar*metro or &alor! con la di%erencia (ue en este lo hace a ni&el objeto! es decir! (ue un objeto concede una coia de la a otro objeto! lo comlejo en estos caso es! (ue los objeto trabajan con direcciones de memoria! e imlica (ue si se hace mal uso de la dirección! uede ro&ocar errores muy %uerte en la obetencion del os datos. Por ejemlo 5omClase ObjA! ObjE4 FFdeclaración de dos objetos ObjA 6 ne@ 5omClase,-4 FFcreación de memoria ara el objeto A ObjE 6 ObjA4 FFel ObjA! le asa una coia al ObjE 'n esta ltima instrucción es donde &e la alicación del aso de ar*metro or re%erencia. 'n base a lo descrito en el ejemlo de la 'jemlo 0! &eamos un caso ara la alicación en el en&ío de mensajes como aso de ar*metros en el 'jercicio 2 /*Ejercicio 5 1/5 * Esta clase nos permite mostrar el uso % la aplicaci6n de los paso de parmetros$ %a sea en * env0o del mensaje % el retorno de los datos */ import java!.sin+.78ption9ane; class 99!alor { // El método Suma recibe un par de operando$ sin retorno public static void Suma(int !$ int % { int &"#; Strin+ Cad")); & " !-%; // reali&a el clculo 5/5 Cad")'a Suma de )-!-) - )-%-) " )-&; 78ption9ane.soMessa+eialo+(null$Cad; //emite la salida public static void main(Strin+23 var { int a"#$ b"#$ c"#; double &"#.#; Strin+ Cad")); //El método de otante a " ,nte+er.parse,nt(Cad; public static >oat ivision(>oat !$ >oat % { return (!/%; //calcula % retorna un Cad " 78ption9ane.so,nputialo+(null$)i+ite el valor de b ); b" ,nte+er.parse,nt(Cad; 99!alor 8bj " ne 99!alor(; 8bj.Suma(a$b; // llamando a Suma$ enviando dos ar+umentos c " 8bj.
Programación Orientada a Objetos
I.T.S.A.
5/5 //implementacion del metod principal public static void main(Strin+23 var { Strin+ Cad")); 99!
dos &alores de tio num$rico entero y en la imlementación del m$todo los reciben dos//+enerando &ariables de %raccional! esto 8bj1.B " 8bj1.enerador(; el tio valornum$rico de B indica (ue se uede reali1ar esa el con&ersión 8bj1. " 8bj1.enerador(; //+enerando valor de en el en&ío de los datos.
// la variable Cad$ reco+e nuevos datos Cad " Cad-)Fora se tiene +enerado el valor de B$ ?n); Pr*ctica :! considere el ejercicio 2! ara comlementarlo con los Cad " Cad-)8bj1.B " )-8bj1.B-)$ 8bj1. " )-8bj1.-)$ 8bj1.D " dem*s m$todos e imlementar su men ara su mejor control. )-8bj1.D-)?n); 78ption9ane.soMessa+eialo+(null$Cad; //imprime los datos
Ahora obser&emos el ejemlo :! (ue nos muestra el uso y la 99!
99!
Programación Orientada a Objetos
Ing. C. S*nche1 P.
I.T.S.A.
P*gina
Programación Orientada a Objetos
.
I.T.S.A.
Constructores y destructores" Un constructor! es un m$todo (ue lle&a el mismo nombre (ue la clase! se considera como el cora1ón de la clase! ya es el (ue le da &ida a los objetos ara encasular los miembros de una clase. as características rinciales de un constructor son &arios" Permite iniciali1ar las instancias de la clase 5o tienen &alor de retorno '+iste siemre uno or de%ault '+isten &arios tios Ayudan en la creación de los objetos a %inalidad de un constructor! es crear un esacio de memoria donde se uedan trabajar los miembros de una clase! esto signi%ica (ue or medio de un encasulamiento (ue es reresentado or una &ariable declarada or la clase y creada or el constructor y (ue es llamado como objeto! hace osible el trabajo m*s sencillo ara la oeración de miembros de su clase. Por ejemlo! en la %igura B! nos muestra la imlementación de un constructor"
!estructores" conocido tambi$n como recolector de basura! tiene una %inalidad de limiar la memoria ocuada or los constructores en tiemo de ejecución de los miembros de una clase! es decir! cada &e1 (ue se crea un objeto se reser&a un esacio de memoria y cuando cierra la alicación este esacio se elimina! en algunos lenguajes es necesario se
Para el caso de a&a! cuenta con un recolector de basura! esto indica (ue no es necesario imlementar los destructores! (ue al cerrar la Ing. C. S*nche1 P.
P*gina 07
Programación Orientada a Objetos
I.T.S.A.
ejecución de la clase autom*ticamente se elimina el uso de la memoria! ero cuando dichas clases son interJconectadas! en el caso de las herencias entre clase! es imortante se
.1. )eclaración! uso y alicaciones.
>eamos el siguiente ejemlo ,'jemlo ;-! esta clase nos muestra la imlementación de los constructores! como ya había mencionado antes en las características! e+isten &arios tios. Un constructor uede estar &acío ,conocido como constructor por default - o recibir ar*metros ara actuali1ar las instancias! estos ar*metros ueden ser entre las &ariable ,Común- o entre los objetos , por Copia-! cuando se da entre los objetos se dice (ue un constructor or coia /*Ejemplo G. *Este ejemplo nos muestra la aplicaci6n de l os constructores */ import java!.sin+.78ption9ane; class Constructores { public int B$$D; public Constructores(Strin+ Cadena {78ption9ane.soMessa+eialo+(null$ Cadena; public Constructores(Strin+ Cadena$ int a$ int b { B"a; "b; Cadena " Cadena -)?nB " )-B-); " )-; 78ption9ane.soMessa+eialo+(null$ Cadena; // Hn del constructor public Constructores(Strin+ Cadena$ Constructores C { B"C.B; "C.; D " B*; Cadena " Cadena -)?nB " )-B-); " )--); D " )-D; 78ption9ane.soMessa+eialo+(null$ Cadena; //Hn del constructor public int enerador( { int alor "#; // declaracion de la variable alor alor " (int(Mat.random( * 1# ; //+eneracion de dato aleatorio return alor; // retorno del valor +enerado public static void main(Strin+23 ar+ { Constructores 8bj1 " ne Constructores(),nicia el constructor vacio...); Constructores 8bj5 " ne Constructores()se activa el constructor$ iniciando valores a B$ )$8bj1.enerador($ 8bj1.enerador( ; Constructores 8bj@ " ne Constructores()se activa el constructor$ iniciando valores a B$ )$8bj5;
#.
Sobrecarga de m$todos.
Ing. C. S*nche1 P.
P*gina 00
Programación Orientada a Objetos
I.T.S.A.
Se entiende or sobrecarga a(uella %unción (ue reali1a m*s de una tarea esecí%ica a la &e1! en la rogramación surgen esos detalles! donde un m$todo uede esta imlementado m*s una &e1! y en cada imlementación realice una tarea distinta. Cuando esto sucede en los constructores se dice (ue hay una sobrecarga de constructores y cuando se da en los m$todos de e+resa como una sobrecarga de métodos. Ara (ue esto se d$! es imortante seeamos el siguiente ejemlo ,'jemlo =- ara la sobre carga de m$todos. /* Ejemplo I. *En esta clase nos muestra el uso % aplicacion de la sobre car+a */ import java!.sin+.78ption9ane; class SobreCar+a { // Este metodo permite +enerar un vlor aleatoriamente public int 8perador( {int !"#; // decl la var J!J ! " (int(Mat.random( * 1# ; //+enera aleatoriamente valor de J!J return !; // retorna el valor J!J //Este 8perador$ recibe un param % lo eleva al cuadrado public int 8perador(int a { return a*a; // retorna el cuadrado de JaJ //Este tercer operador calcula el m6dulo de JaJ entre JbJ public int 8perador(int a$ int b { return aKb; //retorna el m6dulo
Obser&emos los m$todos Oerador! la di%erencia es en el nmero de argumentos en el aso de ar*metros y la tarea de cada uno! ahora ara robar la alicación &eamos el siguiente ejemlo ,'jemlo B-.
Ing. C. S*nche1 P.
P*gina 02
Programación Orientada a Objetos
I.T.S.A.
/* Ejemplo L. *En esta clase se prueba la sobrecar+a de la clase SobreCar+a */ import java!.sin+.78ption9ane; class 9ruebaSobreCar+a { public static void main(Strin+23 ar+s { int a"#$b"#$c"#; // dec de tres var instanc al metodo Strin+ Cad")); SobreCar+a SC " ne SobreCar+a(; //se crea un objeto de la clase SobreCar+a a"SC.8perador(; Cad " )El alor +enerado de a " )-a-)?n); c " SC.8perador(a; Cad " Cad -) el Cuadrado de )-a-) " )-c-)?n); b"SC.8perador(; Cad " Cad -) Fora se +ener6 el valor de b " )-b-)?n); c " SC.8perador(a$b; Cad " Cad -)% el modulo de )-a-) K )-b-) " )-c; 78ption9ane.soMessa+eialo+(null$Cad;
Ahora analicemos los siguientes ejercicios! (ue utili1an con estructura un arreglo unidimensional! ara cada uno de estos ejemlos hay (ue hacerlos ara cuando se maneja una matri1 y un cubo. Ing. C. S*nche1 P.
P*gina 0:
Programación Orientada a Objetos
I.T.S.A.
>eamos el siguiente ejemlo ,'jemlo G/* Ejemplo . 1/5 ** En este clase se anali&ar el uso % aplicaci6n de un arre+lo unidimensional (vector o lista ** en conjunto con suu operaciones bsicas */ 5/5 import java!.sin+.78ption9ane; //implement el metodo de b4sueda //implement el metodo de ModiHcacion class NsoFrre+lo { //implement el metodo de Eliminacion //implementacion de un metodo +enerador de datos aleatorio public int enerador( Menuector( {public returnvoid (int(Mat.random( * 1##; { int n"#$ 8pc"#; // declarac JnJ como tamaRo del vector Strin+ Cad"))$8pcion")); //implement el metodo ue almacena datos en un vector // declarac JFJO$ como vector publicint23 int23F;Flmacenar(int23 int n { Aor(int i"#; iPn; i-- //pedir el tamaRo del vectoral +enerador % llena el vector { O2i3 " enerador(; //invoc Cad cuntos Elem ); return O; " // 78ption9ane.so,nputialo+(null$)9ara retorna el arre+lo lleno // convert la cadena en valor numerico // Hnn" del,nte+er.parse,nt(Cad; metodo F" ne int2n3; //creando el vector se+un el tamaRo JnJ //implement el metodo ue visuali&a los datos del vector )METN 9<,TC,9F' public Cad void"isuali&a(int23 F$ int?n) n -)1.= Flmacenar un de vector ?n) Cad$ -)5.= isuali&ar los elem del { Strin+ Cad " )); // declarac la variab vector ?n) elem del arre+lo son: ?n); Cad")'os -)@.= 8rdenar el vector ?n) Aor(int i"#; iPn; i-- de{Aorma Cad "ascendente Cad -F2i3-)$ ); -)G.= Ouscar un elem sobre el vector ?n) -)I.= ModiHcar un 78ption9ane.soMessa+eialo+(null$Cad; elem deldel vector ?n) // Hn metodo -)L.= Eliminar un elem del vector ?n) -).= Uinali&ar ?n) -)el i+ite unaue 8pcion ); los elem del arre+lo //implement metodo ordena public int23 8rdenar(int23 F$ int n do{ // inicia un ciclo do=ile {int i"#$8pcion j"#$ Fu!"#; //declarac de dos 0ndices " 78ption9ane.so,nputialo+(null$Cad; 8pc" ,nte+er.parse,nt(8pcion; // convert la cadena en valor Aor(i"#; numerico iP(n=1; i-- //inicia el ciclo del punto pivote jPn; j-- // ) el ciclo del rastreo {Aor (j"i; sitc(8pc { { case 1: F"Flmacenar(F$n; breaV; iA(F2i3 Qcase F2j35: //compara si el elem ue apunta JiJQ ue al ue apunta isuali&a(F$n; breaV; JjJ case @: F " 8rdenar(F$n; breaV; { Fu!" F2i3; // au! toma el elem ue apunta JiJ F2i3 " case F2j3; //aora el elem ue apunta JjJ se asi+na donde apunta JiJ : S%stem.e!it(#; F2j3deAault:78ption9ane.soMessa+eialo+(null$)8pcion " Fu!; //por ultimo Fu! se asi+na donde apunta JjJ ,nvalida$$$);breaV; // Hn del ciclo del rastreo //Hnile(8pcW"; del ciclo del punto pivote // Hn del ciclo do=ile // Hn del metodo Menu //implementando el metodo primario public static void main(Strin+23 vars { NsoFrre+lo 8bj " ne NsoFrre+lo(; //se crea el objeto Ing. C. S*nche1 P. P*gina 0; 8bj.Menuector(; // se invoca el Menu
Programación Orientada a Objetos
Ing. C. S*nche1 P.
I.T.S.A.
P*gina 0=
Programación Orientada a Objetos
I.T.S.A.
Practica ;. Ahora considerando el ejemlo G! comlementen los dem*s m$todos (ue hacen %alta ara tener las oeraciones b*sicas sobre un arreglo.
Ing. C. S*nche1 P.
P*gina 0B