Está en la página 1de 48

FrameWork

Captulo 1

FrameWork

1.1 Framework La inversin de control: en un framework, a diferen-


cia de las bibliotecas, el ujo de control no es dictado
por el programa que llama, sino por el mismo.[2]
La palabra inglesa "framework" (infraestructura, arma-
zn, marco)[1] dene, en trminos generales, un conjunto La funcionalidad o comportamiento predetermina-
estandarizado de conceptos, prcticas y criterios para en- do: un marco tiene un comportamiento predetermi-
focar un tipo de problemtica particular que sirve como nado. Este comportamiento por defecto debe ser un
referencia, para enfrentar y resolver nuevos problemas de comportamiento til, denido e identicable.
ndole similar.
Su extensibilidad: un marco puede ser ampliado pa-
En el desarrollo de software, un framework o infraes- ra proporcionar una funcionalidad especca. El fra-
tructura digital, es una estructura conceptual y tecno- me, en general, no se supone que deba ser modica-
lgica de soporte denido, normalmente con artefactos o do, excepto en cuanto a extensibilidad. Los usuarios
mdulos concretos de software, que puede servir de base pueden ampliar sus caractersticas, pero no deben ni
para la organizacin y desarrollo de software. Tpicamen- necesitan modicar su cdigo.
te, puede incluir soporte de programas, bibliotecas, y un
lenguaje interpretado, entre otras herramientas, para as
ayudar a desarrollar y unir los diferentes componentes de 1.1.2 Bsicos
un proyecto.
No es ms que una base de programacin que atiende a
Representa una arquitectura de software que modela las
sus descendientes (manejado de una forma estructural y/o
relaciones generales de las entidades del dominio, y pro-
en cascada), posibilitando cualquier respuesta ante las ne-
vee una estructura y una especial metodologa de trabajo,
cesidades de sus miembros, o en secciones de una aplica-
la cual extiende o utiliza las aplicaciones del dominio.[2]
cin (web), satisfaciendo as las necesidades ms comu-
nes del programador.

1.1.1 Introduccin Arquitectura

Los frameworks tienen como objetivo principal ofrecer Dentro de este aspecto, podemos basarnos en el
una funcionalidad denida, auto contenida, siendo cons- modelovistacontrolador o MVC (Controlador => Mo-
truidos usando patrones de diseo, y su caracterstica delo => Vista), ya que debemos fragmentar nuestra
principal es su alta cohesin y bajo acoplamiento. Para programacin. Tenemos que contemplar estos aspectos
acceder a esa funcionalidad, se construyen piezas, obje- bsicos en cuanto a la implementacin de nuestro siste-
tos, llamados objetos calientes, que vinculan las necesi- ma:
dades del sistema con la funcionalidad que este presta.
Esta funcionalidad, est constituida por objetos llamados Modelo Este miembro del controlador maneja las ope-
fros, que sufren poco o ningn cambio en la vida del fra- raciones lgicas, y de manejo de informacin (pre-
mework, permitiendo la portabilidad entre distintos sis- viamente enviada por su ancestro), para resultar de
temas. Frameworks conocidos que se pueden mencionar una forma explicable y sin titubeos. Cada miembro
por ejemplo son Spring Framework, Hibernate, donde lo debe ser meticulosamente llamado, con su correcto
esencial para ser denominados frameworks es estar cons- nombre y en principio, con su verdadera naturale-
tituidos por objetos casi estticos con funcionalidad de- za: el manejo de informacin, su complementacin
nida a nivel grupo de objetos y no como parte constitutiva directa.
de estos, por ejemplo en sus mtodos, en cuyo caso se ha-
bla de un API o librera. Algunas caractersticas notables Vista Al nal, a este miembro de la familia le correspon-
que se pueden observar: de dibujar, o expresar la ltima forma de los datos:

2
1.1. FRAMEWORK 3

la interfaz grca que interacta con el usuario nal 1.1.4 Ejemplos


