Lenguaje de Programación II
description
Transcript of Lenguaje de Programación II
UNIVERSIDAD PRIVADA TELESUP
1
Las f
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
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
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
UNIVERSIDAD PRIVADA TELESUP
5
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
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
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).
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.
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
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
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
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
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
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
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)
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
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; }
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
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.
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
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.
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
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
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)
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
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”;
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
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.
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
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
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
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
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
UNIVERSIDAD PRIVADA TELESUP
35
TEMA 4
Distingue la utilidad de los métodos estáticos de la clase Math y String
Competencia:
de la ClaseMath
Clase String
Métodos
y la
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
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
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
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
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
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
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
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
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
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;
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)) ) ; } }
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;
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))); } }
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
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.
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.
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);
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
……………………………………………………………………………………
……………………………………………………………………………………
…...
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.
UNIVERSIDAD PRIVADA TELESUP
55
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
UNIVERSIDAD PRIVADA TELESUP
57
TEMA 1
Distingue la utilidad de las clases wrapper y convierte datos y objetos aplicando el casting.
Competencia:
Casting y
Wrapper
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
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.
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.
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>;
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)
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);
}
}
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);
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
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.
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
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.
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));
}
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);
}
}
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);
}
}
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
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 { ... }
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.
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.
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.
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)
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.
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;
}
}
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));
}
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:
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
}
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é
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());
}
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:
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;
}
}
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");
}
}
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
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”
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
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
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.
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).
UNIVERSIDAD PRIVADA TELESUP
94
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
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
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
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
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.
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)
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;
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>
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
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
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.
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')
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';
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)
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.
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’;
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
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;
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
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
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
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
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.
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 |
+-------------+-----------------+
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.
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
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
UNIVERSIDAD PRIVADA TELESUP
122
TEMA 4
Optimiza la estructura de la base de datos aplicando las sentencias DDL
Competencia:
Comandos DDL
de Uso
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
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>
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.
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>
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.
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
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”.
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.
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
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
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,
UNIVERSIDAD PRIVADA TELESUP
134
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
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
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.
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.
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.
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.
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.
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
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.
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.
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).
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
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)
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
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)
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);
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();
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.
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:
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.
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();
}
}
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) {
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:
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);
}
}
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
}
}
UNIVERSIDAD PRIVADA TELESUP
160
TEMA 4
Aplica sentencias precompiladas con los datos de una tabla.
Competencia:
Prepared Statement
Interface
La
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.
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().
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();
}
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.
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
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
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
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
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.
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.
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.
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)
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
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