COMPONENTES y LIBRERIAS topicos.docx

44
TOPICOS AVANZADOS DE PROGRAMACIÓN INSTITUTO TECNOLÓGICO DE LÁZARO CÁRDENAS JOSUE JONATHAN PEÑALOZA PIEDRA MATERIA: TOPICOS AVANZADOS DE PROGRAMACIÓN 4TO SEMESTRE JOSUE JONATHAN PEÑALOZA PIEDRAPágina 1

Transcript of COMPONENTES y LIBRERIAS topicos.docx

TOPICOS AVANZADOS DE PROGRAMACIÓN

INSTITUTO TECNOLÓGICO DE LÁZARO CÁRDENAS

JOSUE JONATHAN PEÑALOZA PIEDRA

MATERIA: TOPICOS AVANZADOS DE PROGRAMACIÓN

4TO SEMESTRE

PROFA: MARY SANDRA RODRIGUEZ CHAVEZ

19 DE MARZO DE 2012

JOSUE JONATHAN PEÑALOZA PIEDRA Página 1

TOPICOS AVANZADOS DE PROGRAMACIÓN

INDICE:

DEFINICIÓN CONCEPTUAL DE COMPONENTES, PAQUETES/LEBRERÍAS…………………3

USO DE COMPONENTES (VISUALES Y NO VISUALES) PROPORCIONADOS POR EL

LENGUAJE……………………………………………………………………………………………….4

USO DE LIBRERIAS PROPORCIONADAS POR EL LENGUAJE………………………………11

CREACIÓN DE COMPONENTES (VISUALES Y NO VISUALES) DEFINIDOS POR EL

USUARIO………………………………………………………………………………………………18

CREACIÓN Y USO DE PAQUETES/LIBRERÍAS DEFINIDAS POR EL USUARIO……………24

BIBLIOGRAFÍA…………………………………………………………………………………………32

JOSUE JONATHAN PEÑALOZA PIEDRA Página 2

TOPICOS AVANZADOS DE PROGRAMACIÓN

DEFINICIÓN CONCEPTUAL DE COMPONENES, PAQUETES/LIBRERIAS

Componente: Es una clase abstracta que representa todo lo que tiene una

posición, un tamaño, puede ser pintado en pantalla y puede recibir eventos.

Los Objetos derivados de la clase Componente que se incluyen en el Abstract

Windows Toolkit son los que aparecen a continuación:

Button

Canvas

Checkbox

Choice

Label

List

Scrollbar

Container

Panel

Windows

o Dialog

o Frame

TextComponent

TextArea

TextField

Un paquete en Java es lo que su nombre lo indica, un paquete o conjunto de

clases, lógicamente, que tienen cosas en común. Lógicamente un programado

puede agruparlas con o sin criterio, pero lo ideal es que se dediquen a

funciones específicas. También los paquetes definen una jerarquía de

directorios, que permiten igualmente agrupas las clases, cosa de desplegar los

archivos mas ordenadamente.

JOSUE JONATHAN PEÑALOZA PIEDRA Página 3

TOPICOS AVANZADOS DE PROGRAMACIÓN

LIBRERÍAS

La utilización de objetos dinámicos supone dejar pendiente en el montaje de la

aplicación el enlace de dichos objetos. Cuando la aplicación está en ejecución,

y sólo entonces, se produce el enlace (dinámico) con los objetos contenidos en

la librería.

La creación de librerías dinámicas corre a cargo del enlazador o montador (en

nuestro caso el ld) aunque también es posible indicar al compilador las

opciones necesarias para el montaje y de ese modo, será él quien se encargue

de pasárselas al montador.

Cuando se crea un objeto dinámico es necesario que dicho código objeto sea

independiente de la posición, para conseguir este tipo de código debe

especificarse al compilador la opción -fPIC (Position IndependentCode). Dicho

flag debe indicarse tanto en la compilación como en el montaje de la librería.

Para montar los objetos es necesario además indicar la opción -shared para

que el resultado sea un fichero objeto ‘compartible’.

USO DE COMPONENTES (VISUALES Y NO VISUALES)

PROPORCIONADOS POR EL LENGUAJE.

Un componente desde el punto de vista de programación esta compuesto por

varias secciones y el conjunto de todas ellas dan lugar a la creación de

dichocomponente.

Por tanto, primero para no perder el norte, vamos a empezar definiendo

el convenio que es utilizado para organizar dichas secciones por TinyOs. En

general, un componente posee tres grandes secciones que son:

Configuration, Implementation, Module. Estas tres secciones han de estar

obligatoriamente presentes en cualquiercomponente aunque puedan estar

vacías.

El estándar de T i n y O s determina, que las secciones de Configuration

eImplementatión han de ir en un fichero que recibirá el nombre del componente

con laextensión .nc y la tercera sección de Module deberá de ir en otro fichero

aparte querecibirá el nombre del componente concatenado con un M

JOSUE JONATHAN PEÑALOZA PIEDRA Página 4

TOPICOS AVANZADOS DE PROGRAMACIÓN

mayúscula (la M da elsignificado al fichero, es el significado de Module) , este

último fichero también poseeráa extensión .nc.

Otra buena costumbre consiste en crear un fichero de header o cabecera con

extensión .h que contenga todas las enumeraciones, registros o tipos de datos

creadospor el usuario de los que hace uso la aplicación, y cuando se realiza

esto la forma deligar dicho fichero con los otros dos es utilizando al principio de

los otros fichero ladirectiva includesheader; aunque como mención especial

decir que si nos fijamosmejor en este directiva se puede ver que no se

incorpora la extensión .h en la misma.

Ahora que ya sabes cuales son las secciones que va a contener cada

ficherovamos a empezar a explicar cada una de ellas.

ImplementatiónEsta sección se va a encargar de definir las conexiones

que hay entre losdiferentes componentes que utiliza la aplicación, esto es

debido a que si recordamos unpoco, se ha comentado que la programación de

un componente (que se llevará a cabo en la sección de module) se hace

utilizando interfaces y dichas interfaces para poderutilizarlas las ha de

proporcionar un componente, entonces básicamente es esta secciónse definen

cuales son los componentes que proporcionan las interfaces a

nuestraaplicación (por lo general serán componentes primitivos).