del programa (GUI). Despus de todo, a este miem-
bro le toca evidenciar la informacin obtenida hasta // Index.php // ----- // ------ Clases ------ class Ba-
hacerla llegar al controlador. Solo (e inicialmente), se {} class Controller extends Base { function
nos espera demostrar la informacin. load($name) { require_once $this->$name &= new
$name(); } } class Model extends Controller { fun-
ction view($name, $data) { extract($data); include
Controlador Con este apartado podemos controlar el
app/view/" . $name . ".php"; } } // ------ Router &
acceso (incluso todo) a nuestra aplicacin, y esto
Loader ------ function _route($controller, $model) { if
puede incluir: archivos, scripts, y/o programas; cual-
(is_le(app/$controller.php)) { require_once app/"
quier tipo de informacin que permita la interfaz.
. $controller . ".php"; $object = new $controller();
As, podremos diversicar nuestro contenido de for-
$object->$model(); } } // ----- Rutina ----- _rou-
ma dinmica, y esttica (a la vez); pues, solo debe-
te($_GET['section'], $_GET['name']);
mos controlar ciertos aspectos (como se ha mencio-
nado antes).
Esto cumple con algunas necesidades de simpleza infor-
mtica. Ahora solo nos basta controlar estos procesos,
Estructura ampliarlos y complementarles con algunos scripts ms.

Dentro del controlador, modelo o vista, se pueden ma-


Aplicar
nejar datos, y depende de cada uno cmo interpretar y
manejar esos datos. Se sabe que el nico dato de una di- Si nuestro archivo se llama Foo (clase), y nuestro otro
reccin esttica web es: conseguir un archivo fsico en el archivo, bar (mtodo) tenemos que crear el siguiente
disco duro o de Internet, etctera e interpretado o no, el archivo dentro de la carpeta app/.
servidor responde.
// app/Foo.php // ----- class Foo extends Controller {
El modelo, al igual que el controlador y la vista, maneja function __construct() { $this->load('Test'); } function
todos los datos que se relacionen consigo (solo es el pro- bar() { echo '<b>Testing</b>'; echo $this->test->does();
ceso medio de la separacin por capas que ofrece la ar- }}
quitectura MVC). Y solo la vista, puede demostrar dicha
informacin. Con lo cual ya se ha generado la jerarqua
de nuestro programa: Controlador, Modelo y Vista. Como resultado al solicitar (por ejemplo, ?sec-
tion=foo&name=bar), deberamos ver el siguiente
texto: Testing
1.1.3 Lgica
Extender
Al parecer, debemos inyectar ciertos objetos dentro de sus
parientes en esta aplicacin, solo as compartirn herencia Podremos extender nuestro sistema con clases, o funcio-
y coherencia en su aplicacin. nes propias o de algn 'plugin' o Biblioteca ajena. Solo
Rpidamente, para una aplicacin web sencilla debemos que queremos extenderles sobre nuestro sistema actual,
establecer estos objetos: nuestro objeto bsico.
// app/model/Test.php // ----- class Test extends Model
Una base (MVC) { function does() { echo '<ins>Hecho esta!</ins>'; echo
$this->view('look', array('my_var' => 'my_value')); } }
Controlador: este debe ser capaz de manejar
rutas, archivos, clases, mtodos y funciones. Entonces, debemos usar la siguiente sentencia dentro de
Modelo: es como un script habitual en el ser- nuestro programa Foo:
vidor, solo que agrupado bajo un 'modelo' re- $this->load($this, 'test') o _load($this, 'test')
utilizable.
Ya con esto, podremos utilizar las llamadas a $this-
Vista: como incluyendo cualquier archivo en >test->does() dentro del objeto o clase Foo.
nuestra ejecucin, muy simple.
Ver
Un sistema
Para mostrar los resultados de todo nuestro computo ne-
Ruteador: con l podemos dividir nuestras pe-
cesitamos de vistas, o archivos de inclusin: plantillas,
ticiones sin tantas condicionales.
bloques o scripts. Suponiendo que ya ha sido todo, de-
Cargador bemos de visualizarlo:
4 CAPTULO 1. FRAMEWORK

// app/view/Look.php // ----- echo 'Variable: ' . $my_var; fuente, un depurador, un compilador (y enlazador) y un
editor de interfaces grcas o GUI.
Para poder ejecutar esto, se debe llamar a esta sentencia: Visual basic di un paso mas en innovacin y ahora es
$this->view('look', array ('my_var' => 'my_value')) obte- posible programar aplicaciones Nativas para Android o
niendo como resultado: IPhone utilizando un software de la compaia Anywhe-
Variable: my_value re Software que transforma cdigo Visual Basic (creado
por dicha compaia) en APPs 100 % nativas en Java pa-
ra ambos sistemas operativos de dispositivos mviles. ver
1.1.5 Vase tambin (B4X Basic4Android & Basic4IPhone)

Dojo toolkit
1.2.1 Historia
Entorno de desarrollo integrado
Todas las versiones de Visual Basic para Windows son
Framework para aplicaciones web muy conocidas, aunque la Microsoft Visual Basic 1.0
desarrollada para el sistema operativo MS-DOS (edicio-
Marco de aplicaciones
nes Profesional y Estndar), que data de 1992, fue menos
Modelovistacontrolador difundida. Esta provea un entorno que, aunque en mo-
do texto, inclua un diseador de formularios en el que se
Plataforma podan arrastrar y soltar distintos controles.

Hamlets La ltima versin que slo generaba aplicaciones de 16


bits fue la 3.0, y no inclua una biblioteca detallada de
componentes para toda clase de usos. Durante la tran-
1.1.6 Referencias sicin de los sistemas Windows 3.11 a Windows 95, en
1995, hizo su aparicin la versin 4.0 de Visual Basic; s-
[1] http://www.wordreference.com/es/translation.asp? ta poda generar programas tanto de 16 como de 32 bits, a
tranword=framework partir del mismo cdigo fuente, aunque a costa de un gran
aumento en el tamao de los archivos necesarios en tiem-
[2] Riehle, Dirk (2000), Framework Design: A Role Modeling po de ejecucin (runtime). Adems, se sustituyeron los
Approach, Swiss Federal Institute of Technology
controles denominados VBX por los nuevos OCX. Con la
siguiente versin, la 5.0, se estuvo a punto de implemen-
tar por primera vez la posibilidad de compilar a cdigo
1.2 Visual Basic nativo, obteniendo una mejora de rendimiento conside-
rable. Tanto esa como la sucesora 6.0 soportaban ciertas
Visual Basic es un lenguaje de programacin dirigido por caractersticas propias de los lenguajes orientados a obje-
eventos, desarrollado por Alan Cooper para Microsoft. tos, pero carecan de algunas importantes, tales como he-
Este lenguaje de programacin es un dialecto de BASIC, rencia y sobrecarga; pero, de hecho, no fue pensado como
con importantes agregados. Su primera versin fue pre- lenguaje orientado a objetos. La versin 6.0, que puede
sentada en 1991, con la intencin de simplicar la progra- generar cdigo ejecutable directo en 32 bits, contina an
macin utilizando un ambiente de desarrollo que facilit utilizndose masivamente, y es compatible con las lti-
en cierta medida la programacin misma. mas versiones de los sistemas Windows, como Windows
7 y Windows 8.
La ltima versin fue la 6, liberada en 1998, para la que
Microsoft extendi el soporte hasta marzo de 2008. Visual Basic evolucion para integrar la plataforma
.NET; all perdi su propia identidad como lenguaje ni-
En 2001 Microsoft propuso abandonar el desarrollo ba- co adquirible, pasando a integrar un paquete de produc-
sado en la API Win32 y pasar a un framework o marco tos, llamado precisamente Microsoft .NET; dentro de
comn de libreras, independiente de la versin del siste- ese paquete o framework se encuentra el nuevo y lla-
ma operativo, .NET Framework, a travs de Visual Ba- mado Visual Basic .NET, que trabaja sobre el entorno
sic .NET (y otros lenguajes como C Sharp (C#) de fcil Microsoft Visual Studio. Esta nueva versin del lengua-
transicin de cdigo entre ellos); fue el sucesor de Visual je posee profundas diferencias en la forma de programar
Basic 6. respecto de Visual Basic 6, pero gran semejanza en su
Aunque Visual Basic es de propsito general, tambin sintaxis bsica.
provee facilidades para el desarrollo de aplicaciones de Cabe mencionar que, aunque fue menos conocido, se
bases de datos usando Data Access Objects, Remote Da- desarroll tambin una versin gratuita de Visual Basic
ta Objects o ActiveX Data Objects. 5.0, orientada al desarrollo de controles y componentes;
Visual Basic contiene un entorno de desarrollo integrado su nombre especco era Microsoft Visual Basic 5.0
o IDE que integra editor de textos para edicin del cdigo Control Creation Edition (Visual Basic 5 CCE). Tam-
1.2. VISUAL BASIC 5

bin hubo versiones orientadas al desarrollo de aplicacio- de 2008, pero a pesar de ello las aplicaciones que ge-
nes para dispositivos mviles basados en Windows CE y nera son compatibles con plataformas ms moder-
Pocket PC, conocidas como Embedded (Visual Basic). nas, como Windows Vista, Windows Server 2008,
Windows 7 y Windows 8.[2][3]

Versiones El soporte estndar para Microsoft Visual Ba-


sic 5.7 naliz el 31 de marzo de 2005, pero
Visual Basic 1.0 para Windows se liber en mayo de el extendido termin en marzo de 2008.[4] La
1991. comunidad de usuarios de Visual Basic expre-
s su grave preocupacin y se rm una peti-
Visual Basic 1.0 para MS-DOS fue liberada en sep- cin para mantener el producto vivo.[5] Micro-
tiembre de 1992. Poco popular, este lenguaje no soft se ha negado hasta el momento a cambiar
era compatible con Visual Basic para Windows, ya su posicin sobre el asunto. Irnicamente, en
que constitua en realidad la siguiente versin de los esa poca (2005) se da a conocer que el soft-
compiladores BASIC vigentes para DOS, denomi- ware antiespa ofrecido por Microsoft, Micro-
nados QuickBASIC y BASIC PDS (Profesional De- soft AntiSpyware (parte de la GIANT Com-
velopment System). Usaba una interfaz de texto, con pany Software), fue codicado en Visual Basic
caracteres ASCII extendidos que daban la aparien- 6.0; su posterior sustituto, Windows Defender,
cia de una interfaz grca. fue reescrito en cdigo C++.[6]
Visual Basic 2.0 fue liberado en noviembre de 1992.
Vena en versiones Standard y Professional. El en- 1.2.2 Caractersticas
torno de programacin era ms fcil de usar que el
anterior, y su velocidad de proceso fue mejorada. Los compiladores de Visual Basic generan cdigo que re-
En particular, los formularios se convirtieron en ob- quiere una o ms libreras de enlace dinmico para que
jetos instanciables, sentando as los conceptos fun- funcione, conocidas comnmente como DLL (sigla en in-
damentales para mdulos de clase, que ms tarde se gls de dynamic-link library ); en algunos casos reside en
ofreceran en la versin 4. el archivo llamado MSVBVMxy.DLL (siglas de Micro-
Soft Visual Basic Virtual Machine x.y, donde x.y es la
Visual Basic 3.0 sali al mercado en verano de 1993,
versin) y en otros en VBRUNXXX.DLL (Visual Ba-
en versiones Standard y Profesional. Inclua la ver-
sic Runtime X.XX). Estas bibliotecas DLL proveen las
sin 1.1 de Microsoft Jet Database Engine, que per-
funciones bsicas implementadas en el lenguaje, conte-
mita acceso a bases de datos Access.
niendo rutinas en cdigo ejecutable que son cargadas ba-
Visual Basic 4.0, surgida en agosto de 1995, fue la jo demanda en tiempo de ejecucin. Adems de las esen-
primera versin que generaba aplicaciones tanto de ciales, existe un gran nmero de bibliotecas del tipo DLL
16 como de 32 bits para Windows. Haba incompa- con variedad de funciones, tales como las que facilitan el
tibilidades entre las distintas realeases de esta ver- acceso a la mayora de las funciones del sistema operati-
sin que causaban fallas de instalacin y problemas vo o las que proveen medios para la integracin con otras
de operacin. Mientras las anteriores utilizaban con- aplicaciones.
troles VBX, con la 4.0 se comenzaron a utilizar con- Dentro del mismo Entorno de desarrollo integrado (IDE)
troles OLE en archivos OCX, que ms tarde se lla- de Visual Basic se puede ejecutar el programa que est
maran controles ActiveX. desarrollndose, es decir en modo intrprete (en realidad
pseudo-compila el programa muy rpidamente y luego
En febrero de 1997, Microsoft lanz Visual Basic lo ejecuta, simulando la funcin de un intrprete puro).
5.0, versin que generaba programas de 32 bits ex- Desde ese entorno tambin se puede generar el archivo
clusivamente. Los programadores que an preferan en cdigo ejecutable (exe); ese programa as generado en
desarrollar aplicaciones en 16 bits deban necesaria- disco puede luego ser ejecutado sin requerir del ambiente
mente utilizar VB 4.0, siendo transportables en c- de programacin (incluso en modo stand alone), aunque
digo fuente a VB 5.0 y viceversa. En la versin 5 se s ser necesario que las libreras DLL requeridas por la
tena la posibilidad de crear controles personaliza- aplicacin desarrollada se encuentren tambin instaladas
dos; tambin permita compilar a cdigo ejecutable en el sistema para posibilitar su ejecucin.
nativo de Windows, logrando con ello incrementar
la velocidad de ejecucin de los programas genera- El propio Visual Basic provee soporte para empaquetado
dos, ms notablemente en los de clculo. y distribucin; es decir, permite generar un mdulo ins-
talador que contiene al programa ejecutable y las biblio-
Visual Basic 6.0, salido a mediados de 1998, muy tecas DLL necesarias para su ejecucin. Con ese mdulo
mejorado, increment el nmero de reas[1] e inclu- la aplicacin desarrollada se distribuye y puede ser insta-
y la posibilidad de crear aplicaciones basadas en lada en cualquier equipo (que tenga un sistema operativo
Web. Microsoft retir el soporte de VB6 en marzo compatible).
6 CAPTULO 1. FRAMEWORK

As como bibliotecas DLL, hay numerosas aplicaciones DirListBox: Lista de directo-


desarrolladas por terceros que permiten disponer de va- rios
riadas y mltiples funciones, incluso mejoras para el pro- FileListBox: Lista de archivos
pio Visual Basic; las hay tambin para el empaquetado y Shape: Figura
distribucin, y hasta para otorgar mayor funcionalidad al
Line: Lnea
entorno de programacin (IDE).
Image: Imagen
Data: Conexin a origen de da-
Entorno de desarrollo Existe un nico entorno de tos
desarrollo para Visual Basic, desarrollado por Microsoft:
OLE: Contenedor de docu-
Microsoft Visual Basic x.0, correspondientes a versio-
mentos embebidos compati-
nes desde la 2.0 hasta la 20.0, (con respectivas diferencias
bles con Object Linking and
entre versiones del lenguaje).
Embedding
El entorno de desarrollo es muy similar al de otros len-
guajes. Realizando una instalacin tpica del producto, las Adems de los listados, se pueden
caractersticas bsicas se presentan de la siguiente forma: agregar todo tipo de controles de
terceros, y hay una gran cantidad de
En la parte superior aparecen tres elementos, en este ellos que se proveen con el propio
orden: la barra de ttulo donde gura el nombre del Visual Basic 6.0. Los controles vie-
proyecto en curso y su estado (diseo o ejecucin); nen embebidos dentro de archivos
la barra de men con 13 opciones desplegables y una con extensin OCX.
barra de herramientas; esta ltima se puede perso-
nalizar, posibilitando la inclusin de prcticamente
Las ventanas de proyecto, aunque mvi-
la totalidad de los comandos del IDE.
les, se encuentran en el panel lateral de-
recho y contienen dos vistas principales:
En la parte central, cubriendo la franja de mayor
rea, se encuentra el espacio de trabajo. ste inclu- El Explorador de proyectos,
ye y muestra las ventanas del proyecto, las vistas del que muestra todos los elemen-
cdigo fuente de los mdulos, los objetos y los con- tos que componen el proyec-
troles que contienen las ventanas de la aplicacin y to o grupos de proyectos (for-
el panel de controles. mularios, interfaz de contro-
les, mdulos de cdigo, mdu-
El panel de controles, que aunque es m- los de clase, etc.)
vil normalmente est ubicado a la dere- El Panel de propiedades,
cha, por defecto cuenta con los siguientes donde se muestran todos los
controles: atributos de los objetos, con-
troles, formularios, informa-
PictureBox: Caja de imgenes cin de mdulos clase, entre
Label: Etiqueta muchos otros.
TextBox: Caja de texto
Frame: Marco La Ventana inmediato, por defecto se encuentra
CommandButton: Botn de en la parte inferior, aunque puede no estar visible
comando (se presionan las teclas Ctrl+G, en ese caso, para
CheckBox: Casilla de verica- mostrar la ventana). Esta ventana resulta una herra-
cin mienta muy til a la hora de depurar el programa
OptionButton: Botn de op- o bien para realizar pruebas rpidas, ya que permite
cin imprimir mensajes de texto desde el cdigo y ejecu-
tar sentencias y comandos simples inmediatamente
ComboBox: Lista desplegable
(slo sentencias que se puedan escribir en una so-
ListBox: Lista la lnea). Por ejemplo, de la aplicacin en curso, se
HScrollBar: Barra de despla- puede consultar el valor de una variable o llamar a
zamiento horizontal un mtodo declarado en el mdulo que se est de-
VScrollBar: Barra de despla- purando. Se puede ejecutar cdigo al vuelo, por
zamiento vertical ejemplo con sentencias como:
Timer: Temporizador
DriveListBox: Lista de unida- ? sqr(2)
des de disco
1.2. VISUAL BASIC 7

siendo el signo ? un reemplazo natural del co- LostFocus: contrario al anterior, este
mando Print en Basic, al ejecutar la sentencia evento ocurre cuando el objeto pierde el
se mostrara por pantalla el valor de la raz cua- enfoque, sea mediante accin del usuario
drada de 2. Tambin se pueden usar variables o efectuado desde la aplicacin.
del propio programa, o sentencias de cdigo ta- KeyDown: ocurre cuando el usuario man-
les como: tiene presionada una tecla.
KeyUp: ocurre cuando el usuario deja de
Msgbox Prueba de cuadro de mensaje de presionar una tecla. Este evento sucede
error., vbCritical, Ttulo del mensaje precisamente al terminar el evento Key-
Down.
KeyPress: ocurre como cuando se presio-
A la hora de la depuracin puede ser til para na y suelta una tecla.
consultar el valor de variables del programa, o
MouseDown: ocurre cuando el usuario
el cdigo de error como:
presiona un botn del mouse.
MouseUp: se produce cuando el usuario
? Err.Number suelta el botn del mouse.
MouseMove: este evento ocurre mientras
el usuario mueve o desplaza el puntero del
1.2.3 Objetos y eventos mouse sobre un objeto.

Se designa como objeto cualquier elemento, por ejemplo, Imagnese un auto como un objeto; el auto tiene diversas
un formulario, una imagen, un control, tal como una ca- propiedades como color, modelo, etc. Algunas con slo
ja de texto; a su vez, los objetos tienen propiedades, que 2 posibles valores, como encendido y apagado, incluso
en el caso de la caja de texto una es la propiedad text otras que a simple vista no se ven, como podra ser la
que se encarga de contener el texto que aparecer en la cantidad de gasolina. Para denir el color de este objeto
caja. A los objetos se les puede asociar eventos. Un even- Auto, segn Visual Basic, se hara de la siguiente manera:
to es la ocurrencia de un suceso, comnmente la accin Auto.color = rojo
que realiza el usuario sobre el objeto, que como resultado
puede, por ejemplo, provocar un cambio en alguna pro- y para denirle un evento podra ser como el siguiente
piedad de un objeto. Por ejemplo: Visual Basic tiene un ejemplo:
evento llamado KeyPress, que ocurre cuando el usuario Sub girarllave( ) Auto.encendido=true end sub.
presiona una tecla; ese evento se puede asociar a la caja
de texto, y en l denir (por programacin) qu accin
se tomar cuando se oprima una tecla. 1.2.4 Ejemplo de cdigo
En sntesis, un objeto posee propiedades, responde a
El siguiente fragmento de cdigo muestra un cuadro de
eventos y puede ejecutar mtodos asociados a l.
mensaje, en una ventana, que dice "Hola, mundo!":
Algunos eventos comunes denidos en Visual Basic son:
Private Sub Form_Load() MsgBox ("Hola, mundo!")
End Sub
Click: ocurre cuando se presiona y suelta
un botn del mouse sobre un objeto.
DblClick: ocurre cuando se presiona y
1.2.5 Ventajas
suelta dos veces un botn del mouse so-
bre un objeto. Posee una curva de aprendizaje muy rpida.
DragDrop: ocurre al arrastrar y soltar un
Integra el diseo e implementacin de formularios
determinado objeto con el mouse.
de Windows.
DragOver: ocurre si una operacin de
arrastrar y soltar est en curso. Permite usar con facilidad la plataforma de los siste-
mas Windows, dado que tiene acceso prcticamente
GotFocus: ocurre cuando un objeto reci- total a la API de Windows, incluidas libreras actua-
be el control o foco, ya sea mediante una les.
accin del usuario como hacer click en
un objeto ventana, o cambiando el foco Es uno de los lenguajes de uso ms extendido, por lo
de objeto desde el programa, mediante el que resulta fcil encontrar informacin, documenta-
mtodo SetFocus. cin y fuentes para los proyectos.
8 CAPTULO 1. FRAMEWORK

Fcilmente extensible mediante libreras DLL y Otras opciones conocidas son Real Basic o PureBasic,
componentes ActiveX de otros lenguajes. que permiten desarrollar bajo Windows, Linux, Mac
OS e independientemente. PureBasic permite desarrollar
Posibilita aadir soporte para ejecucin de scripts, tambin para Amiga OS. A diferencia de Gambas, estas
VBScript o JScript, en las aplicaciones mediante son soluciones comerciales y no son libres.
Microsoft Script Control.
Tiene acceso a la API multimedia de DirectX (ver-
siones 7 y 8). Tambin est disponible, de forma no
1.2.8 Referencias
ocial, un componente para trabajar con OpenGL [1] Whats new in VB6?. www.insteptech.com.
1.1.[7]
[2] Al Tenhundfeld. Visual Basic 6.0 to be Supported on
Existe una versin, VBA, integrada en las aplicacio- Windows 7. The Register.
nes de Microsoft Oce, tanto Windows como Mac,
que permite programar macros para extender y au- [3] Support Statement for Visual Basic 6.0 on Win-
tomatizar funcionalidades en documentos, hojas de dows Vista, Windows Server 2008 and windows 7.
clculo y bases de datos (Access). Msdn.microsoft.com.

Si bien permite desarrollar grandes y complejas [4] Product Family Life Cycle Guidelines for Visual Basic
6.0. Msdn2.microsoft.com.
aplicaciones, tambin provee un entorno adecuado
para realizar pequeos prototipos rpidos. [5] Petition to Microsoft. Classicvb.org. Archivado desde
el original el 29 de noviembre de 2015.

1.2.6 Desventajas [6] Andrew Orlowski and Carey Bishop. MS Anti-Spyware


built on MS Abandonware. The Register.
Las crticas hechas en las ediciones de Visual Basic ante-
[7] VBOpenGL type library. Archivado desde el original el
riores a VB.NET son variadas;[8] se citan entre ellas:
29 de noviembre de 2015.

Problema de versionado asociado con varias libre- [8] Alex Homer, Dave Sussman, Rob Howard, Brian Fran-
ras runtime DLL, conocido como DLL Hell cis, Karli Watson, Richard Anderson (2004). Professional
ASP.NET 1.1. Wiley. ISBN 0764558900.
Soporte pobre para programacin orientada a
[9] Marc D'Aoust. Avoid Writing Tedious, Boring Code.
objetos[9]
Microsoft.
Incapacidad para crear aplicaciones multihilo, sin
[10] Andrew Troelsen (2008). Pro VB 2008 and the .NET 3.5
tener que recurrir a llamadas de la API de Windows. Platform: The experts voice in .NET. Apress. p. 5. ISBN
Dependencia de complejas y frgiles entradas de re- 1590598229.
gistro COM[10]
La capacidad de utilizar controles en un slo for- 1.2.9 Enlaces externos
mulario es muy limitada en comparacin a otras he-
rramientas. DLL Hell DB, Libro Programando en Visual Basic 2005 Express Edition - Sitio web de la
Visual Basic,2002 edicin gratis de Visual Basic .NET

Service Pack 6 para Visual Basic 6.0: Paquete de


1.2.7 Alternativas multiplataforma o ex- redistribucin de archivos de tiempo de ejecucin
(vbrun60sp6.exe) en Microsoft
ternas a Windows
Microsoft Visual Basic 6.0 Common Controls en
Existen mltiples alternativas dentro y fuera de Windows Microsoft
que intentan imitar este lenguaje y su mecnica de desa-
rrollo. El ms conocido y popular es Gambas: VB 6.0 en MSDN

Visual Basic en Open Directory Project.


Gambas es un proyecto libre para implementar pro-
gramacin visual con Basic en GNU/Linux. Est
derivado principalmente de Visual Basic, adaptn-
dose a partir de su lenguaje y su entorno de desa- 1.3 Microsoft SQL Server
rrollo, para implementar su propia variante, par-
cialmente compatible con Visual Basic, aportando Microsoft SQL Server es un sistema de manejo de ba-
y enriqueciendo con las oportunidades que brinda ses de datos del modelo relacional, desarrollado por la
GNU/Linux. empresa Microsoft.
1.3. MICROSOFT SQL SERVER 9

El lenguaje de desarrollo utilizado (por lnea de coman- En el manejo de SQL mediante lneas de comando se uti-
dos o mediante la interfaz grca de Management Studio) liza el SQLCMD, osql, o PowerShell.
es Transact-SQL (TSQL), una implementacin del estn- Para el desarrollo de aplicaciones ms complejas (tres o
dar ANSI del lenguaje SQL, utilizado para manipular y ms capas), Microsoft SQL Server incluye interfaces de
recuperar datos (DML), crear tablas y denir relaciones acceso para varias plataformas de desarrollo, entre ellas
entre ellas (DDL). .NET, pero el servidor slo est disponible para Sistemas
Dentro de los competidores ms destacados de SQL Operativos.
Server estn: Oracle, MariaDB, MySQL, PostgreSQL. El tipo NUMERIC fue mejorado para ser usado como
SQL Server solo est disponible para sistemas operativos identicador de columna a partir de la versin 2008 R2.
Windows de Microsoft.
Puede ser congurado para utilizar varias instancias en el
mismo servidor fsico, la primera instalacin lleva gene- 1.3.3 Programacin
ralmente el nombre del servidor, y las siguientes - nom-
bres especcos (con un guion invertido entre el nombre T-SQL
del servidor y el nombre de la instalacin).
T-SQL (Transact-SQL) es el principal medio de interac-
cin con el Servidor, el cual permite realizar las operacio-
1.3.1 Versiones nes claves en SQL Server, incluyendo la creacin y mo-
dicacin de esquemas de base de datos, insercin y mo-
El cdigo fuente original de SQL Server que fue utilizado dicacin de datos en la base de datos, as como la admi-
en las versiones previas a la versin 7.0 habra sido com- nistracin del servidor como tal. Esto se realiza mediante
prado de Sybase, pero fue actualizado en las versiones 7.0 el envo de sentencias en T-SQL y declaraciones que son
y 2000, y reescrito en la versin 2005. Generalmente, ca- procesadas por el servidor y los resultados (o errores) re-
da 2-3 aos, una nueva versin es lanzada y, entre estos gresan a la aplicacin cliente.
lanzamientos, se proponen service packes con mejoras y
correcciones de bugs, y hotxes por problemas urgentes
en el sistema de seguridad o bugs crticos. Cliente Nativo de SQL

Cliente Nativo de SQL, es la biblioteca de acceso a datos


1.3.2 Caractersticas para los clientes de Microsoft SQL Server versin 2005
en adelante. Implementa de forma nativa soporte para las
Soporte de transacciones. caractersticas de SQL Server, incluyendo la ejecucin de
Soporta procedimientos almacenados. la secuencia de datos tabular, soporte para bases de datos
en espejo de SQL Server, soporte completo para todos los
Incluye tambin un entorno grco de administra- tipos de datos compatibles con SQL Server, conjuntos de
cin, que permite el uso de comandos DDL y DML operaciones asncronas, las noticaciones de consulta, so-
grcamente. porte para cifrado, as como recibir varios conjuntos de
resultados en una sola sesin de base de datos. Cliente
Permite trabajar en modo cliente-servidor, donde la
Nativo de SQL se utiliza como extensin de SQL Server
informacin y datos se alojan en el servidor y los
plug-ins para otras tecnologas de acceso de datos, inclu-
terminales o clientes de la red slo acceden a la in-
yendo ADO u OLE DB. Cliente Nativo de SQL puede
formacin.
tambin usarse directamente, pasando por alto las capas
Adems permite administrar informacin de otros de acceso de datos.
servidores de datos.

Este sistema incluye una versin reducida, llamada


1.3.4 Ediciones y servicios
MSDE con el mismo motor de base de datos pero orienta-
Cada versin de SQL Server posee distintas versiones con
do a proyectos ms pequeos, que en sus versiones 2005 y
distintos precios (para cada versin) que dependen tam-
2008 pasa a ser el SQL Express Edition, que se distribuye
bin en la conguracin fsica del servidor. [10] A conti-
en forma gratuita.
nuacin se presentan las versiones principales:
Es comn desarrollar proyectos completos empleando
Microsoft SQL Server y Microsoft Access a travs de los
llamados ADP (Access Data Project). De esta forma se Enterprise
completa la base de datos (Microsoft SQL Server), con el
entorno de desarrollo (VBA Access), a travs de la imple- Contempla todas las caractersticas (deshabilitadas en
mentacin de aplicaciones de dos capas mediante el uso otras ediciones).Es el tipo de versin con ms privilegios
de formularios Windows. existente en el mercado.
10 CAPTULO 1. FRAMEWORK

Developer Este servicio esta otorgado por Microsoft desde 2009 y


se une a servicios similares de empresas de third-party.
Una edicin con las mismas caractersticas que la Enter-
prise, con el n de ser instalada solamente en ambiente de
desarrollo y no en produccin. Si se desarrolla para una 1.3.5 Interfaz de usuario
edicin Standard hay que tener en cuenta las caractersti-
cas deshabilitadas para esta versin. SQL Server proporciona unos interfaz que han cambia-
do durante los aos, de los cuales los ms conocidos
son los interfaz grcos que estn utilizados como he-
Standard rramienta de desarrollo estndar a los desarrolladores y
administradores.
Una versin limitada segn la conguracin del servidor La interfaz grca hasta 2005 incluy el Enterprise Ma-
y sus caractersticas, diseada para servidores inferiores. nager con una vista de rbol de los distintos objetos y con
Por ejemplo: en la versin 2012, la edicin Enterprise so- la capacidad de manejarlos; y el Query analyzer como in-
porta un nmero ilimitado de procesadores, y la agrega- terfaz textual para ejecutar comandos de TSQL.
cin de memoria y CPUs en caliente sin la interrupcin En la versin 2005 las dos herramientas se unicaron a
del servicio o del servidor; mientras la edicin Standard una el SQL Server Management Studio (SSMS), y a par-
esta limitada a 16 procesadores y no soporta la agrega- tir de 2008 fue incluida la opcin de trabajar con el Visual
cin en caliente. Studio la interfaz estndar de desarrollo de Microsoft (a
los distintos lenguajes, BI, etc.). Otro interfaz opcional
es la utilizacin de Lnea de comandos, con herramientas
Express como SQLCmd, ISQL, OSQL que posibilita la ejecucin
de scripts y procesamiento por lotes. Desde 2008 se pue-
Una versin gratuita que posibilita la creacin de bases de desarrollar con SQLCmd (SQL Command) a travs
de datos limitadas con caractersticas bsicas, con el n del SSMS sin interconectarse al interfaz textual de Win-
de apoyar aplicaciones que necesiten una solucin simple dows. Otra opcin en el mbito de scripts es la utilizacin
para almacenamiento de una cantidad limitada de datos, del lenguaje de scripts Powershell de Microsoft.
o usuarios que sus recursos y necesidades son limitados.
Aparte de los intefazes estndares de SQL Server, se pue-
En la versin 2012, esta edicin puede utilizar un mxi- de ejecutar comandos de TSQL con herramientas de co-
mo de 1 GB de memoria, y almacenar no ms de 10GB, nexin como ODBC y OLE-DB.[11]
funciona en servidores con un nmero mximo de cuatro
procesadores. Estas limitaciones se mantienen en la ver-
sin 2014 (4 cores, 1GB ram, y 10Gb por base de datos). 1.3.6 Servicios

A contrario de sistemas de bases de datos como Microsoft


SQL Azure Access que son pasivas y contienen un archivo a cual
hay que conectar y la ejecucin de los comandos se lleva
Es una versin de SQL Server en la nube, que permite a cabo en el cliente (la computadora de usuario), en SQL
pagar mensualmente por el servicio sin la necesidad de Server hay nmero de servicios, software que estn ejecu-
mantener un servidor fsico (On Premise). La empresa tadas en la memoria del servidor por parte del sistema, y
paga solo por el servicio, y el servicio es manejado a travs por lo tanto aprovechan las capacidades del servidor que
de torres de servidores en distintos lugares en el mundo. es ms potente que los clientes, previenen congestin en
Con SQL Azure no es necesario instalar, mantener o ac- la red, y pueden programar tareas que corran an el clien-
tualizar un servidor fsico; a pesar que este servicio de- te no est conectado.
pende de aspectos relacionados a problemas de seguridad Los servicios principales:
con respecto a su presencia fuera de la empresa y a la dis-
ponibilidad de conexin a Internet. SQL Server - El motor del sistema
Durante un tiempo, el servicio fue ampliado con la opcin
de crear un servidor virtual por la red, e instalar SQL Ser- SQL Agent - Ejecucin de tareas (Jobs, scripts pro-
ver tanto como uno de los servicios competidores, y ma- gramados) y envi de advertencias en caso de carga
nejar el servidor virtual como si fuera un servidor fsico pesada e irregulares en el sistema
local (aunque fsicamente no est accesible); y se puede Full-Text Filter Daemon Launcher - La utiliza-
diferenciar entre la opcin original que esta denomina- cin en los indexes especiales del Full text search
da PAAS (Platform as a Service: El Plataforma como un por bsqueda textual avanzada
Servicio) y la nueva opcin de los servidores virtuales de-
nominada IAAS (Infrastructure as a Service, Infraestruc- SQL Browser - El oyente dedicado a comandos
tura como un Servicio). enviados y redirigirlos a su destino
1.3. MICROSOFT SQL SERVER 11

SSIS Server - La operacin del SSIS (la herramien- divide en las y columnas (A veces se les conoce como
ta de ETL) registros y campos). Las tablas pueden ser jas o tempo-
rales, mientras que en el segundo caso existen fsicamente
SSAS Server - La operacin del SSAS (la herra-
en la base de datos tempdb, y se borran automticamente
mienta de OLAP)
en caso de desconexin de la sesin o de la conexin al
SSRS Server - La operacin del SSRS (la herra- servidor, depende en el tipo de la tabla temporal.
mienta de informes) Desde la perspectiva fsica, el sistema divide los archivos
de la base datos en Extents de 64 KB, y cada cual a ocho
1.3.7 Capacidades y herramientas bsicas pginas de 8 KB. Generalmente, cada Extent se asigna a
una tabla o un ndice, menos las tablas pequeas; y cada
Bases de datos pgina se asigna siempre a una tabla especca. El sistema
es responsable del aumento de los archivos, de acuerdo
En cada instalacin de SQL Server hay 4 bases de datos con los ajustes del usuario, y de asignar Extents y pginas
de sistema, y la capacidad de crear nuevas bases de datos a las tablas.
por el usuario, en los cuales los datos estn almacenados A las tablas se puede crear ndices. Los ndices se alma-
en tablas. cenan junto a la tabla (Non Clustered Index) o son la tabla
Estas bases de datos, creadas por parte de los usuarios, en s (Clustered Index). Los ndices asisten en la bsqueda
incluyen bsicamente un archivo de datos (con el sujo de datos en las tablas (como los cheros en las libreras),
mdf) con las tablas y los distintos objetos a nivel de la en ordenarlas, y la denicin de claves primarias.
base de datos; y un archivo de registro (con el sujo ldf) Entre las tablas se puede crear una relacin de uno a mu-
con las transacciones abiertas, y transacciones cerradas, chos.
Sujeto al modelo de recuperacin seleccionado (se puede
Aparte de las tablas de los usuarios, hay tablas que alma-
acumular en el archivo de registro todos los cambios en la
cenan meta data: datos sobre el sistema mismo, los dife-
base de datos desde el ltimo respaldo). Se puede crear un
rentes objetos, los derechos, estadsticas sobre el rendi-
conjunto de archivos de datos adems del principal (con
miento del sistema (DMV), etc.
el sujo ndf) por consideraciones de eciencia, particin
de carga de trabajo entre los discos rgidos, etc.
Las bases de datos del sistema: Tipos de datos

master - Todos los procedimientos, funciones y ta- Para cada columna en una tabla y a cada variable o par-
blas del sistema que estn utilizadas por parte de to- metro, se dene un tipo de datos que sean almacenados
das las bases de datos y que estn instaladas autom- en l, entre ellos:
ticamente, tanto como las que han sido creado por
parte de los administradores del sistema. Adems, 1. Numeros: Nmeros enteros y no enteros en distin-
todas las deniciones en respecto a la seguridad a tos tamaos, y en diferentes niveles de precisin; y
nivel del servidor, estn almacenadas en esta base auto incremento opcional.
de datos. 2. Textos: Cadenas de distintas longitudes, y distintas
msdb - Almacenamiento de las tareas del agente, capacidades de apoyar distintas lenguas.
los cdigos de CLR combinados en el sistema, los 3. Fechas: Fechas en distintos niveles de precisin,
paquetes de SSIS, y otros ms. desde das completos hasta fracciones menores de
model - El molde de las bases de datos. Cada nueva un segundo, que apoyan fechas a partir del principio
base de datos se crea como una copia de esta base del siglo 20 o del calendario gregoriano, y la capaci-
de datos, menos que algo ms estaba denido expl- dad de diferenciar entre distintos usos de horarios.
citamente. 4. XML: Datos textuales (cadenas) que representan
tempdb - Base de datos temporal que se crea de conjuntos estndares de datos (estndar SGML).
nuevo cada vez que el servicio reinicia. Se utiliza
5. Datos binarios: Datos almacenados como datos bi-
para almacenar tablas temporales creadas por parte
narios (bits y bytes), que posibilitan el almacena-
de los usuarios o el sistema (por ejemplo en ordena-
miento de archivos grcos, etc.
ciones complejos).
6. Geography: Representacin estndar de informa-
cin geogrca, tales como estados, zonas geogr-
Tablas jas y temporales
cas, localidades; y las clculos como distancias.
Desde la perspectiva lgica, los datos almacenados en las 7. Geometry: Representacin estndar de puntas, l-
bases de datos en tablas, que mediante ellas se implemen- neas, supercies en el plano; y las relaciones entre
ta la teora de las bases de datos relacionales. La tabla se ellas.
12 CAPTULO 1. FRAMEWORK

8. Hierarchid: Representacin estndar de parmetro, y actualiza una tabla de resumen de ventas,


informacin jerrquica como lista de materia- con las ventas de los agentes en el dicho ao, basada en la
les, relaciones de subordinacin entre empleados, tabla de registro de ventas.
etc. Los procedimientos almacenados pueden facilitar en
gran medida la administracin de la base de datos y la
Vistas visualizacin de informacin sobre dicha base de datos
y sus usuarios. Los procedimientos almacenados son
Las vistas representan generalmente comandos de extrac- una coleccin precompilada de instrucciones SQL e
cin de datos, que se almacenan sin los datos (que es- instrucciones de control de ujo opcionales almacenadas
tn almacenados en las tablas). Esta opcin nos posibilita bajo un solo nombre y procesadas como una unidad.
crear extracciones complejas o estndares, almacenarlas Los procedimientos almacenados se guardan en una
como vistas, y utilizar las vistas sin la necesidad de escri- base de datos; se pueden ejecutar desde una aplicacin y
bir de nuevo los comandos o mantener los cdigos donde permiten variables declaradas por el usuario, ejecucin
ellas aparecen. Adicionalmente, es un medio muy impor- condicional y otras funciones ecaces de programacin.
tante para otorgar derechos selectivos de lectura (en caso Los procedimientos almacenados pueden contener ujo
que queremos posibilitar a un usuario contemplar parcial- de programas, lgica y consultas a la base de datos.
mente las columnas o las las de una tabla). Pueden aceptar parmetros, proporcionar resultados de
parmetros, devolver conjuntos de resultados individua-
Una vista se puede considerar una tabla virtual o una con-
les o mltiples y devolver valores.
sulta almacenada. Los datos accesibles a travs de una
vista no estn almacenados en un objeto distinto de la ba-
se de datos. Lo que est almacenado en la base de datos es Las ventajas de utilizar procedimientos almacenados en
una instruccin SELECT. El resultado de la instruccin SQL Server en vez de programas Transact-SQL almace-
SELECT forma la tabla virtual que la vista devuelve. El nados localmente en equipos clientes consisten en que:
usuario puede utilizar dicha tabla virtual haciendo refe- Permiten una programacin modular.
rencia al nombre de la vista en instrucciones Transact- Puede crear el procedimiento una vez, almacenarlo en la
SQL, de la misma forma en que se hace referencia a las base de datos, y llamarlo desde el programa el nmero
tablas. Las vistas se utilizan para alguna de estas funcio- de veces que desee. Un especialista en programacin de
nes, o para todas: bases de datos puede crear procedimientos almacenados,
Restringir el acceso del usuario a las concretas de una que luego ser posible modicar independientemente del
tabla. Por ejemplo, permitir que un empleado slo vea las cdigo fuente del programa. Facilitan el mantenimiento.
las que guardan su trabajo en una tabla de seguimiento Permiten una ejecucin ms rpida.
de actividad laboral. En situaciones en las que se necesita una gran cantidad
Restringir el acceso del usuario a columnas especcas. de cdigo Transact-SQL, o si las operaciones se realizan
Por ejemplo, permitir que los empleados que no traba- varias veces, los procedimientos almacenados pueden ser
jen en el departamento de nminas vean las columnas de ms rpidos que los lotes de cdigo Transact-SQL. Los
nombre, ocina, telfono y departamento de la tabla de procedimientos son analizados y optimizados en el mo-
empleados, pero no permitir que vean las columnas con mento de su creacin, y es posible utilizar una versin del
los datos de salario u otra informacin personal. procedimiento que se encuentra en la memoria despus
Combinar columnas de varias tablas de forma que pa- de que se ejecute por primera vez. Las instrucciones de
rezcan una sola tabla. Transact-SQL que se envan varias veces desde el cliente
Agregar informacin en lugar de presentar los detalles. cada vez que deben ejecutarse tienen que ser compiladas
Por ejemplo, presentar la suma de una columna o el valor y optimizadas siempre que SQL Server las ejecuta.
mximo o mnimo de una columna. Pueden reducir el trco de red.
Las vistas se crean deniendo la instruccin SELECT que Una operacin que necesite centenares de lneas de c-
recupera los datos presentados por la vista. Las tablas de digo Transact-SQL puede realizarse mediante una sola
datos a las que hace referencia la instruccin SELECT se instruccin que ejecute el cdigo en un procedimiento,
conocen como las tablas base para la vista. Las vistas en en vez de enviar cientos de lneas de cdigo por la red.
todas las versiones de SQL Server son actualizables (pue- Pueden utilizarse como mecanismo de seguridad.
den ser objetivo de instrucciones UPDATE, DELETE o Es posible conceder permisos a los usuarios para ejecutar
INSERT) mientras la modicacin afecte slo a una de un procedimiento almacenado, incluso si no cuentan con
las tablas base de la vista. permiso para ejecutar directamente las instrucciones del
procedimiento.

Procedimientos almacenados
Funciones denidas por el usuario
Los procedimientos son scripts de comandos de TSQL,
que pueden ser ejecutados con distintos parmetros. Por Las funciones son un objeto que combina algunas capaci-
ejemplo, procedimiento que obtiene nmero de ao como dades de las vistas, con otras de los procedimientos. Co-
1.3. MICROSOFT SQL SERVER 13

mo las vistas, pueden extraer datos y ejecutar clculos, y Transact-SQL, SQL Server 2000 permite que se haga re-
devuelven un resultado al usuario o al programa que les ferencia a los conjuntos de las de los proveedores OLE
ejecuto. Tanto como los procedimientos, incluyen cdi- DB como si fueran una tabla de SQL Server. En las ins-
gos de TSQL, y pueden ser ejecutados con parmetros. trucciones SELECT, INSERT, UPDATE y DELETE de
Las funciones devuelven un valor o un conjunto de valo- Transact-SQL, se puede hacer referencia directa a las ta-
res. blas y vistas de orgenes de datos externos. Puesto que las
consultas distribuidas usan OLE DB como interfaz subya-
Las funciones denidas por el usuario se crean con cente, stas tienen acceso a los sistemas DBMS relaciona-
la instruccin CREATE FUNCTION, se modi- les tradicionales con procesadores de consultas SQL, as
can con la instruccin ALTER FUNCTION y como a los datos administrados por orgenes de datos de
se quitan con la instruccin DROP FUNCTION. capacidad y sosticacin diversas. Siempre que el soft-
Todos los nombres de funciones completos (databa- ware propietario de los datos los expone en un conjunto
se_name.owner_name.function_name) denidos por el de las tabular a travs del proveedor OLE DB, los datos
usuario deben ser nicos. Para crear, modicar o quitar se podrn usar en las consultas distribuidas. Nota: El uso
funciones denidas por el usuario, debe tener permisos de las consultas distribuidas en SQL Server es similar a la
de CREATE FUNCTION. Los usuarios distintos del funcionalidad de las tablas vinculadas mediante ODBC,
propietario deben tener permiso EXECUTE para una que anteriormente admita Microsoft Access. Esta fun-
funcin, y solo as podrn utilizarla en una instruccin cionalidad se encuentra ahora integrada en SQL Server
de Transact-SQL. Para crear o modicar tablas con con OLE DB como interfaz para los datos externos.
referencias a funciones denidas por el usuario en
la restriccin CHECK, la clusula DEFAULT o la
denicin de una columna calculada, tambin debe Transacciones
tener permiso REFERENCES para las funciones. Los
errores de Transact-SQL que producen la cancelacin de Una transaccin es un conjunto de comandos, que se es-
una instruccin y continan con la siguiente instruccin t ejecutado completamente o no ejecutado en absoluto:
del mdulo, como desencadenadores o procedimientos todo o nada. Por ejemplo, si una suma de dinero fue tras-
almacenados, se tratan de forma distinta dentro de ladada de una cuenta bancaria a otra, y hay que actualizar
una funcin. En las funciones, estos errores hacen que ambas cuentas sobre el depsito y la retirada; es obliga-
se detenga la ejecucin de la funcin. Esto hace que torio que ambas cuentas se actualizan juntas, o ninguna
se cancele la funcin que invoc la instruccin. Una (en caso que una de las actualizaciones falla); para evi-
funcin denida por el usuario no tiene ninguno o tiene tar consecuencias inconsistentes de un depsito sin nin-
varios parmetros de entrada y devuelve un valor escalar guna retirada, o vice versa. Por lo tanto, una transaccin
o una tabla. Una funcin puede tener un mximo de es una secuencia de operaciones realizadas como una so-
1024 parmetros de entrada. Cuando un parmetro la unidad lgica de trabajo. Una unidad lgica de trabajo
de la funcin toma un valor predeterminado, debe debe exhibir cuatro propiedades, conocidas como propie-
especicarse la palabra clave DEFAULT al llamar a la dades ACID (atomicidad, coherencia, aislamiento y du-
funcin para poder obtener el valor predeterminado. rabilidad), para ser calicada como transaccin:
Este comportamiento es diferente del de los parmetros
con valores predeterminados de los procedimientos Atomicidad
almacenados, para los cuales omitir el parmetro implica
especicar el valor predeterminado. Las funciones Una transaccin debe ser una unidad atmica de trabajo,
denidas por el usuario no admiten parmetros de salida. tanto si se realizan todas sus modicaciones en los datos,
como si no se realiza ninguna de ellas.

Consultas Distribuidas
Coherencia
Las consultas distribuidas tienen acceso a datos de varios
orgenes, que pueden estar almacenados en un equipo o
en equipos distintos. Microsoft SQL Server 2000 admite Cuando naliza, una transaccin debe dejar todos los
las consultas distribuidas a travs de OLE DB Las con- datos en un estado coherente. En una base de datos
sultas distribuidas proporcionan a los usuarios de SQL relacional, se deben aplicar todas las reglas a las modi-
Server acceso a: caciones de la transaccin para mantener la integridad de
Datos distribuidos almacenados en mltiples instancias todos los datos. Todas las estructuras internas de datos,
SQL Server. como ndices de rbol B o listas doblemente vinculadas,
Datos heterogneos almacenados en varios orgenes de deben estar correctas al nal de la transaccin.
datos relacionales y no relacionales a los que se tiene ac-
ceso mediante un proveedor OLE DB.
Los proveedores OLE DB exponen datos en objetos ta- Aislamiento
bulares llamados conjuntos de las. En las instrucciones
14 CAPTULO 1. FRAMEWORK

Las modicaciones realizadas por transacciones simult- A nivel de la base de datos, el usuario se identica co-
neas se deben aislar de las modicaciones llevadas a cabo mo un User que est relacionado generalmente al Login
por otras transacciones simultneas. Una transaccin (que es a nivel del servidor), y los privilegios al User exis-
ve los datos en el estado en que estaban antes de que ten solamente en el mbito de la base de datos (adems a
otra transaccin simultnea los modicara o despus los privilegios al Login). Para otorgar derechos generales
de que la segunda transaccin se haya concluido, pero puede asistirse con listas de Server Roles (roles a nivel del
no ve un estado intermedio. Esto se conoce como servidor) o Database Roles (roles a nivel de la base de da-
seriabilidad debido a que su resultado es la capacidad tos especca), cada cual con privilegios especcos a un
de volver a cargar los datos iniciales y reproducir una rol especco; y cada usuario asociado con uno de estos
serie de transacciones para nalizar con los datos en el Roles obtiene los privilegios asociados con l. Adems, el
mismo estado en que estaban despus de realizar las administrador puede otorgar derechos specicos, y crear
transacciones originales. otros Database Roles (no se puede crear Server Roles).
Los privilegios a nivel del servidor incluyen la capacidad
de crear bases de datos, utilizar las tareas (Jobs), crear
Durabilidad respaldos de bases de datos y restaurarlos, modicar las
deniciones del servidor, etc. Los privilegios a nivel de la
base de datos posibilitan extraer y actualizar datos, crear
Una vez concluida una transaccin, sus efectos son per- objetos como procedimientos y tablas, utilizar dichos ob-
manentes en el sistema. Las modicaciones persisten an jetos, etc. Como regla general se puede otorgar derechos
en el caso de producirse un error del sistema. (Grant), revocar privilegios existentes (Revoke), y dene-
SQL Server tiene una capacidad limitada de anidar gar privilegios an no existen (Deny).
transacciones.

El optimizador 1.3.9 Otras herramientas de servicio

El optimizador es una parte del software que toma la de- Adicionalmente a sus capacidades elementaras como
cisin de como cada comando se ejecutar, tanto que la herramienta de gestin de bases de datos relacionales
ejecucin ser lo ms eciente, o por lo menos bastan- (crear tablas, denir las relaciones entre ellas, gestin de
te eciente (es decir, bastante eciente para evitar seguir transacciones, crear ndices etc, SQL Server apoya una
buscando otra solucin, que an que sea ms eciente, lista que aumenta de otras herramientas de servicio; apar-
el precio de la bsqueda adicional costar" ms que el te de herramientas de terceros que cambian o que com-
ahorro de recursos). pletan lo que existe.
SQL es un lenguaje declarativo, en el cual el desarrollador
declara que quiere extraer o actualizar sin la necesidad de
indicar cmo (a contrario de los lenguajes imperativos, y Respaldos y recuperaciones
por lo tanto el optimizador juega un papel protagnico,
que de acuerdo con las estadsticas que el sistema alma- Aparte de soluciones de alternativas a nivel del sistema
cena sobre las distribuciones de los datos en las tablas, los
operativo (respaldo de los archivos de la base de datos),
indexes, y reglas internas; toma la decisin adecuada. hay una herramienta integrada en el SQL Server que posi-
bilita un respaldo completo o diferencial, de acuerdo con
el modelo de recuperacin (Recovery Model) predeni-
1.3.8 Privilegios y seguridad de datos do a la base de datos; y una recuperacin completa o a
un punto de tiempo. Aparte de un respaldo de la base de
Para conectarse al SQL Server, se necesita un Login datos se puede respaldarlos a travs de un guion (con o
(usuario a nivel del servidor). Cuando la poltica de segu- sin los datos). A partir de 2008, se puede comprimir los
ridad se dene como Windows Authentication y el servi- archivos de respaldo.
dor se combina con las deniciones del Domain, los Lo-
gins se denen en el Active Directory. Cuando la deni-
cin es SQL Server Authentication los logins (usuario y
contrasea) se denen en el SQL Server mismo. Conse- Compresin
cuentemente, en el primer caso hay que identicarse con
nombre y contrasea solamente al conectarse a la red, y A partir de 2008 se aadi la opcin de compresin que
luego se conecta automticamente a todos los servidores posibilita comprimir el tamao fsico de las tablas y los
que son Windows Authentication (con el Login global); ndices, y utilizar ms ecientemente el volumen de los
y en el segundo caso hay que identicarse al conectarse discos rgidos y reducir operaciones de IO (lo que au-
a cada servidor de SQL Server Authentication (cada vez menta la carga del CPU). Como ya ha sido mencionado,
con un Login local). se puede comprimir tambin los archivos de respaldo.
1.3. MICROSOFT SQL SERVER 15

Replicacin, alta disponibilidad, y recuperacin de Enviar Correos Electrnicos


desastres
SQL Server tiene la capacidad de enviar correos electr-
Algunas herramientas posibilitan crear replicas parciales nicos a travs del cdigo. Esta capacidad se utiliza gene-
o completos de las bases de datos, mejorar la disponi- ralmente para enviar alertas sobre problemas en el siste-
bilidad, y recuperar de desastres; aparte de la opcin de ma (por ejemplo si el CPU aumento a un umbral prede-
respaldar y recuperar las bases de datos, una opcin que nido o si el proceso ETL fall), pero tambin cuando el
se supone que es muy lenta. proceso termino exitosamente.
Las copias creadas por estas herramientas, pueden ser uti-
lizadas como un respaldo disponible inmediatamente en Full Text Search (Bsqueda de Textos completos)
caso de que el sistema falla, tanto como una rplica en
un subsistema, independiente del sistema de origen, para Una herramienta que posibilita indexar columnas textua-
equilibrio de carga; y que las actualizaciones se ejecuten les como textos y no solo como cadenas; y ejecutar bs-
en la base de datos, y las recuperaciones para los repor- quedas complejas dependientes en el sentido del texto y
tajes se ejecuten en la rplica. en el idioma. Por ejemplo, buscamos un verbo, y quere-
Entre dichas herramientas se puede mencionar la mos obtener todas las ocurrencias de sus conjugaciones.
replicacin que posibilita crear una rplica sincronizada
de la base de datos, el Mirroring que ejecuta en el ser-
vidor de espejo cada actualizacin que se ejecuta en el Rastrear
servidor de origen, Log Shipping que posibilita almace-
nar una copia sincronizada a travs de archivos de regis- Estas herramientas incluyen el Trace que posibilita ras-
tro (Log) con todas las actualizaciones en el servidor de trear actividades con el n de mantener cargas y fallos, y
origen, y las herramientas de alta disponibilidad y recu- seguridad de datos (recuperacin no permitida de datos),
peracin de desastres (HADR, desde 2012) que solucio- el Proler que posibilita rastrear los commandos que se
nan problemas de Mirroring en relacin con el tiempo de ejecutan y los eventos que se ocurren en el servidor, y el
reaccin de los fallos tcnicos y la disponibilidad de las Extended Events que fue agregado en 2008 y cambia el
copias en tiempos de paz. proler gracias a su baja signatura (la consumicin de re-
cursos y la inuencia sobre el rendimiento del servidor).
Aparte de estos, se puede utilizar 2 tipos de Trigers (dis-
El agente y la programacin de tareas paradores) para rastrear los cambios y las actividades:
DML Trigers pre denidos sobre las tablas y las vistas y
El agente es el servicio encargado de la programacin de que se inician por instrucciones de actualizacin de datos
tareas, y se encarga de ejecutarlas independientemente. (Select / Update / Delete), y DDL Triggers que se inician
Generalmente el ejecuta tareas de mantenimiento, tareas por cambios en los objetos mismos (y no en los datos),
complejas de ETL, respaldos, etc. en el nivel de la base de datos o del servidor.

Mantenimiento Combinacin de CLR

Con el n de mejorar el rendimiento del sistema hay que A partir de 2005 se puede combinar fcilmente en SQL
mantener las estadsticas, utilizadas por el optimizador, Server procedimientos, funciones, y funciones de agrega-
organizar los archivos fsicos, etc; y se utilizan herra- do desarrolladas en CLR. Hay que desarrollar el cdigo
mientas dedicadas para estos propsitos, que se ejecutan en una de las herramientas de desarrollo de .NET, crear
peridicamente por tareas programadas, y de una manera un archivo DLL, y combinarlo en el sistema. La ventaja
coordinada con las tareas de ETL y de respaldo. de de esta tecnologa es sus capacidades en problemas que
no son exclusivamente de bases de datos (manipulacin
de datos), e incluyen clculos complejos o manipulacio-
Service Broker nes textuales de cadenas.
Una tecnologa que fue agregada en 2005 que implemen-
ta arquitectura orientada a servicios, y que posibilita eje- Herramientas de Inteligencia empresarial
cuciones asncronos: primero que nada para enviar men-
sajes entre distintas aplicaciones que se ejecutan simul- Una instalacin tpica incluye tambin las herramientas
tneamente, pero tambin para ejecutar procedimientos de BI (Inteligencia empresarial):
asncronamente, en la manera de dispara y olvida - un
procedimiento que se ejecuta en una sesin diferente de
la sesin que lo inicio, y ambos procedimientos siguen SSIS (SQL Server Integration Services) Una herra-
ejecutado independientemente uno del otro. mienta de ETL que posibilita la extraccin de datos de
16 CAPTULO 1. FRAMEWORK

distintos orgenes (no solo SQL Server), la transforma- [5] Novedades de SQL Server 2005
cin de dichos datos, y la carga (generalmente pero no
[6] Novedades (SQL Server 2008)
obligatoriamente a almacn de datos).
[7] Whats New in Microsoft SQL Server 2008 R2

SSAS (SQL Server Analysis Services) Una herra- [8] Novedades de SQL Server 2012
mienta para crear Bases de Datos Multidimensionales (no
[9] Novedades de SQL Server 2014
relacionales), que se puede explorar mediante extraccio-
nes de datos en distintos niveles de agrupacin, profun- [10] Caractersticas compatibles con las ediciones de SQL Ser-
dizacin (Drill Down) de una suma a sus detalles, y utili- ver 2014
zacin de MDX (un lenguaje parecido a SQL, adaptado
[11] Connection Strings
a bases de datos multidimensionales).

SSRS (SQL Server Reporting Services) Una herra- 1.3.13 Enlaces externos
mienta para crear y dar formato a informes, otorgar de-
Pgina web de Microsoft SQL Server
rechos de contemplacin en ellos, y su distribucin. Se
puede contemplarlos con un Navegador web, y se puede Factsheet for SQL Server developers (PDF)
exportarlos a archivos de Excel, PDF, etc. los datos se
extraen generalmente del almacn de datos o del OLAP. Libros en pantalla
Revista de bases de datos Database Journal (en in-
gls)
1.3.10 Desventajas
Pgina de descarga de Microsoft SQL Server 2012
En versiones de 32 bits, SQL Server usa Address
Windowing Extension (AWE) para hacer el direc-
cionamiento por encima de 4 GB. Esto le impide
usar la administracin dinmica de memoria, y slo
1.4 Oracle Database
le permite alojar un mximo de 64 GB de memoria
compartida. Esta limitacin es exclusiva de sistemas Oracle Database es un sistema de gestin de base de da-
operativos 32 bits; en sistemas operativos 64 bits, la tos de tipo objeto-relacional (ORDBMS, por el acrni-
memoria mxima que se puede direccionar en Edi- mo en ingls de Object-Relational Data Base Management
cin Estndar es 64 Gb y en Edicin Enterprise 4Tb System), desarrollado por Oracle Corporation.
Se considera a Oracle Database como uno de los siste-
mas de bases de datos ms completos, destacando: sopor-
1.3.11 Vase tambin te de transacciones, estabilidad, escalabilidad, y soporte
multiplataforma.[cita requerida]
Base de datos relacional
Su dominio en el mercado de servidores empresariales
Sistema de gestin de base de datos haba sido casi total hasta que recientemente tiene la com-
petencia del Microsoft SQL Server y de la oferta de otros
Oracle RDBMS con licencia libre como PostgreSQL, MySQL o
Sybase ASE Firebird.
PostgreSQL Las ltimas versiones de Oracle han sido certicadas para
poder trabajar bajo GNU/Linux.
Interbase
Firebird
MySQL 1.4.1 Historia
Oracle surge en 1977 bajo el nombre de SDL (Software
SQl Server
Development Laboratories).
En 1979, SDL cambia su nombre por Relational Software,
1.3.12 Referencias Inc. (RSI).

[1] Novedades de SQL Server 2014 La fundacin de SDL fue motivada principalmente a par-
tir de un estudio sobre los SGBD (Sistemas Gestores de
[2] Base de Datos) de George Koch. Computer World deni
este estudio como uno de los ms completos jams escri-
[3] Whats New in Microsoft SQL Server 7
tos sobre bases de datos. Este artculo inclua una com-
[4] Whats New in Microsoft SQL Server 2000 parativa de productos que dirigia a Relational Software
1.4. ORACLE DATABASE 17

como el ms completo desde el punto de vista tcnico. que proporciona la base de datos Oracle. Tambin brin-
Esto se deba a que usaba la losofa de las bases de da- da la exibilidad de poder migrar a Oracle 10g Enterprise
tos relacionales, algo que por aquella poca era todava Edition, protegiendo su inversin a medida que los reque-
desconocido. rimientos de su negocio crecen.
En la actualidad, Oracle (Nasdaq: ORCL) todava enca- La Base de datos Oracle 10g Release 2 Standard Edition
beza la lista. La tecnologa Oracle se encuentra prctica- est optimizada para su despliegue en medianas indus-
mente en todas las industrias alrededor del mundo y en las trias. Est soportada en un nico servidor soportando has-
ocinas de 98 de las 100 empresas Fortune 100. Oracle ta un mximo de 4 CPUs, o en un ambiente de servidores
es la primera compaa de software que desarrolla e im- en clster, con un mximo de 4 CPUs en el clster. La
plementa software para empresas cien por ciento activado base de datos Oracle 10g Release 2 Standard Edition es-
por Internet a travs de toda su lnea de productos: base de ta disponible en todos los sistemas operativos soportados
datos, aplicaciones comerciales y herramientas de desa- por Oracle entre los cuales se incluye Windows, Linux y
rrollo de aplicaciones y soporte de decisiones. Oracle es el Unix.
proveedor mundial lder de software para administracin La base de datos Oracle 10g Standard Edition proporcio-
de informacin, y la segunda empresa de software. na una rpida instalacin tanto en un nico servidor co-
Oracle, a partir de la versin 10g Release 2, cuenta con 7 mo en un ambiente de clster. La base de datos va a estar
ediciones:[1] precongurada lista para ser usada en produccin, com-
pleta con espacio automatizado, administracin de alma-
Enterprise Edition (EE). cenamiento y de memoria, back up y recuperacin auto-
matizado y administrador de estadsticas automatizado.
Standard Edition (SE). La consola de Enterprise Manager 10g Data base con-
trol proporciona una interface web que muestra el estado
Standard Edition One (SE1) actual de la base de datos y del ambiente de clster y per-
mite la administracin de la base de datos desde cualquier
Standard Edition 2 (SE2)
browser conectado a su sistema. La base de datos Oracle
Express Edition (XE). Standard Edition tambin toma ventaja de la solucin de
clusterware, eliminando la complejidad de tener que ins-
Personal Edition (PE). talar y congurar clusterware de terceros. El Automatic
Storage Management tiene la capacidad de ecientemen-
Lite Edition (LE). te distribuir los datos almacenados a travs de los discos
disponibles, asegurando ptimo desempeo y eliminando
La nica edicin gratuita es la Express Edition, que es la necesidad de gestores de volmenes de terceros.
compatible con las dems ediciones de Oracle Database Oracle como la base de datos lder del mercado sopor-
10gR2 y Oracle Database 11g. ta todos los tipos de datos relacionales estndares, as
Oracle adquiri Sun Microsystems y con ella la empresa como tambin datos nativos como XML, texto, imge-
encargada comercial de MySQL. nes, documentos, audio, y datos espaciales. El acceso a
la informacin es realizado a travs de interfaces estn-
La ltima versin de Oracle es la versin 12c, la prime-
dares como SQL, JDBC, SQLJ, ODBC.Net, OLE.Net
ra base de datos diseada para Cloud Computing, que fue
y ODP.Net, SQL/XML, XQuery y WebDAV. Los pro-
lanzada en 2013, donde con la presentacin de la llega-
cedimientos almacenados pueden ser escritos en Java,
da de esta ltima versin de Oracle Database 12c, Oracle
PL/SQL o utilizando .Net CLR support en Oracle Da-
facilita los esfuerzos de las empresas para estandarizar,
tabase 10g Release 2.
consolidar y automatizar los servicios de las bases de da-
tos en la nube. La base de datos Oracle Standard Edition usa las mismas
gestiones de concurrencia que son usadas por la base de
datos Oracle Enterprise Edition, asegurando el mximo
1.4.2 Caractersticas rendimiento para todas las cargas de trabajo. Cuando se
corre en un clster, la carga de trabajo es automtica-
Oracle Database 10G Standard edition La base de mente balanceada a travs de las mquinas disponibles,
datos Oracle 10g Standard Edition es compatible con me- asegurando la mxima utilizacin de su equipo. Imple-
dianas industrias. Esta incluye Real Application Clster mentando un ambiente de clusters con Real Application
para proporcionar proteccin en contra de fallos de hard- Clster protege sus aplicaciones de negocio ante cadas
ware. Es fcil de instalar y congurar, viene con su propio de negocio. Cuando una mquina falla o necesita mante-
software de clustering, administracin de almacenamien- nimiento, sus aplicaciones de negocio pueden continuar
to y otras capacidades de auto administracin. La base de accediendo a los datos ininterrumpidamente en las otras
datos Oracle 10g Standard Edition administra todos sus maquinas del clster.
datos y permite que todas sus aplicaciones de negocio to-
Por ser Standard Edition construida sobre la misma base
men ventaja del rendimiento, seguridad y conabilidad
18 CAPTULO 1. FRAMEWORK

y cdigo que la base de datos Enterprise Edition, usted media, medical imaging, y tecnologas semnticas)lo cual
tendr la exibilidad de moverse a una versin superior representa un rea de gran crecimiento para muchas em-
manteniendo protegida su inversin inicial.[2] presas.
Incluye muchas nuevas mejoras y caractersticas para in-
tegrar mejor los datos de toda la empresa, reduciendo as
Oracle Database 11g (Nuevas caractersticas) Con los costos de administracin de contenido y aumentando
bases de datos que triplican su tamao cada dos aos, los la productividad de los empleados. Con 30 aos de prc-
departamentos de IT se enfrentan tanto a los desafos nue- ticas seguras, Oracle Database11g lo ayuda a proteger su
vos como a los ya conocidos: Cmo mantener los niveles informacin y garantizar el cumplimiento regulatorio con
adecuados de servicio al usuario en caso de que se pro- una gran cantidad de slidas capacidades de seguridad,
duzcan fallas en el sitio, en el almacenamiento o en el ser- mejora las capacidades de data warehousing y business
vidor? Cmo evitar la violacin de datos y garantizar el intelligence de Oracle para optimizar la capacidad de ad-
cumplimiento regulatorio? Cmo almacenar, adminis- ministracin, logrando que las tecnologas avanzadas co-
trar y proteger todo tipo de informacin, e incluso inte- mo el procesamiento analtico y la extraccin de datos
grarla fcilmente en las operaciones comerciales rutina- online sean fcilmente accesibles para los usuarios.
rias? Cmo escalar los amplios sistemas transaccionales
Proporciona una sola plataforma integrada que ofrece al-
y de depsito de datos mientras se asegura el cumplimien-
to desempeo y escalabilidad, y brinda soporte de todas
to, la conabilidad y la capacidad de administracin? Y
las tecnologas principales actualmente utilizadas por los
cmo actualizar el software y el hardware mientras se mi-
desarrolladores de aplicaciones.
nimizan los riesgos de cambio? Oracle lo ayuda a abordar
estos desafos con una amplia variedad de nuevas carac- Incorpora nuevas capacidades para los entornos de desa-
tersticas y mejoras en Oracle Database 11g. Al extender rrollo de aplicaciones ms importantes, permitiendo
la capacidad exclusiva de Oracle para brindar los bene- acortar el tiempo de llegada al mercado y mejorar el
cios de grid computing, Oracle Database 11g le permite desempeo de las aplicaciones.
mejorar los niveles de servicio al cliente, reducir el tiem-
Oracle ha solucionado problemas relacionados con la
po de baja, y hacer un uso ms efectivo de los recursos administracin de la informacin en sectores guberna-
de IT mientras aumenta el desempeo, la escalabilidad y mentales y empresas internacionales durante ms de tres
la seguridad de sus aplicaciones 24/7. dcadas, logrando que nuestra base de datos se trans-
Las caractersticas relacionadas con la capacidad de ad- forme en el software ms conocido del mundo respec-
ministracin en Oracle Database 11g estn diseadas pa- to de la recopilacin, administracin y proteccin de la
ra ayudar a las empresas a administrar fcilmente los informacin.[3]
grids de infraestructura y cumplir exitosamente con las
expectativas del nivel de servicio al usuario. Las nuevas
caractersticas y mejoras en la capacidad de administra- 1.4.3 Referencias
cin de Oracle Database11g ayudan a aumentar la pro-
ductividad de los DBA y reducir los costos de adminis- [1] Oracle Database (en ingls). Consultado el 27 de mayo
tracin, mientras aumenta el desempeo, la escalabilidad de 2015.
y la seguridad de sus aplicaciones comerciales durante las [2] Oracle Database 10G Standard Edition. Documenta-
24 horas. cin de Oracle Database.
Protege los sistemas de todas las causas comunes relacio-
[3] Oracle Database 11g (Informacin General sobre las
nadas con el tiempo de baja planicado y no planicado,
Nuevas Caractersticas).. Documentacin de Oracle Da-
con inclusin de las fallas en el sitio, en el almacenamien-
tabase.
to y en el servidor, as como de una de las causas ms
importantes, el error humano.
Permite a su empresa aumentar fcilmente los amplios
sistemas transaccionales y de depsito de datos, y brinda
rpido acceso 24/7 a los datos utilizando almacenamiento 1.4.4 Enlaces externos
modular de bajo costo. Las nuevas e innovadoras carac-
tersticas de desempeo de Oracle Database11g ayudan a
los administradores a administrar ecientemente la car- Wikimedia Commons alberga contenido multi-
ga de informacin en todo el ciclo de vida de las bases media sobre Oracle Database. Commons
de datos al optimizar los recursos de almacenamiento de
www.oracle.com Oracle Corporation (en ingls).
acuerdo con la demanda, adems brinda una plataforma
segura y escalable para el acceso conable y rpido a todo www.oracle.com/es Oracle Espaa.
tipo de informacin utilizndolas interfaces estndar del
sector. Permite una slida administracin del contenido www.zonaoracle.com Recursos de aprendizaje Ora-
para tipos avanzados de datos )como XML, spatial, multi- cle.
1.5. C++ 19

www.ora-code.net Bsqueda de cdigos de error de 1.5.1 Ejemplos


Oracle.
A continuacin se cita un programa de ejemplo Hola
mundo escrito en C++:
Proceso de anlisis y planicacin de migraciones
/* Esta cabecera permite usar los objetos que encapsulan
de Oracle 10g R2 a PostgreSQL 9.1.3 - Centro Na-
los descriptores stdout y stdin: cout(<<) y cin(>>)*/
cional de Referencia de Aplicacin de las TIC basa-
#include <iostream> using namespace std; int main() {
das en Fuentes Abiertas (CENATIC).
cout << Hola mundo << endl; cin.get(); return 0; }

Al usar la directiva #include se le dice al compilador que


busque e interprete todos los elementos denidos en el ar-
1.5 C++ chivo que acompaa la directiva (en este caso, iostream).
Para evitar sobrescribir los elementos ya denidos al po-
nerles igual nombre, se crearon los espacios de nombres
o namespace del singular en ingls. En este caso hay un
espacio de nombres llamado std, que es donde se incluyen
las deniciones de todas las funciones y clases que confor-
man la biblioteca estndar de C++. Al incluir la sentencia
using namespace std le estamos diciendo al compilador
que usaremos el espacio de nombres std por lo que no
tendremos que incluirlo cuando usemos elementos de es-
te espacio de nombres, como pueden ser los objetos cout
y cin, que representan el ujo de salida estndar (tpica-
mente la pantalla o una ventana de texto) y el ujo de
entrada estndar (tpicamente el teclado).
La denicin de funciones es igual que en C, salvo por la
caracterstica de que si main no va a recoger argumentos,
no tenemos por qu ponrselos, a diferencia de C, donde
Bjarne Stroustrup, creador del C++. haba que ponerlos explcitamente, aunque no se fueran a
usar. Queda solo comentar que el smbolo << se conoce
como operador de insercin, y grosso modo est envian-
C++ es un lenguaje de programacin diseado a media- do a cout lo que queremos mostrar por pantalla para que
dos de los aos 1980 por Bjarne Stroustrup. La inten- lo pinte, en este caso la cadena Hola mundo. El mis-
cin de su creacin fue el extender al lenguaje de pro- mo operador << se puede usar varias veces en la misma
gramacin C mecanismos que permiten la manipulacin sentencia, de forma que gracias a esta caracterstica po-
de objetos. En ese sentido, desde el punto de vista de los dremos concatenar el objeto endl al nal, cuyo resultado
lenguajes orientados a objetos, el C++ es un lenguaje h- ser imprimir un retorno de lnea.
brido.
Por ltimo tomaremos una secuencia de caracteres del
Posteriormente se aadieron facilidades de programacin teclado hasta el retorno de lnea (presionando ENTER),
genrica, que se sumaron a los paradigmas de llamando al mtodo get del objeto cin.
programacin estructurada y programacin orienta-
da a objetos. Por esto se suele decir que el C++ es un
lenguaje de programacin multiparadigma. 1.5.2 Tipos de datos
Actualmente existe un estndar, denominado ISO C++,
al que se han adherido la mayora de los fabricantes de C++ tiene los siguientes tipos fundamentales:
compiladores ms modernos. Existen tambin algunos in-
trpretes, tales como ROOT. Caracteres: char (tambin es un entero), wchar_t
Una particularidad del C++ es la posibilidad de rede- Enteros: short, int, long, long long
nir los operadores, y de poder crear nuevos tipos que se
comporten como tipos fundamentales. Nmeros en coma otante: oat, double, long double
El nombre C++ fue propuesto por Rick Mascitti en el ao Booleanos: bool
1983, cuando el lenguaje fue utilizado por primera vez
fuera de un laboratorio cientco. Antes se haba usado Vaco: void
el nombre C con clases. En C++, la expresin C++"
signica incremento de C y se reere a que C++ es una El modicador unsigned se puede aplicar a enteros para
extensin de C. obtener nmeros sin signo (por omisin los enteros con-
20 CAPTULO 1. FRAMEWORK

tienen signo), con lo que se consigue un rango mayor de La palabra reservada void
nmeros naturales.
La palabra reservada void dene en C++ el concepto de
no existencia o no atribucin de un tipo en una variable
Tamaos asociados o declaracin. Es decir, una funcin declarada como void
no devolver ningn valor. Esta palabra reservada tam-
Segn la mquina y el compilador que se utilice los ti-
bin puede usarse para indicar que una funcin no recibe
pos primitivos pueden ocupar un determinado tamao en
parmetros, como en la siguiente declaracin:
memoria. La siguiente lista ilustra el nmero de bits que
ocupan los distintos tipos primitivos en la arquitectura int funcion (void);
x86.
Otras arquitecturas pueden requerir distintos tamaos de Aunque la tendencia actual es la de no colocar la palabra
tipos de datos primitivos. C++ no dice nada acerca de cul void.
es el nmero de bits en un byte, ni del tamao de estos Adems se utiliza para determinar que una funcin no
tipos; ms bien, ofrece solamente las siguientes garantas retorna un valor, como en:
de tipos":
void funcion (int parametro);
De acuerdo al estndar C99, un tipo char debe ocu-
par exactamente un byte compuesto de un mnimo Cabe destacar que void no es un tipo. Una funcin como
de 8 bits independientemente de la arquitectura de la declarada anteriormente no puede retornar un valor por
la mquina. medio de return: la palabra clave va sola. No es posible
El tamao reconocido de char es de 1. Es decir, si- una declaracin del tipo:
zeof(char) siempre devuelve 1. void t; //Est mal
Un tipo short tiene al menos el mismo tamao que
un tipo char. En este sentido, void se comporta de forma ligeramente
diferente a como lo hace en C, especialmente en cuanto a
Un tipo long tiene al menos el doble tamao en bytes
su signicado en declaraciones y prototipos de funciones.
que un tipo short.
Sin embargo, la forma especial void * indica que el tipo
Un tipo int tiene un tamao entre el de short y el de
de datos es un puntero. Por ejemplo:
long, ambos inclusive, preferentemente el tamao de
un apuntador de memoria de la mquina. Su valor void *memoria;
mximo es 2147488281, usando 32 bits.
Un tipo unsigned tiene el mismo tamao que su ver- Indica que memoria es un puntero a alguna parte, donde
sin signed. se guarda informacin de algn tipo. El programador es
responsable de denir estos algn, eliminando toda am-
bigedad. Una ventaja de la declaracin "void *" es que
Wchar_t puede representar a la vez varios tipos de datos, depen-
diendo de la operacin de cast escogida. La memoria que
Para la versin del estndar que se public en 1998, se de- hemos apuntado en alguna parte, en el ejemplo anterior,
cidi aadir el tipo de dato wchar_t, que permite el uso de bien podra almacenar un entero, un otante, una cadena
caracteres UNICODE, a diferencia del tradicional char, de texto o un programa, o combinaciones de stos. Es res-
que contempla simplemente al cdigo de caracteres AS- ponsabilidad del programador recordar qu tipo de datos
CII extendido. A su vez, se ha denido para la mayora hay y garantizar el acceso adecuado.
de las funciones y clases, tanto de C como de C++, una
versin para trabajar con wchar_t, donde usualmente se
preja el carcter w al nombre de la funcin (en ocasiones La palabra NULL
el carcter es un injo). Por ejemplo:
Adems de los valores que pueden tomar los tipos ante-
strcpy - wstrcpy riormente mencionados, existe un valor llamado NULL,
sea el caso numrico para los enteros, carcter para el ti-
std::string - std::wstring po char, cadena de texto para el tipo string, etc. El valor
std::cout - std::wcout NULL, expresa, por lo regular, la representacin de una
Macro, asignada al valor 0.
Cabe resaltar que en C se dene wchar_t como: Tenemos entonces que:
typedef unsigned short wchar_t; void* puntero = NULL; int entero = NULL; bool
boleana = NULL; char caracter = NULL;
Mientras que en C++ es en s mismo un tipo de dato.
1.5. C++ 21

El valor de las variables anteriores nos dara 0. A diferen- Un ejemplo de clase que podemos tomar es la clase perro.
cia de la variable caracter, que nos dara el equivalente Cada perro comparte unas caractersticas (atributos). Su
a NULL, '\0', para caracteres. nmero de patas, el color de su pelaje o su tamao son al-
gunos de sus atributos. Las funciones que lo hagan ladrar,
cambiar su comportamiento... esas son las funciones de la
1.5.3 Principios clase.
Este es otro ejemplo de una clase:
Todo programa en C++ debe tener la funcin principal
main() (a no ser que se especique en tiempo de compi- class Punto { //por omisin, los miembros son 'private'
lacin otro punto de entrada, que en realidad es la funcin para que slo se puedan modicar desde la propia clase.
que tiene el main()) private: // Variable miembro privada int id; protected:
// Variables miembro protegidas int x; int y; public: //
int main() {} Constructor Punto(); // Destructor ~Punto(); // Funcio-
nes miembro o mtodos int ObtenerX(); int ObtenerY();
La funcin principal del cdigo fuente main debe tener };
uno de los siguientes prototipos:
int main()
int main(int argc, char** argv)
Constructores

Aunque no es estndar algunas implementaciones per- Son unos mtodos especiales que se ejecutan automtica-
miten mente al crear un objeto de la clase. En su declaracin no
int main(int argc, char** argv, char** env) se especica el tipo de dato que devuelven, y poseen el
mismo nombre que la clase a la que pertenecen. Al igual
La primera es la forma por omisin de un programa que que otros mtodos, puede haber varios constructores so-
no recibe parmetros ni argumentos. La segunda forma brecargados, aunque no pueden existir constructores vir-
tiene dos parmetros: argc, un nmero que describe el n- tuales.
mero de argumentos del programa (incluyendo el nombre Como caracterstica especial a la hora de implementar un
del programa mismo), y argv, un puntero a un array de constructor, justo despus de la declaracin de los par-
punteros, de argc elementos, donde el elemento argv[i] metros, se encuentra lo que se llama lista de inicializa-
representa el i-simo argumento entregado al programa. dores. Su objetivo es llamar a los constructores de los
En el tercer caso se aade la posibilidad de poder acce- atributos que conforman el objeto a construir.
der a las variables de entorno de ejecucin de la misma
forma que se accede a los argumentos del programa, pero Cabe destacar que no es necesario declarar un constructor
reejados sobre la variable env. al igual que un destructor, pues el compilador lo puede
hacer, aunque no es la mejor forma de programar.
El tipo de retorno de main es un valor entero int. Al -
nalizar la funcin main, debe incluirse el valor de retorno Tomando el ejemplo de la Clase Punto, si deseamos que
(por ejemplo, return 0;, aunque el estndar prev sola- cada vez que se cree un objeto de esta clase las coorde-
mente dos posibles valores de retorno: EXIT_SUCCESS nadas del punto sean igual a cero podemos agregar un
y EXIT_FAILURE, denidas en el archivo cstdlib), o sa- constructor como se muestra a continuacin:
lir por medio de la funcin exit. Alternativamente puede class Punto { public: oat x; // Coordenadas del punto
dejarse en blanco, en cuyo caso el compilador es respon- oat y; // Constructor Punto() : x(0), y(0){ // Inicializa-
sable de agregar la salida adecuada. mos las variables x e y } }; // Main para demostrar
el funcionamiento de la clase # include <iostream> //
Esto nos permite utilizar cout using namespace std;
1.5.4 El concepto de clase int main () { Punto MiPunto; // creamos un elemento de
la clase Punto llamado MiPunto cout << Coordenada
Los objetos en C++ son abstrados mediante una clase. X: " << MiPunto.x << endl; // mostramos el valor
Segn el paradigma de la programacin orientada a ob- acumulado en la variable x cout << Coordenada Y: "
jetos un objeto consta de: << MiPunto.y << endl; // mostramos el valor acumulado
en la variable y getchar(); // le indicamos al progra-
ma que espere al buer de entrada (detenerse) return 0; }
1. Identidad, que lo diferencia de otros objetos (Nom-
bre que llevar la clase a la que pertenece dicho ob-
jeto). Si compilamos y ejecutamos el anterior programa, obte-
nemos una salida que debe ser similar a la siguiente:
2. Mtodos o funciones miembro
Coordenada X: 0 Coordenada Y: 0
3. Atributos o variables miembro Existen varios tipos de constructores en C++:
22 CAPTULO 1. FRAMEWORK

