Lenguaje de Programación II

174
UNIVERSIDAD PRIVADA TELESUP Las f

description

Lenguaje de programación II

Transcript of Lenguaje de Programación II

Page 1: Lenguaje de Programación II

UNIVERSIDAD PRIVADA TELESUP

1

Las f

Page 2: Lenguaje de Programación II

UNIVERSIDAD PRIVADA TELESUP

2

Prefacio:

ste libro autoinstructivo tiene la finalidad de ser un

material educativo que facilitará el aprendizaje

interactivo del alumno de la asignatura de Lenguaje de

Programación II, mediante este recurso se pretende

que el alumno sea el protagonista de su propio

aprendizaje y capacitarlo en la metodología de la programación orientada a

objetos y en el desarrollo de aplicaciones visuales con orientación a eventos

y con conexión a base de datos bajo la plataforma Java, con la cual podrá

elaborar aplicaciones informáticas que faciliten la toma de decisiones en una

organización.

Comprende cuatro Unidades:

Unidad I : Fundamentos de la Programación

Orientada a Objetos

Unidad II : Conceptos Avanzados de la

Programación Orientada a Objetos

Unidad III : Fundamentos del Lenguaje

Estructurado de Consultas SQL

Unidad IV : Desarrollo de Aplicaciones de

Escritorio con JDBC.

E

Page 3: Lenguaje de Programación II

UNIVERSIDAD PRIVADA TELESUP

3

Estructura de los Contenidos

La competencia que el estudiante debe lograr al

final de la asignatura es:

“Construir una aplicación informática usando

la programación orientada a objetos con

conexión a base de datos con el propósito de

facilitar la toma de decisiones de la Gestión

Empresarial y Comercial”.

Fundamentos de la Programación

Orientada a Objetos

Conceptos avanzados de la Programación Orientada a

Objetos

Fundamentos del Lenguaje

Estructurado de Consultas SQL

Desarrollo de Aplicaciones de Escritorio con

JDBC

Variables y

métodos

estáticos

Modelamiento de

clases

Métodos de la

clase Math y la

Clase String

Wrapper y Casting

La clase Date y

Gregorian

Calendar

Herencia de

clases y niveles

de acceso

Polimorfismo:

interfaces y

métodos

abstractos

Instalación del

servidor de datos

MySQL y

comandos DML y

DDL

Uso del comando

Select

Uso de comandos

DDL

Introducción a la

tecnología JDBC

Estableciendo

una conexión de

datos

Aplicando POO

para la gestión

de operaciones

ccn una base de

datos

La interface

Prepared

Statement

Uso del comando

Select usando varias tablas

Conceptos básicos de la programación

orientada a objetos

Page 4: Lenguaje de Programación II

UNIVERSIDAD PRIVADA TELESUP

4

Índice del Contenido

I. PREFACIO 02

II. DESARROLLO DE LOS CONTENIDOS 04

UNIDAD DE APRENDIZAJE 1: Fundamentos de la Programación Orientada a Objetos 05 - 54

1. Introducción a. Presentación y contextualización b. Competencias c. Capacidades d. Actitudes e. Presentación de los temas

2. Desarrollo de los temas a. Tema 01: Conceptos Básicos de la Programación Orientada a Objetos b. Tema 02: Variables y Métodos Estáticos c. Tema 03:Modelamiento de Clases d. Tema 04:Metodos de La Clase Math y la Clase String

3. Lecturas Recomendadas 4. Actividades y ejercicios 5. Autoevaluación 6. Resumen

06 06 06 06 06 06

07 - 48 07 21 28 35 49 49 51 54

UNIDAD DE APRENDIZAJE 2: Conceptos Avanzados de la Programación Orientado a Objetos 55 - 93

1. Introducción a. Presentación y contextualización b. Competencias c. Capacidades d. Actitudes e. Presentación de los temas

2. Desarrollo de los temas a. Tema 01: Wrapper y Casting b. Tema 02: La Clase Date y Gregorian Calendar c. Tema 03: Herencia de Clases y Niveles de Acceso d. Tema 04: Polimorfismo: Interfaces y Métodos Abstractos

3. Lecturas recomendadas 4. Actividades y ejercicios 5. Autoevaluación 6. Resumen

56 56 56 56 56 56

57 - 87 57 65 72 81 88 88 90 93

UNIDAD DE APRENDIZAJE 3: Fundamentos del Lenguaje Estructurado de Consultas SQL 94 - 133

1. Introducción a. Presentación y contextualización b. Competencias c. Capacidades d. Actitudes e. Presentación de los temas

2. Desarrollo de los temas a. Tema 01: Instalación del Servidor de Datos MySQL y Comandos DML y DDL. b. Tema 02:Uso del Comando SELECT c. Tema 03:Uso del Comando SELECT con varias tablas d. Tema 04: Uso de Comandos DDL

3. Lecturas recomendadas 4. Actividades y ejercicios 5. Autoevaluación 6. Resumen

95 95 95 95 95 95

96 - 127 96

111 115 122 128 128 130 133

UNIDAD DE APRENDIZAJE 4: Desarrollo de Aplicaciones de Escritorio con JDBC 134 - 170

1. Introducción a. Presentación y contextualización b. Competencias c. Capacidades d. Actitudes e. Persentación de los temas

2. Desarrollo de los temas a. Tema 01: Introducción a la Tecnologia JDBC b. Tema 02: Estableciendo una Conexión de Datos c. Tema 03:Aplicando POO para la Gestión de Operaciones con una Base de Datos d. Tema 04:La Interface PreparedStatement

3. Lecturas recomendadas 4. Actividades y ejercicios 5. Autoevaluación 6. Resumen

135 135 135 135 135 135

136 - 165 136 148 153 160 166 166 167 170

III. GLOSARIO 171

IV. FUENTES DE INFORMACIÓN 173

V. SOLUCIONARIO 174

Page 5: Lenguaje de Programación II

UNIVERSIDAD PRIVADA TELESUP

5

Page 6: Lenguaje de Programación II

UNIVERSIDAD PRIVADA TELESUP

6

Introducción

a) Presentación y contextualización

En esta Unidad trataremos los temas de fundamento que te permitan

comprender la filosofía e importancia de la programación orientada a objetos

como un estándar actual en el desarrollo de aplicaciones informáticas.

Adicionalmente, también aprenderás a expresar tu percepción de la realidad en

objetos, para luego a partir de esta percepción crear tus primeras clases e

implementarlas con métodos y propiedades.

Finalmente, en esta Unidad aprenderás dos de las clases importantes de Java:

La clase String y la Clase Math.

b) Competencia

Analiza, y plantea las funcionalidades y propiedades de un objeto con

relación a su clase.

c) Capacidades

1. Analiza una realidad, se abstrae y lo formula en un modelo de objetos.

2. Diferencia las variables y métodos estáticos de las propiedades y métodos

de instancia (miembros) y los aplica al desarrollar una aplicación. 3. Diferencia la capa de la Lógica de Presentación y Lógica de Negocios y los

utiliza al desarrollar aplicaciones en dos capas.

4. Distingue la utilidad de los métodos estáticos de la clase Math y String

d) Actitudes

Desarrolla una actitud analítica y sistémica, a partir de la cual expone

diversos planteamientos en relación con la actividad asignada.

Actúa con responsabilidad personal, al cumplir con los cronogramas

establecidos y la metodología del plan de estudio virtual.

Disposición emprendedora

e) Presentación de ideas básicas y contenido esenciales de la Unidad.

La Unidad de Aprendizaje 1: FUNDAMENTOS DE LA PROGRAMACION ORIENTADA A OBJETOS comprende el desarrollo de los siguientes temas:

Tema 01: Conceptos Básicos de la Programación Orientada a

Objetos Tema 02: Variables y Métodos Estáticos Tema 03: Modelamiento de Clases Tema 04: La Clase Math y La Clase String

Page 7: Lenguaje de Programación II

UNIVERSIDAD PRIVADA TELESUP

7

TEMA 1

Analiza una realidad, se abstrae y lo formula en un modelo de objetos.

Competencia:

Programación de la Básicos

Conceptos

Orientada a Objetos

Page 8: Lenguaje de Programación II

UNIVERSIDAD PRIVADA TELESUP

8

Desarrollo de los Temas

Tema 01: Conceptos Básicos de la Programación Orientada a Objetos

1. Antecendentes de la Programación Orientada a Objetos

La Programación Orientada a Objetos (POO) es una forma

especial de programar, más cercana a como expresaríamos las

cosas en la vida real, que otros tipos de programación.

Durante años, los programadores se han dedicado a

construir aplicaciones muy parecidas que resolvían una y

otra vez los mismos problemas. Para conseguir que los

esfuerzos de los programadores puedan ser reutilizados por

otras personas se creó la POO, la cual usa una serie de

normas y estándares para cumplir este objetivo.

POO no es difícil, pero es una manera especial de pensar, a veces subjetiva de

quien la programa, de manera que la forma de hacer las cosas puede ser diferente

entre uno u otro programador, aunque podamos hacer los programas de formas

distintas, no todas ellas son correctas, lo difícil no es programar orientado a objetos

sino programar bien. Programar bien es importante, porque así podemos

aprovechar de todas las ventajas de la POO.

Programación Estructurada Vs Programación Orientada a Objetos (POO):

El desarrollo de la POO empieza a destacar durante la década de

los 80 tomando en cuenta la programación estructurada, a la

que engloba y dota de nuevos elementos para el análisis y

desarrollo de software.

La POO permite a los programadores desarrollar software,

de forma que esté organizado en la misma manera como el

problema que se trata de modelizar (analizar).

Page 9: Lenguaje de Programación II

UNIVERSIDAD PRIVADA TELESUP

9

La programación estructurada es una programación de diseño ARRIBA – ABAJO

(Top-Down), donde las instrucciones del programa se van ejecutando una detrás de

otra secuencialmente desde un inicio hasta un fin. En esta forma de diseño se

descomponen los requerimientos del programa paso a paso (secuencialmente),

hasta llegar a un nivel que permite expresarlos mediante procedimientos y

funciones. (Ejemplo: un Diagrama de Flujo, Pseudocódigo)

En cambio, la POO estructura los datos en objetos que pueden almacenar,

manipular y combinar información de modo analítico, lógico y funcional

En la actualidad, la POO es el estándar de programación utilizado por la gran

mayoría de programadores y las distintas herramientas de análisis y diseño de

sistemas utilizado por los profesionales en informática. Por otro lado, los lenguajes

de programación de la actualidad son orientados a objetos (entre los que podemos

citar están: Java y Microsoft Visual Studio .Net)

Ventajas de la Programación Orientada a Objetos:

a) Uniformidad. Ya que la representación de los objetos que lleva, implica tanto

el análisis como el diseño y la codificación de los mismos. Esto quiere decir

que nos permite una mejor integración entre las diferentes etapas del

desarrollo de un proyecto informático.

b) Flexibilidad. Al tener relacionados los procedimientos

que manipulan los datos con los datos a tratar,

cualquier cambio que se realice sobre ellos

quedará reflejado automáticamente en

cualquier lugar donde estos datos aparezcan.

c) Reusabilidad. De esta forma, el desarrollo de un

programa puede llegar a ser una simple

combinación de objetos ya definidos donde estos

están relacionados de una manera particular.

Con la POO tenemos que aprender a pensar las cosas de

una manera distinta, para escribir nuestros programas en

términos de objetos, propiedades, métodos.

Page 10: Lenguaje de Programación II

UNIVERSIDAD PRIVADA TELESUP

10

2. Conceptos Básicos de la Programacion Orientada a Objetos:

a) CLASE

La clase es una plantilla o patrón a partir de la cual se crean muchos otros objetos

similares, también se podría definir a una clase como la agrupación de objetos que

poseen características comunes.

Ejemplos:

Si usted tuviera que dibujar 30 mapas del Perú ¿Cómo los podría hacer de un

modo muy rápido? Tendría que conseguir un molde o plantilla y a partir de éste

podría crear los 30 mapas de un modo fácil y rápido. En este ejemplo el Molde

o Patrón sería la Clase y cada uno de los mapas reproducidos vendrían ser los

objetos instanciados.

¿Qué clases puedes distinguir dentro de tu aula? En el aula existe la clase

Alumnos, cada alumno vendría ser un objeto que se origina de esta clase.

Otras clases podrían ser: carpetas, útiles, etc.

Como podemos darnos cuenta, los conceptos de la

POO están en la vida diaria, y son estos

conceptos los que se aplican al momento de

programar aplicaciones informáticas.

b) PROPIEDADES DE LA CLASE

Las propiedades o atributos son las características descriptivas de una clase. Cuando

definimos una propiedad especificamos su nombre y su tipo de dato.

Ejemplos:

Propiedades de la clase alumnos

Apellidos (Tipo de dato String)

Nombres (Tipo de dato String)

Edad (Tipo de dato int)

Talla (Tipo de dato double)

a) Clase

b) Propiedades de la clase

Page 11: Lenguaje de Programación II

UNIVERSIDAD PRIVADA TELESUP

11

c) MÉTODOS DE LA CLASE

Son las funcionalidades, acciones o habilidades de la clase. Los métodos son

funciones que están asociadas a un objeto. Los métodos responden a la pregunta:

¿Qué es lo que es capaz de hacer la clase?

Los nombres de los métodos generalmente están asociados a una acción o verbos. Al

final del nombre de los métodos siempre se utilizarán paréntesis dentro de los cuales

muchas veces es necesario enviar algunos datos, para que puedan realizarse los

procesos.

Ejemplos:

La clase alumnos contiene los siguientes métodos:

estudiar()

hablar()

decirSuEdad()

La clase plumones contiene los siguientes métodos:

pintar()

escribir()

La clase calculadora contiene los siguientes métodos:

Sumar(4,5)

Restar(3,2)

Multiplicar(4,3)

Multiplicar(4,2)

Nota:

Algunos métodos reciben entre los paréntesis: datos, los cuales sirven al

método para realizar su tarea. Estos datos son conocidos como argumentos

del método.

Algunos métodos retornan un dato como resultado de la acción, por ejemplo el

método sumar (4,5) de la clase calculadora, luego de realizar su acción

devolverá un dato de respuesta el cual es el resultado de la suma: 9.

c) Métodos de la clase

Page 12: Lenguaje de Programación II

UNIVERSIDAD PRIVADA TELESUP

12

Todo objeto instanciado hereda automáticamente las propiedades y

métodos de su clase base

d) OBJETO INSTANCIADO

Los objetos instanciados son ejemplares resultantes de una clase. Cuando creamos

un ejemplar tenemos que especificar la clase a partir de la cual se creará. Esta acción

de crear un objeto a partir de una clase se llama instanciar (que viene de una mala

traducción de la palabra instance que en inglés significa ejemplar). Por ejemplo, un

objeto instanciado de la clase fracción es por ejemplo 3/5. El concepto o definición de

fracción sería la clase, pero cuando ya estamos hablando de una fracción en concreto

4/7, 8/1000 o cualquier otra, la llamamos objeto instanciado.

e) ESTADO EN UN OBJETO

Cuando tenemos un objeto sus propiedades toman valores. Por ejemplo, cuando

tenemos una fracción, la propiedad numerador tomará un valor en concreto, como por

ejemplo 1 y la propiedad denominador puede tomar el valor de 3. Estos valores que

se llaman estados de un objeto.

Para acceder a un estado de un objeto, para ver su valor o cambiarlo se utiliza el

operador punto. Ejemplo:

f1.numerador = 2

f1.denominador=5

El objeto instanciado es f1, luego colocamos el operador punto y por último el nombre

de la propiedad a la que deseamos acceder. En el ejemplo anterior, estamos

cambiando el valor del estado de la propiedad numerador del objeto f1 a 2 con una

simple asignación, y el valor de la propiedad denominador a 5.

d) Objeto Instaciado

e) Estado en un objeto

Page 13: Lenguaje de Programación II

UNIVERSIDAD PRIVADA TELESUP

13

EJEMPLOS PRÁCTICOS

A continuación, mostraremos algunos ejemplos de

clases con sus respectivas propiedades y métodos.

Clase Reloj

Propiedades: marca, modelo, precio, tipo

Métodos: mostrarLaHora(), mostrarLaFecha(), fijarAlarma(), iniciarCronometro()

Clase Triángulo

Propiedades: color, tipo de borde, tipo de triángulo

Métodos: calcularArea(), calcularSemiPerímetro()

Clase BoletadeNota

Propiedades: n° de boleta, fecha de emision, apellidos, nombres

Métodos: calcularPromedioporAsignatura(), calcularPromedioPonderado()

1. CREACIÓN DE UNA CLASE

Crearemos como ejemplo: la clase Calculdora

Cada IDE tiene sus propios pasos para crear una clase y esto lo aprendimos

durante el pasado semestre. Como ejemplo, crearemos la clase Calculadora

Clic Derecho

public class Calculadora {

public static void main(String args[]) { } } //Fin de la clase

Page 14: Lenguaje de Programación II

UNIVERSIDAD PRIVADA TELESUP

14

2. CREACIÓN DE LAS PROPIEDADES DE LA CLASE

Se deberán crear a nivel de la clase (debajo de public class) y cada una

corresponderá a un tipo de dato.

Ejemplo: La clase con sus propiedades

3. CREACIÓN DE LOS MÉTODOS DE LA CLASE

Se deberán crear dentro de la clase, cada método devuelve un tipo de dato como

resultado final (el cual puede ser int, double, String, boolean, etc), de no ser así el

tipo de dato devuelto es void. Los métodos usan paréntesis para recibir algunos

datos (argumentos) desde el exterior.

Ejemplo:

public class Calculadora {

// DEFINICION DE PROPIEDADES

public String marca;

public double precio;

public String modelo;

public static void main(String args[])

{

}

} //Fin de la clase

public double sumar(double a, double b)

{ double r;

r=a+b;

return r;

}

Tipo de dato devuelto

por el metido como

respuesta Argumentos de Entrada

Nombre del método

Page 15: Lenguaje de Programación II

UNIVERSIDAD PRIVADA TELESUP

15

Ejemplo:

Ahora veamos integralmetne todo el código fuente de la clase Calculadora con sus

propiedades y métodos:

