Sei sulla pagina 1di 52

Herencia (informtica)

De Wikipedia, la enciclopedia libre Saltar a: navegacin, bsqueda Para otros usos de este trmino, vase Herencia. En orientacin a objetos la herencia es, despus de la agregacin o composicin, el mecanismo ms utilizado para alcanzar algunos de los objetivos ms preciados en el desarrollo de software como lo son la reutilizacin y la extensibilidad. A travs de ella los diseadores pueden crear nuevas clases partiendo de una clase o de una jerarqua de clases preexistente (ya comprobadas y verificadas) evitando con ello el rediseo, la modificacin y verificacin de la parte ya implementada. La herencia facilita la creacin de objetos a partir de otros ya existentes e implica que una subclase obtiene todo el comportamiento (mtodos) y eventualmente los atributos (variables) de su superclase. Es la relacin entre una clase general y otra clase ms especifica. Por ejemplo: Si declaramos una clase prrafo derivada de una clase texto, todos los mtodos y variables asociadas con la clase texto, son automticamente heredados por la subclase prrafo. La herencia es uno de los mecanismos de los lenguajes de programacin orientada a objetos basados en clases, por medio del cual una clase se deriva de otra de manera que extiende su funcionalidad. La clase de la que se hereda se suele denominar clase base, clase padre, superclase, clase ancestro (el vocabulario que se utiliza suele depender en gran medida del lenguaje de programacin). En los lenguajes que cuentan con un sistema de tipos fuerte y estrictamente restrictivo con el tipo de datos de las variables, la herencia suele ser un requisito fundamental para poder emplear el Polimorfismo, al igual que un mecanismo que permita decidir en tiempo de ejecucin qu mtodo debe invocarse en respuesta a la recepcin de un mensaje, conocido como enlace tardo (late binding) o enlace dinmico (dynamic binding).

Contenido
[ocultar]

1 Ejemplo en Java 2 Clase Abstracta 3 Herencia y ocultacin de informacin 4 Redefinicin de mtodos 5 Ventajas 6 Estereotipos de herencia

[editar] Ejemplo en Java

