Abrir el menú de navegación
Cerrar sugerencias
Buscar
Buscar
es
Change Language
Cambiar idioma
Cargar
Iniciar sesión
Iniciar sesión
Descargar gratis durante días
100%
(2)
100% encontró este documento útil (2 votos)
521 vistas
Programacion Java Ok
programacion java ok
Cargado por
Boca kids Amistad
Título mejorado con IA
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido,
reclámalo aquí
.
Formatos disponibles
Descarga como PDF o lee en línea desde Scribd
Descargar ahora
Descargar
Guardar programacion java ok para más tarde
Descargar
Guardar
Guardar programacion java ok para más tarde
100%
100% encontró este documento útil, undefined
0%
, undefined
Insertar
Compartir
Imprimir
Reportar
100%
(2)
100% encontró este documento útil (2 votos)
521 vistas
Programacion Java Ok
programacion java ok
Cargado por
Boca kids Amistad
Título mejorado con IA
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido,
reclámalo aquí
.
Formatos disponibles
Descarga como PDF o lee en línea desde Scribd
Descargar ahora
Descargar
Guardar programacion java ok para más tarde
Carrusel anterior
Carrusel siguiente
Descargar
Guardar
Guardar programacion java ok para más tarde
100%
100% encontró este documento útil, undefined
0%
, undefined
Insertar
Compartir
Imprimir
Reportar
Descargar ahora
Descargar
Está en la página 1
/ 103
Buscar
pantalla completa
WAC DW pase! Aa Programacion en Clases - Construcci6n de objetos Encapsulamiento - HerenciaCURSO DE avec vA V@ [0] SAN Programacion en Aprende a programar aplicaciones robustas y confiables. Escribe tus codigos una vez y ejecutalos en cualquier dispositivo. DinaProgramacion en Java @ Clases - Construccién de objetos Encapsulamiento - Herencia Gaze Titulo: Programacién en Java Il / Autor: Carlos Arroyo Diaz Coordinador editorial: Miguel Lederkremer / Edicién: Claudio Peiia ‘Maquetado: Marina Mozzetti / Coleccién: USERS ebooks - LPCU289 Copyright © MMXIX. Es una publicacién de Six Ediciones. Hecho el depésito que marca la ley 11723. Todos los derechos reservados. Esta publicacién no puede ser reproducida ni en todo niien parte, por ningtin medio actual o futuro, sin el permiso previo y por escrito de Six Ediciones. Su infraccién esta penada por las leyes 11723 y 25446. La editorial no asume responsabilidad alguna por cualquier consecuencia derivada de la fabricacién, funcionamiento y/o utiizacién de los servicios y productos que se describen y/o analizan. Todas las marcas mencionadas en este libro son propiedad exclusiva de sus respectivos duefos. Libro de edicién argentina. www.redusers.com 1PROLOGO Java es un lenguaje maduro y robusto que, desde su nacimiento en el alo 1995, ha demostrado que vino para quedarse y ha logrado evolucionar hasta convertirse en el lenguaje mas utilizado en el mundo tecnolégico. Durante nuestro aprendizaje de cualquier lenguaje de programacion podemos encontrarnos con variados libros, pero solo a través de la experimentaci6n y escudrifiando las entrafias de la Web (foros, blogs, under sites), podremos obtener los conocimientos necesarios para enfrentar el aprendizaje de mejor forma. Mientras recorremos este camino, contar con un curso como este es fundamental pues se presenta como un compendio de todo lo que necesitamos para enfrentar un lenguaje de programacién, permitiéndonos lograr, a través de ejemplos concretos, un mejor aprendizaje de los distintos temas necesarios para programar en Java. Desde el primer momento somos optimistas en que este curso sera para ustedes un desafio muy significativo y, por otro lado, lograra convertirse en una excelente guia del lenguaje Java. Carlos Arroyo Diaz Acerca del autor Carlos Arroyo Diaz es programador de profesién, escritor especializado en tecnologias y docente por vocacién. Se desempefia desde hace mas de 20 afios como docente en Informatica General y en los titimos 10 afios ensefia programacién en Java y Desarrollo Web. También se ha desempefiado como mentor docente en el area de Programacién en varios proyectos del Ministerio de Educacién de la Ciudad Auténoma de Buenos Aires, ensefiando a programar a grupos de jévenes. 2 www.redusers.comACERCA DE ESTE CURSO Java es un lenguaje de programacion que sigue afianzandose como un estandar de la web y, por eso, afio tras afto, aparece en el tope de las buisquedas laborales de programadores. Es por esto que hemos creado este curso de Programacién en Java, donde encontraran todo lo necesario para iniciarse o profundizar sus conocimientos en este lenguaje de programacion. El curso esta organizado en cuatro voltimenes, orientados tanto a quien recién se inicia en este lenguaje, como a quien ya esta involucrado y enamorado de Java. En el primer volumen se realiza una revi de este lenguaje, también se entregan las indicaciones para instalar el entorno de desarrollo y, posteriormente, se analizan los elementos basicos de la sintaxis y el uso basico de las estructuras de control. En el segundo volumen se presentan las clases en Java, se realiza una introduccién a los conceptos asociados a la Programacién Orientada a Objetos y también se profundiza en el uso de la herencia, colaboracién entre clases y polimorfismo. El tercer volumen contiene informacién sobre el uso de las clases abstractas ¢ interfaces, el manejo de excepciones y la recursividad. Finalmente, en el cuarto volumen se ensefia el uso de las estructuras de datos dinamicas, el acceso a bases de datos y la programacion Java para Android. Sabemos que aprender todo lo necesario para programar en Java en tan solo cuatro voliimenes es un tremendo desafio, pero conforme vamos avanzando, el camino se va allanando y las ideas se tornan mas claras. iSuerte en el aprendizaje! www.redusers.comSUMARIO DEL VOLUMEN II 01 INTRODUCCION A LAS CLASES / 6 Creacién de las campos Arriputos / 12 Mopiricapores be Acceso / 13 Modificador de atributos QUE SON Los oBsETOS? / 16 Creacign de objetos Constructores / 17 Declaracion de métodos Uso ve THIS / 25 Declaracin de métodos Gareace coutector y Et métopo Finauize() / 27 Paaueres / 29 Creacién de paquetes 02 InTRODUCCION A LA POO / 34 C.ases y opsetos / 35 Objetos / Creacién de una clase Mobutaribad Y ENCAPSULAMIENTO / 41 Encapsulamiento / Getter y setter / Pasar parametros CONSTRUCCION DE OBJETOS / 54 Ciase SWING / 57 03 CoLasoraciOn DE CLASES / 62 Constructor be oBseTos / 66 Gregorian calendar Uso be constantes / 73. Uso be Static / 76 Meropos Static / 81 Métodos estaticos de la API / El métado main SOBRECARGA DE CONsTRUCTORES / 84 Herencia / 87 Regla de diseno EL poumorrismo / 94 4 wwrw.redusers.comJ CV | ay Clases y objetos Llegamos a un punto clave en nuestro aprendizaje de Java. Y, antes de comenzar a trabajar en la programaci6n orientada a objetos, realizaremos una incursi6n en las clases y los objetos, pues se trata de elementos importantes en muchos lenguajes de programacion modernos. En este capitulo, trabajaremos con clases y objetos de una manera individual, sin hacer uso de la colaboraci6n entre las clases. & 1 = SS So ae. hey, EZ WE age” A |r V71, CLASES Y OBJETOS ees INTRODUCCION A LAS CLASES Una clase puede definirse como una especie de plantilla 0 molde. Aunque en el sentido estricto es una definicion adecuada, intentaremos profundizar un poco mas, para ello diremos que se trata de una abstraccién de lo real (objetos), una forma de generalizar una idea para que podamos utilizarla en un programa. En Java todo es clase y, también es objeto, gentonces? Para ejemplificar esta idea, pensemos en un libro (abstraccién), algunos pensaremos en un clasico; otros, en un libro de ficcién, y otros, en un best-seller. Sin embargo, si solicitamos pensar en un libro de Borges, la situacién cambia y vamos mas alla; si pedimos pensar en El Aleph, ya tenemos algo concreto; de esta sencilla forma hemos creado un objeto de algo que se inicié como una idea. En Java todo es una clase y, al mismo tiempo, todo es un objeto. Por esta razon, cuando creamos un programa, Java nos invita a crear una clase publica que llevar el mismo nombre del archivo. La sintaxis de una clase es la siguiente: public class Ejemplo { instrucciones.. Debemos utilizar el modificador para indicar que es publica, la palabra clave class y, luego, el nombre de la clase. Las clases se heredan de una clase jerarquicamente superior llamada Object; sin embargo, cuando sea necesario heredar de otra clase, debemos utilizar la palabra clave extends. De esta forma, la sintaxi para una clase heredada sera la siguiente: public class ClaseHija extends ClasePadre{ Anstrucciones.. Como vemos, una clase es una plantilla que define atributos (variables) y métodos (funciones). La clase se encarga de definir los 6 www.redusers.comatributos y los métodos que son comunes a los objetos de ese tipo; pero luego, cada objeto adoptara sus propios valores, aunque todos compartiran las mismas funciones. Al crear un objeto de una clase, podemos inferir que se crea una instancia de la clase 0 un objeto propiamente dicho. ce Teter) a Figura 1. En este diagrama apreciamos Se ET tos MEE Te la representacién de una clase, una clase ren Interfaz hijay una interfaz. ‘Veamos la sintaxis de la creacién de una clase y los elementos que pertenecen a ella: class [nombre de 1a clase] ( [atributos o variables de 1a clase] [métodos o funciones de 1a clase] [main] Para entender de mejor forma la creacién e implementacién de una clase, aplicaremos estos conceptos en la solucién de un problema. Debemos crear una clase que permita realizar el ingreso de los datos, el codigo de un empleado y las horas trabajadas. Una vez ingresada esta informacién, deberan mostrarse los datos ingresados y, si el empleado trabajé mas de 8 horas, mencionar que realizé horas extras. El cédigo que necesitamos es el siguiente: www.redusers.com 71. CLASES Y OBJETOS, ast import java.util. Scanner; public class Empleado { private Scanner teclado; private String nombre; private String apellido; private String codigo; private int hstrab; public void inicializar() ( teclado=new Scanner (System. in) ; System.out print ("Ingrese el nombre del empleado: nombr eclado.next (); System. out .print ("Ingrese el apellido del ie apellido=teclado. next (; System. out .print ("Ingres codigo=teclado.next (); System.out .print ("Ingrese la cantidad de horas empleado: el cédigo: “); eclado.next Int (); public void imprimir() { System. out .print1n("Nombre: “+ nombre) ; System. out .print1n("Apellido: “+ apellido); System. out .print1n("Cédigo: “+ codigo) ; System.out .print1n("Horas trabajadas: “+ hsTrab); y public void horasExtras() { if (hstrab>s) ( System.out print (nombre+” “tapellidot * trabajé horas extras.” ); } else { system. out _print (nombre+” “tapellidot * trabajé horas normales.” ); 8 www.redusers.comJAVA Vol. It public static void main(String[] ar) ( Empleado empleadol; empleadol=new Empleado(); empleadol.inicializar(); empleadol. imprimir (); empleadol .horasExtras(); Analizaremos ahora el codigo bloque a bloque, para verificar la participacién de cada uno de los miembros de una clase. En primer lugar, encontramos la clase que, en este ejemplo, se denomina Empleado: public class ) Empleado { Dentro de la misma clase definimos los atributos adecuados: private private private private private Scanner teclado; String nombre; String apellido String codigo; int heTrab; Crear una clase e instanciar un objeto ‘Ambas acciones van de la mano puesto que una depende de la otra. Instanciar es crear algo especifico de algo general, otorgéndole caracteristicas propias. La clase es genérica, el objeto es espectfico. www.redusers.com1, CLASES Y OBJETOS ees Hemos definido todos los atributos con la clausula del nombre clave private, por lo tanto, no nos permitira el acceso desde otras clases 0 desde el main. Para continuar, declaramos los métodos; la sintaxis es similar al main, aunque sin la palabra clave static: public void inicializar() { teclado=new Scanner (System. in) ; System.out .print (“Ingrese el nonbre del empleado: *); nombre=teclado.next () ; System. out .print ("Ingrese el apellido del empleado: CY: apellido=teclado.next (); systes codigo=teclado.next (); -out print (“Ingrese el cédigo: System.out .print (“Ingrese la cantidad de horas trabajadas: “); heTrab=teclado.next Int () ; En el método izar(), que luego llamaremos desde el mi creamos el objeto de la clase Scanner y cargamos por teclado los atributos nombre, apellido, cédigo y hsTrab; el método i acceder a los atributos de la clase Empleado. Ahora pasemos al segundo método, que se encargara de imprimir el contenido de los atributos nombre, apellido y hsTrab, que fueron cargados previamente: alizar() puede public void imprimir() { System. out .print1n("Nombre: "+ nombre) ; System. out .printin(*Apellido: “+ apellido) ; System. out .print1n("Cédigo: “+ codigo) ; ‘System. out .printin("Horas trabajadas: “+ hsTrab); ? El tercer método tiene como objetivo mostrar en un mensaje si el empleado trabajé 0 no horas extras: 10 wwrw.redusers.comos JAVA Vol. I public void horasExtras() { if (hstrab>s) { System. out .print (nombre+” “tapellidot * trabajé horas extras.” ); } else { System.out print (nombre+” “+apellidot * trabajé horas Por tiltimo, en el método main declaramos un objeto de la clase Empleado y, luego, llamamos a los métodos creados antes en un orden adecuado: public static void main(String{] az) { Empleado empleadol; //Declaracién del objeto empleadol=new Empleado(); //Creacién del objeto empleadol.inicializar();//Llamada a un método empleadot. imprimir (); empleado1 .horasExtras(); a SESE see TB DBO ra ee To “(Sal BE-EASSST Fes Been eS Figura 2. En el cédigo mostrado en el IDE, observamos el listado de los miembros agrupados y en orden alfabético, no en orden de aparicién, wurw.redusers.com n1, CLASES Y OBJETOS ees Creacion de los campos Para ver el contenido de nuestra clase, debemos crear los diferentes campos de la clase; para lograrlo, nos basta con declarar variables en el interior del bloque de cédigo de la clase e indicar la visibilidad de la variable, asi como su tipo y su nombre. La sintaxis adecuada para la creacién de los campos es la siguiente: [private | protected | public] tipovariable nombreVariable; Para indicar la visibilidad de las variables podemos utilizar private, protected y public, o no especificar informacién. ATRIBUTOS Los métodos y los atributos que habitualmente utilizamos en una clase estan asociados a las instancias de las clases o los objetos. Para simplificar esto podemos entender una instancia de clase como la concretizacion de una clase; de esta forma, los atributos vienen a ser las caracteristicas de aquellos objetos instanciados. Los atributos de una clase se definen segtin la siguiente sintaxis: [modificadorVisibilidad] [modificadorAtributo] tipo nombreVariable [=valorinicial]; La clase Object Se trata de la clase ralz de todo el Arbol jerérquico de clases de Java. Esta clase nos provee de una gran cantidad de métodos que sern utiizados por los objetos. En la documentacién de la API de Java, encontraremos la lista completa de estos objetos; para acceder a ella hacemos uso de la siguiente direccion web: https://docs.oracle.com/javase/10/docs/api/. 2 www.redusers.comEs JAVA Vol. It En este cédigo encontramos los siguientes elementos Deir Se trata del nombre de la variable. Eee oa CS CG) Indica desde qué parte del cddigo se puede acceder ala variable, a esto lo llamaremos modificador de acceso a la variable. aoe GUT Lery Se trata de las caracteristicas especificas del atributo. MODIFICADORES DE ACCESO Los modificadores de acceso figuran en el encapsulamiento (tema que examinaremos en la introducci6n a Ja POO); sirven para controlar el acceso a los miembros de una clase ademas de vincular datos con el c6digo que lo va a manipular, detalle muy importante en la seguridad de nuestros datos sensibles. Por ahora presentaremos los tres modificadores: public, private y protected, public Indica que se trata de un atributo accesible a través de una instancia del objeto, veamos un ejemplo: public class Ejemplo( public String cadena = “Esto public int numero = 10; un String”; public void saludo() { System. out .printin("Este es un saludo de método”); y www.redusers.com B1. CLASES Y OBJETOS, private Indica que el atributo no es accesible. Al ser heredado, el atributo se convierte en inaccesible: public class Ejemplo{ private String cadena = “Esto es un String”; private int numero = 10; private void saludo(){ System. out .printin (“Este d udo de método”) ; protected Indica que el atributo no es accesible, pero, al heredar, si se puede usar desde la clase derivada. Veamos un cédigo de ejemplo: public class Ejemplo{ protected String cadena = "Esto protected int numero = 10; un String”; protected void saludo(){ System.out .printin ("Este es un saludo de método”); ) Sin especificar También se conoce como friendly, sirve para indicar visibilidad de paquete, es decir, se puede acceder a través de una instancia, pero solo desde clases que se encuentren en el mismo paquete: public class Ejemplo{ String cadena = “Esto es un String”; int numero = 10; 14 www.redusers.comas JAVA Vol. It void saludo () { System. out .print1n("Este es un saludo de método”) ; y Modificador de atributos Dependiendo de la pertenencia de algunos atributos, estos tendran caracteristicas propias en el objeto, en la vida del atributo o en la forma de acceso. Por esta raz6n, debemos tener en cuenta los siguientes modificadores: static Indica que el atributo pertenece a la clase, no a los objetos creados a partir de ella: private String nombre; private int edad; static int contadorPersonas; final Indica que el atributo es una constante, en este caso debe presentar un valor inicial en forma obligatoria: private static final float PI = 3.1416£; transient El atributo figuraré como transitorio, por lo tanto, no podra ser serializado: private transient String password; volatile La forma de acceder a este atributo es mediante hilos 0 threads de forma asincrona: volatile int valor = 10; www.redusers.com 151, CLASES Y OBJETOS aes 2 QUE SON LOS OBJETOS? Un elemento fundamental a la hora de programar en Java son los objetos. Aunque en el capitulo 6 de esta obra realizaremos un analisis exhaustivo de estos elementos y profundizaremos en la forma en que trabajan dentro de las clases, en esta ocasién presentaremos los fundamentos de los objetos dentro de un programa. Partamos de la siguiente premisa que ya hemos mencionado: en Java todo es clase y todo es objeto. Teniendo esto en cuenta, podemos pensar en que, en el mundo real, los objetos se crean a partir de otros objetos (por ejemplo, un lapiz antes fue madera y, antes, fue un arbol). Cada objeto tiene sus propios estados 0 atributos, y comportamientos 0 métodos. Por ejemplo, una persona tiene sus propios atributos, como altura, peso, color de cabello, y también comportamientos: piensa, corre, estudia, duerme; es decir, se trata de acciones que van a determinar a esa persona u objeto. Por esta raz6n, podemos deducir que los objetos se crean a partir de un modelo o clase, tienen caracteristicas propias (atributos) y realizan determinadas acciones (métodos); pero también debemos considerar que un objeto se crea, vive y muere. Creacion de objetos Para tener en cuenta lo que es una clase de objetos, pensemos en un molde para hacer objetos determinados (un juguete, una galletita); ese molde es nuestra clase y lo usamos para crear el objeto. El molde debe agrupar las propiedades comunes de todos los objetos, pero no todos los objetos tienen que ser necesariamente iguales. Declaraciones import Si se utiliza el nombre de clase completamente calificado cada vez que se usa el nombre de una clase en el cédigo fuente, el compilador no requiere declaraciones import en el archivo fuente de Java. Sin embargo, la mayoria de los programadores prefiere utilizar declaraciones import. 16 www.redusers.comaes JAVA Vol. I Un objeto se crea en el momento en que se define una variable de dicha clase, veamos un ejemplo: Objeto = new Ejemplo() ; Con esto hemos creado un objeto de una clase Ejemplo. A la creacion de un objeto se la llama instancia, por lo tanto, si decimos “instancia de la clase Ejemplo", nos estamos refiriendo a un objeto creado de la clase Ejemplo. CONSTRUCTORES Un constructor de clase debe poner cada objeto a disposicion para ser usado, es lo que llamaremos inicializacién. El constructor inicializa el objeto en un estado razonable. Algunas caracteristicas de los constructores son las siguientes: > Debe llevar el mismo nombre de la clase. > No siempre retorna valor. > Toda clase tiene al menos un constructor; aun cuando no se haya definido ninguno, va crear uno de forma predeterminada. > Podemos crear tantos constructores como deseemos. Existen tres tipos de constructores: constructor por defecto, constructor de copia y constructor comim, analicémoslos en detalle Constructor por defecto Es un constructor que no fue definido antes; es muy comin encontrarlos en los programas. Veamos un ejemplo: public class Empleado { private String nombre; private String apellido; www.redusers.com Ww1, CLASES Y OBJETOS ees private int codigoEmpleado; Empleado empleado=new Empleado () ; En el ejemplo anterior no fue creado un constructor, por lo tanto, Java crea uno de forma predeterminada. El operador new indica que va a crear un objeto con ese constructor. Otra forma de definir un método constructor es la siguiente: public class Empleado { private String nombr private String apellido; private int codigoEmpleado; public Empleado() { Empleado empleado=new Empleado() ; Constructor de copia Cuando necesitamos inicializar un objeto con otro objeto de la misma clase, usamos este tipo de constructores. Analicemos el siguiente ejemplo: public class Empleado { private String nombre; private String apellido; Private int codigoEmpleado; /[Constructor por defecto public Empleado() { ) //constructor copia public Empleado(Empleado empleado) ( 18 www.redusers.comaes JAVA Vol. I this nombre=empleado.Nombre; this apellido=empleado.apellido; this .codigoempleado=empleado.. CodigoEmpl » En el codigo anterior, podemos notar el cambio de nombres (entre maytisculas y mintisculas) en los objetos, lo realizamos para evitar inconvenientes entre nombres que se refieren al mismo objeto. Entonces, el método de implementacién seria el siguiente: Empleado empleado=new Empleado (); Empleado empleadoCopia=new Empleado (empleado) ; Constructor comin (con argumentos) Este tipo de constructor recibir los parémetros y, luego, los pasara al objeto creado. Veamos el ejemplo para conocer como se implementa: public class Empleado { private String nombre; private String apellido; private int codigoEmpleado; /[Constructer comin public Empleado(String nom, String ape, int codigo) { this.nombre=nom; this. apellido=; this. codigompleado=codigo; Empleado empleadoCopia=new Empleado ("ovan", "Pérez", 2334); Podemos observar que inicializamos los valores del empleado con los datos que hemos pasado por parametro. www.redusers.com 191, CLASES Y OBJETOS ees Declaraci6n de métodos Cuando se plantea una clase en lugar de especificar todo el algoritmo en un unico método, se dividen todas las responsabilidades de las clases en un conjunto de métodos. Un método presenta la siguiente public void nombre del método() ( instrucciones ado, es En la sintaxis ofrecida, se muestra el método predetern decir, sin parametros. Métodos con parametros Cuando un método tiene parametros dentro de los paréntesis, se instancian las variables u otros argumentos public void nombre del método(pardmetros) { Anstrucciones... A estos parametros, podemos mencionarlos como variables locales al método, su valor se inicializa con datos que llegan cuando los Namamos. Constructor vacio Un constructor se denomina vacio cuando no lleva parametros. Si no se define ningiin constructor, el compilador crearé uno por defecto; esto permite crear objetos con New NombreClase() sin argumentos, aunque no se haya definido ningun constructor. Muchos frameworks e IDE precisan la definicién de objetos con constructores vacios. Por esta razén, es comin agregar un segundo constructor sin saber que el compilador crear un constructor vacio, y esto acarreara problemas y errores. 20 www.redusers.comaes JAVA Vol. I Veamos un ejemplo para clarificar el uso de los métodos dentro de las clases. int horas(int seg) { int h = seg/3600; return h; int minutos (int seg) { int m= (seg$3600) /60; return m; int segundos (int seg) { (seg%3600) 860; return 8; int s Como podemos apreciar, dentro de los métodos horas, minutos y segundos figuran los parametros que seran utilizados con posterioridad Métodos que retornan un dato Cuando un método retorna un dato, en vez de indicar la palabra clave void previo al nombre del método, sefialamos el tipo de dato que retorna, Luego, dentro del algoritmo, en el momento que queremos que este finalice y retorne el dato, empleamos la palabra clave return con el valor respectivo. Esta es la sintaxis adecuada: public tipo de dato nombre del método(parémetros) { instrucciones... return tipo de dato Veamos un ejemplo para analizar la forma en que se implementan métodos que retornan datos. Pensemos en un programa que pide ingresar tres valores por teclado. Luego de esto, debera mostrar el valor mayor y el menor. www.redusers.com a.1, CLASES Y OBJETOS ees Veamos el codigo que puede ayudarnos a calcular el mayor de tres valores public int calcularMayor(int numl,int num2,int num3) int mayor; A€(numl> num2 && numl> num3) { mayor= num1; } else { 4€(num2> num3) { mayor= num2; ) else { mayor= num3; d return mayor; Podemos observar que el método retorna un entero y recibe tres parametros public int calcularMayor(int numl,int num2,int num3) Dentro del método verificamos cual de los tres parametros almacena un valor mayor, guardamos este valor en una variable local llamada mayor, este valor lo retornamos con un return. La llamada al método ealeularMayor() la hacemos desde adentro de otro método, al que lamamos cargarValores(): mayor = calcularMayor (valor1,valor2,valor3) ; Es necesario asignar a una variable el valor devuelto por el método calcularMayor(). Luego mostramos el contenido de la variable mayor: System. out .printin("El valor mayor de los tres es: * 4mayor); 2 www.redusers.comos JAVA Vol. It Nea em ect td SEA Pecueiest etc) Figura 3. En la imagen pademos ver la forma en que se retorna un resultado ante la llamada al método. El tipo de retorno puede ser cualquier tipo de dato, tipo basico del lenguaje 0 tipo objeto. Si el método no tiene informacion para devolver, usaremos la palabra clave void en lugar del tipo de retorno. Creaci6n de métodos Los métodos son funciones definidas en el interior de una clase, que sirven para manejar los campos de dicha clase. La sintaxis de declaracién de un método es la siguiente modificadores tipoDeRetorno nombreDelMétodo (listaParémetros) throws listaExcepeién{ instrucciont — B ed Nombre_Método ——_—_— TOC cL lo) as Figura 4. Aqui podemos ver gréficamente la carga de varios parametros y la llamada a un valor del método. www.redusers.com 231, CLASES Y OBJETOS ees Entre los modificadores de métodos con que Java cuenta encontramos’ Pc el método solo puede ser usado en la clase donde fue definido. feuClac mms el método solo se puede usar en la clase donde fue definido, en las subclases de esta clase y en las otras clases que pertenecen a un mismo paquete. se puede utilizar el método desde cualquier otra clase. Sino se utiliza ninguna de estas palabras reservadas, entonces la visibilidad se limitaré al paquete donde esta definida la clase. Es necesario tener en cuenta que existen otros modificadores que son utilizados para tareas especificas, por lo que no se encuentran en el ‘mbito del presente libro: Indica que el método es un metodo de clase. Elie tag El método es abstracto y no contiene cédigo. La clase donde esta definido también debe ser abstracta. El método no puede sobrescribirse en una subclase. Usado cuando el método se encuentra en un archivo externo escrito en otro lenguaje. ules) El método solo puede ser ejecutado por un unico hilo a la vez. Me Destructores en Java En Java no existen los destructores, sino que la manera de limpiar la memoria es a través de su recolector de basura: garbage collector. Este se encarga de recolectar todas las variables u objetos que no se estén utiizando, al igual que aquellos para los que no haya referencias por una clase en ejecucién. El programador puede decidir en qué momento pasard el recolector de basura. Para lograrlo, hay que escribir System.ge(). 24 www. redusers.comaes JAVA Vol. I USO DE THIS Como sabemos, un constructor es un método especial que se ejecuta cuando creamos un objeto. A diferencia de un método comin, no lleva un tipo de retorno, y su nombre es el mismo que el de la clase. Veamos la sintaxis de la implementacion: class Empleado{ public Empleado() { Ainstrucciones.. y public Empleado(String nombre) ( instrucciones... d Un método miembro es un método asociado al objeto, es decir, no se trata de un método estatico y, cuando se esta ejecutando, lo hace asociado a un objeto. Ahora bien, {como podemos hacer una referencia al objeto que se esté ejecutando? En realidad, no existe una variable que refiera a dicho objeto, por esta razon entra en accion thi , que actiia como una variable que referencia al objeto. En los ejemplos de la clase Empleado, podemos usar this.nombre para acceder al nombre del objeto asociado. La palabra clave this funciona de la misma manera dentro de un constructor como dentro de un método miembro. En el siguiente ejemplo (propuesto antes), haremos un recorrido a modo de resumen de todo lo que hemos visto hasta este momento, incluyendo el uso de tk package empleado; public class Empleado { String nombre, apellido; int codigoEmpleado; public Empleado(){ //método sin parémetros this.nombre = "No informado”; www.redusers.com 31. CLASES Y OBJETOS, st this.apellido = “No informado”; this.codigoEmpleado = 0; ? public Empleado(String nombre){ //con un parémetro this(); this nombre = nombre; public Empleados (String nonbre, String apellido, int codigoimpleado) { //método con varios pardmetros this.nonbre = nombre; this.apellido = apellido; ‘this.codigoEmpleado = codigoEmpleado; public String toString(){ //método del objeto string return “Empleado = “+ this.nombre +“ “ + apellido + ~ Cédigo: * + codigoEmpleado; d public static void main(string{] args) { Empleado empleadol = new Empleado(); Empleado empleado2 = new Empleado(*Maria”) ; Empleado empleado3 = new Empleado("Juan”, "Pérez", 2335); System. out .print1n (empleadol .tostring()); System. out .print1n (empleado2.toString()); System. out .print1n (empleado3.toString()); Cuando ejecutamos este programa, arrojara la siguiente informacié Empleado = No informado No informado C6 Empleado = Maria No informado Cédigo: 0 Empleado = Juan Pérez Cédigo: 2335, 26 www.redusers.comea JAVA Vol. I Al crear el método sin parametros, no arrojara informacién; cuando colocamos un solo parémetro (en este caso el nombre), solo arrojara el nombre del empleado que hemos llamado. Finalmente, si referenciamos a todos los objetos, observaremos que nos mostrar los datos del empleado en forma completa. GARBAGE COLLECTOR Y EL METODO FINALIZE() Cuando creamos programas en Java, estos se almacenaran en la memoria principal, por esta raz6n, cuando creamos variables € instanciamos objetos, se ralentizara el programa ya que existiran elementos que no se estan utilizando. En este punto es importante el denominado garbage collector, se trata de una especie de limpiador que escanea dinamicamente en la memoria buscando objetos que ya no estén referenciados. Para familiarizarnos con el uso y las caracteristicas de este recolector de basura, podemos visitar la pagina oficial de Oracle, en la siguiente direccion: https://docs.oracle.com/javase/10/docs/ api/java/lang/System.html#gc(). Para profundizar en este recolector, debemos entender como funciona la memoria. Esta contiene dos elementos fundamentales: stack y heap, en el primero se guardan los valores primitivos (int, float, double, boolean, char, etcétera). En el segundo, se alojan todos los objetos creados en un programa. fenemos una clase Empleado, esta crear una instancia de ella, 0 un objeto de clase en el heap, mientras que creara una referencia a ese objeto en el stack. Garbage collector apunta a un espacio de memoria. Como cada espacio de esa memoria esta reservado para alguna aplicacién, rutina, etcétera, cuando creamos un objeto, estamos creando un puntero, que sefialara ese espacio de la memoria. Por ejemplo cuando hacemos la instruccion new Objeto(), se reserva un espacio de la memoria para alojar el objeto que acabamos de instanciar. www.redusers.com 271. CLASES Y OBJETOS, cea! Cer y 10 \ Pes eee scr Figura 5. Este esquema muestra el funcionamiento de la memoria y el espacio asignado a cada uno de los objetos y tipos primitivos. Veamos un ejemplo Empleado empleadol = new Empleado() ; Empleado empleado2 = new Empleado(); Hemos reservado dos espacios de memoria para los dos objetos referenciados: empleadol y empleado2. Si asignamos valores a los objetos antes creados, veremos lo que sucede: do ("Juan") ; A simple vista, estamos asignando los atributos del empleadol al empleado2, sin embargo, esto no es asi y resulta muy importante reconocer este tipo de asignaciones, pues lo que realmente hacemos es que ‘empleado2 apunte al empleadol, es decir, a la misma ubicacién de memoria ala que apunta empleadol. Esta es una de las situaciones que causan varios dolores de cabeza a los iniciados en este lenguaje, sin embargo, mas adelante veremos cémo solucionarlo gracias a los getters y setters. 28 www.redusers.comoes JAVA Vol. It eT ty CUE Cramer MOL) STACK 10 @ ofa a Datos primitivos Cee ERS Figura 6. En este esquema se muestra cuando dos objetos instanciados referencian al mismo espacio de memoria, PAQUETES Java provee una utilidad que nos permite almacenar codigos relacionados entre si para poder utilizarlos en un nuevo programa, de tal manera que no sea necesario copiarlo o rehacerlo, al contrario, solo se precisa importarlo directamente y acceder a él. Los denominados paquetes nos ayudan a organizar y administrar de una mejor manera nuestros proyectos. Otra de las ventajas de la utilizacién de los paquetes o packages es reducir los conflictos entre los nombres de las clases que se Ilaman de la misma manera, pero que se encuentran en paquetes diferentes, y también proteger el acceso a las clases. Un ejemplo que ya hemos visto es el uso de la clase Scanner, que se encuentra dentro del paquete java.util. Para tener acceso a cada uno de sus métodos y utilizarlos debemos escribir lo siguiente: import java-util.Scanner; www.redusers.com 291, CLASES Y OBJETOS ees Para referirnos a una clase de un paquete, es necesario anteponer el nombre de la clase al nombre del paquete, exceptuando aquellas ocasiones en que el paquete haya sido importando explicitamente. Veamos un ejemplo: patMatriz.MatrizCuadrada En esta ocasién, el paquete se llama patMatriz y contiene una clase denominada MatrizCuadrada. Entonces, para importarla en un proyecto, debemos usar la palabra reservada import, de esta manera accederemos a su contenido: import pqtMatriz; Ahora podemos referirnos a la clase MatrizCuadrada simplemente escribiendo su nombre sin necesidad de escribir qué paquete la contiene. De la misma forma, es posible acceder a todos los paquetes que Java nos ofrece; si queremos conocer todos los que existen hasta la tiltima version, debemos visitar el sitio oficial de Oracle, en la siguiente direccién: https://docs.oracle.com/javase/10/docs/api/ overview-summary.htm. Creacion de paquetes Para crear un paquete en Java, necesitamos crear una carpeta (no importa por ahora el lugar), a la que Ilamaremos misPaquetes. Dentro de ella crearemos otra, a la que Ilamaremos programas, y otra carpeta a la que denominaremos primeros. Ahora escribiremos un sencillo programa de Java: package misPaquet« programas .primeros, Le estamos indicando que nuestro programa va a quedar dentro de este paquete. Ahora definiremos nuestra clase: public class Programita( public void imprimir() ( 30 www.redusers.comee JAVA Vol. I System.out .print1n("\nEsto es un programa desde el paquete primeros’ y El modificador de acceso debe ser pitblico tanto en la clase como en el método, de esta forma sera posible acceder a la clase desde cualquier otro paquete. Cuando importemos la clase del paquete creado antes, debemos hacerlo de la siguiente manera: import misPaquetes.programas.primeros.*; Con esto traeremos a las clases que hay dentro de él. RESUMEN CAPITULO 01 En este capitulo analizamos las clases, el control de accesos a los miembros, la creacién de constructores y los atributos. Hicimos una incursion a los métodos, y analizamos de una manera practica su uso dentro de las clases y la importancia de estos en el funcionamiento de los programas. Luego hicimos una referencia a objetos mediante el uso de this, y vimos como hace Java para recolectar la basura y liberar la memoria. Finalmente analizamos la creaci6n y el acceso a los packages. www.redusers.com 311. CLASES Y OBJETOS, ast Actividades 01 Test de Autoevaluaci6n {Qué es una clase? ie 2.
: -O- [Easoioe [aa] or (BEB ASSET Fe siaalenloe Figura 5. Observemos que se han ubicado las dos clases de manera paralela, de tal forma que podemos trabajar en conjunto y ver lo que hace una o la otra, Esto se puede realizar en forma vertical u horizontal wurw.redusers.com 412. PROGRAMACION ORIENTADA A OBJETOS ees En el ejemplo del auto, podemos ver que sus elementos se fusionan, ya que por separado serian inertes 0, si no existieran, el programa comenzaria a fallar. Ahora bien, cuando en un programa tenemos varias clases, siempre una de ellas sera la clase principal, es decir, la que provocars la ejecucién del programa. Esta clase principal es aquella que contiene al método main, entonces, siempre existiré en un programa hecho en Java una clase que contenga a este método. Encapsulamiento Encapsular consiste en esconder los atributos de una manera que, tan solo con algunos métodos especiales, podamos verlos desde el lugar que los invoquemos. El uso de este concepto en el paradigma a objetos es sinénimo de seguridad. La encapsulaci6n es muy conveniente y nos permite colocar en funcionamiento nuestro objeto en cualquier tipo de sistema, de una manera modular y escalable. Existen ciertos modelos o reglas para poder encapsular: aC Hace que el miembro de la clase pueda ser accedido desde el exterior de una clase y desde cualquier parte del programa. CSL) Solo es accesible desde la clase y desde las clases que heredan (a cualquier nivel). be ee Cl Solo es accesible desde las clases. Si tenemos un programa que esta compuesto por més de dos clases, necesitamos imperiosamente usar el encapsulamiento. Este concepto aparece cuando trabajamos con una cantidad de clases, y cada una de ellas posee dedicaci6n a ciertas funcionalidades dentro del programa. Deberia ser posible invocar las funcionalidades de una clase principal, pero no siempre esto sucede, ya sea por cuestiones de seguridad o por preferencias del programador, que puede requerir que determinadas acciones solo se puedan manejar desde su propio médulo, a esto se le llama encapsulamiento. {Como hacemos para implementarlo? Usemos el mismo ejercicio de la clase Uso_Coche: 42 wwrw.redusers.comee JAVA Vol. I mercury.ruedas =3; Si ejecutamos el cédigo anterior, veremos que dara como resultado que el auto posee 3 ruedas. Entonces, para qué definimos en la clase Auto los atributos si podemos cambiarlos desde cualquier seccién? En este momento, podemos decir que existe informacién a la que llamaremos sensible, que debera ser encapsulada. En el ejemplo que hemos desarrollado, las ruedas solo se pueden modificar en la clase a la que pertenecen o donde fueron construidas, para ello necesitamos usar los modificadores de acceso, en nuestro caso colocaremos antes de la variable el término private. Veamos ahora qué sucede si modificamos nuestro codigo y, a todos los atributos, les agregamos private: public class Auto ( private int ruedas; private int ancho; private int largo; private int motor; private int peso; ) Cuando vayamos a la clase Uso_Coche, veremos que el codigo nos mostrard un error, es decir, no sera posible acceder al objeto que lamamos. Esto se debe a que hemos encapsulado el dato en la clase Auto y, por Io tanto, no sera visible desde otra clase. Reutilizaci6n de codigo Una de las formas mas utiles para generar cédigo que sea reutilizable es que cada método se limite a realizar una tarea bien definida, y su nombre exprese esa tarea con efectividad, por ejemplo, sumarCuadrados(). Un método que lleva una tarea especifica es mas facil de probar y depurar que uno mas grande y con multiples tareas. Una manera de darse cuenta de que no estamos modularizando correctamente es verificar que no podemos escribir un nombre conciso para un médulo o método. www.redusers.com 432. PROGRAMACION ORIENTADA A OBJETOS: ES La pregunta ahora es: ¢cémo podemos hacer para acceder a estas propiedades si permanecen invisibles? Necesitamos algunos elementos adicionales, en este caso, los métodos getter y setter. Ate? i a ae RES OC eee TWD B-O- } [asaiemia| Em codeine «| H eae) ory | OBB \ASVPei Pre sigue daa 2/20 Hal : aS E 1 joid main(Stringt} azgs) { [| [ Ll 4 ! Fe Figura 6. En el cddigo de la imagen podemos observar que se presentan errores de acceso a los atributos de un objeto (ruedas). Para ver los datos que han sido encapsulados, debemos utilizar los métodos de acceso, esto es una forma de conectar los elementos que tenemos en las distintas clases. Programacion funcional en Java Aligual que Scala o Haskell, con la incorporacién de las expresiones Lambda, Java 8 hizo por fin el ingreso a la programacién funcional. Por ejemplo, se trata de una manera bastante eficiente de agrupar una coleccién segiin el valor de un campo de una clase en particular. 44 wwrw.redusers.comaes JAVA Vol. I Los métodos getter y setter son estructuras que sirven para obtener o almacenar algiin valor de un atributo de una clase. Un getter (de get: ‘obtener’) indica que vamos a tomar un valor de un atributo, también se lo llama método captador.La sintaxis de un método de este tipo es la siguiente: public [TipoDato] getNombreatributo() { return nombreatributo; Podemos notar que dentro de su instruccién hemos ubicado un return; esto es adecuado para que retorne un valor, en este caso el que corresponde a la variable. En cuanto al método setter (de _: ‘poner’), esta indicado para guardar lo obtenido anteriormente, también se lo denomina definidor. La sintaxis de un setter es la siguiente: Public void setNombreAtributo([TipoDato] nombreatributo) { this.nombreatributo = nombreatributo; Podemos notar que, en la sintaxis del setter, se encuentra un void, lo que implica que no devolvera un valor. La importancia de estos métodos radica en que podemos utilizar los valores de algiin atributo sin la necesidad de hacerlo en la clase desde donde se origind, Paradigmas de programaci6n En la programacién existen varios paradigmas, por ejemplo, hay lenguajes mas antiguos que estaban orientados a procedimientos (Fortran, Cobol, Basic) y también lenguajes mas modernos que estan orientados a objetos (C++, Java, Visual.Net). La diferencia se encuentra en la forma de interpretar la manera de programar. En los primeros, era bastante dificil corregir errores y reutlizar el codigo, mientras que en los segundos es mas sencillo y pragmatico, pues utilizamos el mismo comportamiento ‘que tienen los objetos en la vida real www.redusers.com 452. PROGRAMACION ORIENTADA A OBJETOS ees Veamos ahora un ejemplo para entender la forma en que se implementan estos métodos siguiendo el trabajo que hemos realizado con la clase Auto: public class Auto { private int ruedas; private int ancho; public Auto() {//Constructor de la clase ruedas = 4; ancho = 300; I public String cantidad_cuedas() {//Getter return “la cantidad de ruedas , ” + ruedas; En el c6digo anterior creamos el método cantidad_ruedas(), del tipo String, pues queremos que aparezca una cadena de caracteres en el resultado. Luego utilizamos la palabra clave return para que retorne lo que le encomendamos y, finalmente, concatenamos con la variable ruedas. Ahora veamos cémo funcionara para que retorne un atributo en la clase donde ejecutaremos el programa, es decir, Uso_Coche: System.out .printin("Ruedas: “ + mercury.cantidad_ruedas()) ; En este codigo hacemos una salida y, dentro de ella, concatenamos una cadena con el nombre del objeto previamente instanciado; podemos notar que, al poner el punto, aparecerin los métodos. En nuestro caso, solo debemos hacer clic en cantidad_ruedas(), que habiamos creado en el ejemplo anterior. Cuando ejecutamos el programa, veremos el siguiente resultado: Ruedas: a cantidad de ruedas es:4 Ahora bien, agregaremos mas atributos a nuestro programa, esta vez no usaremos el modificador de acceso private: String color; int peso_Total; boolean asientosCuero, aireAcond; 4% www.redusers.comees JAVA Vol. I Ahora crearemos un método setter para establecer una caracteristi ca especial para un auto especifico: public void establececolor(){ //Método color = “gris”; En este caso hemos puesto el color gris. Para continuar, crearemos un método getter para obtener este valor en la clase principal: public String unColor(){//Método getter return “el color del coche es: “ + color; + Ahora tendremos que instanciar un nuevo objeto en la clase principal y lo hacemos de la siguiente forma: public static void main(String[] args) { Auto miAuto = new Auto(); miauto.estableceColor (); System. out .printin(miAuto.unColor ()) ; En el cédigo anterior hemos instanciado a la clase en un objeto llamado miAuto. Luego traemos el método que creamos en la clase Auto, escribimos miuto y aparece la cantidad de métodos establecidos, entre ellos elegimos estableceColor(). Luego, si queremos ver el resultado en pantalla, solo tenemos que poner el nombre del objeto y elegimos el método getter unColor(), con lo que obtendremos lo siguiente: el color del coche es: gris Ahora bien, gqué pasari sino escribiéramos la siguiente linea? miduto.estableceColor (); Probemos ejecutando el programa sin la linea anterior, veremos que nos arroja lo siguiente: el color del coche es: null www.redusers.com 472. PROGRAMACION ORIENTADA A OBJETOS ees Esto sucede porque no estamos utilizando el método estableceColor(), por lo tanto, aparecera vacio, esto es porque no estamos invocando a un método existente Pasar parametros Una de las ieee que mejorara la implementacién de los métodos ya mencionados es el uso de parametros. En el ejemplo de los getter y setter, vimos como haciamos para pasar un aspecto del objeto, pero esto presentaba una complicacién cuando necesitabamos pasar alguna otra propiedad, y nos dejaba limitados. Ante esto, una de las soluciones es que, a la vez que llamamos alguna propiedad por un método, le pasamos junto con la llamada un parametro 0 valor, de esta forma el método tomara ese valor y operar con él. Volvamos a los cédigos para ver como implementar el paso de parametros. En la clase Auto: public void estableceColor (Stringcolor_auto) { color = color_auto; Agregamos al setter un argumento (color_auto) de tipo String, luego dentro del atributo color se iguala a la variable del pardmetro. Debemos acotar que se puede pasar mas de un argumento en los pardmetros de los métodos. Constructor vacio Las variables de instancia pueden declararse como public 0 como private y pueden pertenecer a cualquiera de los tipos de datos primitivos de Java. Los programadores suelen declarar variables de instancias private para probar, depurar y modificar sistemas. Entonces, si una subclase puede acceder a una instancia de variable private de su superclase, las que heredan de esa subclase también lo pueden hacer. Esto provocaria la privacidad de informacién, cosa que no esta bien. 48 www.redusers.comaes JAVA Vol. I Ahora la clase Uso_Coche: public static void main(string[] args) ( Auto miauto new Auto(); miAuto.estableceColor (“Rojo”) ; System. out . print in (miAuto.unColor ()) ; Una vez instanciada la clase lo que hacemos es escribir miAuto, observamos que inmediatamente aparecera la serie de elementos antes construidos, Elegiremos el método estableceColor(), dentro de él escribimos un String del color que deseemos. Si ejecutamos el cédigo deberiamos ver lo siguiente: el color del coche es: Rojo Inicialmente habiamos establecido los atributos de las tiltimas tres variables sin una prohibicion de acceso, esto atenta contra la regla principal de la encapsulacién, veamos qué pasaria si escribimos la siguiente linea en la clase Uso_Coche: miAuto.color= “verde”; Ahora veamos qué aparece cuando ejecutamos el cédigo el color del coche es: vertle Esto no resulta una buena practica, pues no nos serviria de nada todo lo creado antes. Nos encontramos ante un error conceptual, pues nunca debemos manipular directamente la propiedad de un objeto utilizando su propia instancia. Referencias a objetos de la misma clase Si un objeto de una clase hace referencia a otro objeto de la misma clase, el primer objeto puede acceder a todos los datos y métodos del segundo, no importa que alguno de estos sean private. www.redusers.com 492. PROGRAMACION ORIENTADA A OBJETOS: Ss Wi Prestacones [ElArchives il Proyectos - Matodos Editar Ver Navegar Fuente Reestructurar Ejecutar Depurar Profile Team Herrami RRBs OC auom 3) TB D-B-G- “Pagina de nico _ ||| Auto.java_ |} Uso_Coche java [Ree] tor |B AEP BRP esiaule ala 1) package pot 3 * 3 * gauthor Ch A . 5 public class Uso_Coche { 6 7 public static void main(String(] args) { 8 Auto miauto = new auf & 10) System. out.printin (miAuto.unColor ())+ 1 12 > 13 > Fa Figura 7. En a figura vemos que el IDE sugiere, dentro del elemento invocado, que el valor es de tipo String, esto se debe a que habiamos pasado el pardmetro en el setter. Ahora ponemos el modificador de acceso private en la siguiente variable: private String color; Esto provocara que la clase Uso_Coche nos marque un error de privacidad, por lo tanto, no podemos usar el atributo color: miAuto.color= “verde”; Aqui vemos las consecuencias directas de lo que sucede si no encapsulamos nuestras variables. Ahora crearemos un método setter para los asientos, para que podamos elegir si seran o no de cuero; cuando tengamos este tipo de disyuntivas, usaremos el tipo boolean: www.redusers.comaes JAVA Vol. I public void estableceAsientos (String: //setter if (asientosCuero: this entosCuero yelse{ ientosCuero=fals this En este caso crearemos una estructura de decision para resolver si el coche tendra o no asientos de cuero. Para ello, utilizaremos la palabra reservada this: public String tipoAsientos(){ //Getter itt return “El coche lleva asientos de cue: jelset turn “el coche lleva asientos normales”; y entosCuero. equalsIgnoreCase("si”)) { Antes de continuar, debemos establecer que dentro de un if nunca se debe comparar el String con el signo ==, en vez de ello, debemos hacerlo con el método equals. Ahora iremos a la clase uso_Coche para ver si funciona lo que acabamos de construir, debemos establecer el método setter estableceAsientos y, dentro de él, ponemos un valor que determinara si lleva o no asientos de cuero: miAuto stableceAsientos ("si") ; System. out .print1n(miAuto.tipoAsientos()) ; d Al ejecutar el cédigo anterior, vemos que funciona a la perfeccién, entregando el siguiente resultado: El coche lleva asientos de cuero. www.redusers.com 512. PROGRAMACION ORIENTADA A OBJETOS Eas Al utilizar el IDE, existe una forma automatica de construir los getter y setter de todos los elementos creados; para lograrlo hacemos clic derecho en la linea donde vamos a incrustar los métodos y elegimos la opcién Insertar, luego hacemos clic sobre getter y setter. Una vez elegida la opcin, veremos todas las variables disponibles, solo debemos marcar aquellas para las que construiremos el getter o el setter. Una vez creados los métodos que necesitemos, el IDE nos ubicara dentro los elementos adecuados para seguir programando, esto genera una enorme ventaja ya que no es necesario escribir mucho cédigo para implementarlo. La forma en que se veran es como muestra el siguiente ejemplo: public int getRuedas() { return ruedas; y ioiis aia Vr Dave Foone faa Gear Oops Pate Team Waramienar Verona ae AES OC seo isl TW D- [ 7 Oe Geter yters [Enos sve reoey [BF = BLS PEGG GSE sie eps prem nptny tion public String aalor() ‘ lamsensoncuerem="9i"? public Seeing tiposstentos()( Figura 8. Ena figura podemos ver cémo se pueden seleccionar los abjetos que creamos convenientes y, a partir de eso, crear los getter y setter, 52 www.redusers.com,as JAVA Vol. I public void setRuedas(int ruedas) ( this.ruedas = ruedas, ) Se realizaré lo mismo con cada una de las variables creadas. Por ejemplo, si tenemos 10 variables creadas, se crearan 10 getter y 10 setter, 20 métodos en total, todo en un segundo. Al crear nuestros métodos getter y setter, puede que existan algunos que nunca usemos por lo que estaremos contradiciendo el ahorro de memoria, sin embargo, si tenemos en cuenta el ahorro de escritura de c6digo, podemos considerarlo como una buena practica. Ey a i Public int get Ruedas) ( , public void setRnedas(int ruedas) ( | ehig.ruedas = x , public int getanchot) ( public void setAncho(int anche) ¢ > public int getLargo() ( revurn iargi , public void setLargo(int largo) { chia. arge = larg Figura 9, Podemos notar que el IDE ha ubicado, por poblic int getilotor() ( cada elemento creado | 5 ee (variables), su respectivo getter y setter, con la codificacién necesaria ids para continuar. , [public void setMotor(int motor) { www.redusers.com 532. PROGRAMACION ORIENTADA A OBJETOS ees CONSTRUCCION DE OBJETOS ‘Trabajaremos ahora con la construccion de objetos; en el ejemplo de la clase Auto, vamos a crear otro método, pero esta vez haremos que inicialice un setter: public void configuraAire (String aireAcond){ //Setter Af (aireacond.equalstgnorecase("si”)) { ‘this.aireAcond = true; Ahora que ya configuramos el estado del aire acondicionado del auto, haremos lo mismo con el getter: public String tieneAireAcond(){ //Getter 4€(aireAcond ==true) ( return “El coche tiene aire acondicionado” yelse( return “El coche no tiene aire acondicionado”; Visibilidad de métodos y atributos Cuando exponemos y, en contraposicién, escondemos elementos, estamos haciendo referencia al nivel de visiblidad de los métodos y los atributos de las. clases. Los atributos y los métodos que definamos como public seran visibles desde cualquier clase; por el contrario, aquellos a los que definamos como private estaran encapsulados y, por ende, solo podran ser invocados y manipulados dentro de la misma clase. 54 www.redusers.comaes JAVA Vol. I A continuaci6n, crearemos un método que sea getter y setter a la vez; aunque no sea una buena practica este tipo de implementaciones, lo haremos para aprender un poco mas acerca de estos conceptos. Basicamente, lo que lograré es hacer las dos cosas (getter y setter), pero no a la vez, sino dependiendo de lo que le pidamos. Para continuar con el ejemplo del Auto, incorporaremos el peso total del vehiculo, sin embargo no sabemos si el auto va tener aire o asientos de cuero, por lo tanto, podria tener peso extra. Veamos el codigo: public String pesoAuto() ( //setter y Getter a 1a vez int peso_carroceria = 500; peso_Total = peso_plataforma + peso_carroceria; if( peso_Total = peso_Total + 50; entosCuero==true) { //Estimamos este peso extra de los d if (aireAcond =: ntos de cuero rue) { peso_Total = peso_Total + 20; //Bstimamos este peso ? xeturn “el peso del coche ” + peso_total; Entonces, :por qué seria un método getter y setter a la vez? Por un lado establece, con una estructura de decision, los pesos adicionales que tendré el auto y, por otro lado, los obtiene a través del return. La anotaci6n @Override Debemos declarar métodos sobre escritos cuando se va a asignar en tiempo de compilacién y se hayan definido las firmas correspondientes al método. Aunque es mejor encontrar errores en tiempo de compilacién que en ejecucién. La anotacion @Override simplemente se utiliza para forzar al compilador a comprobar en tiempo de compilacién que estamos sobrescribiendo correctamente un método, y de este modo, evitar errores en tiempo de ejecucién. www.redusers.com 552. PROGRAMACION ORIENTADA A OBJETOS ees Ahora declararemos un getter con el precio del coche, nuevamente tendremos que considerar que no es lo mismo que tenga aire o que cuente con asientos de cuero. Veamos el codigo: public int precioCoche()( //Getter int precioFinal= 15000; //Precio estimado en délares if (asientoscuero: rue) ( precioFinal += 2000; //Precio e: d if(aireacond ==true) ( precioFinal += 1500; //Precio e: » return precioFinal; imado imado Ahora probamos este ejemplo en la clase Uso_Coche, recordemos que esta contiene el método main que Ilamara a los métodos creados: miAuto.estableceAsientos ("no") ; System. out .print1n (miAuto.tipoAsientos ()); miAuto.configuraAire ("si") ; System. out .print in (miAuto.TieneAireAcond ()) ; ‘System. out .printin (miAuto.pesoAuto()) ; system.out .printin("el precio final del auto es: * + mi- Auto.precioCoche ()) ; Superpoblacién de clases En Java, todas las clases forman parte de una jerarquia de clases. Es bien sabido en la industria del software que se debe evitar la proliferacion de clases, lo que provoca problemas de indole administrativa y obstaculiza la reutilizacién de software. Evitemos complejizar las jerarquias. 56 www.redusers.comea JAVA Vol. I Ahora ejecutaremos el programa, para ello debemos probar cuando tiene asientos de cuero 0 cuando tiene aire, y cuando no presenta estas caracteristicas. Hay que recordar que el precio establecido para este auto es de 15000 délares, segiin ello, debe aumentar 2000 para los asientos de cuero y 1500 para el aire. De la misma manera, debemos probar el peso, recordando que los asientos de cuero pesan mas y si lleva aire, también. Al ejecutar el programa podemos ver lo siguiente en la consola: el color del coche es: Rojo El coche lleva asientos de cuero El coche tiene aire acondicionado el peso del coche es 1170 el precio final del auto es: 3500 Esta claro que el programa resulta un poco incémodo, pues debemos cambiar los valores de manera manual, la forma correcta es usando un cuadro de diélogo que nos pida los valores que deseemos para el auto. Esto puede solucionarse gracias al uso de la clase Swing, que conoceremos mas adelante. CLASE SWING La clase Swing nos permite trabajar con elementos de entrada de datos, como caja de datos y mensajes. Para implementar esta clase debemos importarla: import javax.swing.*; De este paquete vamos a utilizar un elemento llamado JOptionPane: Auto miauto = new Auto(); System. out .print1n (JoptionPane. showInputDialog(“Ingresa el color del auto: “)); www.redusers.com 572. PROGRAMACION ORIENTADA A OBJETOS ees miauto stableceColor (miAuto.unColor ()); miAuto.estableceAsientos (JoptionPane. showInputDialog("zTiene asientos de cuero?”)); System. out .print 1n (miAuto.tipoAsientos()); miAuto . configuraAire (JOptionPane. showInputDialog("zTiene aire acondicionado?”)) ; system. out .print In (miAuto.TieneAireAcond()); system. out .printin (miauto.pesoauto()); ae System. out .print1n("el precio final del auto e: Auto.precioCoche()); Implementamos el JOptionPane cuyo método showInputDialog nos permite efectuar la entrada de datos a través de un cuadro de didlogo. Por otro lado, las siguientes instrucciones permiten que los resultados puedan verse en la consola: miAuto.estableceColor (miAuto.unColor ()); System. out .print1n (miAuto.tipoAsientos()) ; System. out .print1n (miAuto.TieneAireAcond()) ; Cuando respondemos que si a alguno de los elementos extras que tendra el auto, estos se sumaran al precio total y a su peso, mientras que, si respondemos en forma negativa, dejara todo como se establecié de manera predeterminada. Al ejecutarlo podemos verificar que el programa funciona a la perfeccién Java FX Las bibliotecas de Java FX han venido en las ultimas versiones a reemplazar a Java Swing en lo que se refiere a la GUI. Con el advenimiento de nuevos patrones de disefio cada vez mas versdtiles, como MVC, los programadores estan viendo con mejores ojos esta nueva alternativa que ofrece Oracle. 58 www.redusers.comier veg Foes Reinet Gente Depunr Bie Tem Hevaiesan Vemma Ams 1S OE arom ol TW: O- fea ve.cateine x) fer |B B-BIRSFEG Pe lagiealie package poo; [moore javax.swing.*2 public class Use Coane { Public static void matn(string{] args) { ‘Auto miauco = new Auco() ‘Syatem. out.printin (JopeionFane. shovInputDialo| mikuto.estableceColor (miAato,unColor ())7 oe | ——_, Figura 10. En esta imagen se muestra como Java Swing nos permite cargar informacion a través de un cuadro de dilogo. « ms & RESUMEN CAPITULO 02 www.redusers.com 592. PROGRAMACION ORIENTADA A OBJETOS: as Actividades 02 Test de Autoevaluaci6n 1. {Como se crea una clase? 2. {De qué forma se puede instanciar un objeto de clase? 3. Nombre los elementos fundamentales de la programacién orientada a objetos. 4. (Qué funcién cumple el método constructor dentro de las clases? 5. {Cudl es el sentido de modularizar los programas? 6. {Qué significa el encapsulamiento? 7. (Qué es un método getter? 8. {Como pasamos parametros en los métodos? 9. {Qué es un constructor de objeto? 10. {Qué es la clase Swing? Ejercicios practicos 1. Cree una clase e instancie los objetos que necesite para un programa en el que se calcularan los sueldos de los empleados, teniendo en cuenta las horas extra y los impuestos que se les descuenta. 2. Considerando el ejercicio anterior, debe encapsular las variables. Recuerde el motivo por el que se realiza esta accion. 3. Provoque los métodos getter y setter necesarios para invocar a las acciones realizadas en cada parte del programa. 4. Realice un programa calculadora, en el que dada cierta cantidad de nimeros, se resuelvan operaciones basicas. Recuerde aplicar lo aprendido en este capitulo. 60 www.redusers.comJ (~—F" Sense eel; esenciales de la POO En este capitulo revisaremos en forma mas detallada algunos de los elementos que componen la POO. Veremos la colaboracion de clases, aprenderemos sobre la herencia y, ademas, profundizaremos en el polimorfismo, es decir, lograremos que los métodos enviados a los distintos objetos sean interpretados de una manera inteligente. ‘033. ELEMENTOS ESENCIALES DE LA POO. ees COLABORACION DE CLASES Cuando dos 0 mas clases se comunican entre si y una de ellas intenta enviar un mensaje a través de los métodos, estamos frente a la colaboracién de clases. Asi como en la vida real es muy dificil que los objetos se encuentren aislados, en la POO también deben relacionarse. co Vola aS Figura 1. En el modelo se muestra como una clase intenta comunicarse con otra, esto se produce gracias a los métodos. Ahora veremos un ejemplo que muestra como manejariamos una caja menor, pues nos servira para entender como funciona la colaboracién de clases: Package cajamenor; public class IngresosEgresos { J/atxibutos private String nombre; private int caja; public IngresosEgresos (String nom) ( nombre=nom; public void ingresar(int c) { 62 www.redusers.comas JAVA Vol. It cas: public int retornarMonto() { return caja; public void imprimirIngresos() { System. out .printin(nombre +” pagé “+ caja); ? public void imprimirggresos() ( System.out .printin("A “ + nombre +” se le pagé “+ (caja); d En este codigo creamos la clase y las variables privadas o atributos, después el constructor de la clase, un método que pasa parametros; luego creamos los getter y setter, finalmente el método imprimirIngresos() ¢ imprimirEgresos() que devolvera los valores antes configurados. Ahora debemos crear la clase CajaMenor, que contendra la siguiente codificacion: package cajamenor; public class CajaMenor { private IngresosEgresos clientel, cliente2, cliente3, cliente4, provi, prov2,pagol; public CajaMenor() { clientel=new IngresosEgresos (“Juan”) ; cliente2=new IngresosEgresos (“Ana”); www.redusers.com 633. ELEMENTOS ESENCIALES DE LA POO as public void operacion cliente3=new IngresosEgresos (“José”) ; cliente4=new Ingres Panaderia”); provi=new IngresosEgresos (“Lécteos”) ; Prov2=new IngresosEgresos (“Bebidas”) ; pagol = new IngresosEgresos (“Banco”) ; oO = (500) ; = (650) ; cliente3. ingresar (450) ; clientel.. ingre: cliente2. ingre: provl.pagar (200) ; prov2.pagar (150); pagol.pagar (800) ; public void Totales() { Ant total = clientel.retornarMonto() + cliente2. retornarMonto()+ cliente3.retornarMonto()+ provl. retornarMonto()+ prov2.retornarMonto()+ pagol. retornarMonto () ; System.out.println ("El total de dinero en la caja es. + total); cliente .imprimirIngresos () ; cliente2. imprimirIngresos () ; cliente3. imprimirIngresos () ; provi. imprimirEgresos (); prov2.imprimirEgresos (); pagel. imprimirEgresos (); public static void main(String[] ar) ( CajaMenor cajasnew CajaMenor() ; www.redusers.comea JAVA Vol. I casi caja.totales(); operaciones (); Hasta aqui hemos creado ¢ instanciado la clase CajaMenor, también definimos los atributos; mediante el constructor, le daremos el nombre tanto a los clientes como a los proveedores y el pago, ya sea el pago predeterminado o mediante el paso de parametros. A continuaci6n, tenemos los métodos operar() en donde cargaremos el dinero que entra o sale de acuerdo al nombre instanciado. En el método Totales() se imprimir la informacion previamente calculada, por otra parte, en el método main haremos la llamada de todos los métodos creados tanto en esta clase como en la predecesora. Cuando ejecutemos el programa, debera mostrar lo siguiente: El total de dinero en la caja es: 450 Juan pagé 500 ‘Ana pagé 650 José pagé 450 A Lacteos se le pagé 200 A bebidas se le pagé 150 A Banco se le pagé 800 Clases anidadas y métodos privados Cuando tenemos tanto clases anidadas como internas, el miembro privado y el cédigo que lo usa pueden estar en la misma clase, y al mismo tiempo, también estan en diferentes clases. Como ejemplo, si tenemos dos clases anidadas en una clase de nivel superior, entonces el cédigo en una de las clases anidadas puede ver tun miembro privado de la otra clase anidada. www.redusers.com 653. ELEMENTOS ESENCIALES DE LA POO. ees CONSTRUCTOR DE OBJETOS Un constructor de objetos es un método que se llama autométicamente cuando se declara un objeto de esa clase y cuya funcién es inicializar el objeto. De hecho va a validar los valores que los objetos contendran. Recordemos la sintaxis de la construccién de un objeto // cxeamos un objeto a través del constructor por defecto Nombre nom = new Nombre(); Como ya hemos visto, trabajaremos con un ejemplo al cual le iremos agregando elementos tedricos conforme vayamos avanzando con el cédigo. Cambiaremos un poco la tematica de los ejemplos para que no se torne mondtona la forma de nuestro aprendizaje. Esta vez trabajaremos con una clase trabajador o empleado (para los efectos, da lo mismo). El empleado va tener ciertos atributos (nombre, sueldo, fecha de ingreso) y un método al que llamaremos aumentarSueldo(). OBJETO EMPLEADO EMPLEADO ase PENG Was sate) Dra vary SUELDO Figura 2. En el grafico se muestra un objeto llamado empleado, los atributos que llevara y el método. Nos remitiremos al IDE para crear una clase Empleado, pero esta vez trabajaremos en una misma clase. Esta clase contendra varias clases adentro y, ademés, sabemos que esta clase tendré el método m 66 www.redusers.comaes JAVA Vol. I import java.util.Date; //importamos este paquete public class UscEmpleado { public static void main(string[] args) { y class Empleado{ public Empleado(String nom, double sue, int afio, int mes, int dia){ //constructor de clase > // variables de clase private String nombr private double sueldo; private Date altaIngreso; Tengamos en cuenta que la clase Empleado no tiene el modificador de acceso public, pues cuando convive en una sola estructura debe haber una sola clase publica, de la misma manera que solo una de las clases debe contener un main, que es el que ejecuta la clase piiblica y todo lo que llamara segtin lo que se haya programado dentro. El constructor de la clase va a recibir parametros y debe llevar el mismo nombre de la clase que va a construir. Tipos de datos objeto ‘Ademas de los tipos de datos primitivos (int, char, boolean) que conviven en la libreria java.lang, a partir de la version 5 de Java existen otros tipos de datos a los que llamaremos tipos de objeto. Estos en principio se escriben con maytisculas, tenemos: Boolean, Char, Byte, Short, Integer, Long, Float, Double, Biginteger. En los tipos de datos objeto podemos envolver su respectivo tipo de dato primitivo para realizar las operaciones directamente sobre un objeto. De igual manera, de un tipo de dato objeto, padremos obtener su valor como tipo de dato primitivo. www.redusers.com 673. ELEMENTOS ESENCIALES DE LA POO. ees En este momento debemos considerar a las variables de clase que, a diferencia de las variables de instancia, son propias de la clase que las contienen y no de las instancias de ellas. Podemos notar que hemos puesto private en los modificadores de acceso (encapsulacién) y, ademas, que Date es una variable de tipo de datos objeto. Otra de las cosas que notamos es que, al poner Date, nos aparece subrayado como si tuviese un error, entonces debemos importar puesto que no esta dentro del paquete de java.tang. Debemos ir a la API de Java y verificar cual es el paquete al que pertenece Date, que esta dentro de java.util.*; con esto el marcado del error desaparecera. Gregorian calendar El Gregorian calendar es una subclase que hereda de la clase Calendar distintos elementos, como los métodos, que podemos encontrar en la API de Java, y que soporta un estandar de formatos de fechas y horas de todo el mundo. Se encuentra dentro del paquete java.util. GregorianCalendar. E] constructor tiene los siguientes parametros: GregorianCalendar(int year, int month, int dayOfMonth) Ahora bien, seguiremos con el ejemplo planteado donde trabajaremos dentro del constructor public Empleado(), igualaremos las variables de clase con el parametro que hemos pasado al constructor. Es un buen momento para aprender a implementar una clase que viene con Java para la construccién de una fecha con el Gregorian calendar, la que también se encuentra dentro de la API de Java. GregorianCalendar calendario = new GregorianCalendar (aio, mes-1, dia); Este cédigo nos indica que hemos creado un constructor, luego hemos instanciado el objeto calendario y le hemos pasado los. pardmetros que antes habiamos pasado. A la variable mes, le restamos 1, pues se indexa desde cero y con esto no nos perdemos tanto al colocar los meses en enteros. 68 www.redusers.comJAVA Vol. I public Empleado(String nom, double sue, int afio,int mes, int dia) { nombre = nom; sueldo GregorianCalendar calendario = new GregorianCalendar (afio, mes-1, dia); altaingreso = calendario.getTime(); //devuelve la fecha eco onstrane Deerain etna Summary Figura 3. Aqui vemos la pagina oficial de Oracle en la que se encuentra la API Gregorian c -alendar. Existen varios constructores, usaremos el segundo en el que podremos personalizar nuestra propia fecha. Ahora vamos a crear los getter que nos devolveran los valores que hemos almacenado: //GETTER public String unNombre() { return nombre; www.redusers.com 693. ELEMENTOS ESENCIALES DE LA POO. ees public double unSueldo() { return sueldo; > public Date unaFechaalta()( return altatngreso; A continuacién, crearemos un setter que nos va subir el sueldo. No llevara getter puesto que lo que hace es construir un método y no devolver algo que ya esta almacenado: public void aumentaSueldo(double porcentaje) { double aumento = (sueldo * porcentaje) /100; sueldo += aumento; //operador incremental ) Al crear este setter es obligatorio que lleve un pardmetro y, dentro de 61, haremos los calculos respectivos para que se aumente un porcentaje al sueldo preestablecido. Asimismo, hay que entender que el operador de incremento resume lo siguiente: sueldo = sueldo + aumento; Una vez que hemos creado el constructor de objeto y los métodos inherentes para que todo esto sea posible, nos queda ir a la clase principal y crear las instancias de la clase Empleado. Esto lo haremos dentro del método main: Empleado empleadol = new Empleado("Juan Pérez”, 15000, 2000, 03, 18); Empleado empleado2 = new Empleado ("Marta Rodriguez”, 12000, 2003, 05,22); Empleado empleado3 = new Empleado("Martin de Robertis”, 16000, 1998, 10,30); 70 www.redusers.comaes JAVA Vol. I Hemos instanciado tres objetos de la clase Empleado y dentro de los parametros pasamos los argumentos necesarios para cada uno. Notemos que siempre usaremos la palabra New para crear instancias de la clase Empleado. Debemos destacar que, si hemos creado el constructor con tres argumentos, debemos hacerlo con la misma cantidad, en caso contrario nos marcaria un error; lo mismo sucede con los tipos de datos, deben coincidir con los declarados antes. Ahora utilizamos el método aumentaSueldo() para darles un aumento (por ejemplo 10%) a cada uno de los empleados instanciados: empleadol . aumentaSueldo (10) ; empleado2 . aumentaSueldo (10) ; empleado3 . aumentaSueldo (10) ; Ya hemos creado todo lo que necesitamos, ahora vamos a imprimir para poder ver los resultados por consola, para ello debemos escribir lo siguiente Syatem.out.printin(*| Nombre: "+empleadol.unNombre()+ ” | suetdo: "+ empleadol.unsueldo()+ * | Fecha de Ingre: “templeadol .unaFechaalta()); System.out.printin(*| Nombre: “+empleado2.unNombre()+ * | suerdo: “+ empleado2 .unSueldo()+ * | Fecha de Ingreso: “+empleado2.unaFechaAlta()) ; System.out .printin(*| Nombre: “+empleado3 unNombre()+ * | Sueldo: * +empleado3.unsueldo()+ * | Fecha de Ingreso: * + empleado3.unaFechaAlta()); Al ejecutar el programa veremos lo siguiente: | Nombre: Juan Pérez | Sueldo: 16500.0 | Fecha de Ingreso: Sat Mar 18 00:00:00 ART 2000 | Nombre: Marta Rodriguez | Sueldo: 13200.0 | Fecha de Ingreso: Thu May 22 00:00:00 ART 2003 www.redusers.com n3. ELEMENTOS ESENCIALES DE LA POO. ees | Nombre: Martin de Robertis | Sueldo: 17600.0 | Fecha de Ingreso: Fri Oct 30 00:00:00 ART 1998 Podemos mplificar esta codificacién a través de alguna de los temas que fuimos aprendiendo a lo largo del libro, para ello, implementaremos arreglos Empleado[] misEmpleados = new Enpleado[3]; misEmpleados[0] = new Empleado ("Juan Pérez”, 15000, 2000, 03, 18); misEmpleados [1] 12000, 2003, 05,22); misEmpleados[2] = new Empleado ("Martin de Robertis”, 16000, 1998, 10,30); new Empleado ("Marta Rodriguez”, for(int i =0;1<3;4++4)( misEmpleados [i] .aumentaSueldo (10) ; Hemos creado un array Empleado(], seguido del nombre del array (misEmpleados), De esta forma estamos instanciando dentro de la variable del array con el indice de cada uno de los elementos que creemos: misEmpleados{0]. Esto lo igualamos a New con los parametros que consideremos convenientes, Recordemos que debemos pasar la misma cantidad de argumentos de los creados y respetar el tipado. En el ejemplo tenemos tipos String, double e int. Luego es necesario implementar un bucle for que recorra el arreglo y que sea menor a la cantidad de elementos creados. Cuando escribimos misEmpleados[i]. aparecern los distintos métodos que creamos, elegimos el que hace que aumente el sueldo y, como argumento el 10, (ue es el 10%) for(int 4 =0;1<3;4++) ( System. out .print1n("Nombre: “ + misEmpleados [i]. 7] www.redusers.comaes JAVA Vol. I unNombre()+ * Sueldo: * + misEmpleados[i].unSueldo() + ~ “+ misEmpleados [i] .unaFechaAlta()) ; Fecha Ingres y Este bucle for sostendra los elementos de impresién que, a diferencia del ejemplo que comentamos, debemos colocarle a misEmpleados{i También podemos implementar un for each: for(Empleado e: misEmpleados){ // una forma resumida del for (con for each) System. out .println("Nombre: ° + e.unNombre()+ * Sueldo: * + e.unSueldo() + * Fecha Ingreso: “+ e.unaFechaAlta()) ; ) Cuando ejecutemos el programa, nos presentara el mismo resultado. Con esto tenemos un programa funcional, aunque la forma de implementarlo dependera de nuestros gustos y necesidades. USO DE CONSTANTES Las constantes son elementos cuyo valor permanece inalterable a lo largo de un programa, y la manera de crearlas es muy parecida a la de las variables. Por convencién deben escribirse en mayiisculas para diferenciarlas de las variables, ademas se debe agregar adelante el modificador final. En consecuencia, cada vez que veamos en una instruccién este modificador final, debemos asociarlo a una constante Su sintaxis es la siguiente: static final NOMBRE_CONSTANTE = valor. Veamos un ejemplo para aclarar este concepto: static final PI = 3.14159. Podemos verificar que, antes del modificador final, esta la palabra reservada stati Ahora presentaremos un pequefio programa para ver en qué casos se pueden aplicar las constantes en Java: www.redusers.com 7B3. ELEMENTOS ESENCIALES DE LA POO. ees public class UsoConstantes { public static void main(string[] args) { Empleado empleadol = new Empleado(*Juan”) ; Empleado empleado2 = new Empleado("Rosa”); ‘empleadol . cambiaArea (“Administracién”) ; System. out .print1n (empleadoi .devuelveDatos ()) ; System. out . print In (empleado2. devuelveDatos ()) ; , class Empleado{ public Empleado(String nom) { //Constructor nombre = nom; areaTrabajo = “RRHH’ ) public void cambiaArea(String areaTrabajo) {//SETTER this.areaTrabajo = areaTrabajo; » public String devuelveDatos(){ //GETTER return “El nombre “+ nombre + “ el drea areaTrabajo; d private String nombre; En principio, este codigo posee informacién de empleados que se inician en un area laboral, para ello hemos creado un constructor con los atributos de los objetos. Luego con un setter cambiaArea() y un getter devuelveDatos(), lograremos ciertos cambios en ellos. En el método main instanciamos los objetos de la clase Empleado e incluimos informacién de dos empleados. Hasta aqui no hemos hecho nada que no sepamos, pues son métodos y clases que venimos trabajando en los tiltimos tres capitulos. Ahora bien, qué pasaria si creamos un setter cambiaNombre(): public void cambiaNombre (String nombre) ( //SETTER this.nombre = nombre; 4 www.redusers.comoe JAVA Vol. I Luego, en el main instanciamos al objeto: empleadol .cambiaNombre (“Maria”) ; Cuando ejecutemos este programa veremos que empleadol, al que inicialmente le pusimos por nombre Juan, pasara sin ningiin problema a lamarse Maria. Java no tiene ningun problema de hacerlo, pero esto no significa que sea lo correcto, puesto que existen reglas a la hora de codificar. Tae RESID [acne Ear ver Navepe Fuente Reaciun Gear Oeuf Team Heramants Ventana Ajuda DRESS OO awe TH >-B-O- [Rowéenc unten | wtomtnteive =| ea) |S SASF BG Pe siagleams 13) + |} Fry class empleado, ie nombre = noms v7 I public Empleado(string non) ( } Tneaxine Finn Bho tae & a9 areatrabajo = "RRHH" 20 al 6 public void eambiaarea(sthing areatrabajo){//se rr OY ee Zz aa = 24) & |ittete mgt gee Nombre(Stiig nonbre)( //SE11E8 e t ‘this.nombrce = nombres 26 } 21/6 public sting devuelvepates(){ //cE Tre 2 | return "El nonbre es: "+ nonbre +" el rea es " + areatrabajo; 29 i 30 private final Sting nonbre; a1 private String areaTrabajo; Figura 4. En la codificacién, nétese que el IDE nos muestra como falla el programa si ponemos la palabra clave final antes del tipo de dato del atributo nombre, Recordemos que, en el constructor de la clase, creamos dos variables con sus respectivos atributos: private String nombre; private String areaTrabajo; www.redusers.com 53. ELEMENTOS ESENCIALES DE LA POO. ees A nombre le colocaremos la palabra reservada final, antes del tipo de dato. Con esto, esa variable (nombre) no puede ser modificada: private final String nombre; Podemos notar que, inmediatamente, el programa comienza a fallar en todos los lugares en donde se invoca a la variable. Si lo ejecutamos, nos mostraré el siguiente error: Exception in thread “main” java. lang.RuntimeException: Uncompilable source code - cannot assign a value to final variable nombre Trataremos las excepciones en profundidad en el Capitulo 9 de este libro. Lo que haremos ahora es eliminar el setter que habiamos creado para cambiar el nombre, asi como el llamado a él en el main. USO DE STATIC La palabra reservada static puede indicar que un atributo de una clase puede no pertenecer a una instancia de una clase, sino a la clase en si Por ello, cuando definimos un atributo como statie, solemos llamarlo atributos de la clase. Usemos el ejemplo anterior, en principio vamos a darle a cada empleado un Id, sabemos ademas que este ntimero no puede repetirse Parametrizaci6n de métodos Es recurrente producir errores légicos cuando un método contiene un parémetro ‘0 una variable local con el mismo nombre que un campo de la clase. En esta situacion, usaremos la referencia this si deseamos acceder al campo de la clase; en caso contrario, se hara referencia al parémetro o a la variable local del método. Por cierto estos errores son muy dificiles de localizar. 1% www.redusers.comee JAVA Vol. I Ahora bien, usaremos la variable del tipo estatica para ver de qué manera vamos a implementar dentro del ejemplo class Empleado{ public Empleado(String nom, int Id){ //constructor nombre = nom; areaTrabajo = “REE”; this.td = 34 Dentro del constructor, agregamos la variable de tipo entero Id y luego con el this igualamos a Id. Nuevamente, el IDE nos marcara error en los objetos instanciados en la clase principal (main), la que, si prestamos atencién nos dira que estan preparados para recibir dos parametros y solo les hemos pasado uno (recordemos que es un concepto que ya hemos introducido). Luego debemos agregar lo siguiente para que no nos marque mas este tipo de errores muy recurrentes al omitir el paso de parémetros: Empleado empleadol = new Empleado("Juan”, 1); Empleado empleado2 = new Empleado("Rosa”, 2); Aqui hemos colocado a cada empleado un Id después de los nombres (1 y 2, respectivamente). Ahora que ya tenemos pasados los parametros, falta aclararle al método getter (que es el encargado de devolver los valores) que ahora también devuelva los Id creados public String devuelveDatos(){ //GETTER return “El nombre es: “+ nombre +“ el drea es "+ areatrabajo +“ y el mp: * + 34 1 Esto funciona perfecto para fines educativos, pero, si queremos implementarlo para un entorno productivo, no seria muy practico. www.redusers.com 13. ELEMENTOS ESENCIALES DE LA POO Arann latins rare Tae et awe rp oe teeter Gee et oie Soe HESS OC aoe TB DBO: Se aL fore WS RBoRTeeeaele clas 10 na 2 a us as 16 a a8 a9 20 21 public class Usoconstantes { public static void matn(stringl] args) { public Empleado(String nom, int Td) osbre = noms areaTrabajo = "RRM"; this.Id = Td; Figura 5. Notemos el error que nos muestra al haber ingresado un nuevo tipo de dato (int) en los parmetros del constructor, pues antes tenia String y basicamente estamos omitiendo el int. Para no cometer errores a la hora de cargar informacién, por ejemplo, que se repitan Id se saltee un nlimero correlativo, Java posee una manera de resolverlo de manera automatica, aqi debemos implementar la palabra clave static. Sabemos que, cuando se instancia una clase y crea los objetos, este crea una copia de los atributos en cada uno de los objetos, lo que implica que cada objeto recibe una copia diferente (aunque en aspecto se parezcan). Para los efectos del ejercicio, este efecto pareciera no ser es donde el indicado, pues no querriamos que ambos empleados compartieran el Id o algtin otro atributo. Es como vamos a conseguir que cada uno de los objetos comparta una copia tinica de la variable Id, Esto lo hacemos poniendo el modificador static delante de la variable. Ahora vamos a deshacer todo lo hecho en el punto anterior, y agregaremos al atributo Id el modificador static: private final String nombre; private String areaTrabajo; public static int Id; www.redusers.comees JAVA Vol. I Podemos ver que el IDE pone nuestra variable Id en cursiva, esto se debe a que se ha convertido en una variable de clase. Ahora, en el constructor, vamos a asignar que Id Id =1; Si ejecutamos el programa, notamos que, para ambos empleados, va a dar el mismo Id (1). Esto es muy sencillo de solucionar, usaremos un, incrementador y lo vamos a colocar en: System. out .print In (empleadol .devuelveDatos ()) ; Eepleado.IdHt; System. out .print in (empleado2 .devuelveDatos ()) ; Empleado.Idt+; Empleado.Id++ lograra que el Id de cada empleado aumente de a uno en uno. Hasta aca funciona de la manera esperada, pero aqui tenemos dos situaciones y es donde entra en escena la encapsulacién, puesto que le habiamos puesto public a la variable Id (solo para que esto funcionara), pero, para efectos de buenas practicas, esto no deberiamos hacerlo. El otro problema es que hay que incrementar en forma manual. Al cambiar el modificador de acceso de public por private, automaticamente saltan los errores de acceso a los miembros. En principio crearemos una variable auxiliar a la que lamaremos IdSiguiente, que implementaremos de la siguiente manera en el constructor: public Empleado(string nom) ( nombre = nom; Trabajo = “RRER"; Id =1dSiguiente; Idsiguientest; Luego, en el getter también debemos colocarlo: www.redusers.com 93. ELEMENTOS ESENCIALES DE LA POO. Eas private int Id; private static int IdSiguiente Notemos que le hemos asignado un valor inicial de 1, esto se debe ala indexacién, asi el primer Id no empieza en 0. Ahora, cuando ejecutemos el programa, nos mostrara lo siguiente El nombre es: Juan el 4rea es RRHH y el ID: 1 E1 nombre Rot el 4rea es RRHH y el ID: 2 El nombre es: Alberto el 4rea es RRHH y el ID: 3 Y ya no tenemos que preocuparnos de hacer el incremento cada vez que incorporemos un nuevo empleado. ATRIBUTOS OBJETOS PSU a Cea wey SR ec CO ea a ace private int Id; SNe eee eat eC eur ut ema ge pe Dana SUC aur MH private String areaTrabajo; DSCC ce Srna uaa Figura 6. Grafico del funcionamiento del static en Java. Notamos que cada instancia de objeto crea copia de los atributos de la clase (variables). 80 www.redusers.comaes JAVA Vol. I METODOS STATIC Este tipo de métodos pertenecen solo a la clase y no a un objeto, para lamarlo no podemos utilizar ningiin objeto y solo tiene acceso a los atributos static de la clase, por lo cual no es necesario instanciar un objeto para invocarlo. La sintaxis de los métodos static es la siguiente: NombreClase.metodo () Veamos, sobre el ejemplo anterior, como podemos implementar este tipo de métodos en Java. Dentro de la clase Empleado vamos a crear el siguiente método: public static String darIdsiguiente(){ return “El ID siguiente es : “+ IdSiguienté ) E] método static obligatoriamente tendra un return y regresara, en este caso, un atributo de la clase. Otro detalle importante es que los métodos de esta indole no acceden a los campos de clase (sean constantes o variables), sino que acttian sobre IdSiguiente que es estatico. Para verificar esto realicemos el siguiente cambio: public static String darIdSiguiente(){ return “El ID siguiente es : “+ Td; Vemos que Id es una variable de campo non-Static, y, automaticamente el IDE nos mostrar el siguiente error: Exception in thread “main” java.lang.RuntimeException: Uncompilable source code - non-static variable Id cannot be referenced from a static context www.redusers.com 813. ELEMENTOS ESENCIALES DE LA POO. oa Para continuar, en el main vamos a trabajar con la salida de informacion: ‘System. out .print1n (empleadol .devuelveDatos ()+”\ n” +empleado2 . devuelveDatos ()+”\n”+empleado3 . devuelvepates ()+”\n") ; System. out .print In (Empleado.darldsi. Como vemos, hemos trabajado sobre la clase ya que el método, al ser estatico, no permite trabajar sobre objetos instanciados. = S96 seg|resiasieaias 3 Enpleado empleado3 ~ new Empleado(~Albert2")s aa 2 systen.out.printn(empleador.devuel vedatos()+"\n" sempleado2 .devuelvepatos()" 2 ‘enpleado3.devuelvebatos()+"\n")3 f| @ system.cut.printingémpleado., fa 15 16 Pelaes ” ) is) } IS| 25 lass empleado( 2 public enpleado(string nox)( 2 nobre = noms 2 areatrabaje = "Res 2 1d =rdsiguiente; 25 rasiguienters; 26 ) 2 public void eanbéaarea(string arearrabajo)(/ Ser" this.areatrabajo = areatrabajo; Figura 7. En a imagen podemos ver que solo al escribir a clase nos muestra el método esttico, ya que cconceptualmente estos métodos no trabajan sobre los abjetos Métodos estaticos de la API Cuando trabajamos con clases de la API de Java y utilizamos algunos de sus métodos, sin darnos cuenta también lo hacemos con los llamados métodos estaticos. Por ejemplo, con la clase Math. Veamos como: 82 www.redusers.comos JAVA Vol. I public class CalculosBasicos( Math. sqrt (9); //Halla 1a raiz cuadrada de 9 Math.pow(2,3); //Halla 1a potencia de 2 elevado al cubo En esos ejemplos observamos que los dos métodos, tanto sqrt como Pow, son estaticos, pues actdan sobre una clase (Math) y no sobre objetos. Method Summary ieee I ‘Moar an Tree Matos and Deseiion Figura 8. La API de Java en la clase Math. Verificamos que todos los métodos que pertenecen a esta clase son del tipo static y que pueden devolver un int, float, double o long. Alias de tipos En Java, no podemos definir alias de tipo en un nivel superior, pero podemos hacerlo por el alcance de una clase, o un método. Consideremos esto con los nombres de Integer, Long, si le ponemos nombres mas cortos: ly L.: class Test
{
void x(l i, L1){ System.out.printin( i.intValue() + “, “ + LlongValue()); }} www.redusers.com 833. ELEMENTOS ESENCIALES DE LA POO. ees El método main Otro método static, que trabajamos desde el comienzo, es el mai sintaxis es la siguiente: public static void main(string{] args) ( instrucciones... El contenido de la instruccién es publie, para que su contenido pueda ser utilizado dentro de la clase y de otras; void, pues no retorna ningiin valor y, finalmente, static ya que este método no acta sobre ningtin objeto y, cuando empezamos a utilizarlo, no hay ningiin objeto construido, de hecho es este método el encargado de construir algin objeto. Por otro lado, este método recibe parametros, para ser exactos un array (llamado args) de tipo String. SOBRECARGA DE CONSTRUCTORES Sabemos que un constructor es un método que le va a dar una instancia inicial a los objetos. Debemos entender que las declaraciones de las clases pueden tener versiones alternativas de constructores 0 métodos, que proporcionen varias maneras de llevar a cabo una tarea en particular mediante diferentes conjuntos de parametros. A esto que lo llamamos sobrecarga de un constructor o constructores multiples (se puede crear un niimero grande de ellos, no hay limite). Veamos el ejemplo de UsoEmpleado para entender como podemos sobrecargar métodos. En principio, recordemos que ya teniamos un constructor al que le pasamos algunos parametros’ public Empleado(String nom, double sue, int afio, int mes, int dia) ( 84 www.redusers.comaes JAVA Vol. I Plantearemos un caso en el que ingresa un nuevo empleado del que solo conocemos el nombre. Sabemos que, si no le colocamos los pardmetros a un método, no podemos darles un estado inicial a los objetos que construyamos, porque nos daria un error. Entonces vamos a sobrecargar el método, para que le dé un estado inicial a algiin atributo; esto lo haremos dentro de la clase Empleado: //sobrecarga de constructores public Empleado(String nom) { nombre = nom; Observamos que hemos pasado tan solo un pardmetro, pues es solo ese valor el que conocemos. Ahora vamos a la clase principal (donde esta el main) ¢ instanciaremos a un nuevo objeto. Notemos que nos va a sugerir qué constructor es el que necesitamos (de los dos que tenemos): Empleado[] misEmpleados = new Empleado[4]; misEmpleados[0] = new Empleado (“Juan Pérez”, 15000, 2000, 03, 18); misEmpleados [1] 12000, 2003, 05,22); misEmpleados[2] = new Empleado ("Martin de Robertis”, 16000, 1998, 10,30); misEmpleados[3] = new Empleado("José Coronado"); // nuevo objeto pero con distinto constructor new Empleado (“Marta Rodriguez”, EI Ultimo empleado que ingresamos tiene un solo parémetro, pues pertenece al método que acabamos de crear, y recordemos que solo va admitir un tnico argumento, en caso contrario nos marcaria error. ‘Vamos a ejecutar el programa y nos mostrara lo siguiente: Nombre: José Coronado Sueldo: 0.0 Fecha Ingres null www.redusers.com 853. ELEMENTOS ESENCIALES DE LA POO. eas Hasta acd, como no teniamos informacién acerca del sueldo ni de la fecha de ingreso del empleado José Coronado, nos dara sueldo 0.0 y fecha null. Recordemos que la fecha no era un tipo primitivo, sino una variable de objeto (Date), por eso nos dara como resultado un null Nos preguntamos qué pasaria si, en vez de obtener ese tipo de resultados inciertos para los empleados de quienes no tengamos suficiente informacién, nos diera algo predeterminado (por ejemplo, un sueldo minimo y una fecha base): //sobrecarga de constructores public Empleado (String nom) { // nombre = nom; this (nom, 8000,2000,01,01); // llama al otro constructor [Fie aa Ta Tae a ani a ein Tan ro Ve SEES OC euew TB bBo: H B-/Q6ec|?eeiageuias i fe pleadon lf 1 t H nt u fe * | Feet us le] 2 nisempleados[e] = new enpleado ("Duan Pére:", 15000, 2000, @3, 18) 24 inistmpleados(1] = new Empleado ("Wart Rodrigues”, 12000," 2003, 85,22)3 2 inistmpleados[2] = new empleado ("hartin de Roberts", 16000, 1998, 10,30)3 ° 23 ) 30 a 2 fe ns 3 » for(Empleado e: mistmpleados){ suai: 35 systen.out.printIn("honbre: " + e.untionbre()+ " sueldo: " + Figura 9, Cuando instanciamos Empleado en el cédigo, el IDE nos sugiere a los dos constructores, entonces, debemos elegir con cuantos datos contamos para cargarle la informacién necesaria. 86 www.redusers.comHERENCIA La herencia es una de las caracteristicas mas sobresaliente en el paradigma orientado a objetos, pues va a permitir que una clase herede los atributos y los métodos de otra clase, esto significa que podremos reutilizar cédigos. Con la herencia, las clases tienen un sistema de jerarquias, en consecuencia, cada una de ellas presenta una superclase, llamada también clase padre 0 clase base y, a su vez, puede tener subclases, denominadas clases hija o clases extendidas. Un dato para tener en cuenta es que, en Java, cada clase puede tener solo una clase padre (herencia simple), y las clases hijas podrian tener sus propios atributos y métodos, ademas de los heredados; estos a su vez pueden ser modificados. JERARQUIA DE HERENCIA FIGURA 2D FIGURA 3D oe ee Oe ee Ce Cu eee LC SLCC Figura 10. Con este grafico podemos darnos una idea de la existencia de jerarquias de herencia en Java a través de las figuras geométricas de 2 y 3 dimensiones. Traslademos este concepto a la vida real, imaginemos que alguno de nosotros heredaramos, por ejemplo, una casa, en el supuesto caso que esta tuviera una deuda, también la heredariamos y, de hecho, deberiamos hacernos cargo de ella. En este momento es necesario que utilicemos el proyecto POO que contenia las clases Auto y Uso_Auto. Para utilizar la herencia y entender como funciona este concepto, crearemos una clase nueva, que sera www.redusers.com 873. ELEMENTOS ESENCIALES DE LA POO. ees Furgoneta, ya que este tipo de automovil, a simple vista, no posee las caracteristicas de los coches normales, pero si comparte algunas de ellas, como las ruedas, las puertas, el motor, el peso, el color, etcétera Ademias, presenta caracteristicas propias que un coche no tiene, por ejemplo, una capacidad de carga superior o que puedan viajar mas personas. A esto lo llamaremos caracteristicas extras (atributos) que el objeto furgoneta presentara. Necesitamos crear la clase Furgoneta, que tendra ciertos atributos que ya vimos en la clase Auto, es decir, que van a ser compartidos, y ademés otros propios. Haremos que esta clase herede, de la clase Auto, alguna de sus caracteristicas, asi ahorramos la necesidad de co y, Con esto, aplicamos el término de reutilizacion de cédigo. Ahora hay que agregar que no solo heredaremos atributos, sino también métodos (si tiene aire acondicionado, asientos normales 0 de cuero, etcétera). Para crear una nueva clase, debemos hacerlo desde el paquete abierto, como dijimos antes, se llamara Furgoneta: ificar cosas que ya teniamos hechas package poo; i * @author Carlos Arroyo ” public class Furgoneta( La primera linea es el paquete al que nos referiamos (poo), luego estan los comentarios (datos del autor en este caso) y el nombre de la clase. Para que esta clase herede de otra, debemos agregarle la palabra reservada extends después de la clase y, luego, el nombre de la clase padre (Auto): public class Furgoneta extends Auto{ 88 www.redusers.comaes JAVA Vol. I Si hablamos de jerarquias, la clase Auto es una superclase, y la clase Furgoneta se acaba de convertir en una subclase. Yendo un poco mas a fondo en este concepto, la clase Furgoneta tendra atributos y métodos propios, ademas que va a heredar de la clase padre otros. Sin embargo, una subclase no puede heredar de otras clases, aunque en la vida real esto pueda suceder, en POO en Java no existe la herencia multiple, concepto que si existe en otros lenguajes de programacién. Ahora empezamos a codificar nuestra nueva clase: public class Furgoneta extends Auto( private int capacidadcarg: private int asientosExtra; public Furgoneta(int asientosExtra, int capacidadcarga) { //constructor de 1a cl super(); //llama al constructor de la superclase>Auto this. apacidadCarga = capacidadCarga; this asientosExtra = asientosExtra; En principio hemos creado dos atributos propios de la clase Furgoneta, de la misma manera los encapsulamos usando private. Herencia multiple En el paradigma orientado a objetos existe la posibilidad de heredar caracteristicas y comportamientos de una clase a otra, sin embargo, esto solo se puede hacer desde una tnica clase, a esto lo llamamos herencia simple. En Java no existe la herencia multiple, es decir, que una clase pueda heredar atributos y métodos de varias clases, esto si sucede en otros lenguajes, como C++. Pero, a cambio, dispone de la construccién denominada Interface, que permite una forma de simulacién o implementacién limitada de la herencia multiple. www.redusers.com 893. ELEMENTOS ESENCIALES DE LA POO. ees Luego escribimos el método constructor de la clase y le pasamos dos parametros (con los mismos nombres de los atributos). Debemos tener en cuenta que super() es una palabra reservada que significa que va a llamar al constructor de la clase padre. Luego, vamos a crear los this de cada uno de los argumentos ya que nos indicara que el elemento al que hace alusién se encuentra en la misma clase, es decir, que les esta dando un estado inicial a las dos variables; ademas, vemos que se repiten los mismos valores luego del signo igual, a los que no hay que confundir, veamos: this.capacidadcarga = capacidadCarga; El primero pertenece a la variable de la clase, mientras que el segundo corresponde al argumento del constructor de la clase. Hay que decir que se pudo haber omitido el this dandole un nombre distinto a los argumentos. A esto le agregaremos un método getter: //GETTER public String datosFurgoneta() { return " La capacidad de carga capacidadCarga +” kg. “+ “ y los lugares son: * + asientosExtra; d El método getter retornara un String con los valores de la capacidad de carga y concatenamos con los asientos extras que tenga el vehiculo. Antes teniamos una clase llamada Uso_Auto, sin embargo, para evitar confusiones, le vamos a cambiar el nombre por el de Uso_Vehiculo, pues hemos agregado una clase Furgoneta. Esta accion también se puede hacer con las teclas Ctrl +R. Una vez dentro de la clase Uso_Vel lo, escribiremos el siguiente cédigo Auto miAutol = new Auto(); miAutol .estableceColor (“Azul”) ; 90 www.redusers.comaes JAVA Vol. I Furgoneta miFurgol= new Furgoneta(); Notemos que, en la tercera linea, surge un error; si observamos en el marcador, que nos da sugerencias y errores, veremos indicado que faltan argumentos y, de hecho, dos del tipo enteros (int), recordemos que en la clase Furgoneta el constructor tenia dos argumentos. Corrijamos de la siguiente forma: Furgoneta miFurgol= new Furgoneta (8,600) ; Entonces 8 es la capacidad extra de asientos y 600 la capacidad de carga. Ahora pasaremos al nuevo objeto miFurgol algunos estados 0 métodos: miFurgol .estableceColor (“blanco”) ; miFurgol .estableceAsientos ("si"); miFurgol .configuraAire ("Si"); Cuando escribimos el objeto instanciado y el punto, el IDE nos propone una cierta cantidad de atributos y métodos, pero esta vez, al ser una clase que hereda de otra, también se veran los de la clase padre, es decir, de Auto. Y este es el punto al que queriamos llegar, la gran ventaja de la herencia, la reutilizacién de cédigo, ya que no hemos tenido la necesidad de programar de nuevo. Sobrecargas de métodos El lenguaje Java no permite que dos métodos sean “equivalentes de anulacién” dentro de la misma clase, independientemente de sus clausulas potenciales 0 tipos de devolucién potencialmente diferentes. www.redusers.com 13. ELEMENTOS ESENCIALES DE LA POO. Ss [bch Kater Yr Ainvge Foe Revue Greer Depo rie Tear Heroes Werte Ade Beas OO sere TB D--@ = Be sey © cantidad_ruedas() string ee re ting aircon) ell q| 5 public © datosFurgoneta() string ils 1 @equals(object obj) boolean 2/10 syster| @estableceasientos(string asientoscuero) void 1 fee aa) Wd @establececolor(string color_auto) void 12 itd @ getclass() Classe?» =) rien $33 ‘@hashcode() int li] 24 tc @notify() void) *r 15 @notifyAll() void Wi en nie Hew systes] @ precioauto() int, pia le 38 © tipoasientos() string 19 auto mi otostring() string 20 miautol © uncolor() string a Furgone 0 wait() void ~ 2 mifurgon. gl} " 3 Figura 11. En esta imagen se muestra que, al poner el punto luego de escribir el objeto instanciado, los atributos y los métodos tanto de Furgoneta como de Auto también serdn visibles. En la clase Auto agregaremos un getter (luego de los atributos): public String datosGenerales(){ //Getter return “La plataforma del vehiculo tiene “+ ruedas +” ruedas’#”, mide: “+ largo/1000+ * mts con un ancho de: “+ anchot” cms y un peso de plataforma de “ + peso_plataformat * kg. d Este getter en si tiene como datos generales ciertos estados de la clase Auto, pero al usar la herencia cuando hagamos el objeto miFurgol invocamos el getter, veamos lo que sucede: System. out .print1n(miFurgol .datosGenerales()); Cuando lo ejecutamos obtenemos lo siguiente: La plataforma del vehiculo tiene 4 ruedas, mide: 2 mts con un ancho de: 300 cms y un peso de plataforma de 600 kg. 92 www.redusers.com,JAVA Vol. I Entonces, por la herencia, nos traerd caracteristicas propias de la clase Auto (que tiene 4 ruedas, el largo y el ancho), en consecuencia, arraigara esas caracteristicas para si. Ahora traeremos los datos propios de la furgoneta, para ello lo vamos a concatenar con el cédigo anterior: System. out .print1n (miFurgol.datosGenerales()+ miFurgol. datosFurgoneta ()) ; Esta vez la salida, luego de la ejecucion, seré la siguiente: La plataforma del vehiculo tiene 4 ruedas, mide: 2 mts con un ancho de: 300 cms y un peso de plataforma de 600 kg. La capacidad de carga es: 600 kg. y los lugares s: Por otro lado, si queremos ingresar los métodos al objeto de clase miAutol y colocamos el punto para verificar qué tipo de métodos nos sugiere el IDE, verificamos que no aparece ninguno de los métodos propios de la clase Furgoneta, y esto es l6gico, ya que son métodos propios de ella, por lo tanto, el otro objeto no los podria ver y mucho menos invocar. TS Te Tine Fare FRR TR Ta EE To aR TTT BES OC emo 1 TB D-H-G- rol meted Fugen) ‘Rikon ventional stpehuezol= new Furgoneta(#,600) ; 2 vametonmrveunse Pcecovor("blanco”); aS ceasientos ("si"); 24 net musi ranire("Si"); e ‘System. out println(miauto1 .datosfurgoneta()) 5 26 system. out.printIn(miFurgot.datosGenerales()+ miFurgo1.datosFurgoneta()) 27 28 } Figura 12. En la figura se veriica que, a pesar de que el método datosFurgoneta() de la clase Furgoneta fue invocado por el objeto miAutol, este dara error. www.redusers.com 33. ELEMENTOS ESENCIALES DE LA POO. ees Regla de diseno Esta regla consiste en aplicar el término “Es un... clases. En el ejemplo tenemos que la clase Furgoneta hereda de la clase Auto: anuestro disefio de public class Furgoneta extends Auto{ Segtin esta regla, nos preguntamos: "Una furgoneta es un auto?’ Y claramente la respuesta es No. Pues una furgoneta es un tipo de vehiculo; en cambio, un vehiculo no siempre es una furgoneta. Para concluir: pudimos haber programado una clase mas bien general llamada Vehiculo de la cual van a heredar caracteristicas el resto de las clases. A esto lo llamamos “hacer una planificacion correcta de nuestros programas”. VEHICULO [a a ee areata c-] Camion Figura 13. La figura nos muestra la herencia y cémo deberia respetarse la regla de su disefio. EL POLIMORFISMO Este término esté muy ligado en Java al concepto de herencia, nos dice que podemos programar de una manera mas general en vez de una forma especifica, esto nos permite escribir programas que procesen objetos que compartan la misma superclase, de una manera directa © indirecta, como si todos fueran parte de ella, simplificando de esta forma enormemente la programacién de objetos. 94 www.redusers.comea JAVA Vol. I Veamos un ejemplo de la vida real para comprender este concepto tan abstracto. Supongamos que queremos programar varios tipos de vehiculos: un automévil, un vehiculo que va por agua-tierra (anfibio) y otro que, a la vez, despliegue alas y logre volar. Todos estos vehiculos en si pueden tener tanto comportamientos propios y distintos como comportamientos en comiin, por ejemplo, el de moverse. Esto lo programaremos en la superclase Vehiculo. Cuando enviamos el mensaje mover, cada vehiculo sabe como hacerlo, puesto que fue programado para eso. Nosotros confiamos en que lo hacen, independientemente de cémo lo hagan. Esta respuesta al mismo mensaje de cada uno de los tres objetos es el concepto clave del polimorfismo, pues este mismo mensaje tiene diversas formas de resultados. Veamos un caso para poder implementar este concepto, para ello trabajaremos sobre el ejemplo de Uso_Empleado, pero esta vez crearemos una clase mas que se lamara Jefe. Esta clase sera una subclase de Empleado. De tal forma que implementaremos de una manera correcta el uso de la herencia. Nos hacemos la pregunta: “{Un Jefe es un empleado? La respuesta es si. Ahora lo hacemos al revés: “Un empleado es un jefe?". La respuesta es no siempre, entonces, vamos a dejar que la clase Jefe sea una subclase de Empleado. Je! public cla: extends Empleado( public Jefe(String nom, double sue, int afio, int mes, int dia){ super(nom, sue, afio, mes, dia); En el c6digo de la clase Jefe, que va a heredar de la clase Empleado, le creamos un constructor con cinco argumentos, luego, en super colocaremos también cinco arguments. Crearemos un campo de clase a la que llamaremos incentivo, recordemos que para el ejemplo solo los jefes recibiran un incentivo: private double incentivo; //campo de clase Ahora un setter para que reciba el parametro con el valor que le pasemos por el incentivo: www.redusers.com 953. ELEMENTOS ESENCIALES DE LA POO. Eas public void ganaIncentivo (double m){ //SETTER incentivo = m; Le pasamos a la variable incentivo el parametro m que habiamos pasado por argumento en el setter. Un tema que no podemos olvidar es que, si bien en la clase Jefe es posible heredar el sueldo del empleado, en la practica esto no sucede asi. Aqui debemos sobrescribir el método unSueldo() que es el que nos va traer el sueldo heredado: public double unSueldo(){ double sueldoyefe = unSueldo(); return sueldoJefe + incentivo; Sobrescribimos el método y adentro le cargamos informacion propia de la clase Jefe. El IDE nos marcara que estamos sobrescribiendo el método y que escribamos @Override antes del método sobrescrito, a manera de sugerencia Si nos localizamos en la otra clase, también existiré una marca ala altura del método public double unSueldo(), que nos advierte que este método se encuentra redefinido. Por lo tanto, en la clase donde lo sobrescribimos, invalida al método de origen. (Spe asagnSSSNN SOS SESS OC sue Tw HO eo [elon @G-5- QS Pealeee aaenks acKage Eepreado; public class 2efe extends empleado{ Figura 14. El public aefe(string non, double sue, int ato, int mes, int diay{ | IDE nos sefiala en { super(nen, ste, aho, mes, da); los marcadores 1 pbb que estamos 12 | iene me sobrescribiendo : tun método y nos sugiere que escribamos @ Override, % www.redusers.com_eS JAVA Vol. I Ahora corregiremos algo que no esta bien del todo en el cédigo en el que hemos trabajado. Al sobrescribir un método de otra clase, no se garantiza que traiga los elementos que requerimos, porque le pedimos que almacene en sueldodefe lo que devuelve el método unSueldo. Deberia quedar de la siguiente forma: double sueldoJefe = super.unSueldo(); Al utilizar super le decimos que no llame al método de la clase Jefe, sino al de la clase padre. En la clase Uso_Empleado escribiremos el cédigo para instanciar el nuevo objeto de uno de los jefes, en este caso un jefe de RRHH: Jefe jefeRRHH = new Jefe ("Manuel Ferndndez”, 50000, 1998, 04,21); Je feRRHH. ganaIncentivo (6000) ; Empleado[] misEmpleados = new Empleado[5]; Una vez instanciado, le cargamos el método ganalncentivo() con un valor double. Y luego, como habiamos trabajado con arrays, debemos agregar un indice més (5). Ahora es cuando entra en escena el concepto de polimorfismo: ; //polimorfismo Opera el principio de sustitucién, porque el objeto espera un objeto del tipo Empleado, sin embargo, estamos poniendo un objeto de tipo Jefe, con lo que utilizamos un objeto de la subclase aun cuando el programa espere a uno de la superclase. Agreguemos un elemento mas Referencia a Superclase Cuando referenciamos a una superclase, lo podemos hacer de una manera polimérfica a cualquier método declarado en la superclase y sus superclases. Una variable de un tipo de interfaz debe hace referencia a un objeto para llamar a los métodos y a todos los objetos de la clase Object. www.redusers.com 73. ELEMENTOS ESENCIALES DE LA POO. en el array [6], de tal forma que lo instanciemos e inicialicemos en una 1ea de cédigo, el programa no deberia mostrar un error: misma misEmpleados[5] = new Jefe("José Lépez”, 66000, 2001, 10,27); Recordemos que habiamos utilizado un foreach para que hiciera el recorrido por el array: for(Empleado e: misEmpleados) { @. aumentaSueldo (10) ; ? for(Empleado e: misEmpleados) { System. out .print1n(*Nombre: e.unNombre()+ “ Sueldo: * + e.unSueldo() + “ Fecha Ingreso: “+ e.unaFechaalta()); d Aqui es donde se ve la potencia del polimorfismo, puesto que la variable e pertenece a la clase Empleado, para el ejemplo nuestro los empleados no tienen incentivo; pero cuando ejecutamos el programa: Nombre: Manuel Fernéndez Sueldo: 61000.0 Fecha Ingreso: Tue Apr 21 00:00:00 GMT-03:00 1998 Al sueldo base de 50.000 le agregamos un 10% (5000) y le sumamos un incentivo de 6000: esto nos dara 61000. Descendentes y ascendentes Es importante considerar que cuando realizamos la tarea de asignar una variable de la superclase a una variable de la subclase (sin una conversién descendente explicita) veremos que se provocaré un error de compilacién. Por esta razon debemos poner atencién a este tipo de asignacién. www.redusers.comaes JAVA Vol. I Esto quiere decir que el programa se da cuenta de que el empleado Manuel Fernandez viene de la clase Jefe y le aplica el incentivo que solo tiene esa clase. Es decir, la variable e se comporta de una u otra forma, de acuerdo con el lugar de donde venga el objeto al que le envia el mensaje, esto se denomina enlazado dina: 0, es decir, la forma como la maquina virtual de Java entiende y decide a quién enviarle un mensaje A y a quién enviarle un mensaje B. =’ RESUMEN CAPITULO 03 En este capitulo profundizamos en algunos aspectos de la programacion orientada a objetos, trabajamos con la colaboraci6n entre clases y la manera en que ellas se comunican a través de mensajes (métodos); aprendimos a construir objetos, trabajamos con el uso de constantes y final. También revisamos el uso de static y los métodos estaticos, conocimos los distintos constructores y la sobrecarga de métodos en sus distintas versiones. Finalmente vimos la herencia y el polimorfismo, www.redusers.com 93. ELEMENTOS ESENCIALES DE LA POO oes Actividades 03 Test de Autoevaluaci6n 1,
SOBRE EL AUTOR > PREMIUM.REDUSERS.COM Carlos Arroyo Diaz es programador, escritor y RedUSERS PREMIUM la ne contenidista especializado en tecnologias yeducacién. biblioteca digital de USERS. | —=—=—=—=—="> Se ha desemperiado como consutor técnica en INET, _Acnederds a cients de yactualmente trabaja como mentor docente en el area _publicaciones: Informes; de Programacion en varios proyectos del Ministerio de eBooks; Gufas; Revistas; Il Educacién de la Ciudad Auténoma de Buenos Aires. Cursos. Todo el contenido esta ~ ésponibleonine -otiney ——? > RedUSERS para cualquier dispositive. | 5 ey En nuestro sitio podra encontrar noticias relacionadas y participar Publicamos, al menos, una >= de la comunidad de tecnologia mas importante de América Latina, novedad cada 7 dias.
También podría gustarte
Curso Intensivo de Python Versión 3
PDF
83% (12)
Curso Intensivo de Python Versión 3
554 páginas
Ultimate Python de Cero a Experto Un Lib Nicolas Schurmann
PDF
77% (13)
Ultimate Python de Cero a Experto Un Lib Nicolas Schurmann
597 páginas
El Programador Pragmático Spanish Edition David Thomas Andrew Hunt
PDF
100% (9)
El Programador Pragmático Spanish Edition David Thomas Andrew Hunt
402 páginas
Python Curso Crash
PDF
79% (19)
Python Curso Crash
548 páginas
Aprende Inglés Desde Cero Curso de Inglés para Principiantes (Spanish Edition) (Vaughan, Richard, Brown, Richard Etc.)
PDF
97% (38)
Aprende Inglés Desde Cero Curso de Inglés para Principiantes (Spanish Edition) (Vaughan, Richard, Brown, Richard Etc.)
1271 páginas
Aprende SQL en Un Fin de Semana - Antonio Padial Solier
PDF
100% (11)
Aprende SQL en Un Fin de Semana - Antonio Padial Solier
119 páginas
Python For Excel - ESPAÑOL
PDF
100% (11)
Python For Excel - ESPAÑOL
338 páginas
Inbound 7777832239088053368
PDF
91% (11)
Inbound 7777832239088053368
478 páginas
ChatGPT para Todos, ¡Multiplica Por 100X Tu Productividad (Rafael Mourad) (Z-Library)
PDF
100% (13)
ChatGPT para Todos, ¡Multiplica Por 100X Tu Productividad (Rafael Mourad) (Z-Library)
287 páginas
Eloquent JavaScript (4ta Ed) - Versión Mobile
PDF
Aún no hay calificaciones
Eloquent JavaScript (4ta Ed) - Versión Mobile
695 páginas
Código Limpio
PDF
100% (10)
Código Limpio
561 páginas
SQL - Guía Completa para Principiantes de La Programación SQL Con Ejercicios
PDF
75% (4)
SQL - Guía Completa para Principiantes de La Programación SQL Con Ejercicios
153 páginas
Guia Python de Cero A Experto PDF
PDF
88% (17)
Guia Python de Cero A Experto PDF
32 páginas
Villalobos, Jorge - Fundamentos de Programacion
PDF
100% (4)
Villalobos, Jorge - Fundamentos de Programacion
378 páginas
2.2 - Guía Estructuras de Control - Parte 2
PDF
100% (1)
2.2 - Guía Estructuras de Control - Parte 2
17 páginas
Bases de Datos
PDF
100% (11)
Bases de Datos
666 páginas
Aprende Python Avanzado en Un Fin de Semana - Moreno
PDF
100% (18)
Aprende Python Avanzado en Un Fin de Semana - Moreno
207 páginas
Python para Todos Explorando La Información Con Python 3
PDF
92% (12)
Python para Todos Explorando La Información Con Python 3
265 páginas
Curso de Desarrollo Web HTML Css y Javascript Edicion 2021
PDF
33% (3)
Curso de Desarrollo Web HTML Css y Javascript Edicion 2021
14 páginas
Aprende JavaScript en Un Fin de Semana (Spanish Edition) (Alfredo Moreno Muñoz Sheila Córcoles Córcoles)
PDF
100% (11)
Aprende JavaScript en Un Fin de Semana (Spanish Edition) (Alfredo Moreno Muñoz Sheila Córcoles Córcoles)
225 páginas
Ejercicios de Programación en Java
PDF
100% (4)
Ejercicios de Programación en Java
213 páginas
Programacion Desde Cero
PDF
100% (22)
Programacion Desde Cero
196 páginas
SQL - Los Fundamentos Del Lenguaje PDF
PDF
82% (11)
SQL - Los Fundamentos Del Lenguaje PDF
235 páginas
Fundamentos de La Programacion PDF
PDF
90% (10)
Fundamentos de La Programacion PDF
400 páginas
Machine Learning Con Python Aprendizaje Supervisado Spanish Edition
PDF
83% (6)
Machine Learning Con Python Aprendizaje Supervisado Spanish Edition
111 páginas
Como Programar en Java
PDF
100% (7)
Como Programar en Java
618 páginas
Java Desde Cero
PDF
100% (2)
Java Desde Cero
105 páginas
JAVA 2-Curso de Programacion - (Javier Ceballos)
PDF
100% (1)
JAVA 2-Curso de Programacion - (Javier Ceballos)
706 páginas
Introduccion A La Programacion Orientada A Objetos
PDF
100% (10)
Introduccion A La Programacion Orientada A Objetos
163 páginas
Aprendizaje C# Languaje
PDF
100% (7)
Aprendizaje C# Languaje
1027 páginas
UML Java - Carlos E. Cimino
PDF
Aún no hay calificaciones
UML Java - Carlos E. Cimino
17 páginas
C++ Programacion Orientada A Objetos
PDF
100% (1)
C++ Programacion Orientada A Objetos
48 páginas
Introducción A Las Bases de Datos
PDF
100% (9)
Introducción A Las Bases de Datos
492 páginas
Programacion en Java
PDF
100% (2)
Programacion en Java
267 páginas
Java 1
PDF
100% (1)
Java 1
113 páginas
Java Desde Cero
PDF
100% (4)
Java Desde Cero
210 páginas
Java
PDF
100% (2)
Java
324 páginas
Referencia Java
PDF
Aún no hay calificaciones
Referencia Java
2 páginas
Programación en Java 2
PDF
100% (9)
Programación en Java 2
426 páginas
Java Language Es
PDF
100% (4)
Java Language Es
1226 páginas
Programación, Algoritmos y Ejercicios Resueltos en Java
PDF
100% (6)
Programación, Algoritmos y Ejercicios Resueltos en Java
426 páginas
Practicas JAVA
PDF
100% (4)
Practicas JAVA
45 páginas
Curso Java
PDF
Aún no hay calificaciones
Curso Java
64 páginas
Programacion Orientada A Objetos Con Java
PDF
Aún no hay calificaciones
Programacion Orientada A Objetos Con Java
581 páginas
Manual Programacion Java
PDF
100% (4)
Manual Programacion Java
204 páginas
Programación Orientada A Objetos
PDF
Aún no hay calificaciones
Programación Orientada A Objetos
175 páginas
Ejercicios Java Resueltos
PDF
100% (3)
Ejercicios Java Resueltos
43 páginas
Apuntes Java
PDF
Aún no hay calificaciones
Apuntes Java
255 páginas
JAVA Con SPRING
PDF
0% (2)
JAVA Con SPRING
18 páginas
Programacion Orientada A Objetos Con C++
PDF
100% (1)
Programacion Orientada A Objetos Con C++
48 páginas
Programación Funcional
PDF
100% (1)
Programación Funcional
58 páginas
Programacion Orientada A Objetos
PDF
Aún no hay calificaciones
Programacion Orientada A Objetos
432 páginas
Estructuras de Datos
PDF
Aún no hay calificaciones
Estructuras de Datos
50 páginas
Desarrollo Web (HTML5, CSS3 y XML)
PDF
0% (1)
Desarrollo Web (HTML5, CSS3 y XML)
48 páginas
Introducción A La Programación
PDF
100% (1)
Introducción A La Programación
388 páginas
Java POO
PDF
100% (5)
Java POO
85 páginas
Metodologia de La Programacion Orientada A Objetos 140309101400 Phpapp01
PDF
100% (1)
Metodologia de La Programacion Orientada A Objetos 140309101400 Phpapp01
420 páginas
Logica de Programacion Orientada A Objetos 1ra Edición
PDF
0% (3)
Logica de Programacion Orientada A Objetos 1ra Edición
12 páginas
Javascript Es
PDF
80% (5)
Javascript Es
639 páginas
Tutorial Netbeans
PDF
33% (3)
Tutorial Netbeans
147 páginas
JavaScript v1.0.0
PDF
100% (1)
JavaScript v1.0.0
219 páginas
C# Guia Total Del Programador
PDF
100% (1)
C# Guia Total Del Programador
404 páginas
Teoria Programacion Orientada Objetos
PDF
Aún no hay calificaciones
Teoria Programacion Orientada Objetos
53 páginas
Programación, Algoritmos y Ejercicios Resueltos en Java PDF
PDF
Aún no hay calificaciones
Programación, Algoritmos y Ejercicios Resueltos en Java PDF
426 páginas
Introducción A Django/Python
PDF
100% (3)
Introducción A Django/Python
49 páginas
C# Guia Total Del Programador
PDF
100% (4)
C# Guia Total Del Programador
404 páginas
Manual Del SQL
PDF
Aún no hay calificaciones
Manual Del SQL
162 páginas
Curso Lógica de Programación I
PDF
100% (2)
Curso Lógica de Programación I
256 páginas
Guia React Carlosazaustre
PDF
Aún no hay calificaciones
Guia React Carlosazaustre
15 páginas
(Arroyo Díaz Carlos) Programación en Java - Vol 2 (2019)
PDF
100% (1)
(Arroyo Díaz Carlos) Programación en Java - Vol 2 (2019)
103 páginas
Transp Are Nci As Java
PDF
Aún no hay calificaciones
Transp Are Nci As Java
236 páginas
Java Desde Cero PDF
PDF
Aún no hay calificaciones
Java Desde Cero PDF
210 páginas
Java 1
PDF
Aún no hay calificaciones
Java 1
34 páginas
Que Es Java
PDF
Aún no hay calificaciones
Que Es Java
12 páginas
Apuntes de Curso de Java SE.
PDF
Aún no hay calificaciones
Apuntes de Curso de Java SE.
51 páginas
Indice Libro Aprender A Programar en Java Desde Cero Curso Pasoapaso
PDF
Aún no hay calificaciones
Indice Libro Aprender A Programar en Java Desde Cero Curso Pasoapaso
9 páginas
T3-2-Guia-ENCAPSULAMIENTO - HERENCIA - POLIMORFISMO
PDF
Aún no hay calificaciones
T3-2-Guia-ENCAPSULAMIENTO - HERENCIA - POLIMORFISMO
7 páginas
CPJ A Leccion SintaxisBasicaEnJava
PDF
Aún no hay calificaciones
CPJ A Leccion SintaxisBasicaEnJava
5 páginas
Curso Java
PDF
0% (1)
Curso Java
113 páginas
Curso Básico de Java
PDF
Aún no hay calificaciones
Curso Básico de Java
61 páginas
Introduccion A Poo PDF
PDF
Aún no hay calificaciones
Introduccion A Poo PDF
32 páginas
Algoritmos Resueltos Con Python
PDF
100% (28)
Algoritmos Resueltos Con Python
257 páginas
Programacion en Python
PDF
100% (18)
Programacion en Python
261 páginas
La Biblia MySQL PDF
PDF
100% (3)
La Biblia MySQL PDF
841 páginas
Libro de Programacion
PDF
100% (3)
Libro de Programacion
161 páginas
Fundamentos de Programación
PDF
100% (10)
Fundamentos de Programación
314 páginas
Python para Principiantes Guia Completa
PDF
100% (8)
Python para Principiantes Guia Completa
59 páginas
Python Tutorial
PDF
100% (14)
Python Tutorial
51 páginas