public class Calculadora { // DEFINICION DE PROPIEDADES public String marca; public double precio; public String modelo; public double sumar(double a, double b) { double r; r=a+b; return r; //Retorna el resultado } public double restar(double a, double b) { double r; r=a-b; return r; } public double multiplicar(double a, double b) { double r; r=a*b; return r; } public double dividir(double a, double b) {double r; if(b!=0) { r=a/b; } else {System.out.println("Resultado no determinado en N"); } return r; } public double dimetuprecio() { return precio; } public static void main(String args[]) { } } //Fin de la clase

Page 16: Lenguaje de Programación II

UNIVERSIDAD PRIVADA TELESUP

16

4. CREACIÓN DE LOS MÉTODOS CONSTRUCTORES

Un método constructor es un método especial dentro de la clase, que lleva el

nombre de la misma clase. Pueden existir uno o varios métodos constructores.

Este método se ejecuta automáticamente cada vez que nosotros instanciemos un

objeto de la clase, por lo que puede ser utilizado para el instanciamiento de

objetos y al mismo tiempo introducir estados (datos) a todas o a algunas las

propiedades del objeto instanciado.

Ejemplo: La clase Calculadora con 3 métodos constructores

Nota: Si una clase posee varios métodos constructores, significa que tiene varias formas de instanciar un objeto.

public class Calculadora {

// DEFINICIÓN DE PROPIEDADES

public String marca;

public double precio;

public String modelo;

public double sumar(double a, double b)

{ double r;

r=a+b;

return r; //Retorna el resultado

}

public double restar(double a, double b)

{ double r;

r=a-b;

return r;

}

public double multiplicar(double a, double b)

{ double r;

r=a*b;

return r;

}

public double dividir(double a, double b)

{ double r;

if(b!=0)

Page 17: Lenguaje de Programación II

UNIVERSIDAD PRIVADA TELESUP

17

{ r=a/b; }

else

{ System.out.println("Resultado no determinado en N");

}

return r;

}

public double dimetuprecio()

{ return precio; }

// EL MÉTODO CONSTRUCTOR 1

// Permite el ingreso de los estados solo a 2 de

// las propiedades del objeto instanciado

public Calculadora(String ma, double p) {

marca=ma;

precio=p;

}

// EL MÉTODO CONSTRUCTOR 2 - Permite el ingreso de los

// estados solo a 3 de las propiedades del objeto

// instanciado

public Calculadora(String ma, double p, String mo) {

marca=ma;

precio=p;

modelo=mo;

}

// EL MÉTODO CONSTRUCTOR 3 - Permite solo el

// instanciamiento

public Calculadora() {

}

public static void main(String args[])

{

}

} //Fin de la clase

Page 18: Lenguaje de Programación II

UNIVERSIDAD PRIVADA TELESUP

18

5. EL MÉTODO ESTÁTICO MAIN

Este método es el “Método principal” de la clase, es aquel que es invocado cuando

ejecutamos la clase, si una clase no cuenta con el método main, es imposible

ejecutarla.

6. INSTANCIAMIENTO DE LA CLASE

Tal como vimos durante la semana anterior, instanciar, significar, crear un objeto a

partir de una clase base, recordemos también que al instanciar un objeto, este

hereda automáticamente propiedades y métodos de su clase.

Ejemplo:

Veamos con se instancia la clase Calculadora desde el método main de la misma

clase.

public class Calculadora { // DEFINICION DE PROPIEDADES public String marca; public double precio; public String modelo; public double sumar(double a, double b) { double r; r=a+b; return r; //Retorna el resultado } public double restar(double a, double b) { double r; r=a-b; return r; } public double multiplicar(double a, double b) { double r; r=a*b; return r; } public double dividir(double a, double b) {double r=0; if(b!=0) { r=a/b; } else {System.out.println("Resultado no determinado en N"); } return r; } public double dimetuprecio() { return precio; }

Page 19: Lenguaje de Programación II

UNIVERSIDAD PRIVADA TELESUP

19

// EL MÉTODO CONSTRUCTOR 1 // Permite el ingreso de los estados solo a 2 de // las propiedades del objeto instanciado public Calculadora(String ma,double p) { marca=ma; precio=p; } // EL MÉTODO CONSTRUCTOR 2 - Permite el ingreso de los // estados solo a 3 de las propiedades del objeto // instanciado public Calculadora(String ma,double p, String mo) { marca=ma; precio=p; modelo=mo; } // EL MÉTODO CONSTRUCTOR 3 - Permite solo el // instanciamiento public Calculadora() { } public static void main(String args[]) { //Creación de los objetos instanciados Calculadora c1=new Calculadora("CASIO",25.45); //Usa el constructor 1 Calculadora c2=new Calculadora("CITIZEN",32.99,"RS23"); //Usa el constructor 2 Calculadora c3=new Calculadora(); //Usa el constructor 3

//Visualizando el contenido de la propiedad marca del primer objeto instanciado System.out.println("La marca de la calculadora 1 es : "+ c1.marca);

//Invocando a los métodos del 1er. obj. instanciado System.out.println("La calculadora 1 suma 12+34 : "+ c1.sumar(12,34)); System.out.println("La calculadora 1 resta 12-34 : "+ c1.restar(12,34)); System.out.println("La calculadora 1 multiplica 12*34 : "+ c1.multiplicar(12,34)); System.out.println("La calculadora 1 divide 12/34 : "+ c1.dividir(12,34)); //Usando la propiedades y métodos del 2do. obj. Instanciado System.out.println("Accedemos al precio de la calculadora 2 : "+ c2.precio); System.out.println("La calculadora 2 suma 2+-5 : "+ c2.sumar(2,-5)); System.out.println("La calculadora 2 nos dice su precio : "+ c2.dimetuprecio()); //Usando la propiedades y métodos del 3er. obj. Instanciado c3.marca="Panasonic"; c3.precio=29.99; c3.modelo="RX123"; System.out.println("Accedemos al precio de la calculadora 3 : "+ c3.precio); System.out.println("La calculadora 3 suma 10+32 : "+ c3.sumar(10,32)); System.out.println("La calculadora 3 nos dice su precio : "+ c3.dimetuprecio()); } } //Fin de la clase

Page 20: Lenguaje de Programación II

UNIVERSIDAD PRIVADA TELESUP

20

7. INVOCACIÓN DE UNA CLASE DESDE OTROS PAQUETES

¿Qué es una Paquete?

Es una carpeta de java, dentro de la cual podemos almacenar muchas clases, los

paquetes en Java sirven para organizar nuestras clases, cada IDE tiene una forma

distinta de crear paquetes.

Cuando una clase es creada dentro de un paquete, debe llevar en la primera línea:

el nombre del paquete.

package Ejemplo1; //Nombre del paquete public class Calculadora { . . }

Clase Anexo, creada en otro paquete

package Ejemplo2; //Nombre del paquete donde se encuentra esta clase import Ejemplo1.Calculadora; //Especificamos el paquete y la clase que se desea utilizar aquí

public class Anexo { public static void main(String args[]) { //Instanciamos un objeto de la clase Calculadora Calculadora c5=new Calculadora("SANSUNG",25.45); //Usa el constructor 1 System.out.println("Multiplicando en la Calculadora 5: "+ c5.multiplicar(4,9)); } }

Aquí va el contenido de la

clase Calculadora

Paquete 2

Paquete 1

Proyecto Aquí tenemos dos paquetes,

dentro de cada paquete

tenemos una clase.

Page 21: Lenguaje de Programación II

UNIVERSIDAD PRIVADA TELESUP

21

TEMA 2

Diferencia las variables y métodos estáticos de las propiedades y métodos de instancia (miembros) y los ejecuta al desarrollar una aplicación.

Competencia:

Estáticos

Métodos y Variables

Page 22: Lenguaje de Programación II

UNIVERSIDAD PRIVADA TELESUP

22

Tema 02: Variables y Métodos Estáticos

1. CREACIÓN DE VARIABLES ESTÁTICAS

Variables Estáticas:

Son aquellas variables que se declaran a nivel de la clase, se diferencian de las

propiedades, porque para acceder a ellas no se requiere de una instancia, se

puede acceder a estas variables directamente a través del nombre de la clase. Las

variables estáticas conservan un mismo valor para toda la clase y no cuentan con

estados (datos) diferentes en cada objeto instanciado.

Nota:

En otros lenguajes de programación a este tipo de variables se le denomina

Variables Globales.

Ejemplo del uso de variables estáticas en la clase Calculadora:

En este ejemplo se están creando dos variables estáticas:

Total: Variable utilizada para acumular el precio de cada uno de los objetos instanciados

Cuenta: Variable utilizada para contar la cantidad de objetos instanciados

Se usan las variables estáticas en cada uno de los métodos constructores, para

que de esta forma se acumule o cuente, cada vez que se produce una instancia.

Page 23: Lenguaje de Programación II

UNIVERSIDAD PRIVADA TELESUP

23

package Ejemplo1; //Nombre del paquete public class Calculadora { // DEFINICION DE PROPIEDADES public String marca; public double precio; public String modelo; //DECLARACION DE VARIABLES ESTATICAS: ámbito en toda la clase // comparten el mismo valor para todos los obj. Instanciados public static double total; public static double cuenta; public double sumar(double a, double b) { double r; r=a+b; return r; //Retorna el resultado } public double restar(double a, double b) { double r; r=a-b; return r; } public double multiplicar(double a, double b) { double r; r=a*b; return r; } public double dividir(double a, double b) {double r=0; if(b!=0) { r=a/b; } else {System.out.println("Resultado no determinado en N"); } return r; } public double dimetuprecio() { return precio; } // EL METODO CONSTRUCTOR 1 // Permite el ingreso de los estados solo a 2 de // las propiedades del objeto instanciado public Calculadora(String ma,double p) { marca=ma; precio=p; total+=precio; // Es un acumulador, es igual que decir total=precio+total cuenta++; // Es un contador, es igual que decir cuenta=cuenta+1 } // EL METODO CONSTRUCTOR 2 - Permite el ingreso de los // estados solo a 3 de las propiedades del objeto // instanciado public Calculadora(String ma,double p, String mo) { marca=ma; precio=p;

Variables Estáticas

Usando Variables Estáticas

Page 24: Lenguaje de Programación II

UNIVERSIDAD PRIVADA TELESUP

24

modelo=mo; total+=precio; // Es un acumulador, es igual que decir total=precio+total cuenta++; // Es un contador, es igual que decir cuenta=cuenta+1 } // EL METODO CONSTRUCTOR 3 - Permite solo el // instanciamiento public Calculadora() { total+=precio; // Es un acumulador, es igual que decir total=precio+total cuenta++; // Es un contador, es igual que decir cuenta=cuenta+1 } public static void main(String args[]) { //Creación de los objetos instanciados Calculadora c1=new Calculadora("CASIO",25.45); //Usa el constructor 1 Calculadora c2=new Calculadora("CITIZEN",32.99,"RS23"); //Usa el constructor 2 Calculadora c3=new Calculadora(); //Usa el constructor 3 //Usando la propiedades y métodos del 1er. obj. instanciado System.out.println("La marca de la calculadora 1 es : "+ c1.marca); System.out.println("La calculadora 1 suma 12+34 : "+ c1.sumar(12,34)); System.out.println("La calculadora 1 resta 12-34 : "+ c1.restar(12,34)); System.out.println("La calculadora 1 multiplica 12*34 : "+ c1.multiplicar(12,34)); System.out.println("La calculadora 1 divide 12/34 : "+ c1.dividir(12,34)); //Usando la propiedades y métodos del 2do. obj. instanciado System.out.println("Accedemos al precio de la calculadora 2 : "+ c2.precio); System.out.println("La calculadora 2 suma 2+-5 : "+ c2.sumar(2,-5)); System.out.println("La calculadora 2 nos dice su precio : "+ c2.dimetuprecio()); //Usando la propiedades y métodos del 3er. obj. instanciado c3.marca="Panasonic"; c3.precio=29.99; c3.modelo="RX123"; System.out.println("Accedemos al precio de la calculadora 3 : "+ c3.precio); System.out.println("La calculadora 3 suma 10+32 : "+ c3.sumar(10,32)); System.out.println("La calculadora 3 nos dice su precio : "+ c3.dimetuprecio());

//Accediendo a las variables estáticas de la clase //Mostrar valores de las variables estáticas System.out.println("Cantidad de objetos instanciados: "+ Calculadora.cuenta); System.out.println("Total de los precios de los objetos instanciados: "+ Calculadora.total); } } //Fin de la clase

Usando Variables Estáticas

Usando Variables Estáticas

Page 25: Lenguaje de Programación II

UNIVERSIDAD PRIVADA TELESUP

25

2. CREACIÓN DE MÉTODOS ESTÁTICOS

Son aquellos métodos que pertenecen directamente a la clase y que para acceder

a ellos no se requiere de una instancia, se puede acceder a estos métodos

directamente a través del nombre de la clase.

Son acciones de la clase y no de un objeto en particular.

Ejemplo del uso de métodos estáticos en la clase Calculadora:

En este ejemplo se están creando dos métodos estáticos:

Totalizar() : Método utilizado para devolver la cantidad acumulada de todos los precios

Promediar() :Método utilizado para promediar todos los precios de los objetos instanciados.

package Ejemplo1; //Nombre del paquete public class Calculadora { // DEFINICIÓN DE PROPIEDADES public String marca; public double precio; public String modelo; //DECLARACIÓN DE VARIABLES ESTÁTICAS: ámbito en toda la clase // comparten el mismo valor para todos los obj. instanciados public static double total; public static double cuenta; //CREACIÓN DEL MÉTODO ESTATICO public static double totalizar() { return total; } //CREACIÓN DEL MÉTODO ESTÁTICO

public static double promediar() { double p; p=total/cuenta; return p; } public double sumar(double a, double b) { double r; r=a+b; return r; //Retorna el resultado } public double restar(double a, double b)

Page 26: Lenguaje de Programación II

UNIVERSIDAD PRIVADA TELESUP

26

{ double r; r=a-b;

return r; } public double multiplicar(double a, double b) { double r; r=a*b; return r; } public double dividir(double a, double b) {double r=0; if(b!=0) { r=a/b; } else {System.out.println("Resultado no determinado en N"); } return r; } public double dimetuprecio() { return precio; } // EL MÉTODO CONSTRUCTOR 1 // Permite el ingreso de los estados solo a 2 de // las propiedades del objeto instanciado public Calculadora(String ma,double p) { marca=ma; precio=p; total+=precio; // Es un acumulador, es igual que decir total=precio+total cuenta++; // Es un contador, es igual que decir cuenta=cuenta+1 } // EL MÉTODO CONSTRUCTOR 2 - Permite el ingreso de los // estados solo a 3 de las propiedades del objeto // instanciado public Calculadora(String ma,double p, String mo) { marca=ma; precio=p; modelo=mo; total+=precio; // Es un acumulador, es igual que decir total=precio+total cuenta++; // Es un contador, es igual que decir cuenta=cuenta+1 } // EL MÉTODO CONSTRUCTOR 3 - Permite solo el // instanciamiento public Calculadora() { total+=precio; // Es un acumulador, es igual que decir total=precio+total cuenta++; // Es un contador, es igual que decir cuenta=cuenta+1 } public static void main(String args[]) { //Creación de los objetos instanciados Calculadora c1=new Calculadora("CASIO",25.45); //Usa el constructor 1 Calculadora c2=new Calculadora("CITIZEN",32.99,"RS23"); //Usa el constructor 2

Page 27: Lenguaje de Programación II

UNIVERSIDAD PRIVADA TELESUP

27

Calculadora c3=new Calculadora(); //Usa el constructor 3 //Usando la propiedades y métodos del 1er. obj. instanciado System.out.println("La marca de la calculadora 1 es : "+ c1.marca); System.out.println("La calculadora 1 suma 12+34 : "+ c1.sumar(12,34)); System.out.println("La calculadora 1 resta 12-34 : "+ c1.restar(12,34)); System.out.println("La calculadora 1 multiplica 12*34 : "+ c1.multiplicar(12,34)); System.out.println("La calculadora 1 divide 12/34 : "+ c1.dividir(12,34)); //Usando la propiedades y métodos del 2do. obj. instanciado System.out.println("Accedemos al precio de la calculadora 2 : "+ c2.precio); System.out.println("La calculadora 2 suma 2+-5 : "+ c2.sumar(2,-5)); System.out.println("La calculadora 2 nos dice su precio : "+ c2.dimetuprecio()); //Usando la propiedades y métodos del 3er. obj. Instanciado c3.marca="Panasonic"; c3.precio=29.99; c3.modelo="RX123"; System.out.println("Accedemos al precio de la calculadora 3 : "+ c3.precio); System.out.println("La calculadora 3 suma 10+32 : "+ c3.sumar(10,32)); System.out.println("La calculadora 3 nos dice su precio : "+ c3.dimetuprecio()); //INVOCACIÓN DE LOS MÉTODOS ESTÁTICOS System.out.println("El total del costo de las dos calculadoras es: " + Calculadora.totalizar()); System.out.println("El promedio del costo de las dos calculadoras es: " + Calculadora.promediar()); } } //Fin de la clase

USO DE CONSTANTES:

Las constantes son también variables estáticas que al ser

declaradas reciben un valor, y luego de esto, no

permiten que dicho valor sea modificado por ninguna

razón.

Ejemplo:

public static final double IGV=0.19; public static final String RazonSocial=”TecniSystem SRL”;

Page 28: Lenguaje de Programación II

UNIVERSIDAD PRIVADA TELESUP

28

TEMA 3

Diferencia la capa de la Lógica de Presentación y Lógica de Negocios y los utiliza al desarrollar aplicaciones en dos capas.

Competencia:

Clases

Modelamiento DE DE

Page 29: Lenguaje de Programación II

UNIVERSIDAD PRIVADA TELESUP

29

Tema 03: Modelamiento de clases

EJERCICIOS DE MODELAMIENTO DE OBJETOS A PARTIR DE LA ABSTRACCIÓN DE

CASOS REALES

En la programación orientada a objetos (POO), podemos

dividir el desarrollo de aplicaciones informáticas en 2 partes:

a. La Lógica de Presentación (Lógica de Clientes)

b. La Lógica de Negocios (Lógica de Procesos)

La Lógica de Presentación:

Está constituida por la interfaz de usuario, lugar en la que se realiza: el ingreso y

salida de datos.

La Lógica de Negocios:

Está constituida por la programación de los procesos o tareas, para este fin se

utiliza la POO. (Clases, Métodos, Propiedades, etc)

CASO 1

Crear una aplicación visual en Java basada en POO que cambie una cantidad de

dólares a soles y muestre el tipo de cambio resultante.

Page 30: Lenguaje de Programación II

UNIVERSIDAD PRIVADA TELESUP

30

DESARROLLO DEL CASO 1

Crear un proyecto con el nombre Caso1. Automáticamente se creará el paquete

caso1

a. Crear la Lógica de Presentación.

Crear un formulario o Frame con el nombre FrmMoneda que contenga los

siguientes controles:

b. Crear la Lógica de Negocios

Ahora debemos crear la clase Moneda en el mismo paquete

txtNC

txtMS

txtTC

txtMD

BtnLimpiar BtnCerrar BtnProcesa

r

Page 31: Lenguaje de Programación II

UNIVERSIDAD PRIVADA TELESUP

31

package CASO01; public class Moneda { public String NombreCliente; public double MontoSoles; public double TipoCambio; public double ConvertirDolares() {double d = MontoSoles/TipoCambio; return d;} public Moneda() { } }

c. Codificación de los botones del formulario

Botón Procesar

private void BtnProcesarActionPerformed(java.awt.event.ActionEvent evt) { //Instancia de la clase Moneda M1=new Moneda(); //Ingreso de datos (recepcionamos los datos ingresados en las cajas de texto) M1.NombreCliente = txtNC.getText(); //Recepcionamos y convertimos los datos a tipo Double M1.TipoCambio = Double.parseDouble(txtTC.getText()); //Recepcionamos y convertimos los datos a tipo Double M1.MontoSoles = Double.parseDouble(txtMS.getText()); //Proceso double d=M1.ConvertirDolares(); //Invocamos al método de la clase y recibimos la rpta //Salida //Escribimos el contenido de la variable dentro de la caja de texto //previamente lo convertimos a String txtMD.setText(String.valueOf(d)); }

Botón Limpiar

private void BtnLimpiarActionPerformed(java.awt.event.ActionEvent evt) { txtNC.setText(""); txtTC.setText(""); txtMS.setText(""); txtMD.setText(""); }

Botón Procesar

Botón Limpiar

Page 32: Lenguaje de Programación II

UNIVERSIDAD PRIVADA TELESUP

32

Botón Cerrar

private void BtnCerrarActionPerformed(java.awt.event.ActionEvent evt) { System.exit(0); }

d. Ejecutar el Formulario [Presionar la tecla Shift F6]

CASO 2

Crear una aplicación visual en Java basada en POO que calcule el descuento por

faltas de un trabajador, si se sabe que por cada inasistencia la empresa descuenta el

doble del salario de un día, finalmente muestre el descuento y el neto a percibir.

DESARROLLO – CASO 2

Crear un proyecto con el nombre Caso2. Automáticamente se creará el paquete caso2.

a. Crear la Lógica de Presentación

Crear un formulario que contenga los siguientes

controles:

Botón Cerrar

Page 33: Lenguaje de Programación II

UNIVERSIDAD PRIVADA TELESUP

33

b. Crear la Lógica de Negocios

Ahora crearemos la clase Trabajador en el paquete actual

package CASO02;

public class Trabajador { public String apellidos; public double sueldobasico; public int cantidadfaltas; public double descuento_porfaltas() { double a; a=2*(sueldobasico/30)*cantidadfaltas; return a; } public Trabajador() { } }

txta

txts

txtc

txtn

btnPROCESAR btnLIMPIA

RRR

btnCERRAR

Page 34: Lenguaje de Programación II

UNIVERSIDAD PRIVADA TELESUP

34

c. Codificación de los botones del formulario

private void btnPROCESARActionPerformed(java.awt.event.ActionEvent evt) { //Instancia de la clase Trabajador obj=new Trabajador(); //Ingreso de datos //Capturamos los datos ingresados por las cajas de texto obj.apellidos=txta.getText(); obj.sueldobasico=Double.parseDouble(txts.getText()); //Los convertimos a doble obj.cantidadfaltas=Integer.parseInt(txtc.getText()); //Los convertimos a doble //Invocamos al método y recepcionamos el valor devuelto double tu=obj.descuento_porfaltas(); //Salida txtn.setText(String.valueOf(tu)); }

Botón Limpiar

private void btnLIMPIARActionPerformed(java.awt.event.ActionEvent evt) { txta.setText(""); txts.setText(""); txtc.setText(""); txtn.setText(""); }

private void btnCERRARActionPerformed(java.awt.event.ActionEvent evt) { System.exit(0); }

d. Ejecutar el formulario [presionar la tecla Shif F6]

Botón Procesar

Botón Limpiar

Botón Cerrar

Page 36: Lenguaje de Programación II

UNIVERSIDAD PRIVADA TELESUP

36

Tema 04: Métodos de la clase Math y la clase String

1. LA CLASE MATH

La clase java.lang.Math deriva de la clase Object. La clase Math proporciona

métodos estáticos para realizar las operaciones matemáticas más habituales.

Adicionalmente, proporciona además las variables estáticas final (Constantes) E y

PI, cuyo significado no requiere muchas explicaciones.

Para utilizar la clase Math, escriba el nombre de la clase y luego digite y escriba el

nombre del método estático que desea utilizar, algunos de estos métodos reciben

argumentos.

VARIABLES ESTÁTICAS FINAL (Constantes)

Contamos con las siguientes:

Math.PI Devuelve el valor de PI

Math.E Devuelve el valor de E

METODOS ESTÁTICOS

Devuelve el valor absoluto

Ejemplo:

int i = -9; double x = 0.3498; System.out.println("|" + i + "| es " + Math.abs(i)); System.out.println("|" + x + "| es " + Math.abs(x));

a. Método cos :

Devuelve el coseno de una cantidad de radianes

b. Método sin :

Devuelve el seno de una cantidad de radianes

a. Método abs

b. Método cos

c. Método sin

Page 37: Lenguaje de Programación II

UNIVERSIDAD PRIVADA TELESUP

37

c. Método tan :

Devuelve la tangente de una cantidad de radianes

Ejemplo:

double angulo = 45.0 * Math.PI/180.0; //Convierte a radianes System.out.println("cos(" + angulo + ") es " + Math.cos(angulo)); System.out.println("sin(" + angulo + ") es " + Math.sin(angulo)); System.out.println("tan(" + angulo + ") es " + Math.tan(angulo));

d. Método atan2 :

Convierte coordenadas rectangulares a polares.

Ejemplo:

Para pasar de coordenadas rectangulares a polares es útil la función atan2, que

admite dos argumentos, la ordenada y la abscisa del punto. Devuelve el ángulo

en radianes.

double y=-6.2; //ordenada double x=1.2; //abscisa System.out.println("atan2(" + y+" , "+x + ") es " + Math.atan2(y, x));

e. Método exp:

Devuelve el número e elevado a una potencia.

Ejemplo:

System.out.println("exp(1.0) es " + Math.exp(1.0)); System.out.println("exp(10.0) es " + Math.exp(10.0)); System.out.println("exp(0.0) es " + Math.exp(0.0));

f. Método log:

Calcula el logaritmo natural (de base e) de un número

Ejemplo:

System.out.println("log(1.0) es " + Math.log(1.0)); System.out.println("log(10.0) es " + Math.log(10.0)); System.out.println("log(Math.E) es " + Math.log(Math.E));

d. Método tan

e. Método atan2

f. Método exp

g. Método log

Page 38: Lenguaje de Programación II

UNIVERSIDAD PRIVADA TELESUP

38

g. Método pow:

Devuelve la potencia de un número

Ejemplo:

System.out.println("pow(10.0, 3.5) es " + Math.pow(10.0,3.5));

h. Método sqrt:

Devuelve raíz cuadrada de un número.

System.out.println("La raíz cuadrada de " + x + " es " + Math.sqrt(x));

i. Método round :

Para expresar un número real con un número especificado de cifras

decimales empleamos la función round. Por ejemplo, para expresar los

números x e y con dos cifras decimales escribimos

double x = 72.3543; double y = 0.3498; System.out.println(x + " es aprox. " + (double)Math.round(x*100)/100); System.out.println(y + " es aprox. " + (double)Math.round(y*100)/100);

Se obtiene 72.35 y 0.35 como cabría esperar. Fijarse que round devuelve un

número entero int que es necesario promocionar a double para efectuar la

división entre 100.

j. Método floor :

Entero más cercano en dirección a -infinito

Ejemplo:

System.out.println(x + " es aprox. " + Math.floor(x*100)/100); System.out.println(y + " es aprox. " + Math.floor(y*100)/100);

Se obtiene 72.35 y 0.34. La aproximación del primero es correcta ya que

la tercera cifra decimal es 4 inferior a 5. La aproximación del segundo es

incorrecta ya que la tercera cifra decimal es 9 mayor que 5. En la mayor

parte de los cálculos se cometen errores, por lo que la diferencia entre

floor y round no es significativa.

h. Método pow

i. Método sqrt

j. Método round

k. Método floor

Page 39: Lenguaje de Programación II

UNIVERSIDAD PRIVADA TELESUP

39

k. Método max :

Devuelve el número mayor entre dos números dados.

Ejemplo:

int i = 7; int j = -9; double x = 72.3543; double y = 0.3498; // para hallar el menor de dos número System.out.println("min(" + i + "," + j + ") es " + Math.min(i,j)); System.out.println("min(" + x + "," + y + ") es " + Math.min(x,y)); // Para hallar el mayor de dos números System.out.println("max(" + i + "," + j + ") es " + Math.max(i,j)); System.out.println("max(" + x + "," + y + ") es " + Math.max(x,y));

l. Método random :

La clase Math define una función denominada random que devuelve un número

pseudoaleatorio comprendido en el intervalo [0.0, 1.0).

Ejemplo:

System.out.println("Número aleatorio: " + Math.random()); System.out.println("Otro número aleatorio: " + Math.random());

2. LA CLASE String

Una de las clases importantes de Java contenidas en el paquete java.lang es sin

duda la clase String, esta clase es la plantilla base desde la cual se instancian

todas las cadenas de texto. Aunque, muchas veces pase inapercibido por el

usuario, al momento de declarar una cadena de texto, lo que está haciendo es crear

un objeto instanciado.

Ejemplo:

String apellido=”Torres”;//apellido es un objeto instanciado de la clase String

l. Método max

m. Método random

Page 40: Lenguaje de Programación II

UNIVERSIDAD PRIVADA TELESUP

40

Para comprobarlo, escriba apellido y luego escriba el (punto). Observará las

propiedades y métodos heredados por este objeto de la clase String.

Por lo expuesto anteriormente, daría lo mismo haber instanciado apellido de esta

otra manera:

String apellido=new String("Torres")

CONCLUSION: En Java todas las cadenas de texto son objetos instanciados de la clase String.

MÉTODOS DE INSTANCIA DE LA CLASE String

Cada una de las cadenas de texto hereda automáticamente los

siguientes métodos:

Método toUpperCase :

Devuelve el contenido de la cadena en mayúsculas.

Ejemplo:

if (txtlogin.getText()).toUpperCase=”PEPE”) { JOptionPane.showDialog(null,“Usuario Admitido”,”Aviso”,1); }

Explicación: Si el contenido de la caja de texto txtlogin es igual a PEPE, saldrá

un caja de mensaje con el contenido “Usuario Admitido”, no interesará si el

usuario haya ingresado el texto en minúscula o mayúscula porque el método

toUpperCase siempre lo convertirá a mayúsculas.

Método toLowerCase :

Devuelve el contenido de la cadena en minúsculas.

Ejemplo:

if (txtlogin.getText()).toLowerCase=”PEPE”) { JOptionPane.showDialog(null,“Usuario

Admitido”,”Aviso”,1); }

Método toUpperCase

Método toLowerCase

Page 41: Lenguaje de Programación II

UNIVERSIDAD PRIVADA TELESUP

41

Método charAt :

Devuelve un carácter específico de la cadena. (el primer carácter tiene la posición

0). El dato devuelto es tipo char.

Ejemplo:

String ape=”torres”; int i; for(i=0;i<=5;i++) { int x=(int)ape.charAt(i); // El carácter devuelto es convertido a entero if(x==101) //Se pregunta si el carácter evaluado es e (Codigo ASCII 101) { System.out.println(“La letra e esta ubicada en la posición: “ + i); } }

Explicación: Se hace un recorrido por todos los caracteres de la cadena usando

la estructura for, empezando desde la primera posición (cero) hasta la ultima

posición 5, en cada vuelta se toma el carácter que corresponde a la variable i y

se convierte dicho carácter a su equivalente ASCII, luego se pregunta si dicho

carácter es igual al carácter e (Código ASCII 101), si es así se mostrará un

mensaje en la consola indicando la posición que ocupa dicho carácter en la

cadena.

Método compareTo :

Compara dos cadenas de texto, si la primera cadena es mayor que la segunda

el valor devuelto es un número mayor a 0, si el caso es viceversa devuelve un

número menor a 0, y si ambas cadenas son iguales devuelve el número 0.

Ejemplo:

String ape1=”Torres”;

String ape2=”Castillo”;

int r;

if(ape1.compareTo(ape2)>0)

{ System.out.println(“El ape1 esta después de ape2”); }

else

{ System.out.println(“El ape1 esta antes de ape2”); }

Método charAt

Método compareTo

Page 42: Lenguaje de Programación II

UNIVERSIDAD PRIVADA TELESUP

42

Explicación: La comparación de ambas cadenas se hace a través del valor del

código ASCII de cada uno de los caracteres, comenzando desde el primero al

último. Por ejemplo, la comparación entre Torres y Castillo, dicha comparación

se realizará en primer orden evaluando los códigos ASCII de T (84) y C (67), en

este caso el primer valor es mayor al segundo, por lo que el valor devuelto de

comapreTo es un número mayor a 0.

Método length();

Devuelve la longitud de la cadena.

Ejemplo:

if ((txtdni.getText()).length()!=8)

{ System.out.println(“ERROR: No es un número de DNI válido”);

}

Método endsWith :

Devuelve verdadero si termina con …

Ejemplo:

if (txtDNI.getText().endsWith(”3”))==true

{ System.out.println(“Este DNI termina en 3”);

}

Método indexOf :

Devuelve la posición de la primera ocurrencia del carácter dado.

Ejemplo 1:

int c;

String ape=”Torres Huaman”;

c=ape.indexOf(” ”);

System.out.println(“El espacio en blanco esta situado en la posición” + c);

Método length()

Método endsWith

Método indexOf

Page 43: Lenguaje de Programación II

UNIVERSIDAD PRIVADA TELESUP

43

Ejemplo 2:

int p=0;

while(true)

{ p=str.indexOf(' ', p+1);

if(p==-1)

{ break; }

else

{ System.out.println("La posición del espacio en blanco es: "+p); }

}

Explicación: En este ejemplo, dado a que indexOf se encuentra dentro de una

estructura repetitiva, seguirá buscando en qué posiciones se encuentra el

espacio en blanco (‘ ‘)

Método equals :

Este método devuelve verdadero cuando ambas cadenas son idénticamente

iguales.

Ejemplo:

If ((txtpassword.getText()).equals(”TELESUP”))==true)

{ System.out.println(“Acceso permitido”); }

Método startsWith :

Este método devuelve verdadero cuando la cadena de texto empieza con la

cadena indicada.

Ejemplo:

If ((txtDireccion.getText()).startsWith(”AV”)==true)

{ System.out.println(“Este domicilio esta ubicado en una

Avenida”); }

Método equals

Método startsWith

Page 44: Lenguaje de Programación II

UNIVERSIDAD PRIVADA TELESUP

44

Método substring :

Extrae un segmento de la cadena

Ejemplo:

String cad= "Universidad";

cad = cad.substring(3, 6);

System.out.println(cad);

Explicación: El método substring en el ejemplo anterior extrae a partir de la posición 3

hasta antes de la posición 6

Método trim :

Elimina los espacios en blanco a la izquierda o derecha de la cadena.

Ejemplo:

if((txtdato.getText()).trim=””)

{ System.out.println(“El dato no puede ser vacío”);

}

CONVERTIR OTROS TIPOS DE DATOS AL TIPO DE OBJETO STRING:

Método valueOf:

Es un método estático de la clase String que se encarga de convertir los diferentes

tipos de datos al tipo String.

Ejemplo:

int x=123;

String dato1=String.valueOf(x);

double y=23.345;

String dato2=String.valueOf(y);

Método substring

Método trim

Método valueOf

Page 45: Lenguaje de Programación II

UNIVERSIDAD PRIVADA TELESUP

45

EJEMPLOS PRÁCTICOS

A. Utilizando la Clase Math

// ESTE ES UN EJEMPLO DONDE SE PODRA OBSERVAR // EJEMPLOS DE LOS DISTINTOS MEÉTODOS ESTÁTICOS DE LA CLASE MATH public class mate {

public static void main(String args[]) { int i = 7; int j = -9; double x = 72.3543; double y = 0.3498; System.out.println("i es " + i); System.out.println("j es " + j); System.out.println("x es " + x); System.out.println("y es " + y); // Valor absoluto de un número System.out.println("|" + i + "| es " + Math.abs(i)); System.out.println("|" + j + "| es " + Math.abs(j)); System.out.println("|" + x + "| es " + Math.abs(x)); System.out.println("|" + y + "| es " + Math.abs(y)); // aproximación decimal //empleando (round) System.out.println(x + " es " + Math.round(x)); System.out.println(y + " es " + Math.round(y)); System.out.println(x + " es aprox." + (double)Math.round(x*100)/100); System.out.println(y + " es aprox." + (double)Math.round(y*100)/100); System.out.println((double)Math.round(3.14156*100)/100); // Redondea a 1 decimal // devuelve un int debeos convertrilo a double //empleando floor System.out.println("The floor of " + x + " es " + (100*Math.floor(x))/100); System.out.println("The floor of " + y + " es " + (100*Math.floor(y))/100); System.out.println(Math.floor(3.14159*100)/100); // para hallar el menor de dos número System.out.println("min(" + i + "," + j + ") es " + Math.min(i,j)); System.out.println("min(" + x + "," + y + ") es " + Math.min(x,y)); // Para hallar el mayor de dos números System.out.println("max(" + i + "," + j + ") es " + Math.max(i,j)); System.out.println("max(" + x + "," + y + ") es " + Math.max(x,y)); // las constantes PI y E System.out.println("Pi es " + Math.PI); System.out.println("e es " + Math.E); //funciones trigonométricas //double angulo = 45.0 * Math.PI/180.0;

Page 46: Lenguaje de Programación II

UNIVERSIDAD PRIVADA TELESUP

46

double angulo=Math.toRadians(90); // Convertimos 90 Grados a Radianes System.out.println("cos(" + angulo + ") es " + Math.cos(angulo)); System.out.println("sin(" + angulo + ") es " + Math.sin(angulo)); System.out.println("tan(" + angulo + ") es " + Math.tan(angulo)); // Funciones trigonomértricas inversas double valor = 0.707; System.out.println("acos(" + valor + ") es " + Math.acos(valor)); // Halla el Arcocoseno System.out.println("asin(" + valor + ") es " + Math.asin(valor)); // Halla el Arcoseno System.out.println("atan(" + valor + ") es " + Math.atan(valor)); // Halla el Arcotangente y=6.2; //ordenada x=-5.4; //abscisa System.out.println("atan2(" + y+" , "+x + ") es " + Math.atan2(y, x)); //Funciones exponencial y logarítmica System.out.println("exp(1.0) es " + Math.exp(1.0)); System.out.println("exp(10.0) es " + Math.exp(10.0)); System.out.println("exp(0.0) es " + Math.exp(0.0)); System.out.println("log(1.0) es " + Math.log(1.0)); System.out.println("log(10.0) es " + Math.log(10.0)); System.out.println("log(Math.E) es " + (double)Math.log(Math.E*100)/100); // pow(x,y) devuelve x elevado a y. System.out.println("pow(2.0, 2.0) es " + Math.pow(2.0,2.0)); System.out.println("pow(10.0, 3.5) es " + Math.pow(10.0,3.5)); System.out.println("pow(8, -1) es " + Math.pow(8,-1)); // sqrt(x) devuelve la raíz cuadrada de x. System.out.println("La raíz cuadrada de " + y + " es " + Math.sqrt(y)); // Devuelve un número pseudo-aleatorio comprendido entre 0.0 y 1.0 System.out.println("Número aleatorio de 0 a 1 : " + Math.random()); System.out.println("Otro número aleatorio de 0 a 100 : " + Math.random()*100); System.out.println("Número aleatorio de 10 a 20 : " + ((Math.random()*(20-10)) + (10)) ) ; } }

Page 47: Lenguaje de Programación II

UNIVERSIDAD PRIVADA TELESUP

47

b. Utilizando la Clase String

// ESTE EJEMPLO MUESTRA LOS MÉTODOS ESTÁTICOS DE //LA // CLASE STRING

public class String_cadena { public static void main(String[] args) { //longitud del string String str="El primer programa"; System.out.println("longitud "+str.length()); //comienza y termina por... str="El primer programa"; System.out.println("comienza por El "+str.startsWith("El")); System.out.println("termina por programa "+str.endsWith("programa")); //posición de un carácter int pos=str.indexOf('p'); System.out.println("posición de la letra p "+pos); //segunda ocuurencia de p int p=0; while(true) { p=str.indexOf(' ', p+1); if(p==-1) { break; } else { System.out.println("La posicion del espacio en blanco es: "+p); } } //comparación - Si devuelve < que 0 significa que es menor // Si devuelve > que 0 signfica que es mayor // Si devuelve = a 0 signfica que ambos son iguales str="Tomás"; System.out.println("Orden alfabético "+str.compareTo("Alberto")); str="Alberto"; System.out.println("Orden alfabético "+str.compareTo("Tomás")); System.out.println("Orden alfabético "+str.compareTo("Alberto")); //substring str="El lenguaje Java"; System.out.println("Substring a partir de pos. 12 "+str.substring(12)); System.out.println("Substring desde pos. 3-11:" + str.substring(3, 11)); //eliminar los espacios en blanco str=" 12 "; System.out.println("string original "+str); System.out.println("string sin espacios en blanco "+str.trim()); //convertir un número en string String ape1="Torres"; String ape2="Castillo"; int r;

Page 48: Lenguaje de Programación II

UNIVERSIDAD PRIVADA TELESUP

48

if(ape1.compareTo(ape2)>0)

{ System.out.println("El ape1 está después de ape2"); } else { System.out.println("El ape1 está antes de ape2"); } } } Ejemplo: Realización comparación de cadenas public class Comparacion { public static void main(String[] args) { String str1="El lenguaje Java"; String str2=str1; System.out.println("String1 --> "+str1); System.out.println("String2 --> "+str2); System.out.println("¿Es el mismo objeto? --> "+(str2==str1)); str2=new String(str1); System.out.println("String1 --> "+str1); System.out.println("String2 --> "+str2); System.out.println("¿Es el mismo objeto? --> "+(str2==str1)); System.out.println("¿El mismo valor? --> "+(str2.equals(str1))); } }

Page 49: Lenguaje de Programación II

UNIVERSIDAD PRIVADA TELESUP

49

Lecturas Recomendadas

Introducción a la Programación Orientada a Objetos

http://elvex.ugr.es/decsai/java/index.html

A. Construya la siguiente clase, implementando las propiedades y los métodos que

correspondan y construya un formulario. Para la solución del caso construya un

proyecto y guárdalo en una carpeta con sus respectivo nombre y a su vez

comprímela. Esta carpeta comprimida envíala a través de “Proyectos 1”.

1. La clase Vehículo

Propiedades: marca, modelo

Métodos: Hallarvelocidad(espacio, tiempo)

Para este caso, desarrollar un formulario que solicite el espacio recorrido

por un vehiculo (en kilómetros) y el tiempo utilizado para recorrer dicho

trayecto (en horas). Luego de hacer click en el botón Procesar, visualizar la

velocidad de dicho móvil.

B. Construya la siguiente clase, implementando las propiedades y los métodos que

correspondan y construya un formulario. Para la solución del caso construya un

proyecto y guárdalo en una carpeta con sus respectivo nombre y a su vez

comprímela. Esta carpeta comprimida envíala a través de “Proyectos 2”.

2. La clase Empleado

Propiedades: apellidos, nombres, cantidad de hijos, básico

Métodos: CalcularBonif(), CalcularDescto(faltas)

Nota: Para calcular la bonificación considere que la empresa otorga una

bonificación del 3% del sueldo básico por cada hijo. Para calcular el descuento, la

empresa toma en cuenta que por cada inasistencia se debe descontar el doble del

sueldo diario.

Para este caso desarrollar un formulario que solicite el apellido, nombre,

cantidad de hijos y el básico mensual de un trabajador: luego de hacer click

en el botón Procesar, para visualizar la bonificación y el descuento del

trabajador.

Actividades y Ejercicios

Page 50: Lenguaje de Programación II

UNIVERSIDAD PRIVADA TELESUP

50

C. Construya la siguientes clase, implementando las propiedades y métodos miembros

y estáticos según corresponda. Para el siguiente caso construya un proyecto y

guardalo en una carpeta con sus respectivo nombre y a su vez comprímela. Esta

carpeta comprimida envíala a través de “Proyectos 3”.

1. La clase Vehículo

Propiedades Miembros: marca, modelo, tipo combustible

Variable Estática: gasto total acumulado

Método Miembro: CalcularConsumo (cantidadGalones)

Instanciar 3 Objetos, ingresar los estados e invocar el método

CalcularConsumo para cada objeto instanciado.

Para calcular el gasto total acumulado, utilizar la variable estática

gastoTotalAcumulado con un acumulador dentro del método

CalcularConsumo(). Es decir, acumule el total de consumo en la variable

gastoTotalAcumulado. Luego mostrar el valor acumulado en la variable

gastoTotalAcumulado.

Se debe invocar el método CalcularConsumo para cada objeto instanciado.

Luego mostrar las propiedades y la respuesta del método CalcularConsumo().

Para calcular el consumo, tenga en cuenta la siguiente información:

Tipo de Combustible

Precio por

Galón

1 14.40

2 12.00

3 8.90

Tome en cuenta que para esta clase la propiedad tipo combustible se

encuentra dentro de la clase por la que no será necesario tenerla como

parámetro de entrada, mientras que el dato cantidad galones sí será un

parámetro de entrada necesario para el cálculo del consumo.

Para calcular el consumo use condicionales.

Page 51: Lenguaje de Programación II

UNIVERSIDAD PRIVADA TELESUP

51

Autoevaluación

1. Indique un método – propiedad corresponde a :

a. Un dato descriptivo de la clase - Una acción de la clase

b. Un estado del objeto - Un estilo de programación

c. Una acción de la clase - Un dato descriptivo de la clase

d. Un estilo de programación - Un estado del objeto

e. Una acción de la clase – Una norma de la POO

2. El método constructor:

a. Sirve para construir una clase

b. Sirve para crear una variable

c. Sirve para construir un objeto instanciado

d. Sirve para construir una propiedad

e. Sirve para programar acciones que se llevarán a cabo cuando se

instancie un objeto de la clase.

3. Los estados de un objeto instanciado…

a. Son los valores de una variable N

b. Son los valores que tienen las propiedades del objeto instanciado

c. Es valor que devuelve la variable de retorno de un método

d. Es la situación en la que se encuentra un objeto instanciado

e. Es el valor que retorna un método.

4. Un método estático:

a. Es la habilidad o acción de clase que es heredada singularmente por

cada uno de los objetos instanciados.

b. Es un método cuyo resultado no cambia de valor.

c. Es la habilidad o acción de la clase, que está relacionada a una acción

colectiva que involucra a varios objetos instanciados de la clase

d. Es una dato descriptivo correspondiente a un objeto instanciado de la

clase

e. Es una variable correspondiente a dato asociado a la clase.

Page 52: Lenguaje de Programación II

UNIVERSIDAD PRIVADA TELESUP

52

5. Una variable Estática:

a. Es una variable de la clase, que es heredada singularmente por cada

uno de los objetos instanciados.

b. Es un variable cuyo resultado no cambia de valor.

c. Es una variable de la clase, asociado a un objeto instanciado.

d. Es una dato descriptivo almacenado dentro de la propiedad de un

objeto instanciado.

e. Es una variable de ámbito global asociado a la clase.

6. La lógica de presentación se encarga de:

a. Las tareas que involucran la gestión de procesos

b. La gestión de operaciones con la base de datos.

c. La interfaz del usuario por donde se ingresan o visualizan datos

(formulario)

d. El algoritmo utilizado para el desarrollo de nuestros programas

e. Gestionar los primeros procesos que se dan, cuando abrirmos la

aplicación.

7. La lógica de Negocios se encarga de:

a. La programación de las tareas que involucran la gestión de los

procesos, se aplica POO

b. La interfaz del usuario por donde se ingresan o visualizan datos

(formulario)

c. El algoritmo utilizado para el desarrollo de nuestros programas

d. La gestión de operaciones con la base de datos

e. Gestionar los primeros procesos que se dan, cuando abrirmos la

aplicación.

8. Escribe el contenido de una variable, en una caja de texto de un

formulario

a. txtr.setText(rr);

b. String rr=txtr.getText();

c. int a=Integer.parseInt(aa);

d. System.out.println(rr);

e. txtr.getText(rr);

Page 53: Lenguaje de Programación II

UNIVERSIDAD PRIVADA TELESUP

53

9. Tenemos la variable x con el valor: 5.364852, escriba la instrucción para

redondear dicho dato a una aproximación de 3 cifras decimales:

a. (double)Math.round(x*1000)/1000;

b. String roundx (x*1000)

c. Varchar math (x*1000)/1000;

d. int a=Integer.parseInt(aa);

e. Math.(x*1000)

10. Tenemos la siguiente cadena de texto:

String univ=”Telesup”;

Escriba la instrucción Java para extraer de la cadena de texto anterior, la

subcadena “ele”

a. univ.substring(1,4)

b. univ.int

c. Univ.Telesup

d. String

e. System.out println

……………………………………………………………………………………

……………………………………………………………………………………

…...

Page 54: Lenguaje de Programación II

UNIVERSIDAD PRIVADA TELESUP

54

Resumen

UUNNIIDDAADD DDEE AAPPRREENNDDIIZZAAJJEE II::

La programación orientada a objetos es un paradigma de programación moderno, que

se asemeja a la forma cómo el ser humano interpreta la realidad, se basa en los

siguientes conceptos:

Clase: plantilla desde donde se originan los objetos

Objeto Instanciado: Es un ejemplar de la clase

Método: Acción o habilidad de la clase

Propiedad: Dato descriptivo de la clase

Metodo constructor: Método que lleva el nombre de la clase, este se ejecuta

automáticamente cada vez que se lleva a cabo una instancia del objeto, puede crearse

un método constructor diferente para cada manera de instanciar un objeto.

No olvidar que los objetos instanciados herendan las propiedades y métodos de su

clase.

Una variable estática es una variable de ámbito global asociada directamente a la

clase. Las variables estáticas conservan un mismo valor para toda la clase y no

cuentan con estados (datos) diferentes en cada objeto instanciado.

Un método estático es una acción de la clase y no de un objeto instanciado en

particular. Para acceder a ambos desde el código fuente se debe anteponer el nombre

de la clase, seguido del punto. Las constantes son también variables estáticas que

al ser declaradas reciben un valor, y luego de esto, no permiten que dicho valor

sea modificado por ninguna razón

La programación en capas separa nuestra programación en dos grupos:

Logica de Presentación: Se encarga de la interface del usuario, por donde se

ingresan los datos y se visualiza la información

Lógica de Negocios: Se encarga de lagestión de los procesos, se aplica POO

La clase Math y String son clases de Java que contienen métodos que atienden

procesos matemáticos y de cadenas de texto. Recordemos que todas las cadenas de

texto son instancias de la clase String, por lo que los métodos de la clase String son de

instancia, mientras que los métodos de la clase Math son estáticos.

Page 55: Lenguaje de Programación II

UNIVERSIDAD PRIVADA TELESUP

55

Page 56: Lenguaje de Programación II

UNIVERSIDAD PRIVADA TELESUP

56

Introducción

a) Presentación y contextualización

En esta Unidad aprenderás a utilizar las distintas clases predeterminadas del

propio Lenguaje Java, y así como a crear un modelo de clases aplicando los

conceptos de herencia y polimorfismo.

b) Competencias

Analiza, plantea y formula un modelo de clase para representar una

realidad, aplicando herencias y polimorfismo.

c) Capacidades

1. Distinguir la utilidad de las clases wrapper y convertir datos y objetos

aplicando el casting.

2. Manejar los datos cronológicos y relacionar una fecha de tipo Date con la

clase GregorianCalendar.

3. Crear un modelo de clase aplicando herencia de clases. Desarrollar un

caso práctico aplicando herencia de clases.

4. Planifica, diseña, implementa y formula un modelo de clase para

representar una realidad aplicando herencias y polimorfismo.

d) Actitudes

Actúa con responsabilidad personal, al cumplir con los horarios

establecidos y el respeto a las normas de convivencia.

Cumple con responsabilidad la presentación de los trabajos encomendados

a través de la plataforma virtual.

e) Presentación de ideas básicas y contenido esenciales de la Unidad

La Unidad de Aprendizaje 02: Conceptos Avanzados De La

Programacion Orientada A Objetos, comprende el desarrollo de los siguientes temas:

Tema 01: Wrapper y Casting Tema 02: La Clase Date y GregorianCalendar Tema 03: Herencia de Clases y Niveles de Acceso Tema 04: Polimorifismo: interfaces y métodos abstractos

Page 58: Lenguaje de Programación II

UNIVERSIDAD PRIVADA TELESUP

58

Desarrollo de los Temas

Tema 01: Wrapper y Casting

1. Uso de Wrapper

Los Wrappers (envoltorios) son clases diseñadas para ser un complemento de los

tipos primitivos.

En efecto, los tipos primitivos son los únicos elementos de Java que no son objetos.

Esto tiene algunas ventajas desde el punto de vista de la eficiencia, pero algunos

inconvenientes desde el punto de vista de la funcionalidad. Por ejemplo, los tipos

primitivos siempre se pasan como argumento a los métodos por valor, mientras que

los objetos se pasan por referencia. No hay forma de modificar en un método un

argumento de tipo primitivo y que esa modificación se trasmita al entorno que hizo la

llamada. Una forma de conseguir esto es utilizar un Wrapper, esto es un objeto cuya

variable miembro es el tipo primitivo que se quiere modificar. Las clases Wrapper

también proporcionan métodos para realizar otras tareas con los tipos primitivos, tales

como conversión con cadenas de caracteres en uno y otro sentido.

Existe una clase Wrapper para cada uno de los tipos primitivos numéricos:

Dato primitivo Clase Wrapper

Byte Byte

Short Short

Int Integer

Long Long

Float Float

Char Character

double Double

Page 59: Lenguaje de Programación II

UNIVERSIDAD PRIVADA TELESUP

59

1. Clase Double

La clase java.lang.Double deriva de Number, que a su vez deriva de

Object. Esta clase contiene un valor primitivo de tipo double. A

continuación encontramos algunos métodos y constantes predefinidas de

la clase Double.

Métodos Función que realizan

Double(double) y Double(String) Los constructores de esta clase

doubleValue(), floatValue(), longValue(),

intValue(), shortValue(), byteValue()

Métodos para obtener el valor del tipo

primitivo

String toString(), Double valueOf(String) Conversores con la clase String

isInfinite(), isNaN() Métodos para chequear condiciones

equals(Object) Compara con otro objeto

MAX_DOUBLE, MIN_DOUBLE,

POSITIVE_INFINITY, NEGATIVE_INFINITY,

NaN, TYPE

Constantes predefinidas. TYPE es el objeto

Class representando esta clase

2. Clase Integer

La clase java.lang.Integer tiene como variable miembro un valor de tipo int. A

continuación mostramos los métodos y constantes de la clase Integer.

Métodos Función que realizan

Integer(int) y Integer(String) Constructores de la clase

doubleValue(), floatValue(), longValue(),

intValue(),

shortValue(), byteValue()

Conversores con otros tipos primitivos

Integer decode(String), Integer parseInt(String),

String toString(), Integer valueOf(String)

Conversores con String

String toBinaryString(int), String

toHexString(int),

String toOctalString(int)

Conversores a cadenas representando

enteros en otros sistemas de numeración

Integer getInteger(String) Determina el valor de una propiedad del

sistema a partir del nombre de dicha

propiedad

MAX_VALUE, MIN_VALUE, TYPE Constantes predefinidas

Los Wrappers Byte, Short y Long son similares a Integer.

Page 60: Lenguaje de Programación II

UNIVERSIDAD PRIVADA TELESUP

60

Ejemplo 1: Los Wrappers usados para convertir datos

Los Wrappers son utilizados para convertir cadenas de caracteres (texto) en números.

Esto es útil cuando se leen valores desde el teclado, desde un fichero de texto, etc.

Los ejemplos siguientes muestran algunas conversiones:

//Asumamos para los siguiente ejemplos que a vale “3” y b vale “2”

//(Ambos son String)

//Convertir de String a int

int total=Integer.parseInteger(a)+Integer.parseInteger(b);

//Convertir de String a double

double total=Double.parseDouble(a)+Double.parseDouble(b);

//Convertir de String a double

double total=Double.parseDouble(a)+Double.parseDouble(b);

Ejemplo 2: Los Wrappers usados para envolver y proteger datos

Integer valor=new Integer(15);

int num=valor.intvalue();

//Valor es un objeto instanciado de la clase o wrapper Integer y recibe

un

// dato primitivo 15.

//El método intvalue de un Wrapper nos permite acceder al dato primitivo

//inmerso en él.

Nota:

En el caso de que el texto no se pueda convertir directamente al tipo especificado se

lanza una excepción de tipo NumberFormatException, por ejemplo, si se intenta

convertir directamente el texto “4.897” a un número entero. El proceso que habrá que

seguir será convertirlo en primer lugar a un número float y posteriormente a número

entero.

Page 61: Lenguaje de Programación II

UNIVERSIDAD PRIVADA TELESUP

61

2. USO DE LOS CASTING

TRANSFORMACIONES DE TIPO: CASTING

En muchas ocasiones hay que transformar una variable de un tipo a otro, por ejemplo,

de int a double, o de float a long. En otras ocasiones la conversión debe hacerse entre

objetos de clases diferentes, aunque relacionadas mediante la herencia. En este

apartado se explican brevemente estas transformaciones de tipo.

Conversión de tipos primitivos

La conversión entre tipos primitivos es más sencilla. En Java se realizan de modo

automático conversiones implícitas de un tipo a otro de más precisión, por ejemplo

de int a long, de float a double, etc. Estas conversiones se hacen al mezclar

variables de distintos tipos en expresiones matemáticas o al ejecutar sentencias de

asignación en las que el miembro izquierdo tiene un tipo distinto (más amplio) que el

resultado de evaluar el miembro derecho.

Las conversiones de un tipo de mayor a otro de menor precisión requieren de una

orden explícita del programador, pues son conversiones inseguras que pueden dar

lugar a errores (por ejemplo, para pasar a short un número almacenado como int, hay

que estar seguro de que puede ser representado con el número de cifras binarias de

short). A estas conversiones explícitas de tipo se les llama cast. El cast se hace

poniendo el tipo al que se desea transformar entre paréntesis.

Sintaxis: (tipo a convertir) <dato a convertir>;

Page 62: Lenguaje de Programación II

UNIVERSIDAD PRIVADA TELESUP

62

Ejemplos:

//Convertir de double a int (pierde precisión)

double monto=17.9932;

Int montotruncado=(int)monto;

//Convertir de int a double (gana precisión)

int nota=16;

double n=(double)nota;

//Convertir de char a int

char c=‘@’;

int x=(int)c;

//Convertir de int a char

int c=35;

char x=(char)c;

Nota: Los datos de tipo char son tipos numéricos para Java, cada char está

relacionado al valor ASCII equivalente. Ejemplo:

El char “@” para Java representa internamente 64

Ejemplo: muestra la lista de caracteres ASCII

public class ascii {

public static void main(String arg[]) {

for(int i=0;i<256;i++)

{System.out.println((char)i + ":" + i); // Convierte el valor i en char

}

}

}

Ejemplo: demostración del trabajo de Casting y Wrappers

public class Wrappers {

public static void main(String arg[])

{

//int numero=15; // Variable con valor primitivo

Integer numero=new Integer(15); // Se creo un Wrapper (envoltura u objeto) de tipo

Integer

// recibe el valor 15 y lo almacena en un objeto numero

(Wrapper)

Page 63: Lenguaje de Programación II

UNIVERSIDAD PRIVADA TELESUP

63

int valor=numero.intValue(); // accede al valor primitivo almacenado en el Wrapper

numero.

Integer sum1=new Integer(15);

Integer sum2=new Integer(7);

Integer suma=new Integer(sum1.intValue()+sum2.intValue());

// suma dos datos primitivos que se encuentran en dos Wrappers

// el resultado se almacena en un nuevo Wrappers

System.out.println("La suma total es: " + suma.intValue());

// ----------- WRAPPERS utilizado para convertir datos ---------------------------

- //

// String a double - String a int

String numero1="20.00"; // dato literal Cadena

String numero2="18.5"; // dato literal

double promedio=(Double.parseDouble(numero1)+Double.parseDouble(numero2))/2;

// Wrapper Double para convertir de String a Double

int nument=(Integer.parseInt("003")); // Convierte de String a numérico

entero

System.out.println("El promedio es: " + promedio);

System.out.println("El String convertido a int es: " + nument);

// ----------- Otros tipos de conversión - CASTING --------------------------- //

// double a int - int a double

double monto=17.9932;

int entero=3;

int montotruncado=(int)monto; // Explicito --> Pierde precisión

double dec=(double)entero; // Implicito --> Gana precisión

System.out.println("El número truncado es: " + montotruncado);

System.out.println("El número convertido a decimal es: " + dec);

// char a int - int a char

char c='#';

int ascii=64;

System.out.println("El char convertido a numérico: " + (int)c);

System.out.println("El entero convertido a char: " + (char)ascii);

// int a String

int j=3;

String cadena=String.valueOf(j);

System.out.println("El entero convertido a String es: " + cadena);

}

}

Page 64: Lenguaje de Programación II

UNIVERSIDAD PRIVADA TELESUP

64

Convertir un objeto de tipo String

Aunque para este tipo de conversión no utilizamos ninguna forma de Casting, ni

Wrapper, no obstante, debemos tratarlo en este de tema de conversiones de datos.

Para convertir un objeto de tipo String a otros tipos de datos, debemos utilizar el

método valueOf de la Clase String

Ejemplo:

valor=12; String valorCad=String.valueOf(valor);

Nota: El método valueOf funciona para convertir de String a int, double, float, long, y

char.

EJEMPLOS PRÁCTICOS

int valor=24; str=String.valueOf(valor); System.out.println("número --> string "+str); //convertir un string en número entero str=" 12 "; int numeroInt=Integer.parseInt(str.trim()); System.out.println("string --> número "+numeroInt); //convertir un string en número entero str="12.35 "; double numeroDouble=Double.valueOf(str).doubleValue(); System.out.println("string --> número "+numeroDouble);

Page 65: Lenguaje de Programación II

UNIVERSIDAD PRIVADA TELESUP

65

TEMA 2

Maneja los datos cronológicos y relaciona una fecha de tipo Date con la clase GregorianCalendar.

Competencia:

Gregorian Calendar

y Clase Date La

Page 66: Lenguaje de Programación II

UNIVERSIDAD PRIVADA TELESUP

66

Tema 02: La Clase Date y Gregorian Calendar

Los datos cronológicos en Java se manejan con dos clases

especiales: Date y GregorianCalendar, asi que todas las fechas y/o

horas son instancias de estas clases. A continuación explicaremos

la forma cómo trabajan estas clases y sus respectivos métodos.

1. CLASE DATE

La clase Date representa un instante de tiempo dado con precisión de milisegundos,

contabilizado desde las 00:00:00 del 1 de enero de 1970 GMT (Greenwich mean time),

desde aquel momento el contador empieza en 0 y va aumentando de uno en uno por

cada milisegundo que pasa, por lo tanto cada fecha y/o hora se almacena en un entero

long de 64 bits, que contiene los milisegundos transcurridos desde las 00:00:00 del 1

de enero de 1970 GMT.

Ya se verá que otras clases permiten a partir de un objeto Date obtener información

del año, mes, día, hora, minuto y segundo.

Ejemplo:

Tres maneras distintas de crear una fecha usando la clase Date

Date f=new Date();

// Obtiene la fecha actual

Date f1=new Date(86400000);

//Consigue la fecha que corresponda a la cantidad de milisegundos

//transcurridos desde el 01/01/1970

Date f2=new Date(111,9,12,13,05);

// Obtiene una fecha que corresponda al año 2004,

// Mes Octubre, día 12, con 15 Horas, 10

//minutos y 25 segundos.

El primer constructor por defecto Date() crea un objeto a partir de la fecha y hora

actual del computador. El segundo constructor crea el objeto a partir de los

milisegundos transcurridos desde el 01/01/1970, 00:00:00 GMT y el tercer constructor

crea una fecha específica: año: 2011 (111 (0 corresponde a 1900)), mes: octubre (9 (0

corresponde a Enero)), día del mes: 12, Horas : 13, Minutos: 05.

Page 67: Lenguaje de Programación II

UNIVERSIDAD PRIVADA TELESUP

67

Los métodos after() y before() permiten saber si la fecha es posterior o anterior a la

pasada como argumento explícito. Los métodos getTime() y setTime() permiten

obtener o establecer los milisegundos transcurridos desde el 01/01/1970, 00:00:00

GMT para un determinado objeto Date. Otros métodos son consecuencia de las

interfaces implementadas por la clase Date.

Métodos de Instancia de la Clase Date

Método Propósito

after() Devuelve verdadero si la fecha del argumento se encuentra después de la fecha implícita. Falso en caso contrario.

before() Devuelve verdadero si la fecha del argumento se encuentra antes de la fecha implícita. Falso en caso contrario.

getTime() Obtiene los milisegundos transcurridos desde el 01/01/1970.

setTime() Establece los milisegundos transcurridos desde el 01/01/1970.

equals() compareTo()

Tienen las mismas funciones que en la Clase String

2. CLASES CALENDAR Y GREGORIANCALENDAR

La clase Calendar es una clase abstract que dispone de métodos para convertir

objetos de la clase Date en enteros que representan fechas y horas concretas. La

clase GregorianCalendar es la única clase que deriva de Calendar y es la que se

utilizará de ordinario. Java tiene una forma un poco particular para representar las

fechas y horas:

1. Las horas se representan por enteros de 0 a 23 (la hora "0" va de las 00:00:00

hasta la 1:00:00), y los minutos y segundos por enteros entre 0 y 59.

2. Los días del mes se representan por enteros entre 1 y 31 (lógico).

3. Los meses del año se representan mediante enteros de 0 a 11 (no tan lógico).

4. Los años se representan mediante enteros de cuatro dígitos. Si se representan

con dosdígitos, se resta 1900. Por ejemplo, con dos dígitos el año 2000 es para

Java el año 00.

La clase GregorianCalendar maneja un sistema de calendario completo que

siempre debe apuntar a una determinada fecha

Page 68: Lenguaje de Programación II

UNIVERSIDAD PRIVADA TELESUP

68

MÉTODOS ESTÁTICOS Y CONSTANTES

La variable int AM_PM puede tomar dos valores: las constantes enteras AM y

PM.

La variable int DAY_OF_WEEK puede tomar los valores int SUNDAY,

MONDAY,

TUESDAY, WEDNESDAY, THURSDAY, FRIDAY y SATURDAY.

La variable int MONTH puede tomar los valores int JANUARY, FEBRUARY,

MARCH, APRIL, MAY, JUNE, JULY, AUGUST, SEPTEMBER, OCTOBER,

NOVEMBER, DECEMBER. Para hacer los programas más legibles es

preferible utilizar estas constantes simbólicas que los correspondientes

números del 0 al 11.

La variable miembro HOUR se utiliza en los métodos get() y set() para indicar

la hora de la mañana o de la tarde (en relojes de 12 horas, de 0 a 11). La

variable HOUR_OF_DAY sirve para indicar la hora del día en relojes de 24

horas (de 0 a 23).

Las variables DAY_OF_WEEK, DAY_OF_WEEK_IN_MONTH,

DAY_OF_MONTH (o bien DATE), DAY_OF_YEAR, WEEK_OF_MONTH,

WEEK_OF_YEAR tienen un significado evidente.

Las variables ERA, YEAR, MONTH, HOUR, MINUTE, SECOND,

MILLISECOND tienen también un significado evidente.

Las variables ZONE_OFFSET y DST_OFFSET indican la zona horaria y el

desfase en milisegundos respecto a la zona GMT.

La clase Calendar dispone de un gran número de métodos para establecer u obtener

los distintos valores de la fecha y hora.

La clase GregorianCalendar añade las constante BC y AD para la ERA, que

representan respectivamente antes y después de Jesucristo. Añade además varios

constructores que admiten como argumentos la información correspondiente a la

fecha/hora y –opcionalmente– la zona horaria.

Page 69: Lenguaje de Programación II

UNIVERSIDAD PRIVADA TELESUP

69

A continuación se muestra un ejemplo de utilización de estas clases. Se sugiere

al lector que cree y ejecute el siguiente programa, observando los resultados

impresos en la consola.

import java.util.*;

public class PruebaFechas {

public static void main(String arg[]) {

//Crea una fecha (Fecha actual)

Date d = new Date();

GregorianCalendar gc = new GregorianCalendar();

//Asocia la fecha actual con el Calendario GregorianCalendar

//Ahora el Calendario GregorianCalendar apunta a la fecha actual

gc.setTime(d);

//Muestra la fecha establecida en el calendario

System.out.println("Era: "+gc.get(Calendar.ERA));

System.out.println("Year: "+gc.get(Calendar.YEAR));

System.out.println("Month: "+gc.get(Calendar.MONTH));

System.out.println("Dia del mes: "+gc.get(Calendar.DAY_OF_MONTH));

System.out.println("D de la S en mes:"

+gc.get(Calendar.DAY_OF_WEEK_IN_MONTH));

System.out.println("No de semana: "+gc.get(Calendar.WEEK_OF_YEAR));

System.out.println("Semana del mes: "+gc.get(Calendar.WEEK_OF_MONTH));

System.out.println("Fecha: "+gc.get(Calendar.DATE));

System.out.println("Hora: "+gc.get(Calendar.HOUR));

System.out.println("Tiempo del dia: "+gc.get(Calendar.AM_PM));

System.out.println("Hora del dia: "+gc.get(Calendar.HOUR_OF_DAY));

System.out.println("Minuto: "+gc.get(Calendar.MINUTE));

System.out.println("Segundo: "+gc.get(Calendar.SECOND));

System.out.println("Dif. horaria: "+gc.get(Calendar.ZONE_OFFSET));

}

}

Nota: Es necesario importar estas clases con las siguientes líneas: import java.util.Calendar; import java.util.GregorianCalendar;

Ejemplo: Asociar una fecha de la clase Date al sistema de la clase GregorianCalendar

import java.util.*;

public class PruebaFechas {

public static void main(String arg[ ]) {

//Creamos una fecha (Instancia de la clase Date – Fecha Actual)

Date d = new Date();

//Creamos una instancia de la Clase GregorianCalendar (Sist de Calend)

GregorianCalendar gc = new GregorianCalendar();

//Establecemos la fecha del calendario hacia la fecha Actual

gc.setTime(d);

//Mostramos datos de la fecha

System.out.println("Year: "+gc.get(Calendar.YEAR));

System.out.println("Month: "+gc.get(Calendar.MONTH));

System.out.println("Hora: "+gc.get(Calendar.HOUR));

}

Page 70: Lenguaje de Programación II

UNIVERSIDAD PRIVADA TELESUP

70

Nota:

Si ud. desea asociar la nueva fecha del calendario a un objeto de tipo Date

puede utilizar la siguiente instrucción:

d.setTime(gc.getTimeInMillis());

Ejemplo:

Encontrar la cantidad de tiempo transcurrido entre dos fechas

import java.util.*;

public class PruebaFechas {

public static void main(String arg[])

{ //Creamos la fecha actual

Date d=new Date();

//Creamos una fecha : 08/Oct/2011

Date fn=new Date(111,9,8);

//Determ. la cantidad de milisegundos transcurrido entre ambas fechas

long difm=d.getTime()-fn.getTime();

//Convertimos la cantidad de tiempo transcurrido en dias

long difd= (difm /86400000L);

System.out.println("Dias transcurridos:"+difd);

}

}

Ejemplo:

Incrementar una cantidad de tiempo a una fecha

import java.util.*;

public class PruebaFechas {

public static void main(String arg[ ])

{ // Creamos una instancia de la Clase Calendar

Calendar cal = Calendar.getInstance();

Date date = new Date();

//Establecemos la fecha del calendario con la fecha actual

cal.setTime(date);

//Obtemos el año, mes y día del calendario

int year = cal.get(Calendar.YEAR);

int month = cal.get(Calendar.MONTH);

int day = cal.get(Calendar.DAY_OF_MONTH);

// Sumamos 20 días al campo día en el Calendar

cal.set(Calendar.DAY_OF_MONTH, day+20);

//Mostrar la nueva fecha

month = cal.get(Calendar.MONTH);

day = cal.get(Calendar.DAY_OF_MONTH);

year=cal.get(Calendar.YEAR);

System.out.println(day+"/"+(month+1)+"/"+year);

}

}

Page 71: Lenguaje de Programación II

UNIVERSIDAD PRIVADA TELESUP

71

3. CLASES DATEFORMAT Y SIMPLEDATEFORMAT

DateFormat es una clase abstract que pertenece al package java.text y no al

package java.util, como las vistas anteriormente. La razón es para facilitar todo lo

referente a la internacionalización, que es un aspecto muy importante en relación

con la conversión, que permite dar formato a fechas y horas de acuerdo con distintos

criterios locales. Esta clase dispone de métodos static para convertir Strings a fechas

y viceversa.

Recordar: formatear una fecha consiste en personalizar la presentación de las fechas.

EJERCICIOS PRÁCTICOS

Para este fin contamos con la clase SimpleDateFormat, la cual debemos importarla

desde el paquete java.text.SimpleDateFormat

import java.util.*;

public class PruebaFechas {

public static void main(String arg[]) throws ParseException {

//Establecemos los formatos para la apariencia de las fechas

SimpleDateFormat sdf1 = new SimpleDateFormat("dd-MM-yyyy hh:mm:ss");

SimpleDateFormat sdf2 = new SimpleDateFormat("dd-MM-yy");

//Convertir una Cadena Strint a tipo Date

Date d = sdf1.parse("12-04-1968 11:23:45"); // De String a

Fecha

//Convetir un Date a tipo String

String s = sdf2.format(d); //De Date a String

//Mostrar el String

System.out.println(s);

}

}

Page 72: Lenguaje de Programación II

UNIVERSIDAD PRIVADA TELESUP

72

TEMA 3

Crea un modelo de clases aplicando herencia de clases. Desarrolla un caso práctico aplicando herencia de clases.

Competencia:

Acceso Niveles

de Clases Herencia

y de

Page 73: Lenguaje de Programación II

UNIVERSIDAD PRIVADA TELESUP

73

Tema 03: Herencia de Clases y Niveles de Acceso

1. HERENCIA DE CLASES

Concepto:

La herencia de clases permite que se pueda definir nuevas clases basadas en

clases existentes, las cuales facilita re-utilizar código previamente desarrollado. Si

una clase deriva o extiende de otra, hereda todos sus atributos y métodos.

Las clases derivadas son conocidas como subclases y su antecesora es

denominada clase base.

La clase derivada puede añadir nuevas variables y métodos y/o redefinir las

variables y métodos heredados.

En cierta forma es como si la sub-clase (la clase derivada) “contuviera” un objeto

de la super-clase; en realidad lo “amplía” con nuevas variables y métodos.

Java permite múltiples niveles de herencia. No obstante, no permite que una clase

derive de varias (no es posible la herencia múltiple).

Recordar: se pueden crear tantas clases derivadas de una misma clase como se

quiera. La clase Derivada hereda métodos y propiedades de la clase Padre.

Adicionalmente, podemos añadir otros métodos o atributos a la clase hijo.

En Java para indicar que una clase deriva de otra se utiliza la palabra extends, como

por ejemplo:

public class Alumno extends Persona { ... }

Page 74: Lenguaje de Programación II

UNIVERSIDAD PRIVADA TELESUP

74

En el ejemplo anterior, se está creando la clase Alumno la cual deriva o hereda de la

clase Persona. Por tanto, la clase Alumno habrá heredado las propiedades y métodos

de la clase Persona.

Todas las clases de Java creadas por el programador tienen una super-clase.

Cuando no se indica explícitamente una super-clase con la palabra extends, la clase

deriva de java.lang.Object, que es la clase raíz de toda la jerarquía de clases de

Java. Como consecuencia, todas las clases tienen algunos métodos que han

heredado de la claseObject.

VENTAJAS Y PRECAUCACIONES DE SU USO

La principal ventaja del uso de herencia de clases es la reutilización de los

métodos de clases base, lo cual impide que se repita el mismo código

muchas veces dentro del desarrollo de una aplicación, y por otro lado favorece

el mantenimiento de los programas, porque cualquier cambio que se realice

en una clase base inmediatamente replica para todas las subclases que

extienden de esta, lo cual ahorra el tiempo a la labor de la programación.

Al diseñar nuestras clases es fundamental que primero se diseñe

adecuadamente un modelo inicial, utilizando metodologías basadas en el

análisis y diseño de sistemas orientado a objetos, de no ser así nuestro

diseño de clases con sus respectivas herencias, podría ser inconsistente e

inarticulado.

Page 75: Lenguaje de Programación II

UNIVERSIDAD PRIVADA TELESUP

75

2. NIVELES DE ACCESO

Es el mecanismo que permite definir el tipo de nivel de acceso a la información de los

objetos, (clases, métodos y propiedades).

En Java los niveles de acceso están dados de la siguiente forma:

public, private, protected y package.De esta forma se puede controlar el

acceso hacia las clases, métodos y propiedades y evitar un uso inadecuado.

Veamos en un caso práctico cómo funcionan los diferentes niveles de

encapsulamiento:

1. Creamos dos paquetes: paquete m y paquete n

2. Dentro del paquete m, tenemos dos clases; La clase A y la Clase B y

3. En el paquete n, tenemos también dos clases: la clase C (es una clase que

extiende de la clase B), y la clase D.

Ahora, ubiquémonos en la clase B y veamos en el siguiente cuadro los diferentes tipos

de acceso de esta clase hacia las demás clases del mismo paquete y de los demás.

Page 76: Lenguaje de Programación II

UNIVERSIDAD PRIVADA TELESUP

76

CONCEPTO Y NIVELES DE ACCESO EN JAVA

Explicación:

Si el nivel de encapsulamiento para la clase B es

public, esta clase será accesible a todas las

clases de su propio paquete y de los demás.

Si el nivel de encapsulamiento para la clase B

es private, esta clase no será accesible para

ninguna otra clase, ni del mismo paquete, ni de

otros.

Si el nivel de encapsulamiento para la clase B

es protected, esta clase será accesible

a todas las clases de su propio

paquete y solo a las clases

heredadas de otros paquetes.

Si el nivel de encapsulamiento para la clase B es package o default, esta

clase será accesible a todas las clases de su propio paquete únicamente.

Page 77: Lenguaje de Programación II

UNIVERSIDAD PRIVADA TELESUP

77

APLICACIONES PRÁCTICAS EN JAVA:

Dado a que la POO, es tomando de nuestra realidad humana, veamos el siguiente

ejemplo que nos ayudará a entender cómo funcionan los diferentes niveles de acceso:

En la vida cotidiana, el acceso a la información estál imitado por niveles de accesos:

Existe información confidencial a la cual únicamente nosotros podemos

acceder y no otras personas. Este tipo de información tiene un nivel de

seguridad muy alto. (para Java es acceso prívate)

Existe otro tipo de información que solo es de conocimiento de nuestro entorno

familiar y no del resto de personas. Este tipo de información cuenta con un

nivel de acceso menos restringido. (para Java es acceso package)

Existe otro tipo de información que es de

conocimiento únicamente de nuestros familiares y

allegados, más no de otras personas desconocidas.

Este tipo de información cuenta con nivel de acceso

con menos restricción que el caso anterior. (para

Java es acceso protected)

Existe otro tipo de información que es de

conocimiento público, todos podemos acceder a

ello. En este caso no existe ningún tipo de

restricción. (para Java es acceso public)

Page 78: Lenguaje de Programación II

UNIVERSIDAD PRIVADA TELESUP

78

Ejemplo:

LÓGICA DE NEGOCIOS

Crear el siguiente modelo de clases:

LÓGICA DE PRESENTACIÓN

Luego crear un formulario que instancie la subclase AluPresencial e invoque los

métodos heredados.

Page 79: Lenguaje de Programación II

UNIVERSIDAD PRIVADA TELESUP

79

CÓDIGO FUENTE – LÓGICA DE NEGOCIOS

Persona.java

package herencia;

import java.util.*;

public class Persona {

public String nombres;

public Date fnac;

public char sexo;

public double calcularEdad(){

Date hoy=new Date();

long hhoy=hoy.getTime();

long ffnac=fnac.getTime();

long diff=(hhoy-ffnac);

return (diff/86400000)/365;

}

public Persona(){

}

}

Alumnos.java

package herencia;

public class Alumnos extends Persona {

public int ciclo;

public int nota1;

public int nota2;

public int nota3;

public double calcularPromedio(){

double p;

p=(nota1+nota2+nota3)/3;

return p;

}

}

Page 80: Lenguaje de Programación II

UNIVERSIDAD PRIVADA TELESUP

80

Profesor. java

package herencia;

public class Profesor extends Persona {

public String especialidad;

public String titulo;

}

Administrativos. java

package herencia;

public class Administrativos extends Persona {

public double basico;

}

CÓDIGO FUENTE – LÓGICA DE PRESENTACIÓN

Instancia de la clase AluPresencial

AluPresencial obj=new AluPresencial();

Botón Procesar

private void btnprocesarActionPerformed(java.awt.event.ActionEvent

evt) {

obj.nombres=txtnom.getText();

int d=Integer.parseInt(txtdia.getText());

int m=Integer.parseInt(txtmes.getText());

int y=Integer.parseInt(txtyear.getText());

obj.fnac=new Date(y-1900,m-1,d);

obj.nota1=Integer.parseInt(txtn1.getText());

obj.nota2=Integer.parseInt(txtn2.getText());

obj.nota3=Integer.parseInt(txtn3.getText());

//Invocar los metodos

double edad=obj.calcularEdad();

double pro=obj.calcularPromedio();

//Mostrar resultantes

txtpro.setText(String.valueOf(pro));

txtedad.setText(String.valueOf(edad));

}

Page 81: Lenguaje de Programación II

UNIVERSIDAD PRIVADA TELESUP

81

TEMA 4

Planifica , diseña, implementa y formula un modelo de clase para representar una realidad aplicando herencias y polimorfismo.

Competencia:

Métodos Abstractos

y Interfaces Polimorfismo:

Page 82: Lenguaje de Programación II

UNIVERSIDAD PRIVADA TELESUP

82

Tema 04: Polimorfismo: interfaces y métodos abstractos

POLIMORFISMO

Poli (varios) – Morfismo (formas)

El polimorfismo permite que un objeto tenga distintos comportamientos dependiendo

del escenario donde actua el objeto.

Para aplicar el polimorfismo, debemos comprender previamente que son las

interfaces, los métodos abstractos y las implementaciones.

LAS INTERFACES

En Java una interfaz es un prototipo de clase que define la funcionalidad de un objeto

pero no lo implementa.

CARACTERÍSTICAS DE UNA INTERFACE:

Los métodos de una interfaz deben ser abstractos.

No representa a un objeto sino a un grupo de objetos. Por lo tanto, no usan

constructores, ni métodos estáticos, ni atributos de Objeto. (excepto variables

constantes de tipo FINAL)

En este nivel no podemos garantizar cómo lo hace, pero si sabemos qué hace.

Codificando una Interfaz en Java

Se debe reemplazar la palabra class por interface. Ejemplo: a continuación estamos

creando una interfaz de nombre Reproducible.

Reproducible.java

public interface Reproducible

{

// Aquí deben indicarse los métodos abstractos

// con los que se trabajarán

}

Page 83: Lenguaje de Programación II

UNIVERSIDAD PRIVADA TELESUP

83

MÉTODOS ABSTRACTOS

Son utilizados dentro de una interface, solo muestran la funcionalidad del objeto, pero

no incluyen la lógica del procedimiento (no hacen nada por ellos mismos).

Ejemplo:

public void play();

HERENCIA EN INTERFACES

Para darle un uso práctico a la interface: debemos crear una clase que herede de

dicha interfaz, en la cual se detallará la funcionalidad de los métodos declarados en

la interfaz.

¿Cómo realizar dicha herencia?

public class MP3 implements Reproducible

{

// Aquí debe implementarse el método play, al cual

// Se hizo mención de manera abstracta en la interfaz

}

Las implementaciones

Ahora dentro de esta clase debemos detallar el cómo se lleva a cabo la funcionalidad

específica, por lo que programaremos de la siguiente forma:

MP3.java public class MP3 implements Reproducible {

public String play() {

return "Reproduciendo MP3...";

}

}

AVI.java public class AVI implements Reproducible{

public String play() {

return "Reproduciendo AVI...";

}

}

Este es un método abstracto, no usa llaves (no tiene implementación) No tienen definido el Cómo, pero si el Qué

Page 84: Lenguaje de Programación II

UNIVERSIDAD PRIVADA TELESUP

84

LÓGICA DE PRESENTACIÓN

Veamos ahora cómo usar las implementaciones desde un formulario:

Declaramos a nivel de la clase

public class frmReproductor extends javax.swing.JFrame {

Reproducible[] lista=new Reproducible[3];

.

.

.

Método de usuario

public void cargar(){

lista[0]=new MP3();

lista[1]=new AVI();

lista[2]=new MP4();

}

Código: Evento -> ítem / itemStateChanged

private void cboOpcionesItemStateChanged(java.awt.event.ItemEvent evt) {

// TODO add your handling code here:

cargar();

int op=cboOpciones.getSelectedIndex();

txtresultado.setText(lista[op-1].play());

}

Page 85: Lenguaje de Programación II

UNIVERSIDAD PRIVADA TELESUP

85

Ventaja del Uso de Ias Interfaces

Se utiliza las interfaces cuando en el desarrollo de una aplicación, aún no

sabemos la lógica de los métodos, pero si conocemos cuales serán las

funcionalidades importantes.

Nos permite ocultar el código fuente de los métodos de nuestras clases, puesto

que solo al cliente tendríamos que suministrarle la interfaz y su ejecutable,

mientras que la lógica de nuestros métodos lo almacenaríamos en un servidor

de acceso restringido.

Una clase puede implementar más de una interface, representando una forma

alternativa de la herencia múltiple. A su vez, una interface puede derivar de

otra o incluso de varias interfaces, en cuyo caso incorpora todos los métodos

de las interfaces de las que deriva.

CASO PRÁCTICO

Crear una aplicación que use polimorfismo que utilice un método calcular para 2 tipos

de comprobantes de pago (factura y boleta)

Crear el proyecto interface con los siguientes paquetes:

Page 86: Lenguaje de Programación II

UNIVERSIDAD PRIVADA TELESUP

86

INTERFACE

Comprobante.java

package Logic;

public interface Comprobante {

public double[] calcular(double total); //Método Abstracto

}

IMPLEMENTACIONES

Factura.java package Logic;

public class Factura implements Comprobante {

public double[] calcular( double total ){

double consumo, impuesto, servicio,totalGeneral;

double[] lista=new double[5];

consumo = total/1.19;

impuesto = total - consumo;

servicio = total * 0.10;

totalGeneral = total + servicio;

lista[0] = consumo;

lista[1] = impuesto;

lista[2] = total;

lista[3] = servicio;

lista[4] = totalGeneral;

return lista;

}

}

Boleta.java package Logic;

public class Boleta implements Comprobante {

public double[] calcular(double total ){

double servicio,totalGeneral;

double[] lista=new double[3];

servicio = total * 0.10;

totalGeneral = total + servicio;

lista[0] = total;

lista[1] = servicio;

lista[2] = totalGeneral;

return lista;

}

}

Page 87: Lenguaje de Programación II

UNIVERSIDAD PRIVADA TELESUP

87

CAPA FACTORY (Creador del objeto según escenario seleccionado) ComprobanteFactory.java package Factory;

import Logic.*;

public class ComprobanteFactory {

public static int FACTURA = 1;

public static int BOLETA = 2;

public static double[] getComprobante( int tipo,double monto ){

double lista[]=new double[5];

if( tipo == FACTURA){

Factura objf=new Factura();

lista=objf.calcular(monto);

}

else if(tipo == BOLETA){

Boleta objb=new Boleta();

lista=objb.calcular(monto);

}

return lista;

}

}

LÓGICA DE PRESENTACIÓN

frmComprobante.java Botón Procesar

private void btnprocesarActionPerformed(java.awt.event.ActionEvent evt) {

// TODO add your handling code here:

String[] titulos = {"Consumo", "Impuesto", "Total", "Servicio", "Total

General"};

txtlista.setText("");

double monto = Double.parseDouble(txtmonto.getText());

int comp = cbocomp.getSelectedIndex();

double lista[];

lista = ComprobanteFactory.getComprobante(comp, monto);

for (int i = lista.length - 1; i >= 0; i--) {

txtlista.append(titulos[i] + " : " + String.valueOf(lista[i]) +

"\n");

}

}

Page 88: Lenguaje de Programación II

UNIVERSIDAD PRIVADA TELESUP

88

Lecturas Recomendadas

1. Crear la clase Fecha, con los siguientes métodos y propiedades:

a. decirEdadenSemanas(fnac)

Este método recepciona la fecha de nacimiento y devuelve la

edad de la persona en semanas (la respuesta debe mostrarse en

número entero, sin redondeo)

b. decirEstacion(fecha)

Este método recepciona una fecha y devuelve el nombre de la

estación en la que está ubicada dicha fecha.

c. mostrarFechas(fecha1,fecha2)

Este método recepciona dos fechas (fecha 1 debe ser menor que

fecha 2) y debe mostrar las fechas comprendias entre ambas

fechas.

d. mostrarCantDomingos(fecha1,fecha2)

Este método recepciona dos fechas y devuelve la cantidad de

días domingos comprendidos entre ambas fechas

Guarda el formulario con su respectivo nombre en una carpeta y a su vez

comprímela. Esta carpeta comprimida envíala a través de “Clase Fecha”

Polimorfismo en Java

http://javacafesv.blogspot.com/2009/05/polimorfismo-en-java.html

La Clase Date y GregorianCalendar http://www.dosideas.com/wiki/Fechas_En_Java

Actividades y Ejercicios

Page 89: Lenguaje de Programación II

UNIVERSIDAD PRIVADA TELESUP

89

2. Crear una aplicación Java que contenga un

formulario que nos permita ingresar un número y

luego desde una lista desplegable seleccionemos

el idioma con el que se traducirá. Luego de la

selección se mostrará el número en el idioma

seleccionado.

Crear las siguientes clases como

implementaciones de la interface Números e

implemente el método traducir () :

a. Clase Español

b. Clase Inglés

c. Clase Francés

El método traducir, debe recibir un número del 1 al 10 y

devolver su equivalente en letras, según el idioma de su

implementación.

Guarda el formulario en una carpeta con su respectivo

nombre y a su vez comprímela. Esta carpeta comprimida

envíala a través de “Interface”

Page 90: Lenguaje de Programación II

UNIVERSIDAD PRIVADA TELESUP

90

Autoevaluación

1. Un Wrapper es:

a. Es un tipo de dato primitivo de Java

b. Es un convertidor de tipos de datos

c. Es una clase de envoltura asociada a un tipo de dato primitivo

d. Es una clase desde donde se instancian todas las cadenas de texto

e. Es una clase que contiene operaciones matemáticas

2. Escriba los pasos necesarios para convertir la siguiente cadena de texto

a un tipo de dato double

String precio=”23.24”;

a. Decimal.parse(precio);

b. Convert.toDouble(precio);

c. String.toDouble(precio);

d. Double.parseDouble(precio);

e. Double.parse(precio);

3. Escriba la instrucción Java para crear la siguiente fecha: 16 de octubre de

2011

a. Date f=new Date(111,9,16); [f es relativo]

b. Datef=Date……

c. New Date…

d. String Date f

e. String new Date

4. Indique qué es lo que realiza el siguiente método:[Donde f1 es mayor que f2]

publiclong procesar(Date f1,Date f2)

{

longx=f1.getTime()-f2.getTime();

long d=(x/2592000000L);

return d;

}

a. Determina la cantidad de días transcurridos entre dos fechas

b. Determina la cantidad de años transcurridos entre dos fechas

c. Determina la cantidad de horas transcurridos entre dos fechas

d. Determina la cantidad de meses transcurridos entre dos fechas

e. Determina la cantidad de semanas transcurridos entre dos fechas

Page 91: Lenguaje de Programación II

UNIVERSIDAD PRIVADA TELESUP

91

5. Indique qué es lo que realizan las siguientes líneas:

Calendar cal = Calendar.getInstance();

Date date = new Date();

cal.setTime(date);

a. Crea un calendario

b. Crea un calendario y también un objeto fecha de tipo Date

c. Asocia una fecha de tipo Date al sistema de calendario manejado por la

clase Calendar

d. Crea una fecha de tipo Date y otra fecha de tipo Calendar

e. Crea una fecha actual y la valida dentro de la clase Calendar para

determinar si dicha fecha existe o no.

6. En herencia de clases, las clases derivadas o que extienden heredan

automáticamente:

a. Métodos – propiedades

b. Propiedades - estados

c. Métodos – estados

d. Estados

e. Interfaces

7. Para que un elemento no pueda ser accedido desde ninguna clase, se

debe definir el tipo de acceso:

a. <default>

b. protected

c. public

d. private

e. extends

8. Un método abstracto es:

a. Un método que usa el tipo de retorno void

b. Es un método que usa la palabra reservada implements

c. Es un método que no tiene implementación, solo se indica la acción,

pero no se detalla cómo se realiza dicha acción

d. Es un método que se ejecuta al momento de realizarse una instancia

e. Una acción que corresponde a la clase y no directamente a un objeto

instanciado

Page 92: Lenguaje de Programación II

UNIVERSIDAD PRIVADA TELESUP

92

9. Una interface es:

a. Una clase base a partir de la cual se heredan otras clases

b. Un prototipo que indica los procesos que realizará nuestra aplicación

sin implementarlos

c. Es el entorno de programación con el que interactúa el programador

d. Una clase que no contiene métodos.

e. Una clase que hereda de una clase base

10. De las siguientes alternativas cuál corresponde al polimorfismo:

a. Distintas formas de comportamiento que puede asumir un método u

objeto dependiendo del escenario donde se encuentre.

b. Distintos datos que puede recibir una variable.

c. Las distintas clases que pueden heredar de una clase base.

d. Los diferentes niveles de acceso

e. Distintos estados que puede asumir las propiedades de un objeto

instanciado.

Page 93: Lenguaje de Programación II

UNIVERSIDAD PRIVADA TELESUP

93

Resumen

UUNNIIDDAADD DDEE AAPPRREENNDDIIZZAAJJEE IIII::

Los Wrappers (envoltorios) son clases diseñadas para ser un complemento de los

tipos primitivos. Los tipos primitivos son los únicos elementos de Java que no son

objetos y encapsulan datos y los convierten a otros tipos. Las clases Wrapper

también proporcionan métodos para realizar otras tareas con los tipos

primitivos, tales como conversión con cadenas de caracteres en uno y otro

sentido.

Los datos cronológicos son manejados con las clases Date y GregorianCalendar, así

que todas las fechas y/o horas son instancias de estas clases. Las fechas están

relacionadas a una línea numérica de tiempo cuyo inicio es 0, el cual corresponde al

01/01/1970 a las 00:00 GMT. Cada fracción numérica de esta línea numérica

expresada en milisegundos representa a una fecha y hora. La clase Calendar es una

clase abstract que dispone de métodos para convertir objetos de la clase Date

en enteros que representan fechas y horas concretas. La clase

GregorianCalendar es la única clase que deriva de Calendar

La herencia de clases permite que se pueda definir nuevas clases basadas en clases

existentes, las cuales facilita re-utilizar código previamente desarrollado. Si una clase

deriva o extiende de otra, hereda todos sus atributos y métodos.

Los niveles de acceso son el mecanismo que permite definir el tipo de nivel de acceso

a la información de los objetos, (clases, métodos y propiedades). En Java los niveles

de acceso están dados de la siguiente forma: public, private, protected y package.

En el polimorfismo interviene una interface que define un prototipo de trabajo con

métodos abstractos los cuales son implementados posteriormente con diferentes

clases especificas para cada contexto, de esta forma cada método definido en la

interface tendrá un comportameinto distinto o forma distinta (poli - morfis).

Page 94: Lenguaje de Programación II

UNIVERSIDAD PRIVADA TELESUP

94

Page 95: Lenguaje de Programación II

UNIVERSIDAD PRIVADA TELESUP

95

Introducción

a) Presentación y contextualización En esta Unidad aprenderás a instalar un servidor de datos y a crear una base

de datos y sus elementos. También aprenderás a utilizar los comandos DDL Y

DML del Lenguaje de Consultas SQL

b) Competencias

Formula y ejecuta correctamente comandos del Lenguaje Estructurado de

Consultas (SQL).

c) Capacidades 1. Instala el servidor de base de datos e implementa las tablas de datos y

aplica los comandos DML encargados del mantenimiento de datos.

2. Crea esquemas de datos haciendo uso de la sentencia SELECT

aplicándolos a una sola tabla con todas sus variantes.

3. Crea esquemas de datos haciendo uso de la sentencia SELECT

aplicándolo a varias tablas y estableciendo la relación entre ellas.

4. Optimiza la estructura de la base de datos aplicando las sentencias

DDL

d) Actitudes Cumple con responsabilidad la presentación de los trabajos

