Universidad Privada Telesup: Las f

Lenguaje de programación IIDescripción completa

Views 203 Downloads 7 File size 11MB

Report DMCA / Copyright

DOWNLOAD FILE

Recommend stories

Citation preview

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;i0) { 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 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 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.

66

UNIVERSIDAD PRIVADA TELESUP

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. La clase GregorianCalendar maneja un sistema de calendario completo que siempre debe apuntar a una determinada fecha

67

UNIVERSIDAD PRIVADA TELESUP 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)); System.out.println("Month: "+gc.get(Calendar.MONTH)); System.out.println("Hora: "+gc.get(Calendar.HOUR)); }

69

UNIVERSIDAD PRIVADA TELESUP

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

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); } }

71

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.

72

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 { ... }

73

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.

74

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.

75

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.

76

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)

77

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.

78

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; } }

79

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)); }

80

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.

81

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 }

82

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..."; } }

83

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()); }

84

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:

85

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; } }

86

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"); } }

87

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”

88

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”

89

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

90

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

91

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.

92

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).

93

UNIVERSIDAD PRIVADA TELESUP

94

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

95

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.

96

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

97

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

98

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.

99

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)

100

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;

101

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>

102

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

103

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)

104

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.

105

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')

106

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';

107

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;

108

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.

109

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’;

110

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.

111

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;

112

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

113

UNIVERSIDAD PRIVADA TELESUP

mysql>select codpro,nompro,stock from Producto where stockproselect codpro,nompro,stock from Producto where stockpro>=50 and stockpro=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

114

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.

115

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

116

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.

117

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 | +-------------+-----------------+

118

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.

119

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 preproCreate 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

120

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

121

UNIVERSIDAD PRIVADA TELESUP

TEMA 4

Uso de

Comandos DDL Competencia: Optimiza la estructura de la base de datos aplicando las sentencias DDL

122

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

123

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>

124

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.

125

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>

126

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.

127

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”.

128

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”.

129

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.

130

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

131

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

132

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,

133

UNIVERSIDAD PRIVADA TELESUP

134

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

135

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.

136

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.

137

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.

138

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.

139

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.

140

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)

141

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

142

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.

143

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.

144

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).

145

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

146

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

147

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.

148

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)

149

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);

150

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();

151

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()); } } }

152

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

153

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.

154

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(); } }

155

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) {

156

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:

157

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); } }

158

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