Вы находитесь на странице: 1из 105

LCC.

Vctor Herrera Silva

Programacin Orientada a Objetos

Programacin En Java

1|Pgina

LCC. Vctor Herrera Silva

Programacin Orientada a Objetos

Table of Contents
0.-Historia de Java ..................................................................................................................................... 5 0.1.-Caractersticas de Java ................................................................................................................... 5 0.2.-Requerimientos para programar en Java ...................................................................................... 6 1.-Declaracin de Clases, mtodos y variables ............................................................................................. 7 1.-Conceptos de java................................................................................................................................. 8 1.1.-Clase ............................................................................................................................................... 8 1.2.-Objeto ............................................................................................................................................ 8 1.3.-Identificadores y palabras reservadas de Java .............................................................................. 8 1.4.-Identificadores vlidos ................................................................................................................... 8 1.5.-Palabras reservadas de Java que no pueden ser usadas como identificadores ............................ 9 1.6.-Estndar de Sun para definir los identificadores para los distintos componentes de Java .......... 9 1.7.-Declaracin de Clases .................................................................................................................. 10 1.8.-Sintxis de una clase .................................................................................................................... 11 1.9.-Sintaxis para declarar una variable en Java ................................................................................. 12 1.10.-Sintaxis para declarar un mtodo de Java ................................................................................. 12 1.11.-Imprimir en pantalla .................................................................................................................. 13 1.12.-Como mandar a llamar un mtodo de una clase e imprimir el resultado ................................. 13 1.13.-Como pedir datos al usuario ...................................................................................................... 14 1.14.-Modificadores de Acceso (Access Modifiers) para Clases de Java ............................................ 16 1.15.-Modificadores de Acceso para mtodos .................................................................................. 19 2.-Operadores ............................................................................................................................................. 22 2.0.-Operadores ...................................................................................................................................... 23 2.1.- Operadores Aritmticos.............................................................................................................. 23 2.2.-Operadores compuestos ............................................................................................................. 24 2.3.-Operadores Alfanumricos .......................................................................................................... 24 2.4.-Operadores relacionales .............................................................................................................. 24 2.5.-Operadores lgicos ...................................................................................................................... 26 2.6.-Operadores condicionales ........................................................................................................... 27 3.-Controladores de flujo ............................................................................................................................ 28 3.0.- Controladores de Flujo ................................................................................................................... 29 3.1.-Controlador de flujo IF ................................................................................................................. 29 2|Pgina

LCC. Vctor Herrera Silva

Programacin Orientada a Objetos

3.2.- Controlador de Flujo Switch .................................................................................................... 32 3.3.-Ciclos o bucles(for, while y do-while) .......................................................................................... 34 3.4.-Ciclo while .................................................................................................................................... 35 3.5.-Ciclo do-while .............................................................................................................................. 36 4.-Declaracin de constantes y arreglos ..................................................................................................... 37 4.1.- Constantes .................................................................................................................................. 38 4.2.- Arreglos ....................................................................................................................................... 38 4.3.- Arreglo de Objetos ...................................................................................................................... 42 5.- Java Beans y shadowing ........................................................................................................................ 44 5.1.- Java Beans ................................................................................................................................... 45 5.2.- Shadowing................................................................................................................................... 50 5.3.- Shadowing en Java Beans ........................................................................................................... 51 6.- Overload, overwrite y Herencia ............................................................................................................. 52 6.0.- Overload, overwrite y Herencia ...................................................................................................... 53 6.1.- Overload ..................................................................................................................................... 53 6.2.- Herencia ...................................................................................................................................... 55 6.2.2.- Ms y ms herencia ................................................................................................................. 56 6.2.3.- Resumen de Herencia .............................................................................................................. 58 6.3.-Overwrite (sobreescritura) .......................................................................................................... 58 6.3.1.- Resumen de Sobre-escritura (overwrite) ................................................................................ 60 7.- Polimorfismo .......................................................................................................................................... 61 7.- Polimorfismo ...................................................................................................................................... 62 7.1.- Interface ...................................................................................................................................... 62 7.2.- Caractersticas principales de una interface .............................................................................. 64 7.3.- Ventajas y desventajas de usar polimorfismo ............................................................................ 66 8.- Manejo de Excepciones ......................................................................................................................... 67 8.0.- Exceptions ................................................................................................................................... 68 8.1.- Tipos de Excepciones .................................................................................................................. 68 8.2.- Try, catch and Finally .................................................................................................................. 69 8.3.- Jerarqua de excepciones ............................................................................................................ 72 8.4.- Propagacin de excepciones ...................................................................................................... 74 9.- Constructores......................................................................................................................................... 78 3|Pgina

LCC. Vctor Herrera Silva

Programacin Orientada a Objetos

9.1.- Constructores.............................................................................................................................. 79 9.2.- Reglas de uso de Constructores.................................................................................................. 81 9.3.- Constructor de la superclase ...................................................................................................... 81 10.- Manejo de Archivos ............................................................................................................................. 82 10.1.- Clase File ................................................................................................................................... 83 10.2.- Cmo crear una instancia del objeto File ................................................................................ 83 10.3.- Creando un archivo ................................................................................................................... 84 10.4.- Escribir en un archivo................................................................................................................ 85 11.- Colecciones de Java ............................................................................................................................. 86 12.- Servlets ................................................................................................................................................ 88 12.1.- Servlets ..................................................................................................................................... 89 12.2.- Peticiones y Respuestas hacia y desde el servidor ................................................................... 90 12.3.- Configurando Eclipse y tomcat por 1era vez ............................................................................ 91 12.4.- Primeros pasos con web apps (Aplicaciones web con servlets) ............................................... 96

4|Pgina

LCC. Vctor Herrera Silva

Programacin Orientada a Objetos

0.-Historia de Java
Es un lenguaje de programacin orientada a objetos que toma mucha de la sintaxis de C y C++ y adems elimina muchas herramientas de bajo nivel para evitar errores comunes como punteros o referencias de memoria. Fue desarrollado por la compaa Sun Microsystems y tiene como creador a James Gosling. Existen muchas teoras del porque fue llamado este lenguaje de programacin como Java. Actualmente la teora que tiene mayor peso es que el equipo que se encargaba de desarrollar este lenguaje de programacin, visitaban con frecuencia a una cafetera, dentro del men existe este caf llamado Java. Es por ello que el logotipo del lenguaje de programacin es una tasa.

0.1.-Caractersticas de Java Es un lenguaje multiplataforma, debido a que tiene una mquina virtual que permite ejecutar sus aplicaciones bajo cualquier sistema operativo.

Otra caracterstica es que el tipo de programacin es orientada a objetos, a diferencia de otros lenguajes de programacin como C++, Visual Basic, Fox Pro que son programacin de lenguaje estructurado. Es de cdigo abierto, es decir, no tiene ningn costo desarrollar aplicaciones bajo esta plataforma, esto es una enorme ventaja contra sus grandes competencias como Microsoft. Soporta encapsulacin, herencia y polimorfismo. Soporta multithread, esto es, ejecutar varias tareas al mismo tiempo.

5|Pgina

LCC. Vctor Herrera Silva

Programacin Orientada a Objetos

Java maneja diferentes plataformas dependiendo del tipo de programas que se desean desarrollar, por ejemplo: J2SE (Java 2 Estndar Edition) para aplicaciones cliente-servidor o aplicaciones de escritorio. J2EE (Java 2Enterprise Edition) para aplicaciones web, aplicaciones empresariales robustas y complejas. 0.2.-Requerimientos para programar en Java Instalar el kit de desarrollo de Java (JDK) , preferentemente la ltima versin. Descargar e instalar el software Netbeans 7.0 de la versin JEE Tener una mquina con al menos 512 mb de RAM

6|Pgina

LCC. Vctor Herrera Silva

Programacin Orientada a Objetos

Programacin En Java
1.-Declaracin de Clases, mtodos y variables
7|Pgina

LCC. Vctor Herrera Silva

Programacin Orientada a Objetos

1.-Conceptos de java
1.1.-Clase Es un template o plantilla que define los estados y comportamiento de los objetos y puede contener instancias de objetos de java. 1.2.-Objeto Al igual que en la vida real, un objeto en programacin orientada a objetos es un objeto que tiene un estado y un comportamiento. A nivel programacin, el estado se refiere a los campos que tiene un objeto o propiedades del mismo, y comportamiento hace referencia a los mtodos que tiene el objeto. 1.3.-Identificadores y palabras reservadas de Java Todos los componentes de java (mtodos, clases y variables) requieren nombres, a estos nombres se les conoce como identificadores. Y como es de suponer, java tambin tiene sus propios identificadores y para evitar que el programador utilice los mismos identificadores, a los identificadores que maneja Java se le conocen como palabras reservadas o keywords. Por lo tanto, no podemos crear una clase, variable o mtodo cuyo nombre sea una palabra reservada, ya que el compilador nos detendr y no podr continuar el programa. 1.4.-Identificadores vlidos El lenguaje de programacin de java, maneja su propio estndar que considera como legales a los identificadores de las variables. El estndar consta de simples reglas que se deben de seguir para nombrar a un componente de java, estas reglas son las siguientes: Debe de iniciar con una letra,_, $ No se permite iniciar con un nmero u otro carcter especial antes no antes mencionado. A partir del segundo carcter puede ser nmero, letra, $, o guin bajo y todas las posibles combinaciones. Los identificadores no tienen lmite de caracteres Se recomienda que el identificador sea descriptivo. No debe de usarse una palabra reservada como identificador. Los identificadores son sensibles a maysculas y minsculas, esto es que , el identificador Persona es diferente al identificador persona. Por ejemplo, esto seran identificadores incorrectos: String 0apellido; String #apellido; String 5; String @apellido; String :x; String .xxx.x; A continuacin se muestran los identificadores correctos: String apellido; String _apellido; String $apellido; String ____apellido$; 8|Pgina

LCC. Vctor Herrera Silva

Programacin Orientada a Objetos

1.5.-Palabras reservadas de Java que no pueden ser usadas como identificadores abstract char double for int private strictfp throws assert boolean class else goto interface protected super transient enum break const extends if long public switch try byte continue final implements native return synchronized void case default finally import new short this volatile catch do float instanceof package static throw while

1.6.-Estndar de Sun para definir los identificadores para los distintos componentes de Java Identificador de una clase o interface: la primera letra del identificador debe de estar en mayscula, el resto en minscula. Para las interfaces debe de ser con terminacin able. Por ejemplo, si creamos una clase que representa a una persona, la clase debera de llamarse Persona , y sera incorrecto llamarla persona, o PERSONA. Identificadores de mtodos: se debe de usar el formato camelCase, o de camello, por ejemplo, supongamos que el objeto Persona tiene el mtodo de comer, respirar, comer y dormir. Los identificadores deberan de ser los siguientes: private void comer(){} private void respirar(){} private void comerDormir(){} El formato camelCase, se refiere a que la primera palabra es con minscula, y las primeras letras de las siguientes palabras van con mayscula. Identificadores de variables: aplica las mismas reglas que el nombramiento de mtodos. Identificadores de constantes: se escribe en maysculas, y si son ms de una palabra, se utiliza el guin bajo. Ejemplo: int PRECIO_REFRESCO=10; String TIPO_EMPLEADO=profesor; double PI=3.1416d; Comentarios en nuestro programa: son aquellas lneas de cdigo de nuestro programa que no se consideran al momento de compilar, pero sin embargo es de buena prctica utilizarlos en nuestro cdigo para generar documentacin acerca de nuestras clases y facilitar la lectura del mismo. Los comentarios se definen de la siguiente manera: /** * Este es un comentario * de una o ms lneas */ /* Este es un comentario de una o mas lineas*/ //Este es un comentario de una sola lnea

9|Pgina

LCC. Vctor Herrera Silva 1.7.-Declaracin de Clases Para declarar clases de java se tiene que seguir algunas reglas: 1.- Solo pueden ser declaradas como pblicas o default.

Programacin Orientada a Objetos

2.- Si la clase es pblica, entonces el nombre de la clase debe ser el mismo que el archivo .java

1.- Primero se define el paquete

2.- Entre el paquete y la clase, se define el import de las dems clases 3.- Despus se define la clase, ya sea pblica o default.

3.- Si la clase estar dentro de un paquete, entonces esta sentencia debe de ir primero que la definicin de la clase. 4.- Si se van realizar importaciones, deben de ir despus de la declaracin del paquete y antes de la declaracin de la clase. 5.- Los imports y los package aplican para la clases que se definen dentro del mismo archivo .java 6.- Un archivo .java debe de tener solo 1 clase pblica y puede tener n clases default. 7.- El cuerpo de la clase se delimita por , -, y es: public|default class NombreClase{ codigo }

10 | P g i n a

LCC. Vctor Herrera Silva

Programacin Orientada a Objetos