encomendados a través de la plataforma virtual.

Desarrolla la creatividad, innovación, actitud emprendedora y el respeto

a la honestidad intelectual.

e) Presentación de ideas básicas y contenido esenciales de la Unidad.

La Unidad de Aprendizaje 03: Fundamentos Del Lenguaje Estructurado De Consultas SQL comprende el desarrollo de los siguientes temas:

Tema 01: Instalación del servidor de datos MySQL y comandos DML y

DDL

Tema 02: Uso del comando SELECT

Tema 03: Uso del comando SELECT con varias tablas

Tema 04: Uso de comandos DDL

Page 96: Lenguaje de Programación II

UNIVERSIDAD PRIVADA TELESUP

96

TEMA 1

Instala el servidor de base de datos e implementa las tablas de datos y aplica los comandos DML encargados del mantenimiento de datos.

Competencia:

Servidor Datos MySQL

del

DML y DDL

Instalación

de

y Comandos

Page 97: Lenguaje de Programación II

UNIVERSIDAD PRIVADA TELESUP

97

Desarrollo de los Temas

Tema 01: Instalación del Servidor de Datos MySQL y Comandos DML y DDL

1. INSTALAR EL SERVIDOR DE DATOS MYSQL

Existen dos maneras de instalar el Servidor de Datos Mysql, una

