Site hosted by Angelfire.com: Build your free website today!

Temario:


Unidad 1. Generalidades

1.1 Què es un lenguaje de Programación

1.1.1 Definición y Características generales

1.2 Primeros lenguajes Algol, Fortran, Cobol

1.3 Tipos de Programación

1.4 Programación estructurada

1.5 Programación Orientada a objetos

1.6 Programación funcional

1.7 Programación lógica

1.8 Programación Visual y por eventos

Unidad 2. Elementos de los lenguajes de programación

2.1 Elementos básicos

2.1.1 Datos

2.1.2 Variables

2.1.3 Instrucciones y expresiones

2.1.4 Estructuras de control

2.1.5 Funciones y procedimientos

2.2 Los lenguajes de alto nivel

2.2.1 Definición

2.3 Diseño de lenguajes de programación

2.3.1 Conceptos fundamentales

2.3.1.1 Abstracción, ocultamiento y estructura

2.3.1.2 Modularidad, concurrencia, verificación y estética

2.3.1.3 Criterios de modulación

2.3.1.4 Notaciones

2.3.1.5 Técnicas

2.4 Pruebas

Unidad 3. Clasificación de los lenguajes de programación

3.1 Lenguajes naturales y lenguajes formales

3.2 Gramáticas tipo 0, 1, 2, 3

3.3 Nivel de abstracción: alto, intermedio, bajo

3.4 Estructurado o no estructurado

3.5 Basado en tipos (ligeros o fuertes) o sin tipos

3.6 Descriptivo (declarativo) o prescriptivo (imperativo)

3.7 Textual (lineal), hipermedia y visual

3.8 Programación numérica, lógica y simbólica

3.9 Secuencial y concurrente

3.10 Programación estática (ejecutable inmutable) y dinámica (automodificable)

3.11 Basado en procedimientos, funciones, objetos, eventos, reglas y restricciones

3.12 Recursivo y basado en ciclos

3.13 Basado en memoria estática, dinámica (automática o manual)

3.14 Basado en peticiones (queries) o comandos

3.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.


Lenguajes de programación


Programación estructurada

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.


Inconvenientes de la programación estructurada

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.

La Programación Orientada a Objetos es el paradigma de programación más utilizado en la actualidad. Su consistente base teórica y la amplia gama de herramientas que permiten crear código a través de diseños orientados a objetos la convierten en la alternativa más adecuada para el desarrollo de aplicaciones.

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ó la POO. Que es una serie de normas de realizar las cosas de manera que otras personas puedan utilizarlas y adelantar su trabajo, de manera que consigamos que el código se pueda reutilizar.

La POO no es difícil, pero es una manera especial de pensar, a veces subjetiva de quien la programa, de manera que la forma de hacer las cosas puede ser diferente según el programador. Aunque podamos hacer los programas de formas distintas, no todas ellas son correctas, lo difícil no es programar orientado a objetos sino programar bien. Programar bien es importante porque así nos podemos aprovechar de todas las ventajas de la POO.

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.

 


Programación Lógica.

La programación lógica, junto con la funcional, forma parte de lo que se conoce como programación declarativa. En los lenguajes tradicionales, la programación consiste en indicar cómo resolver un problema mediante sentencias; en la programación lógica, se trabaja de una forma descriptiva, estableciendo relaciones entre entidades, indicando no cómo, sino qué hacer.

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.


Elementos de los lenguajes de programación

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:

  1. It requires no knowledge of machine code on the part of the user
  2. It has machine independence
  3. Is translated into machine language
  4. Employs a notation that is closer to that of the specific problem being solved than is machine code"

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.


Lenguaje de alto nivel

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".

 

Abstracción

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:

  • Estudiantes
  • Asignaturas
  • Matrícula
  • Expediente académico
  • ...

Existen abstracciones propias de la computación, que se utilizan en múltiples dominios. Por ejemplo, abstracciones de datos como:

  • Listas
  • Árboles
  • Grafos
  • Tablas hash

También existen abstracciones que nos permiten tratar con dispositivos y ordenadores externos:

  • Fichero
  • Raster gráfico
  • Protocolo TCP/IP

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.

Paradigmas de programación

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.

Paradigma funcional

En el paradigma funcional la computación se realiza mediante la evaluación de expresiones.

Paradigma lógico

Paradigma imperativo

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.

Paradigma orientado a objetos

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: