domingo, 28 de septiembre de 2008

Funciones de formato en Visual Basic 6.0



Visual Basic posee varias funciones para darle formato a distintos tipos de datos e información. A continuación se ve algunos ejemplos de las principales funciones:

FormatCurrency: Esta función se utiliza para trabajar con números con formato en dinero. Ejemplo:

si tenemos un número 3 y utilizamos la función nos devolvería "$3".

FormatPercent: Esta función es utilizada para trabajar con porcentajes. Ejemplo :
si tendríamos un número 321, nos devolvería: "32,1%" .
FormatDateTime: Esta función trabaja con fechas y horas.
FormatNumber: Formatea expresiones números

Resultado = FormatPercent(321) 'devuelve: "32.100,00%"
Resultado = FormatCurrency(3) 'devuelve: "$3,00"
Resultado = FormatDateTime("6-8-1978") 'La función devolvería: "06/08/1978"

NumDigitsAfterDecimal: Parámetro de tipo opcional. Este indicará cuantos números decimales devolverá la función:

Ejemplo

cadena = FormatCurrency(325, 3) 'Devuelve: "$325,000"

Ejemplo de la función FormatDateTime

Esta función, en el primer parámetro se le debe pasar la fecha u hora a formatear, y el segundo parámetro es el tipo de formato, pueden ser 5 tipos.

vbGeneralDate, vbLongDate, vbShortDate, vbLongTime y vbShortTime.

Este parámetro es de tipo opcional. al colocar la coma dentro de la función , visual basic despliega la lista de constanetas mencionadas, como muestra el gráfico:

Un ejemplo para ver estos formatos utilizando FormatDateTime: Colocar cinco option Button, cada botón de opción mostrará los diferentes formatos en el caption del formulario, es decir en la barra de título.

Código en el formulario:

Private Sub Form_Load()

Option1.Caption = " vbGeneralDate "
Option2.Caption = " vbLongDate "
Option3.Caption = " vbShortDate "
Option4.Caption = " vbLongTime "
Option5.Caption = " vbShortTime "

End Sub

Private Sub Option1_Click()
Me.Caption = FormatDateTime(Now, vbGeneralDate)
End Sub

Private Sub Option2_Click()
Me.Caption = FormatDateTime(Now, vbLongDate)
End Sub

Private Sub Option3_Click()
Me.Caption = FormatDateTime(Now, vbShortDate)
End Sub

Private Sub Option4_Click()
Me.Caption = FormatDateTime(Now, vbLongTime)
End Sub

Private Sub Option5_Click()
Me.Caption = FormatDateTime(Now, vbShortTime)
End Sub

FormatNumber - Ejemplos:

Formatea 0.489698 a 0,49

Dim Numero As Double

Numero = 0.489698
Numero = FormatNumber(Numero, 2, vbFalse)

MsgBox Numero
Formatea 1.958754 a 1,96

Dim Numero As Double

Numero = 1.958754
Numero = FormatNumber(Numero, 2)

MsgBox Numero

Funciones Matemáticas en Visual Basic 6.0



Las principales funciones matemáticas provistas por Visual Basic son:

Abs: Devuelve el valor absoluto de una expresión numérica.
Atn: Devuelve el arco tangente de un número.
Cos: Devuelve el coseno de un ángulo.
Exp: Devuelve el número "e" elevado a una potencia.
Log: Devuelve el logaritmo natural de un número.
Sgn: Devuelve un valor indicando el signo de un número.
Sin: Devuelve el seno de un ángulo.
Sqr: Devuelve la raíz cuadrada de un número.
Tan: Devuelve la tangente de un ángulo.

Funcion para el tratamiento de números (Rnd y Randomize) en Visual Basic 6.0



Para generar números aleatorios, Visual Basic incluye 2 funciones: Rnd y Randomize.

La función Rnd devuelve un número aleatorio, y esta posee un solo parámetro.

Ejemplo :

Rnd (número)

Pero para poder generar dichos números aleatorios, debemos utilizar previamente la función Randomize con la siguiente fórmula:

Dim LimiteInferior As Integer
Dim LimiteSuperior As Integer

LimiteInferior = 20

LimiteSuperior = 40


MsgBox Int((LimiteInferior - LimiteSuperior + 1) * Rnd + LimiteInferior)


En el ejemplo, se generarán números aleatorios comprendidos entre el 20 y el 40.

Funcion para el tratamiento de números (Round) en Visual Basic 6.0



La función Round se utiliza para redondear un número decimal, devolviendo un número entero.

Ejemplo:

Dim Mimumero As Long

Minumero = Round(245.8) '(La función devuelve 246)
Minumero = Round(245.3) '(La función devuelve 245)
Minumero = Round(245.5) '(La función devuelve 245)


Round posee un parámetro opcional por si queremos incluir los dígitos decimales.

Función para el manejo de cadena (Str y Val) en Visual Basic 6.0



La función Val convierte una cadena en un número y la función Str un número en una cadena.

Ejemplos:

cadena = "123456"
cadena = Val(cadena)

'Ahora cadena vale 123456

cadena2 = 123456
cadena2 = Str(cadena2)

'Ahora cadena2 vale "123456"

Tipos de Redes



