Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
John Von Neumann desarrolló el modelo que lleva su nombre, para describir
este concepto de "programa almacenado". En este modelo, se tiene una
abstracción de la memoria como un conjunto de celdas, que almacenan
simplemente números. Estos números pueden representar dos cosas: los
datos, sobre los que va a trabajar el programa; o bien, el programa en sí.
La solución que se tomó fue la siguiente: a cada acción que sea capaz de
realizar nuestra computadora, asociarle un número, que será su código de
operación (opcode) . Por ejemplo, una calculadora programable simple podría
asignar los opcodes :
Los lenguajes más primitivos fueron los lenguajes de máquina. Esto, ya que el
hardware se desarrolló antes del software, y además cualquier software
finalmente tiene que expresarse en el lenguaje que maneja el hardware.
El primer gran avance que se dio, como ya se comentó, fue la abstracción dada
por el Lenguaje Ensamblador, y con él, el nacimiento de las primeras
herramientas automáticas para generar el código máquina. Esto redujo los
errores triviales, como podía ser el número que correspondía a una operación,
que son sumamente engorrosos y difíciles de detectar, pero fáciles de cometer.
Sin embargo, aún aquí es fácil para el programador perderse y cometer errores
de lógica, pues debe bajar al nivel de la forma en que trabaja el CPU, y
entender bien todo lo que sucede dentro de él.
Los lenguajes de alto nivel son normalmente fáciles de aprender porque están
formados por elementos de lenguajes naturales, como el inglés. En BASIC, el
lenguaje de alto nivel más conocido, los comandos como "IF CONTADOR = 10
THEN STOP" pueden utilizarse para pedir a la computadora que pare si
CONTADOR es igual a 10. Por desgracia para muchas personas esta forma de
trabajar es un poco frustrante, dado que a pesar de que las computadoras
parecen comprender un lenguaje natural, lo hacen en realidad de una forma
rígida y sistemática.
1. Lenguajes compilados
Al usar un lenguaje compilado (como lo son los lenguajes del popular Visual
Studio de Microsoft), el programa desarrollado nunca se ejecuta mientras haya
errores, sino hasta que luego de haber compilado el programa, ya no aparecen
errores en el código
2. Lenguajes interpretados
La siguiente vez que se utilice una instrucción, se le debe interpretar otra vez y
traducir a lenguaje máquina. Por ejemplo, durante el procesamiento repetitivo
de los pasos de un ciclo, cada instrucción del ciclo tendrá que volver a ser
interpretado cada vez que se ejecute el ciclo, lo cual hace que el programa sea
más lento en tiempo de ejecución (porque se va revisando el código en tiempo
de ejecución) pero más rápido en tiempo de diseño (porque no se tiene que
estar compilando a cada momento el código completo). El intérprete elimina la
necesidad de realizar una corrida de compilación después de cada
modificación del programa cuando se quiere agregar funciones o corregir
errores; pero es obvio que un programa objeto compilado con antelación
deberá ejecutarse con mucha mayor rapidez que uno que se debe interpretar a
cada paso durante una corrida de producción.
History of Programming Languages
1954 1960 1965 1970 1975 1980 1985 1990 1995 2000 2001 2002 2003 2004
1986 1990 1990 1991 1991 1993 1994 1995 1996 1996 1997 1997 2000 2001 2001 2003 2003 2004
For more than half of the fifty years computer programmers have been This timeline includes fifty of the more than 2500 documented
writing code, O’Reilly has provided developers with comprehensive, programming languages. It is based on an original diagram created
in-depth technical information. We’ve kept pace with rapidly changing by Éric Lévénez (www.levenez.com), augmented with suggestions
www.oreilly.com technologies as new languages have emerged, developed, and
matured. Whether you want to learn something new or need
from O’Reilly authors, friends, and conference attendees.
For information and discussion on this poster,
answers to tough technical questions, you’ll find what you need
go to www.oreilly.com/go/languageposter.
in O’Reilly books and on the O’Reilly Network.
©2004 O’Reilly Media, Inc. O’Reilly logo is a registered trademark of O’Reilly Media, Inc. All other trademarks are property of their respective owners. part#30417
Programación estructurada
Hoy en día las aplicaciones informáticas son mucho más ambiciosas que las
necesidades de programación existentes en los años 60, principalmente debido
a las aplicaciones gráficas, por lo que las técnicas de programación
estructurada no son suficientes lo que ha llevado al desarrollo de nuevas
técnicas tales como la programación orientada o objetos y el desarrollo de
entornos de programación que facilitan la programación de grandes
aplicaciones.
A finales de los años sesenta surgió una nueva forma de programar que no
solamente daba lugar a programas fiables y eficientes, sino que además
estaban escritos de manera que facilitaba su comprensión posterior.
¾ Secuencia
¾ Instrucción condicional.
¾ Iteración (bucle de instrucciones) con condición al principio.
Solamente con estas tres estructuras se pueden escribir todos los programas y
aplicaciones posibles. Si bien los lenguajes de programación tienen un mayor
repertorio de estructuras de control, éstas pueden ser construidas mediante las
tres básicas.
Por ejemplo, en Visual Basic la secuencia de instrucciones consiste en la
escritura de una instrucción debajo de otra (también se pueden poner en la
misma línea separadas por el símbolo de dos puntos ":" aunque no es
recomendable). La instrucción condicional es la instrucción If y la iteración con
condición al inicio sería la instrucción do-while-loop o while-wend.
1. Los programas son más fáciles de entender, ya que pueden ser leído de
forma secuencial, sin necesidad de hacer seguimiento a saltos de línea
(GOTO) dentro de los bloques de código para entender la lógica.
2. La estructura del programa es clara puesto que las instrucciones están
más ligadas o relacionadas entre sí.
3. Reducción del esfuerzo en las pruebas. El seguimiento de los fallos o
errores del programa ("debugging") se facilita debido a la estructura más
visible, por lo que los errores se pueden detectar y corregir más
fácilmente.
4. Reducción de los costos de mantenimiento de los programas.
5. Programas más sencillos y más rápidos (ya que es más fácil su
optimización).
6. Los bloques de código son auto explicativos, lo que facilita a la
documentación.
7. Los GOTO se reservan para construir las instrucciones básicas. Aunque
no se usan de forma directa, por estar prohibida su utilización, están
incluidas implícitamente en las instrucciones de selección e iteración.
Inconvenientes de la programación estructurada
Con la POO tenemos que aprender a pensar las cosas de una manera distinta,
para escribir nuestros programas en términos de objetos, propiedades,
métodos.
Motivación
Pues en un esquema POO el coche sería el objeto, las propiedades serían las
características como el color o el modelo y los métodos serían las
funcionalidades asociadas como ponerse en marcha o parar.
Clases en POO
Objetos en POO
Para crear un objeto se tiene que escribir una instrucción especial que puede
ser distinta dependiendo el lenguaje de programación que se emplee, pero será
algo parecido a esto.
Con la palabra new especificamos que se tiene que crear una instancia de la
clase que sigue a continuación. Dentro de los paréntesis podríamos colocar
parámetros con los que inicializar el objeto de la clase coche.
Estados en objetos
miCoche.color = rojo
Mensajes en objetos
Para mandar mensajes a los objetos utilizamos el operador punto, seguido del
método que deseamos invocar.
miCoche.ponerseEnMarcha()
Hay mucho todavía que conocer de la POO ya que sólo hemos hecho
referencia a las cosas más básicas. También existen mecanismos como la
herencia y el polimorfismo que son unas de las posibilidades más potentes de
la POO.
Son conceptos avanzados que cuesta explicar en las líneas de ese informe. No
hay que olvidar que existen libros enteros dedicados a la POO y aquí solo
pretendemos dar un repaso a algunas cosas para que os suenen cuando
tengáis que poneros delante de ellas en los lenguajes de programación que
debe conocer un desarrollador del web.
Programación funcional
Es decir: f(x) = B.
d) Evaluación perezosa: una función intentará evaluar los parámetros con los
que fue definida, para efectuar las reducciones que nos permitan obtener el
valor de la función. Del LISP han surgido más tarde muchas implementaciones,
como el Franz LISP, Zeta LISP, InterLISP, o Common LISP. El dialecto
SCHEME es más cercano al cálculo lambda que los otros. SASL, KRC, Haskell
y Miranda son otros lenguajes basados en el lambda, que han incluido nuevas
funciones, algunas de ellas imperativas. Un segundo grupo de lenguajes
funcionales está más basado en la notación matemática común que en el
cálculo lambda. El pionero de éstos es APL, cuyo tipo fundamental de datos
está muy relacionado con operaciones. El sucesor más prometedor para APL
es el lenguaje FP.
Lenguaje de programación java
Entornos de funcionamiento
En el navegador web
El éxito de este tipo de aplicaciones (la visión del equipo de Gosling) no fue
realmente el esperado debido a diversos factores, siendo quizás el más
importante la lentitud y el reducido ancho de banda de las comunicaciones en
aquel entonces que limitaba el tamaño de las applets que se incrustaban en el
navegador. La aparición posterior de otras alternativas (aplicaciones web
dinámicas de servidor) dejó un reducido ámbito de uso para esta tecnología,
quedando hoy relegada fundamentalmente a componentes específicos para la
intermediación desde una aplicación web dinámica de servidor con dispositivos
ubicados en la máquina cliente donde se ejecuta el navegador.
Las applets Java no son las únicas tecnologías (aunque sí las primeras) de
componentes complejos incrustados en el navegador. Otras tecnologías
similares pueden ser: ActiveX de Microsoft, Flash, Java Web Start, etc.
En sistemas de servidor
En la parte del servidor, Java es más popular que nunca, desde la aparición de
la especificación de Servlets y JSP (Java Server Pages).
En aplicaciones de escritorio
Plataformas soportadas
Una versión del entorno de ejecución Java JRE (Java Runtime Environment)
está disponible en la mayoría de equipos de escritorio. Sin embargo, Microsoft
no lo ha incluido por defecto en sus sistemas operativos. En el caso de Apple,
éste incluye una versión propia del JRE en su sistema operativo, el Mac OS.
También es un producto que por defecto aparece en la mayoría de las
distribuciones de Linux. Debido a incompatibilidades entre distintas versiones
del JRE, muchas aplicaciones prefieren instalar su propia copia del JRE antes
que confiar su suerte a la aplicación instalada por defecto. Los desarrolladores
de applets de Java o bien deben insistir a los usuarios en la actualización del
JRE, o bien desarrollar bajo una versión antigua de Java y verificar el correcto
funcionamiento en las versiones posteriores.
Industria relacionada
Son innumerables las compañías que desarrollan aplicaciones para Java y/o
están volcadas con esta tecnología:
Críticas
Harold dijo en 1995 que Java fue creado para abrir una nueva vía en la gestión
de software complejo, y es por regla general aceptado que se ha comportado
bien en ese aspecto. Sin embargo no puede decirse que Java no tenga grietas,
ni que se adapta completamente a todos los estilos de programación, todos los
entornos, o todas las necesidades.
General
El lenguaje
Apariencia
La apariencia externa (el ‘’’look and feel’’’) de las aplicaciones GUI (Graphical
User Interface) escritas en Java usando la plataforma Swing difiere a menudo
de la que muestran aplicaciones nativas. Aunque el programador puede usar el
juego de herramientas AWT (Abstract Windowing Toolkit) que genera objetos
gráficos de la plataforma nativa, el AWT no es capaz de funciones gráficas
avanzadas sin sacrificar la portabilidad entre plataformas; ya que cada una
tiene un conjunto de APIs distinto, especialmente para objetos gráficos de alto
nivel. Las herramientas de Swing, escritas completamente en Java, evitan este
problema construyendo los objetos gráficos a partir de los mecanismos de
dibujo básicos que deben estar disponibles en todas las plataformas. El
inconveniente es el trabajo extra requerido para conseguir la misma apariencia
de la plataforma destino. Aunque esto es posible (usando GTK+ y el Look-and-
Feel de Windows), la mayoría de los usuarios no saben cómo cambiar la
apariencia que se proporciona por defecto por aquella que se adapta a la de la
plataforma. Mención merece la versión optimizada del lenguaje.
Rendimiento
Recursos