es haciendo la instalación independiente del servidor y otra

instalarlo usando un IDE como el Appserv.

¿Qué es el Appserv?

Es un IDE que instala y maneja de manera integrada a PHP, Apache Server, MySQL

y contiene un utilitario para administrar la base de datos llamado PhpMyAdmin. (en

nuestro caso, solo utilizaremos el MySQL)

¿Cómo consigo el instalador de Appserv?

El instalador lo puedes bajar de: http://www.appservnetwork.com/

Puedes bajar la versión: AppServ 2.5.9

¿Cómo instalar el Appserv?

Ejecute el instalador y aparecerá la siguiente ventana, haga click en el siguiente

Haga click en el botón: I Agree

Page 98: Lenguaje de Programación II

UNIVERSIDAD PRIVADA TELESUP

98

Haga click en el boton Next para confirmar la ruta donde se instalará el Appserv

Marcar las opciones que desea instalar (para nuestro caso solo bastará marcar:

MySQL Database) / Click en Next para continuar

Page 99: Lenguaje de Programación II

UNIVERSIDAD PRIVADA TELESUP

99

Ingrese nombre de servidor: localhost

Ingrese un correo electrónico: puede ser su correo

Indique el número de puerto en el que se ejecutará el Apache Server, para el

caso de nuestra asignatura señalaremos el puerto: 8082