REDES DE ÁREA LOCAL: las redes de área local (local area networks ) llevan mensajes a velocidades relativamente grande entre computadores conectados a un único medio de comunicaciones : un cable de par trenzado. Un cable coaxial o una fibra óptica. Un segmento es una sección de cable que da servicio y que puede tener varios computadores conectados, el ancho de banda del mismo se reparte entre dichas computadores. Las redes de área local mayores están compuestas por varios segmentos interconectados por conmutadores(switches) o concentradores(hubs. El ancho de banda total del sistema es grande y la latencia pequeña, salvo cuando el tráfico es muy alto.

En los años 70s se han desarrollado varias tecnologías de redes de área local, destacándose Ethernet como tecnología dominante para las redes de área amplia; estando esta carente de garantías necesarias sobre latencia y ancho de banda necesario para la aplicación multimedia. Como consecuencia de esta surge ATM para cubrir estas falencias impidiendo su costo su implementación en redes de área local. Entonces en su lugar se implementan las redes Ethernet de alta velocidad que resuelven estas limitaciones no superando la eficiencia de ATM.

REDES DE ÁREA EXTENSA: estas pueden llevar mensajes entre nodos que están a menudo en diferentes organizaciones y quizás separadas por grandes distancias, pero a una velocidad menor que las redes LAN. El medio de comunicación esta compuesto por un conjunto de círculos de enlazadas mediante computadores dedicados, llamados rotures o encaminadores. Esto gestiona la red de comunicaciones y encaminan mensajes o paquetes hacia su destino. En la mayoría de las redes se produce un retardo en cada punto de la ruta a causa de las operaciones de encaminamiento, por lo que la latencia total de la transmisión de un mensaje depende de la ruta seguida y de la carga de trafico en los distintos segmentos que atraviese. La velocidad de las señales electrónicas en la mayoría de los medios es cercana a la velocidad de la luz, y esto impone un límite inferior a la latencia de las transmisiones para las transmisiones de larga distancia.

REDES DE ÁREA METROPOLITANA: las redes de área metropolitana (metropolitan area networks)se basan en el gran ancho de banda de las cableadas de cobre y fibra óptica recientemente instalados para la transmisión de videos, voz, y otro tipo de datos. Varias han sido las tecnologías utilizadas para implementar el encaminamiento en las redes LAN, desde Ethernet hasta ATM. IEEE ha publicado la especificación 802.6[IEEE 1994], diseñado expresamente para satisfacer las necesidades de las redes WAN. Las conexiones de línea de suscripción digital ,DLS( digital subscribe line) y los MODEM de cable son un ejemplo de esto. DSL utiliza generalmente conmutadores digitales sobre par trenzado a velocidades entre 0.25 y 6.0 Mbps; la utilización de este par trenzado para las conexiones limita la distancia al conmutador a 1.5 kilómetros . una conexión de MODEM por cable utiliza una señalización análoga sobre el cable coaxil de televisión para conseguir velocidades de 1.5 Mbps con un alcance superior que DSL.

REDES INALÁMBRICAS: la conexión de los dispositivos portátiles y de mano necesitan redes de comunicaciones inalámbricas(wireless networks). Algunos de ellos son la IEEE802.11(wave lan) son verdaderas redes LAN inalámbricas (wireless local área networks;WLAN) diseñados para ser utilizados en vez de los LAN . También se encuentran las redes de area personal inalámbricas, incluida la red europea mediante el Sistema Global para Comunicaciones Moviles, GSM( global system for mobile communication). En los Estados Unidos , la mayoría de los teléfonos móviles están actualmente basados en la análoga red de radio celular AMPS, sobre la cual se encuentra la red digital de comunicaciones de Paquetes de Datos Digitales Celular, CDPD( Cellular Digital Packet Data).

Dado el restringido ancho de banda disponible y las otras limitaciones de los conjuntos de protocolos llamados Protocolos de Aplicación Inalámbrica WAP(Wireless Aplication Protocol)


INTERREDES: una Interred es un sistema de comunicación compuesto por varias redes que se han enlazado juntas para proporcionar unas posibilidades de comunicación ocultando las tecnologías y los protocolos y métodos de interconexión de las redes individuales que la componen.

Estas son necesarias para el desarrollo de sistemas distribuidos abiertos extensibles. En ellas se puede integrar una gran variedad de tecnología de redes de área local y amplia, para proporcionar la capacidad de trabajo en red necesaria para cada grupo de usuario. Así, las intercedes aportan gran parte de los beneficios de los sistemas abiertos a las comunicaciones de los sistemas distribuidos.

Las intercedes se construyen a partir de varias redes. Estas están interconectadas por computadoras dedicadas llamadas routers y computadores de propósito general llamadas gateways, y por un subsistema integrado de comunicaciones producidos por una capa de software que soporta el direccionamiento y la transmisión de datos a los computadores a través de la interred. Los resultados pueden contemplarse como una red virtual construida a partir de solapar una capa de interred sobre un medio de comunicación que consiste en varias redes, routers y gateways subyacentes.


COMPORACION DE REDES: en las redes inalámbricas los paquetes se pierden con frecuencia debido a las interferencias externas, en cambio, en el resto de los tipos de redes la fiabilidad de los mecanismos de transmisión es muy alta. En todos los tipos de redes las perdidas de paquetes son como consecuencia de los retardos de procesamiento o por los desbordamientos en los destinos.

Los paquetes pueden entregarse en diferente orden al que fueron transmitidos. También se pueden entregar copias duplicadas de paquetes, tanto la retransmisión del paquete como el original llegan a su destino.

Todos los fallos descriptos son ocultados por TCP y por otros protocolos llamados protocolos fiables, que hacen posible que las aplicaciones supongan que todo lo que es transmitido será recibido por destinatario. Existen, sin embargo, buenas razones para utilizar protocolos menos fiables como UDP en algunos casos de sistemas distribuidos, y en aquellas circunstancias en las que los programas de aplicación puedan tolerar los fallos.

El Origen de las Redes



El origen del protocolo TCP/IP, se debe a un proyecto de investigación, financiado por la DARPA, (Defense Advanced Research Projects Agency, o Agencia de Proyectos Avanzados de Investigación en Defensa), en 1969. La ARPANET, fue una red experimental que se convirtió en funcional a mediados de 1975, tras haber sido admitida su funcionalidad.

En 1983, el nuevo conjunto de protocolos TCP/IP, fue adoptado como estándar y todas las máquinas de la red tuvieron la necesidad de él. Cuando, finalmente, ARPANET creció y se convirtió en Internet, (integrándose luego ella misma a Internet, en 1990), el uso de TCP/IP se propagó incluso a redes ajenas a ella. Ahora, muchas compañías empresariales construyen redes TCP/IP, e Internet ha crecido hasta tal punto, que se la puede considerar como la corriente principal de consumo tecnológico. Actualmente, es difícil leer un periódico sin ver referencias sobre Internet; casi todo el mundo ya puede usarla.

Para apreciar algo palpable sobre lo que hemos discutido anteriormente, supongamos como ejemplo, la Universidad Groucho Marx, (GMU), la cual se encuentra en algún lugar de Federilandia. La mayoría de las divisiones de la universidad tienen su propia red local, mientras que algunas comparten una sola y otras poseen muchas de ellas. Todas se encuentran interconectadas, y están enlazadas a Internet por un simple enlace de alta velocidad.

Supóngase que se tiene una máquina GNU/Linux conectada a una LAN de servidores Unix en la división de Matemáticas, y su nombre es erdos. Para acceder a un servidor que se encuentra en la división de Física, cuyo nombre es, por ejemplo quark, se deberá introducir la siguiente orden: $ rlogin quark.physics
Welcome to the Physics Department at GMU
(ttyq2) login:



Ante este indicador se podrá introducir un nombre de usuario, por ejemplo sebastian, y una contraseña. Luego, si todo es correcto, nos encontraremos frente a un intérprete de órdenes (shell)[1] de quark, en la cual, se podrá escribir como si se estuviera sentado frente a la misma consola del sistema. Tras salir del intérprete, se nos presentará nuevamente el antiguo indicador de órdenes de nuestra máquina. Se ha usado aquí, tan sólo una de las muchas aplicaciones instantáneas e interactivas que TCP/IP proporciona: remote login (registro remoto).

Mientras se trabaja en quark, puede que se desee ejecutar una aplicación de interfaz gráfica, como por ejemplo un procesador de textos, un programa de diseño gráfico, o hasta un navegador de Internet. El sistema de ventanas X es un entorno gráfico para el usuario, totalmente funcional bajo redes y está disponible para muchos tipos de sistemas informáticos. Para hacerle saber a la aplicación que se desea tener interfaz gráfica en la pantalla de nuestro nodo, se necesitará determinar la variable de entorno DISPLAY: $ DISPLAY=erdos.maths:0.0
$ export DISPLAY



Si ahora se ejecuta la aplicación gráfica, ésta se comunicará con el servidor X de nuestro nodo en lugar de hacerlo con el de quark, y como consecuencia las ventanas aparecerán en nuestra la pantalla y no en la de nuestro servidor. Por supuesto, esto requiere que se esté ejecutando X11 en erdos. Lo más importante aquí es que TCP/IP permite el envío y reenvío de paquetes X11 entre quark y erdos, haciendo que el usuario tenga la ilusión de que trabaja en una única máquina. Trabajando de este modo, la red será bastante transparente.

Otra aplicación muy importante en una red TCP/IP es NFS, que significa Network File System (Sistema de Ficheros de Redes). Es otra forma de hacer de la red un sistema transparente, ya que, básicamente, permite al usuario trabajar con los ficheros y directorios de otros nodos como si fueran locales. Por ejemplo, todos los directorios \home de cada usuario pueden alojarse en un servidor central. Desde éste, los demás nodos de la LAN pueden montarlos cuando sea necesario. El resultado es que los usuarios pueden registrarse en el sistema y encontrarse siempre en el mismo directorio \home. De modo similar, es posible compartir grandes cantidades de datos, (como una base de datos, documentación o programas ejecutables), entre muchos nodos, almacenando físicamente una sola copia de dichos datos en un servidor, y permitiendo a los nodos en cuestión acceso a él. Se volverá a hablar de NFS en Capítulo 14.

Por supuesto, estos son sólo ejemplos de lo que se puede hacer en redes TCP/IP. Las posibilidades son casi infinitas, y el lector irá conociéndolas a medida que avance en el libro.

En las siguientes secciones, se estudiará más detenidamente, de qué manera funciona una red TCP/IP. Esta información ayudará a entender cómo y por qué se debe configurar una máquina. Se empezará examinando el hardware, y desde allí con las demás cuestiones.

Iniciando con "Redes de Computadoras"



El concepto de trabajo en redes es probablemente tan antiguo como lo es el de las telecomunicaciones. Imagínese por un momento, gente viviendo en la Edad de Piedra, en donde los individuos usen tambores para transmitirse mensajes. Supóngase que un hombre de las cavernas A quiere invitar a otro hombre B a una partida de choques de piedra. Lamentablemente viven tan distantes, que a B le sería imposible escuchar el tambor de A cuando éste lo llame. ¿Qué puede hacer A para remediar esto? Él podría 1) ir caminando al sitio de B, 2) conseguir un tambor más grande, o 3) pedirle a C, quien vive a mitad de camino que reenvíe el mensaje. La tercera elección es denominada Trabajo en Redes.

Por supuesto, la humanidad ha avanzado un poco desde la la Edad de Piedra; ya no se usan aquellos primitivos artefactos ni tenemos los mismos inconvenientes que nuestros antepasados. En la actualidad, contamos con computadoras que hablan con otras sobre una colección de cables, fibra óptica, microondas, etc. tan grande como para llenar el estadio en el partido de fútbol de los sábados[1] A continuación, se hará referencia a los conceptos y métodos que son utilizados para llevar a cabo todo esto. Sin embargo, dejaremos de lado tanto el tema de los cables, como la parte del fútbol.

En esta guía se describirán tres tipos de redes. Sin embargo, se discutirá más profundamente TCP/IP puesto que es el protocolo más usado, ya sea en Redes Locales (Local Area Networks, LANs), o en Redes de Área Amplia (Wide Area Networks, WANs), como por ejemplo, Internet. También se echará un vistazo a UUCP e IPX. UUCP fue antiguamente el medio general para transportar las noticias y los mensajes de correo, mediante una conexión telefónica. Es menos usado en estos días, pero sigue siendo útil en muchas situaciones. El protocolo IPX es usado más frecuentemente en los entornos Novell NetWare, y se detallará cómo usarlo para conectar una máquina GNU/Linux a una red Novell. Cada uno de estos protocolos de red son usados para transportar datos entre computadoras. Se discutirá aquí cómo son usados y se hará una introducción a sus principios fundamentales.

Se define una red, como una colección de nodos (del inglés hosts), capaces de comunicarse entre sí, a veces confiando en los servicios de un número determinado de máquinas que se encargan de transmitir datos entre quienes que lo demanden. Los nodos son casi siempre computadoras, pero no necesariamente; se puede pensar, sin equivocación, en terminales X o impresoras inteligentes como nodos. Por otro lado, a las pequeñas aglomeraciones de éstos, se las denomina sitios, (sites).

La comunicación, sería imposible sin algún tipo de lenguaje o código. En la jerga de las redes de computadoras, estos lenguajes se denominan conjuntamente como protocolos. No obstante, no se debería pensar aquí en lenguajes ya escritos y definidos, sino más bien en el código de comportamiento altamente formalizado, que se observa en una población cuando se reúnen jefes de estado, por citar un ejemplo. Así, los protocolos usados en las redes de computadoras no son más que reglas muy estrictas de intercambio de mensajes entre dos o más servidores.

domingo, 21 de septiembre de 2008

Usar los Objetos Creados en Java



Una vez que se ha creado un objeto, probablemente querrás hacer algo con él. Supón, por ejemplo, que después de crear un nuevo rectángulo, quieres moverlo a una posición diferente (es decir, el rectángulo es un objeto en un programa de dibujo y el usuario quiere moverlo a otra posición de la página).

La clase Rectangle proporciona dos formas equivalentes de mover el rectángulo.

Manipular directamente las variables x e y del objeto.

Llamar el método move().

La opción 2 se considera "más orientada a objetos" y más segura porque se manipulan las variables del objeto indirectamente a través de una capa protectora de métodos, en vez de manejarlas directamente. Manipular directamente las variables de un objeto se considera propenso a errores; se podría colocar el objeto en un estado de inconsistencia.

Sin embargo, una clase no podría (y no debería) hacer que sus variables estuvieran disponibles para la manipulación directa por otros objetos, si fuera posible que esas manipulaciones situaran el objeto en un estado de inconsistencia. Java proporciona un mecanismo mediante el que las clases pueden restringir o permitir el acceso a sus variables y métodos a otros objetos de otros tipos.

Esta sección explica la llamada a métodos y la manipulación de variables que se han hecho accesibles a otras clases. Para aprender más sobre el control de acceso a miembros puedes ir Controlar el Acceso a Miembros de una Clase.

Las variables x e y de Rectangle son accesibles desde otras clases. Por eso podemos asumir que la manipulación directa de estas variables es segura.

Referenciar Variables de un Objeto

Primero, enfoquemos cómo inspeccionar y modificar la posición del rectángulo mediante la manipulación directa de las variables x e y. La siguiente sección mostrará como mover el rectángulo llamando al método move().

Para acceder a las variables de un objeto, sólo se tiene que añadir el nombre de la variable al del objeto referenciado introduciendo un punto en el medio ('.').

objetoReferenciado.variable

Supón que tienes un rectángulo llamado rect en tu programa. puedes acceder a las variables x e y con rect.x y rect.y, respectivamente.

Ahora que ya tienes un nombre para las variables de rect, puedes utilizar ese nombre en sentencias y expresiones Java como si fueran nombres de variables "normales". Así, para mover el rectángulo a una nueva posición podrías escribir.

rect.x = 15; // cambia la posición x
rect.y = 37; // cambia la posición y


La clase Rectangle tiene otras dos variables--width y height--que son accesibles para objetos fuera de Rectangle. Se puede utilizar la misma notación con ellas: rect.width y rect.height. Entonces se puede calcular el área del rectángulo utilizando esta sentencia.

area = rect.height * rect.width;

Cuando se accede a una variable a través de un objeto, se está refiriendo a las variables de un objeto particular. Si cubo fuera también un rectángulo con una altura y anchura diferentes de rect, esta instrucción.

area = cubo.height * cubo.width;

calcula el área de un rectángulo llamado cubo y dará un resultado diferente que la instrucción anterior (que calculaba el área de un rectángulo llamado rect).

Observa que la primera parte del nombre de una variable de un objeto (el objetoReferenciado en objetoReferenciado.variable) debe ser una referencia a un objeto. Como se puede utilizar un nombre de variable aquí, también se puede utilizar en cualquier expresión que devuelva una referencia a un objeto. Recuerda que el operador new devuelve una referencia a un objeto. Por eso, se puede utilizar el valor devuelto por new para acceder a las variables del nuevo objeto.

height = new Rectangle().height;

Llamar a Métodos de un Objeto

Llamar a un método de un objeto es similar a obtener una variable del objeto. Para llamar a un método del objeto, simplemente se añade al nombre del objeto referenciado el nombre del método, separados por un punto ('.'), y se proporcionan los argumentos del método entre paréntesis. Si el método no necesita argumentos, se utilizan los paréntesis vacios.

objetoReferenciado.nombreMétodo(listaArgumentos);
o
objetoReferenciado.nombreMétodo();


Veamos que significa esto en términos de movimiento del rectángulo. Para mover rect a una nueva posición utilizando el método move() escribe esto.

rect.move(15, 37);

Esta sentencia Java llama al método move() de rect con dos parámetros enteros, 15 y 37. Esta sentencia tiene el efecto de mover el objeto rect igual que se hizo en las sentencias anteriores en las que se moficaban directamente los valores x e y del objeto.

rect.x = 15;
rect.y = 37;


Si se quiere mover un rectángulo diferente, uno llamado cubo, la nueva posición se podría escribir.

cubo.move(244, 47);

Como se ha visto en estos ejemplos, las llamadas a métodos se hacen directamente a un objeto específico; el objeto especificado en la llamada al método es el que responde a la instrucción.

Las llamadas a métodos también se conocen como mensajes.

Como en la vida real, los mensajes se deben dirigir a un receptor particular.

Se pueden obtener distintos resultados dependiendo del receptor de su mensaje.

En el ejemplo anterior, se ha enviado el mensaje move() al objeto llamado rect para que éste mueva su posición.

Cuando se envía el mensaje move() al objeto llamado cubo, el que se mueve es cubo. Son resultados muy distintos.

Una llamada a un método es una expresión (puedes ver Expresiones para más información) y evalúa a algún valor. El valor de una llamada a un método es su valor de retorno, si tiene alguno.

Normalmente se asignará el valor de retorno de un método a una variable o se utilizará la llamada al método dentro del ámbito de otra expresión o sentencia.

El método move() no devuelve ningún valor (está declarado como void). Sin embargo, el método inside() de Rectangle si lo hace. Este método toma dos coordendas x e y, y devuelte true si este punto está dentro del rectángulo.

Se puede utilizar el método inside() para hacer algo especial en algún punto, como decir la posición del ratón cuando está dentro del rectangulo.

if (rect.inside(mouse.x, mouse.y)) {

// ratón dentro del rectángulo

} else {

// ratón fuera del rectángulo

}


Recuerda que una llamada a un método es un mensaje al objeto nombrado. En este caso, el objeto nombrado es rect. Entonces.

rect.inside(mouse.x, mouse.y)

le pregunta a rect si la posición del cursor del ratón se encuentra entre las coordenadas mouse.x y mouse.y. Se podría obtener una respuesta diferente si envía el mismo mensaje a cubo.

Como se explicó anteriormente, el objetoReferenciado en la llamada al método objetoReferenciado.metodo() debe ser una referencia a un objeto. Como se puede utilizar un nombre de variable aquí, también se puede utilizar en cualquier expresión que devuelva una referencia a un objeto. Recuerda que el operador new devuelve una referencia a un objeto. Por eso, se puede utilizar el valor devuelto por new para acceder a las variables del nuevo objeto.

new Rectangle(0, 0, 100, 50).equals(anotherRect)

La expresión new Rectangle(0, 0, 100, 50) evalúa a una referencia a un objeto que se refiere a un objeto Rectangle.

Entonces, como verás, se puede utilizar la notación de punto ('.') para llamar al método equals() del nuevo objeto Rectangle para determinar si el rectangúlo nuevo es igual al especificado en la lista de argumentos de equals().

Creando Objetos en Java



En Java, se crea un objeto mediante la creación de un objeto de una clase o, en otras palabras, ejemplarizando una clase. Aprenderás cómo crear una clase más adelante en Crear Clases.

Hasta entonces, los ejemplos contenidos aquí crean objetos a apartir de clases que ya existen en el entorno Java.

Frecuentemente, se verá la creación de un objeto Java con un sentencia como esta.

Date hoy = new Date();

Esta sentencia crea un objeto Date (Date es una clase del paquete java,util). Esta sentencia realmente realiza tres acciones: declaración, ejemplarización e inicialización.

Date hoy es una declaración de variable que sólo le dice al compilador que el nombre hoy se va a utilizar para referirse a un objeto cuyo tipo es Date, el operador new ejemplariza la clase Date (creando un nuevo objeto Date), y Date() inicializa el objeto.

Declarar un Objeto

Ya que la declaración de un objeto es una parte innecesaria de la creación de un objeto, las declaraciones aparecen frecuentemente en la misma línea que la creación del objeto. Como cualquier otra declaración de variable, las declaraciones de objetos pueden aparecer solitarias como esta.

Date hoy;

De la misma forma, declarar una variable para contener un objeto es exactamente igual que declarar una variable que va a contener un tipo primitivo.

tipo nombre

donde tipo es el tipo de dato del objeto y nombre es el nombre que va a utilizar el objeto. En Java, las clases e interfaces son como tipos de datos. Entonces tipo puede ser el nombre de una clase o de un interface.

Las declaraciones notifican al compilador que se va a utilizar nombre para referirse a una variable cuyo tipo es tipo. Las declaraciones no crean nuevos objetos. Date hoy no crea un objeto Date, sólo crea un nombre de variable para contener un objeto Date. Para ejemplarizar la clase Date, o cualquier otra clase, se utiliza el operador new.

Ejemplarizar una Clase

El operador new ejemplariza una clase mediante la asignación de memoria para el objeto nuevo de ese tipo. new necesita un sólo argumento: una llamada al método constructor. Los métodos constructores son métodos especiales proporcionados por cada clase Java que son reponsables de la inicialización de los nuevos objetos de ese tipo. El operador new crea el objeto, el constructor lo inicializa.

Aquí tienes un ejemplo del uso del operador new para crear un objeto Rectangle (Rectangle es una clase del paquete java.awt).

new Rectangle(0, 0, 100, 200);

