Manual Gambas by GAMBAS-ES

295

Transcript of Manual Gambas by GAMBAS-ES

Comunidad WWW.GAMBAS-ES.ORGGAMBASGambas Almost Means BasicComunidad WWW.GAMBAS-ES.ORGINFORMACINTienes en tus manos el libro COMPLETO de GAMBAS programacin visual con Software Libre escrito por Daniel Campos y Jos Luis Redrejo bajo licencia libre.Al libro electrnico original le faltan las pginas 34, 35, 58, 59, 104, 105, 166, 167, 190, 191, 216, 260 y 261.Hemos escaneado e insertado estas pginas faltantes en este nuevo libro electrnico, creando as el libro electrnico completo que todo gambero debera leer.Hemos modificado el libro original, aadido las pginas faltantes, unificado todos los captulos en un nico fichero y lo volvemos a hacer pblico conservando la misma licencia libre.Comunidad WWW.GAMBAS-ES.ORG 06/01/2010Autores:DANIEL CAMPOSJOSE LUIS REDREjOResponsable editorial:SORAYA MUl'JOZResponsable de Marketing y Comunicacin:ALVARO GARClAEdicin:MIRlAM MONTERODiseo de portada:PICTOGRAMAMaquetacin:ANGEL ESTRADAISBN: 978-84-934371-2-3DepsitoLegal:Edita:CEDlT UN EDlTORIAL,S.L., 2005Avda. Portugal, 85- local28011Madrid(Espaa)Tel.: 91577 03 55Fax:: 91577 [email protected] permite la copia y distribucin de la totalidad o parle de esta obra sinnimo dc lucro. Toda copiatOlal Oparcial deber citar expresamente el nombre del autor, nombre de la editorial e incluir estamisma licencia,aadiendo. si es copia literal. la mencin "copia literal':Se autoriza la modificacin ytraduccin de la obra sin nimo de lucro siempre que se haga conslar en la obraresultante de la modificacin el nombre de la obra originaria, el autor de la obra originaria yel nombre de laeditorial.La obra resullante tambin ser libremente reproducida. distribuida, colllunicada al pblico ytrans-formada entrminos similares a los expresados en esta licencia.Impreso enEspaa (Printed in Spain)-Este libro ha sido realizado con Soft"''an- Ubre, concretamente con: OpenOffice.org, Evolulion. Mozilla, GIMP.PRLOGOLa escena se desarrolla en algn lugar en el campo. en verano...- Abuelo. no te duermas! o has acabado de contarme la historia del ordenador...~ Eh? .. ah... s... bueno, bueno...El abuelo bostez y pens en lo que iba a decir.Ya haba anochecido yslo se oia elcanto de los griUos y elrechinar de la butaca."Cuando mi hermano compr su primer ordenador personal, estaba compuesto deun lector de cintas. de algunosKB de memoria -no recuerdo exactamente cuntos-y deunteclado mecnico, cosa poco frecuente en aquella poca. Pero, sobre todo,dispona de un lenguaje BA5IC completo y de unmanual que intentaba ensear laprogramacin paso a paso.Algunos afIas ms tarde fui yo el que me compr un ordenador. Los modelos eranms potentes, pero volv a encontrar el lenguaje BASIC y la posibilidad de sacar elmximo rendimiento.En aquella poca, las revistas hablaban de programacin, la gente programaba e inter-cambiaba programas. Algunos copiabanprogramas queno haban creado y se lesllamaba piratas... No, no, todos no tenanun parche negro enun ojo y un garfio enlugar de una mano.Prloooo a.rorT'ocit"''l VISJOI r')n5('"1.&. ~ r e 1 ibreDespus lleg la poca del IBM pe y poco a poco las cosas empezaron a cambiar.Al principio era una enorme caja gris, fea y ruidosa. Pero aument en potencia ymientras ms potencia adquira. menos posibilidad haba de sacarle elmximorendimiento.Gracias a unpuado de futurosmillonarios tenamos pantallas ms grandes, mscolores, ms sonido, ms memoria. ms capacidad de almacenamiento. Pero, al mismotiempo, se chapuceaban los sistemas operativos, se despreciaban los principios ele-mentales de seguridad) se frenabanlas aplicaciones, se bloqueabanlos formatos dedatos, se ocultaba y se menta sobre el funcionamjentointerno del conjunto.El usuario se converta en un consumidor como cualquier otro. Campai'ias de publi-cidad gigantescas le conducan a comprar una especie de caja negra de la que segui-damente baba que controlar al mximo la utilizacin. A pesar de todo. la gente con-tinuaba intercanlbiando y los piratas pirateando.En cuanto a los que realmente eran capaces de sacar el m:x;mo rendimiento a losordenadores, tenan que comprarlos y despus encerrarlos tras las puertas de uncampus o de una clusula de no divulgacin. Si no hacan esto. tenan que dejar deprogramar.Afortunadamente, las cosas no sucedieron exactamente como estaba previsto y gra-cias al nacimiento de Internet, y a la mezcla de talentos de numerosos programado-res, a menudo voluntarios. idealistas y pragmticos al mismo tiempo. se impuso unmovimjento de liberacin y naci, entre otros, el sistema operativo GNU/Linux.Pero esto es otra historia, te la contar maana.....La idea de desarrollar Gambas sobre Linux en casa vino principaJmente como reac-cin a la obligacin de utilizar Visual Basic sobre Windows en el trabajo.Cualquier usuario conunpoco de idea, cualquier empresa. cualquier administra-cin, necesitan sacar el mayor rendimiento posible a su ordenador, es decir, hacer del lo que quieran hacer sin tener las competencias necesarias requeridas por los len-guajes de programacin, ni el tiempo para adquirirlas.Con un lenguaje incoherente, incompleto y repleto de fallos, Visual Basic ha res-pondido, a pesar de todo, a estas necesidades. Pero sus creadores, encerrados en sutorre de marfil, lo han ido poco a poco abandonando. Haba quizs desprecio haciaesos usuarios que tenan la pretensin de sacar, como a ellos les pareciera, el mxi-mo rendimiento de su herramienta de trabajo?A pesar de que forma parte de la gran familia BASIC y que la interfaz de los progra-mas se dibuja con el ratn, Gambas no tiene ningn otro punto en comn con VisualBasic y es totalmente incompatible con l. Sin embargo, mi prioridad es que puedasatisfacer la misma necesidad: conseguir de la manera ms simple posible sacar elmximorendimientodetodaslasfuncionesdelsistemaoperativosubyacente,GNU/Linux en este caso preciso.Gambas se inspira, sobre todo, en Java: se trata de un lenguaje orientado a objetos,procedural e interpretado. Pero suintrprete es mucho ms rudimentario: no haycompilacin just-itl-time, no hay garbage collector. Sin embargo, he cuidado muchosu simplicidad, su coherencia, su fiabilidad y sus facultades de internacionalizacin.Gambas es extensible. Es posible escribir componentes que aaden al lenguaje cla-ses suplementarias. Estos componentes ofrecen, en general, el acceso a libreras espe-cficas: QT, GTK+, SDL, OpenGL, y as sucesivamente...Gambas ofrece un entorno de desarrollo integrado, moderno, que est, l mismo,escrito en Gambas. Es se principalmente el que me permite probar el lenguaje :-).Adems, es totalmente posible prescindir de l.Finalmente, y nunca insistir lo suficiente, Gambas no es un lenguaje creado porprogramadores profesionales para programadores no profesionales. Yo soy su pri-mer usuario yotra de las razones que me ha llevado a crearlo es que todava no deseoaprender en serio Perlo Python :-)Programacin visual conSoftwareLibreLa primera versin estable de Gambas sali el 1 de enero de 2005, pero las cosas sepondrnrealmente interesantes con la segunda versin. En el momento enelqueescribo estas lneas, la versin de desarroUo ofrece laposibilidad de escribir compo-nentes directamente en Gambas, sin necesidad de dominar CO C++. Ms tarde, estaposibilidad permitir al entorno de desarroUo disear algo ms que formularios gr-ficos: tablas, hojas HTML, etc.Es difcil prever demaneraprecisa cundo saldr esta segunda versin, e incluso,ms en general, cmo evolucionar Gambas enel futuro. El trabajo que quedaporhacer es todava enorme y las cosas dependenmucho de los usuarios.En cualquier caso, espero que tendris tanto gusto en utilizarlo como yo lohe teni-do en crearlo y que participaris en su evolucin. Y si, como para otros, Gambas esel factor que os lleva a utilizar por fineJ Sofhvare Libre, espero que sentiris comoyo el respiro que produce esta libertad.Martes. 16 de agosto de 2005.- BENOiT.NDiceCAPiTULO"OU es GAMBAS? 17IJ IJ e o [] 1. I El lenguaje BASre: su historia ................... 18 [JlJ [] e a 1. 2 Un entorno libre . . . . . . ...... .21IIIEl [] e IJ 1. 3 Elementos de Gambas . . . . . . . . . . . . . . . . . 23I!II!l1IJ []IJ l. 4 Cmo obtenerlo . 24moIJD o l. 5 Compilacin ydependencias . . . . . . . 261:111 ti o1:1 l. 6 FamiliarizarsEconellOE . 27o o oo o El primer EJemplo. . . . . . . . . . . . . . . . . . . . 29o ooo o Mejor conun ejemplo grafico . . . .......... 32aooao Unpoco demagia . .......... 35OIJ IJ o[J 1. 7 Sistemade componentes . 36CAPiTULO2,PROGRAMACiNBSICA 41o liI oIJIJ 2.I Organizadnde un proyectode Gambas 42o o o oo Declaracin de variablES. . . . . . . . . . . . . . . . 42a a a ao SubrutInas yfuncIones. . . . . . . . . . . . . . . . . 45fndicePrOQftlmocin viwol ton Software Lbre2.2Tipos de datos ................................ 49ConY8'SlOn dE tipos ............................... 50MatricES 522. 3 OperacionEsmatematicas ....................... 54OpEradonEs logIcas 562. 4 Manejo de cadenas .............................. 562.5Control de flujo ................................. 60lF_TtiEN.... ElSE............................... 60SelEct ........................................... 62FOR .............................................. 63~ Y REPEAT................................. 640EpI.rad0n En El DE dE Gambas 662. 6 Entrada Y salidade ficheros ................... 6S2. 7 Control deEM"OI"ES ................. 722. 8 ~ CM k:i ItarJa aobjetoscon GaJT1bas 732. 9 PropiedadES. Mtodos y Eventos 79CAPiTuLO 3: LA INTERFAZ GRFICA 81 3.I Concepto 81PartIEndo de laCOI'lSCMa .... 848 ti.tuI no dE dEsatToIIo SS 3. 2 Manejo baslco de los controles _......... 87Posidon Y tarnai'Io _ 87Vlsiblldad 89r o [ Textos l'EIadonados ............................. 89o o o o o Colores ......................................... 90ODDDCl Ratn 92DOOOD TEcJado 95 3. 3 Galera de controlES 96o o o o ControlEs baslcos _ 96DDDD'00onDOOtros controle; bsicosmiscelneos .............. 99Listasde datos 100Otros controlEsavanzados 1013.4Dilogos ......................................... 101o o(J o o LaciasE Message ................................. 101o[J o o o la clase Dialog.................................. 104o o o o o Oilogos pErsonalizados .......................... 1063.5Mens ............................................ 1113.6Alineacin de loscontrolEs 114o o o o o Propiedades de la alinEacin 114o o o o o Cont/'Oles con allneaclon predefinida 117o o o o o Diseo de una aplicacin que aprovechao o o o o este recurso 1173.7Introduccinal dibujo de primitivas 120CAPTULO 4: GESTiN DE PROCESOS 125 4. I Laayudaofrecida por otros programas 1254.2GestinpotentE dE procesos 1264.3EXEC 127o o o o o Palabra claveWArT 128o o o o o El descriptor del procESO ......................... 130OOOot: Redire:cioncon ro 133o o o[1 o Matar un proceso ................................. 134o o o o o RedJreccinde la salida estandarde errol"Es ........................................ 136o o o [O RedireccindE: la salida estndar .................. 139[) 1O oO Evento Kill()yla propiedadValue 142[J O o O a Redireccln de la entrada estndar.el uso de C1.05E 146o o o o o Notas finalessobl"Eel objeto Process 148 4.4SHELL 148[ndiceDOCD D'11CAPITuLO 5: GESTiN DE BASESDE DATOS 1515. 1Slstanas debaSES de datos 151 5.2Bases de datosyGambas..................... 153 S. 3 Gambas-database-tnanager.el gestor gratico 154o o o CrEar' unabaSE ................................... t54000 CJNEaruna ~ ................................. I ~o GEstionar datosdElX\OI tab&a 164SOL ............................................. IGS 5.4Programadn _ 167oo ModElo dEbaSESdE datos ....................... 167ConectandoSE por codlgo......................... 168Consulta dE datos ................................ 171Borrar ~ b os 174AfIacIr rEgistros ................................. 176r..4ocIificar /"EQI5tros .............................. 1805.5OtrascaracterisUcas ........................... 190[ EstructuradE las tablas .......................... 190o Masut:iIldadEs del GEstOl" de Basesde Datos........................................ 192CAPITULO 6; RED 1956.I CoocEptos 195 6.2Creando unSEl"vidoI" TCP...................... 198 6. 3 Un diente TCP 20S 6.4Clientes y servidOl"E5localES.................. 211 6.5UDP ............................................. 213 6.6RESOlucin de nombrES 216 6. 7 Protocolo HTTP 220 6. 8 Protocolo FTP 22SCAPTuLo 7: XMl 2277.I EscrituraconXmlWrlter ....................... 230 7.2Lectura conXmlReader ........................ 238o ~ s d E ~ r a .............................. ~o PtantEatnientoinictal ............................. ~Un ~ de lEctura ............................ 240 7.3X5LT ........................................... 252Que ES X5LT? 252o o o o Una plantilla de ejemplo 252o oo Transformando El docUmEnto conGambas 2S4 7.4AcercadE XMl-RPC 255CAPITULO B: HERENCIA 257 8. I Lenguajesorientadosaobjetosyherencia 257 11 8.2ConceptosnEcesarios 258la ciasE padrE 258lacIasE hija. Palabra davE ~ r r s 262u ExtmdiEndo fundonaIIdades.Palabra davE SUPER 264ModifICando funcionalidades 265ReempiaziIDdo mtodos eSPEciales:_Newy 1rEe 269UlTlttacionEs 272 B. 3 CrEarun nuEVO control conGambas 273PlantEandoEl codigo 273lrnpIementacion basica 274 8.4NUEVOScomponentes conGambas 279PreparaciondEl cdigo. PalabraciavE EXPORT 280Archivosnecesarios, ubicaciones 280Probando El nUEVO componarte 28211Progromocion viwoJ roo ~ I !:t.-CAPiTULO 9,ACCESO ALA API ........................... 2879.I Declarar una funcin Externa.................. 288oI Cmo denominar la libreria ........................ 289El uso de losalias ................................ 290Tlpos de datos .................................. 2919.2Fundones auxiliares 2919.3Un ejemplo con Iibaspell 2939.4ObtEnEJ" Informacin acercadE lal i b r e r ~ 2979.5Resumen 300APENDICE:Marcasregistradas ............................. 301.o Es obvio que para los que hablamosel idioma espaflOl, la palabra gambas nos sugie-re algunas cosas, pero todas ellas bastante alejadas delmundo de los ordenadores en general y del entorno dela pro-gramacin en particular. El autor original de Gambas, Benoh Minisini,no hablauna palabra de nuestro idioma y su inocente ignoranciale condujo anominar su obra conelacrnimo GAMBAS:Gambas almosr meam BAS/C, esdecir, 'Gambas casi quiere decirBASIC'. No es la primera vez: que unnombre ouna marca bautizados en otros idiomas produce estos extraos cambalaches, recor-demos que Coca Cola,n.o'tuvo que cambiar su pronunciacin en China porque laprimera versin de su nombre significabaml/cule el re,wCllajo de cera, o algunostodavarecordamos nuestra cara de asombro alver los anuncios deun coche alque Suz:uki dio en llamar Pajero. Tampoco est mal recordar que ya haba antece-dentes de otros lenguajes deprogramacin con nombre de animal, como CarneljProgromacin viwol coo Softwore libreo Python, aunque en esos casos el nombre estaba en ingls y en espaol no resul-taba tan chocante.En fin, como Benolt, que tiene los derechos de autor, no desea cambiar el nombre,nos tendremos que ir acostumbrando a que Gambas empiece a sonarnos a algo msque a buen marisco. De hecho, Gambas abre el entorno de la programacin visualen Linux a todo el mundo, como 10 hizo en su dla Visual Basicmo en Windows. Perocomo el tiempo no pasa en vano, Gambas intenta no reproducir los errores que secometieron entonces. la ampliacin del lenguaje BASIC alcanza con Gambas ampliascotas de potencia, profesionalidad y modernidad, sin abandonar nunca la sencillezy claridad de este lenguaje de programacin de alto nivel. Ya nuncams se podrdecir que construir aplicaciones visuales para Lnux es un proceso largo y comple-jo que lleva aos de trabajo a gurs y maniticos de la informtica.Gambas no el unlenguoie deprOSroma 20 'ftlEHPIU1fr "Adulto-IPEdad < 2 AMOBd.ad >O 'l"HEN!:LSE IFEdad < 12 THENPRIN'l' "Ni.o-ELSE IPEdad 10Este ejemplo producir elmismo resultado en la ejIXucin del bucle WHILE que enel del REPEAT, en ambos casos escribir diez veces "Hola Mundo" junto al valor dela variable a que se ir incrementando de1a10. El uso de estas estructuras puedeser peligroso. Si durante la ejecucin del bucle no hay forma de que la condicinpase de ser verdadera a falsa, estaramos ante un bucle infinito y el programa entra-ra en situacin de bloqueo.poepul'acion En I DE de GambasUnaVC'Z escrito parte del cdigo de un programa, lo usual es comprobar si funcio-na, pero lo habitual es que la mayor parte de las veces no lo haga mel primer inten-to. Tanto si se es un programador aperimentado como si no, los fallos son parte dela rutina. Saber encontrarlos y corrtgirlos 1:5 lo que S(' denomina depuracin, y esuna de las tareas ms importantes a reliizar. Cuando son fallos de sintaxis, el entor-no de desarroUo suele darnos mensajes indicativos del problema, parando la ejecu-cin en la linea ni que M: produce.otll ;1)elOAS ....\1Otll .Fo..AS figurg1.1'un1o de interrupcin en lo lineade cdigo. r tl1'(8.j( sta1ot __(hc1C 1..Cuando se adquiere una cierta soltura con el lenguaje, los fallos de sintaxis son cadavez menos comunes, pero los fallos en la lgica de la ejcwcin del programa se pro-ducirn siempre. Cuando esalgicapasa, adems, por instrucciones de control deflujo como las que hemos ViSIO en este captulo, la dificultad en encontrar los erro-res es mayor, puesto que la aplicacin transcurre en distintas ocasiones por la mismaporcin de cdigo y es posible que el falJo no se produzca la primera vez que se eje-cUle ese cdigo.Para facilitar esta tarea, eliDE de Gambas dispone de distintas herramientas de dqm-racin. La primera de ellas es la posibilidad de fijar puntos de interrupcin. Es decir,sealar sitios nl los que el programa separar para permitir vtr destado de lasvariables y en punto de la ejecucinse enCUnltra.Para fijar un punto de interrupcin enuna linea de cdigo, tan slo hay quecolocar el cursor del ratn en esa Uneay pulsar la tedaF9 oel botn con elslmbolo de la mano levantada, que estenlaparte superiorde laventanadecdigo. Las Uneas enlas que se fija unpunto de interrupcintienen elfondoenrojo.La misrrna opmcin que: crea el punto la eli-mina, es decir, pulsando F9 de nue'iO dfondorojo La ejecucin del progra-ma, como se explic en el capitulo anterior,se arranca pulsando en el simbolo verde dePlay de la ventana de Proyecto (o pulsandola tecla de funcinF5). Junto al botn verdeCIlt se encuentra un botn de Pausa, que permi-figura2. Ejecucin del programa te parar la ejecucin, y otro ms de Stop quedesde la veolallll Proyecto. permite detenerla en cualquier momento.Si se quiere correr la aplicacin ejecutando una a una las instrucciones para ir obser-vando por dnde transcurre el flujo del programa, se puede pulsar la tecla de fun-cin F8 o cualquiera de los dos botones que se encuenttan a la derecha del smbolode Stop. Hadendo esto, dentomo de desarrollo saltar a la primer'a linea que se debacorrer e ir ejutando Unea a !inta cada V(l. que pulsemos F8, o el icono que mues-tra la flecha entrando entre las Uaves, mencionado anteriormente. El botn que estjusto a la derecha del Stop y que muestra una flecha saltando por encima de las Ilaves, parece producir elmismo efecto (su teclarpida es Maysculas + F8), pero noes asl: el comportamiento cambia cuando el programa llegue a una llamada, aUllasubrutina o a una fundn.En este caso, este icono ejecutar la llamada y todo lo quetenga que hacer la funcin o subrutina enun solo paso, sin que veamos el flujo delprograma por el procedimiento. Si pulsado F8 habrfamos entrado enla subrutina y visto tambin paso a paso emo se ejecutan lasinstrucciones. Portanlo, con estos dos botones podemos elegir cuando lleguemos a la llamada a unpJ'lXffiimienlo, si quttmlO$ depurar ese procedimiento Osimplementecutarlo y pasar a la siguiente lnta de cdigo.Finalmente, cuando pausamos la ejecucin del programa, aparecen tres nuevas pes-taas en la parte inferior de la ventana de proyecto. En la pestaaLocal se ven todas[as variables del procedimiento que se est ejecutando y el valor que tienen en esemomenlo. En la pestaa Pila se ve el listado de llamadas enlre procedimientos que sehan producido hasta llegar a ese punto del programa. As, podemos saber a travs de11"".. F'9UfV 3. Ptitoas loco!, .... Yde lo __lona Proyedo.Prowamocil1SoHwore ubrequ pasos se ha llegado a esainstruc-cin. Finalmente, en la pestai'la V3r podemos introducir cualquierexpresin en BASle, incluyendo ope-racionn con las variables que el pro-grama tmga declaradas para ver cul esel resullado o el valor que lienen en elmomenlOde la pausa.

-- -"112. 6Entradaysalida:ficherosEn este aparlado veremos la formams comn de trabajar conficheros en Gambas.Gambas tratalos ficheros como unflujo de datos (lapalabra exacta para esto esStremn), lo que tiene una implicacin muy cmoda: todos los flujos de datos se tra-lan de igualmanera, con lo que el cdigo para manejar un fichero es igual al cdi-go para manejar una conexin de red o un puerto de comunicaciones, puesto quetodos sonde tipo Strtam. Las operaciones tradicionales con un fichero $Onabrirlo, crearlo, escribir y Ittr datos. Veamos cmo se usan:Archivo- OPElf lk:ab", deArchivo FOR REAl) I IRPUr 1( MRtftl 1otn'PUT I ( CREA'1'E I APPEHD [lfM"CHIAbrimos un archivo con dislinlas finalidades: REAO oINPUT: para leer datos, en elprimer caso no se usa buffer de datos,conINPlIT 51 que hay un buffer intermedio. WRITE o OUTPUT: para eSUal con Software Libre- .. TextArea: se trata de una caja de texto que es capaz contener mltiples Ilneas.Se permite tambin los retornos de carro. Como en el caso del TexlBox, el mto-do Se/ta;en y lapropiedad Se/eer determinan el texto selecdonado. Adems,este control dispone de los mtodos Undo y Redo que equivalen a [as rdenesDeshacer y Rehacer de cualquier editor de textos. Es decir, eliminan los ltimoscambios del usuario o los vuelven a situar en el texto. Botones: Gambas tiene tres tipos de botones. El primero, Burton, es un botnnormal, dispone de una propiedad Text que indica el texto a mostrar, asl comouna propiedad Picture para mostrar un icono identificativo. Este control dispo-ne del evento C/ick que se dispara cuando se pulsa con el botn izquierdo (o dere-cho si est configurado para zurdos). Otro tipo de botn es el ToggleButton, quemantiene su estado tras una pulsacin, es decir, cuando se pulsa una vez, quedapresionado, y al pulsarlo otra vez, sale de ese estado. La propiedad Value sirve paraconocer o variar su estado: FALSE significa 'no presionado' yTRUE'presionado'.El siguiente botn, TOO/BlIttOIl, es similar, pero slo muestra un pequeo icono,sin texto. Est diseado para insertarse en barras de herramientas, habituales enla parte superior de las interfaces, como acceso rpido a ciertas funciones comu-nes. Puede actuar como un botn normal, si su propiedad Toggle vale FALSE, ocomo un interruptor (como un ToggleBIpsauxcrw-rw----,~ ,roo< U, J2 jun 28 10:55 mouseOdrwxr_xr-J: 2~ ,roo< 60 jun 28 10:55netcrw-rw-rw-,~ ,roo s U 9 ! J C C l S U ! e u n u ma I U : : l p ! J n s e p u J l o d e [ e S n f u o J : : l 1 ! J b S s O l e p : : l p ; l S C q c u n ' O ! ) J J W O J 0 \ l J n b ; , d u n ; > p U 9 ! l- S J S e [ o J s c [ J e u n : : l p s o u w n [ c S O ] C C A I I C [ ; l J U 9 ! ) C W J O j U ! e [ ' s O A O , s O : ) J p S O I C p J pJ s e q e u n ' \ c U O S J J d e p u J S e c u n J J S J p ; l l l d O W O ) u 9 p e ) ! I d e c l I n C l C d " e p ! l- ; l n b J J U 9 p e J I S ! U ! W P C ; l P Z J l I ! J U ; l S C , J C ! : : l U C W C s o c p J p u J l U n l o h p : s ; } [ e l l l J l U e p- u n j s O I J ; l d s e s o p S J I U ; l S : : l J d J ; > U ; > I J p S O W J t ' U 9 ! ) i ' J ! [ d c C l l S ; / n l l l e y J S ! p ; / P C l O t e [ V" ( S J O " J l ! J b s " M M M / / : d n t ) J l ! l b s S J ' Z ; l A l e l ' O d ) l J I S J J p J e [- n d o d s y w s o e p a p a w q P [ ' x n u ! l / [ ) N 8 u 3 ' ( O : ) u n U ; s e p e q e J S J J S u : : l p ; n d ' o l d w : : l I JJ o d ) J C l l O d s U C l l J p S J I ! ) Y j s y w l J S u ; l ; n s , S O l C p J p S J s e q J p J O p ! A 1 a S U I l ; l p U 9 ! J- P J l S l U ! W P C , u 9 p P l e l S U ! e o u ' : ) d U ; S O S J I l J J J s o u a w S 0 t J n l l l U : : l w n s- U D ) ' O ! q l l l P J V " p m l ! l J s ; / e l n p J I O p O U l u ; S O U ; W e ' e J U Y I n l l l ) S P W J O j a p u 9 ! x J u mP l I n J p U ; } l ! U l l J d o u ; l U J l U l c O I ! q e t , ' o d ! n b ; l 0 ! d 0 1 d [ ; > a p s ; , p 0 [ 9 S S J [ q ! S J P' S J [ " I D O s O l e p a p s J s e q U O S J 1 U ; U l [ e U l J o N " c p ; l J O J d a n b O I U a ! l U ! U J l U P W [ J l c z ! l p a J , ; P s e ! d m s e r J J U J 1 U e l U ' ; l S e q c I J e ) ! q n ; > p c t J O p p W P l S O l d J 3 " o m p o ) S ! PO J I S J n U U ; o p e l o [ e O A ! t J J e u n J n b s y w S J o u s a l e p a p ; / S P q e [ ' O d ! l o p u n S J s p u 3" ( S l o " b s W " M M M . / / : d l l t ) O [ J p O W J p o [ d- W : : l ! J u n " e [ q c l o ; l S C q e p c J U a U J ! l U O J J n b S O l J ! . p y s O l J p u 9 p e J ! q n C [ O l U O ) s J l e l S O l- J J d S e ; l p ; m e d n ) { l ; > J d J p e l ] o u J n b J l S i ' s 3 " U 9 p e J l [ d e C I ; P J o p c w e J S o J d [ ; l Po u ' J O P ! A J J S J p e ; l l I J I S ; l S J S 1 U \ s e J p e U l J 1 U ! e m l J n J I S J I J ' " ] " J I U J 1 ] J s o d ! n b : : l S O I U ! I S ! PJ p S ; l p S e J u Y l n W ! S S J l I O ! X J U O J S P P P A J l ! W J J d , o p e n s n e p e ) a p O s a J ) e J p s o s l w J ; > ds O l P I O J I U O ) ' S O I C p J p S J S P q S P I U ! l S ! PJ O P ! I \ l ; l S [ 3 " C P C u J J c w l e U 9 ! J I J l U J O j U lP [ C U O ! l S J S J n b ' 5 0 J l ! Q J p S J s v f j J p l O p i A J J S o p e w e n e W I J J l o J d u n J 1 S ! x ; } ' O J J l l l ! l d PU 3 " S o d ! l s o p U J s e l J e J y ! s e p S O U l : : l p o d O J : : l d ' S e l U ! l S ! P S O l C P ; / P s ; s e q s e l { J n w u n s t x 3J l ' ! : l J J O M I l O S - U O J 1 0 1 1 S ! A l J 9 ! J O W O J 6 6 J d1 1necesidad de la consulta e ingreso de datos desde diversos puestos de trabajo deforma simultnea. Aquf tendremos que estudiar qu servidor de bases de datos esel ms adecuadoparanuestro sistema. Enel entorno de software libre, las dosopciones ms probadas yde mayor prestigio son MySQL y PostgreSQL(htlp:llwww.postgresql.org/). Ambos sistemas poseen, adems, versiones consoporte comercial. 5.2Bases de datos y GambasGambas tiene estruClurado el acceso a bases de datos mediante drivers.Estos sonmdulos de cdigo escritos por diversos programadores espedficamente para comu-nicarse conuna base de datos determinada, lo que permite acceder a distintas basesutilizando elmismo cdigo. COfllO veremos ms adelante, basta con especificar eltipo de bases de datos a utili7..llr. y tiresto del cdigo funcionar, posiblemente, sinmodificaciones, con independencia delabase de datos utilizada.Gambas puede manejnr varios tipos de bases de datos. Dispone, en este momento,de t res drivers espedficos: Sqlite, MySQL y Postgres. Adems cuenta conundriverODIlC, el cuales un estndar para comunicar aplicaciones conbases de datos.Porlo tanto, podemos lu:ceder con Gambas a cualquier base que soporte dicho estn-dar. Esto permite entrar, por ejemplo, a bases de MS SQL Servero Firebird.Alahora de elegir undriver u otro, tendremos presente que los drivers espedficosestn optimizados y ofrecen unamayor velocidad detransferencia de datos. Slocu:mdo no dispongamos deUl10 espedfico, usaremos el ODlle.Adentrndonos enla estructura de Gambas para bases de datos, cualquier aplica.cin que use esta caracterlslica, nec('sitar el componente gb.db como dependencia.Los drivers para cada sistema de bas('s de datos son tambin componentes, pero elprogramador noha demarcarlos como dependencias. Unavez que indiquemos aqu sistema nos vamos a conectar,elinlrprete de Gambasde cargar el dri-ver especfico.5Gestin de de11E.los componentes especiale. SO/!: gb.db.sq/ile:Sqlite versi!l 2 o onteriOf. gb.db.sq//e3: Sqlite versin 3 o poslerOf. gb.db.mysqI: MySQL gb.c/b.poJtgres. PostgreSOL gb.c/b.odbc: genrico OOBC.5. 3Gambas-database-manager.elgestor graficoAntes de explicar el modelo de programacin para bases de datos de Gambas,V3IJlO$a aprender autilizar el Gestor deBases de Datos, que es una aplicacin escrita eneste programa, la cual dota al entorno grfico de desarrollo de una herramienta paraadministrar, de forma sencilla, mltiples bases de datos.El Gfltor de Bases de Dlms escrilo en Gamba., H unprogrorng ...-n1O y es Softwarelibre. Por 10010, el ...lUdio de su cdigo nos puede oyucIor odudo. p""'!Uo1esque5UfjonQla hora de VIO' el componente gb.db.CrEar unabaSEVamos a apunder a crear nuestra propia base. Para ello un proyecto O bien abrimos cualquiera que)'3 tengaI1lO$ al nuestro equipo. Awdimos almenHeTcamientas y seleccionamos el Gestor de Bases de Dalas. Tambitn pode-mos ejutarlo directamente desde la consola, con el comandomanager.Tras pulsar la opn correspondiente, nos prtguntari una conlrast'a. Dicha con-lrasma st' ('JTlp1ea para almac=ar encriptados los datos dt usuarios ycontrasdlas-_........ _--..----F ~ 1. Inlroduttin de_.deseemos gestionar desde rste programa, para evi-tar que otro usuario pueda lurlos con facilidadconsultando los ficheros del entorno Gambas. lacontrasea que introduzcamos habr de tener 8caracteres como minimo, y se preguntar cada Vttque arranquemos el programa, para desencriptarcontraseas ya almacenadas en 5eSionrs previas.Tras rste paso, aparece el gestor en s, que en principio rsl vaco, ya que no hemosconfigurado ninguna conexin.Figura 2. Gel.Ior de bases de dolos de Gombm.111, ...... lO"_ _.__.-OUlDs discos cuyos cam-pos sta" coincidentes..Por el contrario, en una base de datos de alumnos puedeun ndice quecomprenda el ONIy su nombre. En este caso, no hay dos personas con elmismoDNI, luego ese ndice es (mico, y marcaremos la casillaUnique con el valor TRUEpara proteger a la tabla de datos duplicados.-< ..t.... - - ....-.- ;Jt'Y. - a_;:S;>' __Figo.ra 15. Cr.oci6n de In&es.o D oD oGestiona,. datosdE una tablaLa ltima pestaa de la interfaz del gestor de bases de datos, Datos, nos permite consultar ymodificar el contenido de la tabla. Dispone de tres bolones; Nuevo registro(hoja en blanco), Borrar registro (aspa roja) yGuardar dalos (floppy). Hay que lenersiempre presente que, al trabajar con esta interfaz, los datos que anadamos, elimi-nemos o modifiquemos, slo SI: actualizan realmente en la base de dalos cuando pul-samos el boln para guanhr.Cadaque pulsamos el boln Nuevo registro, se crea una linea, correspondientea un nuevo regislro nl la labia aClual. Podemos desplazarnos por los dislintos cam-pos de ese regislro, para aadir los dalos correspondientes. Tambin, si la tabla con-tiene ya datos, podemos modificarlos o bien podemos seleccionar un regislro yeli-minarlo con la opcinBorrar registro.En este ltimo caso el registro se pone de un color diSlinto para senalar que enlaprxima actualizacin dichoregistro desaparecer, lo cualnos pl"rmite asegurar-nos que la solicitud de eliminacin es correcta antes de pulsar el botn Guardardalos.-'o:.-".---------.. Figura16. Pestaa deDotos.Introduciremos registros de librosutilizando estainterfaz, para que dispongamosde algunos datos conlos que trabajar en adelante. Recordemos que es importantepulsar el hotn Guardar datos cuando hayamos terminado la edicin.DOOOOsaL11Sin escribir an cdigo Gambas, podemos yaempezar a trabajar con el lenguaje SQL Comohemos podido observar, uno de los botonesdel geslor de bases de dalos de Gambas con-tiene un texto SQL Lo pulsaremos para escri-bir sentencias en este lenguaje.9"~.. @el Campos ! fJIndices IIE Datos"D X. ~- _.....- _ . ~Fi uro 17. ioSQl.Nuestraprimera consulta servir para obtener unlistado de todos los datos de latabla que hemos creado. Para los que no estn muy familiarizados con ellf'nguajeSQL, adaramos los siguientes puntos: las instrucciones de consulta comienzan conlainstruccin SELECT, a continuacin hay que determinar qu queremos consul-tar (en nuestro caso todos los campos, para lo cual emplearemos el smbolo ') y des-pus se usa la palabra clave PROM para indicar de dnde obtener esos datos.)Ql/home/dcamposlBases (sqlile)- pruebas - Peticin Sal~ lB!'" "seleCl fromd a t o ~.. Figura18. Lenguaje SOl5. Gestinde Ixnes de dotosProgramacin visual conSoftwareLibreAl pulsarel botnEjecutar, obtenemosel resultadodelaconsultaenlaparteinferior.9liI 5regslros,".IoI "'"1...... Ip-I '''''''P'''''I,dD.JbJ Gblfll 205.Gestin de de dolos11Progromocin .,woI con Softwore librePara construir I; llamad; al mitodo Edit tendriamos:dt la tabla: Artkulos.Fillro: precio mayor qut una cantidad.Parmetros del filtro: 20, en este caso.Por tatllo la llamada queda como:hConn.Edit ( NArticulos, 20 )Por qul no tmpleanSQL directamentt? Porqut las modificacioneslienen sentido slo sobI'C' una tabla. No se puedt modificar, por ejemplo, ti resulta-do dt los regislros que provienen de unir dos tablas, o dt un sumatorio dt los valo-res dt un campo.Tras obtener el registro con la llamada a Edit, pasamos el objeto Rnrllt alformulario de datos, conla llamada a su mtodo Rlmlil, y bte se mostrar de formamodal. Al cerrarse el formulario, la ejecucin retorna a nuestro mtodo en el cualaetuali7..amos el contenido de nuestro control QlllmnView para retlejar los cambioshechos en la tabla de la baSt.AcOlllinuacin, se rep'roducen complttos el cdigo de FMai" y FDala al ser doscdigos extensos que htmos troceado y modificado sobre la man:ha.FMAINPlU"V1aEhConn AS Connect:.ionPRIVATE FUNCTIONConectarBase () ASBooleanIFhConn THENRE'l'URNf'ALSEbConn - NEMConnectionhCOnn.Host N/home/usuario/BasesNhCOnn.Name _ NpruebaS"hCOnn.Type "sqliteNTRYhCOnn. Open()IF ERRORTRENhCOnn - NULLMessage.Error(UError al conectar conlabase")""""'"TRUEEND IFRETURNFALSEENDPRIVATE SUBIFhConn NULL TREN RETURNhCOnn.Close()hCOnn - NULLENDDIMhResul AS ResultDIMClave ASStringTabla.Clear()IFCOnectarBase() TREN RETURN5.de bmes de datos11visual conSof!ware UbreTabla.Colwmns.Count: 5Tabla.ColumnsIOj.Text-

Tabla.ColumnsllJ.Text:-"Autor"Tabla.Columns(2J.Text-"Fecha"Tabla.ColumnsI3).Text-"Precio"Tabla.Columns4J.Text-"Descripcin"hResul _ hConn.Exec("select * fromdatos")DOWHILE hResul.AvailahleClave - hResul[Ntitulo"]Tabla.Add(Clave, Clave)TablalClavel [1] - hResul("autor"lTablalClavel [2] - hResull"fecha"]TablalClavel [3] - hResull"precio"]TablalClavel [4] - hResul("descripcion"lhResul.HoveNext()CerrarConexion()ENDPUBLIC SUBTabla KeyRelease()IF Key.Code - Key.Delate THENIFTabla.CUrrent - NULL TRENRETURNIFTabla.Current.Selected- FALSE TRENRETURNIFConectarBase() TRENRETURNTRr hConn.Exec(Mdelete fro- datos wheretitulo-.lw,Tabl.Ir ERRORTRENMessaqe.ErTor(M1qX)sihleeliain.n-elregisb"O")cerrareonezion()Tabla.CUrrent.Delete()END "DIMbJlesul AS ResultIFTabla.CUrrent NU1LTRENRP:IURNIFConectarBaseO'I'llE:NRE'l'UNfhResul hConn.Edit(MdatosM, "titulo-.lw,Tabla.Current.Key)FData.RunEdit(hResul)Tabla. Current [O] hResull ..Tabla.CUrrent(l) hResul(Mautoc")Tabla.CUrrent(2) _ hResul(MfechaM)Tabla.CUrrent(3) - hResul(Mprecio"]Tabla.eurrent(t) hResul(Mdescripcioo")eerrarCoDe:doo( )PUBLICSUB8tnSalir_Click()HE . 150\Close( )1111Programocifl viwal con Software librePUBLIC SUB BtnHuevo_Click()IF Conect:arBase() THEN RE'roRNFData.RunNew(hOonn) Fo", Open ()FDATAPRIVM'E Editando AS BooleanPRIVA'l'E bltuul AS aesultPIUVATe bCoQn AS ConneetionPUBLlC SUB R\!n'lew(Data AS COrlned;ion)bConn - DataME. ShOllllcdal ()PUBLIC SUB RunEdit(Data AS Result)bResul - DataEdi tanda - TRtIETxtAutor.Text - TxtFecha.Text hReSul[Nfecha"]TxtPrecio. Text - hResul( "precioN]TxtDescripcion.Text _ ME.ShowModal()PUBLICSUS8tncancelar_Click()ME.Closen150\PUBLIC SUSBtnAceptar_Click()IFEdHando TRENTRY hResul [Ntitulo"] _TxtTitulo. TextTRY- TxtAutor.TextTRY - TxtFecha..TextTRYhResull"precioN] _ TxtPrecio.TextTRYhResul(Udescripcionff] TxtDescripcioD.TextTRY hResu1.update().....TRYhConn.Exac("insert intodatos valuesTxtTitulo.Text, TxtAutor.Text,CDate(TxtFecha..Text), CFloat(TxtPrecio.Text),TxtDescripcioD.Text)5. Gestin de boses de dolos11ENDIFME.Close()CATCBMessage.Error("Imposible introducirlos datossolicitados")ENDAlolargo deeste cdigo, se abre ycierralaconexinconlabase de datosencadaoperacinrealizada. Conesto, el periododetiempoenquelosdatosseencuentranenbuffersintermediosesmenor, reduciendolaposibilidaddecorrupciones, anteunfallodetensin, porejemplo. Noobstantelacargadel servidor yclientetrabajandodeestemodoesmayor, ypuedeserunmodeloexcesivamentelentosi el volumendedatos esmuy grande, osi sloserealizanoperaciones delectura. Es conveniente, portanto, evaluarlaconvenienciaonodemantener laconexinyconsultasabiertasenlasdistintas operacionesqueseefectensobrelabasededatos.Ii 5.5 OtrascaractersticasEstructurade las tablasGambas tambin permite examinar la estructura de las tablas de una base. Para ellose emplea la clase Table y la clase Field. El programador no puede crear objetos deesas clases directamente, pero puede obtenerlos de una conexin en curso. Esta fun-cin de ejemplo, lista en la consola la estructura de una tabla, recibe como parme-tros una conexin y el nombre de una tabla, y lista sus campos.PRIVATE FUNCTIONListarTabla ( hConnASConnection,NombreTabla AS String)hTable=hConn.Tables[NombreTabla]FOREACHbField INhTable.FieldsPRINT"-------------"PRINT"campo: " & bField.NameSELECTCASEbField.TypeCASEgb.lntegerPRINT"Entero"CASEgb.FloatPRINT "Nmero real"CASEgb.StringPRINT "Cadena"CASEgb.DatePRINT "Fecha/Hora"CASEgb.BooleanPRINT "Booleano"ENDSELECTNEXTENDEn ocasiones puede ser necesario examinar unatabla, como al inicio delprogra-ma,para comprobar sus campos. Por ejemplo, enlafasede transicinmonedanacional/Euro en Europa, se hizo necesario almacenar datos de importes en ambasmonedas duranteunperiodo, en algunos programas. Las versiones actualizadasde estos programas, al instalarse y arrancar por primera vez, comprobaban la exis-tencia deestos campos, y actualizaban labase deformaautomtica. Versionesposteriores podan eliminar el campo de monedanacional para ahorrar espacioen la base.SQL no es slo un lenguaje de consulta. Las instrucciones como CREATE TABLE,DELETE TABLE YALTER TABLE, se utilizan precisamente para la funcinindica-da: alterar la estructura de la base y sus tablas cuando es necesario.5 Gestion de bases de datosProgromocin visual con Softwore Libreo O O O OMas utilidadEs dEl GEstor dE BaSES dE Datosfigura 24. Otros vtitidode1. del Geslor de!losesdo_ l.d.I., codIIico-' WlF11_ .....bIO.... _ ..-.....oe-._.-lb",,... .La primera de ellas es obtener elcdigo para crear las tablas de labase. Situndonos sobre una basey pulsando el botn derecho.podemosseleccionar la opcinCrear cdigo Gambas...EjecutandomantJga' podemos encontrar algu-nas utilidades adicionales.11Al acceder a este men, nos pregentar el nombre del mdulo yel procedimientopara crar el cdigo. Tras indicar estos valores, cerrar y volver a abrir el proyecto, dispondremos de unnuevo mdulo con elnombre indicado. que contiene el cdigopara crear la tabla.PRClCi'J:JIJREeru.teD.aUba.se(bCoomAS c:o.mectciOll,sDat&base AS Stringl Geoerated bytbe Gamball databa.eIlliUI3ger -22/08/2005 10:26:.]DlMhTable AS Tab1eMI'IBb'rab1e.Field. Addc-titulo-, gb.String, fO).Fields.Add(-lIutor-, gb.Striog, fO).P"ields.A&1(-fee:b.a", gb.Date).P"ie1d. Add(-precio, gb.P"1oat).Pields.Add(-descripcioa-, gb.String, 200)"'"HU.Al inicio del programa, y tras conectar con el servidor de bases de datos, podemosentonces comprobar si no existe la(s) tabla(s), y llamar a este edigo para que la(s)con lo cual se facilita la distribudn del programa en varios equipos., sin nece-sidad de intervencin adicional manual para poner en marcha un sistema nuevo.GamlHu-databaM:-mantJgtT permite copiar datos entre bases. Podemos, porejemplo, pulsar el botn derecho sobre nuestra tabla dtJtos, presionar sobre Copiar,acceder a otra base de datos, sea 5qlite o de otro tipo, pulsar Pegar, y el gestor crea-r la tabla en la otra base, preguntndonos si queremos copiar slo la estructura delos campos o tambinlos datos. De esta forma, se facilitala fase de programacin.al poder disponer de varias bases de pruebas, asl como la fase de migracin de unabaSC' a otra, al poder copiar datos de la base antigua a la nueva. Este proceso se puedellevar a cabo para tablas individuales o para una base de datos completa.5. Ge1,tin de bo5e$ de dolos11 6. I Conceptosla transmisin de dalos a mlVh de una red se estandariz hace tiempo an i ~ l de software y hardware. Acm.llme.nle setrabaja con el llamado modelo de coptJs. Bsicamente, este modelo pre-aislar los diferentes niveles de complejidad de datos, de forma que la sus.n deuna capa no afecte altrabaj en olra. Podemos ver hoy en dla que es,por ejemplo, conectarse a Internet a travh de un mdem, una Unea ADSLethernet enunared loc.al y, sinembarg, el hecho de tener aparatos tanen funcionamientono obliga a disponer de unnavegador o unclientediferentes para cada situacin. Esto se debe al modelo de capas.. El nave-Ilo entiende de protocolos de altonivel, como HTIP OFTP,transfierelain a unnivel ms bajoy, finalmente, el mdem convencional, ADSL ode red se ocupap.de transportar esos datos segullo;pX:eda.o"%-_.. -_..._..........Para no entrar en complejidades, ya que es tarea de un libro sobre redes, direque hay un par de lo ms bajos, conformados por el hudwilretarjetas de red... ) Ylos o mdulos del ncleo, que controlan ytrocean la infor.man para emitirla o recibirla por dicho hardwau; Yunos nivel(S por encima.CJWson los que ms nos interesan a la hora de programar con Gambas aplicaciono dtred, y que son indepcndientts del mtodo de transporte que haya por debajo.El protocolo ms extendido hoy en dla para distribuir informacin entre equipos esel protocolo IP, 'lue ddermina qui destino y equipocada fragmmtockinformacin que circula por una red. Cada equipo liene un nmero asignado, n.1.mado dirttci6n IP es su identificador nico. Cada paquete IP de informaci6n essimilar a una carla postal; incluye datos del remitente (lP del equipo de origcn) 1del destinatario (IP del equipo de destino). Eslas direcciones IP tienen la (ormaXXX.XXX.xxx.xxx; IOn grupos de cuatro nmeros que varian entre Oy255.5tpI-rados por puntos (por ejemplo: 192.168.0.23 o 10.124.35.127).Dado que estos nmeros son dif'lciles de recordar. se estableci un sistema que per-mitla establecer una correspondencia entre nombres y direcciones IP. Este sistemase denomina DNS y. a lo largo y ancho de Internet y de casi todas las redes 1oc:aks,se encuentran servidores DNS que reciben consultas acerca de nombres de equiposy direcciones IP y las traducen en un sentido u otTO. IX- esta (oona. podemos. pejemplo, indicar al navegador que muestre la p.jgina www.gnulinex.org,enlugardctener que indicar la direccin IP del equipo que estfl sirviendo esta pgina.Los paqueles IP pueden contener cualquier tipo de informacin, pero encima de esuniYd se han estabkrido otros dos tambim estndar, que son los protoeob TCP YUDf'.1. TCP se utiliza para asegulllr la conexin rntre dos equipos: se sabe C'fllodomomento si el equipo remolo est;i a la escucha. si ha redbido toda la infor-macin correctamente o hay que volverla a emitir, y se aaden sistemas de'control de errores para asegurar que un ruido en la lnta no ha defo.-madolos mensajes. Es el protocolo ms utilizado en Internet, ya que asegura querecibamos una p.jgina web o un fichero de forma completa y sinEn cuanto a UOP, es un prococolo de tr.msporte mucho m simple que TeP,'f no verifica si realmente existe una conuin entre los dos equipos o siLainformacin ha sido realmente recibida o no. Es, por tanto, menos fiable. peroen determinados tipos de tfllnsmisiones. como son las de audio y video entiempo real, 10 importante no es que Uegue toda la informacin (puede haberpequeos cortes o erroru). sino que el caudal sea constante y lo ms rpidoposible. Por ello, tambiln se emplea con lTecuencia en Internet, sobre todopara los Uamados servidores de sfrNming, que nos ptrmiten escuchar radio,ver programas de televisin o realizar vidcoconfermcias por la rro.ra de establecer una comunicacin entre dos equipos. el modelo indica queabrirse un locket. Es algo similar a una bandeja de entrada o salida. como laadministrativos, que tienenuna bandeja con los informes pendientes y otrab que van terminando. El sistema operativo almacena informacin en la ban-*' entrada proveniente del sistema remoto, hasta que nueslro programa deci-r los datos, entonces los procesamos y los dejamos en la bandeja de salida.operativo se encargar de enviar esa informacin cuando le sea posible.no se emplea slo pua comunicar dos oms equipos. dentro denuestramquina muchos programas se comunican entre si utilizando este sistema.ejemplo, es el caso de los servidores grficos o X-Window; el servidor grfico. lo que le piden los progfllmas clientes o aplicaciones que han establecidotocUt con tI.un tipo especial de socket, llamado local o Unix, que slos i ~ para comu-programas dentro de unmismo sistema, y que est optimizado para realizarfuncin con gran velocidad y eficacia. permitiendo una comunicacin nter-....ias veces m;is veloz y con menor consumo derecursos que a travl!s deunTepo UOP.""'''''ms arriba. tenemos los llamados protocolos de IlpliCtlcidn. Ya no nos encarodel transporte de datos. sino del formado de los datos y de la comunicacin.de los protocolos ms extendidos es el HTIP que. entre otras COlas, se utiliza.. ,D3"" ScIIwc en lodo Inltl'ntt pata tnnsmilir r rmbv P'Pn- wm. F$l>blc dmoGo cIr, .....!.Ir. cmo lultntiarloe, dbmuotn lk b datot 1n.I'J$lnllu () rmbtr an:h_a:xnprimidoL.) r cmo fi!WW" la mmllltil;aci6n.Otros protocoloi espedfic05 $O 65535 ftEIf_SNge.&rrorC"1fl.uo de puerto DO .ido-}........_ IrSE

1JI' sU' .. _".1' .an-C"D1t'ecct6nti' ea rilida-)--"CH-.l4o.. _ lIclckft U CH_t."Cli.,te.ac.t ...1.eU.llte. Port .. ftI'IIertoClieoltol.c....neet.( 1el inttllto dey la (anuIOnreal puroe pasar un inluvalooU littn-po. Parahemos conectado rnJmcnlc oon el ...,rvidor, cmplearcmNtI Rndy. que se produu cuando el KTvidor :acepta nUQt..... conexin. En estee'YeIllo, habilililrcm06 tI cuadro de talO de lUl05 PM'l'1.... d _rio putd;l escribir alIL Tambitn puC'de SUCftkr 'll'C se produzao un mur (por fjnnplG.UIU. ront'"milo unnomb..., O_11" Itey.COde - 1tey.Ret.uro _'l'RYCL06EICli...hCli...U. - lIUI.oL'rrtDato..Baabled- 1"AJ..61C.-PUBLICsuabtDato._lteyPrea.Odlo inlrOOuci""mos dcdigo &nlro dd (\'(nIO KqPrcu dd cuadro d( lalo.oto al (ovlo d( dalOS, lo reali:a""mos cuando du.uariola Reum,acribir ull lalo (O dcuadro11En nOc:o" 01 (111'(> lodo"'" oIguirn.11 """"'"" o. ho:d>o. o clirnletu....... en11 priclico olbomnoo ala dio-110 ""'" dr diod'w uno IplicaciOn ..nido.... dinm. Pt-.. qw "'" alSlWIlhoIn- t":".rd cdip. v. ... pode""" "' ............ ""'d"""'."dos HOIlNanw.. lklollp rapcctinmmlt, ya '1'" nUemru el edilIo del ,.......principal .. ""'" ejt(ul'ndo. ri diornlt ONS nU trabojondo ;nle'rna"'t'ltt. "dos apelo.."" la P"lIKro es ..pe"" 01 ..wn,o Finlhtd. quu< di.para ol ocoNo' elpmaso; Ylo ....undl .. compl'".'O'hl'1~ .,;;,.:':;=-~ L0 __0 _0 __0._0.-En la apertura del formulario leeremos el fichero XJ\1LEl mtodo Form_Open que-dar as:, En primer lugar definimos ('] objeto XmIReader, lo creamos y tratatnos de abrirel ficheroXML. Si elfichero no existe, o!lO atiende a este formato, se genera-r un error en ese punto.PUBLICSUBf'onU)Pen()DIH:Jsnl AS XIIIlReaderxml - NEWxmlReaderTIU%al. Open (l1ser.1lCWIle " "/conexione 'llDl" )lPERROR'!'HEHMessage . .Error("Palloal -.brir el ficheroiIIodie.do")""""'""'" " Entramos en un bucle en el que Il"l"mos G1da nodo avanzando por el conteni-do del ~ Nos intl"n$3. encontrar dprimero de tipo EJemalt yque $U nom-bre sea conexiones. De no ser asl, el fichero no contendra datos de inters y lorn::hazarlamos. Pero si es correcto, llamaremos a una(uncinRellenaArbol,donde trataremos estos datos.DOWIIllZ 1'RUEIPIJal.Node.Type - XIIIlReaderNodetype.ElBDent THEMIFXlll.1.NOOe.Name - "conexiones" '1'llENRellenllArbol (XIal)ELSEMes8age.Error("El documento DOoontienedatosde eoneziODe''')%al. Clase( )"'" "7.XMl11ProgrPor cada teracin del bucle, empicamos el mtodo Rtad, que sita el puntero nter_no en el siguiente nodo del fichero XML En este proceso, puede darse un error si elpuntero Uega a una zona donde el fichero tSt corrupto, es dir, quc no cumple lanorma XML y, por tanto, no puede ser ledo.TR!' XIal. Read ()IP ERROR'I'ltENSi llegamos al final del fichero (tras el ltimo nodo), terminamos el bucle. Esta cir-cunstancia s.. - TRENII' sNodo - -o- TRENTRY Arbol.Add(sNodo, sNodo ~ .. (local)-)ELSETRY Arbol.Add(IHodo, sNodo ~ .. (nacional)-)ENDlF7 IWJ.11Programoc::in visuol con SoItwore LibreDOWHILB '1'RUEl' IMl.Node.Type - XInl.ReaderNodeType.Elemeot TRENSELECT CASE :Iml. Node. NillIl8CASETRY XlIIJ.. Read OTRYArbol.Add(sNodo xml.Node.Value, NULL, sNado).Prila- -O-f'OJl EACHXlIIJ..Node.Attri.bute.If' Xal.Hode.NiIIIle - -priAario 'rBEM shia- Ial.Hode.Value""""TRI' Ial.itead()Ir .hila- -O- TRENTRI' Arbol.Add(sNodo -dn.2-, -do.2: - :Iml.Nade.Val\le, NULL, .Nodo)ELS'TRYArbol.Add(sNodo -dnsl:xml.Node.Value, NULL, sNodo)EN!) IFEN!) SEUCrTRI %m1.Nert()Il' ERRORTREN8RBAXIl' xal.Node.Type xalReadedfodeType.EndElemeD1:............TRYxml. Read ()Il' ERROR TRENBREAK"""mmPOBLIC SUBRellenaArbol(Xm1 AS Xla.1Reader)DOWHllZTRUE'l'IUxal. Read ( )Il' ERRORTREN RE'1URXTRYXIlll.Nex1:()Il' ERRORTREN BRI:AX7.XMl11pENE> lFIrIIal.Node.N_- -conexiones- ANOXall.Hode.Type.. &lReadertiodeType. EDdEl-.lt '1'HEH.....ENDlFLOOPPUBLICSUB "0=Open ()DIMXIIl1 AS XIIl1ReacierTRYIml.Open(User.Home & M/oonexione ~ )IF ERRORTHENMssaqe.Error(-Felloal abrirel ficheroindiea&O-)""""'"ENDlF00 li'HILE rRUEIr XIIl1.Node.Type - XIIl1ReaderNodetype.Blement TRENRellenaArbol (XIa1)ELSE . Escribimos dicha pgina en unfichero en nueslra carpeta personal, ysalimos. Si con-sultarnos ("on el na'Tgador la pgina obtenida,mos un como dque muestra en la figu-ra de la izqukrda.7. 4AcercadeXML-RPCfutura versin Gambas 2, dispondr tambin de un componente XML-RI'C. Estaslas se refieren al uso de XML como sistema para comunicar dos procesos en dosquinas diferentes. XMLRPC es un subconjunto de XML que define un lengua-:>ara llamar a procesos remotos.11Progromocin viwol con 5ohwore LibreUn servidor XML-RPC acepta llamadas remotas a sus mtodos.El proceso es muysimilar a llamar a una funcin local dentro de un programa: el diente llama a la fun-cin pasando unos parmetros (nmeros enteros, cadenas, estructuras de datos... );y el servidor procrsa la llamada y devuen'( al dicnte un resultado. que tambin Sttliuna cadena, nmero. fecha, etc.El componente XML-RPC aportar varias facilidades para implementar estos pro-' ~ LEn el lado servidor dispondr de un parser, en el cual definiremos los nombres de losmtodos que se aceptarn, as como la correspondencia entre estos yotros locales ddprograma servidor. Dt este modo, tan slo hay que pasar la peticin del cliente al ptlr-ser, el cual se encargar de verificar el nmero ytipo de los parmetros, ydevolver unerror al cliente, Ollamar a la funcin local y devolver el resultado al diente.El servidor podr funcionar en solitario, implementando un pequeo servicio webpara atender las pt'ticiones, Obien funcionar de modo controlado por la aplicacinservidora, con el fin de implementar CGIs que se sirvan desde Apache, por ejemplo.En la parte cliente es posible definir la URL del servidor yla forma de Lada muxlo.Igualmente podr actuar en solitario. solicitando mediante una ptticin web la Ua-macla al servidor. Tambil!n se puede crear el documento XML de la ptticin,d c j a n ~do a la aplicacin e! diseo de! transporte y repcin de los datos con e! servidor. a. I Lenguajesorientados aobjetos yherenciaYa hemos visto una breve introduccin al mundo de la programacinorientada a objetO$. Podemos dfi:ir que un objeto es una herramienta, por ejem-plo, un tnel de lavado. La clase son 10$ planos dee$ no .... ayuda, cuando creamos componentes.Puesto que en Gambas no uiste el concepto de C++ y otroslk propiedad.variable o funcinProTegida (accesiblt slo desde la clase ySUS clases hijas), esta fun-cionalidad nos permite declarar variables pblicas no visibles desde el cdigo princi.pOlI, manteniendo as una interfaz ms coherente con nuestros propsilos.los nombres d. va' jable., J!fopiedodes ofuociones que cOmienzon con un.vbla-yodo, nasemuestronni enelsi.terno d. oUlo 11 'li' 1'1 : ltCOloo1. -eo. ..

!'.'_I,a_'a_.. figura 6.11trar, y aadiremos dos propiedadesnuevas Colorl y proyecto grficoColor2 que contienen dvalor inki.al y final del gradiente. Cobrf.obe/.Para manejar las tres propiedades. tendremos tres varia-privadas: hTexl para el texto. hColorl para el primer color y hColor2para elsegundo color.Empezamos. pues. a escribir el cdigo de la dase:, Gambas clall fileINHERITSDr_ingArelPRIVA'1'8 h'lert ASStringPIUVATZbColorl AS IntegerPRIV1d'Z bColor2 AS IntegerPROPERrI Text ASstringPROPEKI'TColorl AS InteqerPROPERrJ' Color2 AS InteqerImplementar las funciones de lectura de las tres propiedades es trivial, basta condevolver los valores de nuestras variables privadas (recordemos que estamos escri-biendo el cdigo siempre dentro de la clase ColorlAbd):RE1URNbColor1PRIVAn: ftlNCTIONColor2_Read() AS IntegerRETURNhColor2ENDRE1URNhTeztEn cuanto a las funciones de escritura, hemos de asignar dvalor que dusuario pasaa nuestras propiedades, y hemos de actualizar el conlrol cada vez que una de ellascambia, tarea que realizaremos en una funcin llamada RedrawO, an por definir:hTest - VIRedraw()ElProgramacin visual COl'l SohworeUbrePRIVATE SUBColorl_Write(Vl AS Integer)hColorl - VIRedraw()ENDPRIVATESUBColor2_Write(Vl AS Integer)hColor2 - VIRere Elcdigo delformulario consiste en crear unel formulorio fMoin. control Colorlabel entiempodeejecucin,situndolo en el formulario con un texto de ejem-plo ydos colores definidos para e1gradiente:8. HerencioProgramOCln visual con Software librePUBLICSUBBtnPrueba_Click()DIMhLabel AS colorLabelhLabel - NEWColorLabel(ME)hLabel.Font.Size - 18hLabel.Move(O, 0, HE.Width, 100)hLabel.Colorl - Color.BluahLabel.Color2 - Color.DarkBluebLabel.Text - NHola desdeel 11Al ejecular el programa y pulsar el botn, podremos ver ya nuestro control en fun-cionamiento.Ha sido una tarea rpida y sencilla, si bien se puede depurar ba51anleel cdigo del control. Por ejemplo, este control tendr problemas con caracteres concdigo ASCI]mayor al 127, ya que en la codificacin de Gambas (UTF-8) ocupanms de un byte, rompiendo el algoritmo que recogeel texto lelra por letra.funciO/lClmiento.Figura 8.Conlroj CoIorl.abelen-[Se puede solucionar convirtiendo la cadena a una codificacin que emplee siempreunbyte por letra (por ejemplo, 150-8859-1) Yreconvertirlo a UTF-S a la hora de representar-lo. Tambinpodramosincluir unapropiedadpara alinear el texto a derecha, izquierda o cen-tro, asf como mejorar el algoritmo para obtenerel gradiente, separando los componentes RGB decada color, tareas todas ellas que dejamos si esta-mos interesados en practicar.Esle nuevo control "" puedereulilizar entodos los programas qve diwemos aiiodiendcla Colorlobel alpraye O TRENIFaspell_speller_check(spell_checker,MyStr[Buclej, - 1) TREN1ista.Add("OK ->" & MyStr[Bucle])ELS'8ufErr - " ( "suggestions - aspel1_speller_suggest MyStr[Bucle], - 1)e1ements aspe1l_word_list_elements(suggestions)DOMBl:LE TRlJEhPt.r - aspell_st.riDg_ernaeratiOD_De& MyStr(Bucle) & BufErr)"'"lF"'"lFMAZT0.001Finalmente liberamos los elementos necesarios empleados en la correccin de texto.delete_aspell_config(spell_conf!glPBar.Value _ 1 9. 4 Obtener informacin acerca delalibreraNormalmente, las librerias aportan multitud de constantes ymacros definidas en susficheros de cabecera. Ala hora de trabajar con ellas debemos conocer sus valores, ya9 Ac;te$O o la AA1111que: no se puede recurrir directamente: a los #indude de C. Veamos este ejemplo, queutiliza la constante GTILWINDOW_TOPLEVEL:linclwdeint lIlll.in(void.){GtkHindow*viD;win-gU_wiDdow_Dew(GnC_W'IKDON_TOPLEVEL) gtk_wldget__how_all(wln))Con el fin de conocer el valor de esta constante, o cualquier otra aportada por unapodemos recurrir al menos a (llano mtodos:1. Consultar la documentacin de la propia librala, que en este caso (GTK+),es bastante completa. Lapodemosencontrar enlasiguiente direccin:hnp:/ldeveloper.gnome.orgldoc/APIf2.0fgtklglk-Standard-Enumefations.hlml#GtkWindowType.2. Indicar que GTICWINDOW_TOPLEVEL tiene el valor Ocomo parle de laenumeracin 3. Buscar en los ficheros de cabecera de la tibreria, que se suelen depositar a par-tir de la ruta !lm/incillde. En el caso que tratamos en el ejemplo, este valorencuentra en el fichero /usrlirrdlldelgrk-2.0/gtk/gtkerrums.h.4. CompilaTun pequt"o programa en e quedViJ.lor problemitico queno alcanzamos a averiguar por otros sistemas.'ineludeUncludevoidmaio(void)()Podemos ya pasar el pequeo programa a Gambas. Para ello, creamos un programade wnsola con un solo mdulo mOiiMllill que conlenga este cdigo:, Gambas modulefileEXTERN AS Poioter, Argc ASPointer)EXTERN _maio ( )EXTERNgtk_window_new(WType AS Pointer) AS PoiotereXTERNgtk_widget_show(wid AS Poioter)PUBLICSUll MlIlnODIMWin AS Polnt:.erwin - gtk_wiDdow_new(QrX_trINDOW_TOPLEVEL)gtk_widget_sbow(lfin)Progromac:i6n viwalCQIl Softwau. LibreSi lo ejecutamospodemos observar que el resultado es equivalente al del progra-ma en C. 9. 5ResumenEn estemomento, Gambas autoriza el accesoa funciones de librerras externas.La nica condicin es que sigan el ABI estndar. Las propias instrucciones del pro-grama permiten reservar y liberar memoria. En el futuro, a travb de gb.llpi (no deta-llado aqul, pues se encuentra enpleno desarrollo y su interhz puede cambiar), lagestin de estructuras y retrollamadas ser posible.Pero no se recomiendae:1uso de esta funcionalidad, salvo que est plenamente jus-tificado. Gambas aporla componentes para lareas variadas que cubren buena parle:de las neusidades que se encuentran en los programas habituales, y su capacidad de:gestin de procesos uternos lo hace apropiado para casi cualquier tarea. Trabajarcon llamadas a funciones externas puede hacer ti programa ms dificil de depurar,sensible a los cambios en el sistema (actualizaciones de librerlas, cambio de ven;inde la distribucin... ) y limita la portabilidad del cdigo (por ejemplo, de un sistemaGNU/Linux, donde se desarrolla, a una plataforma freeBSO o, en el futuro, en laversin \\'indows de Gambas).MARCASREGISTRADASLos siguientes trminos son morcol regi.trodos en Estados Unidos u otros poises:el 1,111(1 morco'''9istrodo deLinu. Tarvold.Debion es unomOfCO registrodo de Software in the Public Intefesl, Inc.SUSE es uno morco regiltrodo deSuSE AG. Mond'iva e. uno morco registroclo de Mondralesoft SA y """ondrolesoft CorporOlon. GNOME es unamorca registrado delo Fundacin GNOME. KDE, KDesltop Enviranment, es unomorco registrado deKDE e.V. Microsoft, Windows y VisualBosle son morcas registradas de Micros.oh es unomorco registrado de lo Junto de htremoduro. Java y todo.101 nomb