Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Captulo 1
FrameWork
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
// 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.
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]
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.
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
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
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
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 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
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
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
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
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;
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:
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
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.
API de jQuery
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
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++.
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
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.
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
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
OpenJDK
Oracle - Sun
Plataforma Java
Sitio ocial de Java para desarrolladores, etc
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
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:
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.