1. Constructor predeterminado. Es el constructor est declarado el objeto. El nico caso en el que se de-
que no recibe ningn parmetro en la funcin. Si be invocar explcitamente al destructor de un objeto,
no se deniera ningn constructor, el sistema pro- es cuando ste fue creado mediante el operador new, es
porcionara uno predeterminado. Es necesario para decir, que ste vive en memoria heap, y no en la pila de
la construccin de estructuras y contenedores de la ejecucin del programa. La invocacin del destructor de
STL. un objeto que vive en heap se realiza a travs del operador
delete o delete[] para arrays. Ejemplo:
2. Constructor de copia. Es un constructor que reci-
be un objeto de la misma clase, y realiza una copia int main() { int *unEntero = new int(12); //asignamos
de los atributos del mismo. Al igual que el predeter- un entero en memoria heap con el valor 12 int *array-
minado, si no se dene, el sistema proporciona uno. DeEnteros = new int[25]; //asignamos memoria para
25 enteros(no estn inicializados) delete unEntero;
3. Constructor de conversin. Este constructor, reci- //liberamos la memoria que ocupaba unEntero delete[]
be como nico parmetro, un objeto o variable de arrayDeEnteros; //liberamos la memoria ocupada por
otro tipo distinto al suyo propio. Es decir, convierte arrayDeEnteros return 0; }
un objeto de un tipo determinado a otro objeto del
tipo que estamos generando. Si no se utilizara el operador delete y delete[] en ese ca-
so, la memoria ocupada por unEntero y arrayDeEnteros
Constructores + Memoria heap Un objeto creado de la respectivamente, quedara ocupada sin sentido. Cuando
forma que se vio hasta ahora, es un objeto que vive dentro una porcin de memoria queda ocupada por una variable
del scope(las llaves { }) en el que fue creado. Para que un que ya no se utiliza, y no hay forma de acceder a ella, se
objeto pueda seguir viviendo cuando se saque de el sco- denomina un 'memory leak'. En aplicaciones grandes, si
pe en el que se cre, se lo debe crear en memoria heap. ocurren muchos memory leaks, el programa puede ter-
Para esto, se utiliza el operador new, el cual asigna memo- minar ocupando bastante ms memoria RAM de la que
ria para almacenar al objeto creado, y adems llama a su debera, lo que no es para nada conveniente. Es por esto,
constructor(por lo que se le pueden enviar parmetros). que el manejo de memoria heap debe usarse consciente-
El operador new se utiliza de la siguiente manera: mente.
int main() { Punto *unPunto = new Punto(); //esto llama Existen dos tipos de destructores pueden ser pblicos o
al constructor que se describe ms arriba delete unPunto; privados, segn si se declaran:
//no hay que olvidarse de liberar la memoria ocupada
por el objeto(ver la seccin destructores, ms abajo) Si es pblico se llama desde cualquier parte del pro-
return 0; } grama para destruir el objeto.

Adems, con el operador new[] se pueden crear arrays Si es privado no se permite la destruccin del objeto
(colecciones o listas ordenadas) de tamao dinmico: por el usuario.
Punto *asignar(int cuantos) { return new Punto[cuantos];
//asigna un array de 'cuantos puntos(se llama el cons- El uso de destructores es clave en el concepto de Adquirir
tructor que se muestra ms arriba), y se retorna. } Recursos es Inicializar.

Funciones miembro
Destructores
Funcin miembro es aquella que est declarada en mbito
Los destructores son funciones miembro especiales lla- de clase. Son similares a las funciones habituales, con la
madas automticamente en la ejecucin del programa, y salvedad de que el compilador realizara el proceso de De-
por tanto no tienen por qu ser llamadas explcitamen- coracin de nombre (Name Mangling en ingls): Cam-
te por el programador. Sus principales cometidos son: biar el nombre de la funcin aadiendo un identicador
de la clase en la que est declarada, pudiendo incluir ca-
Liberar los recursos computacionales que el objeto racteres especiales o identicadores numricos. Este pro-
de dicha clase haya adquirido en tiempo de ejecucin ceso es invisible al programador. Adems, las funciones
al expirar ste. miembro reciben implcitamente un parmetro adicional:
El puntero this, que referencia al objeto que ejecuta la
Quitar los vnculos que pudiesen tener otros recursos funcin.
u objetos con ste. Las funciones miembro se invocan accediendo prime-
ro al objeto al cual reeren, con la sintaxis: myob-
Los destructores son invocados automticamente al al- ject.mymemberfunction(), esto es un claro ejemplo de
canzar el ujo del programa el n del mbito en el que una funcin miembro.
1.5. C++ 23

Caso especial es el de las funciones miembro estticas. Espacios de nombres