En el ejemplo, Rectangle(0, 0, 100, 200) es una llamada al constructor de la clase Rectangle.

El operador new devuelve una referencia al objeto recien creado. Esta referencia puede ser asignada a una variable del tipo apropiado.

Rectangle rect = new Rectangle(0, 0, 100, 200);

(Recuerda que una clase esencialmente define un tipo de dato de referencia. Por eso, Rectangle puede utilizarse como un tipo de dato en los programas Java. El valor de cualquier variable cuyo tipo sea un tipo de referencia, es una referencia (un puntero) al valor real o conjunto de valores representado por la variable.

Inicializar un Objeto

Como mencioné anteriormente, las clases porporcionan métodos constructores para incializar los nuevos objetos de ese tipo. Una clase podría proporcionar múltiples constructores para realizar diferentes tipos de inicialización en los nuevos objetos.

Cuando veas la implementación de una clase, reconocerás los constructores porque tienen el mismo nombre que la clase y no tienen tipo de retorno. Recuerda la creación del objeto Date en el sección inicial. El constructor utilizado no tenía ningún argumento.

Date()

Un constructor que no tiene ningún argumento, como el mostrado arriba, es conocido como constructor por defecto. Al igual que Date, la mayoría de las clases tienen al menos un constructor, el constructor por defecto.

Si una clase tiene varios constructores, todos ellos tienen el mismo nombre pero se deben diferenciar en el número o el tipo de sus argumentos. Cada constructor inicializa el nuevo objeto de una forma diferente. Junto al constructor por defecto, la clase Date proporciona otro constructor que inicializa el nuevo objeto con un nuevo año, mes y día.

Date cumpleaños = new Date(1963, 8, 30);

El compilador puede diferenciar los constructores a través del tipo y del número de sus argumentos.

Sentencias de Control en Java




Sentencias de Control de Flujo en Java

Las sentencias de control de flujo determinan el orden en que se ejecutarán las otras sentencias dentro del programa. El lenguaje Java soporta varias sentencias de control de flujo, incluyendo.

Sentencias palabras clave

toma de decisiones if-else, switch-case
bucles for, while, do-while
excepciones try-catch-finally, throw
miscelaneas break, continue, label:, return

Nota: Aunque goto es una palabra reservada, actualmente el lenguaje Java no la soporta. Podemos utilizar las rupturas etiquetadas en su lugar.

La sentencia if-else
La sentencia if-else de java proporciona a los programas la posibilidad de ejecutar selectivamente otras sentencias basándose en algún criterio.

Por ejemplo, supon que tu programa imprime información de depurado basándose en el valor de una variable booleana llamada DEBUG. Si DEBUG fuera verdadera true, el programa imprimiría la información de depurado, como por ejemplo, el valor de una variable como x. Si DEBUG es false el programa procederá normalmente. Un segmento de código que implemente esto se podría parecer a este.


if (DEBUG)
System.out.println("DEBUG: x = " + x);


Esta es la versión más sencilla de la sentencia if: la sentencia gobernada por if se ejecuta si alguna codición es verdadera. Generalmente, la forma sencilla de if se puede escribir así.

if (expresión)
sentencia


Pero, ¿y si quieres ejecutar un juego diferente de sentencias si la expresión es falsa? Bien, puedes utilizar la sentencia else. Echemos un vistazo a otro ejemplo. Supon que tu programa necesita realizar diferentes acciones dependiendo de que el usuario pulse el botón OK o el botón Cancel en un ventana de alarma. Se podría hacer esto utilizando una sentencia if.

// Respuesta dependiente del botoón que haya pulsado el usuario
// OK o Cancel

if (respuesta == OK) {

// Código para la acción OK

} else {

// código para la acción Cancel

}


Este uso particular de la sentencia else es la forma de capturarlo todo.

Existe otra forma de la sentecia else, else if que ejecuta una sentencia basada en otra expresión. Por ejemplo, supon que has escrito un programa que asigna notas basadas en la puntuación de un examen, un Sobresaliente para una puntuación del 90% o superior, un Notable para el 80% o superior y demás. odrías utilizar una sentencia if con una serie de comparaciones else if y una setencia else para escribir este código.

int puntuacion;
String nota;

if (puntuacion >= 90) {
nota = "Sobresaliente";
} else if (puntuacion >= 80) {
nota = "Notable";
} else if (puntuacion >= 70) {
nota = "Bien";
} else if (puntuacion >= 60) {
nota = "Suficiente";
} else {
nota = "Insuficiente";
}


Una sentencia if puede tener cualquier número de sentencias de acompañamiento else if.

Podrías haber observado que algunos valores de puntuacion pueden satisfacer más una de las expresiones que componen la sentencia if. Por ejemplo, una puntuación de 76 podría evaluarse como true para dos expresiones de esta sentencia:puntuacion >= 70 y puntuacion >= 60.

Sin embargo, en el momento de ejecución, el sistema procesa una sentencia if compuesta como una sóla; una vez que se ha satisfecho una condición (76 >= 70), se ejecuta la sentencia apropiada (nota = "Bien";), y el control sale fuera de la sentencia if sin evaluar las condiciones restantes.

La sentencia switch

La sentencia switch se utiliza para realizar sentencias condicionalmente basadas en alguna expresión. Por ejemplo, supon que tu programa contiene un entero llamado mes cuyo valor indica el mes en alguna fecha. Supon que también quieres mostrar el nombre del mes basándose en su número entero equivalente. Podrías utilizar la sentencia switch de Java para realizar esta tarea.

int mes;

switch (mes) {
case 1: System.out.println("Enero"); break;
case 2: System.out.println("Febrero"); break;
case 3: System.out.println("Marzo"); break;
case 4: System.out.println("Abril"); break;
case 5: System.out.println("May0"); break;
case 6: System.out.println("Junio"); break;
case 7: System.out.println("Julio"); break;
case 8: System.out.println("Agosto"); break;
case 9: System.out.println("Septiembre"); break;
case 10: System.out.println("Octubre"); break;
case 11: System.out.println("Noviembre"); break;
case 12: System.out.println("Diciembre"); break;
}


La sentencia switch evalúa su expresión, en este caso el valor de mes, y ejecuta la sentencia case apropiada.

Decidir cuando utilizar las sentencias if o switch dependen del juicio personal. Puedes decidir cual utilizar basándose en la buena lectura del código o en otros factores.

Cada sentencia case debe ser única y el valor proporcionado a cada sentencia case debe ser del mismo tipo que el tipo de dato devuelto por la expresión proporcionada a la sentencia switch.

Otro punto de interes en la sentencia switch son las sentencias break después de cada case.

La sentencia break hace que el control salga de la sentencia switch y continúe con la siguiente línea.

La sentencia break es necesaria porque las sentencias case se siguen ejecutando hacia abajo. Esto es, sin un break explícito, el flujo de control seguiría secuencialmente a través de las sentencias case siguientes.

En el ejemplo anterior, no se quiere que el flujo vaya de una sentencia case a otra, por eso se han tenido que poner las sentencias break.

Sin embargo, hay ciertos escenario en los que querrás que el control proceda secuencialmente a través de las sentencias case. Como este código que calcula el número de días de un mes de acuerdo con el ritmico refrán que dice "Treinta dias tiene Septiembre...".

int mes;
int numeroDias;

switch (mes) {
case 1.
case 3.
case 5.
case 7.
case 8.
case 10.
case 12.
numeroDias = 31;
break;
case 4.
case 6.
case 9.
case 11.
numeroDias = 30;
break;
case 2.
if ( ((ano % 4 == 0) && !(ano % 100 == 0)) || ano % 400 == 0) )
numeroDias = 29;
else
numeroDias = 28;
break;
}


Finalmente, puede utilizar la sentencia default al final de la sentencia switch para manejar los valores que no se han manejado explícitamente por una de las sentencias case.

int mes;

switch (mes) {
case 1: System.out.println("Enero"); break;
case 2: System.out.println("Febrero"); break;
case 3: System.out.println("Marzo"); break;
case 4: System.out.println("Abril"); break;
case 5: System.out.println("Mayo"); break;
case 6: System.out.println("Junio"); break;
case 7: System.out.println("Julio"); break;
case 8: System.out.println("Agosto"); break;
case 9: System.out.println("Septiembre"); break;
case 10: System.out.println("Octubre"); break;
case 11: System.out.println("Noviembre"); break;
case 12: System.out.println("Diciembre"); break;
default: System.out.println("Ee, no es un mes válido!");
break;
}


Sentencias de Bucle
Generalmente hablando, una sentencia while realiza una acción mientras se cumpla una cierta condición. La sintaxis general de la sentencia while es.

while (expresión)
sentencia


Esto es, mientras la expresión sea verdadera, ejecutará la sentencia.

sentencia puede ser una sóla sentencia o puede ser un bloque de sentencias. Un bloque de sentencias es un juego de sentencias legales de java contenidas dentro de corchetes('{'y '}').

Por ejemplo, supon que además de incrementar contador dentro de un bucle while también quieres imprimir el contador cada vez que se lea un carácter. Podrías escribir esto en su lugar.


while (System.in.read() != -1) {
contador++;
System.out.println("Se ha leido un el carácter = " + contador);
}


Por convención el corchete abierto '{' se coloca al final de la misma línea donde se encuentra la sentencia while y el corchete cerrado '}' empieza una nueva línea indentada a la línea en la que se encuentra el while.

Además de while Java tiene otros dos constructores de bucles que puedes utilizar en tus programas.