Luego hacer click en el botón Next

Ingrese el password de administración de la base de datos, para el usuario

root, para nuestro caso, el password será: telesup

Reingrese el password

Marque las dos casillas:

Old Password Support (compatibilidad con versiones antiguas)

Enabled InnDB (habilitamos la arquitectura de Base de Datos InnoDB para

MySQL)

Luego hacer click en el boton Install

El proceso de la instalación habrá empezado.

Page 100: Lenguaje de Programación II

UNIVERSIDAD PRIVADA TELESUP

100

Haga click en el boton Finish para finalizar la instalación.

2. CONECTARNOS AL SERVIDOR DE BASE DE DATOS MySQL

Para conectarse al servidor, usualmente necesitamos de un nombre de usuario (login)

y de una contraseña (password), y si el servidor al que nos deseamos conectar está

en una máquina diferente de la nuestra, necesitaremos indicar el nombre del servidor

o la dirección IP de dicho servidor, y si el servidor es la misma máquina donde nos

encontramos utilizaremos el nombre localhost. Una vez que conocemos estos tres

valores, podemos conectarnos usando la consola de trabajo o utilizando un IDE de

MySQL como el MySQLYog. Nosotros utilizaremos la consola de trabajo.

Para ingresar a la consola de trabajo, acceda a: Inicio/Ejecutar/ escriba en la caja

CMD y luego presione ENTER. En la consola de texto escriba:

C:\Documents and Settings\Pepe.PC01>mysql -h localhost -u root –p

Cuando ejecutamos este comando, se nos pedirá que proporcionemos también la

contraseña para el nombre de usuario que estamos usando. (para nuestro caso

telesup)

Page 101: Lenguaje de Programación II

UNIVERSIDAD PRIVADA TELESUP

101

Si la conexión al servidor MySQL se pudo establecer de manera satisfactoria,

recibiremos el mensaje de bienvenida y estaremos en el prompt de mysql:

Welcome to the MySQL monitor. Commands end with ; or \g.

Your MySQL connection id is 1 to server version: 5.0.24a-community-nt-

log

Type 'help;' or '\h' for help. Type '\c' to clear the buffer.

mysql>

Este prompt nos indica que mysql está listo para recibir comandos.

Después de que nos hemos conectado de manera satisfactoria, podemos

desconectarnos en cualquier momento al escribir "quit", "exit".

La mayoría de los ejemplos siguientes asume que estamos conectados al servidor, lo

cual se indica con el prompt de mysql. ( mysql> )

3. COMANDOS PARA IMPLEMENTAR UNA BASE DE DATOS

a. Crear Una Base De Datos

mysql> create database Comercial;

Query OK, 1 row affected (0.06 sec)

b. Visualizar La Lista De Base De Datos

mysql> show databases;

+-----------------------+

| Database |

+-----------------------+

| Comercial |

+-----------------------+

10 rows in set (0.36 sec)

mysql>

c. Activar Una Base De Datos

mysql> use Comercial;

Page 102: Lenguaje de Programación II

UNIVERSIDAD PRIVADA TELESUP

102

d. Crear Una Tabla

Crearemos dentro de la base de datos Comercial las siguientes tablas, las cuales

son servirán en los futuros ejemplos.

Tabla Productos

mysql>CREATE TABLE producto (

->codpro char(3) NOT NULL,

-> nompro varchar(25) NOT NULL,

-> marpro varchar(15) NOT NULL,

-> prepro double default NULL,

-> stockpro int(11) default NULL,

-> codcat char(2) NOT NULL,

-> PRIMARY KEY (codpro)

->) ENGINE=MyISAM DEFAULT CHARSET=utf8;

Nota: La columna de la tabla que servirá de dato distintivo único para registro

recibe el nombre de campo clave.

Tabla Categoria

mysql>CREATE TABLE categoria (

-> codcat varchar(2) NOT NULL,

-> nomcat varchar(50) NOT NULL,

-> PRIMARY KEY (codcat)

-> ) ENGINE=MyISAM DEFAULT CHARSET=utf8;

Tabla Clientes

mysql>CREATE TABLE clientes (

-> codcli varchar(3) NOT NULL,

-> apecli varchar(50) NOT NULL,

-> nomcli varchar(50) NOT NULL,

-> dircli varchar(50) NOT NULL,

-> ruccli varchar(50) NOT NULL,

-> fncli date NOT NULL,

-> distcli varchar(50) NOT NULL,

-> PRIMARY KEY (codcli));

Query OK, 0 rows affected (0.13 sec)

mysql>

Page 103: Lenguaje de Programación II

UNIVERSIDAD PRIVADA TELESUP

103

Tabla Vendedores

mysql>CREATE TABLE vendedores (

->codvend varchar(2) NOT NULL,

->apevend varchar(45) NOT NULL,

->nomvend varchar(45) NOT NULL,

->PRIMARY KEY (codvend));

Query OK, 0 rows affected (0.13 sec)

mysql>

Tabla Facturas

mysql>CREATE TABLE facturas (

->nrofac varchar(6) NOT NULL,

->codcli varchar(3) NOT NULL,

->fecfac date NOT NULL,

->stfac double default NOT NULL,

->igvfacdouble defaultNOT NULL,

->mpfac double defaultNOT NULL,

->codvend varchar(2) NOT NULL,

->PRIMARY KEY (nrofac));

Query OK, 0 rows affected (0.13 sec)

mysql>

Tabla Detfac

mysql>CREATE TABLE detfac (

->nrofac varchar(6) NOT NULL,

->codpro varchar(3) NOT NULL,

->cant int(11)NOT NULL,

->ptotal double defaultNOT NULL);

Query OK, 0 rows affected (0.13 sec)

mysql>

LOS TIPOS DE DATOS

Que puede haber en un campo, se pueden agrupar en tres grandes grupos:

a. Tipos numéricos

b. Tipos de Fecha

c. Tipos de Cadena

Page 104: Lenguaje de Programación II

UNIVERSIDAD PRIVADA TELESUP

104

a. Tipos numéricos:

Existen tipos de datos numéricos, que se pueden dividir en dos grandes grupos, los

que están en coma flotante (con decimales) y los que no.

Tipo de Campo

Tamaño de Almacenamiento

Descripción

TINYINT 1 byte

Es un número entero con o sin signo. Con signo el rango de valores válidos va desde -128 a 127. Sin signo, el rango de valores es de 0 a 255

SMALLINT 2 bytes

Número entero con o sin signo. Con signo el rango de valores va desde -32768 a 32767. Sin signo, el rango de valores es de 0 a 65535.

BIT o BOOL

Un número entero que puede ser 0 ó 1

MEDIUMINT 3 bytes

Número entero con o sin signo. Con signo el rango de valores va desde -8.388.608 a 8.388.607. Sin signo el rango va desde 0 a16777215.

INT o INTEGER 4 bytes

Número entero con o sin signo. Con signo el rango de valores va desde -2147483648 a 2147483647. Sin signo el rango va desde 0 a 429.4967.295

BIGINT 8 bytes

Número entero con o sin signo. Con signo el rango de valores va desde -9.223.372.036.854.775.808 a 9.223.372.036.854.775.807. Sin signo el rango va desde 0 a 18.446.744.073.709.551.615.

FLOAT(X) 4 ú 8 bytes

Número pequeño en coma flotante de precisión simple. Los valores válidos van desde -3.402823466E+38 a -1.175494351E-38, 0 y desde 1.175494351E-38 a 3.402823466E+38.

DOUBLE o REAL

8 bytes

Número en coma flotante de precisión doble. Los valores permitidos van desde -1.7976931348623157E+308 a -2.2250738585072014E-308, 0 y desde 2.2250738585072014E-308 a 1.7976931348623157E+308

DECIMAL(M,D) o NUMERIC

M+2 bytes sí D > 0, M+1 bytes sí D = 0

Número en coma flotante desempaquetado. El número se almacena como una cadena

Page 105: Lenguaje de Programación II

UNIVERSIDAD PRIVADA TELESUP

105

b.Tipos fecha:

Tipo de Campo

Tamaño de Almacenamiento

Descripción

DATE 3 bytes

Tipo fecha, almacena una fecha. El rango de valores va desde el 1 de enero del 1001 al 31 de diciembre de 9999. El formato de almacenamiento es de año-mes-dia

DATETIME 8 bytes

Combinación de fecha y hora. El rango de valores va desde el 1 de enero del 1001 a las 0 horas, 0 minutos y 0 segundos al 31 de diciembre del 9999 a las 23 horas, 59 minutos y 59 segundos. El formato de almacenamiento es de año-mes-dia horas:minutos:segundos

TIMESTAMP 4 bytes

Combinación de fecha y hora. El rango va desde el 1 de enero de 1970 al año 2037. El formato de almacenamiento depende del tamaño del campo:

TIME 3 bytes

Almacena una hora. El rango de horas va desde -838 horas, 59 minutos y 59 segundos a 838, 59 minutos y 59 segundos. El formato de almacenamiento es de 'HH:MM:SS'

YEAR 1 byte

Almacena un año. El rango de valores permitidos va desde el año 1901 al año 2155. El campo puede tener tamaño dos o tamaño 4 dependiendo de si queremos almacenar el año con dos o cuatro dígitos

c.Tipos de cadena:

Tipo de campo

Tamaño de

Almacenamiento

Descripción

CHAR(n) n bytes

Almacena una cadena de longitud fija. La cadena podrá contener desde 0 a 255 caracteres.

VARCHAR(n) n +1 bytes Almacena una cadena de longitud variable. La cadena podrá contener desde 0 a 255 caracteres.

TINYBLOB, TINYTEXT Longitud+1 bytes Columna con una longitud máxima de 255 caracteres.

BLOB, TEXT Longitud +2 bytes Un texto con un máximo de 65535 caracteres.

MEDIUMBLOB, MEDIUMTEXT

Longitud +3 bytes Un texto con un máximo de 16.777.215 caracteres.

LONGBLOB, LONGTEXT Longitud +4 bytes

Un texto con un máximo de caracteres 4.294.967.295. Hay que tener en cuenta que debido a los protocolos de comunicación los paquetes pueden tener un máximo de 16 Mb.

ENUM('value1','value2',...) 1 ó dos bytes

dependiendo del número de valores

Campo que puede tener un único valor de una lista que se especifica. El tipo Enum acepta hasta 65535 valores distintos

SET('value1','value2',...) 1, 2, 3, 4 ó 8 bytes, dependiendo del

número de valores

Un campo que puede contener ninguno, uno ó varios valores de una lista. La lista puede tener un máximo de 64 valores.

Page 106: Lenguaje de Programación II

UNIVERSIDAD PRIVADA TELESUP

106

3. INSERTAR REGISTROS A LAS TABLAS

Utilizaremos el comando INSERT INTO. En el primer ejemplo se inserta un registro y

se llena datos en todas las columnas y en el segundo caso, se llena datos solo en

algunas columnas.

insert into vendedores values('04','Torres','Raquel');

insert into vendedores(codvend,apevend) values('04','Vega');

Insertar registros para las demás tablas

Tabla Categoria

insert into categoria(codcat,nomcat) values ('01','Abarrotes')

insert into categoria(codcat,nomcat) values ('02','Lacteos')

insert into categoria(codcat,nomcat) values ('03','Limpieza'),

Tabla Producto

insert into producto(oodpro,nompro,marpro,prepro,stockpro,codcat) values

('001','Aceite','Primor',4.99,100,'01')

insert into producto(oodpro,nompro,despro,marpro,prepro,stockpro,codcat) values

('002','Jabon','Palmolive',2.5,50,'03')

insert into producto(oodpro,nompro,despro,marpro,prepro,stockpro,codcat)

values('003','Leche','Gloria',9.5,35,'02')

insert into producto(oodpro,nompro,despro,marpro,prepro,stockpro,codcat) values

('004','Arroz','Pasaina',3.60,100,'01')

Tabla Clientes

insert into clientes(codcli,apecli,nomcli,dircli,ruccli,fncli,distcli) values

('001','Calle Barrera','Eduardo','Las Palmeras','13254698745','1975-05-12','Lince')

insert into clientes(codcli,apecli,nomcli,dircli,ruccli,fncli,distcli,obscli,fotocli)