1.8.-Sintxis de una clase Para crear una clase en java, la sintaxis que se debe de respetar es la siguiente: Sintaxis para crear una clase modificador de acceso + class + NombreClase{ //declaracin de variables // declaracin de mtodos } Ejemplo: public class MiPrimeraClase{ //cdigo por hacer } class MiPrimeraClaseDefault{ //codigo } Ejemplo: Crear una clase pblica o que sea visible a las dems clases cuyo fin sea realizar operaciones aritmticas.

En este ejemplo, el modificador de acceso es pblico (public) y el nombre de la clase es OperacionesAritmeticas. De acuerdo a lo comentado en el punto anterior, la clase por ser pblica el archivo .java debe de llamarse tal cual. Otro modificador de acceso es el modificador de acceso Default, ms adelante lo veremos en este captulo. Nota: No olviden abrir y cerrar las llaves, que marcan el cuerpo de la clase.

11 | P g i n a

LCC. Vctor Herrera Silva

Programacin Orientada a Objetos

1.9.-Sintaxis para declarar una variable en Java A cada variable de java se le debe de especificar el tipo de dato que esta va a almacenar, y obviamente el valor que le vamos a asignar a dicha variable debe de ser del mismo tipo de dato que le hayamos definido a la variable. Sintaxis para declarar una variable modificadorAcceso tipoDato nombreVariable=valorInicial. Ejemplo: public int edad=0; //En este caso la variable edad es de tipo entera(int) y es publica private String nombre=; // el nombre es un objeto tipo String( note la S) y es privado int edad=0; //la variable edad es de tipo entera, a diferencia del primer ejemplo, esta es default 1.10.-Sintaxis para declarar un mtodo de Java Una vez creada una clase de java, esta puede contener mtodos, ya sean pblicos, privados, protegidos o default. La sintaxis es la siguiente (forma bsica) Sintaxis para declarar un mtodo modificador de acceso + tipo de dato de retorno + nombre del mtodo( tipoDato param1, tipoDato param2, tipoDato param3, , tipoDato paramN){ //contenido de nuestro mtodo return tipo de dato; //esto va solo si el tipo de datos es distinto a void } Ejemplo:

En este ejemplo se crean 2 mtodos, uno que se llama sum y es pblico , y otro que se llama doNothing y es default. Ms adelante explicaremos a que se refiere con los niveles de acceso.

12 | P g i n a

LCC. Vctor Herrera Silva

Programacin Orientada a Objetos

1.11.-Imprimir en pantalla Para imprimir en pantalla se utiliza la clase con mtodos estticos que se encarga de la gestin de las salidas de datos hacia la consola. La clase es System.out, y para efectos del curso, utilizaremos el mtodo de println ( print line) para imprimir mensajes en consola. Ejemplo:

1.12.-Como mandar a llamar un mtodo de una clase e imprimir el resultado Primero que nada se debe de crear una instancia de la clase que tiene el mtodo a llamar. Y que es una instancia? Es la creacin de un objeto de una clase de java, asignndole un espacio en memoria referenciada por un nombre, esto es, una instancia es una variable que hace referencia a un objeto de una clase. Para crear una instancia se utiliza la palabra reservada new precedida por el nombre de la clase a instanciar, es decir, si quiero instancias la clase ClaseA, debe de ser asi: ClaseInstanciar nombreClase=new ClaseInstanciar(); ClaseA miClaseA=new ClaseA(); Una vez instanciada la clase, entonces podemos accesar a todas sus variables visibles y mtodos visibles de la clase. Del ejemplo anterior de la clase con el mtodo de suma, podemos mandar a llamar el mtodo instanciando la clase y mandando a llamarlo.

13 | P g i n a

LCC. Vctor Herrera Silva

Programacin Orientada a Objetos

1.13.-Como pedir datos al usuario Para solicitar un dato se utiliza la clase Scanner del paquete java.util.Scanner, y como es una clase publica fuera de nuestros paquetes, hay que importarla. Esta clase para ser instanciada, su constructor requiere de un parmetro de tipo InputStream, en este caso utilizaremos la clase del sistema que gestiona los datos de entrada, lo contrario a System.out, se utilizar la clase System.in. Para solicitar un dato se debe de llamar el mtodo nextLine() para un string, o nextInt para un int, etc

14 | P g i n a

LCC. Vctor Herrera Silva

Programacin Orientada a Objetos

15 | P g i n a

LCC. Vctor Herrera Silva

Programacin Orientada a Objetos

1.14.-Modificadores de Acceso (Access Modifiers) para Clases de Java En java se manejan 4 modificadores de acceso: - Default - Public - Prvate - Protected Estos 4 modificadores de acceso aplican para mtodos y variables de java, pero para las clases de java, como antes lo comentbamos, se utilizan solo 2, el default y public.

Acceso Default (Default Access)


Es aquella que no requiere ser especificada en la declaracin. Se refiere a que una clase con este modificador de acceso puede ser accesado por otra clase solo si se encuentran ambas clases en el mismo paquete. Por ejemplo: ClaseDefault1

ClaseDefault2

16 | P g i n a

LCC. Vctor Herrera Silva

Programacin Orientada a Objetos

ClaseDefault3. Nota: Esta clase est en otro paquete, por lo tanto, al tratar de accesar a una clase default Access no ser permitido, por lo tanto nuestro programa no compilar.

* Recordar que los modificadores de acceso hacen que una clase se pueda accesar nicamente solo s se encuentran en el mismo paquete. De otra manera, an y si importramos la clase, no tendramos acceso fuera del paquete.

17 | P g i n a

LCC. Vctor Herrera Silva

Programacin Orientada a Objetos

Acceso Pblico (public access)


Significa que cualquier clase de cualquier paquete puede accesar a las clases declaradas como public. Si la clase que utilizar a la clase publica est dentro del mismo paquete, no es necesario importar la clase, puesto que se encuentran en el mismo paquete. Si la clase que utilizar a la otra clase publica esta en un paquete distinto, entonces si se tiene que importar la clase pblica para poder accesarla. Se define una clase publica en el paquete fcfm.cap1.clases

Se define otra clase publica llamada ClasePublica2 , note que como es una clase publica, el archivo debe de llamarse igual que la clase y debe de tener extensin .java. En este cdigo, se crea una instancia de la clase ClasePublica y se guarda con el nombre de clase.

18 | P g i n a

LCC. Vctor Herrera Silva

Programacin Orientada a Objetos

Ahora bien, como ya comentbamos que una clase pblica puede accesarse desde cualquier paquete y desde cualquier clase dentro del mismo paquete, en este caso, tenemos una tercera clase pblica que se encuentra en otro paquete (fcfm.cap1.otherpackage.clases). Para accesar a una clase que esta fuera de otro paquete, es necesario importar la clase para ser utilizada. La palabra reservada es import y se define de la siguiente manera: import mi.paquete.NombreClase;

No Modificadores de Acceso Existen otros modificadores pero no son de acceso, estos son: final y abstract. Se declara una clase como final cuando ya no se requiere heredar de esta clase, o por as decirlo, bloquear una clase y evitar la herencia de la misma, de hecho, todas las clases de java son final, esto para evitar que los programadores las modifiquen. Ejemplo: Si deseamos crear una clase, y que esta no se modifique, entonces se define de la siguiente manera: public final class MiClaseBloqueada{ //mi cdigo va aqu //write your code here! } 1.15.-Modificadores de Acceso para mtodos A diferencia de las clases, los modificadores de acceso para los mtodos son 4: - public - prvate: - default - protected Primero que nada, que significa que una clase tiene acceso al mtodo de otra clase? Significa que la clase A es visible para la clase B, y que el mtodo de la clase A puede ser llamado desde la clase B.

19 | P g i n a

LCC. Vctor Herrera Silva

Programacin Orientada a Objetos

Modificador de Acceso- public Indica que un mtodo de la clase A puede ser llamado desde cualquier otra clase B dentro o fuera del paquete, siempre y la clase B tenga acceso a la clase A. En este ejemplo la clase ClasePublica tiene un mtodo llamado comer y es public.

En esta clase ClasePublica2 se instancia ( new) la clase ClasePublica ya que se tiene acceso a ella debido a que la clase ClasePublica es pblica e inclusive se accesa al mtodo comer, ya que este mtodo es pblico.

20 | P g i n a

LCC. Vctor Herrera Silva

Programacin Orientada a Objetos

Modificador de acceso default (default access) Indica que un mtodo puede ser accesado desde una clase solo y solo si la clase que est tratando de accesar al mtodo est dentro del mismo paquete de la clase que lo contiene.

Ahora, que pasa si tenemos un mtodo default de una clase default llamada A y queremos accesar con otra clase B dentro del mismo paquete? Lo que pasara es que la clase B si podr accesar al mtodo de la clase A, debido a que la clase A y B estn dentro del mismo paquete. Qu pasa si tenemos un mtodo default de una clase pblica llamada A y queremos accesar con otra clase B que est en otro paquete? En este caso, la clase B no podr accesar al mtodo de la clase A, podr accesar a otros mtodos pblicos de la clase A, pero no al mtodo default de la clase A, debido a que estn en distintos paquetes. Modificador de acceso privado (prvate access) Indica que un mtodo no puede ser accesado por ni otra clase que no sea ella misma, inclusive aun y herede sus mtodos, heredar todos los mtodos siempre y cuando no sean privados. Este es el nivel de acceso ms restrictivo y se utiliza cuando se quiere que un mtodo de una clase no sea modificado. Si creamos una clase Ejemplo public o default con 3 mtodos, metodo1 pblico, metodo2 privado, metodo3 default, y queremos instanciarlo en otra clase ClasePrueba dentro del mismo paquete. Tenemos los siguientes escenarios, suponer que ya tenemos instanciada la clase Ejemplo dentro de la clase ClasePrueba: 1.- Que pasara si mandamos a llamar al mtodo metodo1? El programa continuar con el cdigo que tiene el mtodo metodo1, ya que el mtodo es pblic y puede ser accesado desde cualquier clase de cualquier paquete. 2.-Que pasara si mandamos a llamar al mtodo metodo2? El programa no compilar, ya que el mtodo metodo2 es privado y solo puede ser accesado por la misma clase, esto quiere decir, que para el compilador el mtodo metodo2 es invisible o no existe en la clase Ejemplo por medio de la instancia creada en otra clase(ClasePrueba). 3.- Que pasara si mandamos a llamar al mtodo metodo3? El programa continuar solo si la clase ClasePrueba est dentro del mismo paquete, si est en otro paquete, el mtodo metodo3 sera invisible.

21 | P g i n a

LCC. Vctor Herrera Silva

Programacin Orientada a Objetos

Programacin En Java
2.-Operadores
22 | P g i n a

LCC. Vctor Herrera Silva

Programacin Orientada a Objetos

2.0.-Operadores
2.1.- Operadores Aritmticos Operador + *,/ Descripcin Suma 2 o ms operandos numricos Resta 2 o ms operandos numricos Realiza la multiplicacin o divisin respectivamente Residuo entre 2 nmeros Ejemplo int x=10,y=5,z=0; z=x+y;// El resultados es z=15 int x=10,y=5,z=0; z=x-y;//El resultado es z=5 Int x=10,y=5,z=0; z=x/y;// Ojo, NO hacer divisin entre 0, marcar excepcin. Int x=9,y=5,z=0; z=x%y;// El resultado es 4 int a=0; a++;// ahora a=1 ++a;//primero se recalcula a

% ++

Incrementa en uno al operando, si el smbolo va antes de la variable, el valor de la variable se modifica primero. - Decrementa en uno al int a=1; operando, si el smbolo va antes a--;//ahora a=0 de la variable, el valor de la variable se modifica primero En el siguiente ejemplo, se muestra el uso de los operadores de incremento y decremento.

El cdigo anterior genera la siguiente salida:

23 | P g i n a

LCC. Vctor Herrera Silva 2.2.-Operadores compuestos Operador +=

Programacin Orientada a Objetos

-=

*=

/=

Descripcin Asigna al operando izquierdo la suma del mismo operando + el segundo operando. (operando1=operando1+operando2) Asigna al operando 1 el resultado de la resta entre el operando1 y operando2 Asigna al operando1 el resultado de la multiplicacin del operando1 y operando2 Asigna al operando1 el resultado de la divisin del operando1 entre el operando2

Ejemplo int x=10,y=5; x+=y;//El valor de x es 15, debido a que es: x=x+y int x=10,y=5; x-=y;//El valor de x es 5, debido a que es: x=x-y int x=10,y=5; x*=y;//El valor de x es 50, debido a que es: x=x*y int x=10,y=5; x/=y;//El valor de x es 2, debido a que es: x=x/y

2.3.-Operadores Alfanumricos El nico operador alfanumrico que maneja java es el operador de concatenacin +, es utilizado para unir un objeto String con otro objeto. Por ejemplo: String nombre=Victor; String apellido=Herrera; String final=nombre+apellido; System.out.println(final); La salida sera: VictorHerrera Inclusive se puede concatenar un nmero con un String, siempre y cuando al menos haya un operando de tipo de dato String o alfanumrico. System.out.println(Tu edad es de :+20+ aos); La salida sera: Tu edad es de :20 aos 2.4.-Operadores relacionales Aquellos que al evaluar 2 operandos crean un valor booleano (true o false). Son 6 operadores relacionales: Operador Descripcion Ejemplo > Mayor que 5>6 , regresa false < Menor que 5<6 , regresa true >= Mayor o igual 7>=6 y 7>=7,regresa true <= Menor o igual 6<=7,6<=6 ,regresa true == Igual 6==6,regresa true != Diferente 6!=7,regresa true Nota: El utilizar el == se utiliza para comparar valores o referencias, el == tiene un comportamiento diferente cuando lo que se est comparando son Objetos, ya que se compara la referencia de cada uno.

24 | P g i n a

LCC. Vctor Herrera Silva Ejemplo: MiClase a=new MiClase(); MiClase b=new MiClase(); System.out.println(a==b???+(a==b));

Programacin Orientada a Objetos

El resultado es falso, ya que a y b tienen distinta referencia (o diferente espacio en memoria) Un error muy comn es comparar Strings, por Ejemplo: String nombre1=new String(java); String nombre2=new String(java); System.out.println(nombre1==nombre2?+(nombre1==nombre2));//imprime falso System.out.println(nombre1==nombre2?+(nombre1.equals(nombre2));//imprime true Para realizar comparaciones entre objetos se utiliza el equals En el siguiente ejemplo se muestra el uso de operadores relacionales

El cdigo anterior genera el siguiente resultado:

25 | P g i n a

LCC. Vctor Herrera Silva

Programacin Orientada a Objetos

2.5.-Operadores lgicos Existen 2 tipos de operadores lgicos: Operadores Lgicos (Short circuit- camino corto): son aquellos que dentro de sus condiciones a evaluar, al primer resultado falso, se deja de evaluar el resto de las condiciones. Operador &&(and) Descripcin Evala si 2 condiciones o ms son TODAS verdaderas. Ejemplo (5==5) && (7>2) && (1==1), el resultado es true. (1==1) &&(7>=10) el resultado es false. (5==5) ||(7<2), el resultado es true. (1==1) ||(7>=2), el resultado es true. (2==1) || (3>5), el resultado es false.

|| (or)

Evala de 2 o ms condiciones, que al menos una condicin sea verdadera.

^(Exor)

Evala si de 2 o ms (5==5) ^(6>2),regresa false. condiciones, UNA y SOLO UNA (5==5)^(1==2),regresa true tiene que ser verdadera Operadores lgicos (no short-circuit) : son aquellos que evalan todas las condiciones sin importar si alguna resulte ser falsa. Los operadores son: &, | Ejemplo del uso de operadores lgicos

La salida generada por el cdigo anterior es:

26 | P g i n a

LCC. Vctor Herrera Silva

Programacin Orientada a Objetos

2.6.-Operadores condicionales Existe un solo operador condicional en java, y se puede decir que es una forma abreviada de sustituir un IF o una toma de decisin. La sintaxis para este operador es la siguiente: ( condiciones )? (hacer algo si es verdadero) : (hacer otra cosa si es falso) ; Por Ejemplo: String mensaje=; Int edad=19; mensaje= ( edad>=18)? (Puede votar): (No puede votar) ; System.out.println(Resultado de la condicin es: +mensaje); La salida es: Resultado de la condicin es: Puede votar A continuacin se muestra un ejemplo del uso del operador condicional.

La salida generada por el cdigo anterior es:

27 | P g i n a

LCC. Vctor Herrera Silva

Programacin Orientada a Objetos

Programacin En Java
3.-Controladores de flujo
28 | P g i n a

LCC. Vctor Herrera Silva

Programacin Orientada a Objetos

3.0.- Controladores de Flujo


Como nuestro programa no siempre tendr un flujo lineal, y habr ocasiones en las que nuestro programa deba de tomar uno o ms caminos diferentes, java maneja controladores de flujo de nuestro programa y estos son los siguientes: Sentencias de tipo condicional If Switch Sentencias para control de ciclos (loop) While Do-While For 3.1.-Controlador de flujo IF La sentencia If es una sentencia de decisin, ya que nos permite elegir entre uno o ms caminos evaluando una condicin, dicha condicin debe de regresar un dato booleano (true o false). La sintaxis bsica para la sentencia del if es: Sintaxis de sentencia IF if( condicin o condiciones a evaluar){ //cdigo cuando la condicin se cumple }else{ //cdigo cuando la condicin no se cumple } Nota 1: La condicin que se evala debe de regresar un tipo de dato booleano. Nota 2: La sentencia if puede llevar nicamente el cdigo cuando si se cumple. Nota 3: Se pueden anidar if, esto es tener un if dentro de otro if, inclusive distintos casos. int mes=8; if(mes==8){ System.out.println("El mes es Agosto"); }else{ System.out.println("El mes no es Agosto"); } En este ejemplo la salida es: El mes es Agosto Int mes=7; if(mes==8){ System.out.println("El mes es Agosto"); } En este ejemplo no imprime nada, ya que no se cumple la condicin a evaluar.

29 | P g i n a

LCC. Vctor Herrera Silva

Programacin Orientada a Objetos

Sentencias If anidadas A continuacin se muestran algunos ejemplos de las distintas maneras en que podemos encontrar la sentencia if. Sentencia if en su forma ms bsica

Salida:

Sentencia if-else

Salida:

30 | P g i n a

LCC. Vctor Herrera Silva

Programacin Orientada a Objetos

Sentencia if anidado:

Salida:

Sentencia if sin llaves. Nota: Cuando se utiliza de esta manera la sentencia if, significa que la primera lnea siguiente del if es considerada como la sentencia a ejecutar si la condicin se cumple, al igual que en el else , si no se especifica que lneas abarcar nuestro else, entonces se considerar nicamente la siguiente lnea despus del else. Si la siguiente lnea es otro if, se aplican las mismas reglas.

Salida:

31 | P g i n a

LCC. Vctor Herrera Silva

Programacin Orientada a Objetos

3.2.- Controlador de Flujo Switch Esta sentencia es muy til cuando nuestro programa debe de elegir una de muchas opciones disponibles, comparando un dato numrico con los distintos casos posibles que este puede tomar, en donde cada opcin o caso posible puede tener una o ms instrucciones dentro de un bloque que le llamaremos bloque case. Sintaxis para controlador de Flujo Switch //se define previamente el valor a evaluar, este valor debe de ser tipo de dato numrico de ms bajo nivel jerrquico basndonos en el tamao que almacena. Esto es, solo aplica para los int,short,char, y NO aplica para los long,doubl y float. switch(valor a evaluar){ case valor1: //lo que har mi cdigo si el valor a evaluar=valor1 break; case valor2: //lo que har mi cdigo si el valor a evaluar=valor2 break; case valorN: //lo que har mi cdigo si el valor a evaluar=valorN break; default: //lo que har mi cdigo si el valor a evaluar es otra opcin no contenida en valor1,valor2,valorN break; } Nota: Los valores valor1,valor2,valorN deben de ser numricos, ya que java solo soporta estas comparaciones , esto es, no se permite poner case enero, case algo. Nota: Cada bloque case inicia despus de :, y su cierre se puede o no definir, en este caso, el cierre se especifica por el break; Nota: Si dentro de nuestra sentencia switch, en un case no se agrega el cierre del mismo break, se ejecutarn el resto de los casos hasta que se encuentre un primer break. Nota: Los casos definidos dentro del switch DEBEN de ser distintos entre s, esto es, que caso tiene tener un case 1, un case 2 y un case 1, si se define un bloque de cdigo para cada caso? por esta razn, nuestro programa marcar un conflicto en ejecucin o una excepcin en tiempo de ejecucin (Runtime exception). Ejemplo: int opcionMenu=0; System.out.println(Elige una opcin del men del 1 al 3); Scanner scan=new Scanner(System.in); opcionMenu=scan.nextInt(); switch(opcionMenu){ case 1: System.out.println(Usted eligi el platillo 1); break; case 2: System.out.println(Usted eligi el platillo 2); break; case 3:

32 | P g i n a

LCC. Vctor Herrera Silva System.out.println(Usted eligi el platillo 3); break; default: System.out.println(Usted eligi una opcion invalida); break; }

Programacin Orientada a Objetos

La sintaxis mostrada anteriormente es la sintaxis ms comn de utilizar el switch. El default es una palabra reservada que utiliza java en el uso del switch y sirve para tomar un camino alterno fuera de los caminos ya definidos en cada case. Como se comentaba anteriormente, el valor a evaluar en el switch debe de ser un tipo de dato entero (int, short) o carcter (char). Otra cosa que hay que aclarar, en el switch no es necesario definir el caso default, si se omite esta opcin y el resultado de evaluar la variable que se encuentra en el switch da un resultado que no est definido en ningn caso, simplemente no entrar a ninguna sentencia de case, y s dejar continuar con nuestro programa. Por otro lado, si no utilizamos en cada caso la palabra reservada break al entrar en un caso, el resto de los casos que se encuentran definidos debajo del caso en el que entr sern ejecutados y se detendrn hasta que se encuentre un break o que se encuentre con el cierre del switch. Ejemplo:

La salida de este programa si yo le mando como parmetro opcion=1 es:

33 | P g i n a

LCC. Vctor Herrera Silva

Programacin Orientada a Objetos

3.3.-Ciclos o bucles(for, while y do-while) For La sentencia for es muy til cuando se sabe la cantidad exacta de veces que queremos que nuestro cdigo se ejecute (el cdigo que definimos dentro de nuestro for o el cdigo a iterar). El For tiene 3 secciones: Declaracin e inicializacin de variables Una expresin booleana (o condicin a probar) Iteracin Estas tres partes son separadas por punto y coma ; o en ingls (semicolon). Sintaxis para el uso del For for( inicializacin; exp. Booleana; iteracion ){ //codigo } for( int i=0,j=0,k=10;i<10;i++){ //codigo }

En la primera seccin del for, se pueden inicializar ninguna, una o ms variables, siempre y cuando sean del mismo tipo. Si se van a declarar ms de una sola variable del mismo tipo deben de ser separadas por comas. Por ejemplo: for( int i=0,j=10,k=5;i<10;i++){ //cdigo } En la segunda seccin es la expresin booleana, aqu hay que tener mucho cuidado, ya que solo se permite tener SOLO UNA expresin booleana sin importar que tan compleja sea. Por ejemplo: for( int i=0,j=5; ( (i<j) &&(j<10 ) ) ;i++){ //cdigo } En la tercera seccin es la parte iterativa, es donde se indica que es lo que har nuestro ciclo despus de cada iteracin. Por lo general se utilizan operaciones que modifiquen nuestra segunda seccin, para evitar que nuestro ciclo entre en un punto en el que sea infinito, sin embargo, podemos poner una llamada a un mtodo, o realizar mltiples operaciones. Por ejemplo: for( int i=0; i<2 ; i++,System.out.println(Iteracion no. +i) ) { System.out.println(El valor de i=+i); } La salida de este fragment de cdigo es: El valor de i=0 Iteracion no. 1 El valor de i=1 Iteracion no. 2

34 | P g i n a

LCC. Vctor Herrera Silva El valor de i=2 Iteracion no. 3

Programacin Orientada a Objetos

3.4.-Ciclo while Es otra instruccin de java utilizada para ciclar bloques de cdigo o instrucciones. La diferencia entre el ciclo for y ciclo while, es que en el ciclo for se utiliza cuando sabemos la cantidad exacta de veces que nuestro programa se ejecutara, en cambio, el while es para cuando no se conoce la cantidad de veces que se ejecutar. Sintaxis para el ciclo while while( expresin booleana){ //cdigo } Nota: No olvidemos que dentro de nuestro bloque while, en el cdigo debera de haber una manera de que la expresin booleana sea falsa, de lo contrario, estaramos en un ciclo infinito y nuestra aplicacin nunca parara. Ejemplo: Scanner s=new Scanner(); int suma=0; String respuesta=""; int contador=0;// variable que indica cuantos numeros introdujo el usuario boolean detener=false; while(!detener){ System.out.print("Escribe un numero:"); suma+=s.nextInt(); //se captura un numero System.out.print("Teclee 'y' si no desea continuar:"); respuesta=s.next(); if("y".equals(respuesta)){ detener=true; } contador++; } System.out.println("El promedio de los nmeros proporcionados es:"+(suma/contador)); El ciclo while primero se evala la condicin, y posterior a eso, se ejecuta lo que est dentro de las llaves, es decir, se ejecuta el bloque de sentencias del while.

35 | P g i n a

LCC. Vctor Herrera Silva

Programacin Orientada a Objetos

3.5.-Ciclo do-while A diferencia del ciclo while, este se utiliza la palabra reservada (keyword) do. La diferencia entre usar while y do-while, es que en este ltimo, al final se evala la condicin, esto es, que en un do-while se ejecuta al menos una vez el bloque de instrucciones que lo compone, puede ejecutarse todo el bloque o no (depende si se encuentra dentro del bloque do-while un break ). Sintaxis do{ //codigo }while( expresin booleana); Nota: La expresin booleana puede ser tan simple o compleja como usted lo requiera, pero nicamente es una expresin booleana. Nota: Recuerde que dentro del bloque do-while( dentro de las llaves) debera de haber una manera de hacer que nuestra expresin booleana sea falsa, para evitar que nuestro ciclo sea infinito. Ejemplo: Scanner s=new Scanner(System.in); int opcion=1; int contador=1; do{ System.out.println("Iteracion numero "+contador); System.out.print("Escriba 0 si no desea continuar..."); opcion=s.nextInt(); contador++; }while(opcion!=0); System.out.println("El ciclo do-while se ha detenido");

36 | P g i n a

LCC. Vctor Herrera Silva

Programacin Orientada a Objetos

Programacin En Java
4.-Declaracin de constantes y arreglos

37 | P g i n a

LCC. Vctor Herrera Silva

Programacin Orientada a Objetos

4.1.- Constantes Las constantes como en cualquier lenguaje de programacin, son aquellos datos que no cambian durante la ejecucin de nuestro programa, en java es exactamente lo mismo. Para definir una constante en java, se antepone en la declaracin justo antes del tipo de dato de la variable la palabra reservada static y final, donde esta ltima indica que el tipo de dato no va a ser modificado, por ello el nombre de final. Ahora bien, java maneja un estndar para nombrar clases, mtodos, interfaces, variables y obviamente constantes. Reglas para nombrar una constante 1.- El nombre de la constante debe de escribirse con letras maysculas, as es, TODAS las letras en maysculas. 2.- Debe de utilizarse la palabra reservada (keyword) final 3.- El nombre de la constante puede empezar la primer letra con $,_ o letra, despus de la primer letra, puede ir nmero o lo anterior. 4.- El nombre debera de ser descriptivo. 5.- Debe ser inicializada, esto es obvio, ya que una constante siempre tendr el mismo valor, este debe de definirse al momento de asignarle un nombre a la constante. Sintaxis para definir una constante modificadorAcceso + static + final +tipoDato + NOMBRE_CONSTANTE=valorConstante; Ejemplo: prvate static final double PI= 3.1415; En este ejemplo podemos notar lo siguiente: 1.- La constante se llama PI 2.- Es de tipo de dato doubl 3.- Es una constante, ya que usa final 4.- Es de acceso privado 5.- Tiene un valor constante de 3.1415 En las constantes no es necesario que sean estticas, ms adelante explicaremos la utilidad de la palabra reservada static. Ntese que en java, utilizaremos constantes nicamente cuando sabemos que algn dato siempre ser el mismo durante la ejecucin del programa. 4.2.- Arreglos Un arreglo es un objeto en java que nos permite almacenar como su nombre lo dice, un arreglo del mismo tipo de dato y que tiene un tamao definido o limitado. Visto de otra manera un arreglo se puede decir que es una tira etiquetada con smbolos iguales (mismo tipo de dato) pero la tira tiene una longitud, esto es, no es una tira infinita. Sintaxis para definir un arreglo tipoDato[] nombreVariable=new tipoDato[tamaoArreglo]; tipoDato nombreVariable[]=new tipoDato[tamaoArreglo]; Para inicializar los datos: tipoDato[] nombreVariable=new tipoDato[tamaoArreglo]; nombreVariable[posicion]=valor;

38 | P g i n a

LCC. Vctor Herrera Silva

Programacin Orientada a Objetos

Nota: El tamao debe de ser un nmero entero positivo. Nota: Cuando se define el arreglo, lo que va dentro de los corchetes siempre ser el tamao del arreglo, no la posicin. Si queremos un arreglo que tenga 3 elementos, debe de ser tamao 3. Nota: Para accesar a los elementos del arreglo, se debe de indicar su posicin del elemento a obtener, en java y en muchos otros lenguajes de programacin, las posiciones inician desde 0. Ejemplo:

Elemento:

1 arr1

2 arr2 1

3 arr3 2

4 arr4 3

5 arr5 4

6 arr6 5

Posicin:

En el arreglo anterior, es un arreglo de 6 elementos, para obtener el valor arr5 se obtiene de la siguiente manera: String[] arreglo=new String[6];//Son 6 elementos en el arreglo, desde la posicin 0 a la 5 arreglo*0+=arr1;//se asigna el valor de arr1 , al elemento del arreglo que tiene la posicin 0 arreglo*1+=arr2;// se asigna el valor de arr2 , al elemento del arreglo que tiene la posicin 1 arreglo*2+=arr3; //se asigna el valor de arr3 , al elemento del arreglo que tiene la posicin 2 arreglo*3+=arr4; arreglo*4+=arr5; arreglo*5+=arr6; String elemento5=arreglo[4];//obtengo el valor del elemento 5 que tiene la posicin 4. System.out.println(El elemento 5 es:+elemento5); La salida es: El elemento 5 es: arr5

Recuerde que siempre un arreglo debe de tener un tamao fijo, eso es lo que se diferencia de las listas de java, estas ltimas no tiene un tamao definido. Recordemos que un arreglo es un objeto de java y el valor default asignado a estos tipos de datos es null. Object[] arreglo; If(arreglo==null){ System.out.println(El arreglo es nulo); }else{ System.out.println(El arreglo no es nulo); } A continuacin veremos algunos ejemplos de usar arreglos. Ejemplo 1: Crear un arreglo que guarde 5 nmeros enteros, cuyos valores sean 10,20,30,40,50. Solucin: int numeroElementos=5; int[] arr=new int[numeroElementos];//nmero de elementos arr[0]=10; arr[1]=20; 39 | P g i n a

LCC. Vctor Herrera Silva arr[2]=30; arr[3]=40; arr[4]=50; Otra manera de hacer este problema es: int[] arr=new int[5]; arr[0]=10; arr[1]=20; arr[2]=30; arr[3]=40; arr[4]=50;

Programacin Orientada a Objetos

Existe una manera ms sencilla: int[] arr={ 10,20,30,40,50};//En esta manera se inicializan los elementos desde el momento que se define el arreglo. Y s, se puede modificar los elementos al igual que como se le asigna valor a cada uno. Para modificar el elemento 3 del arreglo,es decir, el que est en la posicin 2 (por que empieza desde 0) y asignarle el valor de 100 sera de la siguiente manera: arr[2]=100; Y que pasara si queremos asignar el valor de 50 al elemento 6, es decir, al que tiene la posicin de 5??? arr[5]=50; Pues no, ya que en nuestro arreglo definimos que tiene solo 5 elementos, el elemento 6 no existe ni existir ya que el arreglo tiene como su ltima posicin la posicin 4 (nmero de elementos -1) por tener 5 elementos. Ejemplo 2: Como declararamos nuestro arreglo si tenemos grficamente lo siguiente: abc def ghi jklm

Solucin: String[] miArreglo=new String[4]; miArreglo*0+=abc; miArreglo*1+=def; miArreglo*2+=ghi; miArreglo*3+=jklm; El arreglo se define como tipo String ya que los datos que est guardando son alfanumricos, y es de tamao 4, por que en el dibujo se puede ver que solo hay 4 bloques o elementos del arreglo. Recordemos que para asignar el valor es: nombreArreglo[ posicion]=valor; De nuevo tenemos otra forma de resolver este problema: Solucin 2: String*+ miArreglo=, abc,def,ghi,jklm-;

40 | P g i n a

LCC. Vctor Herrera Silva

Programacin Orientada a Objetos

Ejemplo3: Supngase que se tiene un arreglo de nombres de personas, este arreglo es de tamao 3. Nuestro programa debe de imprimir el nombre de las personas. Solucin: String[] nombres=new String[3]; nombres*0+=Victor; nombres*1+=Fernando; nombres*2+=Roberto; for(int i=0;i<nombres.length;i++){ String nombreActual=nombres[i]; System.out.println(El nombre es:+nombreActual ); } Primero creamos el arreglo de tipo de dato String, posterior a eso, asignamos los valores que queramos a cada elemento del arreglo. Despus iteramos el arreglo, para ello utilizamos el for. Nota: Notese que se esta usando la propiedad length del arreglo nombres. Dado que un arreglo en java es un objeto, y este tipo de objeto tiene una propiedad llamada length, que representa el tamao de nuestro arreglo. Esto es que en vez de poner i<3, ponemos el tamao del arreglo ya que es el mismo que vamos a iterar. Nota: Para accesar a un valor del arreglo, basta con indicar el nombre del arreglo y la posicin, es por ello que nombres[0] me regresara un tipo de dato String y en este ejemplo, creamos la variable alfanumrica nombreActual que almacenar el valor del elemento en la posicin i. La salida a este programa sera: El nombres es:Victor El nombres es:Fernando El nombres es:Roberto Recuerde que Para asignar valor a un elemento del arreglo es: tipoDato[] nombreArreglo=new tipoDato[tamao]; nombreArreglo[posicion]=valor; Ejemplo: asignar el valor de 5 en la posicin 2 de un arreglo de enteros de tamao 3, o que tenga 3 elementos: Int[] a=new int[3]; a[2]=5;

Para obtener el valor de un element del arreglo es: nombreArreglo[ posicin ]; Ejemplo: obtener el valor de la posicin 2 de un arreglo alfanumrico de tamao 4. String dato= arreglo[2]; La variable dato es de tipo alfanumrico ya que el arreglo es un arreglo de datos tipo alfanumrico.

41 | P g i n a

LCC. Vctor Herrera Silva

Programacin Orientada a Objetos

4.3.- Arreglo de Objetos Como ya vimos en los temas pasados, un arreglo en java es tambin un objeto, pero el arreglo puede ser de cualquier tipo de dato. Recordemos que cuando nosotros creamos una clase, esta puede ser instanciada para convertirse un objeto del tipo de dato de la clase instanciada. Una vez que tenemos nuestro objeto, podemos accesar a todas aquellas propiedades o variables de la clase instanciada as como los mtodos declarados en ella, siempre y cuando sean visibles.(depende de los modificadores de acceso). De acuerdo a lo comentado, una vez que creamos una clase esta puede ser tomada como un nuevo tipo de dato, y porque no utilizarlo con arreglos de java Supngase que se tiene la siguiente clase: public class Persona { public String nombre; public int edad; } Tiene 2 atributos llamados nombre y edad, y tienen un nivel de acceso pblico. Ahora vamos a instanciar un arreglo de objetos Persona de 3 elementos: Persona p1=new Persona(); Persona p2=new Persona(); Persona p3=new Persona();

Para poder declarar un arreglo de este tipo, tenemos que identificar lo siguiente: 1.- El arreglo es de tipo Persona, ya que cada elemento guarda un objeto de tipo Persona, por lo tanto, el arreglo debe de ser como su nombre lo dice, un arreglo del mismo tipo de dato que sus elementos. 2.- El arreglo tiene 3 elementos,por lo tanto es de tamao 3. De acuerdo a lo comentado, el arreglo se declara de la siguiente manera: Persona[] arregloPersona=new Persona[3]; Persona p1=new Persona(); arregloPersona[0]=p1; En este punto asignamos el objeto p1 de la clase Persona y lo guardamos en la primera posicin del arreglo arregloPersona. Esto es vlido ya que el arreglo es de tipo Persona y p1 tambin es del mismo tipo. Para los dems valores se hace de la misma manera: Persona p2=new Persona(); Persona p3=new Persona(); arregloPersona[1]=p2; arregloPersona[2]=p3; Ahora para cada elemento del arreglo puede obtenerse su valor, en este ejemplo, el arreglo es una arreglo de tipos de dato Persona, por lo tanto el valor devuelto debe de almacenarse en una variable con el mismo tipo de dato. Persona persona=arregloPersona[0]; Persona persona2=arregloPersona[1]; Persona persona3=arregloPersona[2]; 42 | P g i n a

LCC. Vctor Herrera Silva

Programacin Orientada a Objetos

Ejemplo 1: Crear un arreglo de 3 personas y que a cada una de ellas se le pregunte su nombre y su edad e imprimir la lista de personas en la consola. Solucin: public class ArregloObjetos { public void ejecutar(){ //Se inicializa la clase Scanner para pedir los datos al usuario Scanner scan=new Scanner(System.in); //Se crea un arreglo de 3 elementos que tiene como tipo de dato la clase "Persona" //Significa que cada elemento del arreglo ser una instancia de la clase persona Persona[] personas=new Persona[3]; for(int i=0;i<3;i++){ Persona persona=new Persona(); System.out.print("Escribe el nombre de la persona "+i+":"); String nombreCapturado=scan.next(); persona.nombre=nombreCapturado; //se guarda el objeto instanciado "persona" de la clase "Persona" en la posicin i personas[i]=persona; } System.out.println("=============Listado de personas============="); //Ahora vamos a imprimir el arreglo de personas for(int i=0;i<personas.length;i++){ //Obtengo el valor del arreglo en la posicion i, como el arreglo es de //tipo de dato "Persona" entonces la variable donde se va a almacenar //debe de ser del mismo tipo Persona personaActual=personas[i]; //Una vez que recuperamos a nuestro objeto persona de la posicin i, //accesamos a su propiedad nombre //Digamos que en el objeto se guard su atributo nombre con cierto valor, //al accesar a el, el atributo nombre sigue teniendo el mismo valor System.out.println("Nombre:"+personaActual.nombre); } System.out.println("========================================="); } }

43 | P g i n a

LCC. Vctor Herrera Silva

Programacin Orientada a Objetos

Programacin En Java
5.- Java Beans y shadowing

44 | P g i n a

LCC. Vctor Herrera Silva

Programacin Orientada a Objetos

5.1.- Java Beans El concepto de Bean en java se refiere a una clase que contiene atributos o variables privadas con sus mtodos pblicos para obtener o modificar los valores de cada atributo. Realmente consiste en encapsular las propiedades de una clase. Sintaxis para definir un Bean de Java public class NombreClaseBean{ private tipoDato nombrePropiedad; public void setNombrePropiedad(tipoDato nombrePropiedad){ this.nombrePropiedad=nombrePropiedad; } public tipoDato getNombrePropiedad(){ return nombrePropiedad; } } Nota: Para cualquier tipo de dato que no sea booleano, el estndar de los mtodos pblicos es, set para poner un valor, y get para obtener el valor de la propiedad. Nota: Si la propiedad es de tipo booleana, el mtodo para obtener el valor debe de tener como prefijo is en vez de get. Ejemplo: public class Persona { private String nombre; private int edad; private boolean masculino; public String getNombre() { return nombre; } public void setNombre(String nombre) { this.nombre = nombre; } public int getEdad() { return edad; } public void setEdad(int edad) { this.edad = edad; } public boolean isMasculino() { return masculino; } public void setMasculino(boolean masculino) { this.masculino = masculino; } }

45 | P g i n a

LCC. Vctor Herrera Silva

Programacin Orientada a Objetos

Entonces esto nos permite estructurar nuestro cdigo y en vez de tener un arreglo de variables que guarde los nombres de las personas, y un arreglo de variables que guarde los apellidos de las personas es mucho mejor tener un arreglo de personas que a su vez cada una tenga su propiedad definida. Ejemplo 1: Pedir a un usuario que capture su nombre, su edad y que especifique si es masculino o femenino.

Como se puede ver en el ejemplo, primero instanciamos nuestro bean: Persona bean=new Persona(); Despus asignamos los valores a cada propiedad de nuestro bean, en nuestro caso, le pedimos al usuario que capture luego guardamos el valor en una variable para despus ser utilizada en los mtodos de set que son los que asignan un valor a cada atributo. Luego, para imprimir en consola los datos introducidos, utilizamos la misma instancia de persona y mandamos a llamar los mtodos de get que son los mtodos que regresan un valor. Recuerde que en un bean, debe de tener una variable privada, esta variable podr ser modificada por medio de su mtodo SET pasndole como argumento el nuevo valor que se le quiere asignar a dicha variable. Para obtener el valor de la propiedad de nuestro bean, hay que mandar a llamar el mtodo get de nuestra variable. Ejemplo: Asignar el valor de Herrera a la variable o atributo apellido de nuestro bean Persona. Persona persona=new Persona(); persona.setApellido(Herrera); Obtener el apellido capturado del bean creado: String miApellidoGuardado= persona.getApellido();

46 | P g i n a

LCC. Vctor Herrera Silva

Programacin Orientada a Objetos

Ejemplo 2: Supngase que un amigo quiere tener un sistema bsico que le permita guardar un arreglo de 5 autos, en donde cada uno tiene las siguientes propiedades: velocidad mxima, marca, modelo, nombre del auto, y que indique si es transmisin automtica o estndar. Una vez capturado todos los carros, desea imprimir la lista de los carros capturados. Solucin: Primero que nada hay que identificar lo que se tiene que crear en nuestro programa: 1.- Un bean de Java, llamado Auto y que tenga las propiedades mencionadas en el problema. 2.- Un arreglo de objetos Auto 3.- Una instancia de la clase Scanner para pedir al usuario que introduzca los datos de cada Auto. 4.- Un for para guardar los 5 objetos de tipo Auto y guardarlos dentro del arreglo de Autos. 5.- Otro for para imprimir la lista de los 5 autos. Ver cdigo: JavaBeans> examples.ProgramaAutos Nuestro cdigo sera el siguiente: Java Bean: Auto.java public class Auto { private String nombre; private String marca; private int modelo; private float velocidadMaxima; private boolean estandar; public String getNombre() { return nombre; } public void setNombre(String nombre) { this.nombre = nombre; } public String getMarca() { return marca; } public void setMarca(String marca) { this.marca = marca; } public int getModelo() { return modelo; } public void setModelo(int modelo) { this.modelo = modelo; } public float getVelocidadMaxima() { return velocidadMaxima; } public void setVelocidadMaxima(float velocidadMaxima) { this.velocidadMaxima = velocidadMaxima; }

47 | P g i n a

LCC. Vctor Herrera Silva public boolean isEstandar() { return estandar; } public void setEstandar(boolean estandar) { this.estandar = estandar; } }

Programacin Orientada a Objetos

Y aqu esta nuestra clase que tiene 2 mtodos, uno para pedir los datos al usuario y guardarlos en el arreglo y otro para imprimir el arreglo. Ejecutable: ProgramaAutos.java public class ProgramaAutos { private Auto[] arregloAutos=new Auto[3]; private void p(String mensaje){ System.out.print(mensaje); } private void pln(String mensaje){ System.out.println(mensaje); } /** * Metodo que se utiliza para solicitar los datos al usuario sobre los 5 * carros a guardar en el arreglo */ public void capturarAutos(){ Scanner scan=new Scanner(System.in); for(int i=0;i<3;i++){ //Solicitamos los datos al usuario pln("======Datos del auto #"+(i+1)+"======"); p("Nombre:"); String nombre=scan.next(); p("Marca:"); String marca=scan.next(); p("Modelo:"); int modelo=scan.nextInt(); p("Teclee Y si el auto es de transmisin manual"); String opcionManual=scan.next(); boolean isEstandar=("Y".equals(opcionManual))?true:false; p("Velocidad maxima:"); float velocidadMaxima=scan.nextFloat(); //Creamos la instancia de nuestro bean Auto Auto auto=new Auto(); //Asignamos lo que captur el usuario a cada propiedad de nuestro bean auto.setNombre(nombre); auto.setMarca(marca); auto.setModelo(modelo);

48 | P g i n a

LCC. Vctor Herrera Silva

Programacin Orientada a Objetos

auto.setEstandar(isEstandar); auto.setVelocidadMaxima(velocidadMaxima); //Guardamos en la posicin "i" nuestro bean con las propiedades ya asignadas en el arreglo de autos arregloAutos[i]=auto; } } public void mostrarListaAutos(){ pln("=======Lista de autos======="); //Se crea un ciclo for desde i=0 hasta que i sea menor //a la longitud o el num. de elementos del arreglo de autos for(int i=0;i<arregloAutos.length;i++){ //se obtiene el objeto o bean Auto de la posicion "i" de nuestro arreglo de autos Auto autoActual=arregloAutos[i]; pln("<<<<Caracterisiticas del auto #"+(i+1)+">>>>"); pln("Nombre:\t\t\t"+autoActual.getNombre()); pln("Marca:\t\t\t"+autoActual.getMarca()); pln("Modelo:\t\t\t"+autoActual.getModelo()); boolean esEstandar=autoActual.isEstandar(); String tipoTransmision=(esEstandar)?"Manual":"Automtica"; pln("Transmision:\t\t"+tipoTransmision); pln("Velocidad Mxima:\t"+autoActual.getVelocidadMaxima()); } } public static void main(String[] args){ ProgramaAutos programa=new ProgramaAutos(); programa.capturarAutos(); programa.mostrarListaAutos(); } }

49 | P g i n a

LCC. Vctor Herrera Silva

Programacin Orientada a Objetos

5.2.- Shadowing Este es un concepto de java y la manera de representar el uso de shadowing es con la palabra reservada (keyword) this. Esta palabra indica que se va a acceder a alguna propiedad de la clase actual, por ejemplo, por medio del thi se puede accesar a las variables globales o de instancia, y a los mtodos de la misma clase. Y para que se utiliza? Veamos el siguiente ejemplo: Problema 1: Supngase que se tiene un mtodo que se llama sumar y que recibe 2 argumentos enteros, el mtodo crea una variable llamada resultado, pero sin embargo, nuestra clase ya tiene una variable de instancia llamada resultado. Si dentro de nuestro mtodo deseamos imprimir el resultado, cmo sabe java que valor va a imprimir? Solucin:

Ntese que en la lnea 20 y 21 se si no se antepone el this se estar accesando a la variable local, en este caso el valor de resultado es la suma de x+y. Ahora bien, en la lnea 24 se accesa a la variable de instancia anteponiendo el this.resultado, en este caso, el valor es de 100 que ya est definido al instanciar la clase. Ver cdigo: JavaBeans> examples.Shadowing.java

50 | P g i n a

LCC. Vctor Herrera Silva

Programacin Orientada a Objetos

5.3.- Shadowing en Java Beans Y dnde han visto shadowing? As es, en el uso de Java beans, al declarar una propiedad privada, el mtodo set hace referencia a la variable de instancia, y el argumento del mtodo set tiene el mismo nombre. Por ejemplo: public class Auto { private String nombre; public void setNombre(String nombre) { this.nombre = nombre; } } Lo que est marcado con gris es la variable de instancia nombre, lo que est marcado con azul es la variable local. En el mtodo set se asigna a la variable de instancia el valor que se le pasa como argumento.

51 | P g i n a

LCC. Vctor Herrera Silva

Programacin Orientada a Objetos

Programacin En Java
6.- Overload, overwrite y Herencia
52 | P g i n a

LCC. Vctor Herrera Silva

Programacin Orientada a Objetos

6.0.- Overload, overwrite y Herencia


En este captulo veremos que es sobrecarga (overload), sobre escritura (overwrite) y herencia (hierarchy). Veremos tambin que es lo que se puede hacer con herencia, para que se utiliza. 6.1.- Overload La sobrecarga en java consiste en nombrar un mtodo de una clase de la misma manera de otro mtodo ya existente dentro de la misma clase, es decir, repitiendo el nombre del mtodo, pero cambiando la firma (signature) del mtodo. Para que un mtodo sea sobrecargado debe de cumplir las siguientes condiciones: 1.- Que el nombre del mtodo sea repetido 2.- Que los argumentos del nuevo mtodo sean diferentes a los del mtodo recargado o que el nmero de argumentos vare. Al decir, diferentes, me refiero a DISTINTO tipo de dato, ojo, NO al nombre de la variable. 3.- Que el tipo de dato que regresa el mtodo sea diferente (esta condicin no necesariamente debe de considerarse, pero se incluye porque forma parte de la firma del mtodo). A continuacin vamos a ver un ejemplo de sobrecarga de mtodos. Problema 1: Suponga que tengo una clase llamada Sobrecarga, y que dentro de ella tengo 4 mtodos, de acuerdo al siguiente cdigo, cules y cuntos de ellos son mtodos sobrecargados?

53 | P g i n a

LCC. Vctor Herrera Silva

Programacin Orientada a Objetos

Solucin: Para explicar la solucin al problema, como la mayora de los mtodos se llaman igual, los llamaremos mtodo a),b),c),d),e), f), g) y h) como se puede ver en la imagen anterior, en cada mtodo existe un comentario con el nombre del mtodo. Ahora, el mtodo a) y b) son vlidos como mtodos sobrecargados por que cumplen con las siguientes reglas: 1.- Ambos mtodos tienen el mismo nombre (saludar). 2.-El nmero de argumentos vara en cada mtodo, en el primero NO tiene argumentos y en el segundo s. Con esto ya es suficiente para que sea considerado como una sobrecarga del mtodo saludar. El mtodo a) y c) NO SON vlidos por los siguientes motivos: 1.-A pesar de que el nombre de los mtodos sea el mismo, el nmero de argumentos o tipo de dato de los argumentos no vara. El mtodo d) NO ES VLIDO para sobrecarga, por lo siguiente: 1.- El mtodo a pesar de que tiene el mismo nombre que el mtodo a),b) y c), tiene un solo argumento y es de tipo de dato String, debido a que esta firma ya existe por el mtodo b) entonces el mtodo se duplica, es por ello que el compilador nos marca error. Nota: Lo importante en este punto es que no importa si el nombre de las variables cambia, lo que importa es el nmero de argumentos y el tipo de dato de cada uno de ellos. En el mtodo e) no hay ningn problema con la compilacin, pero no es sobrecarga de mtodo saludar, ya que para empezar tienen distinto nombre, es decir, simplemente es una nueva declaracin de otro mtodo. En el mtodo f) es similar al caso anterior, ya que este mtodo est duplicado con el mtodo c). En este caso no tienen argumentos ninguno de los 2 mtodos y tienen el mismo nombre, por ello marca error el compilador. Nota: No importa si en un mtodo regrese un tipo de dato diferente del mtodo a sobrecargar, esto no influye al determinar si es un mtodo sobre cargado, LO NICO que si influye es: nombres iguales, nmero de argumentos distintos y/o tipo de argumentos distintos. En el mtodo g) si es sobrecarga ya que tiene el mismo nombre pero diferente cantidad de argumentos. En el mtodo h) si es sobrecarga tambin ya que a pesar de que sea un solo argumento, este es diferente a los dems mtodos que tienen el mismo nombre, recordemos que una de las reglas de sobrecarga es que tenga diferencias con el tipo de dato de los argumentos.