el bucle for y el bucle do-while.

Primero el bucle for. Puedes utilizar este bucle cuando conozcas los límites del bucle (su instrucción de inicialización, su criterio de terminación y su instrucción de incremento). Por ejemplo, el bucle for se utiliza frecuentemente para iterar sobre los elementos de un array, o los caracteres de una cadena.

// a es un array de cualquier tipo

int i;
int length = a.length;
for (i = 0; i < length; i++) {

// hace algo en el elemento i del array a

}


Si sabes cuando estas escribiendo el programa que quieres empezar en el inicio del array, parar al final y utilizar cada uno de los elementos. Entonces la sentencia for es una buena elección. La forma general del bucle for puede expresarse asi.

for (inicialización; terminación; incremento)
sentencias


inicialización es la sentencia que inicializa el bucle -- se ejecuta una vez al iniciar el bucle.

terminación es una sentecia que determina cuando se termina el bucle. Esta expresión se evalúa al principio de cada iteracción en el bucle. Cuando la expreión se evalúa a false el bucle se termina.

Finalmente, incremento es una expresión que se invoca en cada interacción del bucle. Cualquiera (o todos) de estos componentes puden ser una sentencia vacía (un punto y coma).

Java proporciona otro bucle, el bucle do-while,que es similar al bucle while que se vió al principio, excepto en que la expresión se avalú al final del bucle.

do {
sentencias
} while (Expresión Booleana);


La sentencia do-while se usa muy poco en la construcción de bucles pero tiene sus usos. Por ejemplo, es conveniente utilizar la sentencia do-while cuando el bucle debe ejecutarse al menos una vez. Por ejemplo, para leer información de un fichero, sabemos que al menos debe leer un carácter.

int c;
InputStream in;
. . .
do {
c = in.read();
. . .
} while (c != -1);


Sentencias de Manejo de Excepciones

Cuando ocurre un error dentro de un método Java, el método puede lanzar una excepción para indicar a su llamador que ha ocurrido un error y que el error está utilizando la sentencia throw.

El método llamador puede utilizar las sentencias try, catch, y finally para capturar y manejar la excepción.

Puedes ver Manejar Errores Utilizando Excepciones para obtener más información sobre el lanzamiento y manejo de excepciones.

Sentencias de Ruptura

Ya has visto la sentencia break en acción dentro de la sentencia switch anteriormente. Como se observó anteriormente, la sentencia break hace que el control del flujo salte a la sentencia siguiente a la actual.

Hay otra forma de break que hace que el flujo de control salte a una sentencia etiquetada.

Se puede etiquetar una sentencia utilizando un identificador legal de Java (la etiqueta) seguido por dos puntos (:) antes de la sentencia.

SaltaAqui: algunaSentenciaJava

Para saltar a la sentencia etiquetada utilice esta forma de la sentencia break.

break SaltaAqui;

Las rupturas etiquetadas son una alternativa a la sentencia goto que no está soportada por el lenguaje Java.

Se puede utiliza la sentencia continue dentro de un bucle para saltar de la sentencia actual hacia el principio del bucle o a una sentencia etiquetada.

Considera esta implementación del método indexOf() de la clase String que utiliza la forma de continue que continúa en una sentencia etiquetada.

public int indexOf(String str, int fromIndex) {
char[] v1 = value;
char[] v2 = str.value;
int max = offset + (count - str.count);
test.
for (int i = offset + ((fromIndex < 0) ? 0 : fromIndex); i <= max ; i++) {
int n = str.count;
int j = i;
int k = str.offset;
while (n-- != 0) {
if (v1[j++] != v2[k++]) {
continue test;
}
}
return i - offset;
}
return -1;
}


Nota: Sólo se puede llamar a la sentencia continue desde dentro de un bucle.

la sentencia return.

Esta sentencia se utiliza para salir del método actual y volver a la sentencia siguiente a la que originó la llamada en el método original.

Existen dos formas de return: una que devuelve un valor y otra que no lo hace.

Para devolver un valor, simplemente se pone el valor (o una expresión que calcule el valor) detrás de la palabra return.

return ++count;

El valor devuelto por return debe corresponder con el tipo del valor de retorno de la declaración del método.

Cuando un método se declara como void utiliza la forma de return que no devuelve ningún valor.

return;

Función para el manejo de cadena (Left, Right y Mid) en Visual Basic 6.0



Estas funciones son utilizadas para extraer partes de una cadena.

La función Left:

tiene 2 parámetros: El primero es la cadena de la cual se extraerán caracteres, y el segundo un número desde el cual comenzar a extraer caracteres desde la parte izquierda.

Ejemplo:

Dim Cadena As String

Cadena = Left("Ya es la madrugada", 9)

'Cadena, que es un string, sería igual a: "Ya es la"



Función Right:

Es igual que la función Left pero comienza a extraer caracteres desde el lado derecho de la cadena.

La función Mid:

Tiene la misma función que las anteriores pero posee tres parámetros. Su sintaxis es:

Mid (cadena, inicio, longitud)

El parámetro cadena es la cadena a extraer caracteres. El parámetro Inicio es donde comenzar y el parámetro longitud, es la cantidad de caracteres a extraer de la cadena de caracteres

Ejemplos:

Dim nombre As String
nombre = Mid("River perdió la copa", 7, 6)

'La variable nombre sería igual a: "perdió"



Este Otro ejemplo usa la función Mid para realizar un simple efecto tipo máquina de escribir.

Colocar en un formulario un CommandButton y el siguiente código fuente en el form.

Option Explicit

Sub Pausa(Segundos As Double)

Dim inicio As Double

' Devuelve la cantidad de segundos desde que inicio windows
inicio = Timer

Do While (Timer - inicio) < Segundos
' pausa
DoEvents
Loop
End Sub

Private Sub Command1_Click()

Dim texto As String

texto = "... Hola mundo --->>> "

Call MostrarTexto(texto, 0.1, Me)

End Sub

Private Sub MostrarTexto(Frase As String, _
Segundos As Double, _
Destino As Object)

Dim LenFrase As Integer
Dim i As Integer
Dim Caracter As String
Dim texto As String

LenFrase = Len(Frase)

Do While i <= LenFrase
Destino.Cls

DoEvents
i = i + 1
' Obtiene el siguiente caracter
Caracter = Mid(Frase, i, 1)
' texto actual
texto = texto & Caracter
Destino.Print texto ' Imprimi e/ dibuja el texto
' pausa o delay
Pausa Segundos
DoEvents
Loop
End Sub

Private Sub Form_Load()
Me.FontSize = 12
Me.Font.Bold = True
Me.ForeColor = vbRed
Command1.Caption = " Efecto de texto con mid "
End Sub

Private Sub Form_Unload(Cancel As Integer)
End
End Sub

Función para el manejo de cadena (InsTr) en Visual Basic 6.0



La función InStr se utiliza para buscar una cadena o parte de una cadena dentro de otra cadena.

Si la función encuentra la cadena a buscar devuelve un número que representa la posición donde encontró la cadena, si no la encuentra devuelve un 0.

Los parámetros que lleva esta función son:

InStr (comienzo, Cadena donde buscar , La Cadena a buscar)
Como esta función devuelve un número debemos almacenarla en una variable de tipo numérica para utilizarla.

Ejemplo:

Dim posicion As Integer

posicion = InStr("Estoy tomando mate", "mate")
En este ejemplo la función encontró la cadena "mate" en la posición 15, o sea que la variable posición pasa a valer 15.


Si observamos bien, la función en el primer parámetro, denominado comienzo, nos pide que le digamos desde que posición comenzar a buscar. En nuestro ejemplo, este parámetro lo obviamos, esto quiere decir que comenzará desde la posición 0 de la cadena a buscar. Pero podríamos especificar una posición en particular, por ejemplo desde la 5 , 10 etc..., según lo que necesitemos hacer.

Otro ejemplo de InsTr :

Este ejemplo, muestra como buscar dentro de un control TextBox, el cual tiene dos opciones, un botón para buscar la primera frase, y otro que sigue buscando a partir de donde esté ubicda la selección.

Para armar el ejemplo colocar un Textbox llamado Text_Buscar que es donde se ingresará la frase y otro TextBox llamado Text1 que tendrá el texto. Este ultimo con la propiedad Multiline en True.

También colocar dos CommandButton: Command1 y Command2

Colocar el siguiente código fuente en el formulario:

Option Explicit

Private m_Pos As Integer


Sub buscar_cadena(ByVal Posicion As Integer)

Dim p As Integer, Frase As String

Frase = txt_Buscar

p = InStr(Posicion, Text1, Frase)

If p > 0 Then
m_Pos = p

With Text1
.SelStart = m_Pos - 1
.SelLength = Len(Frase)
.SetFocus
End With
Else
MsgBox "No se encontró la frase", vbInformation
Text1.SetFocus
End If
End Sub

Private Sub Command1_Click()
'Busca a pratir de la primera pocición
Call buscar_cadena(1)
End Sub

Private Sub Command2_Click()
'Busca a partir del valor que tenga m_Pos

Call buscar_cadena(m_Pos + 1)

End Sub

Private Sub Form_Load()
Command1.Caption = "Buscar"
Command2.Caption = "Buscar siguiente"
Me.Caption = "Ejemplo de InStr "
End Sub


Nota: también hay una función similar a Instr llamada InstrRev , y lo que hace es devolver la posición de la primera concurrencia de una cadena dentro de otra cadena, pero comenzando por el extremo derecho de la misma.

