2. Un lenguaje de programación es un idioma
artificial diseñado para expresar
computaciones que pueden ser llevadas a
cabo por máquinas como las computadoras.
Pueden usarse para crear programas que
controlen el comportamiento físico y lógico
de una máquina, para expresar algoritmos
con precisión, o como modo de comunicación
humana. Está formado de un conjunto de
símbolos y reglas sintácticas y semánticas
que definen su estructura y el significado de
sus elementos y expresiones.
3. Al proceso por el cual se escribe, se prueba,
se depura, se compila y se mantiene el
código fuente de un programa informático se
le llama programación.
4. También la palabra programación se define como el
proceso de creación de un programa de computadora,
mediante la aplicación de procedimientos lógicos, a través
de los siguientes pasos:
El desarrollo lógico del programa para resolver un
problema en particular.
Escritura de la lógica del programa empleando un lenguaje
de programación específico (codificación del programa)
Ensamblaje o compilación del programa hasta convertirlo
en lenguaje de máquina.
Prueba y depuración del programa.
Desarrollo de la documentación.
5. Desde 1954 hasta la actualidad se han
documentado más de 2.500 lenguajes de
programación (consultar en The Language
List ). Entre 1952 y 1972, la primera época
de los lenguajes de programación, se
desarrollaron alrededor de 200 lenguajes, de
los que una decena fueron realmente
significativos y tuvieron influencia en el
desarrollo de lenguajes posteriores.
Una lista parcial de algunos de los lenguajes
de programación más importantes, junto con
su año de creación:
9. El lenguaje máquina de una computadora consta
de cadenas de números binarios (ceros y unos) y es
el único que “entienden” directamente los
procesadores. Todas las instrucciones preparadas
en cualquier lenguaje de máquina tienen por lo
menos dos partes. La primera es el comando u
operación, que dice a la computadora cuál es la
función que va a realizar. Todas las computadoras
tienen un código de operación para cada una de
sus funciones. La segunda parte de la instrucción
es el operando, que indica a la computadora dónde
hallar o almacenar los datos y otras instrucciones
que se van a manipular; el número de operandos
de una instrucción varía en las distintas
computadoras.
10. A principios de la década de 1950, y con el fin
de facilitar la labor de los programadores, se
desarrollaron códigos nemotécnicos para las
operaciones y direcciones simbólicas. La
palabra nemotécnico se refiere a una ayuda
para la memorización. Uno de los primeros
pasos para mejorar el proceso de preparación
de programas fue sustituir los códigos de
operaciones numéricos del lenguaje de
máquina por símbolos alfabéticos, que son los
códigos nemotécnicos.
11. Los primeros programas ensambladores producían sólo una
instrucción en lenguaje de máquina por cada instrucción del
programa fuente. Para agilizar la codificación, se
desarrollaron programas ensambladores que podían producir
una cantidad variable de instrucciones en lenguaje de
máquina por cada instrucción del programa fuente. Dicho de
otra manera, una sola macroinstrucción podía producir varias
líneas de código en lenguaje de máquina. Los primeros
programas ensambladores producían sólo una instrucción en
lenguaje de máquina por cada instrucción del programa
fuente. Para agilizar la codificación, se desarrollaron
programas ensambladores que podían producir una cantidad
variable de instrucciones en lenguaje de máquina por cada
instrucción del programa fuente. Dicho de otra manera, una
sola macroinstrucción podía producir varias líneas de código
en lenguaje de máquina.
12. Naturalmente, un programa que se escribe en un lenguaje de alto
nivel también tiene que traducirse a un código que pueda utilizar la
máquina. Los programas traductores que pueden realizar esta
operación se llaman compiladores. Éstos, como los programas
ensambladores avanzados, pueden generar muchas líneas de código
de máquina por cada proposición del programa fuente. Se requiere
una corrida de compilación antes de procesar los datos de un
problema.
Los compiladores son aquellos cuya función es traducir un programa
escrito en un determinado lenguaje a un idioma que la computadora
entienda (lenguaje máquina con código binario).
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.
13. Se puede también utilizar una alternativa diferente de los compiladores para traducir
lenguajes de alto nivel. En vez de traducir el programa fuente y grabar en forma
permanente el código objeto que se produce durante la corrida de compilación para
utilizarlo en una corrida de producción futura, el programador sólo carga el programa
fuente en la computadora junto con los datos que se van a procesar. A continuación, un
programa intérprete, almacenado en el sistema operativo del disco, o incluido de
manera permanente dentro de la máquina, convierte cada proposición del programa
fuente en lenguaje de máquina conforme vaya siendo necesario durante el proceso de
los datos. No se graba el código objeto para utilizarlo posteriormente.
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.
14. La programación declarativa es una forma de programación
que implica la descripción de un problema dado en lugar de
proveer una solución para dicho problema, dejando la
interpretación de los pasos específicos para llegar a dicha
solución a un intérprete no especificado. La programación
declarativa adopta, por lo tanto, un enfoque diferente al de
la programación imperativa tradicional.
En otras palabras, la programación declarativa provee el
“qué”, pero deja el “cómo” liberado a la implementación
particular del intérprete. Por lo tanto se puede ver que la
programación declarativa tiene dos fases bien diferenciadas,
la declaración y la interpretación.
Es importante señalar que a pesar de hacer referencia a
intérprete, no hay que limitarse a “lenguajes interpretados”
en el sentido habitual del término, sino que también se
puede estar trabajando con “lenguajes compilados”.
15. -Los lenguajes declarativos están orientados a buscar la solución del problema, sin
preocuparse por la forma de llegar a ello; es decir, el programador debe concentrarse
en la lógica del algoritmo, más que en el control de la secuencia.
-Los programas están formados por un conjunto de definiciones o ecuaciones, las cuales
describen lo que debe ser calculado, no en sí la forma de hacerlo.
-Las variables sólo pueden tener asignado un solo valor a lo largo de la ejecución del
programa, lo cual implica que no puede existir asignación destructiva. Debido a esto,
cobra especial importancia el uso del anidamiento y la recursividad.
-Las listas representan la estructura fundamental de datos.
-El orden de la ejecución no resulta importante debido a que no existen efectos
colaterales; es decir, que al calcular un valor, resulta imposible afectar el cálculo de
otros y con esto se puede afirmar que cualquier secuencia de ejecución deberá
conducir al mismo resultado.
-Las expresiones o definiciones pueden ser usadas como valores y por lo tanto se
pueden tratar como argumentos de otras definiciones.
-El control de la ejecución no es responsabilidad del programador.
16. La principal desventaja de la programación
declarativa es que no puede resolver cualquier
problema dado, sino que está restringida al
subconjunto de problemas para los que el
intérprete o compilador fue diseñado.
17. A pesar de lo anterior existen algunas ventajas en el
uso de la programación declarativa. Entre las ventajas
se destaca que la solución de un problema se puede
realizar con un nivel de abstracción considerablemente
alto, sin entrar en detalles de implementación
irrelevantes, lo que hace a las soluciones más fácil de
entender por las personas. La resolución de problemas
complejos es resuelta por el intérprete a partir de la
declaración de las condiciones dadas.
La programación declarativa es muy usada en la
resolución de problemas relacionados con inteligencia
artificial, bases de datos, configuración, y
comunicación entre procesos; sin embargo, ningún
leguaje declarativo se aproxima en popularidad a los
lenguajes imperativos.
18. · PROLOG
· SQL
· HTML
· WSDL (Web Services Description Language)
· XML Stylesheet Language for Transformation
19. En ciencias de la computación se llama lenguajes
imperativos a aquellos en los cuales se le ordena a
la computadora cómo realizar una tarea siguiendo
una serie de pasos o instrucciones, por ejemplo:
Paso 1, solicitar número.
Paso 2, multiplicar número por dos.
Paso 3, imprimir resultado de la operación.
Paso 4, etc.
El proceso anterior se puede realizar con un
lenguaje imperativo como por ejemplo BASIC, C,
C++, Java, Clipper, Dbase, C#, PHP, Perl, etc.
20. En los lenguajes declarativos las sentencias que se
utilizan lo que hacen es describir el problema que
se quiere solucionar, pero no las instrucciones
necesarias para solucionarlo. Esto último se
realizará mediante mecanismos internos de
inferencia de información a partir de la
descripción realizada.
Los lenguajes imperativos describen paso a paso un
conjunto de instrucciones que deben ejecutarse
para variar el estado un programa y hallar la
solución, es decir, un algoritmo en el que se
describen los pasos necesarios para solucionar un
problema.
21. En la Programación Orientada a Objetos (POO u
OOP según siglas en inglés) se definen los
programas en términos de “clases de objetos”,
objetos que son entidades que combinan
estado (es decir, datos) comportamiento (esto
es, procedimientos o métodos) e identidad
(propiedad del objeto que lo diferencia del
resto). La programación orientada a objetos
expresa un programa como un conjunto de
estos objetos, que colaboran entre ellos para
realizar tareas. Esto permite hacer los
programas módulos más fáciles de escribir,
mantener y reutilizar.
22. La programación orientada a objetos es una nueva
forma de programar que trata de encontrar la
solución a problemas de una forma que ofrece
muchas ventajas y facilidades que no se tenían
anteriormente. Introduce nuevos conceptos, que
superan y amplían conceptos antiguos ya
conocidos. Entro ellos destacan los siguientes:
· OBJETO: entidad provista de un conjunto de
propiedades o atributos (datos) y de
comportamiento o funcionalidad (“métodos”).
Corresponden a los objetos reales del mundo que
nos rodea, o a objetos internos del sistema (del
programa).
23. -CLASE: definiciones de las propiedades y comportamiento de un tipo de
objeto concreto. La instanciación es la lectura de estas definiciones y la
creación de un objeto a partir de ellas. Una clase es una colección de
objetos similares o la implementación, declaración o definición de un tipo
de objeto. Cada vez que se construye un objeto de una clase se crea una
instancia de esa clase. Por ejemplo en Visual Basic, se tiene la clase Form, y
se pueden crear instancias de esa clase al tener Form1, Form2, etc. Así se
está creando una instancia de la clase Form.
-MÉTODO: algoritmo asociado a un objeto (o a una clase de objetos), cuya
ejecución se desencadena tras la recepción de un “mensaje”. Desde el
punto de vista del comportamiento, es lo que el objeto puede hacer. Un
método puede producir un cambio en lar propiedades del objeto, o la
generación de un “evento” con un nuevo mensaje para otro objeto del
sistema.
-EVENTO: un suceso en el sistema (tal como una interacción del usuario con
la máquina, o un mensaje enviado por un objeto). El sistema maneja el
evento enviando el mensaje adecuado al objeto pertinente.
24. -MENSAJE: una comunicación dirigida a un objeto, que le
ordena que ejecute uno de sus métodos con ciertos
parámetros asociados al evento que lo generó.
-PROPIEDAD O ATRIBUTO: contenedor de un tipo de datos
asociados a un objeto (o a una clase de objetos), que hace
los datos visibles desde fuera del objeto, y cuyo valor puede
ser alterado por la ejecución de algún método.
-ESTADO INTERNO: es una propiedad invisible de los objetos,
que puede ser únicamente accedida y alterada por un
método del objeto, y que se utiliza para indicar distintas
situaciones posibles para el objeto (o clase de objetos).
En comparación con un lenguaje imperativo, una “variable no
es más que un contenedor interno del atributo del objeto o
de un estado interno, así como la “función” es un
procedimiento interno del método del objeto.
25. ABSTRACCIÓN: Cada objeto en el sistema sirve
como modelo de un "agente" abstracto que
puede realizar trabajo, informar y cambiar su
estado, y "comunicarse" con otros objetos en el
sistema sin revelar cómo se implementan estas
características. Los procesos, las funciones o
los métodos pueden también ser abstraídos y
cuando lo están, una variedad de técnicas son
requeridas para ampliar una abstracción.
26. ENCAPSULAMIENTO: también llamado "ocultación de la
información". Cada objeto está aislado del exterior, es un
módulo natural, y cada tipo de objeto expone una interfaz a
otros objetos que específica cómo pueden interactuar con los
objetos de la clase. El aislamiento protege a las propiedades
de un objeto contra su modificación por quien no tenga
derecho a acceder a ellas, solamente los propios métodos
internos del objeto pueden acceder a su estado. Esto asegura
que otros objetos no pueden cambiar el estado interno de un
objeto de maneras inesperadas, eliminando efectos
secundarios e interacciones inesperadas. Algunos lenguajes
relajan esto, permitiendo un acceso directo a los datos
internos del objeto de una manera controlada y limitando el
grado de abstracción. La aplicación entera se reduce a un
agregado o rompecabezas de objetos. Esta característica o
propiedad permite por tanto ejecutar la información al resto
de los objetos, impidiendo así accesos incorrectos o
conflictos.
27. POLIMORFISMO: comportamientos diferentes,
asociados a objetos distintos, pueden
compartir el mismo nombre, al llamarlos por
ese nombre se utilizará el comportamiento
correspondiente al objeto que se esté usando.
O dicho de otro modo, las referencias y las
colecciones de objetos pueden contener
objetos de diferentes tipos, y la invocación de
un comportamiento en una referencia
producirá el comportamiento correcto para el
tipo real del objeto referenciado. Por ejemplo
en Visual Basic, el polimorfismo se da al tener
diferentes tipos de objetos (Form, Label, etc.)
28. HERENCIA: las clases no están aisladas, sino que se
relacionan entre sí, formando una jerarquía de clasificación.
Los objetos heredan las propiedades y el comportamiento de
todas las clases a las que pertenecen. La herencia organiza y
facilita el polimorfismo y el encapsulamiento permitiendo a
los objetos ser definidos y creados como tipos especializados
de objetos preexistentes. Estos pueden compartir (y
extender) su comportamiento sin tener que reimplementar su
comportamiento. Esto suele hacerse habitualmente
agrupando los objetos en clases y estas en árboles o
enrejados que reflejan un comportamiento común. Cuando
un objeto pertenece a más de una clase se dice que hay
herencia múltiple; esta característica no está soportada por
algunos lenguajes (como Java). Con esta propiedad, los
objetos heredan comportamientos dentro de una jerarquía
de clases.
29. · La programación orientada a objetos es más moderna, es
una evolución de la programación imperativa plasmada en el
diseño de una familia de lenguajes conceptos que existían
previamente, con algunos nuevos.
· La programación orientada a objetos se basa en lenguajes
que soportan sintáctica y semánticamente la unión entre los
tipos abstractos de datos y sus operaciones (a esta unión se
la suele llamar clase).
· La programación orientada a objetos incorpora en su
entorno de ejecución mecanismos tales como el polimorfismo
y el envío de mensajes entre objetos.
30. · Ada · Objective-C
· C++ · Ocaml
· C# · Oz
· VB.NET · PHP
· Clarion · PowerBuilder
· Delphi · Pitón
· Eiffel · Ruby
· Java · Smalltalk
· Lexico (en
castellano)