UNIVERSIDAD PRIVADA TELESUP Las f
1
UNIVERSIDAD PRIVADA TELESUP
Prefacio:
E
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.
2
UNIVERSIDAD PRIVADA TELESUP
Estructura de los Contenidos
Fundamentos de la Programación Orientada a Objetos
Conceptos básicos de la programación orientada a objetos
Conceptos avanzados de la Programación Orientada a Objetos
Wrapper y Casting
Fundamentos del Lenguaje Estructurado de Consultas SQL
Instalación del servidor de datos MySQL y comandos DML y DDL
Variables y métodos estáticos
La clase Date y Gregorian Calendar
Modelamiento de clases
Herencia de clases y niveles de acceso
Uso del comando Select usando varias tablas
Métodos de la clase Math y la Clase String
Polimorfismo: interfaces y métodos abstractos
Uso de comandos DDL
Uso del comando Select
Desarrollo de Aplicaciones de Escritorio con JDBC
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
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”.
3
UNIVERSIDAD PRIVADA TELESUP
Índice del Contenido
I. PREFACIO II. DESARROLLO DE LOS CONTENIDOS UNIDAD DE APRENDIZAJE 1: Fundamentos de la Programación Orientada a Objetos 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 UNIDAD DE APRENDIZAJE 2: Conceptos Avanzados de la Programación Orientado a Objetos 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 UNIDAD DE APRENDIZAJE 3: Fundamentos del Lenguaje Estructurado de Consultas SQL 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 UNIDAD DE APRENDIZAJE 4: Desarrollo de Aplicaciones de Escritorio con JDBC 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 III. GLOSARIO IV. FUENTES DE INFORMACIÓN V. SOLUCIONARIO
02 04 05 - 54 06 06 06 06 06 06 07 - 48 07 21 28 35 49 49 51 54 55 - 93 56 56 56 56 56 56 57 - 87 57 65 72 81 88 88 90 93 94 - 133 95 95 95 95 95 95 96 - 127 96 111 115 122 128 128 130 133 134 - 170 135 135 135 135 135 135 136 - 165 136 148 153 160 166 166 167 170 171 173 174
4
UNIVERSIDAD PRIVADA TELESUP
5
UNIVERSIDAD PRIVADA TELESUP
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
6
UNIVERSIDAD PRIVADA TELESUP
Conceptos Básicos
TEMA 1
de la Programación Orientada a Objetos Competencia: Analiza una realidad, se abstrae y lo formula en un modelo de objetos.
7
UNIVERSIDAD PRIVADA TELESUP
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).
8
UNIVERSIDAD PRIVADA TELESUP 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.
9
UNIVERSIDAD PRIVADA TELESUP 2. Conceptos Básicos de la Programacion Orientada a Objetos: a) Clase 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 deCLASE la clase b) PROPIEDADES DE LA 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)
10
UNIVERSIDAD PRIVADA TELESUP c) MÉTODOS DE LA CLASE
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.
11
UNIVERSIDAD PRIVADA TELESUP d) OBJETO INSTANCIADO
d) Objeto Instaciado
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.
Todo objeto instanciado hereda automáticamente las propiedades y métodos de su clase base
e) Estado en OBJETO un objeto e) ESTADO EN UN 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.
12
UNIVERSIDAD PRIVADA TELESUP
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
13
UNIVERSIDAD PRIVADA TELESUP
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
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
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: Tipo de dato devuelto por el metido como respuesta
Argumentos de Entrada
public double sumar(double a, double b) { double r;
Nombre del método
r=a+b; return r; }
14
UNIVERSIDAD PRIVADA TELESUP
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
15
UNIVERSIDAD PRIVADA TELESUP
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)
16
UNIVERSIDAD PRIVADA TELESUP
{ 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
17
UNIVERSIDAD PRIVADA TELESUP
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; }
18
UNIVERSIDAD PRIVADA TELESUP
// 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
19
UNIVERSIDAD PRIVADA TELESUP
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.
Proyecto Paquete 1 Paquete 2
Aquí tenemos dos paquetes, dentro de cada paquete tenemos una clase.
Cuando una clase es creada dentro de un paquete, debe llevar en la primera línea: el nombre del paquete.
package Ejemplo1; public class Calculadora { . . }
//Nombre del paquete Aquí va el contenido de la clase Calculadora
Clase Anexo, creada en otro paquete
package Ejemplo2; import Ejemplo1.Calculadora; aquí
//Nombre del paquete donde se encuentra esta clase //Especificamos el paquete y la clase que se desea utilizar
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)); } }
20
UNIVERSIDAD PRIVADA TELESUP
Variables TEMA 2 y Métodos
Estáticos Competencia: 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.
21
UNIVERSIDAD PRIVADA TELESUP
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.
22
UNIVERSIDAD PRIVADA TELESUP
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; Variables Estáticas 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 }
Usando Variables Estáticas
// 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;
23
UNIVERSIDAD PRIVADA TELESUP
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 }
Usando Variables Estáticas
Usando Variables Estáticas
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
24
UNIVERSIDAD PRIVADA TELESUP
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)
25
UNIVERSIDAD PRIVADA TELESUP
{ 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
26
UNIVERSIDAD PRIVADA TELESUP
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”;
27
UNIVERSIDAD PRIVADA TELESUP
Modelamiento DEClases
TEMA 3
DE Competencia: Diferencia la capa de la Lógica de Presentación y Lógica de Negocios y los utiliza al desarrollar aplicaciones en dos capas.
28
UNIVERSIDAD PRIVADA TELESUP
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.
29
UNIVERSIDAD PRIVADA TELESUP
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:
txtNC txtMS txtTC txtMD
BtnProcesa r
BtnLimpiar
BtnCerrar
b. Crear la Lógica de Negocios Ahora debemos crear la clase Moneda en el mismo paquete
30
UNIVERSIDAD PRIVADA TELESUP
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 Procesar Botón 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 Limpiar Botón private void BtnLimpiarActionPerformed(java.awt.event.ActionEvent evt) { txtNC.setText(""); txtTC.setText(""); txtMS.setText(""); txtMD.setText(""); }
31
UNIVERSIDAD PRIVADA TELESUP BotónCerrar Cerrar Botón
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:
32
UNIVERSIDAD PRIVADA TELESUP
txta txts txtc txtn
btnPROCESAR
btnLIMPIA RRR
btnCERRAR
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() { } }
33
UNIVERSIDAD PRIVADA TELESUP
c. Codificación de los botones del formulario
Botón Procesar 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
Botón Limpiar private void btnLIMPIARActionPerformed(java.awt.event.ActionEvent evt) { txta.setText(""); txts.setText(""); txtc.setText(""); txtn.setText(""); }
Botón Cerrar private void btnCERRARActionPerformed(java.awt.event.ActionEvent evt) { System.exit(0); }
d. Ejecutar el formulario [presionar la tecla Shif F6]
34
UNIVERSIDAD PRIVADA TELESUP
Métodos de la
TEMA 4
ClaseMath y la Clase String Competencia: Distingue la utilidad de los estáticos de la clase Math y String
métodos
35
UNIVERSIDAD PRIVADA TELESUP
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 a. Método abs 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));
b. Método cos
a. Método cos :
Devuelve el coseno de una cantidad de radianes
c. Método b. Método sin : sin Devuelve el seno de una cantidad de radianes
36
UNIVERSIDAD PRIVADA TELESUP
d. Método c. Método tan : 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));
e. Método d. Método atan2atan2 : 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));
f. Método e. Método exp: 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));
g. Método f. Método log: 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));
37
UNIVERSIDAD PRIVADA TELESUP
h. Método g. Método pow: pow Devuelve la potencia de un número Ejemplo: System.out.println("pow(10.0, 3.5) es " + Math.pow(10.0,3.5));
i. Método h. Método sqrt: sqrt Devuelve raíz cuadrada de un número. System.out.println("La raíz cuadrada de " + x + " es " + Math.sqrt(x));
j. Método round 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.
k. Método j. Método floor :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.
38
UNIVERSIDAD PRIVADA TELESUP
l. Método k. Método max 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 : m. 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
39
UNIVERSIDAD PRIVADA TELESUP
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étodotoUpperCase toUpperCase: Método 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 MétodotoLowerCase toLowerCase: Devuelve el contenido de la cadena en minúsculas. Ejemplo: if (txtlogin.getText()).toLowerCase=”PEPE”) { JOptionPane.showDialog(null,“Usuario Admitido”,”Aviso”,1); }
40
UNIVERSIDAD PRIVADA TELESUP
Método MétodocharAt 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étodocompareTo compareTo: Método 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”); }
41
UNIVERSIDAD PRIVADA TELESUP
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 Método length(); 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étodoendsWith endsWith: Método Devuelve verdadero si termina con … Ejemplo: if (txtDNI.getText().endsWith(”3”))==true { System.out.println(“Este DNI termina en 3”); }
Método indexOf indexOf : Método 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);
42
UNIVERSIDAD PRIVADA TELESUP 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 Métodoequals 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 MétodostartsWith 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”); }
43
UNIVERSIDAD PRIVADA TELESUP
Método Métodosubstring 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 Métodotrim 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:
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);
44
UNIVERSIDAD PRIVADA TELESUP
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;
45
UNIVERSIDAD PRIVADA TELESUP
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)) ) ; } }
46
UNIVERSIDAD PRIVADA TELESUP
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;
47
UNIVERSIDAD PRIVADA TELESUP
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))); } }
48
UNIVERSIDAD PRIVADA TELESUP
Lecturas Recomendadas
Introducción a la Programación Orientada a Objetos http://elvex.ugr.es/decsai/java/index.html
Actividades y Ejercicios 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.
49
UNIVERSIDAD PRIVADA TELESUP
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
gastoTotalAcumulado
con
un
acumulador
la variable estática 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.
50
UNIVERSIDAD PRIVADA TELESUP
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.
51
UNIVERSIDAD PRIVADA TELESUP
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);
52
UNIVERSIDAD PRIVADA TELESUP
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)
univ.int c. Univ.Telesup d. String e. System.out println …………………………………………………………………………………… …………………………………………………………………………………… …... b.
53
UNIVERSIDAD PRIVADA TELESUP
Resumen
UNIDAD DE APRENDIZAJE I:
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.
54
UNIVERSIDAD PRIVADA TELESUP
55
UNIVERSIDAD PRIVADA TELESUP
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 establecidos y el respeto a las normas de convivencia.
con los horarios
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
56
UNIVERSIDAD PRIVADA TELESUP
Wrapper
TEMA 1
y
Casting Competencia: Distingue la utilidad de las clases wrapper y convierte datos y objetos aplicando el casting.
57
UNIVERSIDAD PRIVADA TELESUP
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
58
UNIVERSIDAD PRIVADA TELESUP
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(),
Métodos para obtener el valor del tipo
intValue(), shortValue(), byteValue()
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,
Constantes predefinidas. TYPE es el objeto
POSITIVE_INFINITY, NEGATIVE_INFINITY,
Class representando esta clase
NaN, TYPE
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(),
Conversores con otros tipos primitivos
intValue(), shortValue(), byteValue() Integer decode(String), Integer parseInt(String),
Conversores con String
String toString(), Integer valueOf(String) String toBinaryString(int), String
Conversores a cadenas
representando
toHexString(int),
enteros en otros sistemas de numeración
String toOctalString(int) 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.
59
UNIVERSIDAD PRIVADA TELESUP 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.
60
UNIVERSIDAD PRIVADA TELESUP 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) ;
61
UNIVERSIDAD PRIVADA TELESUP
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)
62
UNIVERSIDAD PRIVADA TELESUP
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")); entero
// Convierte de String a numérico
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); } }
63
UNIVERSIDAD PRIVADA TELESUP
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);
64
UNIVERSIDAD PRIVADA TELESUP
TEMA 2 La Clase Date y Gregorian Calendar Competencia: Maneja los datos cronológicos y relaciona una fecha de tipo Date con la clase GregorianCalendar.
65
UNIVERSIDAD PRIVADA TELESUP
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
66
UNIVERSIDAD PRIVADA TELESUP 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.
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 after()
before()
getTime() setTime() equals() compareTo()
Propósito Devuelve verdadero si la fecha del argumento se encuentra después de la fecha implícita. Falso en caso contrario. Devuelve verdadero si la fecha del argumento se encuentra antes de la fecha implícita. Falso en caso contrario. Obtiene los milisegundos transcurridos desde el 01/01/1970. Establece los milisegundos transcurridos desde el 01/01/1970. 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.
67
UNIVERSIDAD PRIVADA TELESUP La clase GregorianCalendar maneja un sistema de calendario completo que siempre debe apuntar a una determinada fecha
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.
68
UNIVERSIDAD PRIVADA TELESUP
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));
69
UNIVERSIDAD PRIVADA TELESUP System.out.println("Month: "+gc.get(Calendar.MONTH)); System.out.println("Hora: "+gc.get(Calendar.HOUR)); }
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); }
70
UNIVERSIDAD PRIVADA TELESUP }
71
UNIVERSIDAD PRIVADA TELESUP
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); } }
72
UNIVERSIDAD PRIVADA TELESUP
Herencia de Clases y Niveles de Acceso
TEMA 3
Competencia: Crea un modelo de clases aplicando herencia de clases. Desarrolla un caso práctico aplicando herencia de clases.
73
UNIVERSIDAD PRIVADA TELESUP
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 { ... }
74
UNIVERSIDAD PRIVADA TELESUP
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.
75
UNIVERSIDAD PRIVADA TELESUP
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.
76
UNIVERSIDAD PRIVADA TELESUP 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.
77
UNIVERSIDAD PRIVADA TELESUP
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)
78
UNIVERSIDAD PRIVADA TELESUP 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.
79
UNIVERSIDAD PRIVADA TELESUP
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; } }
80
UNIVERSIDAD PRIVADA TELESUP
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)); }
81
UNIVERSIDAD PRIVADA TELESUP
Polimorfismo:
TEMA 4
Interfaces y Métodos Abstractos Competencia: Planifica , diseña, implementa y formula un modelo de clase para representar una realidad aplicando herencias y polimorfismo.
82
UNIVERSIDAD PRIVADA TELESUP
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 }
83
UNIVERSIDAD PRIVADA TELESUP
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();
Este es un método abstracto, no usa llaves (no tiene implementación) No tienen definido el Cómo, pero si el Qué
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..."; } }
84
UNIVERSIDAD PRIVADA TELESUP
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()); }
85
UNIVERSIDAD PRIVADA TELESUP 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:
86
UNIVERSIDAD PRIVADA TELESUP
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; } }
87
UNIVERSIDAD PRIVADA TELESUP
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"); } }
88
UNIVERSIDAD PRIVADA TELESUP
Lecturas Recomendadas
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 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”
89
UNIVERSIDAD PRIVADA TELESUP
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”
90
UNIVERSIDAD PRIVADA TELESUP
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
91
UNIVERSIDAD PRIVADA TELESUP 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. 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
92
UNIVERSIDAD PRIVADA TELESUP 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.
93
UNIVERSIDAD PRIVADA TELESUP
Resumen
UNIDAD DE APRENDIZAJE II:
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).
94
UNIVERSIDAD PRIVADA TELESUP
95
UNIVERSIDAD PRIVADA TELESUP
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
96
UNIVERSIDAD PRIVADA TELESUP
Instalación del Servidorde
TEMA 1
Datos MySQL y Comandos DML y DDL Competencia: Instala el servidor de base de datos e implementa las tablas de datos y aplica los comandos DML encargados del mantenimiento de datos.
97
UNIVERSIDAD PRIVADA TELESUP
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
98
UNIVERSIDAD PRIVADA TELESUP
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
99
UNIVERSIDAD PRIVADA TELESUP
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.
100
UNIVERSIDAD PRIVADA TELESUP
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)
101
UNIVERSIDAD PRIVADA TELESUP
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-ntlog 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;
102
UNIVERSIDAD PRIVADA TELESUP
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>
103
UNIVERSIDAD PRIVADA TELESUP 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
104
UNIVERSIDAD PRIVADA TELESUP 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
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
Descripción
Un número entero que puede ser 0 ó 1
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.
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
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.
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.175494351E38, 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
MEDIUMINT
INT o INTEGER
BIGINT
FLOAT(X)
105
UNIVERSIDAD PRIVADA TELESUP 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
VARCHAR(n)
n +1 bytes
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
ENUM('value1','value2',...)
1 ó dos bytes dependiendo del número de valores
SET('value1','value2',...)
1, 2, 3, 4 ó 8 bytes, dependiendo del número de valores
Almacena una cadena de longitud fija. La cadena podrá contener desde 0 a 255 caracteres.
Almacena una cadena de longitud variable. La cadena podrá contener desde 0 a 255 caracteres.
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. Campo que puede tener un único valor de una lista que se especifica. El tipo Enum acepta hasta 65535 valores distintos
Un campo que puede contener ninguno, uno ó varios valores de una lista. La lista puede tener un máximo de 64 valores.
106
UNIVERSIDAD PRIVADA TELESUP
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 insert insert
into categoria(codcat,nomcat) values ('01','Abarrotes') into categoria(codcat,nomcat) values ('02','Lacteos') 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-1205','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')
107
UNIVERSIDAD PRIVADA TELESUP
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';
108
UNIVERSIDAD PRIVADA TELESUP 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 ( Relación Permanente entre las dos tablas codprochar(3)INTNOT NULL, (entre los campos communes de las dos nomprovarchar(20) NOT NULL, prepro double NOT NULL, tablas) stockpro int NOT NULL, codcat char(2)NOT NULL, PRIMARY KEY(codpro), INDEX (codpro), FOREIGN KEY (codcat) REFERENCEScategoria(codcat) ) TYPE = INNODB;
109
UNIVERSIDAD PRIVADA TELESUP
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.
110
UNIVERSIDAD PRIVADA TELESUP
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’;
111
UNIVERSIDAD PRIVADA TELESUP
TEMA 2
Uso
del
Comando Select Competencia: Crea esquemas de datos haciendo uso de la sentencia SELECT aplicándolos a una sola tabla con todas sus variantes.
112
UNIVERSIDAD PRIVADA TELESUP
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;
113
UNIVERSIDAD PRIVADA TELESUP
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
114
UNIVERSIDAD PRIVADA TELESUP
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
115
UNIVERSIDAD PRIVADA TELESUP
Uso
TEMA 3
del
Comando Select con varias tablas Competencia:
Crea esquemas de datos haciendo uso de la sentencia SELECT aplicándolos a varias tablas y estableciendo la relación entre ellas.
116
UNIVERSIDAD PRIVADA TELESUP
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
117
UNIVERSIDAD PRIVADA TELESUP
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.
118
UNIVERSIDAD PRIVADA TELESUP
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 | +-------------+-----------------+
119
UNIVERSIDAD PRIVADA TELESUP 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.
120
UNIVERSIDAD PRIVADA TELESUP 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
121
UNIVERSIDAD PRIVADA TELESUP 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
122
UNIVERSIDAD PRIVADA TELESUP
TEMA 4
Uso de
Comandos DDL Competencia: Optimiza la estructura de la base de datos aplicando las sentencias DDL
123
UNIVERSIDAD PRIVADA TELESUP
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
124
UNIVERSIDAD PRIVADA TELESUP 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>
125
UNIVERSIDAD PRIVADA TELESUP 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.
126
UNIVERSIDAD PRIVADA TELESUP
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>
127
UNIVERSIDAD PRIVADA TELESUP 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 diversas
y
podrá
realizar
operaciones
mantenimiento
de
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.
128
UNIVERSIDAD PRIVADA TELESUP
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
Actividades y Ejercicios 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”.
129
UNIVERSIDAD PRIVADA TELESUP
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”.
130
UNIVERSIDAD PRIVADA TELESUP
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.
131
UNIVERSIDAD PRIVADA TELESUP
5. Redondea un dato numérico en este caso redondea la columna prepro con dos decimales) a. b. c. d. e. 6.
Round Lpad comodin limit concat
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
132
UNIVERSIDAD PRIVADA TELESUP
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
133
UNIVERSIDAD PRIVADA TELESUP
Resumen
UNIDAD DE APRENDIZAJE III:
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,
134
UNIVERSIDAD PRIVADA TELESUP
135
UNIVERSIDAD PRIVADA TELESUP
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
136
UNIVERSIDAD PRIVADA TELESUP
TEMA 1
Introducción
a la Tecnología JDBC Competencia: Comprende la forma cómo trabaja la tecnología JDBC (Java Database Connetivity) al conectarse con una base de datos.
137
UNIVERSIDAD PRIVADA TELESUP
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.
138
UNIVERSIDAD PRIVADA TELESUP
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.
139
UNIVERSIDAD PRIVADA TELESUP
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.
140
UNIVERSIDAD PRIVADA TELESUP
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.
141
UNIVERSIDAD PRIVADA TELESUP
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
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.
prepareStatement(String sql, int tipoResultSet, int tipoConcurrencia) 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
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.
prepareStatement(String sql, int tipoResultSet, int tipoConcurrencia)
142
UNIVERSIDAD PRIVADA TELESUP
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
143
UNIVERSIDAD PRIVADA TELESUP 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.
144
UNIVERSIDAD PRIVADA TELESUP 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.
145
UNIVERSIDAD PRIVADA TELESUP
METODOS DEL RESULTSET Nombre del Método previous()
Descripción
isFirst() getString() getInt() getDate() getBoolean() getDouble()
Envía el puntero a la fila anterior del objeto ResultSet. (devuelve true si encuentra la fila anterior) Envía el puntero a la fila siguiente del objeto ResultSet. (devuelve true si encuentra la fila siguiente) Envía el puntero a la primera fila del objeto ResultSet. (devuelve true si se encuentra primera fila) Envía el puntero a la última fila del objeto ResultSet. (devuelve true si se encuentra última fila) Devuelve verdadero, si el puntero se encuentra en la primera fila Captura un dato de tipo String del esquema de datos Captura un dato de tipo int del esquema de datos Captura un dato de tipo Date del esquema de datos Captura un dato de tipo boolean del esquema de datos Captura un dato de tipo double del esquema de datos
getLong()
Captura un dato de tipo long del esquema de datos
next() first() last()
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).
146
UNIVERSIDAD PRIVADA TELESUP 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
147
UNIVERSIDAD PRIVADA TELESUP El ResultSet generado tiene la siguiente estructura:
rs(1)
CodCli
rs(2)
ApeCli
rs(3)
NomCli
rs(4)
rs(5)
DirCli
DisCli
0001
Vargas Machuca Luís Alex
Av. Túpac Amaru 1254 Comas
0002 0003 0004 0006 0007 0008 0009 0010
García López Sánchez Rojas Salinas Montalvo Oré Palomino Montalvo Villanueva Palma López Lozano Aguirre
Jr. Amazonas 258 Av. José Pardo 365 Jr. Bolívar 2245 Barranco San Martín de Porres Los Olivos San Juan Comas
Jorge Antonio Randy Carla Julio César Luís Freíd Elian Víctor
Lima Lince Breña San Pedro Av. Perú Cdra 28 Av. Palmeras Av. Las Flores Parad Túpac Amaru Km. 16
148
UNIVERSIDAD PRIVADA TELESUP
Estableciendo o una
TEMA 2
conexión
de
datos Competencia: Maneja las principales interfaces del JDBC para el manejo y procesamiento de datos de una tabla.
149
UNIVERSIDAD PRIVADA TELESUP
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: mysqlconnector-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)
150
UNIVERSIDAD PRIVADA TELESUP 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);
151
UNIVERSIDAD PRIVADA TELESUP 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();
152
UNIVERSIDAD PRIVADA TELESUP 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");
Visualiza el contenido del esquema de datos.
System.out.print(rs.getString("Dircli")+"\t"); System.out.println(""); } rs.close(); cn.close(); }
Cierra la conexión y el esquema de datos.
catch(Exception e) { System.out.println("Error el proceso acceso a la base de datos"); System.out.println(e.getMessage()); } } }
153
UNIVERSIDAD PRIVADA TELESUP
Aplicando POO
Para la ade Operaciones dfdsres con una ladsdsd
TEMA 3
Base de datos sds resresre ddatos gfgfgfd Competencia: gflla
sesrfdf dsfdsGe
Aplica la programación orientada a objetos al programar una aplicación con base de datos.
stión
154
UNIVERSIDAD PRIVADA TELESUP
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.
155
UNIVERSIDAD PRIVADA TELESUP
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(); } }
156
UNIVERSIDAD PRIVADA TELESUP LOGICA DE PRESENTACIÓN Clase Paquete Descripción
: FrmClientes.java : view : 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) {
157
UNIVERSIDAD PRIVADA TELESUP
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:
158
UNIVERSIDAD PRIVADA TELESUP
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); } }
159
UNIVERSIDAD PRIVADA TELESUP
LOGICA DE NEGOCIOS Clase Paquete Descripción
: ClienteModel : Model : 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 } }
160
UNIVERSIDAD PRIVADA TELESUP
La
TEMA 4
Interface Prepared Statement Competencia: Aplica sentencias precompiladas con los datos de una tabla.
161
UNIVERSIDAD PRIVADA TELESUP
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.
162
UNIVERSIDAD PRIVADA TELESUP 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().
163
UNIVERSIDAD PRIVADA TELESUP
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
164
UNIVERSIDAD PRIVADA TELESUP
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.
165
UNIVERSIDAD PRIVADA TELESUP
LÓGICA DE PRESENTACIÓN Clase Paquete Descripción categoría
: FrmProductosCategorias : View : Esta aplicación filtra los datos de los productos de acuerdo con la
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
166
UNIVERSIDAD PRIVADA TELESUP
Lecturas Recomendadas
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
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”.
167
UNIVERSIDAD PRIVADA TELESUP
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
168
UNIVERSIDAD PRIVADA TELESUP
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
169
UNIVERSIDAD PRIVADA TELESUP
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.
170
UNIVERSIDAD PRIVADA TELESUP
Resumen
UNIDAD DE APRENDIZAJE IV:
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.
171
UNIVERSIDAD PRIVADA TELESUP
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.
172
UNIVERSIDAD PRIVADA TELESUP
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)
173
UNIVERSIDAD PRIVADA TELESUP
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-yDML http://www.taringa.net/posts/downloads/1028242/Libro:-Base-de-DatosCon-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
174
UNIVERSIDAD PRIVADA TELESUP
Solucionario UNIDAD DE
APRENDIZAJE 1
1. C
UNIDAD DE APRENDIZAJE 2: 1. C
2. E
2. D
3. B
3. A
4. C
4. D
5. E
5. C
6. C
6. A
7. A
7. D
8. A
8. C
9. A
9. B
10. A
10. A
UNIDAD DE
UNIDAD DE
APRENDIZAJE 3:
APRENDIZAJE 4:
1. B
1. C
2. C
2. C
3. A
3. A
4. A
4. A
5. A
5. D
6. A
6. D
7. C
7. A
8. A
8. A
9. E
9. A
10. C
10. C
175