values('002','Torres Enciso','Raquel','San Felipe','12557896321','1980-12-

05','Chorrillos')

insert into clientes(codcli,apecli,nomcli,dircli,ruccli,fncli,distcli,obscli,fotocli)

values ('003','Atunga Vergara','Jose','San Felipe','22548796354','1990-12-05','Lince')

Page 107: Lenguaje de Programación II

UNIVERSIDAD PRIVADA TELESUP

107

Tabla Vendedores

insert into vendedores(codvend,apevend,nomvend) values ('01','Avellaneda','Raul')

insert into vendedores(codvend,apevend,nomvend) values ('02','Sanchez','Oscar')

Tabla Facturas

insert into facturas(nrofac,codcli,fecfac,stfac,igvfac,mpfac,codvend) values

('000001','002','2003-05-20',30.51,5.49,36.00,'02')

insert into facturas(nrofac,codcli,fecfac,stfac,igvfac,mpfac,codvend) values

('000002','001','2004-05-17',20.74,3.73,24.47,'01')

insert into facturas(nrofac,codcli,fecfac,stfac,igvfac,mpfac,codvend) values

('000003','002','2003-05-12',28.80,5.18,33.98,'01')

Tabla Detfac

insert into detfac(nrofac,codpro,cant,ptotal) values ('000001','002',3,7.50)

insert into detfac(nrofac,codpro,cant,ptotal) values ('000001','003',2,28.50)

insert into detfac(nrofac,codpro,cant,ptotal) values ('000002','003',1,9.50)

insert into detfac(nrofac,codpro,cant,ptotal) values ('000002','001',3,14.97)

insert into detfac(nrofac,codpro,cant,ptotal) values ('000003','002',2,5.00)

insert into detfac(nrofac,codpro,cant,ptotal) values ('000003','003',2,19.00)

insert into detfac(nrofac,codpro,cant,ptotal) values ('000003','001',2,9.98)

4. ELIMINN REGISTROAR U

Utilizaremos el comando DELETE. En el primer ejemplo se eliminan todos

los registros de la tabla y en el segundo caso, se eliminan los

registros que cumplan con la condición.

Delete from vendedores;

Delete from vendedores where codvend=’02’;

5. MODIFICAR LOS DATOS DE UN REGISTRO

Utilizaremos el comando UPDATE. En el ejemplo, se modifica el apellido del vendedor

cuyo código es 02.

Update vendedores set apeven='Vidal' where codven='02';

Page 108: Lenguaje de Programación II

UNIVERSIDAD PRIVADA TELESUP

108

6. ESTABLECER RELACIONES ENTRE TABLAS E INTEGRIDAD REFERENCIAL

Establecer Relaciones Permanentes entre las dos Tablas

Para establecer las relaciones entre tablas se debe tener presente lo siguiente:

Las tablas que se van a relacionar tienen que ser tipo InnoDb (InnoDB es el primer

tipo de tabla que permite definir restricciones de claves foráneas para garantizar la

integridad de los datos).

Usar sintaxis FOREIGN KEY (campo_fk) REFERENCES

nombre_tabla(nombre_campo).

Crear un índice en el campo que ha sido declarado claveforánea

Es necesario el uso de índices para que la verificación de las claves foráneas

sean más rápidas.

Vamos a ver un ejemplo de una definición de 2 tablas relacionadas. Productos y

Categorías.

CREATE TABLEcategoria

(

codcatchar(2)NOT NULL,

nombre VARCHAR(30),

PRIMARY KEY (codcat)

) TYPE = INNODB;

CREATE TABLEproducto

(

codprochar(3)INTNOT NULL,

nomprovarchar(20) NOT NULL,

prepro double NOT NULL,

stockpro int NOT NULL,

codcat char(2)NOT NULL,

PRIMARY KEY(codpro),

INDEX (codpro),

FOREIGN KEY (codcat) REFERENCEScategoria(codcat)

) TYPE = INNODB;

Relación Permanente entre las dos tablas (entre los campos communes de las dos

tablas)

Page 109: Lenguaje de Programación II

UNIVERSIDAD PRIVADA TELESUP

109

Luego insertar registros en la tabla productos

Insert into producto(codpro,nompro,prepro,stockpro,codcat)

values('001','Detergente',9.59,100,’01’);

Insert into producto(codpro,nompro,prepro,stockpro,codcat)

values('002','Jabón',1.59,29,’01’);

Insert into producto(codpro,nompro,prepro,stockpro,codcat)

values('002','Jabón',1.59,29,’01’);

Insert into producto(codpro,nompro,prepro,stockpro,codcat)

values('003','Fideos',3.50,15,’02’);

Luego insertar registros en la tabla categorias.

Insert into categoría values('01','Limpieza');

Insert into categoría values('02','Abarrotes');

INTEGRIDAD REFERENCIAL

Es el mecanismo de la base de datos que impide el ingreso de registros incongruentes

a la relación establecida entre dos tablas.

Insert into producto(codpro,nompro,prepro,stockpro,codcat)

values('003','Atun',3.99,25,’03’);

Al ejecutar esta última orden se producirá el siguiente tipo de error:

ERROR DE INTEGRIDAD REFERENCIAL: (no es posible insertar este último

registro).

Debido a que no se puede insertar un producto relacionado a una categoría no

existente. (no existe la categoría 03). Tampoco será posible eliminar una categoría

debido a que esta categoría tiene registros que relacionan con datos de la tabla

productos.

Para eliminar este tipo de registros con claves foráneas, existe lo que se llama

eliminación en CASCADA, en la que todos los registros relacionados se eliminan

según las relaciones de claves foráneas.

Page 110: Lenguaje de Programación II

UNIVERSIDAD PRIVADA TELESUP

110

Para llevar a cabo una eliminación de todos los registros relacionados por las claves

foráneas en distintas tablas se usa la función "ON DELETE CASCADE".

Si se especifica ON DELETE CASCADE, y una fila en la tabla padre es eliminada,

entonces se eliminarán las filas de la tabla hijo cuya clave foránea sea igual al valor de

la clave referenciada en la tabla padre. Esta acción siempre ha estado disponible en

MySQL.

Veamos un ejemplo de eliminación en cascada:

ALTER TABLEcategoría ADD FOREIGN KEY(codcat)

REFERENCESproducto (codcat) ON DELETECASCADE;

Con esta sentencia, ya tendremos dispuesta la tabla para que se pueda eliminar en

cascada. Por lo tanto, si queremos eliminar ahora al cliente "Ana Botella", tan sólo

tendríamos que ejecutar lo siguiente:

DELETEFROM producto WHERE codcat=’02’;

Page 111: Lenguaje de Programación II

UNIVERSIDAD PRIVADA TELESUP

111

TEMA 2

Crea esquemas de datos haciendo uso de la sentencia SELECT aplicándolos a una sola tabla con todas sus variantes.

Competencia:

Comando Select

del Uso

Page 112: Lenguaje de Programación II

UNIVERSIDAD PRIVADA TELESUP

112

Tema 02: Uso del Comando SELECT

1. CREACIÓN DE ESQUEMAS DE DATOS SIMPLES

La sentencia SELECT es usada para obtener la información guardada en una

tabla.

a. Mostrar las tablas existentes en la base de datos

mysql> use Comercial;

mysql>show tables;

b. Mostrar el contenido de una tabla

mysql>select * from producto;

mysql>select codpro,nompro,prepro from producto;

c. Establecer un alias para una columna

mysql>select codpro,nompro as nombrefrom producto;

d. Concatenar varias columnas

mysql>select concat(apecli+’ ’+nomcli)as nombreCompleto from

Clientes;

e. Ordenar los datos de un listado (ascendentemente y descendentemente)

mysql>select apecli,nomcli from Clientes order by apecli;

mysql>select apecli,nomcli from Clientes order by apecli desc;

f. No incluir datos repetidos

mysql>select distinctapecli from Clientes;

Page 113: Lenguaje de Programación II

UNIVERSIDAD PRIVADA TELESUP

113

g. Limitar la cantidad de filas en la respuesta

limit 0,1 : desde la fila 0, visualizar 1 fila

mysql>select codcli from clientes order by codcli desc limit 0,1;

2. CREACIÓN DE ESQUEMAS DE DATOS CON CONDICIONALES

a. Listas con criterios o filtros

mysql>select codcli,apecli from clientes where apecli='Calle Barrera';

Mostrar a los clientes cuyos apellidos sean Calle Barrera

mysql>select codcli,apecli from clientes where apecli='Atunga Vergara' or

apecli='Torres Enciso';

Mostrar a los clientes cuyos apellidos sean Atunga Vergara o Torres Enciso

mysql>select codcli,apecli,discli from clientes where dircli like ‘Av%’;

Mostrar a los clientes cuya dirección sea una Avenida (es decir cuya dirección empiece con

Av)

Nota: El comodin % representa a un conjunto de caracteres no

determinados y se utiliza al establecer una condición con datos

alfabéticos

mysql>select codcli,apecli,discli from clientes where nomcli like ‘%a’;

Mostrar a los clientes cuyos nombres terminen con a

mysql>select codcli,apecli,discli from clientes where apecli like ‘%an%’;

Mostrar a los clientes cuyo apellido tenga en su interior las letras an

mysql>select codcli,apecli,discli from clientes where apecli like ‘_o_e%’;

Mostrar a los clientes cuyo apellido tenga como segundo caracter o y como cuarto caracter e.

Nota: El comodin representa a un caracter no determinado

Page 114: Lenguaje de Programación II

UNIVERSIDAD PRIVADA TELESUP

114

mysql>select codpro,nompro,stock from Producto where stockpro<100;

Mostrar los productos cuyo stock sea inferior a 100

mysql>select codpro,nompro,stock from Producto where stockpro>=50 and

stockpro=<100;

Mostrar los productos cuyo stock esté entre 50 a 100 unidades

b. Otras formas de condicionales

mysql>select codpro,nompro,stockpro from Producto where stockpro

between 50 and 100;

Es otra manera para mostrar los productos cuyo stock esté entre 50 a 100 unidades

mysql>select codcli,apecli,discli from clientes where distcli in

("Lince","Ate");

3. CREACIÓN DE ESQUEMAS DE DATOS USANDO FUNCIONES DE MySql

a. Redondea un dato numérico (en este caso redondea la columna prepro con dos

decimales)

mysql>select nompro,round(prepro,2) from producto;

b. Rellena un dato con un determinado caracter (en este caso rellena con asteriscos

el lado izquierdo del dato precio hasta completar un ancho de 12 caracteres)

mysql>select nompro,lpad(prepro,12,"*")from producto;

Nota: para conocer todas las funciones que pueden utilizarse en MySQL, consulte:

http://dev.mysql.com/doc/refman/5.0/es/functions.html

Page 115: Lenguaje de Programación II

UNIVERSIDAD PRIVADA TELESUP

115

TEMA 3

Crea esquemas de datos haciendo uso de la sentencia SELECT aplicándolos a varias tablas y estableciendo la relación entre ellas.

Competencia:

Select varias tablas

del Comando Uso

con

Page 116: Lenguaje de Programación II

UNIVERSIDAD PRIVADA TELESUP

116

Tema 03: Uso del comando Select con varias

tablas

1. CREACIÓN DE ESQUEMAS DE DATOS UTILIZANDO RELACIONES

TEMPORALES ENTRE TABLAS

Para visualizar el contenido de dos o más tablas, estas deben relacionarse entre sí a

través de los campos comunes, esto nos permitirá establecer la cardinalidad de

elementos a fin de que los datos que se muestren sean congruentes.

Existen dos maneras de realizar esta operación:

a. Usando la clausula JOIN

Esta clausual nos permite establecer relaciones temporales al momento de crear un

esquema de datos con el comando SELECT. La cláusula JOIN permite conseguir una

correspondencia cardinal entre los elementos de dos o más tablas.Ejemplo:

mysql>select producto.nompro,categoria.nomcat

-> from categoria inner join producto

->on categoria.codcat=producto.codcat;

Establece las tablas sobre las que se realizarán la relación

Se establece el campo común por medio del cual se establecerá la relación entre ambas tablas.

Se indica el nombre del campo antes de la tabla

Page 117: Lenguaje de Programación II

UNIVERSIDAD PRIVADA TELESUP

117

Nota: Como estamos trabajando con dos tablas, es necesario que antes del nombre

del campo especifiquemos el nombre de la tabla desde donde tomamos dicho campo.

Ahora veamos el mismo usando alias (el alias representa al nombre de la tabla):

mysql>select p.nompro,c.nomcat

-> from categoria c inner join product p

-> on c.codcat=p.codcat;

Los ejemplos anteriores permiten visualizar el contenido de las tablas producto y

categoría estableciendo la relación entre ambas tablas a través del campo codcat

(campo común entre ambos). La cláusula INNER muestra a los registros que tengan

correspondencia cardinal entre ambas tablas.

En lugar de INNER se pueden utilizar los siguientes tipos de relaciones:

El NATURAL [LEFT] JOIN de dos tablas, se define semánticamente

equivalente a un INNER JOIN o LEFT JOIN con una cláusula USING que

nombra todas las columnas que existen en ambas tablas.

INNER JOIN y, (coma) son semánticamente equivalentes en la ausencia de

una condición de JOIN: ambos producen un producto cartesiano entre las

tablas especificadas (esto es, cada registro en la primera tabla se junta con

cada registro en la segunda tabla).

RIGHT JOIN, funciona análogamente a LEFT JOIN. Para mantener el

código portable entre bases de datos, se recomienda que use LEFT JOIN en

lugar de RIGHT JOIN.

STRAIGHT_JOIN, es idéntico a JOIN excepto que la

tabla de la izquierda se lee siempre antes que la de la

derecha. Esto puede usarse para aquéllos casos (escasos)

en que el optimizador de join pone las tablas en orden

incorrecto.

Page 118: Lenguaje de Programación II

UNIVERSIDAD PRIVADA TELESUP

118

b. Establecer Relaciones Temporales Usando Operadores Relacionales (Usando Where)

También podemos establecer relaciones con la cláusula WHERE, para esto es

necesario contar con campos comunes en ambas tablas.

Ejemplo:

mysql> select p.codpro,p.nompro,c.nomcat from producto p, categoria c

-> where p.codcat=c.codcat;

+---------+--------+-----------+

| codrpro | nompro | nomcat |

+---------+--------+-----------+

| 001 | Aceite | Abarrotes |

| 002 | Jabon | Limpieza |

| 003 | Leche | Lacteos |

3 rows in set (0.00 sec)

Otro ejemplo de un esquema de datos que usa varias tablas:

mysql> select f.nrofac,c.apecli,f.fecfac,d.codpro,p.nompro,d.cant

-> from facturas f, clientes c, detfac d, producto p

-> where f.nrofac=d.nrofac and c.codcli=f.codcli and

-> d.codpro=p.codrpro;

+--------+--------------------+------------+--------+--------+------+

| nrofac | apecli | fecfac | codpro | nompro | cant |

+--------+--------------------+------------+--------+--------+------+

| 000001 | Torres Enciso | 2003-05-20 | 002 | Jabon | 3 |

| 000001 | Torres Enciso | 2003-05-20 | 003 | Leche| 2 |

| 000002 | Calle Barrera |2004-05-17 | 003 | Leche| 1 |

| 000002 | Calle Barrera | 2004-05-17 | 001 | Aceite | 3 |

| 000003 | Atunga Vergara | 2003-05-12 | 002 | Jabon | 2 |

| 000003 | Atunga Vergara | 2003-05-12 | 003 | Leche | 2 |

| 000003 | Atunga Vergara | 2003-05-12 | 001 | Aceite | 2 |

+--------+--------------------+------------+--------+--------+------+

3 rows in set (0.03 sec)

mysql>

2. ESQUEMA DE DATOS CON AGRUPACION DE DATOS

Si deseamos conocer cuántos productos tiene cada categoría en la tabla productos,

debemos agrupar la consulta por categorías.La consulta es la siguiente:

mysql>SELECT c.nomcat, COUNT(p.codpro) FROM producto p, categoria c

where p.codcat=c.codcat GROUP BY p.codcat;

+-------------+-----------------+

| nomcat | COUNT(p.codpro) |

+-------------+-----------------+

| Abarrotes | 2 |

| Lacteos | 1 |

| Limpieza| 1 |

+-------------+-----------------+

Page 119: Lenguaje de Programación II

UNIVERSIDAD PRIVADA TELESUP

119

6 rows in set (0.00 sec)

Se debe notar que se ha usado una cláusula GROUP BYpara agrupar todos los

registros de cada categoría.

En efecto, el uso de la función COUNT( )usado con la cláusula GROUP BY es muy útil

para contar la cantidad de registros existentes en cada grupo.

Si ud. desea condicionar un esquema de datos agrupado con Group by debe utilizar la

cláusula HAVING en lugar de WHERE. Ejemplo:

mysql>SELECT c.nomcat,COUNT(p.codpro) FROM producto p, categoria c

where p.codcat=c.codcat GROUP BY p.codcat HAVING c.codcat=’01’;

En lugar de esta función se puede utilizar cualquiera de las siguientes funciones de

manera similar:

Avg() Calcula el promedio

Sum() Calcula la suma

Max() Halla el máximo valor

Min() Halla el mínimo valor

Std() Halla la desviación estándar

Nota: Si se usara estas funciones en un esquema de datos no agrupados, la

operación se aplicaría para toda la tabla.

Page 120: Lenguaje de Programación II

UNIVERSIDAD PRIVADA TELESUP

120

3. CREAR ESQUEMAS DE DATOS ANIDADOS

Un comando select se puede incluir dentro de otro, hasta 32 niveles.

Ejemplo:

mysql>select codpro,nompro from producto

where prepro<=(SELECT avg(p.prepro) FROM producto p, categoria c

where p.codcat=c.codcat and p.codpro='001' GROUP BY p.codcat);

+-------------+-----------------+

| codpro | nompro |

+-------------+-----------------+

| 001 | leche |

| 002 | azúcar |

| 004 | fideos |

+-------------+-----------------+

3 rows in set (0.00 sec)

Este ejemplo visualizaremos la lista de los productos cuyos precios suman menores o

iguales al promedio del precio del producto con código 001.

4. CREACIÓN DE VISTAS

Una vista es el encapsulamiento de un comando select. Una vista está asociada a una

sentencia select específica y es guardada bajo un nombre distintivo. Al ejecutar la

vista visualizaremos la ejecución del comando select encapsulado. Se pueden

construir nuevas sentencias select usando vistas en lugar de tablas.

Si desea modificar, eliminar e insertar registros tendrá que hacerlo en la tabla física,

mas no en la vista.

Creación de una vista

mysql>Create view ProductoView as select p.codpro,p.nompro,c.nomcat

from producto p, categoria c where p.codcat=c.codcat;

Se crea una vista con la ejecución del select especificado.

Visualizar el contenido de la vista

mysql>Select * from ProductoView;

Visualizamos la ejecución de la vista ProductoView

Page 121: Lenguaje de Programación II

UNIVERSIDAD PRIVADA TELESUP

121

Modificar la estructura de una vista

mysql>Alter view ProductoView as select p.codpro,p.nompro from

producto;

Modificamos la estructura de la vista, este será el comando select que quedará

encapsulado dentro de la vista.

No olvide que la vista no contiene datos, solo contiene un comando select encapsulado

Page 123: Lenguaje de Programación II

UNIVERSIDAD PRIVADA TELESUP

123

Tema 04: Uso de comandos DDL

1. USO DE COMANDOS DDL

DROP DATABASE

Sintaxis del comando:

DROP {DATABASE | SCHEMA} [IF EXISTS] db_name

DROP DATABASE borrar todas las tablas en la base de datos y borrar la base de

datos. Sea muy cuidadoso con este comando! Para usar DROP DATABASE,

necesita el permiso DROP en la base de datos.

IF EXISTS se usa para evitar un error si la base de datos no existe.

ALTER TABLE

Le permite cambiar la estructura de una tabla existente. Por ejemplo, puede añadir

o borrar columnas, crear o destruir índices, cambiar el tipo de columnas existentes,

o renombrar columnas o la misma tabla. Puede cambiar el comentario de la tabla y

su tipo.

Ejemplos prácticos:

1. Agregar un campo en la tabla productos

Se requiere agregar el campo despro (descripción del producto) después del

campo nombre del producto.

mysql>alter table producto add column despro varchar(25) after nompro;

Query OK, 0 rows affected (0.14 sec)

Records: 0 Duplicates: 0 Warnings: 0

mysql>

Nota: en lugar de la palabra alter se puede utilizar before

Page 124: Lenguaje de Programación II

UNIVERSIDAD PRIVADA TELESUP

124

2. Cambiar la especificación de un campo (tamaño o tipo de dato, etc)

Se requiere modificar el tamaño del campo nompro a una longitud de 30.

mysql>alter table productos modify column nompro varchar(30);

Query OK, 0 rows affected (0.14 sec)

Records: 0 Duplicates: 0 Warnings: 0

mysql>

3. Cambiar el nombre de la tabla

Cambiaremos el nombre de la tabla Productos por Articulos

mysql>alter table productos rename to articulos;

Query OK, 0 rows affected (0.03 sec)

mysql>

4. Eliminar un campo de la tabla

Eliminaremos el campo despro

mysql>alter table articulos drop column despro;

Query OK, 0 rows affected (0.03 sec)

mysql>

5. Cambiar el nombre de un campo

Cambiar el nombre prepro por pupro

mysql>alter table articulos change prepro pupro decimal;

Query OK, 0 rows affected (0.03 sec)

mysql>

6. Eliminar el campo clave de la tabla

mysql>alter table artículos drop primary key;

Query OK, 0 rows affected (0.03 sec)

mysql>

Page 125: Lenguaje de Programación II

UNIVERSIDAD PRIVADA TELESUP

125

7. Agregar el campo clave a una tabla existente

Designar al campo codpro como campo llave de la tabla artículos. (El

campo debe ser de tipo NOT NULL)

mysql>alter table articulos add primary key (codpro);

Query OK, 0 rows affected (0.03 sec)

mysql>

OTROS EJEMPLOS CON ALTER TABLE:

ALTER TABLE ejemplo AUTO_INCREMENT=1000

En la tabla 'ejemplo' cualquiera que sea la columna que tenga 'AUTO_INCREMENT'

en sus propiedades (solo puede haber una), los nuevos registros comenzarán a partir

de '1000' o cualquier número indicado, no es posible utilizar un valor ya existente.

ALTER TABLE ejemplo CONVERT TO CHARACTER SET latin1

La tabla 'ejemplo' ahora almacenará sus valores en base al juego de caracteres 'latin1'

(iso-8859-1).

ALTER TABLE ejemplo DROP COLUMN nombre, DROP COLUMN paterno

Elimina más de una columna.

ALTER TABLE ejemplo MODIFY correo CONVERT TO CHARACTER SET utf8

Es posible convertir solo una columna, en este caso 'correo' a un juego de caracteres

distinto al de todo el resto de la tabla.

ALTER TABLE ejemplo ADD UNIQUE(email)

Añade a la columna 'email' un índice del tipo único, no

puede haber dos iguales.

Page 126: Lenguaje de Programación II

UNIVERSIDAD PRIVADA TELESUP

126

ALTER TABLE ejemplo ADD consecutivo BIGINT AUTO_INCREMENT, ADD

INDEX(consecutivo)

Añade la columna 'consecutivo' con la característica de auto incremento y además

genera un índice sobre la misma.

DROP TABLE

Sintaxis del comando:

DROP [TEMPORARY] TABLE [IF EXISTS]

tbl_name [, tbl_name] ...

[RESTRICT | CASCADE]

DROP TABLE elimina una o más tablas. Debe tener el permiso DROP para cada

tabla. Todos los datos de la definición de tabla son ELIMINADOS, así que tenga

cuidado con este comando!

RENAME TABLE

Sintaxis del comando:

RENAME TABLE tbl_name TO new_tbl_name

[, tbl_name2 TO new_tbl_name2] ...

Este comando renombra una o más tablas.

Ejemplo:

mysql>rename table articulos to productos;

Query OK, 0 rows affected (0.00 sec)

mysql>

Page 127: Lenguaje de Programación II

UNIVERSIDAD PRIVADA TELESUP

127

2. SQLYog – IDE para MySQL

SQLyog es una herramienta gráfica fácil de usar, compacta y muy rápida para

administrar la base de datos MySQL. SQLyog es una herramienta que permite

administrar bases de datos MySQL, la cual puede descargarla de la siguiente

dirección:http://sqlyog.en.softonic.com/download

Luego de ingresar los datos de conexión, aparecerá la siguiente ventana de trabajo:

En el panel de la izquierda

ud podrá acceder a las

diferentes bases de datos y

tablas y podrá realizar

diversas operaciones de

mantenimiento de datos

desde el menú contextual.

En el panel de la derecha,

usted. podrá ejecutar los

comandos sql. Luego de

escribirlos, selecciónelos y

ejecútelos presionando la

tecla F9.

Page 128: Lenguaje de Programación II

UNIVERSIDAD PRIVADA TELESUP

128

Lecturas Recomendadas

Lenguaje SQL. Creación de base de datos y tablas

http://www.conclase.net/mysql/curso/index.php?cap=007#

Comandos DDL

http://www.ub.edu.ar/catedras/ingenieria/Datos/capitulo4/cap43.htm

Comando Select

http://msdn.microsoft.com/es-es/library/cc467240(v=vs.71).aspx

Realizar y escribir los comandos que realizan las siguientes operaciones

a. Visualizar una lista de clientes cuyas direcciones

correspondan a un Jr.

b. Visualizar una lista de artículos del más caro al más barato

c. Visualizar una lista de clientes que sean mayores de 25 años

d. Visualizar una lista de clientes que hayan nacido en agosto a

diciembre

e. Visualizar una lista de clientes que nacieron un martes 13

f. Visualizar una lista de clientes cuya última letra del nombre

sea R o N.

g. Visualizar una lista de artículos cuya primera letra de la

descripción sea A o E

h. Visualizar un listado donde figure las facturas emitidas a los

clientes 003 y 006.

Guarda los formularios con sus respectivos nombres en una carpeta y

a su vez comprímela. Esta carpeta comprimida envíala a través de

“Lista 1”.

Actividades y Ejercicios

Page 129: Lenguaje de Programación II

UNIVERSIDAD PRIVADA TELESUP

129

Crear una vista para los siguientes casos:

1. Listar a los clientes que nacieron en el cuarto trimestre del año

2. Listar a los clientes que vivan en los distritos de El Cercado,

Miraflores y San Isidro.

3. Listar los productos cuya nombre empiece con cualquiera de las

siguientes letras: A,J,P

4. Visualizar la lista de productos con su respectivo: valor total de

mercadería. (STOCK*CANT)

5. Visualizar la lista de vendedores que no han emitido facturas.

6. Visualizar los productos vendidos en las facturas 001 y 002, calcule el

total por cada producto (Ptotal*Cant)

7. Incremente el precio de los productos en un 2% (la modificación debe

realizarse en el campo PUPRO)

Guarda los formularios con sus respectivos nombres en una carpeta

y a su vez comprímela. Esta carpeta comprimida envíala a través de

“Lista 2”.

Page 130: Lenguaje de Programación II

UNIVERSIDAD PRIVADA TELESUP

130

Autoevaluación

1. Para el campo DNI de una tabla, el adecuado tipo de dato es:

a. Varchar

b. Char

c. Numeric

d. Int

e. String

2. La columna que contiene los datos que servirán de distintivo único para

cada registro es conocido como:

a. Clave foránea

b. Clave secundaria

c. Campo Clave

d. Clave única

e. Clave candidata

3. Integridad Referencial es

a. El mecanismo de control de la correspondencia relacional entre los

registros de dos tablas, impidiéndose que se produzcan incongruencias.

b. El mecanismo de control que impide que se eliminen los registros

importantes del sistema.

c. El mecanismo que facilita las búsquedas de los registros dentro de una

tabla.

d. La relación cardinal entre los elementos de 2 tablas

e. La unión de dos tablas de datos

4. ¿Cuál es la función de la sentencia SELECT?

a. Es usada para obtener la información guardada en una tabla

b. Permite establecer un intervalo de texto como condicional para un

esquema de datos

c. Permite mostrar un esquema de datos que relaciona el contenido entre

dos tablas

d. Permite mostrar un esquema de datos con el contenido no común de

dos tablas

e. Permite mostrar un esquema de datos con el contenido común de dos

tablas.

Page 131: Lenguaje de Programación II

UNIVERSIDAD PRIVADA TELESUP

131

5. Redondea un dato numérico en este caso redondea la columna prepro

con dos decimales)

a. Round

b. Lpad

c. comodin

d. limit

e. concat

6. La cláusula que permite relacionar los datos de dos tablas y mostrar

sólamente a los registros que existe correspondencia en ambas es:

a. INNER JOIN

b. INNER LEFT

c. INNER OUT

d. INNER RIGHT

e. OUT INNER

7. La cláusula que permite analizar cuántos registros existen dentro de

cada grupo de registros al realizar un SELECT es:

a. Having

b. Where

c. Group by

d. Order by

e. Matching

8. Escriba el comando SELECT que muestra la cantidad de productos por

cada una de las categias existentes. Usar las tablas Productos y

Categorías

a. mysql> select p.codpro,p.nompro,c.nomcat from producto p, categoria c

where p.codcat=c.codcat; O también: mysql>select

producto.nompro,categoría.nomcat from categoría inner join producto

on categoria.codcat=producto.codcat;

b. mysql> select productos on procucto

c. mysql> productos select categoría

d. mysql> select

e. mysql> select from productos

Page 132: Lenguaje de Programación II

UNIVERSIDAD PRIVADA TELESUP

132

9. Indique qué es lo que realiza la siguiente instrucción:

mysql>alter table producto add column despro varchar(25) after nompro;

a. Elimina la columna despro

b. Cambia el nombre de la columna despro por despro

c. Modifica el nombre de la tabla por producto, agregándole una columna

d. Modifica el nombre de la columna despro por nompro

e. Agrega la columna despro después de nompro

10. El programa SQLYog:

a. Es un gestor de base de datos

b. Es IDE de programación

c. Es una herramienta de fácil uso y permite administrar rápidamente una

base de datos en Mysql

d. Es un lenguaje de programación que permite construir aplicaciones

basados en MySQL

e. Es un generador de código fuente para aplicaciones basadas en Java

con MySQL

Page 133: Lenguaje de Programación II

UNIVERSIDAD PRIVADA TELESUP

133

Resumen

UUNNIIDDAADD DDEE AAPPRREENNDDIIZZAAJJEE IIIIII::

Existen dos maneras de instalar el Servidor de Datos Mysql, una es haciendo la

instalación independiente del servidor y otra instalarlo usando un IDE como el

Appserv. El Appserv es un IDE que instala y maneja de manera integrada a PHP,

Apache Server, MySQL y contiene un utilitario para administrar la base de datos

llamado PhpMyAdmin. (en nuestro caso, solo utilizaremos el MySQL)

La sentencia SELECT es usada para obtener la información guardada en una tabla,

aquí se nuestra las tablas, el contenido de las tablas, concatenación de columnas,

ordenamiento de datos (ascendentemente y descendentemente) , etc.

La creación de esquemas de datos usando funciones de mysql: redondea un dato