public class Mamifero{ private int patas; private String nombre; public void imprimirPatas(){ JOptionPane.showMessageDialog(null," Tiene " + patas + patas\n","Mamifero", JOptionPane.INFORMATION_MESSAGE); } public Mamifero(String nombre, int patas){ this.nombre = nombre; this.patas = patas; } } public class Perro extends Mamifero { public Perro(String nombre){ super(nombre, 4); } } public class Gato extends Mamifero { public Gato(String nombre){ super(nombre, 4); } } public class CrearPerro { public static void main(String [] args) { Perro perrito = new Perro("Pantaleon"); perrito.imprimirPatas(); /*Est en la clase mamfero*/ } }

"

public static void main args Se declaran las clases mamferos, gato y perro, haciendo que gato y perro sean unos mamferos (derivados de esta clase), y se ve como a travs de ellos se nombra al animal pero as tambin se accede a patas dndole el valor por defecto para esa especie. Es importante destacar tres cosas. La primera, es que la herencia no es un mecanismo esencial en el paradigma de programacin orientada a objetos; en la mayora de los lenguajes orientados a objetos basados en prototipos las clases no existen, en consecuencia tampoco existe la herencia y el polimorfismo se logra por otros medios. La segunda, es que el medio preferido para lograr los objetivos de extensibilidad y reutilizacin es la agregacin o composicin. La tercera, es que en lenguajes con un sistema de tipos dbiles, el polimorfismo se puede lograr sin utilizar la herencia. Por otra parte y aunque la herencia no es un concepto indispensable en el paradigma de programacin orientada a objetos, es mucho ms que un mecanismo de los lenguajes basados en clases, porque implica una forma de razonar sobre cmo disear ciertas partes de un programa. Es decir, no slo es un mecanismo que permite implementar un diseo, sino que establece un marco conceptual que permite razonar sobre cmo crear ese diseo.

[editar] Clase Abstracta


La herencia permite que existan clases que nunca sern instanciadas directamente. En el ejemplo anterior, una clase "perro" heredara los atributos y mtodos de la clase "mamfero", as como tambin "gato", "delfn" o cualquier otra subclase; pero, en ejecucin, no habr ningn objeto "mamfero" que no pertenezca a alguna de las subclases. En ese caso, a una clase as se la conocera como Clase Abstracta. La ausencia de instancias especficas es su nica particularidad, para todo lo dems es como cualquier otra clase.

[editar] Herencia y ocultacin de informacin


En ciertos lenguajes, el diseador puede definir qu variables de instancia y mtodos de los objetos de una clase son visibles. En C++ y java esto se consigue con las especificaciones private, protected y public. Slo las variables y mtodos definidos como pblicos en un objeto sern visibles por todos los objetos. En otros lenguajes como Smalltalk, todas las variables de instancia son privadas y todos los mtodos son pblicos. Dependiendo del lenguaje que se utilice, el diseador tambin puede controlar qu miembros de las superclases son visibles en las subclases. En el caso de java y C++ los especificadores de acceso (private, protected, public) de los miembros de la superclase afectan tambin a la herencia:

Private: ningn miembro privado de la superclase es visible en la subclase. Protected: los miembros protegidos de la superclase son visibles en la subclase, pero no visibles para el exterior. Public: los miembros pblicos de la superclase siguen siendo pblicos en la subclase.

[editar] Redefinicin de mtodos


En la clase derivada se puede redefinir algn mtodo existente en la clase base, con el objeto de proveer una implementacin diferente. Para redefinir un mtodo en la subclase, basta con declararlo nuevamente con la misma signatura (nombre y parmetros). Si se invoca un cierto mtodo de un objeto que no est definido en su propia clase, se dispara la bsqueda hacia arriba en la jerarqua a la que dicha clase pertenece. Sin embargo, si existieran dos mtodos con la misma signatura, uno en la clase y otro en una superclase, se ejecutara el de la clase, no el de la superclase. Cuando se redefine un mtodo en una clase es posible acceder explcitamente al mtodo original de su superclase, mediante una sintaxis especfica que depende del lenguaje de programacin empleado (en muchos lenguajes se trata de la palabra clave super).

[editar] Ventajas

Ayuda a los programadores a ahorrar cdigo y tiempo, ya que la clase padre ha sido implementada y verificada con anterioridad, restando solo referenciar desde la clase derivada a la clase base (que suele ser extends, inherits, subclass u otras palabras clave similares, dependiendo del lenguaje). Los objetos pueden ser construidos a partir de otros similares. Para ello es necesario que exista una clase base (que incluso puede formar parte de una jerarqua de clases ms amplia). La clase derivada hereda el comportamiento y los atributos de la clase base, y es comn que se le aada su propio comportamiento o que modifique lo heredado. Toda clase pueden servir como clase base para crear otras.

[editar] Estereotipos de herencia


Herencia simple: Una clase slo puede heredar de una clase base y de ninguna otra. Herencia mltiple: Una clase puede heredar las caractersticas de varias clases base, es decir, puede tener varios padres. En este aspecto hay discrepancias entre los diseadores de lenguajes. Algunos de ellos han preferido no admitir la herencia mltiple debido a que los potenciales conflictos entre mtodos y variables con igual nombre, y eventualmente con comportamientos diferentes crea un desajuste cognitivo que va en contra de los principio de la programacin orientada a objetos. Por ello, la mayora de los lenguajes orientados a objetos admite herencia simple. En contraste, algunos pocos lenguajes admiten herencia mltiple, entre ellos: C++, Python, PHP, Eiffel, mientras que Smalltalk, Java, Ada y C# slo permiten herencia simple.

Clases, mtodos, herencia, constructores y POO 21 marzo 2009

Gua de Laboratorio 2: Mtodos, Constructores y Herencia

Auxiliar de Ctedra: Hugo Alejandro Barrientos

Esta gua de prctica es una continuacin de la nmero 1 en donde se realiz un programa bsico en modo consola, llamado cariosamente Silabario para programadores principiantes. Ahora, lo disearemos en base a clases bien encapsuladas, que contengan sus mtodos y propiedades, getters y setters, adems de la implementacin de la herencia simple, la nica soportada nativamente en Java.

Adems, como un refuerzo se explicar la funcin super(), propia de nuestro lenguaje de programacin.

SUPER() Si se necesita llamar al mtodo padre dentro de una clase que ha reemplazado ese mtodo, se puede hacer referencia al mtodo padre con la palabra clave super().

Cuando se declara una clase heredando explcitamente de otra como en el cdigo siguiente:

class base { int datoBase;

public base() { System.out.println( "Dentro del Constructor de la clase base" ); System.out.println( "Asignando a datoBase 100" ); datoBase = 100; }

class hijoBase extends base { int datoSubClase;

// Constructor de la Subclase public hijoBase() { // Llamada al constructor de la clase base super(); System.out.println( "Dentro del Constructor de la subclase" ); System.out.println( "Asignando a datoSubClase 200" ); datoSubClase = 200; }

El programa tambin utiliza super para invocar al constructor de la superclase desde el constructor de la subclase.

PREGUNTA: Si instanciamos la clase hijoBase, Cul es la impresin en consola de la porcin de cdigo de arriba?

Tambin sirve para llegar a atributos de las superclases. De la siguiente manera:

class ave{

String nombre; String colorPlumas; }

class pato extends ave{

public pato(){ super.colorPlumas=Blanco; } } Instanciando la clase pato podemos acceder a la propiedad colorPlumas, que est definida como propiedad de un ave.

Pregunta: Existe la herencia mltiple en Java? Por qu?

Esta gua se encargar de fortalecer los conceptos de clases, mtodos, propiedades o atributos, herencia, constructores y acerca de los mtodos Get y Set. Todo esto con ayuda del programa realizado en la gua anterior con nuestro Silabario para programadores. El trabajo estructurado de la semana pasada ahora lo traslademos a una aplicacin, siempre en el ambiente consola, en la cual definamos con un alto grado de encapsulamiento, las clases que harn posible la realizacin de la aplicacin y llevarn definida todo el funcionamiento, o lo que es mismo, la capa de negocios del programa.

El ejemplo es sencillo. El Silabario lo que realiza es una serie de operaciones bsicas que resuelven 4 tipos de problemas distintos: El factorial de nmero, la tabla de multiplicar de un nmero, la clasificacin de la edad del usuario y la eleccin de la estacin del ao

favorita del usuario. El silabario adems, tiene la caracterstica que el programador escoger la sentencia o instruccin bsica que brinde la solucin ms sencilla y ptima para cada uno de los problemas.

Para efectos de esta prctica, y porque creo que es la mejor manera de poder apreciar las clases y objetos de este ejercicio, definiremos cada clase como una clase Operacin, que es la que facilitar y tendr las herramientas necesarias para efectuar la resolucin de cada uno de los problemas.

Un objeto operacin necesita de propiedades o atributos. Una operacin necesita de operadores, uno, dos ms. Es por eso que definiremos dos atributos para realizar dichas operaciones. Con dos bastarn para este ejercicio. Los mtodos de esta clase son muy variados. Cada una de las operaciones realizar uno diferente, por lo tanto no cabe dentro de la percepcin de un objeto Operacin bsico, la definicin de cada uno de los mtodos. Los mtodos que s se necesitaran son los populares mtodos GET y SET, que nos sirven para leer y cambiar los valores de una propiedad especfica. Como hemos definido propiedades, stas necesitan de sus getters y setters. La clase de una Operacin Bsica para el silabario quedar as:

public class operacionBase {

protected int operador;

public operacionBase(){ this.operador=0; }

public void setOperador(int o){ this.operador=o; }

public int getOperador(){ return this.operador; } }

Declaramos la propiedad con visibilidad protected por motivos de seguridad, para que solamente los miembros de esa clase y los que heredan de ella, es decir las subclases, puedan accesar a estos atributos.

Como hemos definido ya una clase base, ahora podremos definir el resto de clases que podrn heredar de la clase base. Cabe destacar que no siempre se podr hacer una clase base y con respecto a esta empezar a heredarles a otras. Esto depende de la naturaleza de cada aplicacin, y de la manera de cmo el programador disee su capa de negocios.

Para realizar la clase que nos devuelva el factorial de un nmero, el programador puede escoger la instruccin While. Por lo tanto el programador debe desarrollar el mtodo que reciba como parmetro el nmero del que se desee el factorial y que devuelva el resultado esperado. Heredando de la clase base, tenemos ya garantizados los atributos y mtodos propios de la misma, por lo tanto, la clase para realizar el factorial del nmero podra quedar as:

public class operacionFactorial extends operacionBase{

public operacionFactorial(){ super(); }

public int devolverFactorial(){ int factorial=1; int cont=1;

while (cont <= this.operador) { factorial *= cont; cont++; } return factorial; } }

El diagrama UML nos ayudar a comprender mejor la herencia y estructura de estas clases:

Como puede observar el programador, se utiliza la propiedad operador cuya definicin pertenece a la clase base. Sin embargo, como la clase operacionFactorial hereda todos los atributos y mtodos de la clase bsica, podemos hacer un llamado a dicha propiedad con la ayuda de la sentencia this.

PREGUNTAS: Trabajara igual el constructor si se suprime la sentencia super()? Cmo capturo las variables que el usuario ingresa y se las transmito a la funcin devolverFactorial()?

Ejercicio:

Realizar la siguiente aplicacin utilizando clases, herencia, mtodos, propiedades, constructores y los mtodos GET y SET:

Desarrollar un ecosistema, en donde se puedan crear tener distintos animales de todas las clasificaciones: mamferos, aves, reptiles y anfibios. Se deben de crear clases para cada tipo de especie, y para las especies ms comunes que el programador quiera definir. El usuario final debe tener la potestad de crear todos los animales (instancias) que desee, y diferenciarlas de acuerdo a algn identificador. Se deben de poder plasmar en la consola la lista de animalitos creados

Ejercicios propuestos:

Desarrollar un programa en Java con todos los elementos vistos en este laboratorio que maneje las disciplinas deportivas que se practican en unos juegos olmpicos, con la misma dinmica del ejercicio anterior.

***********************************************************************

Mostrando entradas con la etiqueta Java. Mostrar todas las entradas Mostrando entradas con la etiqueta Java. Mostrar todas las entradas

Programas destacados de Tarea Ex Aula Programacin II Ciclo I/09


13 junio 2009

Tengo el agrado de mostrar los mejores trabajos que los alumnos de Programacin II de la Universidad de El Salvador de la FMO entregaron como parte de las prcticas de dicha materia. Este trabajo vala 1 punto de la nota global. Por cada clave, los mejores trabajos fueron los siguientes:

PROCESADOR DE TEXTO

El grupo de prctica No. 1 entreg dicha clave, y el mejor trabajo fue elaborado por:

Nelly Celinda Hernndez Gonzlez Jos Guillermo Ruiz Vargas

Su trabajo puede ser descargado desde el siguiente link: http://www.megaupload.com/?d=3YKTA547

INFORMACIN PERSONAL Y LLENADO DE JTABLES

El mejor programa de esta clave fueron los estudiantes:

Gabriel Enrique Carballo Portillo Herber Oswaldo Gmez Arana

Pueden descargar su programa en este link: http://www.megaupload.com/?d=KBLTKYNZ Mencin honorfica para:

Mara Jos Romualdo Villalta Luis Mario Siguenza Cruz

Quedaron descalificados de esta mencin Alberto Moreno y Wendy Chicas por haber dejado el CD en blanco.

PROGRAMA DE ENCUESTAS

El mejor fue el estudiante:

Edgardo Caleb Flores Brizuela

Puede descargarlo de este link: http://www.megaupload.com/?d=CHN0RI3Z

Mencin honorfica para:

Giovany Rosales Hernndez Julianne Michelle Polanco Aragn

GENERADOR DE NMEROS ALEATORIOS

El mejor trabajo fue presentado por los estudiantes:

Nefi Jos Cetino Velsquez Juan Carlos Mendoza Dimas

Pueden descargarlo desde este link: http://www.megaupload.com/?d=D74AOVG7 Adems hubo otros trabajos muy buenos. Mencin honorfica para:

Rafael Manfredo Jorge Guerra Quant

Juan Carlos Arteaga Ortiz Francisco Ovidio Castillo Lico

Pablo Oswaldo Portillo Alvarado Karla Flor Grissel Chicas Blanco

CARRITO DE COMPRAS
Hubo triple empate en esta clave. Los mejores trabajos fueron de los siguientes autores:

Isaac Alexander Gmez Recinos Kevin Garay Caldern Neyson Ramrez Ascencio Byron Ernesto Guerrero Landaverde Oscar Gustavo Rodrguez Umaa

Los tres programas pueden ser descargados desde el siguiente link: http://www.megaupload.com/?d=BS9NY1B5

JUEGO DE MEMORIA

El mejor trabajo fue entregado por el alumno:

Edwin de Jess Mendoza Granadino

Descarguen este juego desde el siguiente link: http://www.megaupload.com/?d=40O19FYS

JUEGO DE EQUIS CERO


El mejor juego lo entreg:

Franklin Martnez

Descrguenlo desde este link: http://www.megaupload.com/?d=XWOHUNFT Hubo otros buenos juegos. Menciones honorficas para:

Denis Stanley Urbina Jimnez Csar Ernesto Quezada Peate

Elias Ricardo Zaldaa Herrera Victor Manuel Rivera Barrera Walter Ernesto Hernndez Ramrez

Este su servidor se desliga de cualquier error que puedan tener dichos programas. Recuerden que todos son proyectos de Netbeans 6.1 o superior, utilizando JDK 1.6

Publicado por Hugo Barrientos en 14:17 0 comentarios Enlaces a esta entrada Etiquetas: Java, Netbeans, Programacion II, Programas

Material para parcial 4 Programacin II 2009


Hola a todos! El material para el cuarto y ltimo examen parcial de Programacin II del Ciclo I/09 se encuentra ya a su disposicin para que lo descarguen a travs del siguiente link:

http://www.megaupload.com/?d=CTOFWA9B
Recuerden que el parcial ser prctico. Dispondrn de 50 minutos para su elaboracin. Quien disponga de una laptop para realizarlo no dude en llevarla.

Recuerde que al final tendrn que enviar su programa a la siguiente direccin de correo electrnico:

examenesytareas@gmail.com

Es por ello que les solicito que creen una cuenta en GMAIL de correo electrnico para enviar su examen y evitar los ya conocidos incidentes con hotmail. SI USTED NO LO ENVA AL FINALIZAR EL EXAMEN SE LE ADJUDICAR UNA NOTA DE 1. Buena suerte!!!

Publicado por Hugo Barrientos en 13:38 0 comentarios Enlaces a esta entrada Etiquetas: Java, Parcial, Programacion II

Componentes avanzados en Swing de Java


07 junio 2009

Programacin II Gua de Laboratorio 5: Componentes GUI avanzados de Swing Desarrollo del 8 al 12 de junio de 2009 Auxiliar de Ctedra: Hugo Alejandro Barrientos Esta gua est dedicada para manejar algunos de los componentes avanzados que provee Swing para aplicaciones Desktop. Esta gua consiste en elaborar un selector de color construyndolo a partir del Modelo de Color RGB y con componentes Swing como JPanels, JSliders y JSpinners, entre otros. Adems cambiaremos la apariencia de nuestras aplicaciones Swing de Java. Modelo de Color RGB El modelo de color RGB, del ingls Red, Green, Blue, hace referencia a la composicin de colores en trminos de la intensidad de los colores primarios con que se forma: el rojo, el verde y el azul. Es un modelo de color basado en la sntesis aditiva, con el que es posible representar un color mediante la mezcla por adicin de los tres colores luz primarios. Indicar que el modelo de color RGB no define por s mismo lo que significa exactamente rojo, verde o azul, razn por la cual los mismos valores RGB pueden mostrar colores notablemente diferentes en diferentes dispositivos que usen este modelo de color. Aunque utilicen un mismo modelo de color, sus espacios de color pueden variar considerablemente. JSlider Los objetos JSlider permiten al usuario seleccionar de entre un rango de valores enteros, La clase JSlider hereda de JComponent. Est compuesto por el indicador, con el que seleccionamos el valor deseado y las marcas, que nos muestran cules son los valores a escoger. JSpinner

Los objetos JSpinner permiten al usuario seleccionar un nmero y recorrer la lista de los mismos. Apariencia Visual Adaptable Los componentes Swing por el hecho que son controles ligeros, es decir que no dependen de la plataforma para asumir una apariencia visual, se pueden adaptar a otras pieles o Look and Feels. Sehace con la clase UIManager. Para esta gua utilizaremos el Look and Feel Substance Luego de esta introduccin terica, para empezar esta gua, construyamos una GUI con el Netbeans Designer que luzca as:

Consiste en:

3 JSlider 3 JSpinner 1 JPanel 3 JLabel 1 JButton (otra parte de la prctica)

Moviendo los JSliders o modificando la cantidad de los JSpinners debemos modificar el color que se muestra en el panel de la derecha. Para ello, crearemos un mtodo en el cual le cambiaremos el color del panel con su mtodo setBackground() crearemos un nuevo color con modelo RGB con la ayuda de los valores de cada JSlider o JSpinner:

public void cambiarColor() { colorJPanel.setBackground( new java.awt.Color( JSliderRojo.getValue(), JSliderVerde.getValue(), JSliderAzul.getValue() ) ); }

Cada JSlider y JSpinner debe modificar al control contrario pero que manejan el mismo color. En los eventos

StateChange() de cada uno debe ir cdigo similar a este:

//Codigo para JSlider y JSpinner del color ROJO //codigo evento JSlider: modifica el valor de JSpinner y manda a modificar el color del JPanel private void redJSliderStateChanged(javax.swing.event.ChangeEvent evt) { this.spnRojo.setValue(this.JSliderRojo.getValue()); changeColor(); } //codigo evento JSpinner: modifica el valor de JSlider y manda a modificar el color del JPanel private void spnRojoStateChanged(javax.swing.event.ChangeEvent evt) { this.JSliderRojo.setValue((Integer)spnRojo.getValue()); changeColor(); }

La aplicacin debe lucir as:

Ahora le asignaremos el look and feel substance a nuestra aplicacin. Descargamos el Jar que contiene el look and feel y lo colocamos en la carpeta lib del proyecto (si no existe, creamos una) y luego agregamos el Jar de la librera al proyecto. Creamos un botn que nos sirva para colocarle una nueva apariencia a la aplicacin. En el cdico del actionPerformed escribimos la siguiente lnea: UIManager.setLookAndFeel("org.jvnet.substance.skin.SubstanceCremeCoffeeLookAndFeel"); O esta otra: SubstanceLookAndFeel.setSkin(new org.jvnet.substance.skin.BusinessSkin());

La aplicacin debe lucir as:

Look and Feel Substance Creme Coffee

As tiene otra apariencia en lugar del ya tradicional metlico. Publicado por Hugo Barrientos en 23:49 0 comentarios Enlaces a esta entrada Etiquetas: Jar, Java, JPanel, JSlider, JSpinner, Netbeans, Programacion II, Substance

Programacin de GUI con Componentens Swing en Netbeans


24 mayo 2009

Programacin II Gua de Laboratorio 4: Creacin de GUI con componentes Swing en Netbeans Desarrollo del 25 al 29 de mayo de 2009 Auxiliar de Ctedra: Hugo Alejandro Barrientos Esta gua est dedicada a crear aplicaciones de escritorio en Java con la ayuda de componentes Swing. El IDE de programacin de esta ctedra ha sido Netbeans y este nos proporciona un diseador para crear aplicaciones de una manera sencilla, sin preocuparnos demasiado del cdigo que implica la forma de la GUI. Simplemente nos debemos de centrar en el funcionamiento de la misma. Sin embargo, el ejercicio est enfocado a realizar algunas partes de la gua de tal manera que debamos conocer el cdigo propio de los componentes Swing, para que nos formemos como buenos programadores de ambientes de escritorio. En el ejercicio se debe crear un Visor de Imgenes en formatos JPG y PNG. Para ello se crearn: la interfaz en donde el usuario escoger la imagen que desea visualizar, una clase que administre los archivos seleccionados y una clase que manipule la imagen seleccionada, una clase que herede de un componente swing y agregarla a la paleta de Netbeans para tener un control personalizado y poderlo arrastrar y colocar como cualquier otro del IDE. La estructura de clases ser como el siguiente:

Primero crearemos la clase que nos manipule la imagen que seleccionar el usuario. La clase MiImagen es nuestro propio formato personalizado para representar una imagen en la memoria del computador. Se puede pensar que MiImagen es un arreglo bidimensional de pixeles en el cual cada uno de ellos puede tener un color, que se definir con java.awt.Color. El cdigo sera muy similar a este: import java.awt.Color; import java.awt.image.BufferedImage;

public class MiImagen extends java.awt.image.BufferedImage { /** * Crea una instancia de MiImagen a partir de una BufferedImage. */ public MiImagen(BufferedImage image){ super(image.getColorModel(), image.copyData(null), image.isAlphaPremultiplied(), null); } /** * Crea una instancia de MiImagen. */ public MiImagen(int width, int height){ super(width, height, TYPE_INT_RGB); } /** *Coloca un color en una posicin especfica */ public void setPixel(int x, int y, Color col){ int pixel = col.getRGB(); setRGB(x, y, pixel); } /** * Obtiene el valor de color en una posicin especfica

*/ public Color getPixel(int x, int y){ int pixel = getRGB(x, y); return new Color(pixel); } } La clase AdminArchivos ofrece tres mtodos: uno para leer desde el disco un archivo de imagen con nombre y devolverlo como una MiImagen, uno para grabar un archivo MiImagen en el disco y otro para abrir una caja de dilogo de seleccin de archivos que permite que el usuario seleccione la imagen que desea ver. Los formatos permitidos por filtro son JPEG y PNG. Con la creacin de esta clase invocaremos cdigo propio de un componente Swing y le daremos forma nicamente con sentencias dejando de lado el diseador de Netbeans. El cdigo sera muy similar a ste: import java.awt.image.BufferedImage; import java.io.File; import java.io.IOException; import javax.imageio.ImageIO; import javax.swing.JFileChooser; import javax.swing.filechooser.FileNameExtensionFilter; public class AdminArchivos { private static final String IMAGE_FORMAT = "jpg"; private static JFileChooser fileChooser = new JFileChooser(); private static FileNameExtensionFilter filter = new FileNameExtensionFilter("JPG & PNG", "jpg", "png");

public static MiImagen obtenerImagen() throws IOException { fileChooser.setFileFilter(filter); fileChooser.setCurrentDirectory(null); int returnVal = fileChooser.showOpenDialog(null); if(returnVal != JFileChooser.APPROVE_OPTION) { return null; // Presiona cancelar } File selectedFile = fileChooser.getSelectedFile(); return cargarImagen(selectedFile); } public static MiImagen cargarImagen(File imageFile) throws IOException

{ try { BufferedImage image = ImageIO.read(imageFile); if(image == null || (image.getWidth(null) <> return null; //por si ocurre un error al cargar la imagen } return new MiImagen(image); } catch(IOException exc) { return null; } } public static void guardarImagen(MiImagen image, File file) { try { ImageIO.write(image, IMAGE_FORMAT, file); } catch(IOException exc) { return; } } } El elemento Swing que utilizamos para escoger las imgenes es JFileChooser. Creamos un atributo esttico para que se puedan seleccionar las imgenes y le asignamos por defecto la carpeta de usuario para cualquier sistema operativo. Ponga mucha atencin a la variable esttica de tipo FileNameExtensionFilter, ya que es la que nos permite que en el control JFileChooser de Swing solo nos aparezcan imgenes de tipo JPG. Se pueden definir otro tipo de filtros tambin. Por ltimo la clase ImagePanel implementa un componente Swing personalizado para mostrar nuestra imagen. Los componentes Swing personalizados pueden crearse fcilmente escribindolos como una subclase de algn componente existente, y, como tal, puede insertarse en un contenedor Swing y mostrarse en la GUI como cualquier otro. Nuestro objeto ser creado y lo insertaremos en la paleta de Netbeans. Primero debemos crear la clase, con un cdigo como ste: import java.awt.Color; import java.awt.Dimension; import java.awt.Graphics; import javax.swing.JComponent;

public class ImagePanel extends JComponent { private int width, height; private MiImagen panelImage; public ImagePanel() { width = 360; // Tamao arbitrario para la instancia vaca de ImagePanel height = 240; panelImage = null; } public void setImage(MiImagen image) { if(image != null) { width = image.getWidth(); height = image.getHeight(); panelImage = image; repaint(); } } public void clearImage() { if(panelImage != null) { Graphics imageGraphics = panelImage.getGraphics(); imageGraphics.setColor(Color.LIGHT_GRAY); imageGraphics.fillRect(0, 0, width, height); repaint(); } } // Los siguientes mtodos son redefiniciones // de mtodos heredados de las superclases. @Override public Dimension getPreferredSize() { return new Dimension(width, height); }

@Override public void paintComponent(Graphics g) { Dimension size = getSize(); g.clearRect(0, 0, size.width, size.height); if(panelImage != null) { g.drawImage(panelImage, 0, 0, null); } } } Luego de escrita la clase, construimos el proyecto para que nos genere una JAR. As podremos aadir nuestro componente personalizado a la paleta de Netbeans. Nos vamos al men Tools y en la opcin Palette damos click a Add Swing/AWT Components.

Seleccionamos la opcin Add from JAR. Buscamos el JAR generado de nuestro proyecto y lo seleccionamos. Luego volvemos a seleccionar entre una lista de las clases de dicho JAR y damos click a la clase del componente, en este caso es ImagePanel. Seleccionamos la categora de Swing Components y damos por finalizada la insercin a la paleta.

Ahora crearemos un nuevo JFrame Form con ayuda del diseador de Netbeans. En el paquete de source code lo creamos y colocaremos los siguientes elementos: 1 JMenuBar

o 3 JMenuItem. Las opciones sern: Abrir, Limpiar y Salir o A cada JMenuItem se le deber asignar un evento ActionPerformed El Layout ser BorderLayout 2 JLabels. Uno tendr colocacin PAGE_START y el otro PAGE_END 1 ImagePanel, con colocacin de Layout CENTER. Nombre de instancia: panelI. En el constructor, asignamos el ttulo de la ventana como Visor de Imgenes Tambin en el constructor, Colocamos la posicin relativa en null Si se quiere la ventana maximizada desde el principio, se hace con la siguiente sentencia: this.setExtendedState(javax.swing.JFrame.MAXIMIZED_BOTH);

La ventana en modo diseo debe lucir como la siguiente:

Ahora para que nos muestre una imagen, debemos agregar las sentencias necesarias en el mtodo que desencadena la accin de ActionPerformed en el JMenuItem para abrir imagen. Las sentencias podran ser similares a stas: try { MiImagen img = AdminArchivos.obtenerImagen(); panelI.setImage(img); this.lblNombreImg.setText(img.getClass().getName()); this.lblEstado.setText("Imagen cargada con xito"); this.setLocationRelativeTo(null); this.pack(); panelI.repaint();

} catch (IOException ex) { Logger.getLogger(visor.class.getName()).log(Level.SEVERE, null, ex); } La aplicacin debe lucir as:

Publicado por Hugo Barrientos en 23:19 0 comentarios Enlaces a esta entrada Etiquetas: GUI, Jar, Java, JFileChooser, JMenuBar, JMenuItem, JPanel, Netbeans, Palette, Programacion II

Polimorfismo en Java
03 mayo 2009

Gua de Laboratorio 3: Polimorfismo y Libreras de Clases Auxiliar de Ctedra: Hugo Alejandro Barrientos Polimorfismo El polimorfismo es un concepto de la programacin orientada a objetos que nos permite programar en forma general, en lugar de hacerlo en forma especfica. En general nos sirve para programar objetos con caractersticas comunes y que todos estos compartan la misma superclase en una jerarqua de clases, como si todas fueran objetos de la superclase. Esto nos simplifica la programacin. Recuerde el ejemplo del ecosistema, en donde todos los objetos de las distintas especies heredaban de una

superclase llamada Animal, que brindaba la informacin general de cualquier animal, independiente de su especie. Sin embargo, cada especie hace un uso particular de cada uno de los mtodos u operaciones de la clase Animal. El mtodo comer() no se ejecutar de la misma manera en un Len() o en un Pavo(). Lo mismo ocurre para mtodos moverse() en objetos de tipo Tiburn() o Gallina(), aunque todas las especies realicen estos mtodos. A la sobrescritura o implementacin especfica de mtodos es la clave del polimorfismo. Para poner en prctica se har un ejemplo bastante sencillo. Se har una librera de clases que represente figuras tridimensionales y bidimensionales, y su respectiva jerarqua de clases. Las clases deben ser capaces de tener funcionamiento bastante bsico, como obtener reas, volmenes y permetros de la figura correspondiente.

La representacin de la jerarqua sera como sta:

Click a la imagen para verla ms grande...

La superclase de dicha jerarqua podra ser muy parecida a sta: public abstract class figura { protected String nombre; protected int color; protected int grosorBorde; public String getNombre(){ return this.nombre; } public void setNombre(String n){ this.nombre=n; }

public int getColor(){ return this.color; } public void setColor(int c){ this.color=c; } public int getGrosorBorde(){ return this.grosorBorde; } public void setGrosorBorde(int g){ this.grosorBorde=g; } public abstract void dibujar(); } Las siguientes clases en el nivel de la jerarqua podran quedar muy parecidas a stas: public abstract class figura2D extends figura { public abstract int calcularArea(); public abstract int calcularPerimetro(); } public abstract class figura3D extends figura { public abstract int calcularVolumen(); } Se le pide que forme las clases de la parte inferior de la jerarqua y que representaran los objetos a instanciarse. Adems, debe de realizar una implementacin de esta librera, en donde el usuario pueda crear nuevas figuras y que stas se almacenen en un arreglo de figuras.

Ejercicios:

Realice una jerarqua de clases en donde se representen un cuadriltero.

Mediante esa superclase, realice las clases rectngulo, cuadrado, paralelogramo y trapezoide; que heredarn de ella, convirtindose prcticamente en objetos cuadriltero (superclase).

Publicado por Hugo Barrientos en 17:24 0 comentarios Enlaces a esta entrada Etiquetas: abstract, Java, Netbeans, Polimorfismo, POO

Dividir Cadenas en Java


28 abril 2009

Pareciera algo sencillo y simple, que no es digno para un artculo, sin embargo la divisin de cadenas de carcteres da algunos problemas, ms que todo a los programadores principiantes. Este artculo explicar esta tarea con dos formas: con el mtodo split() de la clase String y con la clase Tokenizer. Este sencillo cdigo realiza la separacin de la cadena "Polticas de Calidad" en los espacios en blanco que se encuentren: String cad = "Politicas de Calidad";
/*Primero lo realizaremos con Tokenizer. Hay que crear una nueva instancia de Tokenizer. Por defecto separa con cada espacio en blanco que encuentre de la cadena que se le manda como parmetro*/

StringTokenizer tokens = new StringTokenizer(cad);


//Mientras encuentre ms tokens, es decir separaciones, que imprima cada token con nextToken():

while(tokens.hasMoreTokens()){ System.out.println(tokens.nextToken()); } System.out.println("\n\n");


/*Ahora lo haremos con split(). Con los patrones \\ indicamos cul es la condicin para la separacin. En este caso es el espacio en blanco. Recuerde que el resultado de split devuelve un arreglo de String */

String [ ] palabra = cad.split("\\ "); int j=0; while(j <= palabra.lenght-1){ System.out.println(palabra [ j ]); j++; }

Espero que este artculo ayude a muchos.

Publicado por Hugo Barrientos en 15:09 0 comentarios Enlaces a esta entrada Etiquetas: division de cadenas, Java, separacion de cadenas, Split, String, Tokenizer

Libreras de Clases en Java y Netbeans


26 abril 2009

Gua de Laboratorio 3: Polimorfismo y Libreras de Clases Auxiliar de Ctedra: Hugo Alejandro Barrientos Esta gua est dedicada para poner en prctica los conocimientos aprendidos en las prcticas anteriores, tales como manejo de clases, mtodos, instancias, herencia getters y setters. Adems aprenderemos a manejar el polimorfismo, concepto de la programacin orientada a objetos, para disear nuestras aplicaciones bajo un esquema de jerarquas de herencia, dentro del mbito de Java con Netbeans, y aprenderemos adems a crear nuestras propias libreras con clases y a aadirlas a un proyecto de Netbeans agregando a las referencias de libreras el respectivo Jar contenedor de la librera. Operador instanceof El operador instanceof sirve para consultar si un objeto es una instancia de una clase determinada, o de su padre. Pareciera absurdo tratar de conocer cul es la clase que da lugar a una instancia especfica, sin embargo es de mucha utilidad cuando se trabaja con interfaces y herencia a la vez. Veamos un ejemplo: public class primo { private int numero; private int vectorPrimos[];

private int tamaoV; public primo(){ this.tamaoV=25; this.vectorPrimos= new int [this.tamaoV]; this.numero=0; } }

public class Main { public static void main(String[] args) { primo p = new primo(); if (esPrimo(p)){ System.out.println("ES INSTANCIA DE PRIMO"); } } public static boolean esPrimo(primo p) { return (p instanceof primo); } }

Lo que realiza este sencillo ejemplo es comprobar si la instancia llamada p corresponde a la clase primo, definida anteriormente, con la ayuda del mtodo esttico esPrimo que verifica con el operador instanceof si la instancia que se traslada por el parmetro es de la clase que se evala. El resultado de dicha operacin es true o false. Libreras de Clases Ahora aprenderemos a crear nuestras propias libreras de clases. Estas nos sirven para tener un conjunto de clases que nos sirven para realizar funciones especficas, creadas por el programador y que podremos importar hacia otras aplicaciones Java e implementar dicha funcionalidad. Cabe mencionar que debemos tener una gran capacidad de anlisis, para lograr abstraer las clases y crear objetos que funcionen de una manera adecuada. Para crear nuestra librera, debemos crear un nuevo proyecto Java en Netbeans, escogiendo la opcin de Java Class Library:

Como pueden leer en la descripcin dentro de la imagen, una Class Library no contiene una clase Main para que se pueda correr o implementar las clases que se escriban dentro de la misma. Recuerde que la librera dar insumos a sus aplicaciones para realizar tareas a otras aplicaciones o programas. Crearemos una librera que nos servir para encontrar algunas familias o sucesiones de nmeros. Empezaremos con la sucesin de nmeros Fibonacci y los famosos nmeros Primos. Se crearn clases para encontrar dichas sucesiones de nmeros, conocer el Fibonacci que desee el usuario, evaluar si un nmero es primo o no, entre otras operaciones. Adems, la clase para los fibonacci debe de facilitar mtodos y atributos para encontrar los fibonacci que a la vez son primos. A medida que el programador vaya escribiendo y concibiendo sus clases, la librera debe lucir de la siguiente manera:

Para implementar esta librera, basta con construir el proyecto, para generar un Jar que contenga las clases. Luego creamos una nueva aplicacin Java que llamaremos ImplementarNumeros:

Ahora, con el proyecto creado, hacemos click derecho sobre el nombre del proyecto en el apartado de proyectos de Netbeans y nos dirigimos a las propiedades del mismo:

Nos dirigimos a la categora de Libraries. Dentro de ella, agregamos un compilado, que puede ser un proyecto de Netbeans, un folder, una Class Libraryo un Jar. En este caso, agregaremos un Jar, as que presionamos el botn de Add JAR/Folder y buscamos el Jar de nuestra Class Library (Se encuentra en la carpeta dist dentro del folder del proyecto creado por Netbeans). Al agregarlo, luego dentro del Main del proyecto, importamos las libreras de esta manera:

import numeros.fibonacci; import numeros.primo; Y ya podremos utilizar toda la funcionalidad de nuestras clases dentro de un proyecto e implementarlas. La implementacin podra ser muy parecida a esta: public static void main(String[] args) {

fibonacci f = new fibonacci(); f.encontrarFibos(); int v[]=f.getFibos(); for(int i=0;i<25;i++) System.out.println(v[i]); }

Ejercicios: Alimente su librera de clases con las familias de nmeros: Nmeros Perfectos: Son nmeros naturales que son iguales a la suma de sus divisores propios positivos sin incluirse a l mismo. Nmeros Compuestos: Es todo nmero natural no primo, a excepcin de 1, se denomina compuesto, es decir que tiene uno o ms divisores distintos a 1 y s mismo. Publicado por Hugo Barrientos en 18:54 0 comentarios Enlaces a esta entrada Etiquetas: fibonacci, implementacin, Jar, Java, library class, librera de clases, Netbeans, primos, Programacion II

Agregar JPanel en un JFrame en Java y Netbeans


19 abril 2009

Muchos compaeros me han pedido ejemplos para agregar o instanciar JFrames o JPanels dentro de otro JFrame. Existe un control Swing llamado Internal Frame que se utiliza para agregar Frames dentro otro. Sin embargo, debemos recordar que un Frame tiene propiedades tales como la barra de ttulos, los botones de maximizar, minimizar y cerrar, coloca un nuevo

tem en la barra de tareas en Windows, KDE y Gnome, entre otras propiedades. Cabe destacar que muchas veces estos atributos no sern necesarios y entorpeceran el accionar de la aplicacin. Muchas veces necesitamos unicamente un pequeo recuadro e insertarlo en uno u otro JFrame. As que para esos efectos estn los JPanels. Realizaremos un pequeo ejemplo con stos. Vamos a realizar una pequea aplicacin, que consiste en realizar dos de las operaciones bsicas: sumas y restas. Para realizar cada una de ellas, el JFrame aade entre sus componentes a dos JPanels, uno para cada operacin respectivamente. Antes de mostrar cmo crear los JPanels, debemos de cambiar el layout al JFrame que utilizaremos. El Layout es una propiedad de los contenedores Swing para colocar todos los elementos que se contienen dentro de l. Como Java es multiplataforma, y en cada una de ella se disponen de manera distinta el orden de los elementos o componentes. Por lo tanto, Swing lo realiza con la ayuda de los layouts. En modo diseo del JFrame, hacemos click derecho a la opcin Set Layout y le asignamos Null Layout, ya que nosotros colocaremos otro tipo de layout diferente al del diseo libre que nos brinda el editor de diseo de Netbeans. De esta forma:

Ahora s, creamos dos JPanels desde el navegador de proyectos, uno llamado panelHijoSuma y otro panelHijoResta. Deben quedar de la siguiente manera:

Vean que el ltimo TextBox se encuentra deshabilitado para que sea modificado por el usuario. Este solo presentar el resultado y el usuario jams lo podr tocar. Al JFrame, tal y como lo observaron al inicio de este artculo solo le agregamos una Menu Bar, y un par de tems para que luzca as:

Ahora, dentro del JFrame, en su constructor, y luego de la inicializacin de componentes, vamos a establecer el layout a utilizar. Para este ejercicio, escog el FlowLayout, que dispone un orden de los elementos horizontal uno tras otro y con cierto espaciado que podemos asignar. El cdigo dentro del constructor deber ser el siguiente: //Constructor public framePadre() { //llamo al constructor padre y le mando el nombre del ttulo de la ventana super("Operaciones Bsicas"); //Funcin de inicializacin de componentes. Netbeans la coloca por defecto initComponents(); //Colocamos el nuevo tipo de layout que queremos que tenga nuestro JFrame this.setLayout(new FlowLayout()); } Tambin creamos dos atributos al JFrame, para ms facilidad. Sern dos atributos del tipo de datos de cada uno de los JPanel. private panelHijoSuma hs; private panelHijoResta hr; Ahora, en cada una de los tems de la barra de men, para mostrar el JPanel deseado, colocamos el siguiente cdigo:

//Nombre evento private void nSumaActionPerformed(java.awt.event.ActionEvent evt) { //Si ya est el otro Jpanel aadido al contenedor, entonces se elimina try{ this.remove(hr); } catch(Exception e){ } //Creamos una nueva instancia de panelHijoSuma hs = new panelHijoSuma(); //Agregamos la instancia al JFrame, con un layout al centro this.add(hs, BorderLayout.CENTER); //Hacemos que el JFrame tenga el tamao de todos sus elementos this.pack(); } Este cdigo debe de ser similar en los restantes tems de la Menu Bar, siempre con el evento ActionPerformed. Ahora, la parte final de este artculo. Realizaremos cada una de las operaciones dentro del evento de los TextBox, KeyReleased(). De esta forma:

Ahi agregaremos el siguiente cdigo: //Nombre del evento. Lo genera Netbeans private void txtnum1KeyReleased(java.awt.event.KeyEvent evt) {

//Asignamos el texto del textBox a una variable Integer int num1 = Integer.parseInt(this.txtnum1.getText()); //Si el otro TextBox no esta vacio, entonces se debe realizar la operacin if (!this.txtnum2.getText().equals("")){ int num2 = Integer.parseInt(this.txtnum2.getText()); //Se realiza la operacin, y se coloca en el TextBox del resultado this.txtresultador.setText(String.valueOf(num2+num1)); } } La aplicacin debe lucir as:

El mismo JFrame con uno y otro JPanel

Espero

que

les

sea

til

este

cdigo.

Cdigo alojado en el Aula Virtual de la UES-FMO, dentro del curso de Programacin II. Publicado por Hugo Barrientos en 11:21 0 comentarios Enlaces a esta entrada Etiquetas: ActionPerformed, FlowLayout, Internal Frame, Java, JFrame, JPanel, KeyReleased, Layout, Netbeans

Emisin de certificados SSL con Apache Tomcat, Java, JSP y Netbeans


05 abril 2009

Un buen amigo mio necesitaba emitir certificados SSL (Secure Socket Layers) para la admisin de usuarios a sitios con protocolo http seguro (HTTPS) para un proyecto de una materia de la universidad. Como el novato que aun soy, empec a leer al respecto y encontr una forma de hacerlo. Logr implementarla y traigo para Uds. este pequeo y sencillo tutorial para emitir este tipo de certificados utilizando Apache Tomcat, Java, JSP y Netbeans, todo sobre un sistema operativo Windows Vista. Las versiones que se tienen instaladas son:

JDK 1.6.0_05 Netbeans 6.5 Apache Tomcat 6.0.18

Ahora, para generar el certificado SSL utilizaremos la herramienta incluida en el Java Development Kit, JDK llamada KeyTool. Para acceder a ella tenemos que acceder al directorio que contiene la versin del JDK. En Windows, es la siguiente ruta: %JAVA_HOME%\bin\keytool.exe -genkey -alias tomcat -keyalg RSA

Con este comando y sus argumentos, estamos ordenando que generaremos un nuevo certificado o una nueva key, con el alias tomcat. Luego nos pedir una serie de datos que son los que conformarn el almacn de claves. La clave que viene por defecto con el alias de tomcat es: changeit Por el momento si ests aprendiendo conserva esta clave y as no tendrs problemas para crear ms certificados. Cuando termines de ingresar toda la informacin digita OK para que se valide. Para mantener

la misma clave (es decir changeit) solo debes de presionar Enter. Al finalizar este paso el KeyTool genera un archivo que almacena la lleva, es decir un .keystore. Es un poco problemtico encontrar en donde lo guarda, sin embargo el keytool lo aloja siempre en la carpeta de usuario, en mi caso en Windows Vista se aloj en: C:\Users\miNombreUsuario En Windows XP sera: C:\Documents and Settings\miNombreUsuario En Ubuntu sera /home/miNombreUsuario Ahora debemos configurar el servidor Tomcat para aceptar y habilitar el puerto SSL, que por defecto es el 8443. Dentro de la carpeta del apache-tomcat-6.0.18 localizamos el archivo server.xml y descomentamos unas lneas que aparecen por defecto con carcter de comentarios y es el conector del puerto 8443. Le quitamos los comentarios unicamente y le agregamos un atributo para indicar cul sera el keystore, de esta manera: Iniciamos ahora el servidor Tomcat de esta manera: C:\Servidorapache-tomcat-6.0.18\bin\startup.bat Y ahora digitamos en el navegador https://localhost:8443/ y ya accederemos al index de localhost pero con protocolo http seguro, de esta manera:

Se aade la excepcin en el certificado y ya se podr ver como la imagen superior. Aprecien tambin en la barra de direcciones el protocolo del sitio (HTTPS) y en la barra de estado de Firefox vean que tiene un pequeo candado, denotando que es un sitio seguro.

El tercer y ltimo paso es crear una aplicacin web con JSP y Netbeans, utilizando Tomcat como servidor de dicha aplicacin. La creamos con Netbeans, y modificamos el archivo web.xml agregando estas etiquetas, todas dentro del cierre de la etiqueta web-app. De esta manera:

<security-constraint> <web-resource-collection> <web-resource-name>Entire Application</web-resource-name> <url-pattern>/*</url-pattern> </web-resource-collection> <user-data-constraint> <transport-guarantee>CONFIDENTIAL</transport-guarantee> </user-data-constraint> </security-constraint>

Y es todo! Ahora este sitio se podr ser accedido desde protocolo HTTPS. La prueba lucira as. Noten el protocolo en la barra de direcciones, as como el pequeo candado:

Muchas gracias a Armando Daz y su Blog Ubuntu de El Salvador, ya que este tutorial est basado en su artculo.

Publicado por Hugo Barrientos en 10:41 0 comentarios Enlaces a esta entrada Etiquetas: certificados SSL, Java, JDK, JSP, Keytool, Netbeans, SSL

Utilizando JTextArea y JOptionPane en Netbeans


02 abril 2009

JTextArea es un componente bsico del Swing de Java y su funcin principal es la de capturar texto ingresado desde teclado por el usuario. Sin embargo, entre sus mtodos est el de asignarle texto para mostrarlo adems. Ahora explicar un poco su uso con la ayuda de un pequeo ejemplo, el cual sera un pequeo bosquejo de un proyecto llamado Librera, en el cual estar para este ejemplo unicamente la clase Libro. La construiremos de esta manera: Unicamente con tres atributos bsicos, un constructor que los inicialice con valores constantes, y con los respectivos get y set de cada atributo. El cdigo de dicha clase quedara de la siguiente manera:

package libreriajtextarea; // @author Hugol public class libro { private String nombre; private String autor; private int numPags; public libro(){ this.nombre="Cmo Programar en C/C++"; this.autor="Joyanes Aguilar"; this.numPags=500; }

public String getNombre(){ return this.nombre; } public void setNombre(String n){ this.nombre=n; } public String getAutor(){ return this.autor; } public void setAutor(String a){ this.autor=a; } public int getNumPags(){ return this.numPags; } public void setNumPags(int n){ this.numPags=n; } } Ahora en la clase Main la implementaremos para que podamos utilizar, tanto los JTextArea como los JOptionPane en nuestra introduccin al Swing. El cdigo del Main es as: public class Main { public static void main(String[] args) { //se crea un nuevo JTextArea JTextArea salida = new JTextArea(); String cadSalida = ""; //se crea un nuevo libro libro book = new libro(); //Se coloca texto al JTextArea

salida.setText("El libro "+ book.getNombre()+ " tiene "+book.getNumPags()+ " paginas"); //Se muestra el texto en un JOptionPane JOptionPane.showMessageDialog(null, salida, "Libreria", JOptionPane.INFORMATION_MESSAGE); //Se limpia el JTextArea salida.setText(""); //Se le asigna un tamao de ancho y alto al JTextArea salida.setSize(50, 50); //Se le pide al usuario que escriba dentro del JTextArea en un JOptionPane JOptionPane.showMessageDialog(null, salida, "Escribe el Editorial del libro JTextArea", JOptionPane.INFORMATION_MESSAGE); //Se le asigna el texto escrito en el JTextArea a un String cadSalida = salida.getText(); //Se imprime el String en un JOptionPane, demostrando q el JTextArea se puede utilizar tanto para recibir informacin como para mostrarla JOptionPane.showMessageDialog(null, "Editorial de libro: " + cadSalida, "Libreria", JOptionPane.INFORMATION_MESSAGE); } } Cabe mencionar que ya la clase JOptionPane proporciona un mtodo de entrada de datos, el ya conocido showInputDialog(), sin embargo para fines didcticos se agrega un JTextArea para el ingreso de datos. La aplicacin luce as:

Se muestra el JTextArea dentro JOptionPane.

El usuario digita dentro del JTextArea la editorial del libro.

Se muestra la respuesta.

Publicado por Hugo Barrientos en 21:31 0 comentarios Enlaces a esta entrada Etiquetas: Java, JOptionPane, JTextArea, Netbeans, Swing

Ejemplos creando JFrame y JOptionPane


30 marzo 2009

Es muy til que nos vayamos introduciendo al mundo del ambiente grfico en Java. Para ello hoy en da se utiliza el popular paquete de javax.swing. Las libreras

swing nos aportan una serie de componentes y contenedores para realizar aplicaciones de escritorio. Como ya en varios ejercicios se ha estado utilizando la famosa clase esttica JOptionPane, ahora veremos las diferencias y cmo instanciar un nuevo formulario, que en el Swing es llamado JFrame. As podremos ver las diferencias y podemos aprender a crear nuestros primeros formularios en Java. Lo haremos utilizando el ejercicio que se us en un parcial. Que se calcularan los factoriales de los nmeros impares menores que 2 y se mostraran al usuario. Se har de dos formas: con un JOptionPane y con un JFrame. Antes que nada creamos la clase factorial que nos devolver el factorial del nmero que se le ingrese:

package factoriales21; /** * * @author Hugol */ public class factorial {

private int numero; private double resultado; //Constructor public factorial(int num){ this.numero=num; this.resultado=1; } //Devuelve el factorial public double devolverFactorial(){ for (int i=1; i<=this.numero;i++){ this.resultado*=i; } return this.resultado; } }

Ahora, dentro de la clase Main instanciaremos nuestro JFrame y el JOptionPane, para que muestre los factoriales debidos. Se hace de esta manera. Note que el cdigo est debidamente documentado:

package factoriales21; import javax.swing.JFrame; import javax.swing.JOptionPane; import javax.swing.JTextArea; /** * * @author Hugol */ public class Main { public static void main(String[] args) { //Creamos un nuevo JTextArea JTextArea area = new JTextArea(); //Instanciamos un nuvo JFrame, pasndole como argumento, el ttulo JFrame form = new JFrame("Este es un JFrame"); //Variable para almacenar la salida en pantalla String salida = "Los factoriales de los numeros impares menores que 21 son:\n"; for (int i=1;i<=21;i++){ if(i%2 != 0){ factorial obj=new factorial(i); salida = salida + String.valueOf(obj.devolverFactorial()) +", "; } } //La salida en pantalla se la asignamos como texto al JTextArea area.setText(salida); //Llamamos un nuevo JOptionPane JOptionPane.showMessageDialog(null, area, "Este es un JOptionPane", JOptionPane.INFORMATION_MESSAGE); //Con esta sentencia declaramos que cuando se cierre el JFrame la aplicacin se cierra tambin form.setDefaultCloseOperation(javax.swing.WindowConstants. EXIT_ON_CLOSE); //Aadimos el componente JTextArea al JFrame form.add(area);

//Le asignamos como posicin del JFrame, el centro de la pantalla form.setLocationRelativeTo(null); //Con esta sentencia, le asignamos el tamao de lo que contiene al JFrame form.pack(); //Colocamos visible al usuario el formulario form.setVisible(true); } } Y ahi tenemos la aplicacin. Se tiene que ver muy parecido a esto:

Publicado por Hugo Barrientos en 11:31 0 comentarios Enlaces a esta entrada Etiquetas: Ejemplos, Ejercicios, Java, JFrame, JOptionPane, JTextArea, Swing

Resoluciones de ejercicios de Primeros Parciales Programacin II


27 marzo 2009

Para que no nos suceda esto, practiquemos ms...

Buenas! Luego de los resultados del primer parcial en todos los grupos tericos, hemos decidido entre los encargados de impartir la ctedra, que haremos un pequeo refuerzo a todos los estudiantes para lograr nivelar los conocimientos de todos en miras hacia los siguientes parciales y evaluaciones de laboratorio. Es por esto que la semana previa a vacaciones resolveremos los ejercicios evaluados en este pasado parcial. Aunque algunos de Uds. ya los resolvieron, aado mis soluciones en el siguiente link: http://www.mediafire.com/download.php?5u0mwzo2ldg El presente archivo en formato RAR consta de las siguientes soluciones:

Dibujar un histograma a partir de un vector de enteros. Descomponer una cantidad de dinero en el nmero mnimo de billetes que se puede tener. Encontrar el mayor y el menor de 4 nmeros ingresados por el usuario con la ayuda de la clase Math. Obtener el factorial de los nmeros impares menores de 21 y mostrarlos en un JTextArea.

Al descargar el RAR conseguir los proyectos en Netbeans de cada uno de esos problemas.

Cualquier duda o sugerencia hacrmela llegar a mi correo o por comentario a esta entrada. Mi correo es: hugol.barrientos@gmail.com Saludos y suerte en las evaluaciones venideras Publicado por Hugo Barrientos en 22:43 0 comentarios Enlaces a esta entrada Etiquetas: Ejercicios, Java, Math, Netbeans, Programacion II

Herencia Mltiple en Java, Conveniente o no?


23 marzo 2009

Todos sabemos que la herencia es un mecanismo propio de la programacin orientada a objetos POO. Nos permite crear clases a partir de otra, las cuales las unen vnculos sumamente estrechos, casi de familia. Es por ello que se llama herencia. Si buscamos modelar nuestras clases u objetos como propios de la realidad, todos los conceptos de la orientacin a objetos nos sern muy fcil de implementar mientras programamos. Implementando herencia tenemos las siguientes ventajas:

Modelado de la realidad Evitar redundancias en el cdigo Facilita la reutilizacin del cdigo, as como reduce el nmero de lneas a escribir Sirve como el soporte o la base para el polimorfismo

Es muy sencilo implementar la herencia de clases en Java. Basndonos en el diagrama de arriba, si queremos crear la clase gallina solo debemos de interponer la palabra reservada extends. Por lo tanto la declaracin de la clase quedara constituida de la siguiente manera: public class Gallina extends Ave{ }

Ahora podemos tener dentro de gallina, todos los atributos y mtodos propios de una Ave. Esta forma de herencia es llamada herencia simple, ya que solamente hay una clase padre o superclase. Existe una forma de herencia definida dentro de los conceptos de la programacin orientada a objetos en la cual una clase puede heredar de dos o ms clases padres o superclases. Se llama Herencia Mltiple. La herencia mltiple en java no es soportada nativamente. Sin embargo muchos autores y desarrolladores la simulan utilizando la palabra reservada implements e interfaces, que sirve para implementar o cubrir una clase con respecto a otra. Supongamos el siguiente escenario:

Un alumno de la ctedra de Programacin II adems que es una persona consagrada, tambin es un hijo de familia que debe responder con buenas notas en su travesa por la universidad. Es decir que una clase alumno debera de heredar de ambos objetos. Hacer este pequeo diagrama UML en cdigo Java no se puede nativamente hablando, solamente con una simulacin. La manera de realizarla es la siguiente: public class Persona { }

public class Hijo{ } interface iHijo{ //La interface pertenece a la clase Hijo }

public class Alumno extends Persona implements iHijo{ }

Con la ayuda de las interfaces simulamos la herencia mltiple. Una interface no es ms que la implementacin de los mtodos de una clase. Con la ayuda de stos podemos accesar a los mtodos de la clase Hijo y heredar directamente todo lo que pertenece a Persona. Fcil, pero a la vez confuso, No? Conclusin: Se debe utilizar la herencia mltiple? A mi forma de pensar, si no est implementada nativamente, se debera de evitar el uso de una simulacin que va en contra de la naturaleza del lenguaje. Adems pienso que todo problema que o esquema de clases se pueden llegar a plantear de forma que solamente utilicemos la herencia simple, ya que es ms sencilla y es ms natural que se herede de un solo padre. Como ejercicio al lector, le pido que plantee el esquema de clases para el ejemplo utilizado en la simulacin de la herencia mltiple. Cmo lo planteara con herencia simple?

Potrebbero piacerti anche