Función para el manejo de cadena (Asc y Chr) en Visual Basic 6.0



La función Asc nos permite obtener el código ASCII de un de terminado caracter.

Ejempos:

Si queremos obtener el código ASCII del caracter "a", que es el número 97 podríamos hacer lo siguiente:

Dim num As Integer

num = Asc("a")


En definitiva la función Asc lleva un solo parámetro de tipo String del cual queremos obtener dicho número.

La Función Chr actúa a la inversa de la función Asc, esto quiere decir, que a partir de un determinado número nos devolverá el caracter ASCII.

Obviamente que en vez de pasarle a la función un parámetro String es decir la letra, debemos pasarle un número ASCII y nos devolverá el carácter asociado.

Ejemplo:

Dim letra As String

letra = Chr(97)


La variable pasa a valer en este caso el caracter "a"

Función para el manejo de cadena (Len) en Visual Basic 6.0



La función Len nos permite conocer la cantidad de caracteres que tiene una determinada cadena. O sea que esta función nos devuelve un número.

Ejemplo:

Len (Aquí va la cadena que queremos averiguar su tamaño)


Como la función Len devuelve un número debemos asignar ese número devuelto en una variable de tipo numérica.

Ejemplo:

Dim TamanoCadena As Long

Dim MiCadena As String

MiCadena = "Me Llamo Eustaquio"

TamanoCadena = Len(MiCadena)


El valor de la variable TamanoCadena pasaría a valer 18.

Hay que tener en cuenta que la función Len también toma en cuenta los espacios vacíos.

Función para el manejo de cadena (Trim, LTrim y RTrim) en Visual Basic 6.0



Estas tres funciones se utilizan para eliminar los espacios vacíos de una cadena.

LTrim elimina los espacios vacíos de la parte izquierda de la cadena, RTrim de la parte derecha y Trim de ambas partes.

Ejemplos:

Tenemos una variable llamada ciudad con el valor " Barcelona". Para eliminar los espacios vacíos de la izquierda haríamos lo siguiente:

ciudad = LTrim(ciudad)


Si en un TextBox quisieramos borrar todos los espacios vacíos de la parte derecha de la cadena:

MiText = RTrim(MiText)


La Función Trim elimina todos los espacios vacíos de ambos lados de la cadena. Ejemplo:

Pais = " Argentina "
País = Trim(Pais)


Ahora el valor de País es igual a: "Argentina".

Función para el manejo de cadena (Lcase y Ucase) en Visual Basic 6.0



Estas dos funciones se utilizan para convertir cadenas de texto a minúscula y mayúscula.
La función Lcase cambia o convierte una cadena de texto a minúscula y un ejemplo de como utilizarla sería así:

Lcase (cadena que queremos convertir a minúsculas)


Ejemplo:

Dim cadena As String

cadena = "HOLA MUNDO"

'Convertimos
cadena = LCase(cadena)

'La variable cadena ahora vale "hola mundo"


La función Ucase funciona de la misma manera que Lcase pero convierte el contenido de una cadena a mayúsculas.

Por ejemplo, si tenemos un control Label1 que contiene un texto que dice: "Porcentaje de sueldos", escribiendo la siguiente línea:

Label1 = UCase(Label1)

El control Label1 pasaría a mostrar o mejor dicho contener en su propiedad caption:"PORCENTAJE DE SUELDOS

viernes, 12 de septiembre de 2008

Modelos de Base de Datos



Modelo de datos jerárquico

Este modelo utiliza árboles para la representación lógica de los datos. Este árbol esta compuesto de unos elementos llamados nodos. El nivel más alto del árbol se denomina raíz. Cada nodo representa un registro con sus correspondientes campos.

La representación gráfica de este modelo se realiza mediante la creación de un árbol invertido, los diferentes niveles quedan unidos mediante relaciones.

En este modelo solo se pueden representar relaciones 1:M, por lo que presenta varios inconvenientes:

No se admiten relaciones N:M
Un segmento hijo no puede tener más de un padre.
No se permiten más de una relación entre dos segmentos.
Para acceder a cualquier segmento es necesario comenzar por el segmento raíz
El árbol se debe de recorrer en el orden designado.

Modelo de datos en red

En este modelo las entidades se representan como nodos y sus relaciones son las líneas que los unen. En esta estructura cualquier componente puede relacionarse con cualquier otro.
A diferencia del modelo jerárquico, en este modelo, un hijo puede tener varios padres.
Los conceptos básicos en el modelo en red son:
El tipo de registro, que representa un nodo.
Elemento, que es un campo de datos.
Agregado de datos, que define un conjunto de datos con nombre.

Este modelo de datos permite representar relaciones N:M

Modelo de datos relacional

Este modelo es el más utilizado actualmente ya que utiliza tablas bidimensionales para la representación lógica de los datos y sus relaciones.

Algunas de sus principales caracteristicas son:

Puede ser entendido y usado por cualquier usuario.
Permite ampliar el esquema conceptual sin modificar las aplicaciones de gestión.
Los usuarios no necesitan saber donde se encuentran los datos físicamente.

El modelo deductivo: los datos se representan como una tabla, pero se manipulan mediante cálculos de predicados.

El modelo de orientación a objetos (ODBMS, object-oriented database management system [sistema de administración de bases de datos orientadas a objetos]): los datos se almacenan como objetos, que son estructuras denominadas clases que muestran los datos que contienen. Los campos son instancias de estas clases.

Un dato Importante : A fines de la década de 1990, las bases de datos relacionales eran las más utilizadas (comprendían aproximadamente tres cuartos de todas las bases de datos).

Comenzando con Base de Datos



Una base de datos es un “almacén” que nos permite guardar grandes cantidades de información de forma organizada para que luego podamos encontrar y utilizar fácilmente.

El término de bases de datos fue escuchado por primera vez en 1963, en un simposio celebrado en California, USA. Una base de datos se puede definir como un conjunto de información relacionada que se encuentra agrupada ó estructurada.

Desde el punto de vista informático, la base de datos es un sistema formado por un conjunto de datos almacenados en discos que permiten el acceso directo a ellos y un conjunto de programas que manipulen ese conjunto de datos.

Cada base de datos se compone de una o más tablas que guarda un conjunto de datos. Cada tabla tiene una o más columnas y filas. Las columnas guardan una parte de la información sobre cada elemento que queramos guardar en la tabla, cada fila de la tabla conforma un registro.

Definición de base de datos

Se define una base de datos como una serie de datos organizados y relacionados entre sí, los cuales son recolectados y explotados por los sistemas de información de una empresa o negocio en particular.

Características

Entre las principales características de los sistemas de base de datos podemos mencionar:

Independencia lógica y física de los datos.
Redundancia mínima.
Acceso concurrente por parte de múltiples usuarios.
Integridad de los datos.
Consultas complejas optimizadas.
Seguridad de acceso y auditoria.
Respaldo y recuperación.
Acceso a través de lenguajes de programación estándar.
Sistema de Gestión de Base de Datos (SGBD)
Los Sistemas de Gestión de Base de Datos (en inglés DataBase Management System) son un tipo de software muy específico, dedicado a servir de interfaz entre la base de datos, el usuario y las aplicaciones que la utilizan. Se compone de un lenguaje de definición de datos, de un lenguaje de manipulación de datos y de un lenguaje de consulta.

Ventajas de las bases de datos

Control sobre la redundancia de datos:
Los sistemas de ficheros almacenan varias copias de los mismos datos en ficheros distintos. Esto hace que se desperdicie espacio de almacenamiento, además de provocar la falta de consistencia de datos.

En los sistemas de bases de datos todos estos ficheros están integrados, por lo que no se almacenan varias copias de los mismos datos. Sin embargo, en una base de datos no se puede eliminar la redundancia completamente, ya que en ocasiones es necesaria para modelar las relaciones entre los datos.

Consistencia de datos:
Eliminando o controlando las redundancias de datos se reduce en gran medida el riesgo de que haya inconsistencias. Si un dato está almacenado una sola vez, cualquier actualización se debe realizar sólo una vez, y está disponible para todos los usuarios inmediatamente. Si un dato está duplicado y el sistema conoce esta redundancia, el propio sistema puede encargarse de garantizar que todas las copias se mantienen consistentes.

Compartición de datos:
En los sistemas de ficheros, los ficheros pertenecen a las personas o a los departamentos que los utilizan. Pero en los sistemas de bases de datos, la base de datos pertenece a la empresa y puede ser compartida por todos los usuarios que estén autorizados.

Mantenimiento de estándares:
Gracias a la integración es más fácil respetar los estándares necesarios, tanto los establecidos a nivel de la empresa como los nacionales e internacionales. Estos estándares pueden establecerse sobre el formato de los datos para facilitar su intercambio, pueden ser estándares de documentación, procedimientos de actualización y también reglas de acceso.

Mejora en la integridad de datos:
La integridad de la base de datos se refiere a la validez y la consistencia de los datos almacenados. Normalmente, la integridad se expresa mediante restricciones o reglas que no se pueden violar. Estas restricciones se pueden aplicar tanto a los datos, como a sus relaciones, y es el SGBD quien se debe encargar de mantenerlas.

Mejora en la seguridad:
La seguridad de la base de datos es la protección de la base de datos frente a usuarios no autorizados. Sin unas buenas medidas de seguridad, la integración de datos en los sistemas de bases de datos hace que éstos sean más vulnerables que en los sistemas de ficheros.