numérico (en este caso redondea la columna prepro con dos decimales, rellena un

dato con un determinado caracter.

Para visualizar el contenido de dos o más tablas, estas deben relacionarse entre sí a

través de los campos comunes, esto nos permitirá establecer la cardinalidad de

elementos a fin de que los datos que se muestren sean congruentes. Existen dos

maneras de realizar esta operación: usando la cláusula JOIN y establecer relaciones

temporales usando operadores relacionales (usando Where). Una vista es el

encapsulamiento de un comando select. Una vista está asociada a una sentencia

select específica y es guardada bajo un nombre distintivo, al ejecutar la vista

visualizaremos la ejecución del comando select encapsulado.

Uso de Comandos DDL. Entre ellos tenemos los siguientes: DROP DATABASE,

ALTER TABLE, DROP TABLE RENAME TABLE. Etc. SQLyog es una herramienta

gráfica fácil de usar, compacta y muy rápida para administrar la base de datos MySQL.

SQLyog es una herramienta que permite administrar bases de datos MySQL,

Page 134: Lenguaje de Programación II

UNIVERSIDAD PRIVADA TELESUP

134

Page 135: Lenguaje de Programación II

UNIVERSIDAD PRIVADA TELESUP

135

Introducción

a) Presentación y contextualización

En esta Unidad aprenderás a construir aplicaciones de escritorio con conexión

a base de datos utilizando la tecnología JDBC.

b) Competencias

Elabora una aplicación informática con conexión a base de datos y POO

usando la tecnología JDBC.

c) Capacidades

1. Comprende la forma cómo trabaja la tecnología JDBC (Java Database

Connetivity) al conectarse con una base de datos

2. Maneja las principales interfaces del JDBC para el manejo y

procesamiento de datos de una tabla.

3. Aplica la programación orientada a objetos al programar una aplicación

con base de datos.

4. Aplica sentencias precompiladas con los datos de una tabla.

d) Actitudes

Cumple con responsabilidad la presentación de los trabajos encomendados

a través de la plataforma virtual.

Desarrolla la creatividad, la innovación, la actitud emprendedora y el

respeto a la honestidad intelectual.

f) Presentación de ideas básicas y contenido esenciales de la

Unidad.

La Unidad de Aprendizaje 04: Desarrollo De Aplicaciones De Escritorio

Con JDBC comprende el desarrollo de los siguientes temas:

Tema 01: Introducción a la Tecnología JDBC

Tema 02: Estableciendo una Conexión de Datos

Tema 03: Aplicando POO para la Gestión de Operaciones con una

Base de Datos

Tema 04: La interface PreparedStatement

Page 136: Lenguaje de Programación II

UNIVERSIDAD PRIVADA TELESUP

136

TEMA 1

Comprende la forma cómo trabaja la tecnología JDBC (Java Database Connetivity) al conectarse con una base de datos.

Competencia:

a la Introducción

Tecnología JDBC

Page 137: Lenguaje de Programación II

UNIVERSIDAD PRIVADA TELESUP

137

Desarrollo de los Temas

Tema 01: La Introducción a la Tecnología JDBC

Java Database Connectivity (JDBC) es una interface

de acceso a bases de datos estándar SQL que

proporciona un acceso uniforme a una gran variedad de

bases de datos relacionales desde Java.

FUNCIONES DEL JDBC

1. Establecer una conexión con una base de datos

2. Enviar una consulta SQL a la base de datos

3. Procesar los resultados de la consulta.

Dado a que JDBC contien un conjunto de interfaces no implementadas, requiere de

una implementación especifica de acuerdo al tipo de gestor de base de datos con la

cual vayamos a trabajar, esta implementación es conocida con el nombre de driver,

esto otorga una gran ventaja al JDBC al poder trabajar con múltiples orígenes de base

de datos, lo único que se requiere es contar con el driver especifico.

CARACTERÍSTICAS Y LOS DRIVERS DEL JDBC

Los Drivers también llamados manejadores, son un conjunto de clases provistas por el

fabricante, el gestor de base de datos, que implementa las clases e interfaces del API

JDBC necesarias para que una aplicación Java pueda conectarse con una BD, la

misión del manejador será traducir comandos estándar del API JDBC al

protocolo nativo de esa base de datos.

Si queremos cambiar el sistema de BD que empleamos lo único

que deberemos hacer es reemplazar el antiguo manejador por el

nuevo, y seremos capaces de conectarnos a la nueva BD.

Page 138: Lenguaje de Programación II

UNIVERSIDAD PRIVADA TELESUP

138

LAS INTERFACES Y CLASES DEL JDBC

JDBC incluye un conjunto de interfaces y clases que permiten el manejo de base de

datos en Java, esta tecnología está basada fundamentalmente en las siguientes

interfaces:

a. Driver

b. DriverManager

c. Connection

d. Statement

e. PreparedStatement

f. CallableStatement

g. ResultSet

REGISTRAR DE UN DRIVER (MANEJADOR)

Registrar un manejador no es más que cargar en memoria una clase que implementa

el interfaz Driver, clase proporcionada por los desarrolladores de la base de datos.

Podemos registrar el Driver empleando el cargador de clases. Para ello, empleamos,

al igual que para cargar cualquier otra clase, el método forName(String clase) de la

clase Class.

Class.forName("com.mysql.Driver");

INTERFACE DRIVER

Es responsabilidad del desarrollador del driver proveer una clase que implemente esta

interface, y será responsabilidad del DriverManager llamar al método connect de los

drivers registrados para intentar establecer la conexión con la base de datos.

CLASE DRIVERMANAGER

Como su nombre indica, esta clase es la gestora de los diversos drivers (manejadores)

que existen en nuestra aplicación. Es posible que sea necesario que en una misma

aplicación se tenga varios manejadores para acceder a varias bases de datos.

Page 139: Lenguaje de Programación II

UNIVERSIDAD PRIVADA TELESUP

139

Los métodos que más nos interesan de esta clase son:

static Connection getConnection(String url);

static Connection getConnection(String url, String user, String password).

Estos métodos intentan establecer conexión con la base de datos que le indiquemos

en el campo url, empleando para ello, todos los manejadores que hemos registrado.

La diferencia entre un método y el otro, obviamente, es que en uno sólo se especifica

la base de datos a la que nos queremos conectar, mientras que en el otro se indica

también el nombre de usuario de la base de datos y su password.

Sintaxis de los URL del JDBC

Los URL (Uniform Resource Locator) de JDBC identifican una base de datos, y un

protocolo de conexión a esta, de un modo único. Toda URL de JDBC consta siempre

de tres partes:

Protocolo: subprotocolo:subnombre.

Ejemplo:

"jdbc:odbc:usuarios"

Veamos cada una de las partes del URL:

1. Protocolo de la conexión. Siempre es jdbc.

2. Subprotocolo de la conexión. Identifica el tipo de mecanismo de conexión que

emplearemos para acceder a la base de datos.

3. Subnombre, identifica la base de datos con la que queremos establecer una

conexión.

Page 140: Lenguaje de Programación II

UNIVERSIDAD PRIVADA TELESUP

140

Métodos de la Clase DriverManager

Todos los métodos que encontramos en esta clase son estáticos (no requieren

instancia para poder utilizarlo) y se comentan brevemente a continuación:

Método Descripción

Connection getConnection(String

url)

Establece una conexión con la base de datos identificada por la URL de

JDBC que se pasa por parámetros.

Connection getConnection(String

url, Properties info)

Establece una conexión con la base de datos identificada por la URL de

JDBC que se pasa por parámetros.

Connection getConnection(String

url, String usuario, String

contraseña)

Establece una conexión con la base de datos pero en su segundo

parámetro especifica propiedades que posee el driver, como puede ser

la base de datos, el usuario, la contraseña, etc. Estas propiedades se

organizan en pares propiedad/valor.

void println(String mensaje)

Escribe un mensaje en el flujo de actividad actual

void setLoginTimeout(int segundos)

Establece el tiempo de espera que el driver utilizará para realizar una

conexión.

INTERFACE CONNECTION

Representa una conexión con la base de datos. Permite crear objetos que representan

consultas que se ejecutarán en la base de datos, y permite acceder a información

sobre las posibilidades del manejador JDBC.

Page 141: Lenguaje de Programación II

UNIVERSIDAD PRIVADA TELESUP

141

En esta tabla recogemos los principales métodos de la interfaz Connection. Sobre

muchos de ellos volveremos a hablar más adelante.

Métodos de la Interfaz Connection

Método Descripción

void close() Cierra una conexión, liberando todos los recursos asociados a la misma.

boolean isClosed() Devuelve verdadero, si la conexión está cerrada

boolean isReadOnly() Devuelve true, si la conexión es de sólo lectura

PreparedStatement

prepareStatement(String sql)

Crea un objeto PreparedStatement que va a permitir enviar y ejecutar sentencias

SQL parametrizadas a la base de datos correspondiente.

PreparedStatement

prepareStatement(String sql,

int tipoResultSet, int

tipoConcurrencia)

Igual que el método anterior, pero permite especificar las características del

ResultSet que se obtendrá a la hora de ejecutar el objeto PreparedStatement

correspondiente.

void commit() Hace permanentes los cambios que se realizaron desde el último commit o

rollback.

Statement createStatement() Crea un objeto de tipo Statement.

bolean getAutoCommit() Indica si está en modo auto-commit.

CallableStatement

prepareCall(String sql)

Crea un objeto CallableStatement para ejecutar procedimientos almacenados

SQL en la BD.

PreparedStatement

prepareStatement(String sql)

Crea un objeto PreparedStatement para ejecutar consultas SQL parametrizadas

en la BD.

void rollback() Deshace todos los cambios realizados desde la última vez que se ejecutó commit

o rollback

void close() Cierra una conexión, liberando todos los recursos asociados a la misma.

Statement

createStatement(int

tipoResultSet, int

tipoConcurrencia)

Crea también una sentencia SQL pero generará en su ejecución un objeto

ResultSet con unas características determinadas.

boolean isClosed() Devuelve verdadero si la conexión está cerrada

boolean isReadOnly() Devuelve true si la conexión es de sólo lectura

PreparedStatement

prepareStatement(String sql)

Crea un objeto PreparedStatement que va a permitir enviar y ejecutar sentencias

SQL parametrizadas a la base de datos correspondiente.

PreparedStatement

prepareStatement(String sql,

int tipoResultSet, int

tipoConcurrencia)

Igual que el método anterior, pero permite especificar las características del

ResultSet que se obtendrá a la hora de ejecutar el objeto PreparedStatement

correspondiente.

Page 142: Lenguaje de Programación II

UNIVERSIDAD PRIVADA TELESUP

142

INTERFACE STATEMENT

Esta interfaz permite enviar instrucciones SQL a la base de datos. Podemos obtener

un objeto que implemente esta interfaz a partir del método Statement

createStatement() de la interfaz Connection.

Para ejecutar una consulta tipo SELECT se emplea el método executeQuery(String

sql). Este método devuelve un objeto tipo ResultSet.

Para ejecutar una instrucción tipo DELETE, UPDATE, INSERT o una instrucción DDL

(Data Definition Language) se emplea executeUpdate(String sql).

Mediante el método execute(String sql) podemos ejecutar cualquiera de los

comandos anteriores.

Un objeto Statement se usa para enviar sentencias SQL a la base de datos.

Actualmente hay tres tipos de objetos Statement, todos ellos actúan como

contenedores para la ejecución de sentencias en una conexión dada: Statement,

PreparedStatement que hereda de Statement, y CallableStatement que hereda de

PreparedStatement. Estas están especializadas para enviar tipos particulares de

sentencias SQL

Los métodos más importantes de la interfaz Statement son:

Método Descripción

void cancel()

Cancela el objeto Statement, abortando la sentencia SQL

correspondiente.

void close()

Cierra el objeto Statement, liberando todos los recursos

asociados de forma inmediata.

boolean execute(String sql)

Ejecuta la sentencia SQL, que se pasa por parámetro

ResultSet executeQuery(String

sql)

Ejecuta una sentencia SQL, que devuelve un conjunto de

resultados, representado por el objeto ResultSet.

int executeUpdate(String sql)

Ejecuta la sentencia SQL que se pasa por parámetro y debe ser

del tipo INSERT, UPDATE o DELETE

Connection getConnection()

Devuelve el objeto Connection a partir del que se ha creado el

objeto Statement

Page 143: Lenguaje de Programación II

UNIVERSIDAD PRIVADA TELESUP

143

Creando un objeto Statement

Una vez que se ha establecido una conexión a una base de datos determinada, esta

conexión se puede utilizar para ejecutar sentencias SQL.

Connection cn=DriverManager.getConnection(url,”pepe”,”xxx”);

Statement st=cn.createStatement();

No olvidemos que si se trata de un comando Select que se desea ejecutar,

invocaremos al método executeQuery. Ejemplo:

Connection cn=DriverManager.getConnection(url,”pepe”,”xxx”);

Statement st=cn.createStatement();

rs=st.executeQuery(“Select * from clientes”);

Si se trata de los comandos insert, update, delete y otros que modifican los datos de

una tabla, utilizaremos el método executeUpdate. Ejemplo:

Connection cn=DriverManager.getConnection(url,”pepe”,”xxx”);

Statement st=cn.createStatement();