A pesar de que son declaradas dentro de la clase, con el
uso de la palabra clave static no recibirn el puntero this. Una adicin a las caractersticas de C son los espacios de
Gracias a esto no es necesario crear ninguna instancia de nombre (namespace en ingls), los cuales pueden descri-
la clase para llamar a esta funcin, sin embargo, slo se birse como reas virtuales bajo las cuales ciertos nombres
podr acceder a los miembros estticos de la clase da- de variable o tipos tienen validez. Esto permite evitar las
do que estos no estn asociados al objeto sino al tipo. ocurrencias de conictos entre nombres de funciones, va-
La sintaxis para llamar a esta funcin esttica es myty- riables o clases.
pe::mystaticmember().
El ejemplo ms conocido en C++ es el espacio de nom-
bres std::, el cual almacena todas las deniciones nue-
EJEMPLOS vas en C++ que dieren de C (algunas estructuras y fun-
ciones), as como las funcionalidades propias de C++
template <typename T> T max(const T &x, const T &y) (streams) y los componentes de la biblioteca STL.
{ return (x > y) ? x : y; //si x > y, retorna x, sino retorna y } Por ejemplo:
# include <iostream> // Las funciones en esta cabecera
La funcin max() es un ejemplo de programacin gen- existen dentro del espacio de nombres std:: namespace
rica, y dados dos parmetros de un tipo T (que puede ser mi_paquete{ int mi_valor; }; int main() { int mi_valor =
int, long, oat, double, etc.) devolver el mayor de ellos 3; mi_paquete::mi_valor = 4; std::cout << mi_valor <<
(usando el operador >). Al ejecutar la funcin con par- '\n'; // imprime '3' std::cout << mi_paquete::mi_valor <<
metros de un cierto tipo, el compilador intentar calzar '\n'; // imprime '4' return 0; }
la plantilla a ese tipo de datos, o bien generar un mensaje
de error si fracasa en ese proceso.
Como puede verse, las invocaciones directas a mi_valor
darn acceso solamente a la variable descrita localmen-
Especializacin te; para acceder a la variable del espacio de nombres
mi_paquete es necesario acceder especcamente el espa-
cio de nombres. Un atajo recomendado para programas
Clases o tipos sencillos es la directiva using namespace, que permite ac-
ceder a los nombres de variables del paquete deseado en
En C++ es posible denir clases abstractas. Una clase abs- forma directa, siempre y cuando no se produzca alguna
tracta, o clase base abstracta (ABC), es una que est dise- ambigedad o conicto de nombres.
ada slo como clase padre de las cuales se deben derivar
clases hijas. Una clase abstracta se usa para representar
aquellas entidades o mtodos que despus se implemen- Herencia
tarn en las clases derivadas, pero la clase abstracta en s
no contiene ninguna implementacin -- solamente repre- Existen varios tipos de herencia entre clases en el lenguaje
senta los mtodos que se deben implementar. Por ello, no de programacin C++. Estos son:
es posible instanciar una clase abstracta, pero s una clase
concreta que implemente los mtodos denidos en ella.
Herencia simple La herencia en C++ es un mecanis-
Las clases abstractas son tiles para denir interfaces, es mo de abstraccin creado para poder facilitar y mejorar
decir, un conjunto de mtodos que denen el compor- el diseo de las clases de un programa. Con ella se pueden
tamiento de un mdulo determinado. Estas deniciones crear nuevas clases a partir de clases ya hechas, siempre
pueden utilizarse sin tener en cuenta la implementacin y cuando tengan un tipo de relacin especial.
que se har de ellos.
En la herencia, las clases derivadas heredan los datos
En C++ los mtodos de las clases abstractas se denen y las funciones miembro de las clases base, pudiendo las
como funciones virtuales puras. clases derivadas redenir estos comportamientos (poli-
class Abstracta { public: virtual int metodo() = 0; } class morsmo) y aadir comportamientos nuevos propios de
ConcretaA : public Abstracta { public: int metodo() { las clases derivadas. Para no romper el principio de en-
//haz algo return foo () + 2; } }; class ConcretaB : public capsulamiento (ocultar datos cuyo conocimiento no es ne-
Abstracta { public: int metodo() { //otra implementacin cesario para el uso de las clases), se proporciona un nuevo
return baz () - 5; } }; modo de visibilidad de los datos/funciones: protected.
Cualquier cosa que tenga visibilidad protected se com-
En el ejemplo, la clase ConcretaA es una implementacin portar como pblica en la clase Base y en las que compo-
de la clase Abstracta, y la clase ConcretaB es otra imple- nen la jerarqua de herencia, y como privada en las clases
mentacin. Debe notarse que el = 0 es la notacin que que NO sean de la jerarqua de la herencia.
emplea C++ para denir funciones virtuales puras. Antes de utilizar la herencia, nos tenemos que hacer una
24 CAPTULO 1. FRAMEWORK

pregunta, y si tiene sentido, podemos intentar usar esta je- AlmacenarStock(); ComprobarExistencias(); ... };
rarqua: Si la frase <claseB> ES-UN <claseA> tiene sen-
tido, entonces estamos ante un posible caso de herencia Por tanto, es posible utilizar ms de una clase para que
donde clase A ser la clase base y clase B la derivada. otra herede sus caractersticas.
Ejemplo: clases Barco, Acorazado, Carguero, etc. Un
Acorazado ES-UN Barco, un Carguero ES-UN Barco, un
Trasatlntico ES-UN Barco, etc. Sobrecarga de operadores

En este ejemplo tendramos las cosas generales de un Bar- La sobrecarga de operadores es una forma de hacer
co (en C++) polimorsmo. Es posible denir el comportamiento de un
class Barco { protected: char* nombre; oat peso; public: operador del lenguaje para que trabaje con tipos de da-
//Constructores y dems funciones bsicas de barco }; tos denidos por el usuario. No todos los operadores de
C++ son factibles de sobrecargar, y, entre aquellos que
pueden ser sobrecargados, se deben cumplir condiciones
y ahora las caractersticas de las clases derivadas, podran especiales. En particular, los operadores sizeof y :: no son
(a la vez que heredan las de barco) aadir cosas propias sobrecargables.
del subtipo de barco que vamos a crear, por ejemplo:
No es posible en C++ crear un operador nuevo.
class Carguero: public Barco { // Esta es la manera de
especicar que hereda de Barco private: oat carga; //El Los comportamientos de los operadores sobrecargados se
resto de cosas }; class Acorazado: public Barco { private: implementan de la misma manera que una funcin, salvo
int numeroArmas; int Soldados; // El resto de cosas }; que esta tendr un nombre especial: Tipo de dato de de-
volucin operator<token del operador>(parmetros)
Por ltimo, hay que mencionar que existen 3 clases de Los siguientes operadores pueden ser sobrecargados:
herencia que se diferencian en el modo de manejar la vi-
sibilidad de los componentes de la clase resultante: Operadores Unarios
Operador * (de indireccin)
Herencia pblica (class Derivada: public Base ): Con
Operador -> (de indireccin)
este tipo de herencia se respetan los comportamien-
tos originales de las visibilidades de la clase Base en Operador & (de direccin)
la clase Derivada. Operador +
Herencia privada (clase Derivada: private Base): Operador -
Con este tipo de herencia todo componente de la Operador ++
clase Base, ser privado en la clase Derivada (las Operador --
propiedades heredadas sern privadas aunque estas
sean pblicas en la clase Base) Operadores Binarios

Herencia protegida (clase Derivada: protected Ba- Operador ==


se): Con este tipo de herencia, todo componente p- Operador +
blico y protegido de la clase Base, ser protegido en
Operador -
la clase Derivada, y los componentes privados, si-
guen siendo privados. Operador *
Operador /
Herencia mltiple La herencia mltiple es el meca- Operador %
nismo que permite al programador hacer clases deriva- Operador <<
das a partir, no de una sola clase base, sino de varias. Pa- Operador >>
ra entender esto mejor, pongamos un ejemplo: Cuando
ves a quien te atiende en una tienda, como persona que Operador &
es, podrs suponer que puede hablar, comer, andar, pe- Operador ^
ro, por otro lado, como empleado que es, tambin podrs Operador |
suponer que tiene un jefe, que puede cobrarte dinero por
Operador []
la compra, que puede devolverte el cambio, etc. Si esto
lo trasladamos a la programacin sera herencia mltiple Operador ()
(clase empleado_tienda):
Operadores de Asignacin
class Persona { ... Hablar(); Caminar(); ... }; class
Empleado { Persona jefe; int sueldo; Cobrar(); ... }; Operador =
class EmpleadoTienda: public Persona, Empleado { ... Operador +=
1.5. C++ 25

Operador -= ostream& operator<<(ostream& fs, const Punto&


Operador *= punto) { return fs << punto.x << ", << punto.y; }
Operador /=
De esta forma, para mostrar un punto, solo habra que
Operador %=
realizar la siguiente expresin:
Operador <<=
//... Punto p(4,5); //... cout << Las coordenadas son: "
Operador >>= << p << endl; //...
Operador &=
Operador ^= Es posible formatear la entrada/salida, indicando el n-
Operador |= mero de dgitos decimales a mostrar, si los textos se pasa-
rn a minsculas o maysculas, si los nmeros recibidos
Dado que estos operadores son denidos para un tipo de estn en formato octal o hexadecimal, etc.
datos denido por el usuario, ste es libre de asignarles
cualquiera semntica que desee. Sin embargo, se consi-
dera de primera importancia que las semnticas sean tan
parecidas al comportamiento natural de los operadores
como para que el uso de los operadores sobrecargados
sea intuitivo. Por ejemplo, el uso del operador unario - Fstreams
debiera cambiar el signo de un valor.
Los operadores sobrecargados no dejan de ser funciones,
por lo que pueden devolver un valor, si este valor es del Tipo de ujo para el manejo de cheros. La denicin
tipo de datos con el que trabaja el operador, permite el previa de ostreams/istreams es aplicable a este apartado.
encadenamiento de sentencias. Por ejemplo, si tenemos Existen tres clases (cheros de lectura, de escritura o de
3 variables A, B y C de un tipo T y sobrecargamos el lectura/escritura): ifstream,ofstream y fstream.
operador = para que trabaje con el tipo de datos T, hay Como abrir un chero: (nom-
dos opciones: si el operador no devuelve nada una senten- bre_variable_chero).open(nombre_chero.dat/txt,
cia como A=B=C;" (sin las comillas) dara error, pero si ios::in); para abrirlo en modo lectura. (nombrevariable-
se devuelve un tipo de datos T al implementar el opera- chero).open(nombre_chero.dat/txt, ios::out); para
dor, permitira concatenar cuantos elementos se quisie- abrirlo en modo escritura.
ran, permitiendo algo como A=B=C=D=...;"
Ejemplo: f.open(datos.txt, ios::in);
Como cerrar el chero: nombre_variable_chero.close();
1.5.5 Standard Template Library (STL)
Ejemplo: f.close();
Los lenguajes de programacin suelen tener una serie Leer un chero:
de bibliotecas de funciones integradas para la manipu-
1-Si es chero de texto plano:
lacin de datos a nivel ms bsico. En C++, adems de
#include <fstream> #include <string> #include <ios-
poder usar las bibliotecas de C, se puede usar la nativa
tream> using namespace std; int main() { ifstream
STL (Standard Template Library), propia del lenguaje.
entrada; entrada.open(textoPlano.txt); string unString;
Proporciona una serie plantillas (templates) que permi-
while(entrada >> unString) cout << Lei: " << unString
ten efectuar operaciones sobre el almacenado de datos,
<< endl; return 0; }
procesado de entrada/salida.
2-Si es un chero binario(.dat); nom-
bre_variable_chero.read((char*)&nombre_variable,
1.5.6 Biblioteca de entrada y salida sizeof(tipo_variable)); Ejemplo: f.read((char*)&e,
sizeof(int));
Las clases basic_ostream y basic_stream, y los obje- Escribir un chero:
tos cout y cin, proporcionan la entrada y salida estn-
dar de datos (teclado/pantalla). Tambin est disponible 1-Si es chero de texto(.txt): nombrevariable<<"texto";
cerr, similar a cout, usado para la salida estndar de erro- donde texto puede ser tambin una variable de
res. Estas clases tienen sobrecargados los operadores << cualquier tipo primitivo, o un string. Ejemplo:
y >>, respectivamente, con el objeto de ser tiles en la f<<HOLA; 2-Si es un chero binario(.dat); nom-
insercin/extraccin de datos a dichos ujos. Son opera- bre_variable_chero.write((char*)&nombre_variable,
dores inteligentes, ya que son capaces de adaptarse al ti- sizeof(tipo_variable)); Ejemplo: f.write((char*)&e,
po de datos que reciben, aunque tendremos que denir el sizeof(int));
comportamiento de dicha entrada/salida para clases/tipos Pueden abrirse pasando al constructor los parmetros re-
de datos denidos por el usuario. Por ejemplo: lativos a la ubicacin del chero y el modo de apertura:
26 CAPTULO 1. FRAMEWORK

Sstreams tengo: " << intVector.size() << " elementos. << endl;
//imprimir 1 return 0; }
Se destacan dos clases, ostringstream e istringstream.
Todo lo anteriormente dicho es aplicable a estas clases.
Tratan a una cadena como si de un ujo de datos se tra- Colas dobles: son parecidas a los vectores, pero tie-
tase. ostringstream permite elaborar una cadena de texto nen mejor eciencia para agregar o eliminar ele-
insertando datos cual ujo, e istringstream puede extraer mentos en las puntas.deque<tipo_de_dato> nom-
la informacin contenida en una cadena (pasada como bre_de_la_cola;
parmetro en su constructor) con el operador >>. Ejem-
plos: Adems de los mtodos push_back(const T&) y
ostringstream s; s << nombre << ", << edad << ", pop_back(), se agregan los mtodos push_front(const
<< estatura << ", << punto(5,6) << endl; cout << T&) y pop_front(), que realizan lo mismo que los ya
s.str(); istringstream s(cadena); s >> nombre >> edad >> explicados, pero en el comienzo de la cola.
estatura >> p; #include <deque> //librera de deques using na-
mespace std; int main() { deque<int> intDeque;
intDeque.push_front(25); intDeque.push_back(12);
Contenedores while(intDeque.size()) intDeque.pop_back(); //borra
todos los elementos return 0; }
Son clases plantillas especiales utilizadas para almacenar
tipos de datos genricos, sean cuales sean. Todos los con-
tenedores son homogneos, es decir, una vez que se de- Listas: Son ecientes a la hora de agregar elemen-
claran para contener un tipo de dato determinado, en ese tos. La diferencia con las colas dobles, es que son
contenedor, solo se podrn meter elementos de ese tipo. ms ecientes para eliminar elementos que no estn
Segn la naturaleza del almacenado, disponemos de va- en alguna de las puntas"list<tipo_de_dato> nom-
rios tipos: bre_de_la_lista;

Vectores: Se denen por vector<tipo_de_dato> Adaptadores de secuencia.


nombre_del_vector; Son arrays (o listas ordenadas) Contenedores asociativos: map y multimap, que per-
que se redimensionan automticamente al agregar miten asociar una clave con un valor. map no
nuevos elementos, por lo que se le pueden agre- permite valores repetidos, mientras que multimap
gar tericamente, innitos elementos. Los vecto- si.
res nos permiten acceder a cualquier elemento que
contenga, mediante el operador[]. Debe tenerse en
map<tipo_de_llave, tipo_de_dato> nombre_del_map;
cuenta que si se intenta acceder a una posicin que
multimap<tipo_de_llave, tipo_de_dato> nom-
excede los lmites del vector, este no har ningn
bre_del_multimap;
chequeo, por lo que se debe ser cuidadoso al utili-
#include <map> //librera que contiene a map y mul-
zar este operador. Para asegurar un acceso seguro al
timap #include <string> //librera de strings #include
vector, se puede utilizar el mtodo at(int), que lanza
<iostream> //librera de entrada/salida using namespace
una excepcin de tipo std::out_of_range en caso de
std; int main() { map<int, string> intAString; intAS-
que esto ocurra.
tring[1] = uno"; intAString[10] = diez"; cout << En
intAString[1]: " << intAString[1] << endl; cout << En
Para aadir elementos al nal del vector, se utiliza el m-
intAString[10]: " << intAString[10] << endl; return 0; }
todo push_back(const T&). Por otro lado, para eliminar
un elemento del nal del vector, se debe usar el mtodo
pop_back().
Contenedores asociativos: set y multiset, que ofre-
#include <vector> //librera que contiene a la clase cen solamente la condicin de pertenencia, sin la
vector #include <iostream> using namespace std; int necesidad de garantizar un ordenamiento particular
main() { vector<int> intVector; //crea un vector de en- de los elementos que contienen.
teros(sin elementos) intVector.push_back(25); //agrega
el entero 25 al vector cout << El primer elemento
es: " << intVector.front() << " y mi vector tiene " << Iteradores
intVector.size() << " elementos. << endl; //imprime
el primer elemento(retornado por el mtodo front() Pueden considerarse como una generalizacin de la clase
intVector.push_back(32); //agrego el entero 32 al vector de puntero. Un iterador es un tipo de dato que permi-
cout << El primer elemento es: " << intVector[0] << te el recorrido y la bsqueda de elementos en los con-
endl; //imprime 25 intVector.pop_back(); //elimina el tenedores. Como las estructuras de datos (contenedores)
ltimo elemento del vector(osea 32) cout << Ahora son clases genricas, y los operadores (algoritmos) que
1.5. C++ 27

deben operar sobre ellas son tambin genricos (funcio- 1.5.7 C++11
nes genricas), Stepanov y sus colaboradores tuvieron que
desarrollar el concepto de iterador como elemento o nexo El 12 de agosto de 2011, Herb Sutter, presidente del co-
de conexin entre ambos. El nuevo concepto resulta ser mit de estndares de C++, inform la aprobacin un-
una especie de punteros que sealan a los diversos miem- nime del nuevo estndar.[2] La publicacin del mismo se
bros del contenedor (punteros genricos que como tales realiz en algn momento del 2011.
no existen en el lenguaje).
Entre las caractersticas del nuevo estndar se pueden
destacar:

Algoritmos Funciones lambda;

Combinando la utilizacin de templates y un estilo espe- Referencias rvalue;


cco para denotar tipos y variables, la STL ofrece una
serie de funciones que representan operaciones comunes, La palabra reservada auto;
y cuyo objetivo es parametrizar las operaciones en que Inicializacin uniforme;
estas funciones se ven involucradas de modo que su lec-
tura, comprensin y mantenimiento, sean ms fciles de Plantillas con nmero variable de argumentos.
realizar.
Un ejemplo es la funcin copy, la cual simplemente copia Adems se ha actualizado la biblioteca estndar del len-
variables desde un lugar a otro. Ms estrictamente, copia guaje.
los contenidos cuyas ubicaciones estn delimitadas por
dos iteradores, al espacio indicado por un tercer iterador.
La sintaxis es: 1.5.8 Actualidad y futuro
copy (inicio_origen, n_origen, inicio_destino);
La continuidad del C++11 es C++14, que es la versin
De este modo, todos los datos que estn entre ini- actual, y en el futuro, se estima que a nales de 2017,
cio_origen y n_origen, excluyendo el dato ubicado en ser C++17
este ltimo, son copiados a un lugar descrito o apuntado
por inicio_destino.
Un algoritmo muy importante que viene implementado 1.5.9 Diferencias de tipos respecto a C
en la biblioteca STL, es el sort. El algoritmo sort, orde-
na cualquier tipo de contenedor, siempre y cuando se le En C++, cualquier tipo de datos que sea declarado com-
pasen como argumentos, desde donde y hasta donde se pleto (fully qualied, en ingls) se convierte en un tipo de
quiere ordenarlo. datos nico. Las condiciones para que un tipo de datos T
sea declarado completo son a grandes rasgos las siguien-
#include <vector> #include <deque> #include <al- tes:
gorithm> int main() { vector<int> intVector; int-
Vector.push_back(60); intVector.push_back(12);
Es posible al momento de compilacin conocer el
intVector.push_back(54); //para este momento, el vector
espacio asociado al tipo de datos (es decir, el com-
tiene 60,12,54 sort(intVector.begin(), intVector.end());
pilador debe conocer el resultado de sizeof(T)).
//listo, array ordenado, ahora tiene 12,54,60 /*Notar que
si en vez de un vector, fuese una deque, se ordenara de T Tiene al menos un constructor, y un destructor,
la misma manera. */ } bien declarados.

Entre las funciones ms conocidas estn swap (variable1, Si T es un tipo compuesto, o es una clase derivada,
variable2), que simplemente intercambia los valores de o es la especicacin de una plantilla, o cualquier
variable1 y variable2; max (variable1, variable2) y su s- combinacin de las anteriores, entonces las dos con-
mil min (variable1, variable2), que retornan el mximo diciones establecidas previamente deben aplicar pa-
o mnimo entre dos valores; nd (inicio, n, valor) que ra cada tipo de dato constituyente.
busca valor en el espacio de variables entre inicio y n;
etctera. En general, esto signica que cualquier tipo de datos de-
Los algoritmos son muy variados, algunos incluso tienen nido haciendo uso de las cabeceras completas, es un tipo
versiones especcas para operar con ciertos iteradores o de datos completo.
contenedores, y proveen un nivel de abstraccin extra que En particular, y, a diferencia de lo que ocurra en C, los
permite obtener un cdigo ms limpio, que describe tipos denidos por medio de struct o enum son tipos
lo que se est haciendo, en vez de hacerlo paso a paso completos. Como tales, ahora son sujetos a sobrecarga,
explcitamente. conversiones implcitas, etctera.
28 CAPTULO 1. FRAMEWORK

Los tipos enumerados, entonces, ya no son simplemente Bajo DOS


alias para tipos enteros, sino que son tipos de datos ni-
cos en C++. El tipo de datos bool, igualmente, pasa a ser Turbo C, reemplazado por C++Builder
un tipo de datos nico, mientras que en C funcionaba en
algunos casos como un alias para alguna clase de dato de
tipo entero. Bajo GNU/Linux

Code::Blocks
1.5.10 Compiladores
NetBeans
Uno de los compiladores libres de C++ es el de GNU, el
compilador G++ (parte del proyecto GCC, que engloba Eclipse
varios compiladores para distintos lenguajes). Otros com-
piladores comunes son Intel C++ Compiler, el compila- Geany
dor de Xcode, el compilador de Borland C++, el compila-
dor de CodeWarrior C++, el compilador g++ de Cygwin, Emacs
el compilador g++ de MinGW, el compilador de Visual
C++, Carbide.c++, entre otros. Zinjai

Kdevelop
1.5.11 Ejemplo: Cmd con colores
Open Watcom (IDE y Dialog Editor)
Para cambiar el color de la interfaz del programa se nece-
sita la librera stdlib.h. su aplicacin sirve para cambiar CodeLite
el color de fondo del cmd y el color de las letras. Nota:
Esto nicamente funciona en sistemas Windows,
1.5.13 Vase tambin
Uso #include <stdlib.h> using namespace std; sys- A++
tem(color 45);
C++/CX
En este caso se ha denido el fondo de pantalla de color
rojo y las letras rosadas.
1.5.14 Referencias

1.5.12 Entornos de desarrollo [1] Stroustrup, Bjarne (1997). 1. The C++ Programming
Language (Third edicin). ISBN 0201889544. OCLC
Bajo Microsoft Windows 59193992.

Visual Studio Code [2] http://herbsutter.com/2011/08/12/


we-have-an-international-standard-c0x-is-unanimously-approved/
Code::Blocks
Dev-C++ Bibliografa
Visual C++
Bjarne Stroustrup, El lenguaje de programacin
wxDev-C++ C++, Addison Wesley, Madrid, 1998, ISBN 84-
7829-019-2
Zinjai
Open Watcom (IDE y Dialog Editor) Bjarne Stroustrup, The C++ Programming Langua-
ge, Addison-Wesley Pub Co; Tercera edicin (15 de
CodeLite febrero de 2000); ISBN 0-201-70073-5

Bjarne Stroustrup, The Design and Evolution of


Bajo MacOS C++, Addison-Wesley Pub Cp; Primera edicin (29
de marzo de 1994); ISBN 0-201-54330-3
Xcode
Zinjai Margaret A. Ellis y Bjarne Stroustrup, The Anno-
tated C++ Reference Manual, Addison-Wesley Pub
CodeLite Co; (1 de enero de 1990); ISBN 0-201-51459-1
1.6. JQUERY 29

1.5.15 Enlaces externos Utilidades varias como obtener informacin del


navegador, operar con objetos y vectores, funciones
Wikimedia Commons alberga contenido multi- para rutinas comunes, etc.
media sobre C++. Commons
Compatible con los navegadores Mozilla Firefox
2.0+, Internet Explorer 6+, Safari 3+, Opera 10.6+
Cplusplus resources (en ingls). Consultado el 10
y Google Chrome 8+.[5]
de abril de 2015.

C/C++ Reference=C Programming and C++ Pro-


gramming (en ingls). Consultado el 10 de abril de 1.6.2 Uso
2015.
jQuery consiste en un nico chero JavaScript que con-
tiene las funcionalidades comunes de DOM, eventos,
1.6 jQuery efectos y AJAX.
La caracterstica principal de la biblioteca es que permi-
jQuery es una biblioteca de JavaScript, creada inicial- te cambiar el contenido de una pgina web sin necesidad
mente por John Resig, que permite simplicar la mane- de recargarla, mediante la manipulacin del rbol DOM
ra de interactuar con los documentos HTML, manipu- y peticiones AJAX. Para ello utiliza las funciones $() o
lar el rbol DOM, manejar eventos, desarrollar anima- jQuery().
ciones y agregar interaccin con la tcnica AJAX a p-
ginas web. Fue presentada el 14 de enero de 2006 en
el BarCamp NYC. jQuery es la biblioteca de JavaScript Funcin $()
ms utilizada.[1]
jQuery es software libre y de cdigo abierto, posee un La forma de interactuar con la pgina es mediante la fun-
doble licenciamiento bajo la Licencia MIT y la Licencia cin $(), un alias de jQuery(), que recibe como parmetro
Pblica General de GNU v2, permitiendo su uso en pro- una expresin CSS o el nombre de una etiqueta HTML
yectos libres y privados.[2] jQuery, al igual que otras bi- y devuelve todos los nodos (elementos) que concuerden
bliotecas, ofrece una serie de funcionalidades basadas en con la expresin. Esta expresin es denominada selector
JavaScript que de otra manera requeriran de mucho ms en la terminologa de jQuery.[6]
cdigo, es decir, con las funciones propias de esta biblio- $("#tablaAlumnos); // Devolver el elemento con
teca se logran grandes resultados en menos tiempo y es- id="tablaAlumnos $(".activo); // Devolver una matriz
pacio. de elementos con class="activo
Las empresas Microsoft y Nokia anunciaron que inclui-
rn la biblioteca en sus plataformas.[3] Microsoft la aa- Una vez obtenidos los nodos, se les puede aplicar cual-
dir en su IDE Visual Studio[4] y la usar junto con los quiera de las funciones que facilita la biblioteca.
frameworks ASP.NET AJAX y ASP.NET MVC, mien-
// Se elimina el estilo (con removeClass()) y
tras que Nokia los integrar con su plataforma Web Run-
se aplica uno nuevo (con addClass()) a to-
Time.
dos los nodos con class="activo $(".acti-
vo).removeClass(activo).addClass(inactivo);
1.6.1 Caractersticas
O por ejemplo, efectos grcos:
Seleccin de elementos DOM.
// Anima todos los componentes con class="activo
Interactividad y modicaciones del rbol DOM, in- $(".activo).slideToggle(slow);
cluyendo soporte para CSS 1-3 y un plugin bsico
de XPath.

Eventos. Inicio de jQuery


Manipulacin de la hoja de estilos CSS.
Comnmente antes de realizar cualquier accin en el
Efectos y animaciones. documento con jQuery(), debemos percatarnos de que
el documento est listo. Para ello usamos $(docu-
Animaciones personalizadas. ment).ready();, de esta forma:

AJAX. $(document).ready(function() { //Aqu van todas las


acciones del documento. });
Soporta extensiones.
30 CAPTULO 1. FRAMEWORK

1.6.3 Versiones plataforma Java de Sun Microsystems. Su sintaxis deriva


en gran medida de C y C++, pero tiene menos utilidades
1.6.4 Vase tambin de bajo nivel que cualquiera de ellos. Las aplicaciones de
Java son generalmente compiladas a bytecode (clase Ja-
jQuery UI va) que puede ejecutarse en cualquier mquina virtual Ja-
va (JVM) sin importar la arquitectura de la computadora
Mootools subyacente.
Prototype La compaa Sun desarroll la implementacin de re-
ferencia original para los compiladores de Java, mqui-
Yahoo! UI Library nas virtuales, y libreras de clases en 1991 y las publi-
c por primera vez en 1995. A partir de mayo de 2007,
en cumplimiento con las especicaciones el Proceso de
1.6.5 Referencias
la Comunidad Java, Sun volvi a licenciar la mayora de
[1] Usage of JavaScript libraries for websites. sus tecnologas de Java bajo la Licencia Pblica General
de GNU. Otros tambin han desarrollado implementa-
[2] Licencias de uso de jQuery. ciones alternas a estas tecnologas de Sun, tales como el
Compilador de Java de GNU y el GNU Classpath.
[3] Anuncio en el blog ocial de jQuery sobre la inclusin
de la biblioteca en los productos de Microsoft y Nokia..
Consultado el 3 de abril de 2011.
1.7.1 Historia
[4] Entrada sobre el uso de jQuery en el blog de Scott Guth-
rie. Consultado el 3 de abril de 2011.

[5] Compatibilidad con los navegadores web.

[6] Selectors, en jQuery.com.

[7] Introduction to JavaScript Source Maps.

1.6.6 Enlaces externos


Sitio web ocial

API de jQuery

Ejemplo de sistema ABM usando jQuery

1.7 Java (lenguaje de programa-


cin)
Java es un lenguaje de programacin de propsito ge-
neral, concurrente, orientado a objetos que fue disea-
do especcamente para tener tan pocas dependencias de
implementacin como fuera posible. Su intencin es per-
mitir que los desarrolladores de aplicaciones escriban el
programa una vez y lo ejecuten en cualquier dispositi-
vo (conocido en ingls como WORA, o "write once, run
anywhere"), lo que quiere decir que el cdigo que es eje-
cutado en una plataforma no tiene que ser recompilado
para correr en otra. Java es, a partir de 2012, uno de los
lenguajes de programacin ms populares en uso, parti-
cularmente para aplicaciones de cliente-servidor de web,
con unos 10 millones de usuarios reportados.[1][2]
El lenguaje de programacin Java fue originalmente Duke, la mascota de Java
desarrollado por James Gosling de Sun Microsystems
(la cual fue adquirida por la compaa Oracle) y publi- Java se cre como una herramienta de programacin pa-
cado en 1995 como un componente fundamental de la ra ser usada en un proyecto de set-top-box en una peque-
1.7. JAVA (LENGUAJE DE PROGRAMACIN) 31

a operacin denominada the Green Project en Sun Mi- los binarios (bytecode) de las aplicaciones Java pudiesen
crosystems en el ao 1991. El equipo (Green Team), com- ejecutarse en cualquier plataforma.
puesto por trece personas y dirigido por James Gosling, El entorno de ejecucin era relativamente seguro y los
trabaj durante 18 meses en Sand Hill Road en Menlo principales navegadores web pronto incorporaron la posi-
Park en su desarrollo. bilidad de ejecutar applets Java incrustadas en las pginas
El lenguaje se denomin inicialmente Oak (por un roble web.
que haba fuera de la ocina de Gosling), luego pas a de-
Java ha experimentado numerosos cambios desde la ver-
nominarse Green tras descubrir que Oak era ya una marca sin primigenia, JDK 1.0, as como un enorme incremen-
comercial registrada para adaptadores de tarjetas grcas to en el nmero de clases y paquetes que componen la
y nalmente se renombr a Java. biblioteca estndar.[4]
Es frecuentada por algunos de los miembros del equipo. Desde J2SE 1.4, la evolucin del lenguaje ha sido regu-
Pero no est claro si es un acrnimo o no, aunque algunas lada por el JCP (Java Community Process), que usa Java
fuentes sealan que podra tratarse de las iniciales de sus Specication Requests (JSRs) para proponer y especicar
diseadores: James Gosling, Arthur Van Ho, y Andy cambios en la plataforma Java. El lenguaje en s mismo
Bechtolsheim. Otros abogan por el siguiente acrnimo, est especicado en la Java Language Specication (JLS),
Just Another Vague Acronym (slo otro acrnimo am- o Especicacin del Lenguaje Java. Los cambios en los
biguo ms). La hiptesis que ms fuerza tiene es la de JLS son gestionados en JSR 901.
que Java debe su nombre a un tipo de caf disponible en
la cafetera cercana, de ah que el icono de java sea una
taza de caf caliente. Un pequeo signo que da fuerza a JDK 1.0 (23 de enero de 1996) Primer lanza-
esta teora es que los 4 primeros bytes (el nmero mgi- miento: comunicado de prensa
co) de los archivos.class que genera el compilador, son en
hexadecimal, 0xCAFEBABE. A pesar de todas estas teo- JDK 1.1 (19 de febrero de 1997) Principales adi-
ras, el nombre fue sacado al parecer de una lista aleatoria ciones incluidas: comunicado de prensa
de palabras.[3]
una reestructuracin intensiva del modelo de
Los objetivos de Gosling eran implementar una mquina eventos AWT (Abstract Windowing Toolkit)
virtual y un lenguaje con una estructura y sintaxis similar
a C++. Entre junio y julio de 1994, tras una sesin mara- clases internas (inner classes)
toniana de tres das entre John Gaga, James Gosling, Pa- JavaBeans
trick Naughton, Wayne Rosing y Eric Schmidt, el equipo
JDBC (Java Database Connectivity), para la
reorient la plataforma hacia la Web. Sintieron que la lle-
integracin de bases de datos
gada del navegador web Mosaic, propiciara que Internet
se convirtiese en un medio interactivo, como el que pen- RMI (Remote Method Invocation)
saban era la televisin por cable. Naughton cre entonces
un prototipo de navegador, WebRunner, que ms tarde J2SE 1.2 (8 de diciembre de 1998) Nombre cla-
sera conocido como HotJava. ve Playground. Esta y las siguientes versiones fueron
En 1994, se les hizo una demostracin de HotJava y la recogidas bajo la denominacin Java 2 y el nom-
plataforma Java a los ejecutivos de Sun. Java 1.0a pudo bre J2SE (Java 2 Platform, Standard Edition), re-
descargarse por primera vez en 1994, pero hubo que es- emplaz a JDK para distinguir la plataforma ba-
perar al 23 de mayo de 1995, durante las conferencias se de J2EE (Java 2 Platform, Enterprise Edition) y
de SunWorld, a que vieran la luz pblica Java y HotJa- J2ME (Java 2 Platform, Micro Edition). Otras me-
va, el navegador Web. El acontecimiento fue anunciado joras aadidas incluan: comunicado de prensa
por John Gage, el Director Cientco de Sun Microsys-
tems. El acto estuvo acompaado por una pequea sor- la palabra reservada (keyword) strictfp
presa adicional, el anuncio por parte de Marc Andrees- reexin en la programacin
sen, Vicepresidente Ejecutivo de Netscape, de que Java la API grca ( Swing) fue integrada en las
sera soportado en sus navegadores. El 9 de enero del ao clases bsicas
siguiente, 1996, Sun fund el grupo empresarial JavaSoft
para que se encargase del desarrollo tecnolgico. Dos la mquina virtual (JVM) de Sun fue equipa-
semanas ms tarde la primera versin de Java fue publi- da con un compilador JIT (Just in Time) por
cada. primera vez

La promesa inicial de Gosling era Write Once, Run Anyw- Java Plug-in
here (Escrbelo una vez, ejectalo en cualquier lugar), Java IDL, una implementacin de IDL (Len-
proporcionando un lenguaje independiente de la plata- guaje de Descripcin de Interfaz) para la in-
forma y un entorno de ejecucin (la JVM) ligero y gra- teroperabilidad con CORBA
tuito para las plataformas ms populares de forma que
Colecciones (Collections)
32 CAPTULO 1. FRAMEWORK

J2SE 1.3 (8 de mayo de 2000) Nom- Metadatos tambin llamados anotaciones,


bre clave Kestrel. Los cambios ms notables permite a estructuras del lenguaje como las
fueron:comunicado de prensa lista completa de clases o los mtodos, ser etiquetados con datos
cambios adicionales, que puedan ser procesados poste-
riormente por utilidades de proceso de meta-
la inclusin de la mquina virtual de HotSpot datos. (Especicado por JSR 175.)
JVM (la JVM de HotSpot fue lanzada inicial-
mente en abril de 1999, para la JVM de J2SE Autoboxing/unboxing Conversiones auto-
1.2) mticas entre tipos primitivos (Como los int) y
clases de envoltura primitivas (Como Integer).
RMI fue cambiado para que se basara en
(Especicado por JSR 201.)
CORBA
Enumeraciones la palabra reservada enum
JavaSound
crea una typesafe, lista ordenada de valores
se incluy el Java Naming and Directory Inter- (como Dia.LUNES, Dia.MARTES, etc.). An-
face (JNDI) en el paquete de bibliotecas prin- teriormente, esto solo poda ser llevado a cabo
cipales (anteriormente disponible como una por constantes enteras o clases construidas ma-
extensin) nualmente (enum pattern). (Especicado por
Java Platform Debugger Architecture (JPDA) JSR 201.)
Varargs (nmero de argumentos variable)
J2SE 1.4 (6 de febrero de 2002) Nombre Clave El ltimo parmetro de un mtodo puede ser
Merlin. Este fue el primer lanzamiento de la plata- declarado con el nombre del tipo seguido por
forma Java desarrollado bajo el Proceso de la Co- tres puntos (e.g. void drawtext(String... lines)).
munidad Java como JSR 59. Los cambios ms no- En la llamada al mtodo, puede usarse cual-
tables fueron: comunicado de prensalista completa quier nmero de parmetros de ese tipo, que
de cambios sern almacenados en un array para pasarlos
al mtodo.
Palabra reservada assert (Especicado en JSR
41.) Bucle for mejorado La sintaxis para el bu-
cle for se ha extendido con una sintaxis es-
Expresiones regulares modeladas al estilo de
pecial para iterar sobre cada miembro de un
las expresiones regulares Perl
array o sobre cualquier clase que implemente
Encadenacin de excepciones Permite a una Iterable, como la clase estndar Collection, de
excepcin encapsular la excepcin de bajo ni- la siguiente forma:
vel original.
non-blocking NIO (New Input/Output) (Espe- void displayWidgets (Iterable<Widget> widgets) { for
cicado en JSR 51.) (Widget w : widgets) { w.display(); } }
Logging API (Specied in JSR 47.)
API I/O para la lectura y escritura de imgenes Este ejemplo itera sobre el objeto Iterable widgets, asig-
en formatos como JPEG o PNG nando, en orden, cada uno de los elementos a la variable
Parser XML integrado y procesador XSLT w, y llamando al mtodo display() de cada uno de ellos.
(JAXP) (Especicado en JSR 5 y JSR 63.) (Especicado por JSR 201.)
Seguridad integrada y extensiones criptogr-
cas (JCE, JSSE, JAAS) Java SE 6 (11 de diciembre de 2006) Nom-
bre clave Mustang. Estuvo en desarrollo bajo la
Java Web Start incluido (El primer lanzamien-
JSR 270. En esta versin, Sun cambi el nombre
to ocurri en marzo de 2001 para J2SE 1.3)
J2SE por Java SE y elimin el ".0 del nmero
(Especicado en JSR 56.)
de versin.. Est disponible en http://java.sun.com/
javase/6/. Los cambios ms importantes introduci-
J2SE 5.0 (30 de septiembre de 2004) Nombre dos en esta versin son:
clave: Tiger. (Originalmente numerado 1.5, esta no-
tacin an es usada internamente.) Desarrollado ba- Incluye un nuevo marco de trabajo y APIs que
jo JSR 176, Tiger aadi un nmero signicativo de hacen posible la combinacin de Java con len-
nuevas caractersticas comunicado de prensa guajes dinmicos como PHP, Python, Ruby y
JavaScript.
Plantillas (genricos) provee conversin de
tipos (type safety) en tiempo de compilacin Incluye el motor Rhino, de Mozilla, una im-
para colecciones y elimina la necesidad de la plementacin de Javascript en Java.
mayora de conversin de tipos (type casting). Incluye un cliente completo de Servicios Web
(Especicado por JSR 14.) y soporta las ltimas especicaciones para
1.7. JAVA (LENGUAJE DE PROGRAMACIN) 33

Servicios Web, como JAX-WS 2.0, JAXB 2.0, 4. Debera disearse para ejecutar cdigo en sistemas
STAX y JAXP. remotos de forma segura.
Mejoras en la interfaz grca y en el rendi- 5. Debera ser fcil de usar y tomar lo mejor de otros
miento. lenguajes orientados a objetos, como C++.

Java SE 7 Nombre clave Dolphin. En el ao


Para conseguir la ejecucin de cdigo remoto y el so-
2006 an se encontraba en las primeras etapas de
porte de red, los programadores de Java a veces recurren
planicacin. Su lanzamiento fue en julio de 2011.
a extensiones como CORBA (Common Object Request
Soporte para XML dentro del propio lenguaje. Broker Architecture), Internet Communications Engine
o OSGi respectivamente.
Un nuevo concepto de superpaquete.
Soporte para closures.
Introduccin de anotaciones estndar para de- Orientado a objetos
tectar fallos en el software.
La primera caracterstica, orientado a objetos (OO), se
No ociales: reere a un mtodo de programacin y al diseo del len-
guaje. Aunque hay muchas interpretaciones para OO, una
NIO2. primera idea es disear el software de forma que los dis-
Java Module System. tintos tipos de datos que usen estn unidos a sus opera-
Java Kernel. ciones. As, los datos y el cdigo (funciones o mtodos)
se combinan en entidades llamadas objetos. Un objeto
Nueva API para el manejo de Das y Fechas, puede verse como un paquete que contiene el compor-
la cual reemplazara las antiguas clases Date y tamiento (el cdigo) y el estado (datos). El principio es
Calendar. separar aquello que cambia de las cosas que permanecen
Posibilidad de operar con clases BigDecimal inalterables. Frecuentemente, cambiar una estructura de
usando operandos. datos implica un cambio en el cdigo que opera sobre los
mismos, o viceversa. Esta separacin en objetos coheren-
Java SE 8 lanzada en marzo de 2014. Cabe des- tes e independientes ofrece una base ms estable para el
tacar: diseo de un sistema software. El objetivo es hacer que
grandes proyectos sean fciles de gestionar y manejar,
Incorpora de forma completa la librera Ja- mejorando como consecuencia su calidad y reduciendo
vaFX. el nmero de proyectos fallidos.
Diferentes mejoras en seguridad. Otra de las grandes promesas de la programacin orien-
Diferentes mejoras en concurrencia. tada a objetos es la creacin de entidades ms genri-
Aade funcionalidad para programacin fun- cas (objetos) que permitan la reutilizacin del software
cional mediante expresiones Lambda. entre proyectos, una de las premisas fundamentales de
la Ingeniera del Software. Un objeto genrico cliente,
Mejora la integracin de JavaScript. por ejemplo, debera en teora tener el mismo conjunto
Nuevas API para manejo de fechas y tiempo de comportamiento en diferentes proyectos, sobre todo
(date - time). cuando estos coinciden en cierta medida, algo que suele
suceder en las grandes organizaciones. En este sentido,
En el 2005 se calcula en 4,5 millones el nmero de desa- los objetos podran verse como piezas reutilizables que
rrolladores y 2.500 millones de dispositivos habilitados pueden emplearse en mltiples proyectos distintos, posi-
con tecnologa Java. bilitando as a la industria del software a construir proyec-
tos de envergadura empleando componentes ya existentes
y de comprobada calidad; conduciendo esto nalmente a
1.7.2 Filosofa una reduccin drstica del tiempo de desarrollo. Pode-
mos usar como ejemplo de objeto el aluminio. Una vez
El lenguaje Java se cre con cinco objetivos principales: denidos datos (peso, maleabilidad, etc.), y su compor-
tamiento (soldar dos piezas, etc.), el objeto aluminio
1. Debera usar el paradigma de la programacin puede ser reutilizado en el campo de la construccin, del
orientada a objetos. automvil, de la aviacin, etc.

2. Debera permitir la ejecucin de un mismo progra- La reutilizacin del software ha experimentado resulta-
ma en mltiples sistemas operativos. dos dispares, encontrando dos dicultades principales:
el diseo de objetos realmente genricos es pobremen-
3. Debera incluir por defecto soporte para trabajo en te comprendido, y falta una metodologa para la amplia
red. comunicacin de oportunidades de reutilizacin. Algunas
34 CAPTULO 1. FRAMEWORK

comunidades de cdigo abierto (open source) quieren critos en C o C++. Esto hizo que Java se ganase una repu-
ayudar en este problema dando medios a los desarrolla- tacin de lento en rendimiento. Las implementaciones re-
dores para diseminar la informacin sobre el uso y versa- cientes de la JVM dan lugar a programas que se ejecutan
tilidad de objetos reutilizables y bibliotecas de objetos. considerablemente ms rpido que las versiones antiguas,
empleando diversas tcnicas, aunque sigue siendo mucho
ms lento que otros lenguajes.
Independencia de la plataforma
La primera de estas tcnicas es simplemente compilar di-
rectamente en cdigo nativo como hacen los compilado-
La segunda caracterstica, la independencia de la plata-
res tradicionales, eliminando la etapa del bytecode. Es-
forma, signica que programas escritos en el lenguaje
to da lugar a un gran rendimiento en la ejecucin, pero
Java pueden ejecutarse igualmente en cualquier tipo de
tapa el camino a la portabilidad. Otra tcnica, conocida
hardware. Este es el signicado de ser capaz de escribir
como compilacin JIT (Just In Time, o compilacin al
un programa una vez y que pueda ejecutarse en cualquier
vuelo), convierte el bytecode a cdigo nativo cuando se
dispositivo, tal como reza el axioma de Java, write once,
ejecuta la aplicacin. Otras mquinas virtuales ms sos-
run anywhere.
ticadas usan una recompilacin dinmica en la que la
Para ello, se compila el cdigo fuente escrito en lenguaje VM es capaz de analizar el comportamiento del programa
Java, para generar un cdigo conocido como bytecode en ejecucin y recompila y optimiza las partes crticas.
(especcamente Java bytecode)instrucciones mquina La recompilacin dinmica puede lograr mayor grado de
simplicadas especcas de la plataforma Java. Esta pieza optimizacin que la compilacin tradicional (o esttica),
est a medio camino entre el cdigo fuente y el cdigo ya que puede basar su trabajo en el conocimiento que de
mquina que entiende el dispositivo destino. El bytecode primera mano tiene sobre el entorno de ejecucin y el
es ejecutado entonces en la mquina virtual (JVM), un conjunto de clases cargadas en memoria. La compilacin
programa escrito en cdigo nativo de la plataforma des- JIT y la recompilacin dinmica permiten a los progra-
tino (que es el que entiende su hardware), que interpreta mas Java aprovechar la velocidad de ejecucin del cdigo
y ejecuta el cdigo. Adems, se suministran bibliotecas nativo sin por ello perder la ventaja de la portabilidad en
adicionales para acceder a las caractersticas de cada dis- ambos.
positivo (como los grcos, ejecucin mediante hebras
La portabilidad es tcnicamente difcil de lograr, y el xi-
o threads, la interfaz de red) de forma unicada. Se de-
to de Java en ese campo ha sido dispar. Aunque es de
be tener presente que, aunque hay una etapa explcita de
hecho posible escribir programas para la plataforma Ja-
compilacin, el bytecode generado es interpretado o con-
va que acten de forma correcta en mltiples plataformas
vertido a instrucciones mquina del cdigo nativo por el
de distinta arquitectura, el gran nmero de estas con pe-
compilador JIT (Just In Time).
queos errores o inconsistencias llevan a que a veces se
Hay implementaciones del compilador de Java que con- parodie el eslogan de Sun, "Write once, run anywhere"
vierten el cdigo fuente directamente en cdigo objeto como Write once, debug everywhere (o Escrbelo una
nativo, como GCJ. Esto elimina la etapa intermedia don- vez, ejectalo en cualquier parte por Escrbelo una vez,
de se genera el bytecode, pero la salida de este tipo de depralo en todas partes).
compiladores slo puede ejecutarse en un tipo de arqui-
El concepto de independencia de la plataforma de Java
tectura.
cuenta, sin embargo, con un gran xito en las aplicaciones
La licencia sobre Java de Sun insiste que todas las im- en el entorno del servidor, como los Servicios Web, los
plementaciones sean compatibles. Esto dio lugar a una Servlets, los Java Beans, as como en sistemas empotrados
disputa legal entre Microsoft y Sun, cuando este ltimo basados en OSGi, usando entornos Java empotrados.
aleg que la implementacin de Microsoft no daba sopor-
te a las interfaces RMI y JNI adems de haber aadido
caractersticas dependientes de su plataforma. Sun de- El recolector de basura
mand a Microsoft y gan por daos y perjuicios (unos
20 millones de dlares) as como una orden judicial for- En Java el problema fugas de memoria se evita en gran
zando la acatacin de la licencia de Sun. Como respuesta, medida gracias a la recoleccin de basura (o automatic
Microsoft no ofrece Java con su versin de sistema opera- garbage collector). El programador determina cundo se
tivo, y en recientes versiones de Windows, su navegador crean los objetos y el entorno en tiempo de ejecucin de
Internet Explorer no admite la ejecucin de applets sin Java (Java runtime) es el responsable de gestionar el ciclo
un conector (o plugin) aparte. Sin embargo, Sun y otras de vida de los objetos. El programa, u otros objetos pue-
fuentes ofrecen versiones gratuitas para distintas versio- den tener localizado un objeto mediante una referencia a
nes de Windows. ste. Cuando no quedan referencias a un objeto, el reco-
Las primeras implementaciones del lenguaje usaban una lector de basura de Java borra el objeto, liberando as la
mquina virtual interpretada para conseguir la portabi- memoria que ocupaba previniendo posibles fugas (ejem-
lidad. Sin embargo, el resultado eran programas que se plo: un objeto creado y nicamente usado dentro de un
ejecutaban comparativamente ms lentos que aquellos es- mtodo slo tiene entidad dentro de ste; al salir del m-
1.7. JAVA (LENGUAJE DE PROGRAMACIN) 35

todo el objeto es eliminado). Aun as, es posible que se la propia clase. Otros tipos de acceso son private
produzcan fugas de memoria si el cdigo almacena re- o protected.
ferencias a objetos que ya no son necesarioses decir,
pueden an ocurrir, pero en un nivel conceptual superior. La utilidad de impresin (en pantalla por ejemplo)
En denitiva, el recolector de basura de Java permite una forma parte de la biblioteca estndar de Java: la clase
fcil creacin y eliminacin de objetos y mayor seguri- System dene un campo pblico esttico llama-
dad. do out. El objeto out es una instancia de Prin-
tStream, que ofrece el mtodo println (String)
para volcar datos en la pantalla (la salida estndar).
1.7.3 Sintaxis
La sintaxis de Java se deriva en gran medida de C++. Pero Las aplicaciones autnomas se ejecutan dando al en-
a diferencia de ste, que combina la sintaxis para progra- torno de ejecucin de Java el nombre de la clase cuyo
macin genrica, estructurada y orientada a objetos, Java mtodo main debe invocarse. Por ejemplo, una lnea
fue construido desde el principio para ser completamente de comando (en Unix o Windows) de la forma java
orientado a objetos. Todo en Java es un objeto (salvo al- cp . Hola ejecutar el programa del ejemplo (previa-
gunas excepciones), y todo en Java reside en alguna clase mente compilado y generado Hola.class). El nom-
(recordemos que una clase es un molde a partir del cual bre de la clase cuyo mtodo main se llama puede es-
pueden crearse varios objetos). pecicarse tambin en el chero MANIFEST del
archivo de empaquetamiento de Java (.jar).
Aplicaciones autnomas Este ejemplo necesita una
pequea explicacin.
Applets Las applet Java son programas incrustados en
Todo en Java est dentro de una clase, incluyendo otras aplicaciones, normalmente una pgina Web que se
programas autnomos. muestra en un navegador.

El cdigo fuente se guarda en archivos con el mismo // Hello.java import javax.swing.JApplet; import ja-
nombre que la clase que contienen y con extensin va.awt.Graphics; public class Hello extends JApplet {
.java. Una clase (class) declarada pblica (public) public void paint(Graphics g) { g.drawString(Hola,
debe seguir este convenio. En el ejemplo anterior, mundo!", 65, 95); } }
la clase es Hola, por lo que el cdigo fuente debe <!-- Hola.html --> <html> <head> <title>Applet
guardarse en el chero Hola.java Hola Caracola.</title> </head> <body> <applet co-
de="Hola.class width="200 height="200"> </applet>
El compilador genera un archivo de clase (con ex- </body> </html>
tensin .class) por cada una de las clases denidas
en el archivo fuente. Una clase annima se trata co-
Actualmente HTML 5 ha eliminado el uso de la etique-
mo si su nombre fuera la concatenacin del nombre
ta <applet>. Pero todava existe la forma de usarlo en
de la clase que la encierra, el smbolo $, y un n-
HTML5. (Texto en ingls) Java Applets in HTML5.
mero entero.
La sentencia import indica al compilador de Java que in-
Los programas que se ejecutan de forma inde- cluya las clases java.applet. Applet y java.awt. Grap-
pendiente y autnoma, deben contener el mtodo hics, para poder referenciarlas por sus nombres, sin tener
main(). que anteponer la ruta completa cada vez que se quieran
La palabra reservada void indica que el mtodo usar en el cdigo fuente.
main no devuelve nada. La clase Hola extiende (extends) a la clase Applet, es de-
cir, es una subclase de sta. La clase Applet permite a
El mtodo main debe aceptar un array de objetos la aplicacin mostrar y controlar el estado del applet. La
tipo String. Por acuerdo se referencia como args, clase Applet es un componente del AWT (Abstract Win-
aunque puede emplearse cualquier otro identica- dow Toolkit), que permite al applet mostrar una interfaz
dor. grca de usuario o GUI (Graphical User Interface), y
responder a eventos generados por el usuario.
La palabra reservada static indica que el mtodo
es un mtodo de clase, asociado a la clase en vez de La clase Hola sobrecarga el mtodo paint (Graphics)
a una instancia de la misma. El mtodo main debe heredado de la superclase contenedora (Applet en este
ser esttico o de clase. caso), para acceder al cdigo encargado de dibujar. El
mtodo paint() recibe un objeto Graphics que contie-
La palabra reservada public signica que un mtodo ne el contexto grco para dibujar el applet. El mtodo
puede ser llamado desde otras clases, o que la clase paint() llama al mtodo drawString (String, int, int) del
puede ser usada por clases fuera de la jerarqua de objeto
36 CAPTULO 1. FRAMEWORK

Servlets Los servlets son componentes de la parte del con una barra de ttulo y un control para cerrarla.
servidor de Java EE, encargados de generar respuestas a El constructor Hola() inicializa el marco o frame
las peticiones recibidas de los clientes. llamando al mtodo setDefaultCloseOperation (int)
// Hola.java import java.io.IOException; import ja- heredado de JFrame para establecer las operaciones
vax.servlet.*; public class Hola extends GenericServlet { por defecto cuando el control de cierre en la ba-
public void service(ServletRequest request, ServletRes- rra de ttulo es seleccionado al valor WindowCons-
ponse response) throws ServletException, IOException tants.DISPOSE_ON_CLOSE. Esto hace que se liberen
{ response.setContentType(text/html); PrintWriter los recursos tomados por la ventana cuando es cerrada,
pw = response.getWriter(); pw.println(Hola, mundo!"); y no simplemente ocultada, lo que permite a la mquina
pw.close(); } } virtual y al programa acabar su ejecucin. A continua-
cin se crea un objeto de tipo JLabel con el texto Hola,
Las sentencias import indican al compilador de Java la mundo!", y se aade al marco mediante el mtodo add
inclusin de todas las clases pblicas e interfaces de los (Component), heredado de la clase Container. El m-
paquetes java.io y javax.servlet en la compilacin. todo pack(), heredado de la clase Window, es invocado
para dimensionar la ventana y distribuir su contenido.
La clase Hola extiende (extends), es heredera de la clase
GenericServlet. Esta clase proporciona la interfaz para El mtodo main() es llamado por la JVM al comienzo
que el servidor le pase las peticiones al servlet y el meca- del programa. Crea una instancia de la clase Hola y hace
nismo para controlar el ciclo de vida del servlet. la ventana sea mostrada invocando al mtodo setVisible
(boolean) de la superclase (clase de la que hereda) con el
La clase Hola sobrecarga el mtodo service (ServletRe- parmetro a true. Vase que, una vez el marco es dibu-
quest, ServletResponse), denido por la interfaz ser- jado, el programa no termina cuando se sale del mtodo
vlet para acceder al manejador de la peticin de servi- main(), ya que el cdigo del que depende se encuentra en
cio. El mtodo service() recibe un objeto de tipo Servle- un hilo de ejecucin independiente ya lanzado, y que per-
tRequest que contiene la peticin del cliente y un objeto manecer activo hasta que todas las ventanas hayan sido
de tipo ServletResponse, usado para generar la respues- destruidas.
ta que se devuelve al cliente. El mtodo service() puede
lanzar (throws) excepciones de tipo ServletException e
IOException si ocurre algn tipo de anomala.
El mtodo setContentType (String) en el objeto
respuesta establece el tipo de contenido MIME a 1.7.4 Entornos de funcionamiento
text/html, para indicar al cliente que la respuesta a su
peticin es una pgina con formato HTML. El mtodo El diseo de Java, su robustez, el respaldo de la industria
getWriter() del objeto respuesta devuelve un objeto de y su fcil portabilidad han hecho de Java uno de los len-
tipo PrintWriter, usado como una tubera por la que via- guajes con un mayor crecimiento y amplitud de uso en
jarn los datos al cliente. El mtodo println (String) es- distintos mbitos de la industria de la informtica.
cribe la cadena Hola, mundo!" en la respuesta y nal-
mente se llama al mtodo close() para cerrar la conexin,
que hace que los datos escritos en la tubera o stream
sean devueltos al cliente.
En dispositivos mviles y sistemas embebidos

Aplicaciones con interfaz Swing es la biblioteca para Desde la creacin de la especicacin J2ME (Java 2 Plat-
la interfaz grca de usuario avanzada de la plataforma form, Micro Edition), una versin del entorno de ejecu-
Java SE. cin Java reducido y altamente optimizado, especialmen-
// Hola.java import javax.swing.*; public class Hola te desarrollado para el mercado de dispositivos electrni-
cos de consumo se ha producido toda una revolucin en
extends JFrame { Hola() { setDefaultCloseOpe-
ration(WindowConstants.DISPOSE_ON_CLOSE); lo que a la extensin de Java se reere.
add(new JLabel(Hola, mundo!")); pack(); } public sta- Es posible encontrar microprocesadores diseados pa-
tic void main(String[] args) { new Hola().setVisible(true); ra ejecutar bytecode Java y software Java para tarjetas
}} inteligentes (JavaCard), telfonos mviles, buscaperso-
nas, set-top-boxes, sintonizadores de TV y otros peque-
Las instrucciones import indican al compilador de Java os electrodomsticos.
que las clases e interfaces del paquete javax.swing se in- El modelo de desarrollo de estas aplicaciones es muy se-
cluyan en la compilacin. mejante a las applets de los navegadores salvo que en este
La clase Hola extiende (extends) la clase ja- caso se denominan MIDlets.
vax.swing.JFrame, que implementa una ventana Vase Sun Mobile Device Tecnology
1.7. JAVA (LENGUAJE DE PROGRAMACIN) 37

En el navegador web La especicacin de Servlets y JSP dene un API de pro-


gramacin y los requisitos para un contenedor (servidor)
Desde la primera versin de Java existe la posibilidad de dentro del cual se puedan desplegar estos componentes
desarrollar pequeas aplicaciones (Applets) en Java que para formar aplicaciones web dinmicas completas. Hoy
luego pueden ser incrustadas en una pgina HTML pa- da existen multitud de contenedores (libres y comercia-
ra que sean descargadas y ejecutadas por el navegador les) compatibles con estas especicaciones.
web. Estas miniaplicaciones se ejecutan en una JVM que
A partir de su expansin entre la comunidad de desa-
el navegador tiene congurada como extensin (plug-in)
rrolladores, estas tecnologas han dado paso a modelos
en un contexto de seguridad restringido congurable pa-
de desarrollo mucho ms elaborados con frameworks (pe
ra impedir la ejecucin local de cdigo potencialmente
Struts, Webwork) que se sobreponen sobre los servlets y
malicioso.
las JSP para conseguir un entorno de trabajo mucho ms
El xito de este tipo de aplicaciones (la visin del equipo poderoso y segmentado en el que la especializacin de ro-
de Gosling) no fue realmente el esperado debido a diver- les sea posible (desarrolladores, diseadores grcos,...)
sos factores, siendo quizs el ms importante la lentitud y se facilite la reutilizacin y robustez de cdigo. A pe-
y el reducido ancho de banda de las comunicaciones en sar de todo ello, las tecnologas que subyacen (Servlets y
aquel entonces que limitaba el tamao de las applets que JSP) son substancialmente las mismas.
se incrustaban en el navegador. La aparicin posterior de
Este modelo de trabajo se ha convertido en uno de los
otras alternativas (aplicaciones web dinmicas de servi-
estndar de facto para el desarrollo de aplicaciones web
dor) dej un reducido mbito de uso para esta tecnologa,
dinmicas de servidor.
quedando hoy relegada fundamentalmente a componen-
tes especcos para la intermediacin desde una aplica-
cin web dinmica de servidor con dispositivos ubicados
en la mquina cliente donde se ejecuta el navegador. En aplicaciones de escritorio
Las applets Java no son las nicas tecnologas (aunque
s las primeras) de componentes complejos incrustados Hoy en da existen multitud de aplicaciones grcas de
en el navegador. Otras tecnologas similares pueden ser: usuario basadas en Java. El entorno de ejecucin Java
ActiveX de Microsoft, Flash, Java Web Start, etc. (JRE) se ha convertido en un componente habitual en los
PC de usuario de los sistemas operativos ms usados en
el mundo. Adems, muchas aplicaciones Java lo incluyen
En sistemas de servidor dentro del propio paquete de la aplicacin de modo que
se ejecuten en cualquier PC.
En la parte del servidor, Java es ms popular que nunca,
En las primeras versiones de la plataforma Java existan
desde la aparicin de la especicacin de Servlets y JSP
importantes limitaciones en las API de desarrollo gr-
(Java Server Pages).
co (AWT). Desde la aparicin de la biblioteca Swing la
Hasta entonces, las aplicaciones web dinmicas de servi- situacin mejor substancialmente y posteriormente con
dor que existan se basaban fundamentalmente en com- la aparicin de bibliotecas como SWT hacen que el desa-
ponentes CGI y lenguajes interpretados. Ambos tenan rrollo de aplicaciones de escritorio complejas y con gran
diversos inconvenientes (fundamentalmente lentitud, ele- dinamismo, usabilidad, etc. sea relativamente sencillo.
vada carga computacional o de memoria y propensin a
errores por su interpretacin dinmica).
Los servlets y las JSP supusieron un importante avance Plataformas soportadas
ya que:
Una versin del entorno de ejecucin Java JRE (Java Run-
El API de programacin es muy sencilla, exible y time Environment) est disponible en la mayora de equi-
extensible. pos de escritorio. Sin embargo, Microsoft no lo ha inclui-
do por defecto en sus sistemas operativos. En el caso de
Los servlets no son procesos independientes (como Apple, ste incluye una versin propia del JRE en su sis-
los CGI) y por tanto se ejecutan dentro del mismo tema operativo, el Mac OS. Tambin es un producto que
proceso que la JVM mejorando notablemente el ren- por defecto aparece en la mayora de las distribuciones de
dimiento y reduciendo la carga computacional y de GNU/Linux. Debido a incompatibilidades entre distintas
memoria requeridas. versiones del JRE, muchas aplicaciones preeren instalar
su propia copia del JRE antes que conar su suerte a la
Las JSP son pginas que se compilan dinmicamen- aplicacin instalada por defecto. Los desarrolladores de
te (o se precompilan previamente a su distribucin) applets de Java o bien deben insistir a los usuarios en la
de modo que el cdigo que se consigue supone una actualizacin del JRE, o bien desarrollar bajo una versin
ventaja en rendimiento substancial frente a muchos antigua de Java y vericar el correcto funcionamiento en
lenguajes interpretados. las versiones posteriores.
38 CAPTULO 1. FRAMEWORK

1.7.5 Programacin Operadores

Expresiones Los operadores son aquellos que tras realizar una opera-
cin devuelven un resultado, estos se puede caracterizar
por el nmero de operadores, el tipo de operandos, y el
Las expresiones son un conjunto de elementos o tokens resultado que generan.
junto con literales que son evaluados para devolver un
resultado. Los tokens son elemento ms pequeo de un Nmero de operandos. Pueden ser de dos tipos unarios,
programa que es signicativo, e interpretado o entendido y binarios. Los unarios son aquellos que solo necesitan
por el compilador, en java los tokens se dividen en cinco de un operando para devolver un valor, mientras que los
categoras que son: binarios necesitan de dos o ms operandos.

Identicadores: Son las representaciones que se les da a Operadores unarios.


los nombres que se asignan a las variables, clases, paque- Operadores binarios.
tes, mtodos y constantes en el cdigo de java para que el
compilador los identique y el programador pueda enten-
derlos. En java los identicadores pueden diferenciar en- Operadores a nivel de bit Los operadores a nivel de
tre maysculas o minsculas por ser case sensitive, por lo bit nos permiten realizar operaciones sobre nmeros bi-
que la variable cuyo nombre sea Mivariable, no es igual narios.
a mivariable, ya que java identica estas como variables
diferentes por el case sensitive, tambin se puede utilizar ~ Complemento a 1, este operador invierte los dgitos,
nmeros, o el signo _ para asignar un identicador. cambiando los 0 por 1 y los 1 por 0, un ejemplo puede
ser:
Palabras claves: Son los identicadores reservados por
java para cumplir con un objetivo especco en el cdi- 11001011 ~ 11001011 resultado 00110100
go y el compilador, se usan de forma limitada y en casos Como se puede ver se cambian los valores de 0 a 1 y de
especcos. Las palabras claves que usa java son las si- 1 a 0.
guientes:
& AND a nivel de bit, este operador realiza una operacin
Las palabras que se encuentran en negrilla, son palabras AND o suma entre dos nmeros de bit, en donde si dos
claves para java aunque actualmente no se utilicen en la bit son igual a 1 el resultado ser 1, de lo contrario ser 0,
versin de java, pero se pretenden integrar en las siguien- un ejemplo puede ser:
tes versiones de java.
situacion 01001101 & 10011011 ______________
Literales y constantes: Los literales son sintaxis para asig- 00001001
nar valores a una variable, es decir el valor que puede to-
| Or a nivel de bit, este operador realiza una operacin OR
mar una variable, tambin es un valor constante que pue-
en donde si alguno de los dos nmeros es 1 el resultado
de ser de tipo numrico. Las constantes son variables que
ser 1, un ejemplo puede ser:
tienen un valor jo y no puede ser modicado en el tras-
curso de la ejecucin del cdigo, estas se declaran por 11001101 | 01011101 ______________ 11011101
medio de los modicadores nal y static. ^ XOR a nivel de bit, este operador realiza la operacin
nal static double pi= 3.1416; XOR en donde si los dos nmeros son iguales el resultado
ser 0 de lo contrario ser 1, un ejemplo puede ser:
Operadores: Son los que nos indican una evaluacin que 00101001 ^ 01101101 ______________ 01000100
se aplica a un objeto o un dato, sobre un identicador o << Desplazamiento a la izquierda, este operador desplaza
constante. Un ejemplo de operadores puede ser la suma, n cantidad de espacios a la izquierda un bit, un ejemplo
resta o multiplicacin. puede ser;
Separadores: Se utilizan para indicarle al compilador de 01101110 01101110 << 1 = 11011100
java donde se ubican los elementos del cdigo, los sepa-
radores que admite java son: { },:; Como se puede ver al realizar el desplazamiento se realiza
una insercin de un dgito 0 a la derecha
Tambin el compilador de java identica y elimina los co-
mentarios, retornos de carros espacios vacos y de tabula-
cin a la hora de compilar por lo que no son considerados Precedencia de operadores
parte de un token.
Las expresiones pueden ser una combinacin en secuen- Los operadores son una parte principal en las expresio-
cia de variables, operadores y mtodos. Las expresiones nes, el tipo y forma de uso es fundamental a la hora de
son utilizadas para realizar clculos, para asignar valores programas, pero para su uso se tiene que tener en cuenta
a variables, o para controlar la ejecucin del ujo del pro- una serie de normas, como lo son la precedencia de los
grama. operadores.
1.7. JAVA (LENGUAJE DE PROGRAMACIN) 39

Los operadores son ejecutados segn su precedencia, si Las sentencias de asignacin son aquellas en las que se
cuentan con una precedencia mayor sern evaluados pri- asigna un valor a una variable o constante. Las sentencias
mero que los de precedencia menor, si por casualidad se condicionales son las que expresan una condicin para
llegase a presentar operadores con el mismo nivel de pre- denir el ujo de ejecucin del programa, entre ellas te-
cedencia, estos se evaluaran de derecha a izquierda, si son nemos if-else y switch. Las sentencias de bucles se encar-
operadores binarios (menos los operadores de asignacin) gar de realizar una accin cierta cantidad de tiempo dado,
se evaluaran de izquierda a derecha. A Java se le puede o hasta que se cumpla con una condicin, entre ellas te-
indicar qu operadores debe evaluar primero sin importar nemos el while, do-while, y for. Las sentencias de salto
su precedencia por medio de parntesis ( ), de esta forma llevan al compilador a un punto especco del programa
el compilador de java interpreta que primero ejecutara las o hacia la siguiente sentencia de ejecucin, entre ellas te-
operaciones que se encuentran dentro de los parntesis, y nemos break, continue, y return.
luego continuara con los dems operadores. La siguiente
tabla indicara en nivel de precedencia de los operadores
utilizados en java, teniendo en cuenta que el nivel de pre-
Conversin de tipos En algunos casos suele ser nece-
cedencia est indicado de arriba a abajo, siendo arriba el
sario convertir un tipo de dato a otro, esto se le conoce
nivel ms alto.
como conversin de tipos, modelado, o tipado, as de esta
Precedencia de los operadores en Java. forma poder realizar las operaciones necesarias sobre el
Un ejemplo de la precedencia de los operadores en java valor que se desea convertir. Se debe tener en cuenta el
podra ser el siguiente, en donde tenemos un cdigo que tipo de dato que se va a convertir, ya que si se convierte
se encargar de realizar una serie de operaciones aritm- un dato que tenga una cantidad menor de bit al anterior
ticas. este tendr perdida de informacin, un ejemplo de tipado
puede ser un nmero long que se desea convertir a int,
int numero1 = 3; int numero2 = 4; int resultado; re- el compilador eliminara los primeros 32bit del long para
sultado = numero1 + numero2 * 3; System.out.println ajustarlo al int ya que el int es de 32bit y el long de 64.
(resultado); //esto imprime el valor de 15 Si la conversin se realiza a un tipo de datos de menos
bit a un tipo de datos con mayor bit, la conversin se rea-
segn la precedencia de los operadores la multiplicacin liza automticamente llamada conversin implcita, pero
* tiene mayor prioridad que la suma +, por lo que primero si se realiza de un tipo de datos con mayor bit a menor
se ejecuta la multiplicacin y luego se realiza la suma. bit se tiene que realizar una conversin explcita, la cual
se realiza con un casting, al usar este mtodo se obliga
int numero1 = 3; int numero2 = 4; int resultado; resul- a realizar la conversin por lo cual puede haber perdida
tado = (numero1 + numero2) * 3; System.out.println de datos en la conversin. Para realizar una conversin
(resultado); //esto imprime el valor de 21 explcita se tiene que poner el tipo de dato que se desea
realizar la conversin entre parntesis, luego el valor o la
En este caso el resultado cambia ya que primero se eva- variable que se desea convertir. Un ejemplo de conversin
lan los parmetros que estn dentro del parntesis y lue- de tipo explcito puede ser:
go se evala el resto de parmetros. Una de las recomen- int numero1 = 32; byte numero2; numero2 = (byte)
daciones que da Java para el desarrollo es el uso de los numero1;
parntesis en las operaciones con ms de 3 operandos,
as de esta forma el cdigo se hace ms legible y se evi-
tan errores al momento de compilar. Un ejemplo de una conversin de tipo implcita puede ser:
int numero1 = 32; long numero2; numero2 = numero1;
Sentencias
Las siguiente tabla muestra la los tipos de datos que se
Las sentencias son una representacin de una secuencia pueden realizar una conversin implcita desde el dato
de acciones que se realizan en java, la clave fundamental origen, hasta el dato destino que es el dato en el que se
de las sentencias es su punto nal que indica que ha na- va a convertir.
lizado la sentencia y puede continuar con la siguiente, el Los tipos de datos booleanos no pueden ser convertidos a
indicador utilizado es el signo de punto y coma (;). Con- otro tipo de datos, por ningn mtodo mencionado ante-
tamos en java con sentencias que pueden ir desde senten- riormente. Otro tipo de conversin que no se encuentre en
cias de asignacin, de bucles, condicionales, y de salto. esta tabla desde el origen al destino, tiene que realizarse
Las sentencias se conforman comnmente por una ins- por medio de una conversin explcita por casting. Cuan-
tancia, y un operador, un ejemplo es la sentencia de asig- do se desea realizar una conversin de un tipo string como
nacin que se conforma por una instancia de una variable, origen a otro tipo, es necesario utilizar una funcin que se
el signo de asignacin y una expresin, un ejemplo es: encarga de convertir el tipo de dato, la funcin necesaria
int variable = 12+2; se compone de la variable que va almacenar el resultado,
y dependiendo de la variable se usa el parmetro que ini-
40 CAPTULO 1. FRAMEWORK

cia con el tipo de dato a convertir, Integer, Byte, Short, para Estndar para Aritmtica Binaria en Punto
o Long, seguida de punto . , el cual indica que se car- Flotante apareci en 1985, y desde entonces es el
garn los atributos del parmetro, en donde cargaremos estndar para la industria. Y aunque la aritmtica
el parseInt si queremos convertir a interger o parseByte otante de Java (cosa que cambi desde el 13 de no-
si queremos convertir a byte, o dependiendo del tipo de viembre de 2006, cuando se abri el cdigo fuente
dato, seguido de parntesis en donde se agregara el valor y se adopt la licencia GPL, aparte de la ya exis-
de string a convertir. Algunos ejemplos puede ser: tente)[cita requerida] se basa en gran medida en la nor-
int numero1; long numero2; byte numero3; String texto= ma del IEEE, no soporta an algunas caractersticas.
Ms informacin al respecto puede encontrarse en la
2013; numero1 = Integer.parseInt ( texto ); numero2
= Long.parseLong ( texto); numero3 = Byte.parseByte ( seccin nal de enlaces externos.
texto );
El lenguaje
esto suele ser usado para realizar una conversin de texto
cuando se ingresan valores numricos por una entrada a En un sentido estricto, Java no es un lenguaje abso-
java, la cual los detecta como string, as de esta forma lutamente orientado a objetos, a diferencia de, por
puede convertir el texto que se ingresa a un nmero para ejemplo, Ruby o Smalltalk. Por motivos de ecien-
realizar operaciones, como una calculadora. cia, Java ha relajado en cierta medida el paradigma
de orientacin a objetos, y as por ejemplo, no todos
los valores son objetos.
1.7.6 Industria relacionada
El cdigo Java puede ser a veces redundante en com-
Sun Microsystem, como creador del lenguaje de progra- paracin con otros lenguajes. Esto es en parte debi-
macin Java y de la plataforma JDK, mantiene fuertes do a las frecuentes declaraciones de tipos y conver-
polticas para mantener una especicacin del lenguaje[5] siones de tipo manual (casting). Tambin se debe a
as como de la mquina virtual[6] a travs del JCP. Es de- que no se dispone de operadores sobrecargados, y
bido a este esfuerzo que se mantiene un estndar de facto. a una sintaxis relativamente simple. Sin embargo,
Son innumerables las compaas que desarrollan aplica- J2SE 5.0 introduce elementos para tratar de reducir
ciones para Java y/o estn volcadas con esta tecnologa: la redundancia, como una nueva construccin para
los bucles foreach.
La industria de la telefona mvil est fuertemente
inuenciada por la tecnologa Java. A diferencia de C++, Java no dispone de operado-
res de sobrecarga denidos por el usuario. Los di-
Los entornos de desarrollo Netbeans y Eclipse ha seadores de Java tomaron esta decisin puesto que
tomado un lugar importante entre la comunidad de consideraban que, bajo ciertas circunstancias, esta
desarrolladores Java. caracterstica poda complicar la lectura y manteni-
La fundacin Apache tiene tambin una presencia miento de los programas.
importante en el desarrollo de bibliotecas y compo-
nentes de servidor basados en Java.
Apariencia
IBM, BEA, IONA, Oracle,... son empresas con
grandes intereses y productos creados en y para Ja- La apariencia externa (el look and feel) de las apli-
va. caciones GUI (Graphical User Interface) escritas en Ja-
va usando la plataforma Swing diere a menudo de la
que muestran aplicaciones nativas. Aunque el programa-
1.7.7 Crticas dor puede usar el juego de herramientas AWT (Abstract
Windowing Toolkit) que genera objetos grcos de la
En 1995 alguien dijo que Java fue creado para abrir una plataforma nativa, el AWT no es capaz de funciones gr-
nueva va en la gestin de software complejo, y es por cas avanzadas sin sacricar la portabilidad entre plata-
regla general aceptado que se ha comportado bien en ese formas; ya que cada una tiene un conjunto de APIs distin-
aspecto. Sin embargo no puede decirse que Java no tenga to, especialmente para objetos grcos de alto nivel. Las
grietas ni que se adapta completamente a todos los estilos herramientas de Swing, escritas completamente en Java,
de programacin, todos los entornos, o todas las necesi- evitan este problema construyendo los objetos grcos a
dades. partir de los mecanismos de dibujo bsicos que deben es-
tar disponibles en todas las plataformas. El inconveniente
General es el trabajo extra requerido para conseguir la misma apa-
riencia de la plataforma destino. Aunque esto es posible
Java no ha aportado capacidades estndares para (usando GTK+ y el Look-and-Feel de Windows), la ma-
aritmtica en punto otante. El estndar IEEE 754 yora de los usuarios no saben cmo cambiar la apariencia
1.7. JAVA (LENGUAJE DE PROGRAMACIN) 41

que se proporciona por defecto por aquella que se adapta que c++ fue un referente para la creacin de java por eso
a la de la plataforma. utiliza determinadas caractersticas de c++ y se han eli-
minado otras.
2. Orientado a Objetos.
Rendimiento
3. Multihilos: Java tiene una facilidad de cumplir varias
El bytecode de Java puede ser interpretado en tiempo de funciones al mismo tiempo, gracias a su funcin de multi-
ejecucin por la mquina virtual, o bien compilado al car- hilos ya que por cada hilo que el programa tenga se ejecu-
garse el programa, o durante la propia ejecucin, para ge- taran en tiempo real muchas funciones al mismo tiempo.
nerar cdigo nativo que se ejecuta directamente sobre el Alto Rendimiento: Java es considerado de alto rendi-
hardware. Si es interpretado, ser ms lento que usando el miento por ser tan veloz en el momento de correr los pro-
cdigo mquina intrnseco de la plataforma destino. Si es gramas y por ahorrarse muchas lneas de cdigo.
compilado, durante la carga inicial o la ejecucin, la pe-
nalizacin est en el tiempo necesario para llevar a cabo
la compilacin. 1.7.8 Recursos
Algunas caractersticas del propio lenguaje conllevan una
penalizacin en tiempo, aunque no son nicas de Java. JRE
Algunas de ellas son el chequeo de los lmites de arrays,
chequeo en tiempo de ejecucin de tipos, y la indireccin El JRE (Java Runtime Environment, o Entorno en Tiem-
de funciones virtuales. po de Ejecucin de Java) es el software necesario para
ejecutar cualquier aplicacin desarrollada para la plata-
El uso de un recolector de basura para eliminar de forma
forma Java. El usuario nal usa el JRE como parte de
automtica aquellos objetos no requeridos, aade una so-
paquetes software o plugins (o conectores) en un navega-
brecarga que puede afectar al rendimiento, o ser apenas
dor Web. Sun ofrece tambin el SDK de Java 2, o JDK
apreciable, dependiendo de la tecnologa del recolector y
(Java Development Kit) en cuyo seno reside el JRE, e in-
de la aplicacin en concreto. Las JVM modernas usan re-
cluye herramientas como el compilador de Java, Javadoc
colectores de basura que gracias a rpidos algoritmos de
para generar documentacin o el depurador. Puede tam-
manejo de memoria, consiguen que algunas aplicaciones
bin obtenerse como un paquete independiente, y puede
puedan ejecutarse ms ecientemente.
considerarse como el entorno necesario para ejecutar una
El rendimiento entre un compilador JIT y los compila- aplicacin Java, mientras que un desarrollador debe ade-
dores nativos puede ser parecido, aunque la distincin no ms contar con otras facilidades que ofrece el JDK.
est clara en este punto. La compilacin mediante el JIT
puede consumir un tiempo apreciable, un inconvenien-
te principalmente para aplicaciones de corta duracin o Componentes
con gran cantidad de cdigo. Sin embargo, una vez com-
pilado, el rendimiento del programa puede ser compara- Bibliotecas de Java, que son el resultado de compilar
ble al que consiguen compiladores nativos de la platafor- el cdigo fuente desarrollado por quien implementa
ma destino, inclusive en tareas numricas. Aunque Java la JRE, y que ofrecen apoyo para el desarrollo en
no permite la expansin manual de llamadas a mtodos, Java. Algunos ejemplos de estas bibliotecas son:
muchos compiladores JIT realizan esta optimizacin du-
rante la carga de la aplicacin y pueden aprovechar in- Las bibliotecas centrales, que incluyen:
formacin del entorno en tiempo de ejecucin para lle-
Una coleccin de bibliotecas para imple-
var a cabo transformaciones ecientes durante la propia
mentar estructuras de datos como listas,
ejecucin de la aplicacin. Esta recompilacin dinmica,
arrays, rboles y conjuntos.
como la que proporciona la mquina virtual HotSpot de
Sun, puede llegar a mejorar el resultado de compiladores Bibliotecas para anlisis de XML.
estticos tradicionales, gracias a los datos que slo estn Seguridad.
disponibles durante el tiempo de ejecucin. Bibliotecas de internacionalizacin y lo-
Java fue diseado para ofrecer seguridad y portabilidad, calizacin.
y no ofrece acceso directo al hardware de la arquitectura Bibliotecas de integracin, que permiten la co-
ni al espacio de direcciones. Java no soporta expansin municacin con sistemas externos. Estas bi-
de cdigo ensamblador, aunque las aplicaciones pueden bliotecas incluyen:
acceder a caractersticas de bajo nivel usando bibliotecas
nativas (JNI, Java Native Interfaces). La API para acceso a bases de datos
JDBC (Java DataBase Conectivity).
Caractersticas de Java: La interfaz JNDI (Java Naming and Di-
1. Lenguaje Simple: Se lo conoce como lenguaje sim- rectory Interface) para servicios de direc-
ple porque viene de la misma estructura de c y c++; ya torio.
42 CAPTULO 1. FRAMEWORK

RMI (Remote Method Invocation) y programa JCP (Java Community Process). Las compa-
CORBA para el desarrollo de aplicacio- as o individuos participantes del JCP pueden inuir de
nes distribuidas. forma activa en el diseo y desarrollo de las API, algo
Bibliotecas para la interfaz de usuario, que in- que ha sido motivo de controversia.
cluyen:
El conjunto de herramientas nativas Extensiones y arquitecturas relacionadas
AWT (Abstract Window Toolkit), que
ofrece componentes GUI (Graphical Las extensiones[7] de Java estn en paquetes que cuelgan
User Interface), mecanismos para usarlos de la raz javax: javax.*. No se incluyen en la JDK o el
y manejar sus eventos asociados. JRE. Algunas de las extensiones y arquitecturas ligadas
Las Bibliotecas de Swing, construidas so- estrechamente al lenguaje Java son:
bre AWT pero ofrecen implementaciones
no nativas de los componentes de AWT. Java EE (Java Platform, Enterprise Edition; antes
APIs para la captura, procesamiento y re- J2EE) para aplicaciones distribuidas orientadas al
produccin de audio. entorno empresarial

Una implementacin dependiente de la plataforma


en que se ejecuta de la mquina virtual de Java 1.7.9 Java en cdigo abierto
(JVM), que es la encargada de la ejecucin del c-
digo de las bibliotecas y las aplicaciones externas. Java se ha convertido en un lenguaje con una implanta-
cin masiva en todos los entornos (personales y empresa-
Plugins o conectores que permiten ejecutar applets
riales). El control que mantiene Sun sobre ste ha genera-
en los navegadores Web.
do reticencias en la comunidad de empresas con fuertes
Java Web Start, para la distribucin de aplicaciones intereses en Java (IBM, Oracle) y obviamente en la co-
Java a travs de Internet. munidad de desarrolladores de software libre.
La evolucin basada en un comit en el que participen
Documentacin y licencia.
todos los implicados no es suciente y la comunidad de-
mandaba desde hace tiempo la liberacin de las APIs y
API bibliotecas bsicas de la JDK.
En diciembre de 2006, Sun Microsystems comenz el re-
Sun dene tres plataformas en un intento por cubrir dis- lanzamiento de su plataforma Java[8] bajo la licencia GPL
tintos entornos de aplicacin. As, ha distribuido muchas de GNU.
de sus API (Application Program Interface) de forma que
En abril de 2009 Oracle adquiri Sun Microsystems, lo
pertenezcan a cada una de las plataformas:
que gener temor en la comunidad ante la posible mer-
cantilizacin del lenguaje de programacin orientado a
Java ME (Java Platform, Micro Edition) o J2ME objetos ms popular actualmente. Por ahora Oracle ha
orientada a entornos de limitados recursos, como te- seguido manteniendo Java, estando las versiones poste-
lfonos mviles, PDAs (Personal Digital Assistant), riores a la 6 bajo su control.
etc.
Se instala una versin homebrew de PSPKVM (0.5.5) pa-
Java SE (Java Platform, Standard Edition) o J2SE ra emular la plataforma de Java en PSP. Esto permite usar
para entornos de gama media y estaciones de tra- programas JAVA en esta videoconsola.
bajo. Aqu se sita al usuario medio en un PC de
escritorio.
Alternativas libres
Java EE (Java Platform, Enterprise Edition) o J2EE
orientada a entornos distribuidos empresariales o Existen alternativas para el entorno de ejecucin y de
de Internet. desarrollo de Java con una gran cobertura de funciona-
lidades con respecto a las implementaciones comerciales
Las clases en las API de Java se organizan en grupos dis- de Sun, IBM, Bea, etc.
juntos llamados paquetes. Cada paquete contiene un con-
junto de interfaces, clases y excepciones relacionadas. La Crticas referentes a Java y el software libre
informacin sobre los paquetes que ofrece cada platafor-
ma puede encontrarse en la documentacin de sta. Free But Shackled The Java Trap, de Richard
El conjunto de las API es controlado por Sun Microsys- Stallman, 12 de abril de 2004. (respuesta de James
tems junto con otras entidades o personas a travs del Gosling)
1.7. JAVA (LENGUAJE DE PROGRAMACIN) 43

Traduccin al espaol de este artculo: Libre [3] Jonathan Schwartzs Blog: Dierent Isn't Always Better,
pero encadenado. La trampa del Java. (Ntese But Betters Always Dierent. Blogs.sun.com. Consulta-
que hay una nota en un recuadro amarillo que do el 24 de septiembre de 2010.
habla de la situacin actual con respecto a lo
[4] M. Domnguez-Dorado,. Todo Programacin. N 8. Pgs.
que se dice en ese artculo) 39-42. Editorial Iberprensa (Madrid). DL M-13679-
2004. Febrero, 2005. Dibujando sobre lienzos en Java.
Notar que este artculo fue escrito antes de la liberacin
[5] Especicacin del lenguaje Java
del cdigo fuente de Java. En la actualidad la postura de
la Free Software Foundation y de Richard Stallman han [6] Especicacin de la mquina virtual Java
cambiado[cita requerida] , mostrndose partidarios ambos de
su uso en software libre. [7] M. Domnguez-Dorado, Guillermo Som. Todo Programa-
cin. N 11. Pgs. 10-20. Editorial Iberprensa (Madrid).
DL M-13679-2004. Agosto, 2005. Imprimir desde Java y
.NET.
1.7.10 Vase tambin
[8] Sun begins releasing Java under the GPL - Free Software
Applet Java Foundation

Drupal

JavaOne
1.7.13 Enlaces externos

JavaOS Wikilibros

Javapedia Wikilibros alberga un libro o manual sobre


Java Community Process Programacin en Java.

Java User Group Programas hechos en java con cdigo fuente

Recopilacin de cdigos fuente en java


Mquina virtual Java

OpenJDK
Oracle - Sun
Plataforma Java
Sitio ocial de Java para desarrolladores, etc

The Java Language Specication, Tercera edicin


1.7.11 Referencias Especicacin ocial del lenguaje Java
Jon Byous, Java technology: The early years. Sun
Developer Network, sin fecha[ca. 1998]. Recupe- Tutorial de Sun sobre el Lenguaje de programacin
rado 21 de abril de 2005. Java

James Gosling, A brief history of the Green project. Libro blanco original de Java, 1996
Java.net, sin fecha [ca. Q1/1998]. Recuperado 22 de
abril de 2005. Tutoriales
James Gosling, Bill Joy, Guy Steele, y Gilad Bra-
Thinking in Java, de Bruce Eckel (online)
cha, The Java language specication, tercera edi-
cin. Addison-Wesley, 2005. ISBN 0-321-24678-0. An introduction to Computer Science using Java por
Bradley Kjell.
Tim Lindholm y Frank Yellin. The Java Virtual
Machine specication, segunda edicin. Addison- Java Course, de A.B. Downey.
Wesley, 1999. ISBN 0-201-43294-3.
Computer-Books.us Coleccin de libros sobre Java
disponibles para descarga gratuita.
1.7.12 Notas
En castellano:
[1] Programming Language Popularity. 2009. Archivado
desde el original el 29 de noviembre de 2015. Consultado VideoTutoriales para aprender desde cero
el 16 de enero de 2009. Empieza a Programar
[2] TIOBE Programming Community Index. 2009. Con- Coleccin Java a tope de libros electrnicos
sultado el 6 de mayo de 2009. (Universidad de Mlaga. Espaa)
44 CAPTULO 1. FRAMEWORK

Curso de Java, de cero a hasta conexin a Otros protocolos: los datos en XML tambin pueden
MYSQL, incluye PDF (Mxico) enviarse de una aplicacin a otra mediante protoco-
Curso de java que sigue el ndice del libro de los normales como HTTP (Hypertext Transfer Pro-
java de Kathy Sierra, contiene PDFs y ejerci- tocol), FTP (File Transfer Protocol), o SMTP (Sim-
cios (Mxico) ple Mail Transfer Protocol).
Capacitacin en Java sobre Grandes Proyectos WSDL (Web Services Description Language): Es
Aprender programacin Java desde cero (Por- el lenguaje de la interfaz pblica para los servicios
tal web aprenderaprogramar.com, on-line y en Web. Es una descripcin basada en XML de los re-
formato pdf) quisitos funcionales necesarios para establecer una
Que es Java? (SoftMAS el blog para aprender comunicacin con los servicios Web.
a programar).
UDDI (Universal Description, Discovery and Inte-
Curso de Java desde cero (pildorasinformati- gration): Protocolo para publicar la informacin de
cas.com) los servicios Web. Permite comprobar qu servicios
web estn disponibles.
Crticas WS-Security (Web Service Security): Protocolo de
seguridad aceptado como estndar por OASIS (Or-
Softpanorama Java Critique Page: Java vs Scripting
ganization for the Advancement of Structured Infor-
Languages, de Nikolai Bezroukov
mation Standards). Garantiza la autenticacin de los
How Javas Floating-Point Hurts Everyone Everyw- actores y la condencialidad de los mensajes envia-
here, de W. Kahan und Joseph D. Darcy en el ACM dos.
1998 Workshop on Java for HighPerformance Net-
REST (Representational State Transfer): arquitec-
work Computing
tura que, haciendo uso del protocolo HTTP, propor-
ciona una API que utiliza cada uno de sus mtodos
(GET, POST, PUT, DELETE, etc) para poder rea-
1.8 Servicio web lizar diferentes operaciones entre la aplicacin que
ofrece el servicio web y el cliente.
Un servicio web (en ingls, Web Service o Web services)
es una tecnologa que utiliza un conjunto de protocolos y
estndares que sirven para intercambiar datos entre apli- 1.8.2 Ventajas de los servicios web
caciones. Distintas aplicaciones de software desarrolla-
das en lenguajes de programacin diferentes, y ejecuta- Aportan interoperabilidad entre aplicaciones de
das sobre cualquier plataforma, pueden utilizar los servi- software independientemente de sus propiedades o
cios web para intercambiar datos en redes de ordenadores de las plataformas sobre las que se instalen.
como Internet. La interoperabilidad se consigue median-
Los servicios Web fomentan los estndares y proto-
te la adopcin de estndares abiertos. Las organizaciones
colos basados en texto, que hacen ms fcil acceder
OASIS y W3C son los comits responsables de la arqui-
a su contenido y entender su funcionamiento.
tectura y reglamentacin de los servicios Web. Para me-
jorar la interoperabilidad entre distintas implementacio- Permiten que servicios y software de diferentes
nes de servicios Web se ha creado el organismo WS-I, compaas ubicadas en diferentes lugares geogr-
encargado de desarrollar diversos perles para denir de cos puedan ser combinados fcilmente para proveer
manera ms exhaustiva estos estndares. Es una mquina servicios integrados.
que atiende las peticiones de los clientes web y les enva
los recursos solicitados.
1.8.3 Inconvenientes de los servicios Web
1.8.1 Estndares empleados Para realizar transacciones no pueden compararse
en su grado de desarrollo con los estndares abiertos
Web Services Protocol Stack: As se le denomina al
de computacin distribuida como CORBA (Com-
conjunto de servicios y protocolos de los servicios
mon Object Request Broker Architecture).
Web.
XML (Extensible Markup Language): Es el formato Su rendimiento es bajo si se compara con otros mo-
estndar para los datos que se vayan a intercambiar. delos de computacin distribuida, tales como RMI
(Remote Method Invocation), CORBA o DCOM
SOAP (Simple Object Access Protocol) o XML- (Distributed Component Object Model). Es uno de
RPC (XML Remote Procedure Call): Protocolos los inconvenientes derivados de adoptar un forma-
sobre los que se establece el intercambio. to basado en texto. Y es que entre los objetivos de
1.8. SERVICIO WEB 45

XML no se encuentra la concisin ni la ecacia de Microsoft .NET


procesamiento.
Novell exteNd (basado en la plataforma J2EE)
Al apoyarse en HTTP, pueden esquivar medidas de
seguridad basadas en rewall cuyas reglas tratan de WebLogic
bloquear o auditar la comunicacin entre programas WebSphere
a ambos lados de la barrera.
JAX-WS con GlassFish

1.8.4 Razones para crear servicios Web Zope es un servidor de aplicaciones Web orientado a
objetos desarrollado en el lenguaje de programacin
La principal razn para usar servicios Web es que se pue- Python
den utilizar con HTTP sobre TCP (Transmission Control
VERASTREAM de AttachmateWRQ para moder-
Protocol) en el puerto 80. Dado que las organizaciones
nizar o integrar aplicaciones host IBM y VT
protegen sus redes mediante rewalls -que ltran y blo-
quean gran parte del trco de Internet-, cierran casi to-
dos los puertos TCP salvo el 80, que es, precisamente, 1.8.6 Temas relacionados
el que usan los navegadores. Los servicios Web utilizan
este puerto, por la simple razn de que no resultan blo- Ocina de servicios
queados. Es importante sealar que los servicios web se
pueden utilizar sobre cualquier protocolo, sin embargo, World Wide Web
TCP es el ms comn.
Web semntica
Otra razn es que, antes de que existiera SOAP, no ha-
ba buenas interfaces para acceder a las funcionalidades SOAP
de otros ordenadores en red. Las que haba eran ad hoc y
SOA
poco conocidas, tales como EDI (Electronic Data Inter-
change), RPC (Remote Procedure Call), u otras APIs.
Una tercera razn por la que los servicios Web son muy 1.8.7 Enlaces externos
prcticos es que pueden aportar gran independencia en-
tre la aplicacin que usa el servicio Web y el propio ser- ESA y Web Services en SAP
vicio. De esta forma, los cambios a lo largo del tiempo
Estado del Arte: Servicios WEB
en uno no deben afectar al otro. Esta exibilidad ser ca-
da vez ms importante, dado que la tendencia a construir Seguridad en Servicios WEB
grandes aplicaciones a partir de componentes distribui-
dos ms pequeos es cada da ms utilizada. Otra explicacin de los webservices
Se espera que para los prximos aos mejoren la calidad Gua Breve de Servicios Web (W3C)
y cantidad de servicios ofrecidos basados en los nuevos
estndares.

1.8.5 Plataformas
Servidores de aplicaciones para servicios Web:

JBoss servidor de aplicaciones J2EE Open Source


de Red Hat inc.
Oracle Fusion Middleware
IBM Lotus Domino a partir de la versin 7.0
Axis y el servidor Jakarta Tomcat (de Apache)
ColdFusion MX de Macromedia
Java Web Services Development Pack (JWSDP) de
Sun Microsystems (basado en Jakarta Tomcat)
JOnAS (parte de ObjectWeb una iniciativa de cdigo
abierto)
Captulo 2

Origen del texto y las imgenes,


colaboradores y licencias

2.1 Texto
Framework Fuente: https://es.wikipedia.org/wiki/Framework?oldid=92254504 Colaboradores: Vanbasten 23, Aloriel, Jonik, Jynus, Si-
mnK, Tostadora, El Moska, Jag2k4, Cinabrium, FAR, Serverex, Digigalos, Edub, Yrithinnd, Rembiapo pohyiete (bot), Wikiseldon, Ali-
man5040, RobotQuistnix, Matute, Yrbot, Linnk, FlaBot, BOTijo, GermanX, The Photographer, Eskimbot, Maldoror, Chlewbot, Tomatejc,
Qwertyytrewqqwerty, CEM-bot, Laura Fiorucci, Eliurkis, Asereware, Osepu, Julian Mendez, Thijs!bot, VeroSantillanRoldan, Luciano pe-
ti, Isha, JAnDbot, Kved, Javierpaniza, Mansoncc, Klohn~eswiki, Millars, Humberto, Idioma-bot, Emilioar 2000, Matdrodes, Fernando
Estel, Elabra sanchez, Shooke, Eaco, Globalpegasus, SieBot, Solucionexacta, Mushii, PaintBot, Ensada, Carmin, Siuto, Armando.Mejia,
Tirithel, Marcecoro, Minterior, Pablo323, LordT, Paporrubio, Pateketrueke, UA31, Taty2007, AVBOT, Davidangelleoacedo, Christiani-
kolai, Diegusjaimes, Arjuno3, Luckas-bot, Addsmgt, LordboT, Rodrigouy7, Jorge 2701, Gacpro, SuperBraulio13, Xqbot, Jkbw, Ppazos,
Antonio V. G., Alalou, Botarel, Kalith, AnselmiJuan, Josexu32, Leugim1972, PatruBOT, Ganmedes, Waeswaes, GrouchoBot, Afrasiab,
Savh, HRoestBot, Grillitus, Robert77, Octaviocortes, Antonorsi, MerlIwBot, KLBot2, Sebrev, Invadibot, Mapa-uv, Bibliolotranstornado,
Acratta, Elvisor, Helmy oved, Addbot, Lagoset, David Jos Valenzuela, Jarould, Ks-M9, The Most Hacker In The World y Annimos: 175
Visual Basic Fuente: https://es.wikipedia.org/wiki/Visual_Basic?oldid=93088783 Colaboradores: Pablo.cl, Pilaf, Angus, Comae, Tony
Rotondas, Dodo, Ricpelo, Jynus, Ascnder, Sms, Rsg, Cookie, Murphy era un optimista, PeiT, Dianai, Fenririel, Cinabrium, Porao,
Schummy, Loco085, Renabot, Boticario, Zeioth, Deleatur, Soulreaper, Petronas, Orgullomoore, Hispa, Edub, Taichi, Patricio.lorente,
Rembiapo pohyiete (bot), Zohar~eswiki, Magister Mathematicae, Luismiad, RobotQuistnix, Platonides, Alhen, Superzerocool, Chobot,
Yrbot, Baito, FlaBot, Vitamine, BOTijo, YurikBot, Mortadelo2005, Gaeddal, GermanX, KnightRider, Dweigel, No s qu nick poner,
Jesuja, FedericoMP, Gustavo.ovalle, Sodaxp, Baneld, Jlboya, Bcoto, Er Komandante, Lasneyx, Chlewbot, Tomatejc, Filipo, Axxgreazz,
Jorgechp, Nocker, Cad, Kn, BOTpolicia, Takachan, CEM-bot, Laura Fiorucci, Tripy, Asegim77, -jem-, Chabacano, Dalmiant, X.Cyclop,
Durero, Especiales, Retama, Baiji, Pacovila, Eamezaga, Antur, CF, Montgomery, Thijs!bot, Logongas, Un Mercenario, Cansado, Sobre-
ira, Mahadeva, uo Martnez, Yeza, RoyFocker, Bryant1410, Botones, Isha, Kenbill, Gusgus, Jurgens~eswiki, Jugones55, Y0rx, Miguelo
on the road, Cmontero, 4aDimension, VanKleinen, Kved, Pmisiones, Mansoncc, Diego Godoy, CommonsDelinker, TXiKiBoT, Bboccioz,
Sergiosh, ColdWind, Gacq, Elisardojm, Humberto, Netito777, Lecturalia, Lex Sparrow, Bedwyr, Plux, Galaxy4, Snakefang, Fcr, Manuel
Trujillo Berges, Biasoli, Seykron, Bucephala, Fremen, Cinevoro, VolkovBot, Snakeyes, Technopat, C'est moi, Penelopina, Galandil, Mat-
drodes, Fernando Estel, Carcediano, BlackBeast, Shooke, Lucien leGrey, AlleborgoBot, 3coma14, Edmenb, YonaBot, SieBot, Jogacrack,
Obelix83, Cobalttempest, Jacina~eswiki, Luis ademir, Drinibot, Dark, BOTarate, Pelutnik, JJLR, Manw, Ugly, Greek, BuenaGente, Ale-
posta, Mafores, Tirithel, Locos epraix, XalD, Jarisleif, Javierito92, Marcecoro, Nicolasdavel, HUB, MetsBot~eswiki, Nicop, Eduardosalg,
Veon, Qwertymith, Leonpolanco, Pan con queso, GLuky, GaRvA, Alejandrocaro35, Poco a poco, Sidcc, Danathor, Antonio Irazabal,
Aipni-Lovrij, Norberto Perez G., SilvonenBot, UA31, SergioN, AVBOT, David0811, MarcoAurelio, Ezarate, Diegusjaimes, DumZi-
BoT, MelancholieBot, Innv, Arjuno3, InaBOT, Error de inicio de sesin, Andreasmperu, Luckas-bot, Mrchuseau, Uswikisa, Rafael1193,
Jotterbot, Vic Fede, Dangelin5, Jorge 2701, Markoszarrate, La concha de tu hermana 22, Barteik, Billinghurst, Mara 95, Briancarlosconde-
nanza, Sakhal~eswiki, ArthurBot, Argentinoo, Emmanuele, SuperBraulio13, Ortisa, Elamericanono, Manuelt15, Xqbot, Jkbw, SassoBot,
Dreitmen, Jaimemf, Bitarray, Metronomo, Nachojr99, Igna, Lraingele, Torrente, Botarel, SantiBadia, 987654321ajs, BOTirithel, Hprme-
dina, Halfdrag, RedBot, Marsal20, Hubert Stiven, Abece, Carlos tenorio ortega, PatruBOT, Angelito7, Nicoobe, Humbefa, Tolo Cunill,
Foundling, TheXDS, Fsalas4000, Edslov, EmausBot, Savh, AVIADOR, Sergio Andres Segovia, Rubpe19, MercurioMT, WikitanvirBot,
Diamondland, Antonorsi, Travelour, Invadibot, Doublebassjihh, LlamaAl, Tajampi, Elvisor, Helmy oved, SAulVillalobos, Flashlack, Ro-
manLier, Syum90, Lemilio775, Addbot, Marcrodos, Giliofelix, Laberinto16, GOFURSELF, Csar Krall, Jarould, Matiia, Egis57, 4lextin-
tor, Jose Ciprian III, Fernando2812l, Ks-M9, Miranda moedano nestor Fernando, Hgfshgfjg, DavidXDAT y Annimos: 699
Microsoft SQL Server Fuente: https://es.wikipedia.org/wiki/Microsoft_SQL_Server?oldid=93552103 Colaboradores: Dodo, Jynus, Co-
okie, Symonblade, Cinabrium, Jhoropopo, Sergioperea, Soulreaper, Rembiapo pohyiete (bot), Gotencool, Magister Mathematicae, Orgu-
llobot~eswiki, RobotQuistnix, Superzerocool, Yrbot, Oscar ., FlaBot, Palmerabollo, YurikBot, GermanX, The Photographer, Eskimbot,
Maldoror, Monta990, CEM-bot, -jem-, Alexav8, Sir Magician, Retama, Osepu, Montgomery, Dangertn, Thijs!bot, Juank8041, Jmacoe,
VARGUX, Escarbot, RoyFocker, Isha, Vitorres, Gusgus, Death Master, Cojin~eswiki, Hobbitts, Muro de Aguas, TXiKiBoT, Xosema,
DYN DaTa, Fremen, Aibot, VolkovBot, Technopat, Matdrodes, Shooke, AlleborgoBot, Muro Bot, Adels, SieBot, Ferenckv, Danielba894,
Juliosm, Loveless, GeoAvila, Drinibot, Belb, M S, Javierito92, LastCyborg, HUB, Artistadelpecado, Piero71, Fanattiq, UA31, Lockalbot,
Buzzedw, AVBOT, Ialad, Diegusjaimes, DumZiBoT, CarsracBot, Arjuno3, Dbmaster125, Luckas-bot, Cheesy~eswiki, LordboT, Billing-
hurst, Acbernal, ArthurBot, Calbimonte.daniel, SuperBraulio13, Almabot, Xqbot, Jkbw, Rubinbot, Dreitmen, Igna, Botarel, Pandres95,
White Master, Hprmedina, TobeBot, Jjdelperal, Halfdrag, PatruBOT, Dinamik-bot, Madrimx, Joseneno, Anam11, Marim3e, Elen6m,

46
2.1. TEXTO 47

Eval2de, Xavi2m, Roberzen, Alieito, EmausBot, Bonaparte2000, SergiRiego, Grillitus, AlfredoGMx, Dagoshe, MerlIwBot, Pietrus, Me-
troBot, Invadibot, Elvisor, Tsunderebot, 2rombos, Dogoteacher, GeriReshef, Addbot, PanDaGirl, Erincon, JulinDelRusso, Jarould, Matiia,
Crystallizedcarbon, AlvaroMolina, Fdrazer, Fernando2812l, TomixOrg, Lmgallegos, YS18, Fhernande21 y Annimos: 208
Oracle Database Fuente: https://es.wikipedia.org/wiki/Oracle_Database?oldid=93568742 Colaboradores: JorgeGG, Robbot, Comae, Do-
do, Sms, Jachguate, Murphy era un optimista, Wricardoh, Cinabrium, Taragui, Sergioperea, Petronas, Omella, RobotQuistnix, Alhen,
Superzerocool, Chobot, Yrbot, FlaBot, Maleiva, .Sergio, YurikBot, Mig21bp, Martingala, GermanX, KnightRider, Kabri, Warp~eswiki,
Zanorte, Isra00, Kepler Oort, Zanaqo, CEM-bot, Laura Fiorucci, Tripy, Rastrojo, Montgomery, Dangertn, Jmacoe, Fernandopcg, Escar-
bot, Locovich, Cratn, Mactropia, VanKleinen, Kved, Mansoncc, Alonsojpd, Plux, Alexon Cevallos, DYN DaTa, Snakeyes, Technopat,
Queninosta, Belgrano, Matdrodes, BlackBeast, Lucien leGrey, Muro Bot, Gerakibot, Mushii, DaBot~eswiki, Loveless, Greek, Lp-spain,
Pedro Felipe, Enen, Jarisleif, Marcecoro, El Megaloco, Quijav, McMalamute, Botelln, LordT, Poco a poco, Alexbot, UA31, AVBOT,
MastiBot, Diegusjaimes, Arjuno3, Luckas-bot, Roinpa, Ptbotgourou, LordboT, Billinghurst, ArthurBot, User888~eswiki, Alelapenya,
User998~eswiki, SuperBraulio13, Eorbegozo, Xqbot, Jkbw, Maricela4, Frontelo, Botarel, BenzolBot, MauritsBot, SUL, Crt, Yabama,
TiriBOT, Patomera, RedBot, Kizar, Acifuentes, Patriciocs, PatruBOT, Ganmedes, Ripchip Bot, GrouchoBot, EmausBot, Savh, Grillitus,
WikitanvirBot, Tokvo, ILoveSugar, AStarBot, Esguibez, Joseprietogarcia, UAwiki, Arthur 'Two Sheds Jackson, Invadibot, Makecat-bot,
Chris77e, Addbot, Balles2601, Jaimefcanchignia92, Lazbeta, MAVignau, Patix81 y Annimos: 172
C++ Fuente: https://es.wikipedia.org/wiki/C%2B%2B?oldid=93762585 Colaboradores: AstroNomo, Macar~eswiki, Centeno, Joseaperez,
Pablo.cl, Sauron, JorgeGG, ManuelGR, Nonick, Angus, Sanbec, Zwobot, Comae, Javier Carro, Gauss, Dodo, Stoni, Levhita, Triku, Ascn-
der, Sms, Rsg, Tostadora, Elwikipedista, Ramjar, Robotito, Alejovivasp, Vargenau, JCCO, Toad32767, Panchurret, Benjavalero, Niqueco,
Renabot, Boticario, Zeioth, Petronas, Hispa, Edub, Taichi, Rembiapo pohyiete (bot), Kitalphar, Edtruji, Neuron~eswiki, OMenda, Orgullo-
bot~eswiki, RobotQuistnix, Tranchis, Adept~eswiki, Francosrodriguez, Alhen, LC0, Superzerocool, Chobot, Yrbot, BOT-Superzerocool,
Oscar ., FlaBot, Vitamine, BOTijo, .Sergio, YurikBot, Mortadelo2005, Ivancp, Icvav, GermanX, Zam, Beto29, KnightRider, The Pho-
tographer, Hanzo86, Jesuja, Eduardo Lima, SDaniel~eswiki, Baneld, Hxxbin, George McFinnigan, Morza, Maldoror, Er Komandante,
Lasneyx, KocjoBot~eswiki, Tomatejc, FIAL NV JAIOVO JP;S J, Niuweme, Ivan romero, Futbolero, Jstitch, BOTpolicia, Ludoviko, CEM-
bot, Jorgelrm, Damifb, Tute, Wfox, Ginta, Laura Fiorucci, Marc-Andr Abrock, EnWILLYado, X.Cyclop, Jjvaca, Retama, Anonima-
to1990, Psicodelico6, Clavec~eswiki, Mcetina, Montgomery, FrancoGG, Thijs!bot, PabloCastellano, RamiroGonzalezMaciel, Escarbot,
JoaquinFerrero, Zcool, Fernando.a.gomez.f, Isha, Xoneca, Mpeinadopa, JAnDbot, Mansoncc, Scmbg, Muro de Aguas, TXiKiBoT, Cold-
Wind, Humberto, Netito777, Bedorlan, Jucamo, Shark-0106, Vcamacho, KanTago, Plux, BL, Sebado, Biasoli, Ia027, AlnoktaBOT,
Dusan, Cinevoro, Skyhack, VolkovBot, Drever, Snakeyes, Technopat, Galandil, Josell2, Matdrodes, BlackBeast, Shooke, Lucien leGrey,
AlleborgoBot, Calin99, Muro Bot, Numbo3, Obazavil, SieBot, Onzalo, Danielba894, Ctrl Z, Carpem, Loveless, Obelix83, A. B. 10, Hom-
pis, A Vzquez O., Ermey~eswiki, Belb, Maxvaz, Tirithel, Locos epraix, Jarisleif, HUB, Maximoarmijo, Piero71, Nicop, DragonBot,
Eduardosalg, Botelln, Sacel, Alejandrocaro35, Botito777, LordT, Darkicebot, Aipni-Lovrij, UA31, Arlm1000, AVBOT, David0811,
Kona~eswiki, LucienBOT, A ver, Skilltik, Gurulandio, Peti610bot, Diegusjaimes, Davidgutierrezalvarez, Linkcisco, Arjuno3, Luckas-bot,
Nallimbot, Roinpa, FariBOT, LordboT, S3b4s5, Joseagrc, Marioxcc, Wikante, 6d23, Marxto, ArtEze, NobelBot, SuperBraulio13, Ortisa,
Xqbot, Jkbw, DarkSulivan, Cally Berry, Botarel, Spyda72, Amgc56, White Master, BOTirithel, TiriBOT, Nicolapedia, Caritdf, Halfdrag,
Abece, Born2bgratis, Edgardo C, Rro4785, PatruBOT, Ganmedes, D4gnu, Alex3638, Tarawa1943, Strongilocentrotus, Foundling, Die-
goBM, EmausBot, Savh, ChessBOT, Sergio Andres Segovia, Adadon, Africanus, Genhuan, Grillitus, Arpabone, KLBot, UnRar, Emiduron-
te, Waka Waka, Ruos, Rezabot, KLBot2, AbelNightroad26, Cyberdelic, Francy lugo, J....441111, Allan Aguilar, Eze 96ram, JoC2011,
LordAlfonso, Carlos R Castro G, Acastiello, Helmy oved, Flashlack, YFdyh-bot, Tsunderebot, CapacitorCapaz, 2rombos, Elialbert94, Rau-
letemunoz, Gjprada, Lemilio775, Legobot, Rotciv1010, Vale Espin, Vmfdez90, Balles2601, Alex9737, JacobRodrigues, Kirebyte, Jarould,
Crystallizedcarbon, BenjaBot, Hector SDuarez, Jvichezguerra, VictorLopez-JC y Annimos: 551
JQuery Fuente: https://es.wikipedia.org/wiki/JQuery?oldid=91614786 Colaboradores: Locutus bn, Txuspe, Deaquino, Emijrp, GermanX,
The Photographer, Erolandopc, CEM-bot, VARGUX, Serloro, Locovich, TXiKiBoT, Gacq, Netito777, VolkovBot, Matdrodes, Shooke,
Muro Bot, Soynatan, SieBot, Bigsus-bot, Arnoldgm, HUB, Jorge.casar, Oskosk, Alexbot, UA31, AVBOT, LucienBOT, MastiBot, Melan-
cholieBot, Arjuno3, Santek, Fraher, Luckas-bot, Amirobot, Riad.Bot~eswiki, Nallimbot, ArthurBot, Obersachsebot, Xqbot, Josemiguel93,
FrescoBot, Bot0811, Aloon, Adryitan, MauritsBot, Fito45, D'ohBot, TobeBot, LoliBot, HUBOT, PatruBOT, Dinamik-bot, GrouchoBot,
EmausBot, ZroBot, Sergio Andres Segovia, J. A. Glvez, JackieBot, Hoo man, Fabian Rod, ChuispastonBot, Diamondland, CocuBot,
Ruos, MerlIwBot, Alonzo423, TeleMania, Alejandrodlrocha, Invadibot, Bibliolotranstornado, Webamobile, Dunraz, Tasax, Elvisor,
Makecat-bot, Addbot, Igorosabel, Alexyah, BenjaBot, JvergaraCL y Annimos: 62
Java (lenguaje de programacin) Fuente: https://es.wikipedia.org/wiki/Java_(lenguaje_de_programaci%C3%B3n)?oldid=93816770
Colaboradores: Centeno, Oblongo, Sabbut, Moriel, Abgenis, Sauron, JorgeGG, Lourdes Cardenal, ManuelGR, Robbot, Guigar~eswiki,
Angus, Mdiagom, Sanbec, Zwobot, Pirenne~eswiki, Comae, Zorosandro, Dodo, Pybalo, Jynus, Ascnder, Rsg, Ihavenomouth, Tano4595,
Yakoo, Elproferoman, Hctor Arnau Aparicio, Aalku, Toad32767, Julioserrano, Balderai, Ecemaml, MatiasBellone, Niqueco, FAR, Leo-
nardoRob0t, Jorgeeie, SergioVares, Boticario, Orgullomoore, DMG, Especiall~eswiki, Hispa, JMPerez, Yrithinnd, Emijrp, Rembiapo
pohyiete (bot), Zeos, Edtruji, Sbassi, Magister Mathematicae, Dem, Orgullobot~eswiki, RobotQuistnix, Thr41N, Platonides, Unf, Su-
perzerocool, Chobot, Caiserbot, Yrbot, Amads, BOT-Superzerocool, Adrruiz, Vitamine, Palmerabollo, Mortadelo2005, Icvav, GermanX,
KnightRider, Sixtop, Cucaracha, C-3POrao, Jesuja, Txo, Bizkaino, Kenshin 85, Kepler Oort, Er Komandante, Mpadilla, Tomatejc, Jar-
ke, Uncorreotemporal, Paintman, Sucoplus, JorSol, Axxgreazz, Jorgechp, Kraft, Ivan romero, Abrego, Futbolero, Fev, Cabanyas, Jstitch,
BOTpolicia, Qwertyytrewqqwerty, CEM-bot, Alejandrosilvestri, ARHEKI, Laura Fiorucci, Casidiablo, Chabacano, Rafael Morais, Espe-
ciales, Marianov, Penquista, Baiji, Santhy, Psicodelico6, Roberpl, Mariano.iglesias, Ocaso, Aviguille, Llopis73, Montgomery, FrancoGG,
Dangertn, Thijs!bot, Javierrami, Fernandopcg, uo Martnez, Escarbot, RoyFocker, JoaquinFerrero, Locovich, TuvicBot, Isha, Bernard,
JAnDbot, Jugones55, Diego.souto, Rafa3040, Muro de Aguas, CommonsDelinker, TXiKiBoT, Wpersei, Ricardo Moctezuma, HodracirK,
ColdWind, Humberto, Netito777, NaSz, Jvlivs, Sirpuppet, Plux, Snakefang, Delphidius, AlnoktaBOT, Dusan, Cinevoro, VolkovBot, Tech-
nopat, Aliamondano, Sergio Yinyang, Matdrodes, Sanmiladsl, Synthebot, Frurgr, DJ Nietzsche, Lic. Armando, BlackBeast, Shooke, Lucien
leGrey, Vatelys, AlleborgoBot, Muro Bot, Peregring-lk, Roberto Blandino C, Rodrigo.paillan, Numbo3, Racso, BotMultichill, SieBot, Ctrl
Z, Loveless, Moonmaryhawke, Rojoblandino, Obelix83, Prugo, A. B. 10, Cousteau, Drinibot, BOTarate, Alex Buzeta, STBot~eswiki, Mal-
fer, Greek, Ermey~eswiki, Piztu, BuenaGente, ProfesorFalken, Belb, DorganBot, Torturo, Locos epraix, Jarisleif, Javierito92, Marceco-
ro, MetsBot~eswiki, Luis.bernal, DragonBot, Benek~eswiki, Farisori, PixelBot, Estirabot, Eduardosalg, Stoleman, Botelln, Leonpolanco,
Hades87, Furti, Alexbot, CestBOT, Juan Mayordomo, AlfredoMorales, Dr. Ricardo, Estebancabezudo, Toolserver, Aipni-Lovrij, Mi-
ke.lifeguard, Kroji, Ceballwiki, Camilo, UA31, AVBOT, LucienBOT, MastiBot, Angel GN, NicolasAlejandro, Speedplus, Diegusjaimes,
Whibla, DumZiBoT, MelancholieBot, Linfocito B, Innv, Franxiscokafran, Morbazan, HerculeBot, Arjuno3, Saloca, Alqadim, Argentumm,
Andreasmperu, Luckas-bot, Chiro79, Nallimbot, FariBOT, Jotterbot, Joseagrc, Koko10ar, Yonidebot, Rbuj, ArthurBot, SuperBraulio13,
Diegatxo, Ortisa, Xqbot, Jkbw, Rubinbot, Josemiguel93, Ing.hllanos, FrescoBot, Nicoavn, Adryitan, Botarel, AstaBOTh15, Panderine!,
48 CAPTULO 2. ORIGEN DEL TEXTO Y LAS IMGENES, COLABORADORES Y LICENCIAS

TiriBOT, TobeBot, Nicolapedia, RedBot, Kizar, Marsal20, Vubo, DixonDBot, HUBOT, PatruBOT, Dinamik-bot, Cifz, Humbefa, Ta-
rawa1943, Waeswaes, DiegoBM, EmausBot, Savh, ZroBot, HRoestBot, Genhuan, Grillitus, Writkas, Bettinaberries, ChuispastonBot,
Solde9, Waka Waka, WikitanvirBot, Diamondland, Denis32crack, Patrias, Hiperfelix, Juancvasconez, Hugg~eswiki, Xerox 5B, Jolusafe5,
MerlIwBot, KLBot2, CsarGuti, AvicBot, Almario 7, Sebrev, Tuxiano felipe, MetroBot, Invadibot, Federicotg, Pablopv98, Jacobofande-
billgates, Luigi1993ify, Doubledragon, Amgomude, Infosalle2011, Vigilante Satan, Batman325, Minsbot, Dlorah, Vetranio, Elvisor, San-
deraco, Theremigue, Santga, DLeandroc, Helmy oved, Fpelliccioni, Flashlack, RosenJax, YFdyh-bot, Cristian orioles, 2rombos, Adonaybn,
Fevero, Ljfeliu, Leitoxx, TToniii, Vale Espin, Addbot, Jaormazabal, Elmatoguevero, PanDaGirl, Mario.porras33, Saburto, JacobRodrigues,
Giovanni Alfredo Garciliano Diaz, Cassandra.ibarrac1, Das MiMaMi, Csar Krall, Ememe, Reisub, Alejandro Apolinar, Rodriguezcaban-
zo, Alejosu, Gaaplex, Jarould, Crystallizedcarbon, AlvaroMolina, Pakwmdmmd, BenjaBot, 4lextintor, Keypyhh, Guerra24, Carlosqwerty,
Manudark12, JMDartz, CAPTAIN RAJU, Gato Preto, Ks-M9, Joanalsaber, Artur dmx, Jero1500, Africanito, Juanperezgarcialopez99,
Hector SDuarez, MarlonRisen, Cpunto, Krassnine, Sindycate478, Macho1992, Juanjuanjo, Orlandoa37 y Annimos: 608
Servicio web Fuente: https://es.wikipedia.org/wiki/Servicio_web?oldid=92169129 Colaboradores: Dovidena, Vanbasten 23, Dodo, Ejme-
za, JavierCantero, JosebaAbaitua, Ecemaml, Caos, Deleatur, Airunp, Taichi, Rembiapo pohyiete (bot), Orgullobot~eswiki, RobotQuistnix,
Alhen, Superzerocool, Chobot, Yrbot, FlaBot, YurikBot, KnightRider, Mriosriquelme, Jesuja, Er Komandante, Chlewbot, Laura Fioruc-
ci, Roblespepe, Rastrojo, Jjafjjaf, Thijs!bot, Locovich, Danielpenagos, Masterbip, ElementoX~eswiki, Isha, Eliasbg, Mpeinadopa, JAnD-
bot, Camoralesm, Jugones55, Humberto, Netito777, Kausario, Jvlivs, Idioma-bot, Rodrigoxx, Biasoli, Delphidius, AlnoktaBOT, Cinevoro,
VolkovBot, Technopat, Queninosta, Matdrodes, Shooke, Barri, AlleborgoBot, Muro Bot, SieBot, Loveless, Gabriel.vilaboa, Cobalttempest,
Mafores, SZAMORA, Lfjaimesb, Leonpolanco, Pablo323, Alexbot, Al Lemos, Aipni-Lovrij, Wikipablo, Camilo, AVBOT, Psobrino, Lu-
cienBOT, Diegusjaimes, DrFO.Tn.Bot~eswiki, Luckas-bot, Amirobot, Nallimbot, Ptbotgourou, Jkbw, Igna, Torrente, TobeBot, PatruBOT,
Edslov, Savh, Rapel, J. A. Glvez, Lyamper, Vetranio, Elvisor, Helmy oved, Lemilio775, Addbot, Artler, JacobRodrigues, DragonFly009,
Jarould y Annimos: 149

2.2 Imgenes
Archivo:BjarneStroustrup.jpg Fuente: https://upload.wikimedia.org/wikipedia/commons/d/da/BjarneStroustrup.jpg Licencia: GFDL
Colaboradores: Bjarne Stroustrups homepage Artista original: ?
Archivo:C_plus_plus.svg Fuente: https://upload.wikimedia.org/wikipedia/commons/5/5b/C_plus_plus.svg Licencia: Public domain Co-
laboradores: Trabajo propio Artista original: JTojnar
Archivo:Commons-emblem-question_book_orange.svg Fuente: https://upload.wikimedia.org/wikipedia/commons/1/1f/
Commons-emblem-question_book_orange.svg Licencia: CC BY-SA 3.0 Colaboradores: <a href='//commons.wikimedia.org/wiki/File:
Commons-emblem-issue.svg' class='image'><img alt='Commons-emblem-issue.svg' src='https://upload.wikimedia.org/wikipedia/
commons/thumb/b/bc/Commons-emblem-issue.svg/25px-Commons-emblem-issue.svg.png' width='25' height='25' srcset='https:
//upload.wikimedia.org/wikipedia/commons/thumb/b/bc/Commons-emblem-issue.svg/38px-Commons-emblem-issue.svg.png 1.5x,
https://upload.wikimedia.org/wikipedia/commons/thumb/b/bc/Commons-emblem-issue.svg/50px-Commons-emblem-issue.svg.png 2x'
data-le-width='48' data-le-height='48' /></a> + <a href='//commons.wikimedia.org/wiki/File:Question_book.svg' class='image'><img
alt='Question book.svg' src='https://upload.wikimedia.org/wikipedia/commons/thumb/9/97/Question_book.svg/25px-Question_
book.svg.png' width='25' height='20' srcset='https://upload.wikimedia.org/wikipedia/commons/thumb/9/97/Question_book.svg/
38px-Question_book.svg.png 1.5x, https://upload.wikimedia.org/wikipedia/commons/thumb/9/97/Question_book.svg/50px-Question_
book.svg.png 2x' data-le-width='252' data-le-height='199' /></a> Artista original: GNOME icon artists, Jorge 2701
Archivo:Commons-emblem-scales.svg Fuente: https://upload.wikimedia.org/wikipedia/commons/c/c6/Commons-emblem-scales.svg
Licencia: GPL Colaboradores: File:Commons-emblem-issue.svg and File:Emblem-scales.svg Artista original: Derived work: User:Srhat
Source les:
Archivo:Commons-logo.svg Fuente: https://upload.wikimedia.org/wikipedia/commons/4/4a/Commons-logo.svg Licencia: Public do-
main Colaboradores: This version created by Pumbaa, using a proper partial circle and SVG geometry features. (Former versions used
to be slightly warped.) Artista original: SVG version was created by User:Grunt and cleaned up by 3247, based on the earlier PNG version,
created by Reidab.
Archivo:Oracle_logo.svg Fuente: https://upload.wikimedia.org/wikipedia/commons/5/50/Oracle_logo.svg Licencia: Public domain Co-
laboradores: Transferred from en.wikipedia
Artista original: Oracle Corporation. Original uploader was Cristan at en.wikipedia
Archivo:Wave.svg Fuente: https://upload.wikimedia.org/wikipedia/commons/4/40/Wave.svg Licencia: BSD Colaboradores: http://duke.
kenai.com/wave/index.html (new), https://duke.dev.java.net/images/wave/index.html (old) Artista original: sbmehta converted to SVG
from Sun Microsystems AI version.
Archivo:Wikibooks-logo.svg Fuente: https://upload.wikimedia.org/wikipedia/commons/f/fa/Wikibooks-logo.svg Licencia: CC BY-SA
3.0 Colaboradores: Trabajo propio Artista original: User:Bastique, User:Ramac et al.

2.3 Licencia del contenido


Creative Commons Attribution-Share Alike 3.0

También podría gustarte