Mejora en la accesibilidad a los datos:
Muchos SGBD proporcionan lenguajes de consultas o generadores de informes que permiten al usuario hacer cualquier tipo de consulta sobre los datos, sin que sea necesario que un programador escriba una aplicación que realice tal tarea.

Mejora en la productividad:
El SGBD proporciona muchas de las funciones estándar que el programador necesita escribir en un sistema de ficheros. A nivel básico, el SGBD proporciona todas las rutinas de manejo de ficheros típicas de los programas de aplicación.

El hecho de disponer de estas funciones permite al programador centrarse mejor en la función específica requerida por los usuarios, sin tener que preocuparse de los detalles de implementación de bajo nivel.

Mejora en el mantenimiento:
En los sistemas de ficheros, las descripciones de los datos se encuentran inmersas en los programas de aplicación que los manejan.

Esto hace que los programas sean dependientes de los datos, de modo que un cambio en su estructura, o un cambio en el modo en que se almacena en disco, requiere cambios importantes en los programas cuyos datos se ven afectados.

Sin embargo, los SGBD separan las descripciones de los datos de las aplicaciones. Esto es lo que se conoce como independencia de datos, gracias a la cual se simplifica el mantenimiento de las aplicaciones que acceden a la base de datos.

Aumento de la concurrencia:
En algunos sistemas de ficheros, si hay varios usuarios que pueden acceder simultáneamente a un mismo fichero, es posible que el acceso interfiera entre ellos de modo que se pierda información o se pierda la integridad. La mayoría de los SGBD gestionan el acceso concurrente a la base de datos y garantizan que no ocurran problemas de este tipo.

Mejora en los servicios de copias de seguridad:
Muchos sistemas de ficheros dejan que sea el usuario quien proporcione las medidas necesarias para proteger los datos ante fallos en el sistema o en las aplicaciones. Los usuarios tienen que hacer copias de seguridad cada día, y si se produce algún fallo, utilizar estas copias para restaurarlos.

En este caso, todo el trabajo realizado sobre los datos desde que se hizo la última copia de seguridad se pierde y se tiene que volver a realizar. Sin embargo, los SGBD actuales funcionan de modo que se minimiza la cantidad de trabajo perdido cuando se produce un fallo.

Desventajas de las bases de datos

Complejidad:
Los SGBD son conjuntos de programas que pueden llegar a ser complejos con una gran funcionalidad. Es preciso comprender muy bien esta funcionalidad para poder realizar un buen uso de ellos.

Coste del equipamiento adicional:
Tanto el SGBD, como la propia base de datos, pueden hacer que sea necesario adquirir más espacio de almacenamiento. Además, para alcanzar las prestaciones deseadas, es posible que sea necesario adquirir una máquina más grande o una máquina que se dedique solamente al SGBD. Todo esto hará que la implantación de un sistema de bases de datos sea más cara.

Vulnerable a los fallos:
El hecho de que todo esté centralizado en el SGBD hace que el sistema sea más vulnerable ante los fallos que puedan producirse. Es por ello que deben tenerse copias de seguridad (Backup).


Tipos de Campos


Cada Sistema de Base de Datos posee tipos de campos que pueden ser similares o diferentes. Entre los más comunes podemos nombrar:

Numérico: entre los diferentes tipos de campos numéricos podemos encontrar enteros “sin decimales” y reales “decimales”.
Booleanos: poseen dos estados: Verdadero “Si” y Falso “No”.
Memos: son campos alfanuméricos de longitud ilimitada. Presentan el inconveniente de no poder ser indexados.
Fechas: almacenan fechas facilitando posteriormente su explotación. Almacenar fechas de esta forma posibilita ordenar los registros por fechas o calcular los días entre una fecha y otra.
Alfanuméricos: contienen cifras y letras. Presentan una longitud limitada (255 caracteres).
Autoincrementables: son campos numéricos enteros que incrementan en una unidad su valor para cada registro incorporado. Su utilidad resulta: Servir de identificador ya que resultan exclusivos de un registro.

Tipos de Base de Datos

Entre los diferentes tipos de base de datos, podemos encontrar los siguientes:

MySql: es una base de datos con licencia GPL basada en un servidor. Se caracteriza por su rapidez. No es recomendable usar para grandes volúmenes de datos.

PostgreSql y Oracle: Son sistemas de base de datos poderosos. Administra muy bien grandes cantidades de datos, y suelen ser utilizadas en intranets y sistemas de gran calibre.
Access: Es una base de datos desarrollada por Microsoft. Esta base de datos, debe ser creada bajo el programa access, el cual crea un archivo .mdb con la estructura ya explicada.

Microsoft SQL Server: es una base de datos más potente que access desarrollada por Microsoft. Se utiliza para manejar grandes volúmenes de informaciones.

Las Funciones en Visual Basic 6.0



Las funciones son casi exactamente iguales que los procedimientos con respecto a la forma en que se los llama y se los crea o declara en el código, en como se le pasa los parámetros etc..

La diferencia fundamental con respecto a los procedimientos o subrutinas es que estos, luego de ejecutar el código que tengan en su interior, al final retornan un valor, y este valor luego lo podemos utilizar para una determinada tarea. En cambio los procedimientos, solo ejecutan el código que contienen y luego mueren por decirlo de alguna manera.

Para declarar o crear una función podríamos escribir lo siguiente:

Private Function Total(Valor1 As Integer, Valor2 As Integer) As Long

Total = Valor1 + Valor2

End Function

Seguramente notaste que declaramos la función llamada Total, y al final de los parámetros dice As Long , esto es por que como dijimos las funciones retornan o devuelven un valor, o sea que en este caso la función es de tipo Long, o mejor dicho devolverá un valor de tipo Long., y luego ese valor devuelto lo podemos utilizar en otra parte del programa.

Las Funciones pueden retornar casi cualquier tipo de datos, como números, cadenas, fechas, arreglos y vectores

Para llamar a la función anterior podríamos hacerlo de la siguiente manera:

Label1.caption = Total 502, 1478


En este caso el control Label1 llamaría a la función Total , la función realizaría la suma de los valores pasados como parámetros y por último el valor final de la suma se lo asignaría al control label1.

Pasar parámetros por valor (ByVal) y por referencia (ByRef ) en Visual Basic 6.0



los parámetros en las funciones y procedimientos, se pueden enviar de dos maneras: por Valor y por Referencia.

Si están declarados como ByVal, los mismos serán por valor, si se declaran como ByRef serán por referencia.

La diferencia entre uno y otro método de paso de parámetros, es que en ByVal se envía una copia de la variable, y de esta manera si se efectúa un cambio en el procedimiento, solo tendrá efecto dentro del procedimiento o función, una ves que termine y finalice el mismo, la variable original pasará a valer el dato que tenía, es decir no se modifica

En los parámetros enviados por Referencia, lo que se hace es enviar un puntero de la variable original. Entonces, si en la función o procedimiento se cambia el valor de la variable, el cambio seguirá manteniéndose una ves que finalice la ejecución del procedimiento o función.

Ejemplo de envío de parámetros por Valor ( ByVal )


Código de ejemplo

Private Sub Command1_Click()

Dim Un_Valor As Long

Un_Valor = 100


'Se envía la variable por Valor ( ByVal )

Call Sumar(Un_Valor)

'Muestra el valor que es 100, ( no se modificó en la función Sumar )
MsgBox Un_Valor


End Sub

Sub Sumar(ByVal Valor As Long)
'Modifica la variable
Valor = Valor + 100

End Sub


En el ejemplo anterior hay una Sub llamada Sumar que recibe como parámetro una variable enviada por valor con ByVal ( es decir es una copia de la variable original ). al presionar el Commmand1.

Al entrar en la Sub Sumar, el dato se modifica ( Valor = Valor + 100). Cuando finaliza el procedimiento Sumar y retorna a la línea siguiente de la llamada a la Sub sumar, muestra mediante un MsgBox el valor de la misma, en este caso es 100, y NO 200 que es el cambio que tuvo dentro del procedimiento Sumar ( Valor = Valor + 100 ).

Con esto queda visto que en realidad al enviarla como ByVal, se envía una copia de la variable original y cualquier cambio que se produzca, será solo en el ámbito del procedimiento o función


Ejemplo de envío de parámetros por Referencia ( ByRef )

Este ejemplo es igual que el anterior, pero en la Sub sumar , la variable Valor se declara con ByRef ( por Referencia )

Código

Private Sub Command1_Click()

Dim Un_Valor As Long

Un_Valor = 100


'Se envía la variable por Referencia ( ByRef ) con el valor 100

Call Sumar(Un_Valor)

'Muestra el valor que ahora es 200, ( ya que se modificó en la Sub Sumar)
MsgBox Un_Valor


End Sub

Sub Sumar(ByRef Valor As Long)
'Modifica la variable
Valor = Valor + 100

End Sub


Al probar el código, ahora el Msgox al mostrar el valor de la variable, es de 200, y NO de 100 como en el ejemplo de ByVal.

Esto demuestra que al enviar la variable como referencia, si la misma se modifica dentro del procedimiento o función, se está modificando la variable REAL, es decir cualquier cambio que se le haga a la misma, se mantendrá, ya que se está modificando la variable Real ( no es una copia )

Nota Importante: cuando no se indica a un parámetro de una función o Rutina ni ByVal, ni ByRef, se asume que la misma se está enviando como referencia (ByRef).

Es decir lo siguiente recibe el parámetro como Referencia