st.executeQuery(“insert into Clientes values (“‘001’,’Garcia Díaz’,’Carla’”);

ENVIO DE SENTENCIAS SQL

JDBC suministra tres clases para el envío de sentencias SQL. Estas clases son las

siguientes:

Statement.- Creada por el método createStatement. Un objeto Statementse usa para

enviar sentencias SQL simples.

PreparedStatement.- Creada por el método prepareStatement. Un objeto

PreparedStatement se usa para sentencias SQL que toman uno o más parámetros

como argumentos de entrada (parámetros IN). El PreparedStatement extienden

Statement y por tanto heredan los métodos de Statement. Un objeto

PreparedStatement es potencialmente más eficiente que un objeto Statement porque

este ha sido precompilado y almacenado para su uso futuro.

CallableStatement.- Creado por el método prepareCall. Los objetos

CallableStatement se usan para ejecutar procedimientos almacenados.

Page 144: Lenguaje de Programación II

UNIVERSIDAD PRIVADA TELESUP

144

Un objeto CallableStatement hereda métodos para el manejo de los parámetros IN de

PreparedStatement, y añade métodos para el manejo de los parámetros OUT e

INOUT.

INTERFACE RESULTSET

Esta interface representa un conjunto o esquema de datos que son el resultado de

una consulta SQL.

Es necesario usar un objeto que almacena todos los datos del resultado de una

consulta (select), este objeto se llama ResultSet.

El siguiente código presenta el objeto ResultSet: rs y le asigna el resultado de una

consulta anterior.

ResultSet rs=st.executeQuery(“Select codcli,apecli,nomcli from Clientes”);

El ResultSet es una estructura similar a la tabla de datos con la diferencia que no es

física, sino de tipo virtual, se creará en la memoria del servidor y desde allí se tomarán

los datos para mostrarlos posteriormente en el cliente.

Page 145: Lenguaje de Programación II

UNIVERSIDAD PRIVADA TELESUP

145

METODOS DEL RESULTSET

Nombre del Método

Descripción

previous() Envía el puntero a la fila anterior del objeto ResultSet. (devuelve true si

encuentra la fila anterior)

next() Envía el puntero a la fila siguiente del objeto ResultSet. (devuelve true si

encuentra la fila siguiente)

first() Envía el puntero a la primera fila del objeto ResultSet. (devuelve true si se

encuentra primera fila)

last() Envía el puntero a la última fila del objeto ResultSet. (devuelve true si se

encuentra última fila)

isFirst() Devuelve verdadero, si el puntero se encuentra en la primera fila

getString() Captura un dato de tipo String del esquema de datos

getInt() Captura un dato de tipo int del esquema de datos

getDate() Captura un dato de tipo Date del esquema de datos

getBoolean() Captura un dato de tipo boolean del esquema de datos

getDouble() Captura un dato de tipo double del esquema de datos

getLong() Captura un dato de tipo long del esquema de datos

EL MÉTODO NEXT

El método next mueve al puntero o cursor a la siguiente fila y hace que esa fila

(llamada fila actual) sea con la que podamos operar. Como el cursor inicialmente se

posiciona justo encima de la primera fila de un objeto ResultSet, primero debemos

llamar al método next para mover el cursor a la primera fila y convertirla en la fila

actual. Sucesivas invocaciones del método next moverán el cursor de línea en línea

hacia adelante. Existen otros métodos con los cuales podemos mover el puntero de la

tabla o consultar sobre la posición actual del puntero (en la tabla anterior, aparece la

lista de métodos que mueven el puntero de la tabla).

Page 146: Lenguaje de Programación II

UNIVERSIDAD PRIVADA TELESUP

146

CONSEGUIR LOS DATOS DEL RESULTSET

Método getXXX

(XXX representa al tipo de dato, ejemplo: getDouble(), getString(), getLong(), etc)

Los métodos getXXX del tipo apropiado se utilizan para recuperar el valor de cada

columna. Por ejemplo:

rs.getString(1); //Recupera el dato de la primera columna de la fila actual

rs.getString(“CODCLI”); //Recupera el dato de la campo “CODCLI” de la fila actual

Nota:

La primera columna del ResultSet corresponde al número 1

Podemos referirnos a un dato del ResultSet mediante su número o nombre de

columna.

Para conseguir otros tipos de datos contamos con los siguientes métodos:

getByte

getShort

getInt

getLong

getFloat

getDouble

getBigDecimal

getBoolean

getString

getBytes

getDate

getTime

Page 147: Lenguaje de Programación II

UNIVERSIDAD PRIVADA TELESUP

147

El ResultSet generado tiene la siguiente estructura:

CodCli ApeCli NomCli DirCli DisCli

0001 Vargas Machuca Luís Alex Av. Túpac Amaru 1254 Comas

0002 García López Jorge Antonio Jr. Amazonas 258 Lima

0003 Sánchez Rojas Randy Av. José Pardo 365 Lince

0004 Salinas Montalvo Carla Jr. Bolívar 2245 Breña

0006 Oré Palomino Julio César Barranco San Pedro

0007 Montalvo Luís San Martín de Porres Av. Perú Cdra 28

0008 Villanueva Freíd Los Olivos Av. Palmeras

0009 Palma López Elian San Juan Av. Las Flores Parad

0010 Lozano Aguirre Víctor Comas Túpac Amaru Km. 16

rs(1) rs(2) rs(3) rs(4) rs(5)

Page 148: Lenguaje de Programación II

UNIVERSIDAD PRIVADA TELESUP

148

TEMA 2

Maneja las principales interfaces del JDBC para el manejo y procesamiento de datos de una tabla.

Competencia:

conexión una

datos

Estableciendoo

de

Page 149: Lenguaje de Programación II

UNIVERSIDAD PRIVADA TELESUP

149

Tema 02: Estableciendo una conexión de datos

Las conexiones JDBC, tal como estudiamos en la semana anterior, nos permiten

conectarnos con diferentes orígenes de datos, lo único que tenemos que hacer es:

utilizar el driver provisto por el fabricante de la base de datos, lo cual implementa la

funcionalidad del JDBC para dicho gestor de Base de Datos. Lo único que variará en

el código fuente es la forma de conexión, mientras que todo lo demás se mantendrá

igual.

Previamente, se requiere que el driver de mysql se inserte en el directorio de librerias

externas de Java, situado en la siguiente ruta:

C:\Archivos de programa\Java\jdk1.6.0\jre\lib\ext

Nota: El driver de mysql, se puede descargar de la página de mysql en Internet:

http://dev.mysql.com/downloads/connector/j/ El archivo a descargar debe ser un

archivo de extensión JAR. Para nuestro caso, este archivo se llama: mysql-

connector-java-5.0.8-bin.jar (este nombre puede cambiar de acuerdo al nombre

de la versión, lo mismo que la carpeta del JDK)

Page 150: Lenguaje de Programación II

UNIVERSIDAD PRIVADA TELESUP

150

Pasos necesarios para Establecer una Conexión JDBC

1. Importar las clases del paquete java.sql

Para utilizar esta tecnología, debemos importar las clases del paquete: java.sql

de la siguiente manera:

import java.sql.*

2. Registrar el Driver a utilizar en la clase DriverManager

Pasar el nombre del paquete donde se encuentra el JDBC

//Registra el driver

String driver="com.mysql.jdbc.Driver";

Class.forName(driver);

3. Abrir la conexión

La forma común de establecer una conexión con una base de datos es llamar al

método getConnection() de la clase DriverManager, a este método se le debe

pasar como parámetro la URL de JDBC que identifica a la base de datos con la

que queremos realizar la conexión. La ejecución de este método devolverá un

objeto Connection que representará la conexión con la base de datos.

La sintaxis general para realizar una conexión es la siguiente:

String servidor="localhost";

String puerto="3306";

String usuario="root";

String password="telesup";

String basedatos="Comercial";

String driver="com.mysql.jdbc.Driver";

String cadenaconexion="jdbc:mysql://"+servidor+":"+puerto+"/"+basedatos;

cn=DriverManager.getConnection(cadenaconexion,usuario,password);

Page 151: Lenguaje de Programación II

UNIVERSIDAD PRIVADA TELESUP

151

4. Definir el objeto Statement para el manejo de comandos

(se requiere que la conexión esté abierta)

st=cn.createStatement();

5. Crear el esquema de datos (Objeto ResultSet)

A partir de la ejecución del comando Select.

rs=stmt.executeQuery("select * from Clientes");

6. Visualizar el contenido del esquema de datos

while(rs.next()) // método avance al siguiente y

devuelve true

{

System.out.print(rs.getString("Codcli")+"\t");

System.out.print(rs.getString("Apecli")+"\t");

System.out.print(rs.getString("Nomcli")+"\t");

System.out.print(rs.getString("Dircli")+"\t");

System.out.println("");

}

7. Cerrar la conexión

rs.close();

cn.close();

Page 152: Lenguaje de Programación II

UNIVERSIDAD PRIVADA TELESUP

152

CODIGO FUENTE COMPLETO PARA REALIZAR LA CONEXIÓN CON LA BASE DE DATOS COMERCIAL Y MOSTRAR EL CONTENIDO DE LA TABLA CLIENTES

package comercial;

import java.sql.*;

public class GestionBD {

public static void main(String[] args) {

Statement stmt=null; // Declara el Objeto Statement

Connection cn=null; // Declara el Objeto Connection

ResultSet rs=null; // Declara el Objeto ResultSet

try {

String servidor="localhost";

String puerto="3306";

String usuario="root";

String password="telesup";

String basedatos="Comercial";

String driver="com.mysql.jdbc.Driver";

String cadenaconexion="jdbc:mysql://"+servidor+":"+puerto+"/"+basedatos;

//Registra el driver

Class.forName(driver);

//Crea la conexion

cn=DriverManager.getConnection(cadenaconexion,usuario,password);

//Crea el Objeto Statament (El cual permitirá la ejecución de sentencias)

st=cn.createStatement();

//Crea el esquema de datos

rs=stmt.executeQuery("select * from Clientes");

while(rs.next()) // método avance al siguiente y devuelve true

{

System.out.print(rs.getString("Codcli")+"\t");

System.out.print(rs.getString("Apecli")+"\t");

System.out.print(rs.getString("Nomcli")+"\t");

System.out.print(rs.getString("Dircli")+"\t");

System.out.println("");

}

rs.close();

cn.close();

}

catch(Exception e) {

System.out.println("Error el proceso acceso a la base de datos");

System.out.println(e.getMessage());

}

}

}

Visualiza el

contenido del

esquema de datos.

Cierra la conexión y el

esquema de datos.

Page 153: Lenguaje de Programación II

UNIVERSIDAD PRIVADA TELESUP

153

TEMA 3

dfdsresresresresesrfdfdsfdsGestión

Operaciones Para la a ladsdsdsds gfgfgfdgflla

Aplicando POO

de con una Base de datos

ddatos Aplica la programación orientada a objetos al programar una aplicación con base de datos.

Competencia:

Page 154: Lenguaje de Programación II

UNIVERSIDAD PRIVADA TELESUP

154

Tema 03: Aplicando POO p ara la gestión de operaciones con una Base de datos

PROGRAMACIÓN EN CAPAS

Tal como se aprendió en el ciclo anterior, la programación en capas nos ofrece

grandes ventajas:

Separar la lógica de los diferentes niveles de nuestra aplicación

El mantenimiento de software es menos engorroso y complejo

Permite el trabajo en equipo por parte de los profesionales informáticos, cada

equipo se concentrará en un determinado nivel. Cada nivel se encuentra integrado

al otro.

La programación en capas se amolda a las metodologías modernas del desarrollo

de sistemas.

Una aplicación puede ser desarrollada en capas, pudiendo ser estas:

a. Lógica de Presentación: se limita a la interfaz del cliente desde donde se

realizan las entradas y salidas de datos. En esta capa también se puede

realizar la validación del ingreso de datos.

b. Lógica de Negocios: incluye la programación de los distintos procesos que se

dan en nuestro sistema.

c. Lógica de Datos: esta capa se encarga de la gestión de datos a través de las

operaciones elementales: conectar, desconectar, ejecutar consultas y ejecutar

actualiaciones.

d. Otras capas: Incluye a otros tipos de componentes, tales como: librerías

dinámicas, etc.

Page 155: Lenguaje de Programación II

UNIVERSIDAD PRIVADA TELESUP

155

CASO PRÁCTICO:

Realiza una aplicación visual con orientación a objetos que realice las principales operaciones

de mantenimiento de datos.

LÓGICA DE DATOS Clase : GestionBD.java Paquete : Ds Descripción : Esta clase contiene los métodos que permitirán que nuestra aplicación se conecte con la base de datos y se ejecuten los comandos sql.

package Ds;

import java.sql.*;

public class GestionBD {

public Connection cn = null;

public Statement st = null;

public ResultSet rs = null;

public void conectar() throws Exception {

String servidor="localhost";

String puerto="3306";

String usuario="root";

String password="telesup";

String driver="com.mysql.jdbc.Driver";

String basedatos="Comercial";

String cadenaconexion="jdbc:mysql://"+servidor+":"+puerto+"/"+basedatos;

Class.forName(driver);

cn=DriverManager.getConnection(cadenaconexion,usuario,password);

}

public ResultSet ejecutarConsulta(String sql) throws Exception {

st=cn.createStatement();

rs=st.executeQuery(sql);

return rs;

}

public void ejecutarActualizacion(String sql) throws Exception{

st=cn.createStatement();

st.executeUpdate(sql);

}

public void desconectar() throws Exception{

cn.close();

}

}

Page 156: Lenguaje de Programación II

UNIVERSIDAD PRIVADA TELESUP

156

LOGICA DE PRESENTACIÓN Clase : FrmClientes.java Paquete : view Descripción : Esta clase representa al formulario que contiene la interface de usuario

package View;

//Importamos los paquetes con los que trabajeremos en este formulario

import java.sql.*;

import Ds.*;

import Model.*;

import javax.swing.JOptionPane;

import javax.swing.table.DefaultTableModel;

public class frmClientes extends javax.swing.JFrame {

//Instanciamos la clase que corresponde a la lógica de datos

GestionBD gbd=new GestionBD();

String tipo;

/** Creates new form frmClientes */

public frmClientes() {

initComponents();

}

private void formWindowOpened(java.awt.event.WindowEvent evt) {

// Este evento ocurre al abrir el formulario o ventana

cargardatos();

desactivar();

}

private void btninsActionPerformed(java.awt.event.ActionEvent evt) {

// Al hacer click en el botón insertar

txtapecli.requestFocus();

tipo="INS";

activar();

ClienteModel em=new ClienteModel();

txtcod.setText(em.generarcodigo());

}

private void btnmodActionPerformed(java.awt.event.ActionEvent evt) {

// Al hacer click en el botón modificar

activar();

tipo="MOD";

int fila=jTable1.getSelectedRow(); //obtener nro. de fila selec.

//Enviar los datos de la fila seleccionada a las cajas

txtcod.setText((String)jTable1.getValueAt(fila, 0));

txtapecli.setText((String)jTable1.getValueAt(fila, 1));

txtnomcli.setText((String)jTable1.getValueAt(fila, 2));

txtdircli.setText((String)jTable1.getValueAt(fila, 3));

txtdiscli.setText((String)jTable1.getValueAt(fila, 4));

}

private void btnEliActionPerformed(java.awt.event.ActionEvent evt) {

// Al hacer click en el boton eliminar

try {

int fila = jTable1.getSelectedRow(); //Obtener fila seleccionada

String cod = (String) jTable1.getValueAt(fila, 0);

int r = JOptionPane.showConfirmDialog(null, "¿Esta Ud. seguro que

desea eliminar?", "Aviso", JOptionPane.YES_NO_OPTION,

JOptionPane.QUESTION_MESSAGE);

if (r == 0) { //Si contesto SI

String cad = "Delete from clientes where codcli='" + cod +

"'";

gbd.conectar();

gbd.ejecutarActualizacion(cad);

cargardatos();

}

} catch (Exception e) {

Page 157: Lenguaje de Programación II

UNIVERSIDAD PRIVADA TELESUP

157

JOptionPane.showMessageDialog(null, e.getMessage());

}

}

private void btnGrabarActionPerformed(java.awt.event.ActionEvent evt) {

try {

// Al hacer click en el botón grabar

String cod=txtcod.getText();

String ape=txtapecli.getText();

String nom=txtnomcli.getText();

String dir=txtdircli.getText();

String dis=txtdiscli.getText();

String sql="";

if(tipo.equals("INS")){

sql="insert into Clientes(codcli,apecli,nomcli,dircli,discli)

values('"+cod+"','"+ape+"','"+nom+"','"+dir+"')";

} else{

sql="update Clientes set

apecli='"+ape+"',nomcli='"+nom+"',dircli='"+dir+"',discli='"+dis+"' where

codcli='"+cod+"'";

}

gbd.ejecutarActualizacion(sql);

cargardatos(); //Actualizar el Jtable

limpiar();

desactivar();

} catch (Exception e) {

JOptionPane.showMessageDialog(null,"Error: "+e.getMessage());

}

}

private void txtcadenaKeyReleased(java.awt.event.KeyEvent evt) {

// Ocurre cada vez que se presiona un character en la caja busqueda

String cad;

cad="Select * from clientes where apecli like '"+txtcadena.getText()+"%'";

try {

//Crea el esquema de datos que se visualizará (resultado de la busqueda)

gbd.conectar();

ResultSet rs=gbd.ejecutarConsulta(cad);

DefaultTableModel dtm=new DefaultTableModel();

dtm.addColumn("Codigo");

dtm.addColumn("Apellido ");

dtm.addColumn("Nombres");

dtm.addColumn("Direccion");

dtm.addColumn("Distrito");

while(rs.next()){ //Recorre el esquema de datos fila a fila

Object[] fila=new Object[5];

fila[0]=rs.getObject(1);

fila[1]=rs.getObject(2);

fila[2]=rs.getObject(3);

fila[3]=rs.getObject(4);

fila[4]=rs.getObject(5);

dtm.addRow(fila);

} //Fin del While

jTable1.setModel(dtm); //Enviar el dtm al JTable

} catch (Exception e) {

JOptionPane.showMessageDialog(null,"Error: "+e.getMessage());

}

}

private void btnCancelarActionPerformed(java.awt.event.ActionEvent evt) {

// TODO add your handling code here:

Page 158: Lenguaje de Programación II

UNIVERSIDAD PRIVADA TELESUP

158

limpiar();

desactivar();

}

//Muestra el esquema de datos incial en el JTable

private void cargardatos(){

try {

gbd.conectar();

ResultSet rs=gbd.ejecutarConsulta("Select * from clientes");

DefaultTableModel dtm=new DefaultTableModel();

dtm.addColumn("Codigo");

dtm.addColumn("Apellido ");

dtm.addColumn("Nombres");

dtm.addColumn("Direccion");

dtm.addColumn("Distrito");

while(rs.next()){ //Recorre el esquema de datos fila a fila

Object[] fila=new Object[5];

fila[0]=rs.getObject(1);

fila[1]=rs.getObject(2);

fila[2]=rs.getObject(3);

fila[3]=rs.getObject(4);

fila[4]=rs.getObject(5);

dtm.addRow(fila);

} //Fin del While

jTable1.setModel(dtm); //Enviar el dtm al JTable

} catch (Exception e) {

JOptionPane.showMessageDialog(null,"Error: "+e.getMessage());

}

}

private void limpiar(){

//Limpia las cajas de texto

txtcod.setText("");

txtapecli.setText("");

txtnomcli.setText("");

txtdircli.setText("");

txtdiscli.setText("");

}

private void desactivar(){

//Desactiva algunas cajas de texto

txtcod.setEnabled(false);

txtapecli.setEnabled(false);

txtnomcli.setEnabled(false);

txtdircli.setEnabled(false);

txtdiscli.setEnabled(false);

}

private void activar(){

//Desactiva algunas cajas de texto

txtcod.setEnabled(true);

txtapecli.setEnabled(true);

txtnomcli.setEnabled(true);

txtdircli.setEnabled(true);

txtdiscli.setEnabled(true);

btnGrabar.setEnabled(true);

btnCancelar.setEnabled(true);

}

}

Page 159: Lenguaje de Programación II

UNIVERSIDAD PRIVADA TELESUP

159

LOGICA DE NEGOCIOS Clase : ClienteModel Paquete : Model Descripción : Esta clase representa la lógica de negocios (procesos)

package Model;

import Ds.GestionBD;

import java.sql.*;

import javax.swing.JOptionPane;

public class ClienteModel {

GestionBD gbd=new GestionBD();

public String generarcodigo(){

String nuevocodstr="";

try {

String cad;

cad = "Select chr_emplcodigo from empleado order by chr_emplcodigo desc

limit 0,1";

gbd.conectar();

ResultSet rs = gbd.ejecutarConsulta(cad);

rs.next(); //Ubico mi puntero en la primera fila

String codigo = rs.getString(1);

int nuevocod=Integer.parseInt(codigo)+1;

nuevocodstr=String.valueOf(nuevocod);

} catch (Exception e) {

JOptionPane.showMessageDialog(null, e.toString());

}

return this.rellenar(nuevocodstr, 4);

}

public String rellenar(String cad,int longitud){

int lc=cad.length();

int lrellenar=longitud-lc;

String relleno="";

for(int i=0;i<=lrellenar-1;i++){

relleno+="0";

}

return relleno+cad; //La cadena rellenada

}

}

Page 160: Lenguaje de Programación II

UNIVERSIDAD PRIVADA TELESUP

160

TEMA 4

Aplica sentencias precompiladas con los datos de una tabla.

Competencia:

Prepared Statement

Interface

La

Page 161: Lenguaje de Programación II

UNIVERSIDAD PRIVADA TELESUP

161

Tema 04: La interface Prepared Statement

Algunas veces es más conveniente o eficiente utilizar objetos PreparedStatement

para enviar sentencias SQL a la base de datos.

Cuándo utilizar un objeto PreparedStatement

Si queremos ejecutar muchas veces un objeto Statement, reduciremos el tiempo de

ejecución si utilizamos un objeto PreparedStatement, en su lugar. La característica

principal de un objeto PreparedStatementes que, al contrario de un objeto Statement,

se le entrega una sentencia SQL cuando se crea. La ventaja de esto es que en la

mayoría de los casos, esta sentencia SQL se enviará al controlador de la base de

datos inmediatamente, donde será compilado. Como resultado, el objeto

PreparedStatementno sólo contiene una sentencia SQL, sino una sentencia SQL que

ha sido precompilada. Esto significa que cuando se ejecuta la PreparedStatement, el

controlador de base de datos puede ejecutarla sin tener que compilarla nuevamente.

La ventaja de PreparedStatement es que utilizan parámetros que podemos utilizar en

la misma sentencia y suministrar distintos valores cada vez que la ejecutemos.

Crear un objeto PreparedStatement

PreparedStatement ps=cn.prepareStatement("UPDATE PRODUCTOS SET STOCKPRO =

? WHERE NOMPRO LIKE ?");

La variable ps contiene la sentencia SQL, "UPDATE

PRODUCTOS SET STOCKPRO = ? WHERE

NOMPRO LIKE?", que también ha sido, en la

mayoría de los casos, enviada al controlador de la

base de datos, y precompilado.

Page 162: Lenguaje de Programación II

UNIVERSIDAD PRIVADA TELESUP

162

Suministrar Valores para los Parámetros de un PreparedStatement

Necesitamos suministrar los valores que se utilizarán en los lugares donde están las

marcas de interrogación, antes de ejecutar un objeto PreparedStatement. Podemos

hacer esto llamando a uno de los métodos setXXX definidos en la clase

PreparedStatement. Si el valor que queremos sustituir por una marca de

interrogación es un int de Java, podemos llamar al método setInt. Si el valor que

queremos sustituir es un String de Java, podemos llamar al método setString, etc. En

general, hay un método setXXX para cada tipo Java. Utilizando el objeto ps del

ejemplo anterior, la siguiente línea de código selecciona la primera marca de

interrogación para un int de Java, con un valor de 75.

ps.setInt(1, 75);

Como podríamos asumir a partir de este ejemplo, el primer argumento de un método

setXXX indica la marca de interrogación que queremos seleccionar, y el segundo

argumento el valor que queremos ponerle. El siguiente ejemplo selecciona la segunda

marca de interrogación con el string "Arroz".

ps.setString(2, "Arroz");

Después de que estos valores hayan sido asignados para sus dos parámetros, la

sentencia SQL de ps será equivalente a la sentencia SQL que hay en el string cad del

siguiente ejemplo. Por lo tanto, los dos fragmentos siguientes de código hacen lo

mismo.

Código 1

String cad="UPDATE PRODUCTOS SET STOCKPRO=75 WHERE NOMPRO LIKE 'Arroz'";

stmt.executeUpdate(cad);

Código 2

PreparedStatement ps=cn.prepareStatement("UPDATE PRODUCTOS SET STOCKPRO=? WHERE NOMPRO LIKE ?");

ps.setInt(1, 75);

ps.setString(2, "Arroz");

ps.executeUpdate().

Page 163: Lenguaje de Programación II

UNIVERSIDAD PRIVADA TELESUP

163

Mirando estos ejemplos podríamos preguntarnos por qué utilizar un objeto

PreparedStatement con parámetros en vez de una simple sentencia, ya que la

sentencia simple implica menos pasos. Si actualizáramos la columna STOCKPRO

sólo una o dos veces, no sería necesario utilizar una sentencia SQL con parámetros.

Si por otro lado, tuviéramos que actualizarla frecuentemente, podría ser más fácil

utilizar un objeto PreparedStatement, especialmente en situaciones cuando la

utilizamos con un bucle while para seleccionar un parámetro a una sucesión de

valores. Veremos este ejemplo más adelante en esta sección.

Una vez que a un parámetro se ha asignado un valor, el valor permanece hasta que lo

resetee otro valor o se llame al método clearParameters. Utilizando el objeto

PreparedStatement: ps, el siguiente fragmento de código reutiliza una sentencia

prepared después de resetar el valor de uno de sus parámetros, dejando el otro igual.

Utilizar una Bucle para asignar Valores

Normalmente se codifica más sencillo utilizando un bucle for o while para asignar

valores de los parámetros de entrada. El siguiente fragmento de código demuestra la

utilización de un bucle for para asignar los parámetros en un objeto

PreparedStatement: ps. El array stocks contiene las cantidades del stock de los

productos. Estas cantidades corresponden con los nombres de los productos listados

en el array productos, por eso la primera cantidad de stocks (175) se aplica al primer

nombre de productos ("arroz"), la segunda cantidad de stocks (150) se aplica al

segundo nombre de productos ("azúcar"), etc. Este fragmento de código demuestra la

actualización de la columna STOCKPRO para todos los nombres de productos de la

tabla PRODUCTOS.

PreparedStatement ps;

String cad="update PRODUCTOS set STOCPRO=? where NOMPRO like ?";

ps=con.prepareStatement(cad);

int[] stocks={175, 150, 60, 155, 90};

String[] productos={"arroz","azúcar","aceite","mantequilla","leche"};

int len=stocks.length;

for(int i=0;i<len;i++)

{ ps.setInt(1, stocks[i]);

ps.setString(2, productos[i]);

ps.executeUpdate();

}

Page 164: Lenguaje de Programación II

UNIVERSIDAD PRIVADA TELESUP

164

Cuando el propietario quiere actualizar los nuevos stocks de la semana siguiente,

puede utilizar el mismo código como una plantilla. Todo lo que tiene que hacer es

introducir las nuevas cantidades en el orden apropiado en el array stocks. Los

nombres de los productos permanecen constantes, por eso no necesitan cambiarse.

(en una aplicación real, los valores probablemente serán introducidos por el usuario en

vez de hacerlos a través de un array).

Creación de aplicaciones swing que realicen consultas en JTables.

Realizar una aplicación que permita seleccionar desde una lista desplegable la

categoría de un producto y luego mostrar la lista de productos pertenecientes a dicha

categoría. Los elementos de la lista desplegable deben ser tomados desde la tabla

categorías.

Page 165: Lenguaje de Programación II

UNIVERSIDAD PRIVADA TELESUP

165

LÓGICA DE PRESENTACIÓN

Clase : FrmProductosCategorias Paquete : View Descripción : Esta aplicación filtra los datos de los productos de acuerdo con la categoría

package View;

import Ds.GestionBD;

import java.sql.*;

import javax.swing.JOptionPane;

import javax.swing.table.DefaultTableModel;

public class frmConsultaProductos extends javax.swing.JFrame {

GestionBD gbd=new GestionBD();

private void jComboBox1ItemStateChanged(java.awt.event.ItemEvent evt) {

// TODO add your handling code here:

try {

gbd.conectar();

String codcat="";

codcat=((String)jComboBox1.getSelectedItem()).substring(0, 2);

String sql="Select * from productos where codcat="+codcat;

ResultSet rs=gbd.ejecutarConsulta(sql);

DefaultTableModel dtm=new DefaultTableModel();

dtm.addColumn("Codproducto");

dtm.addColumn("Producto");

dtm.addColumn("Descripcion");

dtm.addColumn("Marca");

dtm.addColumn("Precio");

dtm.addColumn("Stock");

while(rs.next()){ //Recorre el esquema de datos fila a fila

Object[] fila=new Object[6];

fila[0]=rs.getObject(1);

fila[1]=rs.getObject(2);

fila[2]=rs.getObject(3);

fila[3]=rs.getObject(4);

fila[4]=rs.getObject(5);

fila[5]=rs.getObject(6);

dtm.addRow(fila);

} //Fin del While

jTable1.setModel(dtm); //Enviar el dtm al JTable

} catch (Exception e) {

JOptionPane.showMessageDialog(null,"Error: "+e.getMessage());

}

}

}

Nota: Se requiere en el paquete Ds, la clase GestionBD

Page 166: Lenguaje de Programación II

UNIVERSIDAD PRIVADA TELESUP

166

Lecturas Recomendadas

Elabore una aplicación que usando POO permita realizar el

mantenimiento de datos de las tablas maestras de la base de datos

Comercial (productos, vendedores y categorías), luego integrar

todos estos formularios (incluido FrmClientes) a través de un

JDestopPane que invoque a los diferentes formularios usando

JMenubar – JmenuItem.

Basándose en el ejercicio anterior elabora las siguientes consultas,

usando Jtables y PreparedStatement:

Visualizar los productos de acuerdo a un rango numérico de

stock

Listar los productos de acuerdo a categorías. Las categorías se

escogerán desde un Jcombo.

Guarda los formularios con sus respectivos nombres en una carpeta y

a su vez comprímela. Esta carpeta comprimida envíala a través de

“Mantenimiento de datos”.

Java Database Connectivity

http://es.wikipedia.org/wiki/Java_Database_Connectivity

Manual JDBC

http://www.todoprogramas.com/manuales/programacion/java/371.asp

Actividades y Ejercicios

Page 167: Lenguaje de Programación II

UNIVERSIDAD PRIVADA TELESUP

167

Autoevaluación

1. La tecnología JDBC:

a. Es una tecnología que pertenece al lenguaje de programación Java y

que representa a su entorno de desarrollo en general

b. Es una tecnología que permite realizar aplicaciones en el entorno visual

de formularios Swing

c. Es una tecnología de objetos que proporciona clases e interfaces para

el manejo de base de datos

d. Es un conjunto de interfaces que nos permite trabajar con aplicaciones

móviles

e. Es un conjunto de interfaces que nos permite trabajar con aplicaciones

gráficas

2. Crea un Statement, mediante el método createStatement():

a. DriverManager

b. Statement

c. Connection

d. ResultSet

e. Class

3. La siguiente instrucción:

Class.forName(driver);

a. Registra el tipo de driver requerido para trabajar con JDBC

b. Gestiona el uso de drivers JDBC

c. Establece el tipo de conexión para una base de datos

d. Abre la conexión hacia una base de datos

e. Cierra la conexión hacia una base de datos

4. Cuándo se utiliza método executeQuery:

a. Para ejecutar un comando Select

b. Para ejecutar un comando Insert, Update, Delete

c. Para crear un esquema de datos

d. Para modificar un comando SQL

e. Para modificar la estructura de una tabla

Page 168: Lenguaje de Programación II

UNIVERSIDAD PRIVADA TELESUP

168

5. La siguiente instrucción:

cn=DriverManager.getConnection(cadenaconexion,usuario,passw

ord);

a. Registra el tipo de driver requerido para trabajar con JDBC

b. Gestiona el uso de drivers JDBC

c. Establece el tipo de conexión para una base de datos

d. Abre la conexión hacia una base de datos

e. Cierra la conexión hacia una base de datos

6. La lógica de datos es:

a. Una capa encargada de las tareas que involucran la gestión de

procesos.

b. La interfaz del usuario por donde se ingresan o visualizan datos

(formulario)

c. El algoritmo utilizado para el desarrollo de nuestros programas

d. Una capa que se encarga de las siguientes operaciones: conectar,

ejecutar, consultar, ejecutar actualizacion, desconectar

e. Una capa encargada de la validación de la entrada de datos

7. El directorio de librerías externas de Java:

a. C:\Archivos de programa\Java\jdk1.6.0\jre\lib\ext

b. D:\Archivos de programa\Java\jdk1.6.0\jre\lib\ext

c. C:\Archivos de programa\Java\jdk1.6.0\jre\libre\ext

d. C:\Archivos de programa\Java\jdk1.6.0\jre\lib\ext\etc

e. C:\Archivos de programa\Java\jdk1.6.0\jre\lib\

8. El mantenimiento de software es menos engorroso y complejo, con…:

a. Programación en Capas

b. Programación en Interfaces

c. Programación en Campos

d. Programación vía Clases

e. Programación en Clases

Page 169: Lenguaje de Programación II

UNIVERSIDAD PRIVADA TELESUP

169

9. Antes de ejecutar un objeto PreparedStatement:

a. Necesitamos suministrar los valores que se utilizarán en los lugares

donde están las marcas de interrogación

b. Necesitamos ejecutar una sentencia que invoca triggers

c. Necesitamos ejecutar una sentencia que invoca sentencias SQL

avanzadas

d. Necesitamos construir una sentencia precompilada

e. Necesitamos ejecutar una sentencia que invoca sentencias SQL

básicas

10. El Bucle se utiliza para :

a. Asignar valores de las constantes.

b. Asignar valores de los parámetros.

c. Asignar valores de los parámetros de entrada.

d. Asignar valores.

e. Repetir un comando.

Page 170: Lenguaje de Programación II

UNIVERSIDAD PRIVADA TELESUP

170

Resumen

UUNNIIDDAADD DDEE AAPPRREENNDDIIZZAAJJEE IIVV::

La tecnología JDBC es un conjunto de clases e interfaces, escritos en código 100%

Java que permite la conexión y el manejo de los datos de una base de datos. La

tecnología JDBC utiliza un Driver provisto por el fabricante que permite la conexión

entre la aplicación y la base de datos. JDBC contiene una variedad amplia de clases e

interfaces para el manejo de datos, entre las que resaltan por su importancia las

siguientes: Connection (permite abrir, controlar y cerrar la conexión con una base de

datos); Statement (permite ejecutar los comandos SQL para insertar, modificar, borrar

y crear esquemas de datos); ResultSet (maneja un esquema de datos); DriverManager

(maneja los drivers de conexión).

Los pasos necesarios para establecer una conexión de datos son: a) importar las

clases del paquete java.sql b) registrar el driver a utilizar en la clase Drivermanager c)

abrir la conexión d) definir el objeto Statement para el manejo de comandos e) crear el

esquema de datos f) visualizar el contenido del esquema de datos g) cerrar la

conexión.

Para este caso de trabajo con base de datos, adicionaremos una nueva capa: la

Lógica de Datos, esta capa se encarga de la gestión de datos a través de las

operaciones elementales de: conectar, desconectar, ejecutar consultas y ejecutar

actualiaciones. Mientras que la lógica de presentación se encarga de la interface del

usuario, y la lógica de negocios se encarga de la gestión de los diferentes procesos o

tareas. La programación en capas nos permitirá tener un código fuente más entendible

y fácil de dar mantenimiento.

La Clase PreparedStatement es una clase que hereda de la interfaz Statement. Esta

clase es similar al Statement con la ventaja de que se puede definir en el comando

parámetros de entrada, es útil especialmente cuando un mismo comando se requiere

ejecutar n veces, dentro de un bucle, donde en cada vuelta los datos del paramento de

entrada son diferentes.

El contenido de un ResultSet (esquema de datos) se puede visualizar en un JTable,

esto nos facilita una mejor visualización de los datos.

Page 171: Lenguaje de Programación II

UNIVERSIDAD PRIVADA TELESUP

171

Glosario

PROGRAMACIÓN ORIENTADA A OBJETOS:

Es una forma de programar muy parecida a la forma como los seres humanos

interpretamos la realidad, donde todo aquel generador de información es una

clase de la cual deriba un objeto.

MÉTODO :

Acción de una clase

PROPIEDAD:

Dato o descripción de una clase.

INSTANCIA :

Acción de crear un objeto a partir de una clase

MÉTODO ESTÁTICO :

Acción asociada directamente de la clase y de un objeto instanciado

VARIABLE ESTÁTICA:

Variable asociada a la clase y no a un objeto instanciado.

CLASE DERIVADA:

Una clase hija que extiende o hereda de una clase base, la clase derivada hereda

las propiedades y métodos de su clase base.

POLIMORFISMO:

Corresponde a las distintas formas de actuar de un objeto o método de acuerdo al

escenario en el que actua

SQL:

Lenguaje estructurado de consultas, es un lenguaje universal de manejo y

administración de una base de datos.

API :

Librería de recurso externo a una aplicación, desde la cual se puede invocar a

clases, métodos, propiedades, etc.

DRIVER:

Software provisto por el fabricante de una base de datos que permita la conexión

entre la aplicación Java y una base de datos.

ODBC:

API de Microsoft Windows que permite la conexión de base de datos Microsoft

con distintos orígenes de datos.

Page 172: Lenguaje de Programación II

UNIVERSIDAD PRIVADA TELESUP

172

STATEMENT:

Interfaz de Java que se encarga de ejecutar los comandos SQL (ejm: Select,

Update, Delete, Insert, etc)

RESULTSET:

Esquema de datos creado por la ejecución de un comando select, alojado en la

memoria del equipo del cliente.

PUNTERO:

Marca que apunta al registro activo de una tabla.

CAMPO:

Referido a la columna de una tabla.

REGISTRO:

Referido a la fila de una tabla.

Try ... catch :

Estructura que controla la ocurrencia de un error, al producirse un error atrapa el

objeto Exception relacionado al error y ejecuta la sección catch. (ver lectura anexa

a esta unidad)

EXCEPTION:

Objeto que se genera al producirse un error, existen diversos tipos de Exception,

de acuerdo al error producido. (ver lectura anexa a esta Unidad)

Page 173: Lenguaje de Programación II

UNIVERSIDAD PRIVADA TELESUP

173

Fuentes de Información

Bibliográficas

GUTIERREZ, FrancisoProgramación orientada a Objetos con Java, Editorial

Agapea, 2007

THOMAS C., Wu, Introducción a la Programación Orientada a Objetos con

Java, Editorial McGraw-Hill,2007

MUKHAR, Kevin / LAUINGER, Todd / CARNELL, John; Fundamentos de

Base de Datos con Java. Editorial Anaya Multimedia, 2002

Electrónicas

http://wwwdi.ujaen.es/asignaturas/progav/progav-tema2.pdf

http://www.sc.ehu.es/sbweb/fisica/cursoJava/fundamentos/clases1/clas

es.htm

http://www.maestrosdelweb.com/editorial/tutsql1/

http://www.scribd.com/doc/2892924/Unidad-3-Lenguaje-SQL-I-DDL-y-

DML

http://www.taringa.net/posts/downloads/1028242/Libro:-Base-de-Datos-

Con-JAVA-JDBC.html

Vídeos

Curso Java : Programación Orientada a Objetos http://www.taringa.net/posts/ebooks-tutoriales/2351711/Curso-JAVA---Programacion-orientada-a-objetos---Video.html

Programación Orientada a Objetos: Objetos y Clases http://www.youtube.com/watch?v=-sJjp2VEvLQ&feature=related

Creating a GUI with JFC/Swing http://java.sun.com/docs/books/tutorial/uiswing/

Programa Radio Button en Java http://www.youtube.com/watch?v=BVLnkBaxQio

Page 174: Lenguaje de Programación II

UNIVERSIDAD PRIVADA TELESUP

174

Solucionario

UNIDAD DE

APRENDIZAJE 1

1. C

2. E

3. B

4. C

5. E

6. C

7. A

8. A

9. A

10. A

UNIDAD DE

APRENDIZAJE 2:

1. C

2. D

3. A

4. D

5. C

6. A

7. D

8. C

9. B

10. A

UNIDAD DE

APRENDIZAJE 3:

1. B

2. C

3. A

4. A

5. A

6. A

7. C

8. A

9. E

10. C

UNIDAD DE

APRENDIZAJE 4:

1. C

2. C

3. A

4. A

5. D

6. D

7. A

8. A

9. A

10. C