Una vez que conocemos la finalidad de esta sección y llegados a este punto,

vamos a insertar un concepto nuevo que es la diferencia que existe entre una

aplicaciónque esta ya disponible para ser ejecutada en un sensor y un

componente cualquiera. Ladiferencia es muy poca, y consiste en que una

aplicación es un componente comocualquier cosa en este lenguaje que en

su sección de implementación hace uso de uncomponente especial

denominado Main.

BOTONES

Creación de botones como objetos. Se pueden crear objetos Button con el

operador new como se muestra a continuación:

SINTAXIS:

Buttonbotón;

Botòn = new Button (“Baton");

JOSUE JONATHAN PEÑALOZA PIEDRA Página 5

TOPICOS AVANZADOS DE PROGRAMACIÓN

La cadena utilizada en la creación del botón aparecerá en el botón cuando se

visualice en pantalla. Esta cadena también se devolverá para utilizarla como

identificación del botón cuando ocurra un evento.

EVENTOS BUTTON

Cada vez que el usuario pulsa un botón, se produce un evento. Los eventos de

pulsación de un botón se pueden capturar sobrecargando el método action ():

SINTAXIS:

public Boolean action (Event evt, Object obj) {

if (evt.targetinstanceof Button)

System.out.println( (String)obj );

else

System.out.println( "Evento No-Button" );

}

La distinción entre todos los botones existentes se puede hacer utilizando el

objeto destino, pasado por el objeto Event y comparándolo con los objetos

botón que se colocaran en la interfaz.

BOTONES DE PULSACIÓN

Los botones presentados en el applet son los botones de pulsación estándar;

no obstante, para variar la representación en pantalla y para conseguir una

interfaz más limpia, AWT ofrece a los programadores otros tipos de botones

como los que se muestran a continuación:

BOTONES DE SELECCIÓN

Los botones de selección se pueden agrupar para formar una interfaz de botón

de radio (CheckboxGroup), que son agrupaciones de botones Checkbox en las

que siempre hay un único botón activo.

JOSUE JONATHAN PEÑALOZA PIEDRA Página 6

TOPICOS AVANZADOS DE PROGRAMACIÓN

BOTONES AUTOCONTENIDOS

La naturaleza orientada a objetos de Java nos da la posibilidad de crear

botones completamente auto contenido.

En este tipo de botón, se construye el manejador de eventos dentro de la

propia clase extendida de botón. Se pueden añadir estos botones a la

aplicación, sin tener que preocuparse de los eventos que pudieran generar.

CANVAS

Si tenemos un applet que trabaja con imágenes directamente, ya sea un applet

gráfico o de dibujo, los lienzos o zonas de dibujo llamados Canvas resultan

muy útiles.

Los Canvas son un Componente básico que captura eventos de exposición

(expose). La clase base Canvas no responde a los eventos, sin embargo se

puede crear una subclase que sea la encargada de manipular los eventos.

Al permitir saltarse el manejo normal de eventos, y junto con los métodos de

representación gráfica, los Canvas simplifican la producción de applet que

necesitan una única funcionalidad para distintas áreas.

BOTON DE MARCACION

Los botones de marcación llamados Checkbox se utilizan frecuentemente como

botones de estado. Proporcionan información del tipo Sí o No (true o false). El

estado del botón se devuelve en el argumento Objeto de los eventos

Checkbox; el argumento es de tipo booleano: verdadero (true) si la caja se ha

seleccionado y falso (false).

Tanto el nombre como el estado se devuelven en el argumento del evento,

aunque se pueden obtener a través de los métodos getLabel () y getState () del

objeto Checkbox.

JOSUE JONATHAN PEÑALOZA PIEDRA Página 7

TOPICOS AVANZADOS DE PROGRAMACIÓN

BOTONES DE LISTA

Los botones de selección en una lista son llamados Choice y estos permiten el

rápido acceso a una lista que contenga una determinada cantidad de

elementos.

CONTAINER

PANELES

La clase Panel es el más simple de los Contenedores de Componentes

gráficos. Se crea una clase no-abstracta Conteiner que sirva de base a los

applet y a otras pequeñas aplicaciones. La clase Panel consta de dos métodos

propios:

Constructor: cuyo fin es crear un nuevo Panel con un LayoutManager de

tipo FlowLayout que es el de defecto.

Método addNotify () que, sobrecargando la función del mismo nombre en

la clase Conteiner el cual llama al método createPanel () del Toolkit

adecuado el cual, creando así un PanelPeer.

El AWT enviará así al Panel al applet y todos los eventos que sobre él ocurran.

El uso de Paneles permite que las aplicaciones puedan utilizar múltiples

layouts, es decir, que la disposición de los componentes sobre la ventana de

visualización pueda modificarse con mucha flexibilidad. Permite que cada

Contenedor pueda tener su propio esquema de fuentes de caracteres, color de

fondo, zona de diálogo, etc.

VENTANAS

Una Ventana genérica, Windows, puede utilizarse simplemente para que sea la

clase padre de otras clases y se puede intercambiar por un Diálogo (Dialog) sin

pérdida de funcionalidad.

JOSUE JONATHAN PEÑALOZA PIEDRA Página 8

TOPICOS AVANZADOS DE PROGRAMACIÓN

MARCO DE UNA APLICACION

El Contenedor de los Componentes es el Frame. También es la ventana

principal de la aplicación, lo que hace que para cambiar el icono o el cursor de

la aplicación no sea necesario crear métodos nativos; al ser la ventana un

Frame, ya contiene el entorno básico para la funcionalidad de la ventana

principal.

Al crear un Frame, extiende la clase principal y hereda todas sus

características. Tiene un método el constructor, que no admite parámetros.

Además, se hace una llamada explícita al constructor utilizado es decir, al

constructor de la clase padre, para pasarle como parámetro la cadena que

figurará como el título de la ventana.

La llamada a show() es necesaria, ya que por defecto, los contenedores del

AWT se crean ocultos y hay que mostrarlos.

La llamada a pack() hace que los componentes se ajusten a sus tamaños

correctos en función del Contenedor en que se encuentren situados.

ETIQUETAS

Las etiquetas llamadas Label proporcionan una forma de colocar texto estático

en un panel, para mostrar información que no varía o que no puede ser

modificada por el usuario.

LISTAS

Las listas (List) aparecen en las interfaces de usuario para facilitarles la

manipulación de muchos elementos. Se crean utilizando métodos similares a

los de los botones Choice. La lista es visible todo el tiempo, utilizándose una

barra de desplazamiento para visualizar los elementos que no caben en el área

que aparece en la pantalla.

Para acceder a los elementos seleccionados se utilizan los métodos

getSelectedItem() o getSelectedItems(). Para listas de selección simple,

cualquier selección con doble-click en la lista disparará el método action() de la

misma forma que con los eventos de selección en menús.

JOSUE JONATHAN PEÑALOZA PIEDRA Página 9

TOPICOS AVANZADOS DE PROGRAMACIÓN

BARRAS DE DESPLAZAMIENTO

Es muy común que se utilicen en determinados applet que necesiten realizar el

ajuste de valores lineales en pantalla, resulta útil el uso de barras de

desplazamiento (Scrollbar). Las barras de desplazamiento proporcionan una

forma de trabajar con rangos de valores o de áreas como el Componente

TextArea, proporcionando las barras automáticamente.

Este tipo de interfaz proporciona al usuario un punto de referencia visual de un

rango y al mismo tiempo la forma de cambiar los valores. Por ello, las barras de

desplazamiento son Componentes un poco más complejos que los demás,

reflejándose esta complejidad en sus constructores. Al crearlos hay que

indicar:

Su orientación.

Su valor inicial.

Los valores mínimo y máximo que puede alcanzar.

Porcentaje de rango que estará visible.

Las barras de desplazamiento generan eventos; pero se debe utilizar el método

handleEvent() directamente, en lugar del método action(). El destino del evento

será un objeto de la clase Scrollbar, a partir de éste se obtiene la posición de la

barra de desplazamiento.

SINTAXIS:

JScrollPane scroll = new JScrollPane( tab,

JScrollPane.VERTICAL_SCROLLBAR_ALWAYS,

JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS);

AREAS DE TEXTO

Java a través del AWT, permite incorporar texto multilínea dentro de zonas de

texto (TextArea). Los objetos TextArea se utilizan para elementos de texto que

ocupan más de una línea, como puede ser la presentación tanto de texto

editable como de sólo lectura, para las áreas de texto hay que especificar el

JOSUE JONATHAN PEÑALOZA PIEDRA Página 10

TOPICOS AVANZADOS DE PROGRAMACIÓN

número de columnas. Se puede permitir que el usuario edite el texto con el

método setEditable().

Para acceder al texto actual de una zona de texto se utiliza el método getText(),

las áreas de texto no generan eventos por sí solas, por lo que hay que utilizar

eventos externos, para saber cuando tenemos que acceder a la información

contenida en el TextArea.

CAMPOS DE TEXTO

Para la entrada directa de datos se suelen utilizar los campos de texto, que

aparecen en pantalla como pequeñas cajas que permiten al usuario la entrada

por teclado.

Los campos de texto o TextField se pueden crear vacíos con una longitud

determinada, rellenos con texto predefinido.

USO DE LIBRERÍAS PROPORCIONADAS POR EL LENGUAJE

Java es un lenguaje de programación desarrollado para una multitud de plataformas y procesadores.Consideremos los dos tipos de aplicaciones gráficas más comunes.Modelos de Frames y Applets, se pueden construir usando cualquiera de las dos galerías de componentes visuales, son:JAVA AWT: Es la librería visual más antigua de java usando esta librería, se podrán construir los tres tipos de programas mas comunes como son FRAME, WINDOW y APPLET.JAVA SWING: Es la librería de componentes visuales más nueva que proporciona java, usando esta librería se podrán construir los tres tipos de programas o aplicaciones que son JFRAME, WINDOW Y JAPPLET.

Un applet es un programa en java que se mandan a una máquina o PC remota para que los ejecuten o lo corra, cuando este applet de llegada a las máquinas remotas vía browser, dicho browser es quien activa la máquina virtual de java que da la orden de compilación y ejecución, es decir java programa.applet.

Entonces es importante que la máquina virtual de java, que se encuentra en la PC remota,tenga capacidad de incluir todas las librerías de java, como la de match, la de AWT, la de lang.etc.

Existen diferentes librerías en java, entre las cuales se encuentra.

JOSUE JONATHAN PEÑALOZA PIEDRA Página 11

TOPICOS AVANZADOS DE PROGRAMACIÓN

Java. lang

Colección de tipo básico siempre importados a cualquier unidad de compilación. Aquí están las declaraciones de objetos, clases, wrappers.

Interfaces Clases.Cloneables BooleanComparable ByteRunnable CharacterClassLoaderCompilerDoubleFloatInheritableThreadLocalIntergerLongMathNumberObjectSystemThreadVoidString, etc...

Java.ioArchivos de stream y acceso aleatorio. Librería estándar de entrada y salida.Interfaces ClasesDataInputBufferedInputStreamDataOutputBufferedOutputStreamExternalizableBufferedReaderFilefilterBufferedwriteFilenameFilterByteArrayInputStreamOdjectInputByteArrayOutputStreamSerializableDataOutputStreamFileInputStream readerWriter,etc..

Java.netLibrería que apoya interfaces con telnet y URL.

JOSUE JONATHAN PEÑALOZA PIEDRA Página 12

TOPICOS AVANZADOS DE PROGRAMACIÓN

Interfaces Clases,ContentHandlerFactory Authenticator,DatagramSocketImplFactoryContentHandler,FileNameMapDatagramPacket,SocketOptionsDatagramSocketImpl,URLStreamHanlerFactoryHttpURKConnection, URL, etc..

Java.utilClase como de diccionarios, tabla de hash, stack, técnica de codificación hora, fecha, etc.

Interfaces ClasesCollection AdstractCollection.Comparator AdstracList.,Enumeration AdstrectMap.EventListenerAdstrectSecquentialList.InteratorAdstractSe.tList ArreyListObserver CollectionSortedSetEventObjectRandom StackTimerVectorDate,etc.

Java.AwtAbstractWindowingToolkit que proporciona una capa abstracta que permita llevar una aplicación en java de un sistema de ventanas a otro. Contiene clases para componentes básicos de la interfaz, tales como eventos, colores, tipos de letra, botones, campos de texto.

Estructura del awt.La estructura de la versión actual del AWT en la plataforma Java 2 se puede resumir en los puntos siguientes:

Los contenedores contienen componentes, que son los controládores básicos.

JOSUE JONATHAN PEÑALOZA PIEDRA Página 13

TOPICOS AVANZADOS DE PROGRAMACIÓN

No se usan posiciones fijas de los componentes, si no estan situados a traves de una disposición controlado (layouts)El común denominador de mas bajo nivel se acerca al teclado, ratón y manejo de eventos.Alto nivel de abstracción respecto al entorno de ventanas en que se ejecute la aplicación (no hay áreas clientes, ni llamadas a X ).La arquitectura de la aplicación es dependiente del entorno de ventanas, en vez de tener un tamaño fijo.Carece de un formato de recursos. No se puede separar el código de lo que es propiamente interfaz. No hay ningún diseñador de interfaz toda vía.Interfaces ClasesActiveEventAlphaCompositeAdjustableAWTEvent

Java.appletEl paquete java.applet permite la creación de appletsatraves de la clase Applet, proporciona interfaces para conectar un applet a un documento web y para audición de audio.Interfaces ClasesAppletContext AppletAppletStubAudiClip

Java.mathProporciona cálculos en entero grande y real grande.ClasesBigdecimalBigintegerAdemás de la clase Math.

Esta es la clase que representa la librería matemática de Java. Las funciones que contiene son las de todos los lenguajes, parece que se han metido en una clase solamente a propósito de agrupación, por eso se encapsulan en Math, y lo mismo sucede con las demás clases que corresponde a objetos que tiene un tipo equivalente (carácter, Float, etc.)La clase Math es public para que se pueda llamar desde cualquier sitio y static para que no haya que iniciarla.

Java.rmi

JOSUE JONATHAN PEÑALOZA PIEDRA Página 14

TOPICOS AVANZADOS DE PROGRAMACIÓN

Este paquete hace posible que un objeto se ejecute en una maquina virtual Java invoque métodos de otro objeto que se ejecuta en la máquina virtual distinta; dicha máquina virtual pueden encontrarse en ordenadores diferentes conectados a través de una red TCP/IP.

Interfaces ClasesRmoteMarshalledObjectNamingRMISecurityManager

Java.textContiene clase que permiten dar formato especializado a fechas, números y mensajes.Interfaces ClasesAttributedChacterIterator AnnotationCharacterIteratorAttibutedCharacterIteratorChoceFormatDateFormatFormatMessageFormatNumberFormatParsePosition

Java.sound.midiPaquete con clase e interfaces que permitan la captura, procesamiento y reproducción de música MIDI.Interfaces ClasesControllerEventListener InstrumentMataEventListenerMeteMessageMidiChannel MidiDevice.infoMidiDeviceMidiEventReceiver MidiFileFormatSequecerMidemessage

JAVA .SQLJunto con el paquete javax.sql, incluido en java 2 SDK Edición para la empresa, forma parte del API de java 2.0 (conexión Java a Base de Datos), y permite la

JOSUE JONATHAN PEÑALOZA PIEDRA Página 15

TOPICOS AVANZADOS DE PROGRAMACIÓN

conexión de base de datos, el envió de sentencias SQL y la interpretación de los resultados de las consultas.

IntefacesClasesArray DateBlob DriverManagerCallabeStatementDriverPropertyInfoClobSQLPermissionConnecction TimerDatabaseMetaDate TimestampDriver TypeRefSQLDataSQLInputSQLOutputStruct

JAVA.SWINGPaquete que mejora e AWT, proporcionando un conjunto de componentes que se ejecutan de manera uniforme en todas las plataformas.Interfaces ClasesAction AbstractActionComboBoxEditorActonMapIcon Box.FillerListModelCellRendererPaneMenuElementDebugGraphicsWindowsConstantsDefaulListSelectionModelJAppletJbuttonJCheckBoxJFrameJMenuJLabelJPanelJTextFieldJTreeJWindowsTemerUIManager, etc..

JOSUE JONATHAN PEÑALOZA PIEDRA Página 16

TOPICOS AVANZADOS DE PROGRAMACIÓN

EJEMPLOS DONDE PODEMOS NOTAR EL USO DE LAS LIBRERÍAS.importjava.awt.*;importjava.awt.event.*;importjavax.swing.*;

public class AparienciaVisual extends JFrame {private final String cadenas[] = { "Metal", "Motif", "Windows" };privateUIManager.LookAndFeelInfoapariencias[];privateJRadioButtonopción[];privateButtonGroupgrupo;privateJButtonbotón;privateJLabeletiqueta;privateJComboBoxcuadroCombinado;String s1=""; publicAparienciaVisual() {super( "apariencia visual" );Container contenedor = getContentPane(); // establecer panel para región NORTH de esquema BorderLayoutJPanelpanelNorte = new JPanel();panelNorte.setLayout( new GridLayout( 3, 1, 0, 5 ) ); // estableceretiquetapara panel NORTHetiqueta = new JLabel( "Ésta es la apariencia visual Metal seleccionada",

// CREA UN ARCHIVO DE ACCESO ALEATORIO, ESCRIBIENDO 100 REGISTROS VACÍOS EN EL DISCO.

import java.io.*;importjavax.swing.*;

public class CrearArchivoAleatorio { private static final int NUMERO_REGISTROS = 100;// permitir al usuario seleccionar el archivo a abrirprivatevoidcrearArchivo() { // mostrar cuadro de diálogo para que el usuario pueda seleccionar el archivoJFileChooserselectorArchivo = new JFileChooser();selectorArchivo.setFileSelectionMode(JFileChooser.FILES_ONLY );int resultado = selectorArchivo.showSaveDialog( null ); // si el usuario hizo clic en el botón Cancelar del cuadro de diálogo, regresarif ( resultado == JFileChooser.CANCEL_OPTION )

JOSUE JONATHAN PEÑALOZA PIEDRA Página 17

TOPICOS AVANZADOS DE PROGRAMACIÓN

return; // obtener el archivo seleccionado File nombreArchivo = selectorArchivo.getSelectedFile(); // mostrar error si el nombre del archivo es inválidoif ( nombreArchivo == null || nombreArchivo.getName().equals( "" ) )

CREACION DE COMPONENTES (VISUALES Y NO VISUALES) DEFINIDOS POR EL USUARIO.

Se puede establecer muchas clasificaciones para los componentes. Una de ellas es la de visuales o controles, frente a no visuales.Un componente es visual cuando tiene una representación gráfica en tiempo de diseño y ejecución (botones, barras de scroll, cuadros de edición, etc.), y se dice no visual en caso contrario (temporizadores, cuadros de diálogo-no visibles en la fase de diseño, etc). Por lo demás no existen más diferencias entre ellos, excepto, claro está, las derivadas de la visualización del componente. Los componentes no visuales se pueden colocar en los formularios de la misma manera que los controles, aunque en este caso su posición es irrelevante.Para empezar, los componentes visuales podemos dividirlos a su vez en dos tipos:-Componentes interactivos: permiten que el usuario final los manipule, ya sea introduciendo datos, seleccionado elementos, etc. De forma que estos componentes pueden recibir el foco (con SetFocus) así como los eventos propios del teclado y del ratón. Normalmente, el propio sistema operativo es el encargado de dibujar el aspecto del componente, haciendo el componente las llamadas correspondientes para que este aspecto cambie.

-Componente gráficos: el propio componente es el encargado de dibujar en la pantalla lo que crea oportuno, bien a través de las funciones básicas del API de Windows (con el objeto TCanvas) o bien a través de otras librerías gráficas, como OpenGL, DirectX, etc. Estos componentes, no suelen recibir eventos del usuario final, aunque si eventos del propio programador, ya que su cometido no suele ir más allá de mostrar ciertos gráficos o imágenes en la pantalla. Si tuviéramos que crear un componente interactivo desde el principio, sería demasiado complejo, ya que tendríamos que luchar encontrar el propio API del sistema operativo, gestionando sus mensajes, las llamadas las funciones a bajo nivel, etc. Sin embargo, podemos aprovechar la mayoría del trabajo hecho por Borland en la VCL, y crear componentes interactivos a partir de otros ya existentes, aplicado la técnica de herencia.

JOSUE JONATHAN PEÑALOZA PIEDRA Página 18

TOPICOS AVANZADOS DE PROGRAMACIÓN

Dado que un componente es un objeto como otro cualquiera, podremos aplicar en el todas las técnicas de la orientación a objetos: encapsulación, herencia y polimorfismo.La encapsulación ya la hemos utilizado sin apenas darnos cuenta, simplemente definiendo ciertos atributos como privados, para que no puedan ser accedidos desde fuera de la clase, y otros públicos o publicados (pulished) para ser usados por el programador que utilice el componente.

La herencia nos permite reutilizar código, haciendo que una clase dada (que llamaremos clase hija) adquirida a todos los atributos y métodos públicos y protegidos de otra, llamada clase padre. De este método, podemos aprovechar mucho código escrito, simplemente heredando de una clase ya escrita. Por si fuera poco, también es posible que una clase hijo tenga a su vez mas descendencia, adquiriendo estos las características del padre y del "padre del padre", es decir: del abuelo.La técnica de la herencia, aplicada a los componentes, nos permite personalizar cualquier componente, o porque queremos ampliar las posibilidades del componente.

La propia VCL utiliza la herencia continuamente, bien para utilizar código de clases padre, o bien para ofrecernos clases padre de las que nosotros podemos heredar. Muchas "suites de componentes" hacen también esto, proporcionando un componente heredando a partir de cada uno de los básicos, y añadiendo en estas nuevas características.

Para explicar cómo crear un componente interactivo, vamos a hacerlo a través de un ejemplo práctico: supongamos que necesitamos mostrar un árbol que muestre los directorios a partir de una carpeta dada, incluso pongamos que necesitamos mostrar el típico árbol de "MI PC", mostrando todas las unidades y las carpetas de cada una.

Para ello, podríamos escribir un componente desde cero, gestionando todo lo referente a la estructura en árbol, el dibujo en pantalla, la gestión de mensajes,etc. Podríamos utilizar la herencia para utilizar el código ya escrito, concretamente basándose en el componente ATTreeVienw, que es el que nos permite mostrar en un formulario estructuras del tipo árbol. Sin embargo, el TTreeVienw que viene por defecto en el Delphi, es muy genérico, y sirve para mostrar cualquier ripo de árbol. Nuestro caso es mas específico: necesitamos mostrar un árbol, sí, pero más concretamente un árbol de directorios. Llamaremos a nuestra nueva creación TArbolDirectorios.Sólo vamos a fijarnos a partir TComponent:TComponent: este nos resulta familiar, ya que es la clase a partir de la que hemos creado en nuestro conversor de monedas de anteriores números. Los

JOSUE JONATHAN PEÑALOZA PIEDRA Página 19

TOPICOS AVANZADOS DE PROGRAMACIÓN

componentes no-visuales deben heredar directamente de TComponent, ya que este proporciona las características básicas.TControl: se trata de la clase padre para todos los componentes visuales, ya sean gráficos o no.TWinControl: de esta clase descenderán todos los componentes dibujados directamente por Windows. La principal característica de estos objetos (llamados ventanas o Windows) es que están identificados por un número único llamado descriptor o manejador de ventana (en inglés handle).TCustomTreeView: se trata de la clase que permite mostrar un árbol dentro de un formulario de Delphi. La peculiaridad es que esta clase no contiene ningún método ni propiedad en la sección published, por lo que puedes ser manejada desde el entorno de Delphi.TTreeView: esta ya es la clase o componente final, que aparece registrado en la paleta de componentes, y que puede ser configurado en tiempo de diseño. En realidad, todo el trabajo de esta clase se limita a publicar las propiedades y eventos que han sido programados en la clase TCustomTreeVienw.Ahora que ya sabemos quíen va a ser el padre de nuestro componente, tenemos que decir qué propiedades y eventos vamos a proporcionar a nuestros usuarios del componente.CarpetaRaiz: se trata de una cadena que contendrá la carpeta a partir de que se creará el árbol de directorios. Puede ser la carpeta raíz de una unidad de disco(p.e."C:\") para mostrar los directorios de toda la unidad, o bien una carpeta cualquiera, para mostrar las subcarpetas de esta. Un caso se dará cuando esta propiedad contenga el valor "Mi PC", con en el que mostraremos cada una de las unidades disponibles en nuestro sistemas, pudiendo expandir estas unidades para mostrar sus carpetas.CarpetaActual: es el valor de tipo cadena que contiene la ruta de la carpeta seleccionada en el árbol, por ejemplo. Si, por ejemplo, tenemos seleccionada la carpeta de primer nivel "Datos", y el nodo raíz es "C:\Temporal", esta propiedad contendrá el valor "C:\Temporal\Datos". También se puede modificar su valor, seleccionándose en ese caso el modo correspondiente en el árbol (si el valor establecido es correcto).MostarPadre: es un valor booleano (true o false) que nos permite configurar la aparición no del nodo padre. Es decir: si en la propiedad "CarpetaRaiz" hemos introducido el valor "C:\Delphi", en el árbol aparecerá un nodo raíz llamado "Delphi", y colgado de él, todas las demás subcarpetas. Si establecemos esta propiedad a falso, el nodo raíz desaparecerá, mostrándose todas las subcarpetas en un primer nivel, sin colgar de ningún nodo padre.

Una interfaz grafica está construida en base a elementos gráficos básicos, los componentes. Típicos ejemplos de estos componentes son los botones, barras de desplazamientos, etiquetas, listas, cajas de selección o campos de textos. Los componentes permiten al usuario a interactuar con la aplicación y proporcionar información desde el programa al usuario sobre el estado del

JOSUE JONATHAN PEÑALOZA PIEDRA Página 20

TOPICOS AVANZADOS DE PROGRAMACIÓN

programa. En el AWT, todos los componentes de la interfaz de usuario son instancias de la clase componente o uno de sus subtipos.

Los componentes no se encuentran aislados, si no agrupados dentros de contenedores. Los contenedores contienen y organizan la situación de los componentes y como tales pueden ser situados dentro de otros contenedores. También contienen el código necesario para el control de eventos, cambiar la forma del cursor o modificar el icono de la aplicación. En el AWT todos los contenedores son instancias de la clase Container o uno de sus subtipos.

La clase componente es una clase abstracta que representa todo lo que tiene una posición, un tamaño, puede ser pintado en pantalla y puede recibir eventos. No tiene constructores públicos, ni puede ser instanciada. Sin embargo, la clase Component puede ser extendida para proporcionar una nueva característica incorporada a java, conocida como componentes ligeros o Lightweight.

Los objetos derivados de la clase Component que se incluyen en el abstractwindowToolkit son los que aparecen a continuación:

Button LabelCanvas ListCheckbox ScrollbarChoice TextComponentContainer TextAreaPanel TextFieldWindowDialogFrame

Sobre estos componentes se podrán hacer más agrupaciones y quizá la más significativa fuese la que diferencie a los componentes según el tipo de entrada. A si habría componentes con entrada de tipo no-textual como los botones de pulsación (Button), las listas (List), botones de marcación (checkbox), botones de seleccion (Choice), y botones de comprobación (CheckboxGroup); componentes de entrada y salida textual como los campos de texto (TextField), las áreas de texto (TextArea) y las etiquetas (Label); y, otros componentes sin acomodo fijo en ningún lado, en donde se encontrarían componentes como las barras de desplazamiento(Scrollbar), zonas de dibujo (Canvas) e incluso los contenedores (Panel, Window, Dialog y Frame), que también pueden considerarse como componentes.

La clase Button es aquella que produce un componente de tipo boton con un titulo.El constructor mas utilizado es el que permite pasarle como parametrouna

JOSUE JONATHAN PEÑALOZA PIEDRA Página 21

TOPICOS AVANZADOS DE PROGRAMACIÓN

cadena, que será la que aparezca como titulo e identificador del botón en la interfaz de usuario.

Botones de selección Los botones de selección (Choice) permiten el rápido acceso a una lista de elementos, presentándose como titulo en el item que se encuentre seleccionado.La clase choice extiende la clase component e implementa la interfaz ItemSelectable, que es aquella que mantiene un conjunto de items en los que puede haber, o no, alguno seleccionado.Botones de comprobaciónLa clase CheckBox extiende la clase Componet e implementa la interfaz ItemSelectable, que es aquella que contiene un conjunto de ítems entre los que puede haber o no alguna seleccionado.

Los botones de comprobación (Checkbox) se puede agrupar para formar una interfaz de botón de radio (CheckboxGroup),que son agrupaciones de botones de comprobación de exclusión múltiple es decir, en la que siempre hay un único botón activo.

PROGRAMA:importjava.awt.*;importjava.awt.event.*;importjava.util.*;

public class Java1403{public static void main( String args[] ){//Se instancia un objeto Interfaz Hombre-MáquinaIHM ihm = new IHM(); }}

// Clase de la Interfaz gráficaClass IHM { // Constructor de la clasepublic IHM() { // Se creaunobjetoCheckboxGroupCheckboxGroupmiCheckboxGroup = new CheckboxGroup();

//Ahora se crea un objeto Button y se registra un objeto//ActionListenersobreél Button miBoton = new Button( "Aceptar" );miBotton.addActionListener(newMiActionListener ( miCheckboxGroup ) );

JOSUE JONATHAN PEÑALOZA PIEDRA Página 22

TOPICOS AVANZADOS DE PROGRAMACIÓN

// Se crea un objeto Frame para contener los objetos Checkbox y el // objetoButton. Se fija un Flowlayout, se incorporan a él los // objetos, se fija el tamaño y se hace visibleFrame miFrame = new Frame ( " Tutorial de Java, AWT " );miFrame.setLayout( new FlowLayout() );miFrame.add( new Checkbox( "A", true,miCheckboxGroup ) );miFrame.add( new Checkbox( "B", false,miCheckboxGroup ) );miFrame.add( new Checkbox( "C", false,miCheckboxGroup ) );miFrame.add( new Checkbox( "D", false,miCheckboxGroup ) );miFrame.add(miBoton );miFrame.setSize( 250,100 );miFrame.setVisible( true );

//Instanciamos y registramos un receptor para terminar la //ejecución de la aplicación, cuando el usuario cierre la//ventanamiFrame.addWindowListener( new Conclusion() );} }

// Esta clase indica la caja de selección que esta seleccionada // cuando se pulsa el botón de AceptarclassMiActionListener implements ActionListener {CheckboxGroupoCheckBoxGroup;

MiActionListener(CheckboxGroupcheckBGroup ) {oCheckBoxGroup = checkBGroup;}public void actionPerformed( ActionEventevt ) { System .out.println(oCheckBoxGroup.getSelectedCheckbox().getName()+" " + oCheckBoxGroup.getSelectedCheckBox().getLabel () ); }}

//Concluye la aplicación cuando el usuario cierra la ventanaclass Conclusion extends WindowAdapter {public void windowClosing( WindowEventevt ) {System.exit( 0 ); }}

CREACIÓN Y USO DE PAQUETES/LIBRERIAS DEFINIDAS POR EL

USUARIO

JOSUE JONATHAN PEÑALOZA PIEDRA Página 23

TOPICOS AVANZADOS DE PROGRAMACIÓN

Los paquetes son grupos de clases relacionadas; ayudan a organizar su código

y proporcionan otra capa encapsulamiento.

En programación, los paquetes, con frecuencia son útiles para agrupar las

piezas relacionadas de un programa.

Un paquete sirve para dos propósitos: primero, suministra un mecanismo por el

cual piezas relacionadas de un programa pueden ser organizadas como una

unidad. Se debe tener acceso a las clases definidas dentro de un paquete a

través de su nombre de paquete. Así, un paquete proporciona la manera de

nombrar una colección de clases.

Segundo, un paquete participa en los mecanismos de control de acceso en

java. Las clases definidas dentro de un paquete pueden hacerse privadas a ese

paquete y no accesibles por código fuera del paquete. De este modo, el

paquete suministra un medio por el cual las clases pueden ser encapsuladas.

DEFINIR UN PAQUETE:

Todas las clases en Java pertenecen a algún paquete. Como se mencionó

anteriormente, cuando no se especifica la declaración package se usa el

paquete predeterminado (o global). Además, el paquete predeterminado no

tiene nombre, lo que lo hace transparente.

Aunque el paquete predeterminado es válido para programas de prueba cortos,

es inadecuado para aplicaciones reales.

Para crear un paquete, coloque un comando package en la parte superior del

archivo fuente de java.

Las clases declaradas dentro de ese archivo pertenecerán al paquete

especificado. Puesto que un paquete define un espacio de nombre, los

nombres de las clases que coloque dentro del archivo se convierten en parte

de ese espacio del nombre del paquete.

La siguiente es la forma general de la declaración package:

packagepkg;

JOSUE JONATHAN PEÑALOZA PIEDRA Página 24

TOPICOS AVANZADOS DE PROGRAMACIÓN

Aquí, pkg es el nombre del paquete. Por ejemplo, el siguiente enunciado crea

un paquete de nombre Project1.

package Project1;

Java usa el sistema de archivo para manejar los paquetes con cada paquete

almacenado en su propio directorio. Por ejemplo, los archivos .class para las

clases que usted declare sean partes de Project1 debe guardarse en un

directorio llamado Project1.

Puede crear una jerarquía de paquetes. Para hacerlo, simplemente, separe

cada nombre de paquete del inmediatamente anterior, por medio de un punto.

A continuación, la forma general de una declaración de paquete multinivel:

package pack1.pack2.pack3....packN;

Por supuesto, debe crear directorios que soporten la jerarquía del paquete que

crea. Por ejemplo:

paquetex.y.z;

Debe almacenarse en ...../X/Y/Z, donde ... especifica la ruta a los directorios

específicos.

ENCONTRAR PAQUETES Y CLASSPATH:

Como se explicó, los paquetes son reflejados por los directorios. Esto provoca

una pregunta importante: ¿Cómo sabe el sistema en tiempo de ejecución de

java dónde buscar los paquetes que usted creó? La respuesta tiene dos partes.

Primero, por defecto: el sistema de tiempo de ejecución de java busca en el

directorio un curso como su punto de partida. Así, si sus archivos de clase

están en el directorio actual, o en un subdirectorio del directorio actual, ellos se

encontrarán. Segundo, puede especificar una ruta o rutas de directorios

colocando la variable ambiental CLASSPATH.

JOSUE JONATHAN PEÑALOZA PIEDRA Página 25

TOPICOS AVANZADOS DE PROGRAMACIÓN

Por ejemplo considere la siguiente especificación de paquete:

packageMyPack;

Para que un programa encuentre MyPack, una de estas opciones debe ser

cierta: el programa es ejecutado desde un directorio inmediatamente anterior a

MyPack, o CLASSPATH debe crearse para incluir la ruta a MyPack. La primera

alternativa es la mas fácil (y no requiere un cambio a CLASSPATH), pero la

segunda le permite a su programa encontrar MyPack sin importar en cual

directorio esta el programa.

UN EJEMPLO BREVE DE UN PAQUETE:

Teniendo en cuenta la discusión anterior pruebe este ejemplo breve de

paquete. Éste crea una base de datos simple de libro que esta contenido

dentro del paquete BookPack.

//Demostración del uso de un paquete

packageBookPack;

class Book{

private String title;

private String author;

privateintpubDate;

Book (String t, String a, int d){

title= t;

author= a;

pubDate= d;

}

void show( ) {

System.out.println (title);

System.out.println (author);

System.out.println (pubDate);

System.out.println ( );

}

JOSUE JONATHAN PEÑALOZA PIEDRA Página 26

TOPICOS AVANZADOS DE PROGRAMACIÓN

}

classBookDemo {

public static void main ( String args[ ] ){

Book book [ ] = new Book [5];

book[0] = new Book ("java Beginner´s Guide", "Schildt", 2001);

book[1] = new Book ("java 2 programer´s Reference", "Schildt", 2000);

book[2] = new Book ("HTML Programer´s Reference", "Powell and Whitworth",

1998);

book[3] = new Book ("Red Storm Rising", "Clancy", 1986);

book[4] = new Book ("On the Road", "Kerouac", 1955);

for (int i=0; i <book.length; i++) book[ i ].show( );

}

}

Llame este archivo BookDemo.java y colóquelo en un directorio de nombre

BookPack.

Luego, compile el programa. Asegúrese de que el archivo resultante .class esté

también en el directorio BookPack. Luego trate de ejecutar la clase, usando la

siguiente linea de comando:

javaBookPack. BookDemo

Recuerde, necesitará estar en el directorio anterior de BookPack cuando

ejecute este comando o hacer que su variable ambiental CLASSPATH, este

configurada apropiadamente.

Como se dijo, BookDemo y Book ahora son parte del paquete BookPack. Esto

quiere decir que BookDemo no puede ser ejecutado por sí mismo. Es decir,

usted no puede usar esta línea de comando.

javaBookDemo

En cambio, BookDemo debe calificar con su nombre de paquete.

JOSUE JONATHAN PEÑALOZA PIEDRA Página 27

TOPICOS AVANZADOS DE PROGRAMACIÓN

PAQUETES Y ACCESO A MIEMBROS

La visibilidad de un elemento está determinada por su especificación de

accesos, private, public. protected o por defecto, y el paquete en el que éste

resida.De este modo, la visibilidad de un elemento está determinada por su

visibilidad dentro de la clase y su visibilidad dentro del paquete.

Si un miembro de una clase no tiene especificador de acceso explícito,

entonces éste sería visible desde dentro de su paquete pero no por fuera de él.

Por esto debe usar como la especificación de acceso por defecto para los

elementos que quiera mantener como privados en un paquete, pero |público|

dentro de ese paquete.

Los miembros declarados public explícitamente son visibles en todas partes,

incluidas en clases y paquetes diferentes. No hay restricción en su uso o

acceso.

La siguiente tabla resume los variados niveles de acceso a miembros.

Un miembro private es accesible sólo para otro miembro de su clase y no es

afectado por su afiliación a un paquete.

Un miembro especificado como protected es accesible dentro de su paquete y

a todas las subclases. incluidos. subclases en otros paquetes.

Una clase tiene sólo dos posibles niveles de acceso : por defecto y público.

Cuando una clase se declare como prublic, ésta es accesible por cualquier otro

código. Si una clase tiene acceso por defecto, puede tener acceso a ella sólo

por otro código dentro de su mismo paquete. También, una clse que se declare

public debe residir en un archivo del mismo nombre.

JOSUE JONATHAN PEÑALOZA PIEDRA Página 28

TOPICOS AVANZADOS DE PROGRAMACIÓN

IMPORTAR PAQUETES:

Cuando use una clase de otro paquete, puede calificar completamente el

nombre de la clase cuete.on el nombre de su paquete. Sin embargo, tal

aproximación puede fácilmente llegar a ser aburrida y complicada, si las clases

que está calificando son profundamente anidadas en la jerarquía del paquete.

Usando import puede traer uno o más miembros de un paquete a la vista. Esto

le permite usar directamente aquellos miembros, sin hacer explícita las

calificaciones del paquete.

A continuación, la forma general de la declaración import:

importpkg.nombre de clase;

Donde pkg es el nombre del paquete, que puede incluir su ruta (path) completa

y nombre de clase el de la clase importada. Si desea importar todo el

contenido de un paquete, use un asterisco (*) para el nombre de clase. A

continuación, ejemplos de las dos formas:

importMyPack.MyClass

importMyPack.*;

En el primer caso, la clase MyClass es importada de MyPack. En el

segundo,todas las clases en MyPack son importadas. En un archivo fuente de

java, las declaraciones import ocurren en seguida de la declaración package (si

existe) y antes de cualquier definición de clase.

Usted puede usar import para traer el paquete BookPack a la vista, de modo

que la clase Book pueda usarse sin calificación. Para hacer esto, sólo adicione

la declaración import sobre cualquier archivo que use Book.

importBookPack,*;

Por ejemplo, a continuación está la clase UseBook recodificada para usar

import

JOSUE JONATHAN PEÑALOZA PIEDRA Página 29

TOPICOS AVANZADOS DE PROGRAMACIÓN

//muestra la senctenciaimport

packageBookPack;

importBookPack;

//usodel book desdeBookPack

classUseBook {

public static void main ( String args []) {

Book book [] =new Book [5];

book[0] = new Book ("Java Beginners Guide", "Schildt", 2001);

book[1] = new Book ("Java 2 programmer Reference", "Schildt", 2000);

book[2] = new Book ("HTML Programmer Reference", "Pawell and Whitworth",

1998);

book[3] = new Book ("Red Storm Rising ", "Clancy", 1986);

book[4] = new Book ("On the Road", "Kerouac", 1955);

for (int i=0; i <book.length; i++) book[i].show();

}

}

LA LIBRERIA DE CLASE JAVA ESTA CONTENIDA EN PAQUETES:

Esta libreria de clase con frecuencia se refiere a la Interfaz de Programación de

Aplicaciones de java (Java API, ApplicationProgramming Interface). La Java

API se almacena en paquetes. En la parte superior de la jerarquía del paquete

está java.

Descendiendo desde java hay varios subpaquetes, incluidos estos:

java.lang: contiene un gran número de clases de propósito general

java.io: contiene las clases de E/S

java.net: contiene aquellas clases que soportan redes

java.applet: contiene clases para crear applets

JOSUE JONATHAN PEÑALOZA PIEDRA Página 30

TOPICOS AVANZADOS DE PROGRAMACIÓN

java.awt: contiene clases que soportan las herramientas abstractas para

trabajar con ventanas de java

El paquete java.lang es único porque es importado automáticamente dentro de

cada programa java.

JOSUE JONATHAN PEÑALOZA PIEDRA Página 31

TOPICOS AVANZADOS DE PROGRAMACIÓN

BIBLIOGRAFÍA:

http://itslmg.wordpress.com/category/unidad-ii-creacion-de-componentes-y-librerias-

dinamicas/

http://topicos-selectosdeprogramacion-itiz.blogspot.mx/p/creacion-de-componentes.html

http://www.mitecnologico.com/Main/DefinicionCreacionPaquetesLibreria

http://progitca.blogspot.mx/2012/03/instituto-tecnologico-de-cerroazul.html

http://msdn.microsoft.com/es-es/library/9a81d32x(v=vs.80).aspx

http://progitca.blogspot.mx/2012/03/cerro-azul-ver-instituto-tecnologico-de.html

http://progitca.blogspot.mx/2012/03/35-creacion-y-uso-de-paqueteslibrerias.html

JOSUE JONATHAN PEÑALOZA PIEDRA Página 32