54 | P g i n a

LCC. Vctor Herrera Silva

Programacin Orientada a Objetos

6.2.- Herencia La herencia consiste en involucrar 2 partes, el padre y el o los hijos, en donde las caractersticas que estn accesibles a los hijos sern heredadas a los mismos, es decir, supngase que usted como padre tiene una casa, esa casa se la va a heredar a su hijo por medio de un testamento, lo cual hace que su hijo en un tiempo dado pueda tener acceso a ella y utilizarla como su fuera suya. En la vida real, java tiene un comportamiento similar, en donde el padre=Clase Padre, el hijo=Clase Hijo, y la casa= lo que se va a heredar y que el padre a travs del testamento pueda disponer de ella. Entonces de acuerdo a este ejemplo, podramos decir que herencia en java consiste en tener una clase Padre que tiene atributos (variables) y mtodos accesibles( ver 1.15.-Modificadores de Acceso para mtodos ) para que el o los hijos tengan acceso a ello. Para utilizar herencia, se utiliza la palabra reservada(keyword) extends pero nicamente en la clase hija que hereda del padre. Ejemplo 1: public class Padre{ public String casa; private CepilloDientes cepillo; public void formaDeCaminar(){ //Hacer algo } private void irAlBanio{ //Hacer del 1 y del 2 } } //La clase Hijo hereda de Padre public class Hijo extends Padre{ //Por hacer } En este ejemplo, aparentemente el Hijo no tiene ningn mtodo ni variable declarada, pero es todo lo contrario, el Hijo por heredar del Padre, puede tener acceso a todo aquello que el padre permite que sea visible. Y qu es lo que es visible? Pues todo aquello que no es privado, o que puede ser accesado desde el hijo siguiendo las reglas de modificadores de acceso. En este caso, lo que la clase Hijo puede accesar es a lo siguiente: 1.- Al atributo casa del Padre porque es una propiedad pblica y como hereda en este caso es como si el Hijo tuviera tambin esta propiedad. 2.- Al mtodo formaDeCaminar ya que es un mtodo pblico Por otro lado, lo que la clase Hijo NO puede accesar es: 1.- Al mtodo irAlBanio digamos que es algo ntimo del pap, es decir, es privado. 2.- El cepillo de dientes del pap es algo que el hijo no puede accesar o utilizar, ya que es privado.

55 | P g i n a

LCC. Vctor Herrera Silva

Programacin Orientada a Objetos

Cabe aclarar que en Java no se permite herencia mltiple, es decir Hijo extends Padre,Madre, y esto porqu? Por que supongan que el pap tiene una forma de caminar y la mam tiene otra forma de caminar, es decir, la clase Padre y la clase Madre tienen el mtodo formaDeCaminar, entonces, si el hijo hereda los mtodos de Padre y Madre, como sabr java a cual de los 2 mtodos heredados debe ejecutar? Es por ello que no se permite herencia mltiple. 6.2.2.- Ms y ms herencia Lo que si se puede hacer en java, es que tengamos una clase Hija cuya clase padre es a su vez una clase Hija de otra Clase Padre. Es decir: public class Padre{ public String ojosDeColor=azul; public void formaDeCaminar(){ //hacer algo } } public class Hijo extends Padre{ public String tipoCabello=liso; } public class Nieto extends Hijo{ } En este caso, la clase Hijo extiende del padre, la clase Nieto extiende de Hijo, si analizamos el ejemplo anterior, podemos concluir que: 1.- La clase padre va a heredar o compartir los ojos de color y forma de caminar a sus descendientes, es decir a la clase Hijo. 2.- La clase Hijo tendr los ojos de color a menos que se indique lo contrario (que se vuelva a declarar dentro de la clase Hijo la variable ojosDeColor). 3.- La clase Hijo heredar a su hijo( clase Nieto) el tipo de cabello liso, a menos que se indique lo contrario.(declarar la variable tipoCabello en la clase Nieto) 4.- La clase hijo tendr el mtodo heredado llamado formaDeCaminar ya que es pblico. 5.- La clase Nieto tendr tambin los mtodos que tiene el padre, en este caso el padre de Nieto es Hijo, y como hijo ya hered la forma de caminar de su Padre, entonces el nieto(clase Nieto) tambin heredar la misma forma de caminar de su padre(clase Hijo) y de su abuelo(clase Padre).

56 | P g i n a

LCC. Vctor Herrera Silva Ejemplo 1:

Programacin Orientada a Objetos

Salida:

57 | P g i n a

LCC. Vctor Herrera Silva

Programacin Orientada a Objetos

Ejemplo 2: Suponga que la clase padre llamada A, tiene 2 mtodos pblicos y un mtodo privado, y tiene otra clase B que hereda de la clase A

Problema 1: Suponga que se encuentra en una empresa y que hay jerarquas en ella, usted puede diferenciar entre el Gerente, Director y Supervisor de un departamento. Todos ellos son obviamente empleados, que por ser empleados, tienen que checar su hora de entrada, su hora de salida, a todos ellos se les proporciona un documento con las reglas de un departamento y que tienen que leer, sin embargo, cada rol o puesto tiene diferencias, ya sea que el director puede autorizar, el supervisor inspecciona el trabajo de otros empleados, el Gerente revisa el trabajo del supervisor y otras actividades ms. La herencia consiste en heredar algunas cualidades de un padre a un hijo, en este ejemplo, 6.2.3.- Resumen de Herencia Cuando hablamos de herencia significa que una clase padre podr heredar sus atributos y mtodos a las clases hijas siempre y cuando sean visibles por las clases Hijas. Entonces, la clase Hija tendr la cantidad de mtodos que ella misma posee ms los mtodos que le fueron heredados por el padre, as como sus atributos. Una clase padre no puede heredar nada a la clase hija si todos sus mtodos y atributos son privados. Una clase B heredad de A (B extends A) y la clase C hereda de B, entonces C tendr todos los mtodos visibles de B ms los mtodos que B puede ver de la clase A ms los mtodos que ya tena C, al igual con sus atributos. Bsicamente la herencia se utiliza para reutilizar cdigo, es decir, si tenemos un mtodo que se repite en varias clases entonces ese mtodo puede ir en una clase Padre y que todas las clases Hijas hereden de la clase padre, as el mtodo que es comn en las clases no tiene que repetirse. 6.3.-Overwrite (sobreescritura) Sobre escritura de un mtodo en palabras simples consiste en modificar el cmo hacer de un mtodo heredado de un padre por medio de la redefinicin del mtodo en la clase hija. Es decir, supongamos que un Padre puede caminar, su hijo puede caminar pero lo puede hacer de diferente manera. En programacin orientada a objetos, el Padre o Pap sera nuestra clase padre, el hijo sera la clase que extiende de la clase Padre. El padre hereda aquellos mtodos y atributos a sus hijos, en este caso, a su hijo, nicamente aquellos mtodos visibles para el hijo. Entonces, por herencia, el hijo tendr el mtodo de caminar, una sobreescritura es cuando se modifica el mtodo heredado, pero se modifica UNICAMENTE lo que hace el mtodo, la firma del mtodo se deja tal y como fue heredada, es decir, cambia el bloque de instrucciones a ejecutar el mtodo, pero el nombre y nmero de argumentos si DEBE de ser igual al mtodo heredado.

58 | P g i n a

LCC. Vctor Herrera Silva

Programacin Orientada a Objetos

Ejemplo 1: Del ejemplo 1 de la seccin 6.2.2 , suponga que la clase Hijo tiene el mtodo de formaDeCaminar con la misma firma del mtodo que hered de su padre: Firma del padre: public void formaDeCaminar(sin argumentos) Firma del hijo: public void formaDeCaminar(sin argumentos) El cdigo quedara de la siguiente manera:

Ntese que el mtodo de la lnea 19 en la clase Hijo, se sobreescribe ya que para que un mtodo se sobre-escriba se tiene que cumplir lo siguiente: 1.- Que exista herencia (Hijo extends Padre) 2.- Qu el mtodo a sobre-escribir tengan la misma firma tanto el padre como el hijo. (ver la comparacin antes de las imagenes). Esto es que el nombre del mtodo es igual en el padre y el hijo, asi como el nmero de argumentos que recibe y el tipo de retorno del mtodo. Nota: Es obligatorio que el tipo de retorno tambin coincida con el tipo de retorno del mtodo a sobre-escribir. 3.- Otra cosa muy importante, el modificador de acceso DEBE de ser de un nivel menos restrictivo que el modificador de acceso del mtodo a sobre-escribir. En este caso el mtodo padre tiene modificador de acceso pblico, el hijo debe de tener un modificador de acceso de igual o menos restrictivo.

59 | P g i n a

LCC. Vctor Herrera Silva Niveles de Restriccin o visibilidad: Modificador de Acceso Prvate default protected public

Programacin Orientada a Objetos

Nivel de restriccin 4 3 2 1

De acuerdo a nuestra tabla, tenemos los siguientes escenarios: 1.- Qu pasa si la clase Padre tiene un mtodo protected y se desea sobre-escribir el mtodo, cmo debera de ser el mtodo de la clase Hija? -El mtodo debe de tener un modificador de acceso menos restrictivo, en este caso debe de ser de nivel 2 o 1, es decir, el mtodo debe de ser protect o public. 2.-Qu pasa si la clase Padre tiene un mtodo default, y ahora como debe de ser el mtodo? - Como el modificador de acceso es de nivel 3, entonces puede ser <=3, por lo tanto el modificador de acceso debe de ser default (igual), protected o public. 3.- Qu pasa si la clase Padre el mtodo a heredar es public, como debe de ser el mtodo sobreescrito en la clase hija? - Debe de ser de un nivel igual o menos restrictivo, en este caso, public tiene nivel 1, y es el que tiene menor de restriccin por lo tanto, el mtodo a sobre-escribir TIENE que ser public. 4. Y la pregunta sin razn de ser Qu pasa si la clase Padre tiene el mtodo que es prvate, como debe de ser el mtodo de la clase Hija para sobre-escribirlo? - Eso sera imposible ya que, inicialmente, acaso una clase puede heredar mtodos o propiedades privadas? Claro que no, entonces la clase Hija al declarar un mtodo con el mismo nombre del padre no significa que se sobre-escribe el mtodo, simplemente se crea un nuevo mtodo, ya que la clase Hija desconoce ese mtodo privado del padre. Por lo tanto, no se puede sobre-escribir mtodos privados de las clases Padres ya que ni si quiera se heredan. 6.3.1.- Resumen de Sobre-escritura (overwrite) Recuerde que sobre-escritura de una manera simple es cuando nos heredan algo donde ese algo el padre lo realiza de una manera y nosotros deseamos hacerlo a nuestra manera, vindolo desde la perspectiva de la programacin, consiste en heredar los mtodos de nuestro padre, cambiando la funcionalidad del mtodo, sin modificar su firma. Por ejemplo, cuando somos nuevos en nuestro trabajo, nuestro jefe nos ensea como l lleva acabo cierta operacin, (nos la hereda) y despus nosotros decidimos hacerla a nuestra manera, sin embargo sigue siendo la misma operacin pero ejecutado de forma diferente. Recuerde tambin que al heredar un mtodo, este debe de tener igual o menor grado de restriccin que el que ya tiene el mtodo heredado por el Padre.

60 | P g i n a

LCC. Vctor Herrera Silva

Programacin Orientada a Objetos

Programacin En Java
7.- Polimorfismo
61 | P g i n a

LCC. Vctor Herrera Silva

Programacin Orientada a Objetos

7.- Polimorfismo
Como su nombre lo dice, significa muchas formas en programacin se refiere a que un objeto puede ser instanciado de diferentes tipos de objetos por medio de herencia. El polimorfismo es un tipo de herencia especial! Consiste en tener las caractersticas comunes de varios objetos y colocarlas en una super clase y que todos ellos conformen una jerarqua de clases. En java, esta super clase (clase padre) se define como una interface y NO como una clase. 7.1.- Interface Una interface en java consiste en definir lo que nuestras clases hijas tienen en comn y se coloca dentro de nuestra interface. Digamos que es una plantilla que indica lo que tiene que ir al momento de ser implementada la interface, un ejemplo muy comn es el siguiente: Sabemos que todos los animales comen, moverse y tienen un sonido, pero cada uno lo hace de manera diferente, suponga que comer, moverse y hacerSonido son mtodos y que la clase Tigre tiene el mtodo comer, correr y hacer Sonido, tambin un los mismos mtodos. Entonces para utilizar polimorfismo, creamos lo siguiente: Interface (la que tiene los mtodos comunes)

Clase Pez

62 | P g i n a

LCC. Vctor Herrera Silva Clase Tigre

Programacin Orientada a Objetos

Noten que la super clase no es declarada como una clase, sino como una interface, para ello se utiliza la palabra reservada interface. Para las clases que utilizarn la plantilla o interface no la extienden, sino que la implementan utilizando la palabra reservada implements. Sintaxis para declarar una interface public interface NombreInterface{ tipoRetorno nombreMetodo(Argumentos); tipoRetorno nombreMetodo2(Argumentos o sin argumentos); . . . tipoRetorno nombreMetodoN(Argumentos o sin argumentos); public abstract tipoRetorno nombreMetodoX(Argumentos o sin argumentos); } Nota: Como pueden ver, ya nos e define como class sino como interface Nota: Dentro de la interface solamente se definen los mtodos que tendr la clase que la implemente, sin especificar que es lo que hace el mtodo, es decir, sin el cuerpo del mtodo, es por ello que solamente lleva el nmero de argumentos, pero no dice cmo funciona el mtodo. Nota: Los mtodos de una interface deben de ser public abstract, pero java lo hace as por default, es por ello que basta con indicarle el tipo de dato del retorno y el nombre del mtodo. Para las clases que utilicen la interface, deben de especificarlo con implements public class NombreClase implements NombreInterface{ public void tipoRetorno nombreMetodo(Argumentos){ //lo que hace el mtodo nombreMetodo } } Nota: Cuando una clase implementa una interface es como si dijramos, ok me das una plantilla, ya s lo que tengo que poner pero yo lo hago a mi manera, es por ello que tenemos un mtodo y lo sobreescribimos para que cada clase que lo implementa haga las cosas a su manera.

63 | P g i n a

LCC. Vctor Herrera Silva

Programacin Orientada a Objetos

Recuerde que una interface indica que es lo que se tiene que hacer y NO dice cmo hacerlo, para ello la clase que implementa la interface se encarga de indicar cmo hacer lo que dice la plantilla o interface que haga. 7.2.- Caractersticas principales de una interface Como ya comentabamos que la interface es un tipo de herencia especial en el que sus mtodos contenidos en la clase solo describen que es lo que se hace ms no se indica como se hace, en seguida presentamos algunas caractersticas para identificar una interface: 1.- No es una clase, se declara como interface. 2- Todos los mtodos contenidos dentro de la interface son mtodos pblicos y abstractos, abstracto como su nombre lo dice deja que el mtodo sea demasiado general, es por ello que no se define el cuerpo del mtodo. 3.- Los mtodos no llevan cuerpo, es decir, no lleva las llaves , - 4.- Los mtodos nicamente especifican que es lo que recibe y regresa el mtodo, ms nunca nos dir como se debe de hacer. 5.- Una interface es una plantilla, que al momento de implementarla por una clase, indica que los mtodos de la interface deben de ser implementados tambin. 6.- Una interface por ser un caso especial de herencia, puede ser utilizada para instanciar cualquier objeto que implemente esta interface. Ejemplo 2: Suponga que se desea calcular el permetro de una figura, y le damos al usuario la opcin de elegir un tringulo, cuadrado y rectngulo. Solucin: Primero que nada tenemos que identificar quien ser la interface. En este caso podemos ver que tanto el tringulo, cuadrado y rectngulo tienen un permetro, cada uno se obtiene de diferente forma pero sabemos que todos lo tienen, entonces podemos crear una interface llamada Figura y que tenga la definicin del mtodo calcularPerimetro. Interface

Despus tenemos las clases que implementarn esta plantilla, la plantilla llamada Figura. Debemos de distinguir que usaremos 3 clases, una de Tringulo, Rectngulo y Cuadrado. Al implementar la interface o hacer uso de la plantilla, debemos de implementar sus mtodos tambin y adems hacer una sobreescritura para rellenar el mtodo o especificar lo que va a hacer el mtodo, es por ello que la interface funciona como una plantilla, porque sabes lo que se debe de poner pero puedes llenarlo de diferente manera.

64 | P g i n a

LCC. Vctor Herrera Silva Clase Rectngulo

Programacin Orientada a Objetos

Clase Cuadrado

Clase Tringulo

65 | P g i n a

LCC. Vctor Herrera Silva Ejecucin del programa

Programacin Orientada a Objetos

Como podemos ver en la imagen anterior, tenemos un arreglo del objeto Figura, que es una interface, pero no deja de ser objeto, y por ser objeto puede ser utilizado como un tipo de Dato. Posteriormente se crean 3 instancias, fig1, fig2, fig3, y como todas ellas implementan la interface Figura, pueden ser instanciadas ya que el uso de interface es un tipo de herencia especial. Guardamos en un arreglo a las 3 instancias, donde cada una trae la instancia de cada clase, y como todas usan la plantilla de Figura, todas las clases tiene el mtodo calcularPerimetro. Salida del programa:

7.3.- Ventajas y desventajas de usar polimorfismo Ventajas Desventajas Reduce el cdigo Un poco difcil de entender el concepto de polimorfismo Permite tener nuestro cdigo bien estructurado y uniforme Cualquier cambio se puede hacer sobre la plantilla y as el cambio se aplicar a todas las clases que la implementen En Programacin orientada a objetos, nos permite crear instancias de diferentes clases asignndolas a la interface que implementan las clases en comn. Ms fcil de hacer cambios al cdigo

66 | P g i n a

LCC. Vctor Herrera Silva

Programacin Orientada a Objetos

Programacin En Java
8.- Manejo de Excepciones
67 | P g i n a

LCC. Vctor Herrera Silva

Programacin Orientada a Objetos

8.0.- Exceptions Se dice que un programa es vulnerable cuando tiene cierta probabilidad de fallar durante la ejecucin de nuestro programa, cuando llega a fallar nuestro programa, pueden ser por 2 cosas: ocurri un error o una excepcin. Una excepcin ocurre cuando nuestro programa no consideraba una situacin y por lo tanto no sabe cmo manejar esa situacin y lo que ocurre es que se termine el programa. En este captulo explicaremos como evitar que nuestro programa termine su ejecucin cuando ocurre una excepcin, esto har que nuestro programa sea menos vulnerable o tenga menos errores. La clase que se utiliza para indicar que es una excepcin es Exception. Un error, es algo que no se esperaba que ocurriera en nuestro programa y este no puede ser evitado ni manejado por medio de excepciones, ya que es un problema muy severo que no puede ser controlado o manejado. Es decir, una vez que ocurre un error, ya no hay nada ms que hacer. La clase que se utiliza para indicar que es un error es Error. Ambas clases Exception y Error, son subclases o clases hijas de la clase Throwable (clase Padre o superclase), es decir, si vemos el cdigo o la declaracin de estas clases sera as: Exception extends Throwable , Error extends Throwable. En este captulo solamente nos enfocaremos a ver el manejo de Excepciones. 8.1.- Tipos de Excepciones Las excepciones son muy tiles para evitar problemas o controlar situaciones que no debieran de ocurrir pero que pueden pasar en nuestro programa, como cuando le pedimos a un usuario que introduzca su edad y pone su nombre, o que ponga una fecha y pone un dato incorrecto, o que ponga su nombre y no introduce nada. Existen 2 tipos de excepciones: Runtime Exceptions Checked Exceptions Ambos tipos de excepciones pueden ser manejados debido a que siguen siendo excepciones, la diferencia es que Runtime Exception es aquella que ocurre durante la ejecucin del programa, es decir, el compilador no sabe si va a fallar o no, mientras que las Checked Exceptions son aquellas que se sabe que puede ocurrir una excepcin como al leer un archivo, en este caso se tiene que manejar una excepcin si no se encuentra el archivo, o si no se puede leer o modificar el archivo. Tipo de Excepcin Runtime Exception Descripcin Aquellas que el compilador no sabe que pueden ocurrir pero entran en la categora de Excepciones por que se pueden manejar. Como por ejemplo cuando hacemos una divisin entre 0. Son aquellas que el compilador nos obliga a manejar porque puede ocurrir algo muy probable, digamos que las Checked Exceptions se valida desde la compilacin de nuestro programa. Por ejemplo, java sabe que si lees un archivo, es muy probable que el archivo no exista, o no tenga 68 | P g i n a

Checked Excepcion

LCC. Vctor Herrera Silva

Programacin Orientada a Objetos permisos de lectura, por ello el compilador marcar error hasta que en tu cdigo manejes la excepcin de FileNotFoundException u otra excepcin requerida.

Diagrama de Clases de Throwable, Error y Excepcions

8.2.- Try, catch and Finally Ya hablamos de manejar excepciones, y los tipos de excepciones que pueden ocurrir durante o antes de la ejecucin de un programa, pero cmo se manejan? Para ello utilizaremos las siguientes instrucciones: Sintaxis para manejo de Excepciones try{ //Codigo a ejecutar donde puede ocurrir una excepcion }catch( ClaseException variable){ //Lo que har si ocurre la excepcin }finally{ //Lo que siempre har si ocurre o no una excepcin 69 | P g i n a

LCC. Vctor Herrera Silva

Programacin Orientada a Objetos

} Nota: El bloque finally es opcional, puede o no ir Nota: Si ponemos el bloque try, DEBEMOS poner el bloque catch. Nota: El bloque catch dentro del parntesis va la Excepcin a manejar, por ejemplo si es un NullPointerException, o si est fuera del ndice de un arreglo ArrayIndexOfBoundException y otras. Ejemplo 1: Suponga que quiere hacer un programa que imprima nicamente el nmero que el usuario introduce a su programa, usted le pide que captura un nmero, pero como no todo es como debera de ser, el usuario introduce una letra para ver qu pasara si pongo lo que no me piden su programa debera de estar preparado para esto. Para ello habr que manejar excepciones. Solucin: El problema anterior, es muy sencillo, pero para variar le agregaremos un control de excepciones. Primero que nada hay que identificar que excepcin podra ocurrir, o pensar lo que el usuario puede hacer y que no est permitido. En este ejemplo como sabremos que excepcin se lanzar? Hagmoslo a la fcil, creen su programa y en vez de introducir un nmero introduzcan un valor alfanumrico. Antes de la excepcin:

En nuestro mtodo main se crea la instancia de la clase ErrorDeEntrada, de esta manera creamos el objeto ErrorDeEntrada llamado instancia. Por medio de este objeto podemos ejecutar el mtodo ejecutar para iniciar con nuestro programa. En la lnea 22 se le pide al usuario que introduzca un

70 | P g i n a

LCC. Vctor Herrera Silva

Programacin Orientada a Objetos

nmero, pero el usuario introducir una letra que pasar si se supone que ese valor lo guardaremos en una variable entera llamada numero? Veamos que sucede al ejecutar e introducir un valor alfanumrico Salida:

Como se puede apreciar en la salida, al introducir a en vez de un nmero, nos lanza la excepcin InputMismatchException, esta excepcin debe de ser cachada ya que nuestro programa se detiene por completo. Y cmo sabemos que se detiene? Porque si nos fijamos en el cdigo vemos que la lnea 23 y 24 no se ejecutan despus de que ocurre la excepcin, para ello tenemos que manejarla por medio del try y catch. Agregando el manejo de la excepcin encontrada:

71 | P g i n a

LCC. Vctor Herrera Silva

Programacin Orientada a Objetos

En el cdigo anterior en la lnea 25 al solicitarle e dato al usuario puede ocurrir la excepcin que ya descubrimos que puede ser lanzada, por ello, agregamos dentro de nuestro bloque try la parte de nuestro cdigo que puede o no lanzar la excepcin mientras que en el bloque catch simplemente introducimos el cdigo alternativo en dado caso de que se lance la excepcin. Salida provocando que se lance la excepcin:

Salida sin provocar la excepcin:

Nota: Recuerde que cuando ocurre una excepcin y no es manejada (usando try/catch) la ejecucin de nuestro programa ser detenida por la excepcin, en cambio si manejamos la excepcin nuestro programa seguir funcionando hasta que nuestro programa lance una nueva excepcin no manejada, lance un error, o llegue al fin de su ejecucin. Nota: Recuerde tambin que el bloque try siempre lleva el cdigo que tiene posibilidades de lanzar la excepcin, es decir, es como si le dijramos al compilador, oye aqu puede que algo ande mal, asi que intenta ejecutarlo, si algo sale mal entonces cchalo y te digo que hacer, si no sale nada malo, entonces ignora lo que te dije. Nota: Cuando usamos try, estamos obligados a agregar el bloque catch y viceversa, es decir, si decimos que vamos a cachar algo, hay que especificar donde se lanza la excepcin, y si decimos que se va a lanzar una excepcin, tenemos que decir quin la va a cachar. 8.3.- Jerarqua de excepciones En el manejo de excepciones, es muy importante tener cuidado cuando se manejan ms de una excepcin, ya que si una excepcin abarca o cacha excepciones del mismo tipo estas pueden colapsarse si no se ponen en el orden correcto. Imagnese que est en un estadio de base ball, y usted y sus amigos estn en las gradas en diferentes niveles, y cada uno de ustedes tiene un guante. Hay una persona que se encuentra en la parte ms alta del estadio, es decir, en la ltima grada y se encarga de lanzar la bola hacia abajo. Esta persona tiene bolas de diferentes tipos o tamaos, y el resto de las personas tienen un guante especfico para una de las pelotas.

72 | P g i n a

LCC. Vctor Herrera Silva

Programacin Orientada a Objetos

Excepcion 1

Cacha la excepcin 1 Excepcion 2

Cacha la excepcin 2 Excepcion 3

Cacha la excepcin 3 Del dibujo anterior, suponga que su cdigo donde es probable que suceda una excepcin es la persona que lanza la bola, esto representa lo que debe de ir en su bloque try. La bola lanzada es la excepcin que ocurre, como se puede ver en la pelota ms chica lanzada es la excepcin 1, y ser cachada por el guante que encaje con el tamao de la bola lanzada, es decir, dentro de nuestro bloque try si se lanza una excepcin del tipo Excepcion 1, ser cachado y entrar en el bloque catch que tenga la clase Excepcion 1. Si la bola lanzada es del tipo Excepcin 2, el guante que debera de cachar la bola es el del mismo tipo de la excepcin, osea el guante con el tamao Excepcin 2. Y ocurre lo mismo para la excepcin 3. Hay algo que debemos de tomar en cuenta, es que si se manejan excepciones que heredan de otra clase que tambin es excepcin, el orden u acomodo de los bloques try/catch si importa. Esto es, si una clase ArrayIndexOfBoundException es una clase hija de la clase Exception, esta por ser la subclase debe de ir primer el bloque catch de la excepcin ArrayIndexOfBoundException y posteriormente Exception. Y esto porque? Por que la clase Exception puede cachar a su vez las excepciones de ArrayIndexOfBoundException y no tendra sentido cachar de nuevo la excepcin hija. Esto es, que en nuestro cdigo lo que NO se debe de hacer es: try{ //mi codigo }catch(ExcepcionPadre var1){ }catch(ExcepcionHija var2){ }

73 | P g i n a

LCC. Vctor Herrera Silva

Programacin Orientada a Objetos

El compilador nos marcara un error indicando que la excepcin ExcepcionHija no ser alcanzable, basndonos en el ejemplo del guante, el guante grande es ExcepcionPadre y el guante chico es ExcepcionHija, y de acuerdo al orden definido, el primer guante es el ExcepcionPadre y el segundo guante es el ExcepcionHija por ello no ser alcanzable. Nota: Recuerde que esto (el orden de las excepciones) aplica solamente cuando una Excepcin hereda de otra clase y ambas se colocan en nuestro cdigo para ser cachadas. 8.4.- Propagacin de excepciones Ya vimos como cachar una excepcin cuando esta es lanzada, pero java nos da la facilidad de lanzar excepciones cuando lo deseemos. Para ello se utiliza la palabra reservada throw dentro de nuestro mtodo, y en la firma del mtodo se debe de especificar que el mtodo puede o no lanzar una expcecin, para ello se utiliza la palabra reservada throws. La ventaja de utilizar throws es que permite propagar la excepcin desde el mtodo que se lanza la excepcin hasta llegar a ser cachado. Suponga que su cdigo tiene un mtodo metodo1, y que dicho mtodo hace una llamada al mtodo metodo2, y este ltimo tiene una llamada al mtodo metodo3. En el mtodo metodo3 usted realiza una validacin y en caso de que esto no se cumpla usted lanza una excepcin. El lanzar la excepcin har que su cdigo se detenga y regrese a la lnea que cacha la excepcin, ya sea en el mtodo metodo2 o mtodo metodo1. La gran ventaja es que usted no tiene que ejecutar todas las lneas del mtodo 3, ni del mtodo 2. Ejemplo:

74 | P g i n a

LCC. Vctor Herrera Silva Salida:

Programacin Orientada a Objetos

Ahora, si agregamos unas cuantas lneas de cdigo de tal manera que hagamos que el mtodo metodo3 lance una excepcin y la cachamos veremos qu pasa.

En la lnea no. 33 se hace referencia a la posicin nmero 2, que representa el elemento nmero 3 del arreglo llamado arreglo, y como podemos ver en la definicin del arreglo en la lnea no. 31, el arreglo tiene tamao 2, es decir que solo contiene 2 elementos. Al momento de hacer referencia a una posicin fuera del tamao del arreglo ocurrir una excepcin indicando que el ndice est fuera de los lmites del arreglo. Para evitar que nuestro programa deje de funcionar, debemos de cachar la excepcin, en las

75 | P g i n a

LCC. Vctor Herrera Silva

Programacin Orientada a Objetos

lneas 32 a 37 se muestra cmo cachar la excepcin. Ahora si ejecutamos el cdigo anterior, nos debe de mostrar la siguiente salida.

Como pueden ver, en la lnea 33 se lanza la excepcin, nuestro cdigo saldr del bloque try para ir al bloque catch dependiendo del tipo de excepcin ocurrida, en este caso la excepcin es ArrayIndexOfBoundException por eso entrar al bloque catch que tengan esa excepcin. En este ejemplo brincar de la lnea 33 a la lnea36 sin ejecutar la lnea 34. De esta manera podemos validar que nuestro programa cumpla con todas las opciones posibles que pueden ocurrir al ejecutarlo. En el ejemplo anterior, seguimos usando el try/catch, ahora veremos cmo propagar la excepcin. De la clase anterior, en el mtodo metodo3, creamos una variable llamada ndice =2, y esa misma la utilizaremos para obtener el valor del arreglo en esa posicin. Validamos si el valor del ndice es mayor o igual al tamao del arreglo, ya que si es as, este debera de lanzar la excepcin de ArrayIndexOfBoundException.

76 | P g i n a

LCC. Vctor Herrera Silva

Programacin Orientada a Objetos

Las lneas agregadas en el mtodo 3 son la lnea 32 a la 35, en estas lneas se valida si la posicin a la que se har referencia es mayor a la permitida por el arreglo, si no es vlida, entonces lanzar la excepcin. El flujo de nuestro cdigo sera de: 1.- Al instancias nuestra clase LanzarExcepcion se manda a llamar el mtodo de iniciarEjecucin. 2.- Se manda a llamar al mtodo metodo1 3.- Se manda a llamar al mtodo metodo2 4.- Se manda a llamar al mtodo metodo3 5.- En la lnea nmero 33 se valida la posicin a accesar, en este ejemplo se cumple la condicin y por medio de throw new NombreExcepcion se lanza la excepcin de manera controlada (porque nosotros la lanzamos). SIEMPRE que usemos el throw new Excepcion, en nuestro mtodo debemos de indicar que se est lanzando esa excepcin. Vean la lnea 29, se indica que dentro de este mtodo metodo3 puede lanzarse la excepcin de ArrayIndexOfBoundException. 6-. En caso de que se lance la excepcin en la lnea 34, nos mover a la lnea donde fue llamado el mtodo metodo3, es decir, nos regresa a la lnea 26, y aqu pueden pasar 3 cosas: a) Si el mtodo metodo2 que es el que hace la llamada al mtodo que tron o lanz la excepcin no tiene un try/catch que encierre la llamada del mtodo metodo3 ,lanzar la excepcin y nuestro programa se detendr. b) Si el mtodo metodo2 tiene un try/catch el cdigo continua con la lnea 27. c) Si el mtodo metodo2 tiene otro throws, entonces nos enviar de regreso a la lnea 18 que es la lnea donde se hace referencia al mtodo metodo2. En este caso como tiene el try catch en que engloba o encierra en su bloque try la llamada del mtodo metodo2, entonces simplemente no ejecuta las dems lneas hasta llegar a ser cachado la excepcin. Salida

Recuerden que toda excepcin lanzada al final tiene que ser cachada en alguna parte del cdigo de lo contrario nuestro programa termina su ejecucin. En el ejemplo anterior, se hizo en la lnea 18, y a partir de esta lnea el programa contina con las siguientes lneas fuera del try/catch. Es por ello que solo se imprime desde que se lanza la excepcin hasta el mtodo metodo1, como si se brincara las ltimas lneas del mtodo 3 y mtodo 2.

77 | P g i n a

LCC. Vctor Herrera Silva

Programacin Orientada a Objetos

Programacin En Java
9.- Constructores
78 | P g i n a

LCC. Vctor Herrera Silva

Programacin Orientada a Objetos

9.1.- Constructores Un constructor en pocas palabras es un bloque de cdigo que se manda a llamar cuando se crea una instancia de una clase. Cada clase tiene al menos un constructor definido y la sintaxis para crear un constructor es la siguiente: Sintaxis para crear un constructor public NombreClase(TipoDato arg1, TipoDato arg2,,TipoDato argN){ //Cdigo a ejecutar al instanciar la clase NombreClase } Nota: Una clase puede tener al menos un constructor, ya que sin este, la clase no podra ser instanciada. En los programas anteriores donde definamos nuestras clases, jams habamos creado un constructor, y esto es porque Java automticamente crea un constructor DEFAULT para que nosotros podamos instancias nuestra clase. El constructor default tiene la siguiente estructura: Constructor default public NombreClase( ){ } Como podemos ver, este constructor no tiene nigun argumento, es por ello que en los ejemplos anteriores si tenamos una clase llamada Persona, para crear el objeto era de la siguiente manera: Persona instancia=new Persona(); En esta lnea, el hecho de utilizar new NombreClase que en este caso es Persona, realmente estamos llamando un constructor de la clase Persona que no tiene ningn argumento. Digamos que el constructor es un tipo de mtodo especial que JAMS tendr una variable de retorno y que nicamente se mandar a llamar al crear una instancia de la misma clase que lo contiene y solo s coinciden los argumentos.

79 | P g i n a

LCC. Vctor Herrera Silva Supngase que se tiene la siguiente clase:

Programacin Orientada a Objetos

En este ejemplo, la clase Hijo tiene 3 constructores: 1.- El constructor de la lnea 14, que no recibe ningn argumento. 2.- El constructor de la lnea 18 que recibe un argumento de tipo String. 3.- El constructor de la lnea 22 que recibe un argumento de tipo String. Al ejecutar nuestro programa por medio del mtodo main, se crean 3 instancias de la misma clase (Hijo). Digamos que esta clase tiene 3 maneras diferentes de instanciar la clase, en la lnea 27, se instancia la clase con el constructor por default. En la lnea 28 se instancia la clase con el constructor que recibe un String como argumento, y en la lnea 29 tambin se crea otra instancia de la clase mandando a llamar al mismo constructor de la lnea 28. Al ejecutar el programa nos imprimir en consola lo siguiente:

Para mandar a llamar al constructor que tiene argumento entero, debemos de agregar en el cdigo anterior : Hijo instancia4=new Hijo(5);//u otro valor que sea tipo int

80 | P g i n a

LCC. Vctor Herrera Silva

Programacin Orientada a Objetos

9.2.- Reglas de uso de Constructores Para manejar constructores existen algunas reglas a seguir: 1.- Un constructor debe de tener el mismo nombre de la clase y no tiene valor de retorno, digamos que es como la firma del mtodo sin un valor de retorno. 2.- Para tener ms de un constructor se pueden seguir las mismas reglas de sobrecarga de mtodos, en este caso sera una sobrecarga de constructores, y para que cada constructor sea vlido, debe de variar el nmero de argumentos del constructor y/o el tipo de dato de cada argumento. 3.- Es invlido poner los siguientes constructores: Public class MiClase{ public MiClase(int entero1){ } public MiClase(int entero2){ } } Ya que entero1 y entero2 son del mismo tipo de dato, y si queremos crear una instancia de la clase MiClase, acaso java sabr si debe de entrar al constructor 1 o 2? Claro que no, por eso es invlido, ya que tiene que variar el tipo y/o nmero de argumentos del constructor. 4.- Otra cosa muy importante, si nosotros agregamos un constructor que NO ES el constructor default (el que no lleva argumentos), entonces Java ya no agregar el constructor default, es decir, que tendramos que agregarlo manualmente. 9.3.- Constructor de la superclase Primero que nada, cuando usamos herencia debe de existir al menos 2 clases, la clase padre y la clase Hija, en Programacin Orientada a Objetos, a la clase Padre se le conoce como Superclase. Para mandar a llamar el constructor de una super clase dentro de la clase hija, se utiliza la palabra reservada super. Para manejar constructores de clases heredadas hay que considerar lo siguiente: 1.- Si mi clase Padre tiene un constructor definido, la clase hija debe de tener el mismo constructor. 2.- Si mi superclase tiene 2 constructores, la clase hija debe de tener los mismos constructores. Para entender ms rpido, una superclase hereda sus mtodos a sus clases hijas, pero con una condicin, que se puedan crear las instancias tal y como lo hace la superclase. Recordemos que tenemos una clase Hija extends Padre, de acuerdo a herencia, la siguiente lnea de cdigo es vlida: ClasePadre instancia=new ClaseHija(); Solo y solo s ClaseHija extends ClasePadre, de acuerdo a lo mencionado, que pasa si ClasePadre tiene un constructor que en la clase ClaseHija no tiene? No se podra instanciar la clase de esta manera, es por ello que deben concordar con los constructores de la clase y superclase.

81 | P g i n a

LCC. Vctor Herrera Silva

Programacin Orientada a Objetos

Programacin En Java
10.- Manejo de Archivos
82 | P g i n a

LCC. Vctor Herrera Silva

Programacin Orientada a Objetos

10.1.- Clase File Esta clase se encarga de crear un archivo, indicar si existe o no, u obtener informacin de un archivo, ojo, no es una clase que nos permita leer ni escribir sobre un archivo. La clase se encuentra en el paquete java.io, se le llama IO por que tiene clases que manejan salida y entrada de datos (inputs and outputs). Algunos de los mtodos ms comunes que podemos manejar son: Mtodo Descripcin canRead Indica si el archivo tiene permiso de lectura canWrite Indica si el archivo tiene permiso de escritura createNewFile Permite crear el archivo de acuerdo a la ruta especificada en su constructor delete Elimina un archivo o carpeta, si lo que se va a eliminar es una carpeta, entonces esta debe de estar vaca, de lo contrario no podr ser eliminada. exists Indica si el archivo existe o no de acuerdo a la ruta especificada en su constructor. getName Obtiene el nombre del archivo getTotalSpace Obtiene el tamao en bytes del archivo, es decir, cunto pesa el archivo. isFile Indica si es un archivo isDirectory Indica si es un directorio o carpeta listFiles Obtiene la lista de archivos si es que se trata de un directorio o carpeta Existen ms mtodos de esta clase, para ms informacin consulte el API de la clase java.io.File de java. 10.2.- Cmo crear una instancia del objeto File La clase File tiene varios constructores, es decir, diferentes maneras de crear un objeto de la clase File. La que nosotros utilizaremos es la siguiente: File nombreObjeto=new File(Ruta del archivo); No olvidemos agregar en nuestra clase el import java.io.File, de lo contrario nos marcar error ya que no encontrar la clase File. Suponga que queremos hacer referencia a un archivo llamado archivoPrueba.txt que se encuentra ubicado en el disco duro C, la ruta sera C:\ para ello debemos de colocar el siguiente cdigo: File miArchivo=new File(C:\\archivoPrueba.txt); Como pueden ver en el constructor se le pasa un string que es la ruta donde se encuentra el archivo, pero tiene \\ en vez de \, y esto es debido a que el \ se utiliza como carcter de escape para salto de lneas(\n,\r), tabuladores, (\t), cambio de pgina (\f), comillas dobles (\) . Entonces para escapara el smbolo de escape, se usa el doble escape (\\), es por ello que se pone C:\\.

83 | P g i n a

LCC. Vctor Herrera Silva

Programacin Orientada a Objetos

10.3.- Creando un archivo Es erroneo pensar que al instanciar el objeto File nos estar creando el archivo, recordemos que solamente instanciamos el objeto File, sin embargo no es seguro de que el archivo exista una vez que se instancia el objeto. Para ello utilizaremos el mtodo exists para validar si existe, en dado caso de que no exista, entonces debemos de mandar a llamar el mtodo createNewFile() para crearlo en la ruta establecida. Ejemplo: File miArchivo=new File(C:\\miNuevoArchivo.txt); if( !miArchivo.exists()){//Si no existe el archivo miArchivo.createNewFile(); }

En la lnea 19, hasta ese punto el archivo no ha sido generado an, posteriormente en la lnea 22 se valida si el archivo existe o no, y si no existe, entonces se ejecuta el bloque de la parte verdadera del if, es decir desde la lnea 22 a la 27. En la lnea 23 ejecutamos el mtodo createNewFile y nos permitir crear el archivo, pero Java nos marcar una Checked Exception, esto es debido a que el lugar donde se intentar crear el archivo puede que no tengamos permisos de escritura, entonces se lanzar la excepcin de IOException. Esta es la razn por la cual el compilador nos pide agregar el bloque try/catch. Nota: Recuerden que una Checked Exception nos indica que una excepcin podr ocurrir y que es obligatorio cacharla, ya que siempre habr un riesgo, por tanto, nuestro cdigo no compilar hasta agregar el bloque try/catch.

84 | P g i n a

LCC. Vctor Herrera Silva

Programacin Orientada a Objetos

10.4.- Escribir en un archivo Para poder escribir en un archivo se requieren 3 clases: - File: para crear el archivo o revisar si existe o no. - FileWriter: permite abrir un canal de escritura entre el archivo y la siguiente clase. - BufferedWriter: clase que utilizaremos para escribir sobre el archivo.

85 | P g i n a

LCC. Vctor Herrera Silva

Programacin Orientada a Objetos

Programacin En Java
11.- Colecciones de Java
86 | P g i n a

LCC. Vctor Herrera Silva Pendiente

Programacin Orientada a Objetos

87 | P g i n a

LCC. Vctor Herrera Silva

Programacin Orientada a Objetos

Programacin En Java
12.- Servlets
88 | P g i n a

LCC. Vctor Herrera Silva

Programacin Orientada a Objetos

12.1.- Servlets Son clases de java que nos permite manipular las peticiones de un cliente modificando la respuesta que se le dar al mismo. Los servlets se utilizan en aplicaciones web, en donde el cliente es el usuario que entra a la aplicacin por medio de algn navegador web, realiza una peticin y el servidor procesa dicha peticin regresndole el resultado. El resultado puede ser una imagen, una pgina solicitada por el usuario, un archivo. A continuacin se muestra el funcionamiento de una aplicacin web muy sencilla, en donde nicamente est involucrado el cliente y el servidor.

Realiza Peticin

Se enva peticin al servidor

Se muestra la respuesta

Se enva respuesta al cliente

El usuario siempre interacta con el servidor, en este caso, por medio de una pgina web. Supongamos que usted entra a una de sus redes sociales favoritas, y para poder acceder a su cuenta tiene que proporcionar su usuario y contrasea en una pgina de inicio de sesin, inicio o login. En este caso, esa pantalla es el medio de interaccin entre el cliente (usted) y el servidor (mquina que contiene la aplicacin web a la que usted quiere entrar a autenticarse). Una vez que usted proporciona sus datos, al presionar Enter, o dar click al botn de Enviar, Login, Iniciar sesin o Entrar, lo que realmente esta pasando es una peticin al servidor, esta peticin representa el permiso de accesar a la siguiente pagina si y solo s sus datos son correctos. El servidor es quien maneja esa lgica para validar la informacin, y ya sea si los datos son correctos o no, el servidor regresar un resultado al cliente. Si los datos son correctos, el servidor nos regresa una pgina de error, de lo contrario nos deja avanzar a la siguiente pgina de nuestra cuenta. En pocas palabras es como funciona una aplicacin web, pero entonces donde participa nuestro servlet? Nuestro servlet participa en el lado del servidor, y nos permitir manipular las peticiones y respuestas hacia los clientes. En una aplicacin web los archivos o pginas que utilizamos para mostrar al usuario son pginas html, jsp, asp,php, entre otras. En este documento, hablaremos sobre jsp. Cabe aclarar que podemos utilizar pginas html, pero nos limitara en algunas ocasiones , ya que estas no permiten el uso de scriptlets de java.

89 | P g i n a

LCC. Vctor Herrera Silva

Programacin Orientada a Objetos

12.2.- Peticiones y Respuestas hacia y desde el servidor Para crear una pgina web es muy comn que utilicemos HTML, es un lenguaje sencillo para disear pginas web que representarn la interfaz grfica del usuario (GUI- Graphics User Interface) para que este pueda interactuar con el servidor. Para realizar una peticin, comnmente se utiliza el componente submit de una pgina web. Este submit por lo general debera de ir contenido dentro de un formulario o forma de html, en la cual se le asigna una accin al momento de ejecutarse el submit de la forma.

La imagen anterior representa a un archivo jsp, lo importante en esta imagen es como se define una forma de html. Este componente pertenece a un componente HTML pero puede ser utilizado dentro de los jsps. La forma o formulario tiene los siguientes atributos: Id: Representa un identificador nico de la forma, digamos que puede ser como un tipo alas o sobre nombre, que no debera de repetirse. Method: tipo de mtodo de cmo se realizar la peticin, puede ser POST o GET. Action: representa la pagina que se solicitar al servidor, es decir, el cliente le hace la peticin al servidor, y la peticin es que le regresa la pgina /pages/logeado.jsp Como se puede apreciar en la lnea 14, se tiene un componente input de tipo submit. Este componente representa visualmente un botn en la pgina web y tiene como funcin hacer la peticin al servidor. De acuerdo a las propiedades de la forma, la nueva peticin del servidor es la pgina /pages/logeado.jsp Entonces simularemos el funcionamiento de esta pgina: 1.- Entramos a la pantalla de login.jsp por medio de nuestro navegador (iExplorer, firefox, chrome, safari, opera, u otros). 2.- En la url introducimos la liga donde esta nuestra pgina de login.jsp o login.html. 3.- Llenamos los datos de la forma (en este caso, solo el usuario y el password). 4.- Nos mostrar un botn que dice Login, y el cual al dar click sobre l, ejecutar o realizar la peticin de lo que pusimos en action de la forma. Nuestro servidor web,(tomcat, jboss,glashfish,u otros) recibir la peticin y buscar la pgina solicitada. 5.- Si existe la pgina solicitada, entonces nos mandar a esa pgina, y si no, nos marcar un error 404 de pgina no encontrada.

90 | P g i n a

LCC. Vctor Herrera Silva

Programacin Orientada a Objetos

Ahora, para que se utiliza el mtodo get y post??? Bsicamente la diferencia consiste al momento de realizar la peticin hacia el servidor, cuando usamos una forma y especificamos que el mtodo para realizar la peticin es de tipo GET significa que los datos que se enviarn al servidor podrn ser vistos desde la url, es decir, que los datos se mostrarn o formaran parte del cuerpo del mensaje. Esto es til solo si no se mandar informacin importante, de lo contrario debemos usar mtodo post, que este ltimo no muestra esta informacin y es ms til utilizarlo cuando se requiere guardar informacin del lado del servidor. Para ms informacin sobre HTML, pueden visitar la pgina de: http://w3schools.com/html/default.asp 12.3.- Configurando Eclipse y tomcat por 1era vez En esta seccin veremos cmo crear una aplicacin web, para ello necesitamos un IDE para desarrollar aplicaciones web, y un servidor de aplicaciones web, en este caso utilizaremos: - IDE Eclipse cualquier distribucin, yo les sugiero que descarguen la ltima versin de la pgina de eclipse. http://www.eclipse.org/downloads/ (Descargar version JEE) - El servidor que utilizaremos ser tomcat versin 6. http://tomcat.apache.org/download-60.cgi Instalando Eclipse: La instalacin del eclipse realmente es descomprimir el archivo zip en una nueva carpeta, dentro de los archivos descomprimidos encontraremos el ejecutable eclipse.exe o eclipse.sh segn su Sistema Operativo. Instalando Tomcat 6: Para descargar el tomcat desde la pgina proporcionada arriba, vean la seccin Binary Distributions y descarguen del Core el archivo .zip. Posterior a eso hay que seguir los siguientes pasos: 1.- Descompriman y coloquen los archivos en una ruta especfica. 2.- Dentro de la carpeta apache-tomcat-6.X.X (reemplacen X por su versin descargada) encontrarn la carpeta bin. Abrimos la carpeta bin y buscamos el archivo startup.bat 3.- Ejecuten el archivo startup.bat y nos debe de aparecer la siguiente ventana:

4.- Una vez que les haya aparecido esta pantalla, entren con su navegador web a la siguiente ruta: http://localhost:8080, o http://127.0.0.1:8080

91 | P g i n a

LCC. Vctor Herrera Silva 5.- Si todo sali bien, les debe de aparecer la siguiente pantalla:

Programacin Orientada a Objetos

Nota: Como vern el servidor tomcat se inicializa y se habilita en el puerto 8080, la ip asignada a este servidor de aplicaciones web es en la ip de nuestra maquina, si queremos accesar desde nuestra misma mquina, utilizamos localhost, y deseamos accesar desde otra mquina, usamos la ip de la mquina donde est el servidor tomcat. (Para ello deben de estar las mquinas en la misma red). 6.- Si no sali esta pgina, entonces estamos en problemas, les recomendara buscar la solucin a su problema en cualquier buscador web. 7.- Una vez que ya vimos que nuestro servidor est encendido y pudimos entrar a la localshost:8080, ahora nos regresamos a la carpeta bin y ejecutamos el archivo shutdown.exe, esto deber de detener nuestro servidor tomcat. 8.- Para terminar, volvamos a accesar desde nuestro navegador web a la misma pagina de localhost:8080. Ahora debera de marcar un error, ya que nuestro servidor no esta disponible o como vulgarmente decimos, el servidor est caido.

92 | P g i n a

LCC. Vctor Herrera Silva

Programacin Orientada a Objetos

Configurando tomcat con Eclipse IDE 1.- Una vez que ya entramos a nuestro Eclipse, seleccionamos del men de Herramientas la opcin de Window> Preferences y nos aparecer la siguiente pantalla:

2.- Buscamos la seccin de Server>Runtime Environments, y podremos ver la siguiente pantalla:

93 | P g i n a

LCC. Vctor Herrera Silva

Programacin Orientada a Objetos

3.- Como es nuestra primera vez, en teora no debera de aparecer ningn servidor registrado, y si si aparece, no importa. Ahora presionamos el botn de agregar (Add) y despus veremos la siguiente pantalla:

4.- En la lista de servidores, buscamos el servidor que descargamos, en este caso el servidor es de Apache, entonces nos posicionamos en la carpeta y buscamos la versin de nuestro tomcat que descargamos, en este caso es la versin 6.0. Presionamos siguiente (Next).

94 | P g i n a

LCC. Vctor Herrera Silva

Programacin Orientada a Objetos

5.- Posteriormente nos aparece la siguiente pantalla, presionamos el botn de Browse o explorar, y despus seleccionamos la ruta donde descomprimimos el tomcat que descargamos. Esta ruta debe de estar en la carpeta raz de tomcat, es decir en la carpeta apache apache-tomcat-6 que es la que contiene la carpeta bin que utilizamos para levantar o arrancar nuestro servidor web.

6.- Seleccionamos esta carpeta, y presionamos finalizar, de esta manera ya podemos utilizar tomcat desde nuestro eclipse sin necesidad de ir a la carpeta bin/startup.exe

95 | P g i n a

LCC. Vctor Herrera Silva

Programacin Orientada a Objetos

12.4.- Primeros pasos con web apps (Aplicaciones web con servlets) Esta ser la primera aplicacin web muy sencilla, algo bsico para entender cmo funcionan las peticiones del cliente y las respuestas del servidor. 1.- En nuestro eclipse, seleccionamos el men File>New >Other y nos aparecer esta ventana:

2.- En el cuadro debajo de Wizards:, tecleamos Dynamic Web Project y seleccionamos este tipo de proyecto.

96 | P g i n a

LCC. Vctor Herrera Silva 3.- Al presionar siguiente, les mostrar la siguiente pantalla:

Programacin Orientada a Objetos

Project name: es el nombre de nuestro proyecto y tambin ser parte de la liga con la cual entraremos a nuestra aplicacin web. Es decir, si le ponemos MyProject, la ruta para accesar a la aplicacin web por medio del buscador sera: http://localhost:8080/MyProject Las dems opciones por el momento son irrelevantes para este ejemplo, as que una vez que le asignamos un nombre a nuestro proyecto, presionamos Finalizar (Finish)

97 | P g i n a

LCC. Vctor Herrera Silva 4.- Veamos cmo queda la estructura de nuestro proyecto:

Programacin Orientada a Objetos

Explicar a detalle las carpetas ms importantes, entre ellas estn las siguientes: -Java Resources / src: esta carpeta debe de contener todos nuestros archivos fuente, o clases java, paquetes y archivos de configuracin. - WebContent: carpeta que debe de contener los archivos de configuracin de nuestra aplicacin web, las pginas web que utilizaremos o que sern accesadas desde nuestra web app (Aplicacin web), asi como las libreras o archivos .jar que se requieran en nuestro proyecto. Dentro de esta carpeta puede contener archivos .html, .jsp, carpeta de imgenes, css, javascript, etc - WebContent/WEB-INF: es una de las carpetas ms importantes de nuestra web app, abajo explicar el motivo. - WebContent/lib: esta carpeta contiene todas las libreras que se agregan a nuestra web app para extender la funcionalidad de nuestro programa o para reutilizar cdigo. Por lo general se incluyen dentro de esta carpeta los archivos con extensin .jar -WebContent/web.xml: este archivo es de vital importancia, ya que a partir de este archivo se carga toda la configuracin de nuestra web app, en este archivo se definen los servlets a utilizar, filtros, propiedades iniciales, manejo de pginas de incio y de error.

Entonces, de acuerdo a lo anterior comentado, hasta este punto tenemos la configuracin inicial de nuestro proyecto. Ahora agreguemos nuestra clase servlet.

98 | P g i n a

LCC. Vctor Herrera Silva

Programacin Orientada a Objetos

5.- En nuestra carpeta src agregamos un nuevo paquete llamado examples. Dentro del nuevo paquete agregado vamos a agregar una nueva clase llamada MiServlet que extienda de nuestra clase HttpServlet.

Como vern en la imagen anterior, se agregaron 2 mtodos, el mtodo doGet y doPost, de acuerdo a lo que vimos en pginas anteriores haba 2 maneras de hacer un submit o mandar informacin de una forma al servidor, cada mtodo atiende las peticiones dependiendo del mtodo elegido en la forma. Ahora la manera de regresar una respuesta desde nuestro servlet puede hacerse de distintas maneras, en este documento utilizaremos 2: - Regresar contenido html - Redireccionar a una pgina html o jsp Para este ejemplo utilizaremos el primero, solo para ver un ejemplo de cmo funciona nuestro servlet. 6.- Agregamos el siguiente fragmento a nuestro cdigo:

99 | P g i n a

LCC. Vctor Herrera Silva

Programacin Orientada a Objetos

En la imagen anterior, utilizamos 2 nuevos objetos: 1.- ServletOutputStream: es la clase que entre muchos otros mtodos contiene uno llamado println, el cual permite mandar una respuesta al cliente, recibe un parmetro en este caso le enviamos un String, donde el string son los tags de HTML. En pocas palabras armamos nuestra pgina html y lo imprimimos en la salida del response. El mtodo flush ES NECESARIO para que se libere la salida y se mande por el response, si este no se pone, jams veremos lo que nos regresa nuestro servlet. 2.- StringBuilder: es una clase para manipulacin de cadenas o Strings, tiene un mtodo llamado append, que es lo mismo si utilizaramos el smbolo += para asignar el valor a la misma variable. La diferencia entre el objeto de la clase String y StringBuilder, es que optimiza la memoria de la mquina virtual de java. 7.- Ahora nos vamos a la estructura del proyecto, en la carpeta de WebContent, creamos un nuevo jsp, damos click derecho sobre WebContent/New/JSP File y le ponemos el nombre de paginaInicio.jsp y presionamos Finish o finalizar.

100 | P g i n a

LCC. Vctor Herrera Silva

Programacin Orientada a Objetos

8.- Nuestro proyecto debera de tener la siguiente estructura:

9.- Abrimos el jsp creado, y ah vamos a introducir el siguiente cdigo:

En este paso, el primer tag <% %> indica que al utilizar el % se estn usando scriptlets, son fragmentos de cdigo de java incrustados en nuestra pgina web (jsp). Este tema lo veremos ms a detalle en el siguiente captulo de Jsps. La parte importante es dentro de los tags de body, este tag representa el contenido de la pgina que vamos a desplegar. Como se puede observar, en la lnea 10 inicia nuestro contenido, es una forma o formulario que contiene 2 controles (el primero es un campo de texto con nombre=usuario, y el segundo es un botn submit que se utiliza para hacer la peticin al servidor al ser presionado).

101 | P g i n a

LCC. Vctor Herrera Silva

Programacin Orientada a Objetos

Ahora el formulario o forma (form) tiene varios atributos entre ellos: 1.- action: representa hacia donde har la peticin, esta peticin puede ser una pgina html, jsp, archivo, un servlet, lo que sea siempre y cuando exista y est disponible en el servidor. En este ejemplo, la accin est solicitando una llamada al servlet que creamos. 2.- method: representa la manera en que se llevar la informacin hacia el servidor, es decir, de qu manera har la peticin, en este ejemplo es GET, lo que significa que ejecutar el mtodo de doGet de nuestro servlet debido a que nuestro action hace referencia a MiPrimerServlet/MiServlet. 10.- Ahora, lo que tenemos que hacer es configurar nuestro servlet, para ello tenemos que ir al archivo WebContent/WEB-INF/web.xml:

La imagen anterior es el archivo tal y como lo genera el eclipse. Les sugiero que no modifiquen las primeras 2 lneas a menos que sepan que es lo que estn haciendo. Ahora, en la lnea 5 el tag de welcome-file-list se utiliza para indicar cuales sern las pginas de bienvenida de nuestra aplicacin al momento de accesar desde el navegador en la ruta de: http://localhost:8080/MiPrimerServlet Entonces cuando pongamos esta liga en nuestro navegador, el archivo web.xml buscar en la lista de bienvenida, cual es el archivo que est disponible para mostrar, entonces, el primero que encuentre es el que se mostrar. En este ejemplo agregaremos nuestro jsp que acabamos de crear.

La lnea agregada es la lnea #9

102 | P g i n a

LCC. Vctor Herrera Silva

Programacin Orientada a Objetos

11.- Tenemos que ligar nuestro servlet con nuestra aplicacin web, para ello dentro del web.xml agregaremos lo siguiente:

Las lneas agregadas son a partir de la lnea #12 a la 22, el tag <servlet> se utiliza para definir nuestro servlet dentro de nuestra aplicacin, pueden definirse ms de un servlet. A continuacin se explica cada tag de servlet. - description: Se utiliza para dar una breve descripcin del servlet, al igual que display-name es meramente informativo y no afecta si no se agrega dentro de <servlet> - servlet-name: es el nombre que se utilizar para identificarlo de los dems servlets que lleguemos a agregar en nuestra aplicacin web. - servlet-class: indica la clase java que representa nuestro Servlet, y que obviamente esta clase debe de extender de la clase HttpServlet. Hay que tener mucho cuidado con esta propiedad, ya que la clase debe de existir en el paquete que indicamos, en este ejemplo, nuestra clase se llama MiServlet y se encuentra en el paquete servlet de nuestra carpeta src. Ahora explicar el tag de <servlet-mapping> - servlet-name: es el identificador de nuestro servlet, y debe de ser el mismo que pusimos en los tags de servlet. - url-pattern: es el patrn a seguir para mandar a llamar nuestro servlet, esto es, la forma en que debemos de ponerle en la url de nuestro navegador para que sea llamado nuestro servlet. En el ejemplo, se har la llamada cuando pongamos MiServlet, ej: http://localhost:8080/MiPrimerServlet/MiServlet Es decir, si en url-pattern ponemos /llamandoServlet, entonces la forma de mandarlo a llamar en nuestro navegador sera: http://localhost:8080/MiPrimerServlet/llamandoServlet

103 | P g i n a

LCC. Vctor Herrera Silva

Programacin Orientada a Objetos

12.- Una vez que ya se configur nuestro servlet ahora podemos ejecutar nuestra aplicacin web, dando click derecho sobre nuestro proyecto y buscamos la opcin de Run o Ejecutar: MiPrimerServlet>Botn Derecho>Run>Run on Server Nos aparecer la pregunta de sobre en que servidor deseamos ejecutar, y elegimos la versin de tomcat que ya habamos configurado y luego seleccionamos finalizar o Finish. Posteriormente, nuestr eclipse abrir una pequea ventana de consola, en la cual mostrar muchos mensajes, estos mensajes son cuando se est levantando nuestro servidor tomcat. Al aparecer el mensaje de Server startup in XXXX ms, indica que ya est disponible nuestra aplicacin. Ahora abrimos nuestro navegador web e introducimos la siguiente liga: http://localhost:8080/MiPrimerServlet/

Hasta aqu todo bien, nicamente mostramos la pantalla del welcome-file-list que encontr, en este caso es paginaInicio.jsp.

104 | P g i n a

LCC. Vctor Herrera Silva

Programacin Orientada a Objetos

13.- Haremos la prueba para ver si todo funciona como debe de ser, introduzcamos en el campo un nombre y presionemos el botn de Aceptar.

14.- Debera de desplegar la siguiente pgina:

105 | P g i n a

Вам также может понравиться