Lenguaje de Programacion de Java
Lenguaje de Programacion de Java
Características
Lenguaje totalmente orientado a Objetos. Todos los conceptos en los que se apoya esta técnica,
encapsulación, herencia, polimorfismo, etc., están presentes en Java.
Disponibilidad de un amplio conjunto de bibliotecas. Como ya se mencionó anteriormente, Java
es algo más que un lenguaje. La programación de aplicaciones con Java se basa no solo en el empleo
del juego de instrucciones que componen el lenguaje, sino, fundamentalmente, en la posibilidad de
utilizar el amplísimo conjunto de clases que Sun pone a disposición del programador y con las cuales es
posible realizar prácticamente cualquier tipo de aplicación.
Lenguaje simple. Java posee una curva de aprendizaje muy rápida. Resulta relativamente sencillo
escribir applets interesantes desde el principio. Todos aquellos familiarizados con C++ encontrarán que
Java es más sencillo, ya que se han eliminado ciertas características, como los punteros. Debido a su
semejanza con C y C++, y dado que la mayoría de la gente los conoce aunque sea de forma elemental,
resulta muy fácil aprender Java. Los programadores experimentados en C++ pueden migrar muy
rápidamente a Java y ser productivos en poco tiempo.
Distribuido. Java proporciona una colección de clases para su uso en aplicaciones de red, que
permiten abrir sockets y establecer y aceptar conexiones con servidores o clientes remotos, facilitando
así la creación de aplicaciones distribuidas.
Interpretado y compilado a la vez. Java es compilado, en la medida en que su código fuente se
transforma en una especie de código máquina, losbytecodes, semejantes a las instrucciones de
ensamblador. Por otra parte, es interpretado, ya que los bytecodes se pueden ejecutar directamente
sobre cualquier máquina a la cual se hayan portado el intérprete y el sistema de ejecución en tiempo real
(run-time).
Robusto. Java fue diseñado para crear software altamente fiable. Para ello proporciona numerosas
comprobaciones en compilación y en tiempo de ejecución. Sus características de memoria liberan a los
programadores de una familia entera de errores (la aritmética de punteros), ya que se ha prescindido por
completo de los punteros, y la recolección de basura elimina la necesidad de liberación explícita de
memoria.
Seguro (?). Dada la naturaleza distribuida de Java, donde las applets se bajan desde cualquier
punto de la Red, la seguridad se impuso como una necesidad de vital importancia. A nadie le gustaría
ejecutar en su ordenador programas con acceso total a su sistema, procedentes de fuentes
desconocidas. Así que se implementaron barreras de seguridad en el lenguaje y en el sistema de
ejecución en tiempo real.
Indiferente a la arquitectura. Java está diseñado para soportar aplicaciones que serán ejecutadas
en los más variados entornos de red, desde Unix a Windows Nt, pasando por Mac y estaciones de
trabajo, sobre arquitecturas distintas y con sistemas operativos diversos. Para acomodar requisitos de
ejecución tan diversos o variopintos, el compilador de Java genera bytecodes: un formato intermedio
indiferente a la arquitectura diseñado para transportar el código eficientemente a múltiples plataformas
hardware y software. El resto de problemas los soluciona el intérprete de Java.
Portable. La indiferencia a la arquitectura representa sólo una parte de su portabilidad. Además,
Java especifica los tamaños de sus tipos de datos básicos y el comportamiento de sus operadores
aritméticos, de manera que los programas son iguales en todas las plataformas. Estas dos últimas
características se conocen como la Máquina Virtual Java (JVM).
Alto rendimiento.
Multihebra. Hoy en día ya se ven como terriblemente limitadas las aplicaciones que sólo pueden
ejecutar una acción a la vez. Java soporta sincronización de múltiples hilos de ejecución (multithreading)
a nivel de lenguaje, especialmente útiles en la creación de aplicaciones de red distribuidas. Así, mientras
un hilo se encarga de la comunicación, otro puede interactuar con el usuario mientras otro presenta una
animación en pantalla y otro realiza cálculos.
Dinámico. El lenguaje Java y su sistema de ejecución en tiempo real son dinámicos en la fase de
enlazado. Las clases sólo se enlazan a medida que son necesitadas. Se pueden enlazar nuevos módulos
de código bajo demanda, procedente de fuentes muy variadas, incluso desde la Red.
Produce applets. Java puede ser usado para crear dos tipos de programas: aplicaciones
independientes y applets. Las aplicaciones independientes se comportan como cualquier otro programa
escrito en cualquier lenguaje, como por ejemplo el navegador de Web HotJava, escrito íntegramente en
Java. Por su parte, las applets son pequeños programas que aparecen embebidos en las páginas Web,
como aparecen los gráficos o el texto, pero con la capacidad de ejecutar acciones muy complejas, como
animar imágenes, establecer conexiones de red, presentar menús y cuadros de diálogo para luego
emprender acciones, etc.
Las ventajas
JavaScript es una excelente solución para poner en práctica la validación de datos de un formulario en el lado
del cliente. Si un usuario omite escribir su nombre en un formulario, una función de validación en JavaScript
puede desplegar en pantalla un mensaje popup para hacerle saber al usuario acerca de la omisión. Este tipo
de funcionalidades son más ventajosas que tener una rutina de validación del lado del servidor para controlar
el error, dado que el servidor en éste caso no tiene que hacer ningún tipo procesamiento de información
adicional. Una rutina de ASP o PHP podría ser escrita para lograr la misma tarea pero un formulario
correctamente el formulario.
Una de las áreas en la que sobresale radicalmente JavaScript es en la creación de efectos dinámicos tales
como imágenes dinámicas y presentaciones de diapositivas, donde su uso se ha convertido algo común hoy
en día. Debido a que JavaScript se ejecuta dentro del navegador de los clientes, se puede utilizar para
cambiar el aspecto de la pantalla en el dispositivo de los usuarios después que la página ha sido enviada por
el servidor. Esto le permite al desarrollador web crear efectos dinámicos muy impresionantes mejorando así la
La seguridad sigue siendo el talon de aquiles de Javascript. Los fragmentos de código de JavaScript una vez
añadidos a las páginas web en los servidores, estos son descargados y ejecutados en el navegador del
cliente permitiendo así que cierto código malicioso pueda ser ejecutado en la máquina del cliente con el
objetivo de explotar alguna vulnerabilidad de seguridad conocida en una de las aplicaciones, navegadores o el
mismo sistema operativo. Es verdad que hoy día existen estándares de seguridad que restringen la ejecución
de código por parte de los navegadores, pero aún así, se puede ejecutar código que dañe, robe o destruya
Otra desventaja de JavaScript es que este tiende a introducir una cantidad enorme de fragmentos de código
en nuestros sitios web. Por suerte, el problema de grandes fragmentos de código JavaScript se resuelve
fácilmente mediante el almacenamiento del código JavaScript dentro de archivos separados del código HTML
con la extensión. *.Js, dejando una página web mucho más limpia y legible de cara al desarrollador.
Debido a la tendencia de JavaScript de acrecentar el código de las páginas web, se hace necesario organizar
el código JavaScript en archivos separados al código HTML para que los motores de búsqueda (Google)
puedan descifrar fácilmente la calidad del contenido de la página web y esta pueda ser indexada
Cuando un motor de búsqueda llega a un sitio web buscando contenido de calidad junto con las palabras
claves para determinar qué tan útil es la pagina , lo último que quiere encontrar un motor de búsqueda son
cientos de líneas de código JavaScript. Una vez más, este problema se resuelve fácilmente almacenando el
Por último, les doy la primicia de que ya tenemos el curso de Programación JavaScript listo en nuestro
sistema de e-learning. Si eres programador web y quieres mejorar tus habilidades para desarrollar web
dinámicas este curso es para ti. Si actualmente eres estudiante de la Carrera Informática en Capacity puedes
tener acceso hoy mismo totalmente gratis al contenido del curso de Programación JavaScript. Si quieres
-Clase
En informática, una clase es una plantilla para la creación de objetos de datos según un modelo predefinido.
Las clases se utilizan para representar entidades o conceptos, como los sustantivos en el lenguaje. Cada
clase es un modelo que define un conjunto de variables -el estado, y métodos apropiados para operar con
dichos datos -el comportamiento. Cada objeto creado a partir de la clase se denomina instancia de la clase.
Las clases son un pilar fundamental de la programación orientada a objetos. Permiten abstraer los datos y sus
operaciones asociadas al modo de una caja negra. Los lenguajes de programación que soportan clases
difieren sutilmente en su soporte para diversas características relacionadas con clases. La mayoría soportan
diversas formas de herencia. Muchos lenguajes también soportan características para
proporcionar encapsulación, como especificadores de acceso.
Una clase también puede tener una representación (metaobjeto) en tiempo de ejecución, que proporciona
apoyo en tiempo de ejecución para la manipulación de los metadatos relacionados con la clase.
Objeto
Estos objetos interactúan unos con otros, en contraposición a la visión tradicional en la cual un programa es
una colección de subrutinas (funciones oprocedimientos), o simplemente una lista de instrucciones para el
computador. Cada objeto es capaz de recibir mensajes, procesar datos y enviar mensajes a otros objetos de
manera similar a un servicio (en Windows) o demonio (en Unix y Linux).
int a,b;
( 'int' es un tipo de dato y 'a' y 'b' son variables de tipo entero con las que podemos operar)
Para utilizar la funcionalidad definida en una clase en particular (salvo en las clases abstractas),
primeramente es necesario crear un objeto de esa clase. De la misma manera, para una persona que
desea sentarse, las especificaciones para construir una silla serán de poca utilidad; lo que se necesita es
una silla real construida a partir de esas especificaciones. Siguiendo con la analogía anterior, también se
puede decir que para hacer operaciones aritméticas, de nada sirve por sí solo el tipo entero (int); para
ello necesitamos variables (o constantes) con las que operar.
Constructor
Se utiliza para crear tablas de clases virtuales y poder así desarrollar el polimorfismo, una de las herramientas
de la programación orientada a objetos. Al utilizar un constructor, el compilador determina cual de los objetos
va a responder al mensaje (virtual) que hemos creado. Tiene un tipo de acceso, un nombre y un paréntesis
Polimorfismo
En programación orientada a objetos, el polimorfismo se refiere a la propiedad por la que es posible enviar
mensajes sintácticamente iguales a objetos detipos distintos. El único requisito que deben cumplir los objetos
que se utilizan de manera polimórfica es saber responder al mensaje que se les envía.
La apariencia del código puede ser muy diferente dependiendo del lenguaje que se utilice, más allá de las
obvias diferencias sintácticas.
Por ejemplo, en un lenguaje de programación que cuenta con un sistema de tipos dinámico (en los que las
variables pueden contener datos de cualquier tipo u objetos de cualquier clase) como Smalltalk no se requiere
que los objetos que se utilizan de modo polimórfico sean parte de una jerarquía de clases.
Herencia
Es la relación entre una clase general y otra clase más específica. Por ejemplo: Si declaramos una clase
párrafo derivada de una clase texto, todos los métodos y variables asociadas con la clase texto, son
automáticamente heredados por la subclase párrafo.
La década de 1980 fueron años de consolidación relativa en los lenguajes imperativos. En vez de inventar nuevos
paradigmas, se comenzó a trabajar a partir de las ideas inventadas en la década anterior. C++ combinaba la programación
programación de sistemas destinado a ser utilizado por contratistas de defensa. En Japón y en otras partes, se gastaron
construcciones de la programación lógica. La comunidad de los lenguajes funcionales llevaron a cabo la estandarización de
ML y Lisp. La investigación en Miranda, un lenguaje funcional, conevaluación perezosa, comenzó a tomar fuerza en esta
década.
Una nueva tendencia importante en el diseño de lenguajes era un mayor enfoque en la programación de sistemas a gran
escala a través del uso de módulos, una organización a gran escala de unidades de código. Modula, Ada, y ML
desarrollaron sistemas de módulos notables en la década de 1980. Los sistemas de módulos eran relacionados con
frecuencia con construcciones de programación genéricas, que serían, en esencia, módulos parametrizados (véase
Aunque no aparecían nuevos paradigmas de lenguajes de programación imperativos, muchos investigadores expandieron
las ideas de los lenguajes anteriores y las adaptaron a nuevos contextos. Por ejemplo, los lenguajes de los
La década de 1980 también trajo avances en la implementación de lenguajes de programación. El movimiento de RISC en
la arquitectura de computadoraspostulaba que el hardware debía estar diseñado para los compiladores más que para los
programadores de ensamblador humanos. Con la ayuda de las mejoras en la velocidad del procesador, permitiendo
técnicas de compilación cada vez más agresivas, el movimiento RISC despertó un mayor interés en la tecnología de
Las tecnologías de los lenguajes continuaron sobre estas líneas entrando en la década de 1990.
1983 - Ada
1984 - MATLAB
1985 - Eiffel
1986 - Objective-C
1986 - Erlang
1987 - Perl
1988 - Tcl
1988 - Mathematica
1989 - FL (Backus);
El rápido crecimiento de Internet en la década de 1990 fue el siguiente gran acontecimiento histórico para los lenguajes de
programación. Con la apertura de una plataforma totalmente nueva para los sistemas informáticos, Internet creó una
oportunidad adoptar nuevos lenguajes. En particular, el lenguaje de programación Java se hizo popular debido a su pronta
integración con el navegador web Netscape Navigator, y varios lenguajes de scripting alcanzaron un amplio uso en el
desarrollo de aplicaciones personalizadas para servidores web. La década de 1990 no vio ninguna novedad fundamental en
los lenguajes imperativos, pero sí mucha recombinación y la maduración de viejas ideas. Esta era comenzó la difusión de
los lenguajes funcionales. Una filosofía de conducción grande era la productividad del programador. Surgieron muchos
lenguajes de “aplicaciones de desarrollo rápido” (RAD), los cuales usualmente venían con un IDE, recolector de basura, y
eran descendientes de lenguajes anteriores. Todos estos lenguajes eran orientados a objeto. Estos incluíanObject
Pascal, Visual Basic y Java. Java, en particular, recibió mucha atención. Pero más radicales e innovadores que los
lenguajes de RAD eran los nuevoslenguajes de script. Estos no descendían directamente de otros lenguajes y ofrecieron
nuevas sintaxis e incorporación más liberal de otras características. Muchos consideran estos lenguajes de script más
productivos que los lenguajes de RAD, aunque esto se debe a menudo a que es más difícil escribir y mantener largos
programas que pequeños programas simples. Sin embargo, no es menos cierto que los programas de script llegaron para
1990 - Haskell
1991 - Python
1993 - Ruby
1993 - Lua
1995 - JavaScript
1995 - PHP
1996 - WebDNA
1997 - Rebol
1999 - D
Tendencias actuales
La evolución de los lenguajes de programación continúa, tanto en la industria como en investigación. Algunas de las
Aumentar el soporte para la programación funcional en lenguajes importantes utilizados comercialmente, incluida
la programación funcional pura para hacer el código más fácil de razonar y de paralelizar (tanto en macro como en
micro-niveles).
Mecanismos para añadir al lenguaje verificación en cuanto a seguridad y confiabilidad: chequeo sintáctico
Soporte para Unicode para que el código fuente (texto del programa) no se limite sólo a los caracteres contenidos
en el conjunto de caracteres ASCII, permitiendo, por ejemplo, el uso de caracteres no latinos basados en guiones o
El código abierto como una filosofía de desarrollo de lenguajes, incluyendo la colección de compiladores de GNU
Lenguajes que soporten programar sobre los procesadores de la GPU en paralelo, como OpenCL.
2000 - ActionScript
2001 - C#
2002 - F#
2003 - Groovy
2003 - Scala
2003 - Factor
2007 - Clojure
2009 - Go
2011 - Dart
Bill Joy, inventor de vi, autor de BSD Unix, creador de SunOS, el cual se convirtió en Solaris.
Brian Kernighan, coautor del primer libro de programación en lenguaje C con Dennis Ritchie, y coautor de los
lenguajes de programación AWK y AMPL.
Nathaniel Rochester, inventor del primer lenguaje en ensamblador simbólico (IBM 701).
Ken Thompson, inventor de B, desarrollador de Go, y coauthor del sistema operativo Unix.