Un conjunto de instrucciones completas para una computadora digital expresadas en uno de varios idiomas. Cuando se representan en la forma numérica específica del fabricante de la computadora conocida como lenguaje de máquina, tales instrucciones se pueden ejecutar directamente, siguiendo un procedimiento de reemplazo simple cuando se expresan en un lenguaje ensamblador similar, o después de la traducción de algún lenguaje de “nivel superior”.
Los lenguajes de máquina y ensamblador son de “bajo nivel” y requieren que un programador administre todas las características de operación y almacenamiento de datos distintivos de una computadora de manera explícita. Los lenguajes de alto nivel, por otro lado, liberan al programador de tales preocupaciones y brindan una notación que es más fácil de escribir y leer para los programadores.
Contenido
- 1 Tipos de lenguaje.
- 2 Lenguajes algorítmicos.
- 3 Idiomas orientados a los negocios.
- 4 Idiomas orientados a la educación.
- 5 Lenguajes orientados a objetos.
- 6 Lenguajes declarativos.
- 7 Lenguajes de secuencias de comandos.
- 8 Idiomas de formato de documentos.
- 9 Idiomas de visualización de la World Wide Web.
- 10 Elementos de programación.
- 11 Estructuras de Control.
- 12 Estructuras de datos.
Tipos de lenguaje.
Idiomas para máquinas y montaje.
Un lenguaje de máquina es un conjunto de códigos numéricos que describen las operaciones que una computadora específica puede realizar directamente. Los códigos son dígitos binarios (“bits”) que se traducen regularmente desde y hacia hexadecimal (base 16) para la visualización y alteración humana.
Algunos bits se utilizan para indicar operaciones, como la suma, y otros se utilizan para representar operandos o la ubicación de la siguiente instrucción en las instrucciones del lenguaje de máquina. El lenguaje de máquina es difícil de entender y escribir porque sus códigos difieren de una computadora a otra y no coinciden con la notación matemática ordinaria o el lenguaje humano.
El lenguaje de máquina es un nivel más alto que el lenguaje ensamblador. Emplea códigos mnemónicos cortos para las instrucciones y permite al programador nombrar las secciones de memoria que contienen datos. Para una instrucción que suma dos números, se puede escribir “agregar pago, total” en lugar de “0110101100101000”.
El ensamblaje está escrito de una manera que permite traducir fácilmente al lenguaje de máquina. El lenguaje ensamblador no permite técnicas más sofisticadas para ordenar información complicada, a pesar del hecho de que los bloques de datos pueden ser referidos por su nombre en lugar de por sus direcciones de máquina.
El lenguaje ensamblador, como el lenguaje de máquina, requiere un conocimiento profundo de la arquitectura interna de la computadora. Cuando tales detalles son importantes, como cuando se programa una computadora para comunicarse con dispositivos periféricos, resulta útil (impresoras, escáneres, dispositivos de almacenamiento, etc.).
Lenguajes algorítmicos.
Los lenguajes algorítmicos están diseñados para expresar cálculos matemáticos o simbólicos. Pueden expresar operaciones algebraicas en notación similar a las matemáticas y permiten el uso de subprogramas que empaquetan operaciones de uso común para su reutilización. Fueron los primeros idiomas de alto nivel.
FORTRAN.
El primer lenguaje algorítmico importante fue FORTRAN (traducción de fórmulas), diseñado en 1957 por un equipo de IBM dirigido por John Backus. Estaba destinado a cálculos científicos con números reales y colecciones de ellos organizados como matrices unidimensionales o multidimensionales. Sus estructuras de control incluían declaraciones IF condicionales, bucles repetitivos (los denominados bucles DO) y una instrucción GOTO que permitía la ejecución no secuencial del código del programa. FORTRAN hizo conveniente tener subprogramas para operaciones matemáticas comunes y construyó bibliotecas de ellos.
FORTRAN también fue diseñado para traducir a un lenguaje de máquina eficiente. Inmediatamente tuvo éxito y continúa evolucionando.
ALGOL.
ALGOL (lenguaje algorítmico) fue diseñado por un comité de científicos informáticos estadounidenses y europeos durante 1958-60 para publicar algoritmos, así como para realizar cálculos. Al igual que LISP (que se describe en la siguiente sección), ALGOL tenía subprogramas recursivos, procedimientos que se podían invocar para resolver un problema reduciéndolo a un problema más pequeño del mismo tipo. ALGOL introdujo la estructura de bloques, en la que un programa se compone de bloques que pueden contener tanto datos como instrucciones y tener la misma estructura que un programa completo. La estructura de bloques se convirtió en una poderosa herramienta para construir grandes programas a partir de pequeños componentes.
ALGOL contribuyó con una notación para describir la estructura de un lenguaje de programación, Backus-Naur Form, que en algunas variaciones se convirtió en la herramienta estándar para establecer la sintaxis (gramática) de los lenguajes de programación. El ALGOL se utilizó ampliamente en Europa y durante muchos años siguió siendo el idioma en el que se publicaban los algoritmos informáticos. Muchos idiomas importantes, como Pascal y Ada (ambos descritos más adelante), son sus descendientes.
C.
El lenguaje de programación C fue desarrollado en 1972 por Dennis Ritchie y Brian Kernighan en AT & T Corporation para programar sistemas operativos de computadoras. Su capacidad para estructurar datos y programas mediante la composición de unidades más pequeñas es comparable a la de ALGOL. Utiliza una notación compacta y proporciona al programador la capacidad de operar con las direcciones de los datos así como con sus valores. Esta capacidad es importante en la programación de sistemas, y C comparte con el lenguaje ensamblador el poder de explotar todas las características de la arquitectura interna de una computadora. C, junto con su descendiente C ++, sigue siendo uno de los lenguajes más comunes.
Idiomas orientados a los negocios.
COBOL.
COBOL (lenguaje común orientado a los negocios) ha sido muy utilizado por las empresas desde sus inicios en 1959. Un comité de fabricantes y usuarios de computadoras y organizaciones gubernamentales de EE. UU. Establecieron CODASYL (Comité de sistemas de datos e idiomas) para desarrollar y supervisar el estándar de lenguaje con el fin de asegurar su portabilidad a través de diversos sistemas.
COBOL utiliza una notación similar a la inglesa: novedosa cuando se presenta. Los cálculos comerciales organizan y manipulan grandes cantidades de datos, y COBOL introdujo la estructura de datos de registros para tales tareas. Un registro agrupa datos heterogéneos, como un nombre, un número de identificación, una edad y una dirección, en una sola unidad. Esto contrasta con los lenguajes científicos, en los que son comunes las matrices homogéneas de números. Los registros son un ejemplo importante de “fragmentación” de datos en un solo objeto, y aparecen en casi todos los lenguajes modernos.
SQL.
SQL (lenguaje de consulta estructurado) es un lenguaje para especificar la organización de bases de datos (colecciones de registros). Las bases de datos organizadas con SQL se denominan relacionales, porque SQL brinda la capacidad de consultar una base de datos en busca de información que se encuentre en una relación determinada. Por ejemplo, una consulta podría ser “buscar todos los registros con el apellido Smith y la ciudad Nueva York”. Los programas de bases de datos comerciales suelen utilizar un lenguaje similar a SQL para sus consultas.
Idiomas orientados a la educación.
BÁSICO.
BÁSICO (código de instrucción simbólico de uso múltiple para principiantes) fue diseñado en Dartmouth College a mediados de la década de 1960 por John Kemeny y Thomas Kurtz. Se pretendía que fuera fácil de aprender para los principiantes, en particular para los que no se especializan en ciencias de la computación, y para que funcione bien en una computadora que comparta el tiempo con muchos usuarios. Tenía estructuras de datos y notación simples y se interpretaba: un programa BASIC se traducía línea por línea y se ejecutaba a medida que se traducía, lo que facilitaba la localización de errores de programación.
Su pequeño tamaño y simplicidad también hicieron de BASIC un lenguaje popular para las primeras computadoras personales. Sus formas recientes han adoptado muchas de las estructuras de control y datos de otros lenguajes contemporáneos, lo que lo hace más poderoso pero menos conveniente para los principiantes.
Pascal.
Alrededor de 1970, Niklaus Wirth de Suiza diseñó Pascal para enseñar programación estructurada, que enfatiza el uso ordenado de estructuras de control condicional y de bucle sin declaraciones GOTO. Aunque Pascal se parecía a ALGOL en notación, proporcionaba la capacidad de definir tipos de datos con los que organizar información compleja, una característica más allá de las capacidades de ALGOL, así como de FORTRAN y COBOL. Los tipos de datos definidos por el usuario permitían al programador introducir nombres para datos complejos, que el traductor de idiomas podía verificar para su uso correcto antes de ejecutar un programa.
Durante los últimos años de la década de los setenta y los ochenta, Pascal fue uno de los lenguajes más utilizados para la instrucción de programación. Estaba disponible en casi todas las computadoras y, debido a su familiaridad, claridad y seguridad, se usaba tanto para software de producción como para educación.
Logo.
Logo se originó a fines de la década de 1960 como un dialecto LISP simplificado para la educación; Seymour Papert y otros lo usaron en el MIT para enseñar el pensamiento matemático a los escolares. Tenía una sintaxis más convencional que LISP y presentaba “gráficos de tortuga”, un método simple para generar gráficos por computadora. (El nombre proviene de un proyecto anterior para programar un robot con forma de tortuga). Los gráficos de tortuga usaban instrucciones centradas en el cuerpo, en las que un objeto se movía alrededor de una pantalla mediante comandos, como “izquierda 90” y “adelante”, que especifican acciones relativas a la posición y orientación actual del objeto más que en términos de un marco fijo. Junto con las rutinas recursivas, esta técnica facilitó la programación de patrones intrincados y atractivos.
Hypertalk.
Hypertalk fue diseñado como “programación para el resto de nosotros” por Bill Atkinson para Macintosh de Apple. Usando una sintaxis simple similar a la del inglés, Hypertalk permitió a cualquiera combinar texto, gráficos y audio rápidamente en “pilas vinculadas” que se podían navegar haciendo clic con el mouse en los botones estándar proporcionados por el programa. Hypertalk fue particularmente popular entre los educadores en la década de 1980 y principios de la de 1990 para presentaciones multimedia en el aula. Aunque Hypertalk tenía muchas características de lenguajes orientados a objetos (que se describen en la siguiente sección), Apple no lo desarrolló para otras plataformas informáticas y lo dejó languidecer; a medida que la participación de mercado de Apple disminuyó en la década de 1990, una nueva forma multiplataforma de mostrar multimedia dejó a Hypertalk prácticamente obsoleto (consulte la sección Idiomas de visualización de la World Wide Web).
Lenguajes orientados a objetos.
Los lenguajes orientados a objetos ayudan a gestionar la complejidad en programas grandes. Los objetos empaquetan los datos y las operaciones en ellos de modo que solo las operaciones sean de acceso público y los detalles internos de las estructuras de datos estén ocultos. Esta ocultación de información facilitó la programación a gran escala al permitir que un programador pensara en cada parte del programa de forma aislada. Además, los objetos pueden derivarse de otros más generales, “heredando” sus capacidades. Tal jerarquía de objetos hizo posible definir objetos especializados sin repetir todo lo que está en los más generales.
La programación orientada a objetos comenzó con el lenguaje Simula (1967), que agregó información oculta a ALGOL. Otro lenguaje influyente orientado a objetos fue Smalltalk (1980), en el que un programa era un conjunto de objetos que interactuaban enviándose mensajes entre sí.
C ++lenguaje
El C ++, desarrollado por Bjarne Stroustrup en AT&T a mediados de la década de 1980, extendió C al agregarle objetos mientras conservaba la eficiencia de los programas en C. Ha sido uno de los lenguajes más importantes tanto para la educación como para la programación industrial. Gran parte de muchos sistemas operativos se escribieron en C ++. C ++, junto con Java, se ha vuelto popular para desarrollar paquetes de software comerciales que incorporan múltiples aplicaciones interrelacionadas. C ++ se considera uno de los lenguajes más rápidos y está muy cerca de los lenguajes de bajo nivel, lo que permite un control completo sobre la asignación y administración de memoria. Esta misma característica y sus muchas otras capacidades también lo convierten en uno de los lenguajes más difíciles de aprender y manejar a gran escala.
C #
C # (pronunciado C agudo como la nota musical) fue desarrollado por Anders Hejlsberg en Microsoft en 2000. C # tiene una sintaxis similar a la de C y C ++ y se usa a menudo para desarrollar juegos y aplicaciones para el sistema operativo Microsoft Windows.
Ada.
Ada recibió su nombre de Augusta Ada King, condesa de Lovelace, quien fue asistente del inventor inglés del siglo XIX Charles Babbage, y a veces se la llama la primera programadora de computadoras. Ada, el lenguaje, fue desarrollado a principios de la década de 1980 para el Departamento de Defensa de EE. UU. Para programación a gran escala. Combinó la notación similar a Pascal con la capacidad de empaquetar operaciones y datos en módulos independientes. Su primera forma, Ada 83, no estaba totalmente orientada a objetos, pero la posterior Ada 95 proporcionó objetos y la capacidad de construir jerarquías de ellos. Si bien ya no es obligatorio para su uso en el trabajo para el Departamento de Defensa, Ada sigue siendo un lenguaje eficaz para diseñar grandes programas.
Java.
A principios de la década de 1990, Sun Microsystems, Inc. diseñó Java como lenguaje de programación para la World Wide Web (WWW). Aunque se parecía a C ++ en apariencia, estaba orientado a objetos. En particular, Java prescindió de características de nivel inferior, incluida la capacidad de manipular direcciones de datos, una capacidad que no es deseable ni útil en programas para sistemas distribuidos. Para que sean portátiles, los programas Java son traducidos por una máquina virtual Java específica para cada plataforma de computadora, que luego ejecuta el programa Java. Además de agregar capacidades interactivas a Internet a través de “subprogramas” Web, Java se ha utilizado ampliamente para programar dispositivos pequeños y portátiles, como teléfonos móviles.
Visual Basic.
Visual Basic fue desarrollado por Microsoft para ampliar las capacidades de BASIC agregando objetos y programación “impulsada por eventos”: botones, menús y otros elementos de interfaces gráficas de usuario (GUI). Visual Basic también se puede utilizar dentro de otro software de Microsoft para programar pequeñas rutinas. Visual Basic fue reemplazado en 2002 por Visual Basic .NET, un lenguaje muy diferente basado en C #, un lenguaje con similitudes con C ++.
Python
El lenguaje de código abierto Python fue desarrollado por el programador holandés Guido van Rossum en 1991. Fue diseñado como un lenguaje fácil de usar, con características como el uso de sangrías en lugar de corchetes para agrupar declaraciones. Python también es un lenguaje muy compacto, diseñado para que los trabajos complejos se puedan ejecutar con solo unas pocas declaraciones. En la década de 2010, Python se convirtió en uno de los lenguajes de programación más populares, junto con Java y JavaScript.
Lenguajes declarativos.
Los lenguajes declarativos, también llamados no procedimentales o de muy alto nivel, son lenguajes de programación en los que (idealmente) un programa especifica qué se debe hacer en lugar de cómo hacerlo. En tales lenguajes hay menos diferencia entre la especificación de un programa y su implementación que en los lenguajes de procedimiento descritos hasta ahora. Los dos tipos comunes de lenguajes declarativos son los lenguajes lógicos y funcionales.
Los lenguajes de programación lógica, de los cuales PROLOG (programación en lógica) es el más conocido, establecen un programa como un conjunto de relaciones lógicas (por ejemplo, un abuelo es el padre de un padre de alguien). Estos lenguajes son similares al lenguaje de la base de datos SQL. Un programa es ejecutado por un “motor de inferencia” que responde a una consulta buscando estas relaciones sistemáticamente para hacer inferencias que responderán a una consulta. PROLOG se ha utilizado ampliamente en el procesamiento del lenguaje natural y otros programas de inteligencia artificial.
Los lenguajes funcionales tienen un estilo matemático. Un programa funcional se construye aplicando funciones a argumentos. Los lenguajes funcionales, como LISP, ML y Haskell, se utilizan como herramientas de investigación en el desarrollo del lenguaje, en probadores automatizados de teoremas matemáticos y en algunos proyectos comerciales.
Lenguajes de secuencias de comandos.
Los lenguajes de secuencias de comandos a veces se denominan pequeños lenguajes. Están destinados a resolver problemas de programación relativamente pequeños que no requieren la sobrecarga de declaraciones de datos y otras características necesarias para hacer que los programas grandes sean manejables. Los lenguajes de secuencias de comandos se utilizan para escribir utilidades del sistema operativo, para programas de manipulación de archivos de propósito especial y, debido a que son fáciles de aprender, a veces para programas considerablemente más grandes.
Perl se desarrolló a finales de la década de 1980, originalmente para su uso con el sistema operativo UNIX. Se pretendía que tuviera todas las capacidades de los lenguajes de secuencias de comandos anteriores. Perl proporcionó muchas formas de establecer operaciones comunes y, por lo tanto, permitió que un programador adoptará cualquier estilo conveniente. En la década de 1990 se hizo popular como herramienta de programación de sistemas, tanto para pequeños programas de servicios públicos como para prototipos de programas más grandes. Junto con otros lenguajes que se analizan a continuación, también se hizo popular para programar “servidores” web informáticos.
Idiomas de formato de documentos.
Los lenguajes de formato de documentos especifican la organización del texto y los gráficos impresos. Se dividen en varias clases: notación de formato de texto que puede cumplir las mismas funciones que un programa de procesamiento de texto, lenguajes de descripción de página que son interpretados por un dispositivo de impresión y, en general, lenguajes de marcado que describen la función prevista de partes de un documento.
Texas.
TeX fue desarrollado durante 1977–86 como un lenguaje de formato de texto por Donald Knuth, un profesor de la Universidad de Stanford, para mejorar la calidad de la notación matemática en sus libros. Los sistemas de formato de texto, a diferencia de los procesadores de texto WYSIWYG (“Lo que ves es lo que obtienes”), incorporan comandos de formato de texto sin formato en un documento, que luego son interpretados por el procesador de idioma para producir un documento formateado para su visualización o impresión. TeX marca el texto en cursiva, por ejemplo, como {\ si está en cursiva}, que luego se muestra como en cursiva.
TeX reemplazó en gran medida a los lenguajes de formato de texto anteriores. Sus capacidades poderosas y flexibles le dieron a un experto un control preciso sobre cosas como la elección de fuentes, el diseño de tablas, la notación matemática y la inclusión de gráficos en un documento. Generalmente se usa con la ayuda de paquetes “macro” que definen comandos simples para operaciones comunes, como comenzar un nuevo párrafo; LaTeX es un paquete ampliamente utilizado. TeX contiene numerosas “hojas de estilo” estándar para diferentes tipos de documentos, y cada usuario puede adaptarlas más. También existen programas relacionados como BibTeX, que administra bibliografías y tiene hojas de estilo para todos los estilos de bibliografía comunes, y versiones de TeX para idiomas con varios alfabetos.
Posdata.
Los comandos PostScript pueden, por ejemplo, colocar texto con precisión, en varias fuentes y tamaños, dibujar imágenes que se describen matemáticamente y especificar el color o el sombreado. PostScript usa sufijo, también llamado notación polaca inversa, en el que el nombre de una operación sigue a sus argumentos. Por lo tanto, “300 600 20 270 carrera de arco” significa: dibujar (“carrera”) un arco de 270 grados con radio 20 en la ubicación (300, 600). Aunque un programador puede leer y escribir PostScript, normalmente se produce mediante programas de formato de texto, procesadores de texto o herramientas de visualización de gráficos.
PostScript es un lenguaje de descripción de páginas desarrollado a principios de la década de 1980 por Adobe Systems Incorporated sobre la base del trabajo en Xerox PARC (Palo Alto Research Center). Dichos lenguajes describen documentos en términos que pueden ser interpretados por una computadora personal para mostrar el documento en su pantalla o por un microprocesador en una impresora o un dispositivo de composición tipográfica.
El éxito de PostScript se debe a que su especificación es de dominio público y es una buena opción para las impresoras láser de alta resolución. Ha influido en el desarrollo de las fuentes de impresión y los fabricantes producen una gran variedad de fuentes PostScript.
SGML.
SGML (lenguaje de marcado generalizado estándar) es un estándar internacional para la definición de lenguajes de marcado; es decir, es un metalenguaje. El marcado consta de notaciones llamadas etiquetas que especifican la función de un fragmento de texto o cómo se mostrará. SGML enfatiza el marcado descriptivo, en el que una etiqueta podría ser “<énfasis>”. Dicho marcado denota la función del documento y podría interpretarse como vídeo inverso en la pantalla de una computadora, subrayado por una máquina de escribir, o itaSGML se utiliza para especificar DTD (definiciones de tipo de documento). Una DTD define un tipo de documento, como un informe, especificando qué elementos deben aparecer en el documento (por ejemplo, <Title>) y dando reglas para el uso de los elementos del documento, como que un párrafo puede aparecer dentro de una entrada de tabla. pero es posible que una tabla no aparezca dentro de un párrafo. Un programa de análisis puede analizar un texto marcado para determinar si se ajusta a una DTD. Otro programa puede leer las marcas para preparar un índice o traducir el documento a PostScript para imprimirlo. Otro más podría generar tipos grandes de audio para lectores con discapacidades visuales o auditivas.
Idiomas de visualización de la World Wide Web.
HTML.
La World Wide Web es un sistema para mostrar texto, gráficos y audio recuperados a través de Internet en un monitor de computadora. Cada unidad de recuperación se conoce como página web, y dichas páginas contienen frecuentemente “enlaces” que permiten recuperar páginas relacionadas. HTML (lenguaje de marcado de hipertexto) es el lenguaje de marcado para codificar páginas web. Fue diseñado por Tim Berners-Lee en el laboratorio de física nuclear del CERN en Suiza durante la década de 1980 y está definido por un SGML DTD. Las etiquetas de marcado HTML especifican elementos del documento como encabezados, párrafos y tablas. Marcan un documento para que lo muestre un programa informático conocido como navegador web. El navegador interpreta las etiquetas, mostrando los encabezados, párrafos y tablas en un diseño que se adapta al tamaño de la pantalla y las fuentes disponibles.
Los documentos HTML también contienen anclajes, que son etiquetas que especifican enlaces a otras páginas web. Un ancla tiene la forma <A HREF= “http://www.britannica.com”> Encyclopædia Britannica </A>, donde la cadena entre comillas es la URL (localizador uniforme de recursos) a la que apunta el enlace (la dirección Web ” ”) Y el texto que lo sigue es lo que aparece en un navegador web, subrayado para mostrar que es un enlace a otra página. Lo que se muestra como una sola página también puede estar formado por varias URL, algunas con texto y otras con gráficos.
XML.
HTML no permite definir nuevos elementos de texto; es decir, no es extensible. XML (lenguaje de marcado extensible) es una forma simplificada de SGML destinada a documentos que se publican en la Web. Al igual que SGML, XML utiliza DTD para definir los tipos de documentos y el significado de las etiquetas que se utilizan en ellos. XML adopta convenciones que facilitan el análisis, como que las entidades del documento están marcadas por una etiqueta de inicio y una final, como <BEGIN>… </BEGIN>. XML proporciona más tipos de enlaces de hipertexto que HTML, como enlaces bidireccionales y enlaces relacionados con una subsección de documento.
Debido a que un autor puede definir nuevas etiquetas, una DTD XML también debe contener reglas que indiquen a un navegador web cómo interpretarlas: cómo se mostrará una entidad o cómo generará una acción, como preparar un mensaje de correo electrónico.
Secuencias de comandos.
web Las páginas web marcadas con HTML o XML son documentos en gran parte estáticos. Las secuencias de comandos web pueden agregar información a una página a medida que un lector la usa o permitir que el lector ingrese información que, por ejemplo, puede transmitirse al departamento de pedidos de una empresa en línea. CGI (interfaz de puerta de enlace común) proporciona un mecanismo; transmite solicitudes y respuestas entre el navegador web del lector y el servidor web que proporciona la página. El componente CGI en el servidor contiene pequeños programas llamados scripts que toman información del sistema del navegador o la proporcionan para su visualización. Un guión simple podría preguntar el nombre del lector, determinar la dirección de Internet del sistema que usa el lector e imprimir un saludo. Los scripts pueden escribirse en cualquier lenguaje de programación, pero, debido a que generalmente son rutinas de procesamiento de texto simples, los lenguajes de scripting como PERL son particularmente apropiados.
Otro enfoque consiste en utilizar un lenguaje diseñado para que el navegador ejecute scripts web. JavaScript es uno de esos lenguajes, diseñado por Netscape Communications Corp., que puede utilizarse con los navegadores de Netscape y Microsoft. JavaScript es un lenguaje simple, bastante diferente de Java. Un programa JavaScript puede estar incrustado en una página web con la etiqueta HTML <script language = “JavaScript”>. Las instrucciones de JavaScript que siguen a esa etiqueta serán ejecutadas por el navegador cuando se seleccione la página. Para acelerar la visualización de páginas dinámicas (interactivas), JavaScript a menudo se combina con XML o algún otro lenguaje para intercambiar información entre el servidor y el navegador del cliente. En particular, el comando XMLHttpRequest habilita solicitudes de datos asincrónicas del servidor sin que sea necesario que el servidor vuelva a enviar la página web completa. Este enfoque o “filosofía” de programación se denomina Ajax (JavaScript y XML asíncronos).
VB Script es un subconjunto de Visual Basic. Desarrollado originalmente para el conjunto de programas Office de Microsoft, más tarde también se utilizó para secuencias de comandos web. Sus capacidades son similares a las de JavaScript y puede integrarse en HTML de la misma manera.
Detrás del uso de dichos lenguajes de scripting para la programación web se encuentra la idea de la programación de componentes, en la que los programas se construyen combinando componentes independientes previamente escritos sin ningún procesamiento adicional del lenguaje. Los programas JavaScript y VB Script se diseñaron como componentes que se pueden adjuntar a los navegadores web para controlar cómo muestran la información.
Elementos de programación.
A pesar de las diferencias de notación, los lenguajes informáticos contemporáneos proporcionan muchas de las mismas estructuras de programación. Estos incluyen estructuras de control básicas y estructuras de datos. Los primeros proporcionan los medios para expresar algoritmos y los segundos proporcionan formas de organizar la información.
Estructuras de Control.
Los programas escritos en lenguajes de procedimiento, el tipo más común, son como recetas, tienen listas de ingredientes e instrucciones paso a paso para usarlos. Las tres estructuras de control básicas en prácticamente todos los lenguajes de procedimiento son:
1. Secuencia: combine los ingredientes líquidos y luego agregue los secos.
2. Condicional: si los tomates están frescos, cocínelos a fuego lento, pero si están enlatados, omita este paso.
3. Alternativo: bata las claras de huevo hasta que formen picos suaves.
La secuencia es la estructura de control predeterminada; las instrucciones se ejecutan una tras otra. Podrían, por ejemplo, realizar una serie de operaciones aritméticas, asignando resultados a variables, para encontrar las raíces de una ecuación cuadrática ax2 + bx + c = 0. La estructura de control condicional IF-THEN o IF-THEN-ELSE permite una programa para seguir caminos alternativos de ejecución. La iteración, o bucle, le da a las computadoras gran parte de su poder. Pueden repetir una secuencia de pasos tantas veces como sea necesario, y las repeticiones apropiadas de pasos bastante simples pueden resolver problemas complejos.
Estas estructuras de control se pueden combinar. Una secuencia puede contener varios bucles; un bucle puede contener un bucle anidado dentro de él, o las dos ramas de un condicional pueden contener cada una secuencias con bucles y más condicionales. En el “pseudocódigo” utilizado en este artículo, “*” indica multiplicación” y “←” se utiliza para asignar valores a las variables. El siguiente fragmento de programación emplea la estructura IF-THEN para encontrar una raíz de la ecuación cuadrática, utilizando la fórmula:
cuadrática:.
La fórmula cuadrática asume que a es distinto de cero y que el discriminante (la porción dentro del signo de la raíz cuadrada) no es negativo (para obtener una raíz numérica real). Los condicionales verifican esos supuestos:
SI a = 0 ENTONCES
RAÍZ ← −c / b
ELSE
DISCRIMINANT ← b * b – 4 * a * c
SI DISCRIMINANTE ≥ 0 ENTONCES
RAÍZ ← (−b + RAÍZ CUADRADA (DISCRIMINANTE)) / 2 * a
ENDIF
ENDIF
La función SQUARE ROOT utilizada en el fragmento anterior es un ejemplo de un subprograma (también llamado procedimiento, subrutina o función). Un subprograma es como una receta de salsa que se da una vez y se usa como parte de muchas otras recetas. Los subprogramas toman insumos (la cantidad necesaria) y producen resultados (la salsa). Los subprogramas de uso común se encuentran generalmente en una colección o biblioteca provista de un idioma. Los subprogramas pueden llamar a otros subprogramas en sus definiciones, como se muestra en la siguiente rutina (donde ABS es la función de valor absoluto). SQUARE ROOT se implementa usando un ciclo WHILE (indefinido) que produce una buena aproximación para la raíz cuadrada de números reales a menos que x sea muy pequeña o muy grande. Un subprograma se escribe declarando su nombre, el tipo de datos de entrada y la salida:
FUNCTION SQUARE_ROOT (REAL x) RETURNS REAL
ROOT ← 1.0
WHILE ABS (ROOT * ROOT – x) ≥ 0.000001
AND WHILE ROOT ← (x / ROOT + ROOT) / 2
RETURN ROOT Los
subprogramas pueden dividir un problema en subproblemas más pequeños y manejables. A veces, un problema puede resolverse reduciéndolo a un subproblema que es una versión más pequeña del original. En ese caso, la rutina se conoce como un subprograma recursivo porque resuelve el problema llamándose a sí mismo repetidamente. Por ejemplo, la función factorial en matemáticas (n! = N ∙ (n − 1) ⋯ 3 ∙ 2 ∙ 1 — es decir, el producto de los primeros n enteros), se puede programar como una rutina recursiva:
FUNCTION FACTORIAL (INTEGER n ) RETURNS INTEGER
IF n = 0 THEN RETURN 1
ELSE RETURN n * FACTORIAL (n − 1)
La ventaja de la recursividad es que a menudo es una simple repetición de una definición precisa, que evita los detalles contables de una solución iterativa.
A nivel de lenguaje de máquina, los bucles y condicionales se implementan con instrucciones de bifurcación que dicen “saltar a” un nuevo punto en el programa. La declaración “goto” en lenguajes de nivel superior expresa la misma operación, pero rara vez se usa porque dificulta que los humanos sigan el “flujo” de un programa. Algunos lenguajes, como Java y Ada, no lo permiten.
Estructuras de datos.
Mientras que las estructuras de control organizan algoritmos, las estructuras de datos organizan la información. En particular, las estructuras de datos especifican tipos de datos y, por lo tanto, qué operaciones se pueden realizar en ellos, al tiempo que elimina la necesidad de que un programador realice un seguimiento de las direcciones de memoria. Las estructuras de datos simples incluyen enteros, números reales, booleanos (verdadero / falso) y caracteres o cadenas de caracteres. Las estructuras de datos compuestas se forman combinando uno o más tipos de datos.
Las estructuras de datos compuestos más importantes son la matriz, una colección de datos homogénea, y el registro, una colección heterogénea. Una matriz puede representar un vector de números, una lista de cadenas o una colección de vectores (una matriz de matrices o matriz matemática). Un registro puede almacenar información del empleado: nombre, cargo y salario. Una matriz de registros, como una tabla de empleados, es una colección de elementos, cada uno de los cuales es heterogéneo. Por el contrario, un registro puede contener un vector, es decir, una matriz.
Los componentes o campos del registro se seleccionan por nombre; por ejemplo, E.SALARY podría representar el campo de salario del registro E. Un elemento de matriz se selecciona por su posición o índice; A [10] es el elemento en la posición 10 en la matriz A. Un bucle FOR (iteración definida) puede correr a través de una matriz con límites de índice (FIRST TO LAST en el siguiente ejemplo) para sumar sus elementos:
FOR i ← FIRST HASTA LA ÚLTIMA
SUMA ← SUMA + A [i] Las
matrices y los registros tienen tamaños fijos. Las estructuras que pueden crecer se construyen con asignación dinámica, que proporciona nuevo almacenamiento según sea necesario. Estas estructuras de datos tienen componentes, cada uno de los cuales contiene datos y referencias a otros componentes (en términos de máquina, sus direcciones). Tales estructuras autorreferenciales tienen definiciones recursivas. Un bintree (árbol binario), por ejemplo, está vacío o contiene un componente raíz con datos y bintree “hijos” izquierdo y derecho. Estos bintrees implementan tablas de información de manera eficiente. Las subrutinas para operar sobre ellos son naturalmente recursivas; the following routine prints out all the elements of a bintree (each is the root of some subtree):
PROCEDURE TRAVERSE(ROOT: BINTREE)
IF NOT(EMPTY(ROOT))
TRAVERSE(ROOT.LEFT)
PRINT ROOT.DATA
TRAVERSE(ROOT.RIGHT)
ENDIF
Abstract data types (ADTs) are important for large-scale programming. They package data structures and operations on them, hiding internal details. For example, an ADT table provides insertion and lookup operations to users while keeping the underlying structure, whether an array, list, or binary tree, invisible. In object-oriented languages, classes are ADTs and objects are instances of them. The following object-oriented pseudocode example assumes that there is an ADT bintree and a “superclass” COMPARABLE, characterizing data for which there is a comparison operation (such as “<” for integers). It defines a new ADT, TABLE, that hides its data-representation and provides operations appropriate to tables. This class is polymorphic—defined in terms of an element-type parameter of the COMPARABLE class. Any instance of it must specify that type, here a class with employee data (the COMPARABLE declaration means that PERS_REC must provide a comparison operation to sort records). Implementation details are omitted.
CLASS TABLE OF <COMPARABLE T>
PRIVATE DATA: BINTREE OF <T>
PUBLIC INSERT(ITEM: T)
PUBLIC LOOKUP(ITEM: T) RETURNS BOOLEAN
END
CLASS PERS_REC: COMPARABLE
PRIVATE NAME: STRING
PRIVATE POSITION: {STAFF, SUPERVISOR, MANAGER}
PRIVATE SALARY: REAL
PUBLIC COMPARE (R: PERS_REC) RETURNS BOOLEAN
END
EMPLOYEES: TABLE <PERS_REC>
TABLE makes public only its own operations; thus, if it is modified to use an array or list rather than a bintree, programs that use it cannot detect the change. This information hiding is essential to managing complexity in large programs. It divides them into small parts, with “contracts” between the parts; here the TABLE class contracts to provide lookup and insertion operations, and its users contract to use only the operations so publicized