Sub Sumar(Valor As Long)
.. que es lo mismo a esto:

Sub Sumar(ByRef Valor As Long)

Función isMissing en Visual Basic 6.0



Esta función se utiliza cuando utilizamos parámetros opcionales en una función o procedimiento, y nosotros, dentro del mismo queremos saber y averiguar si se han enviado los parámetros opcionales

El uso de IsMissing muy simple. Esta función retorna el valor True si NO se ha enviado el parámetro que queremos comprobar, y devuelve False si el parámetro ha sido enviado:

por ejemplo , colocar dos CommandButton

Private Sub Mostrar_Dato(Optional Nombre As Variant)

' Si IsMissing devuelve Verdadero, es por que no se envíó
If IsMissing(Nombre) = True Then
MsgBox " NO Se ha enviado el parámetro NOMBRE ", vbInformation
Else
MsgBox " Se ha enviado el parámetro NOMBRE ", vbInformation
End If


End Sub

'Acá No se envía el parámetro
Private Sub Command1_Click()
Mostrar_Dato
End Sub

'Acá Si se envía el parámetro

Private Sub Command2_Click()
Mostrar_Dato "María"
End Sub

Pasar Parámetros a los procedimientos en Visual Basic 6.0



Se utilizan los parámetros en los procedimientos para que el procedimiento no ejecute siempre las mismas líneas de código y pueda variar, teniendo la posibilidad de hacerlo mas dinámicamente. En ciertas ocaciones no es necesario enviar parámetros, pero en otras es prácticamente fundamental. Los parámetros son datos, casi de cualquier tipo, que se pasan seguido del nombre del procedimiento, y si es mas de uno deben ir separados por comas (,). Ejemplo:

DatosPersonales "Luciano", 25, "La plata"

En este ejemplo pasamos tres parámetros: El primero es un nombre y es un dato de tipo String y por ende debe ir entre comillas. El segundo es un número y el tercero también un string. , o sea una cadena de caracteres

Pero la cosa no queda acá. Si nosotros vamos a pasar parámetros a un procedimiento, cuando creamos el procedimiento debemos establecer que tipo de parámetros va a recibir el mismo. Ejemplo:

Private Sub DatosPersonales(nombre As String, edad As Integer, ciudad As String)

Label1 = nombre
Label2 = edad
Label3 = ciudad

End Sub


siguiendo, el ejemplo anterior creamos un procedimiento con tres parámetros. Cada parámetro se declara como se hace con las variables, o sea que debemos darles un nombre a la variable y definir el tipo de dato ( sin utilizar la palabra Dim ) que recibirá cuando las llamemos.

Ahora podríamos por ejemplo, en el evento click de un Command1, llamar al procedimiento y pasarle los parámetros.

Coloca un Command1 , 3 controles Label, copia en la ventana de código el procedimiento anterior llamado DatosPersonales, y ahora pega el siguiente código

Private sub command1_click()

DatosPersonales "Luciano", 25, "La plata"

End sub


Al presionar el botón se llamará al procedimiento que habíamos creado anteriormente, y le pasará los valores de los parámetros en el orden en que estén establecidos declarados en el procedimiento. Esto quiere decir que el primer parámetro con el valor "Luciano" se almacenará o asignará a la variable nombre , el valor 25 se le asignará a la variable edad y el último valor a la variable ciudad.

Después que las variables ya cargaron el valor las podemos utilizar dentro del procedimiento, como en el ejemplo anterior que le asignamos a un control Label1 el contenido de la variable nombre, al Label2 el contenido de edad y al Label3 el contenido de la variable ciudad.

Es muy importante respetar el orden en que pasamos los parámetros en un procedimiento, por que por ejemplo en el caso anterior si hubiésemos pasado los parámetros de esta forma:

DatosPersonales 25, "Luciano", "La plata"

el segundo parámetro "Luciano" se almacenaría en la variable Edad que es de tipo Integer y se produciría un error en tiempo de ejecución por no coincidir los tipos de datos, ya que la variable espera un valor numérico de tipo Integer y nosotros le estamos pasando una cadena de caracteres, un dato de tipo String

Otra cosa importante es que cuando creamos, por ejemplo un procedimiento que va a recibir 2 parámetros, cuando lo llamemos, no podemos enviarle solo 1 parámetro, debemos obligatoriamente pasarle los 2 parámetros que hubiésemos declarado en el mismo. Un ejemplo que daría un error en tiempo de ejecución por no pasar adecuadamente los parámetros sería:

Private Sub sumar(a As Integer, b As Integer)

Label1 = a + b

End Sub


hasta aquí creamos un procedimiento llamado sumar que recibirá 2 parámetros de tipo Integer, si nosotros llamamos al procedimiento y le pasamos un solo valor, por ejemplo:

Call sumar ( 456 )

Esto daría un error de compilación por que el procedimiento espera recibir 2 parámetros ..y nosotros le estamos pasando o enviando solo uno de ellos.

Precisamente el cartel de error que te mostraría visual basic sería el siguiente:

Nota: hay una sentencia llamada Optional que SI permite pasar parámetros de forma opcional, por ejemplo:

Private Sub Con_Parametro_Opcional(Nombre As String, _
Optional Email As String)
MsgBox Nombre

MsgBox Email

End Sub


Ahora si llamas a la rutina anterior, y omites el parámetro Email, esta no dará error, por ejemplo:

Call Con_Parametro_Opcional("Maria")

Nota: Los parámetros opcionales, si o si deben estar declarados al final de la lista de parámetros, por ejemplo esto no se puede hacer:

Private sub una_Rutina ( Optional Email As String, Nombre as String )

Subrutinas y Procedimientos propios en Visual Basic 6.0



También podemos crear nuestros propios Procedimientos y Subrutinas de código para ejecutar una determinada tarea.

Para crear un procedimiento de código se debe escribir la palabra Private sub o Public sub (depende el alcance), seguida del nombre del procedimiento (un nombre que queramos) y los parámetros, si es que le enviaremos parámetros (los parámetros son opcionales). Además el procedimiento debe ser escrito en un lugar vacío de la ventana de código, es decir nno se puede crear un procedimiento dentro de otro

Un ejemplo para crear un procedimiento:

Private Sub ProcedimientoBorrar()

label1 = ""
label2 = ""
label3 = ""

End Sub


En este ejemplo creamos un procedimiento muy simple que tendrá la función específica de borrar el contenido de 3 controles label.

¿ Pero ahora te preguntarás como hago para que se ejecute el procedimiento que he creado ?.

Muy fácil. Solo debemos escribir el nombre del procedimiento en el lugar donde queremos que se ejecute. Por ejemplo supongamos que tenemos un formulario con 3 controles Label (Label1, Label2 y Label3), También un Commandbutton llamado Command1 y en la ventana de código hemos escrito el procedimiento del ejemplo anterior. Si nosotros queremos llamar al procedimiento, que borrará el contenido de los label cuando hagamos click en el Command1 lo haríamos así:



Private Sub command1_click()

ProcedimientoBorrar

End Sub



Al presionar el Command1 visual basic detectaría el nombre ProcedimientoBorrar, y automáticamente saltaría al lugar donde creamos el procedimiento y ejecutaría las líneas de código que haya en ese procedimiento.

También podemos llamar a un procedimiento utilizando la palabra Call, que quiere decir llamar, seguida del nombre del procedimiento, pero en este caso si utilizamos call y nuestro procedimiento contiene parámetros, debemos pasarlos entre paréntesis ( los parámetros de procedimientos y funciones se explican a continuación)

una vez que se ha terminado de ejecutar las instrucciones que estén dentro del bloque del procedimiento, volvería a la línea siguiente de donde fue llamado el mismo, y ejecutaría todas las líneas restantes de código. En este caso no ejecutaría nada mas por que no hemos puesto ninguna otra instrucción debajo de ProcedimientoBorrar.

La principal ventaja de crear procedimientos de código es que evita tener que escribir varias veces las mismas instrucciones en un programa, el código se hace mucho mas funcional y entendible, se pueden dividir un problema (una rutina), en varios procedimientos y probarlos independientemente, y además la posibilidad de enviar parámetros a los procedimientos.

lunes, 8 de septiembre de 2008

Chevrolet Camaro 2010





Dejando a un lado solo un poquito la programacion, Solo para fortalecer las pupilas y dejando en claro que solo las pupilas por que esta nueva versión de este cochesito lo tendremos hasta el 2010, les presento el Camaro 2010. La producción de la nueva generación de este deportivo americano comenzará a finales del presente año, mientras que su comercialización en Estados Unidos iniciará a principios del 2009, y es probable que poco tiempo después arribe también a las agencias mexicanas de la marca.

En un principio estará disponible en carrocería coupé y en tres versiones distintas de equipamientos: LS, LT y la más rabiosa y potente representada por el Camaro SS.

Como se puede apreciar en las fotos, el estilo de este nuevo Muscle Car se mantiene fiel a las poderosas y seductoras formas del prototipo que develó General Motors en el Salón del Automóvil de Detroit del 2006, una moderna interpretación del modelo SS de 1969.

Sus afiladas y musculosas formas, en adición a nuevos elementos de estilo vanguardista y de fuerte contraste, como por ejemplo su agresiva parrilla, los atractivos faros, las cortas y musculosas salpicaderas; así como el cofre y la defensa en forma de la punta de una flecha, entre otros, le imprimen una belleza indómita que despierta admiración y respeto a su paso.

aqui les dejo el enlace de la fuente principal: VisionAutomotriz