Unidad 1. Generalidades1.1 Què es un lenguaje de Programación1.1.1 Definición y Características generales1.2 Primeros lenguajes Algol, Fortran, Cobol1.3 Tipos de Programación1.4 Programación estructurada1.5 Programación Orientada a objetos1.6 Programación funcional1.7 Programación lógica1.8 Programación Visual y por eventos |
Unidad 2. Elementos de los lenguajes de programación2.1 Elementos básicos2.1.1 Datos2.1.2 Variables2.1.3 Instrucciones y expresiones2.1.4 Estructuras de control2.1.5 Funciones y procedimientos2.2 Los lenguajes de alto nivel2.2.1 Definición2.3 Diseño de lenguajes de programación2.3.1 Conceptos fundamentales2.3.1.1 Abstracción, ocultamiento y estructura2.3.1.2 Modularidad, concurrencia, verificación y estética2.3.1.3 Criterios de modulación2.3.1.4 Notaciones2.3.1.5 Técnicas2.4 Pruebas |
Unidad 3. Clasificación de los lenguajes de programación3.1 Lenguajes naturales y lenguajes formales3.2 Gramáticas tipo 0, 1, 2, 33.3 Nivel de abstracción: alto, intermedio, bajo3.4 Estructurado o no estructurado3.5 Basado en tipos (ligeros o fuertes) o sin tipos3.6 Descriptivo (declarativo) o prescriptivo (imperativo)3.7 Textual (lineal), hipermedia y visual3.8 Programación numérica, lógica y simbólica3.9 Secuencial y concurrente3.10 Programación estática (ejecutable inmutable) y dinámica (automodificable)3.11 Basado en procedimientos, funciones, objetos, eventos, reglas y restricciones3.12 Recursivo y basado en ciclos3.13 Basado en memoria estática, dinámica (automática o manual)3.14 Basado en peticiones (queries) o comandos3.15 Puros o híbridos (multipradigmas) |
Unidad 4. Tipos de lenguaje
4.1 Lenguajes imperativos: Ensamblador, Fortran, Pascal, C 4.2 Lenguajes orientados a objetos: Smalltalk, C++, Java, Eiffel 4.3 Lenguajes funcionales: LISP, ML, CLOS 4.4 Lenguajes declarativos: Prolog, SQL 4.5 Lenguajes concurrentes: Ada, OCCAM, Java 4.6 Lenguajes visuales / tablas / ejemplos: Icon, LabView, Postscript, TEX, XML, Excel, QBE 4.7 Inteligencia artificial: agentes, basados en conocimiento, slgoritmos genéticos, lógica difusa 4.8 Multiparadigmas: CLOS, Redes neurodifusas, C++, VisualAge 4.9 Radicales: programación automática, programación genética y computación cuántica. |
Se refiere a un conjunto de técnicas que han ido evolucionando. Estas técnicas aumentan considerablemente la productividad del programa reduciendo el tiempo requerido para escribir, verificar, depurar y mantener los programas. La programación estructurada utiliza un número limitado de estructuras de control que minimizan la complejidad de los problemas y que reducen los errores. Ésta incorpora entre otros elementos: el diseño descendente, recursos abstractos y estructuras básicas.
La programación estructurada es una forma de escribir programación de computadora de forma clara, para ello utiliza únicamente tres estructuras: secuencial, selectiva e iterativa; siendo innecesario y no permitiéndose el uso de la instrucción o instrucciones de transferencia incondicional ( GOTO ).
Programación Estructurada es una técnica en la cual la estructura de un programa, esto es, la interpelación de sus partes realiza tan claramente como es posible mediante el uso de tres estructuras lógicas de control:
a. Secuencia: Sucesión simple de dos o mas operaciones.
b. Selección: bifurcación condicional de una o mas operaciones.
c. Interacción: Repetición de una operación mientras se cumple una condición.
VENTAJAS POTENCIALES
Un programa escrito de acuerdo a estos principios no solamente tendrá una estructura, sino también una excelente presentación.
Un programa escrito de esta forma tiende a ser mucho más fácil de comprender que programas escritos en otros estilos.
La facilidad de comprensión del contenido de un programa puede facilitar el chequeo de la codificación y reducir el tiempo de prueba y depuración de programas. Esto último es cierto parcialmente, debido a que la programación estructurada concentra los errores en uno de los factores más generador de fallas en programación: la lógica.
El principal inconveniente de este método de programación, es que se obtiene un único bloque de programa, que cuando se hace demasiado grande puede resultar problemático su manejo, esto se resuelve empleando la programación modular, definiendo módulos interdependientes programados y compilados por separado. Un método un poco más sofisticado es la programación por capas, en la que los módulos tienen una estructura jerárquica muy definida y se denominan capas.
Programación Orientada a Objetos (POO)
La programación Orientada a objetos (POO) es una forma especial de programar, más cercana a como expresaríamos las cosas en la vida real que otros tipos de programación.
Durante años, los programadores se han dedicado a construir aplicaciones muy parecidas que resolvían una y otra vez los mismos problemas. Para conseguir que los esfuerzos de los programadores puedan ser utilizados por otras personas se creó
Las clases son declaraciones de objetos, también se podrían definir como abstracciones de objetos. Esto quiere decir que la definición de un objeto es la clase. Cuando programamos un objeto y definimos sus características y funcionalidades en realidad lo que estamos haciendo es programar una clase. En los ejemplos anteriores en realidad hablábamos de las clases coche o fracción porque sólo estuvimos definiendo, aunque por encima, sus formas.
Propiedades en clases
Las propiedades o atributos son las características de los objetos. Cuando definimos una propiedad normalmente especificamos su nombre y su tipo. Nos podemos hacer a la idea de que las propiedades son algo así como variables donde almacenamos datos relacionados con los objetos.
Métodos en las clases
Son las funcionalidades asociadas a los objetos. Cuando estamos programando las clases las llamamos métodos. Los métodos son como funciones que están asociadas a un objeto.
Objetos en POO
Los objetos son ejemplares de una clase cualquiera. Cuando creamos un ejemplar tenemos que especificar la clase a partir de la cual se creará. Esta acción de crear un objeto a partir de una clase se llama instanciar (que viene de una mala traducción de la palabra instace que en inglés significa ejemplar). Por ejemplo, un objeto de la clase fracción es por ejemplo 3/5. El concepto o definición de fracción sería la clase, pero cuando ya estamos hablando de una fracción en concreto 4/7, 8/1000 o cualquier otra, la llamamos objeto.
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.
miCoche = new Coche()
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.
Programación funcional.
La Programación funcional es un paradigma de programación declarativa basado en la utilización de funciones matemáticas.
Utilidad: El objetivo es conseguir lenguajes expresivos y matemáticamente elegantes, en los que no sea necesario bajar al nivel de la máquina para describir el proceso llevado a cabo por el programa, y evitando el concepto de estado del cómputo.
Características de la programación funcional:
Los programas escritos en un lenguaje funcional están constituidos únicamente por definiciones de funciones, entendiendo éstas no como subprogramas clásicos de un lenguaje imperativo, sino como funciones puramente matemáticas, en las que se verifican ciertas propiedades como la transparencia referencial (el significado de una expresión depende únicamente del significado de sus subexpresiones), y por tanto, la carencia total de efectos laterales.
Otras características propias de estos lenguajes son la no existencia de asignaciones de variables y la falta de construcciones estructuradas como la secuencia o la iteración (lo que obliga en la práctica a que todas las repeticiones de instrucciones se lleven a cabo por medio de funciones recursivas).
Existen dos grandes categorías de lenguajes funcionales: los funcionales puros y los híbridos. La diferencia entre ambos estriba en que los lenguajes funcionales híbridos son menos dogmáticos que los puros, al admitir conceptos tomados de los lenguajes imperativos, como las secuencias de instrucciones o la asignación de variables. En contraste, los lenguajes funcionales puros tienen una mayor potencia expresiva, conservando a la vez su transparencia referencial, algo que no se cumple siempre con un lenguaje funcional híbrido.
La programación lógica encuentra su hábitat natural en aplicaciones de inteligencia, artificial o relacionadas:
Lenguajes
El lenguaje de programación lógica por excelencia es Prolog, que cuenta con diversas variantes. La más importante es la programación lógica con restricciones (véase artículo sobre programación con restricciones), que posibilita la resolución de ecuaciones lineales además de la demostración de hipótesis.
Estructuras básicas
Prolog cuenta con dos tipos de estructuras: términos y sentencias. Los términos pueden ser constantes, variables o functores:
> Las constantes, representadas por una cadena de caracteres, pueden ser números o cualquier cadena que comience en minúscula.
> Las variables son cadenas que comienzan con una letra mayúscula.
Los functores son identificadores que empiezan con minúscula, seguidos de una lista de parámetros (términos) entre paréntesis, separados por comas.
Las sentencias son reglas o cláusulas. Hay hechos, reglas con cabeza y cola, y consultas.
> Un hecho establece una relación entre objetos, y es la forma más objetos, y es la forma más sencilla de sentencia.
> Una regla permite definir nuevas relaciones
a partir de otras ya existentes.
Operadores
MATEMATICOS + Suma - Resta * Multiplicación / División (retorna siempre en punto flotante) // División entera (trunca) mod Resto de división ** Potenciación |
RELACIONALES > Mayor que < Menor que >= Mayor o igual que =< Menor o igual que =:= Aritméticamente igual =\= Aritméticamente diferente |
La programación visual
Brinda los conocimientos necesarios para diseñar y desarrollar aplicaciones con un entorno visual amigable y fácil de utilizar para el usuario.
El objetivo de esta asignatura es el diseño y desarrollo de pequeñas aplicaciones visuales orientadas a eventos, componentes e interactivas.
Los lenguajes de programación visual tienden a facilitar la tarea de los programadores, dado que con los primeros lenguajes de programación crear una ventana era tarea de meses de desarrollo y de un equipo de trabajo.
Para soportar este tipo de desarrollo interactúan dos tipos de herramientas, una que permite realizar diseños gráficos y , un lenguaje de alto nivel que permite codificar los eventos. Con dichas herramientas es posible desarrollar cualquier tipo de aplicaciones basadas en el entorno
Algunos de los lenguajes de programación visual;
1. Visual Basic.Net
2. Borland C++
3. Borland Delphi
4. Visual J++
Para conseguir, en poco tiempo, la habilidad suficiente en el manejo de las técnicas de programación necesarias, se recomienda dedicar un número de horas mínimo de programación.
Las aplicaciones desarrolladas deberán cumplir una serie de criterios de calidad mínimos, que será imprescindible conseguir para poder alcanzar los objetivos de esta asignatura
Eventos
Ya se ha dicho que las acciones del usuario sobre el programa se llaman eventos. Son eventos típicos el click sobre un botón, el hacer doble click sobre el nombre de un fichero para abrirlo, el arrastrar un icono, el pulsar una tecla o combinación de teclas, el elegir una opción de un menú, el escribir en una caja de texto, o simplemente mover el ratón.
Visual Significa Visual.
Como el nombre lo indica, una gran parte de la programación con Visual Basic se realiza visualmente. Esto significa que durante el tiempo de diseño usted tiene la capacidad de ver la forma en el programa se vera al ejecutarse Esta es una gran ventaja sobre otros lenguajes de programación debido a que se tiene la capacidad de cambiar y experimentas con el diseño hasta que se esté satisfecho con los colores, proporciones e imágenes que incluya en su programa.
Según la definición de la Encyclopedia of Computer Science (Encyclopedia of Computer Science, 4th Edition, Anthony Ralston (Editor), Edwin D. Reilly (Editor), David Hemmendinger (Editor), Wiley, 2000. Disponible en la biblioteca politécnica con identificador: POE R0/E/I/ENC/RAL):
"A programming language is a set of characters, rules for combining them, and rules specifying their effects when executed by a computer, which have the following four characteristics:
Según Abelson y Sussman, en el libro de texto de nuestra asignatura (SICP, p. 1):
"We are about to study the idea of a computational process. Computational processes are abstract beings that inhabit computers. As they evolve, processes manipulate other abstract things called data. The evolution of a process is directed by a pattern of rules called a program. [...] The programs we use to conjure processes are like a sorcerer's spells. They are carefully composed from symbolic expressions in arcane and esoteric programming languages that prescribe the tasks we want our processes to perform."
Y después, en la página 4, añaden otra idea fundamental:
"A powerful programming language is more than just a means for instructing a computer to perform tasks. The language also serves as a framework within which we organize our ideas about processes. Thus, when we describe a language, we should pay particular attention to the means that the language provides for combining simple ideas to form more complex ideas."
Así, entre las características de un lenguaje de programación podemos remarcar las siguientes:
Para Abelson y Sussman, todos los lenguajes de progamación permiten combinar ideas simples en ideas más complejas mediante los siguientes tres mecanismos:
Cuando se habla de elementos en el párrafo anterior nos estamos refiriendo tanto a datos como a programas.
Instrucciones
Como definición de instrucciones entendemos que es un hecho o suceso de duración limitada que genera unos cambios en la ejecución del programa.
Existen varios tipos de instrucciones:
Los elementos que intervienen en la expresión que conforma la condición deben estar siempre reflejados en el cuerpo del bucle de tal forma que siempre exista la posibilidad de salir del mismo.
Existen dos tipos principales de bucles:
Expresiones
Como definición de expresiones entendemos que es un conjunto de operandos y operadores, que después de ser evaluados devuelven un determinado resultado.
En función del resultado obtenido las podemos clasificar en:
Estructuras de control
Las estructuras de control permiten modificar el flujo de ejecución de las instrucciones de un programa.
Con las estructuras de control se puede:
De acuerdo a una condición, ejecutar un grupo u otro de sentencias (If-Then-Else y Select-Case)
Ejecutar un grupo de sentencias mientras exista una condición (Do-While)
Ejecutar un grupo de sentencias hasta que exista una condición (Do-Until)
Ejecutar un grupo de sentencias un número determinado de veces (For-Next)
Etc
Todas las estructuras de control tienen un único punto de entrada y un único punto de salida. Las estructuras de control se puede clasificar en : secuenciales, iterativas y de control avanzadas. Esto es una de las cosas que permite que la programación se rija por los principios de la programación estructurada.
Los lenguajes de programación modernos tienen estructuras de control similares. Básicamente lo que varía entre las estructuras de control de los diferentes lenguajes es su sintaxis, cada lenguaje tiene una sintaxis propia para expresar la estructura.
Otros lenguajes ofrecen estructuras diferentes, como por ejemplo los comandos guardados.
Funciones:
Una función es un procedimiento que, adicionalmente, devuelve un valor como resultado de su ejecución.
La ventaja de las funciones es que pueden utilizarse en asignaciones, expresiones matemáticas, etc.
Procedimientos:
Un procedimiento es un sub-programa o rutina al que se le asigna un cierto nombre y que realiza unas determinadas operaciones. La ventaja que tiene utilizar procedimientos es que su código se escribe una sola vez pero pueden ser ejecutados desde tantos puntos del script como se desee (ver Funcionamiento >> Comandos básicos >> Ejecución de funciones y procedimientos).
Un procedimiento puede recibir una serie de parámetros que variarán su funcionamiento. Los parámetros a recibir (de qué tipo es cada uno y para qué se utiliza) se determinan al escribir el procedimiento.
Dentro del código que determina el funcionamiento de un procedimiento se pueden a su vez ejecutar otros procedimientos, incluso sí mismo de forma recursiva.
Los lenguajes de programación de alto nivel se caracterizan por expresar los algoritmos de una manera adecuada a la capacidad cognitiva humana, en lugar de a la capacidad ejecutora de las máquinas. En los primeros lenguajes de alto nivel la limitación era que se orientaban a un área específica y sus instrucciones requerían de una sintaxis predefinida. Se clasifican como lenguajes procedimentales. Otra limitación de los lenguajes de alto nivel es que se requiere de ciertos conocimientos de programación para realizar las secuencias de instrucciones lógicas. Los lenguajes de muy alto nivel se crearon para que el usuario común pudiese solucionar tal problema de procesamiento de datos de una manera más fácil y rápida.
La programación en un lenguaje de bajo nivel como el lenguaje de la máquina o el lenguaje simbólico tiene ciertas ventajas:
Pero también tiene importantes inconvenientes:
Por esta razón, a finales de los años 1950 surgió un nuevo tipo de lenguajes de programación que evitaba estos inconvenientes, a costa de ceder un poco en las ventajas. Estos lenguajes se llaman "de tercera generación" o "de alto nivel", en contraposición a los "de bajo nivel" o "de nivel próximo a la máquina".
El concepto de abstracción es fundamental en informática. Para modelar un dominio (sistema de información de una universidad, sistema de sensores de una planta química, etc.) es necesario definir distintas abstracciones que nos permitan tratar sus elementos.
Una abstracción agrupa un conjunto de elementos (datos y procedimientos) y le da un nombre. Por ejemplo, cuando hablamos del sistema de información de una universidad identificamos elementos como:
Existen abstracciones propias de la computación, que se utilizan en múltiples dominios. Por ejemplo, abstracciones de datos como:
También existen abstracciones que nos permiten tratar con dispositivos y ordenadores externos:
Uno de los trabajos principales de un informático es la construcción de abstracciones que permitan ahorrar tiempo y esfuerzo a la hora de tratar con la complejidad del mundo real.
El origen de la palabra paradigma entendida como un marco general en el que se desarrollan teorías científicas se encuentra en el trabajo de 1962 del filósofo e historiador de la ciencia Thomas S. Kuhn, La estructura de las revoluciones científicas. Esa palabra ha sido después adoptada por el mundo de la computación para definir un conjunto de ideas y principios comunes de grandes grupos de lenguajes de programación.
La definición de la palabra paradigma más cercana a lo que se quiere decir en la expresión paradigma de programación es la siguiente:
"Un marco filosófico y teórico de una escuela o disciplina científica en el que se formulan teorías, leyes y generalizaciones y los experimentos realizados en soporte de ellas."
Un paradigma define un conjunto de reglas, patrones y estilos de programación que son usados por los lenguajes de programación que usan ese paradigma.
Podemos distinguir cuatro grandes paradigmas de programación:
Algunas características importantes de cada uno de estos paradigmas.
En el paradigma funcional la computación se realiza mediante la evaluación de expresiones.
Los lenguajes de programación que complen el paradigma imperativo se caracterizan por tener un estado implícito que es modificado mediante instrucciones o comandos del lenguaje. Como resultado, estos lenguajes tienen una noción de secuenciación de los comandos para permitir un control preciso y determinista del estado.
Una reflexión importante es que la separación entre los paradigmas y los lenguajes no es estricta. Existen ideas comunes a distintos paradigmas, así como lenguajes de programación que soportan más de un paradigma. Por ejemplo, el paradigma funcional y lógico comparten características declarativas, mientras que el paradigma orientado a objetos y procedural tienen características imperativas.
Otros paradigmas de programación menos comunes: