Sie sind auf Seite 1von 14

Introduccin a los lenguajes de programacin

Historia de los lenguajes de programacin


El nacimiento de los computadores comerciales
Al comienzo slo exista el cdigo mquina El UNIVAC fue el primer computador comercial (1951) Aparece la figura del programador Mas importantes las horas de funcionamiento del computador que las horas de trabajo del programador

Los pioneros
Los primeros lenguajes de programacin aparecieron a finales de la dcada de los 50 FORTRAN, equipo de IBM dirigido por John W. Backus FORmula TRANslating system Primer manual de FORTRAN octubre de 1956 Primer compilador abril de 1956.

Los pioneros
Los primeros lenguajes de programacin aparecieron a finales de la dcada de

los 50
FORTRAN, equipo de IBM dirigido por John W. Backus FORmula TRANslating system Primer manual de FORTRAN octubre de 1956 Primer compilador abril de 1956.

Aspectos que provocan la evolucin de los LP


Recursos y tipos de ordenadores Aplicaciones y necesidades de los usuarios Nuevos mtodos de programacin Estudios tericos Estandarizacin

La siguiente tabla (extraida del libro Programming Languages. Design and Implementation, de Terrence W. Pratt y Marvin V. Zelkowitz) muestra una pequea lista de los lenguajes y las influencias que fueron importante a finales del siglo 20.

Ejemplos concretos de evolucin

Importancia del aprendizaje de tcnicas de LPs


Es importante conocer cmo funciona "por dentro" un lenguaje de programacin y sus caractersticas comparadas.

Mejora el uso del lenguaje de programacin Incrementa el vocabulario de los elementos de programacin Permite una mejor eleccin del lenguaje de programacin Mejora la habilidad para desarrollar programas efectivos y eficientes Facilita el aprendizaje de un nuevo lenguaje de programacin Facilita el diseo de nuevos lenguajes de programacin

Lenguajes usados en la actualidad


Una lista extraida de freshmeat de proyectos etiquetados con la etiqueta Libraries ordenados por lenguaje de programacin Java (1436) C (1310) C++ (988) PHP (857) Python (629) Perl (404) JavaScript (200) Ruby (130) C# (88) Tcl (86) SQL (67) Objective C (41) Scheme (37) Assembly (36) J2ME (35) Other (30) Unix Shell (30) Fortran (28) Haskell (23) Ada (23) Other Scripting.. (19) Lisp (17) Delphi (15) Lua (14) Eiffel (14) PL/SQL (13) OCaml (13) Common Lisp (12) Groovy (12) Visual Basic (11) ML (10) ASP (10) Pascal (9) HTML (8) Erlang (8) Zope (8) AJAX (8) XML (7) .NET (7) Qt (6) Emacs Lisp (6) bash (5)

La evolucin no se detiene
Ruby

Ruby, un lenguaje de programacin ideado en 1993 por el joven japons Yukihiro

Matsumoto
Lenguaje multi-paradigma interpretado y muy expresivo que actualmente se

utiliza tanto para desarrollar aplicaciones web como videojuegos.


Proyecto vivo, cada ao aparecen nuevas versiones

Scala

Scala, diseado en 2003 por el profesor alemn Martin Oderski Respuesta a los problemas de los lenguajes tradicionales imperativos para

manejar la concurrencia
Est implementado sobre Java y corre en la Mquina Virtual Java

Go

Go, el nuevo lenguaje de programacin de Google Una mezcla de C y Python que intenta conseguir un lenguaje de programacin de

sistemas muy eficiente, expresivo y tambin multiparadigma.

Elementos de los lenguajes de programacin


Definicin de la Encyclopedia of Computer Science
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

Definicin de Abelson y Sussman


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

Caractersticas de un LP
1. Define un proceso que se ejecuta en un computador 2. Es de alto nivel, cercano a los problemas que se quieren resolver (abstraccin)

3. Permite construir nuevas abstracciones que se adapten al dominio que se programa

Elementos de un LP
Para Abelson y Sussman, todos los lenguajes de progamacin permiten combinar ideas simples en ideas ms complejas mediante los siguientes tres mecanismos
Expresiones primitivas que representan las entidades ms simples del lenguaje Mecanismos de combinacin con los que se construyen elementos compuestos

a partir de elementos ms simples


Mecanismos de abstraccin con los que dar nombre a los elementos

compuestos y manipularlos como unidades

Sintaxis y semntica
Sintaxis: un conjunto de reglas que definen qu expresiones de texto son

correctas. Por ejemplo, en C todas las sentencias deben terminar en ';'


Los lenguajes de programacin se ejecutan en un computador y tienen una

determinada semntica que define cul ser el resultado de la ejecucin de un programa.

Los lenguajes son para las personas


Los lenguajes de programacin deben ser precisos, deben poder traducirse sin ambiguedad en lenguaje mquina para que sean ejecutados por computadores. Pero deben ser utilizados (ledos, comentados, probados, etc.) por personas. La programacin es una actividad colaborativa y debe basarse en la comunicacin.

Abstraccin
Modelar como una actividad fundamental
Para escribir un programa que preste unos servicios es fundamental modelar el

dominio sobre el que va a trabajar


Necesario definir distintas abstracciones que nos permitan tratar sus elementos y

comunicarnos correctamente con los usuarios que van a utilizar el programa.

Abstracciones computacionales
Existen abstracciones propias de la computacin, que se utilizan en mltiples dominios. Por ejemplo, abstracciones de datos como:
Listas rboles Grafos

Tablas hash

Tambin existen abstracciones que nos permiten tratar con dispositivos y ordenadores externos:
Fichero Raster grfico Protocolo TCP/IP

Construccin de abstracciones
Uno de los trabajos principales de un informtico es la construccin de abstracciones que permitan ahorrar tiempo y esfuerzo a la hora de tratar con la complejidad del mundo real. Cita de Joel Spolsky en su blog Joel on Software TCP is what computer scientists like to call an abstraction: a simplification of something much more complicated that is going on under the covers. As it turns out, a lot of computer programming consists of building abstractions. What is a string library? It's a way to pretend that computers can manipulate strings just as easily as they can manipulate numbers. What is a file system? It's a way to pretend that a hard drive isn't really a bunch of spinning magnetic platters that can store bits at certain locations, but rather a hierarchical system of folders-within-folders containing individual files that in turn consist of one or more strings of bytes.

Lenguajes de abstracciones

programacin

con

constructores

de

Una misin fundamental de los lenguajes de programacin es proporcionar herramientas que sirvan para construir estas abstracciones.

Paradigmas de programacin
Qu es un paradigma de programacin?
Un paradigma define un conjunto de reglas, patrones y estilos de programacin

que son usados por un grupo de lenguajes de programacin


La separacin entre los paradigmas y los lenguajes no es estricta

Paradigmas ms importantes
Paradigma funcional Paradigma lgico Paradigma imperativo o procedural Paradigma orientado a objetos

Paradigma funcional
Resumen de las caractersticas principales:
La computacin se realiza mediante la evaluacin de expresiones Definicin de funciones Funciones como datos primitivos Valores sin efectos laterales, no existe la asignacin Programacin declarativa

Lenguajes: LISP, Scheme, Haskell, Scala, Clojure. Ejemplo de cdigo (LISP):

(define (factorial x) (if (= x 0) 1 (* x (factorial (- x 1))))) (factorial 8) 40320 (factorial 30) 265252859812191058636308480000000

Paradigma lgico
Caractersticas:
Definicin de reglas Unificacin como elemento de computacin Programacin declarativa

Lenguajes: Prolog, Mercury, Oz. Ejemplo de cdigo (Prolog):

padrede('juan', 'maria'). % juan es padre de maria padrede('pablo', 'juan'). % pablo es padre de juan padrede('pablo', 'marcela'). padrede('carlos', 'debora'). hijode(A,B) :- padrede(B,A). abuelode(A,B) :- padrede(A,C), padrede(C,B). hermanode(A,B) :- padrede(C,A) , padrede(C,B), A \== B. familiarde(A,B) :- padrede(A,B).

familiarde(A,B) :- hijode(A,B). familiarde(A,B) :- hermanode(A,B). ?- hermanode('juan', 'marcela'). yes ?- hermanode('carlos', 'juan'). no ?- abuelode('pablo', 'maria'). yes ?- abuelode('maria', 'pablo'). no

Paradigma imperativo
Los lenguajes de programacin que complen el paradigma imperativo se caracterizan por tener un estado implcito que es modificado mediante instrucciones o comandos del lenguaje. Como resultado, estos lenguajes tienen una nocin de secuenciacin de los comandos para permitir un control preciso y determinista del estado. Caractersticas:
Definicin de procedimientos Definicin de tipos de datos Chequeo de tipos en tiempo de compilacin Cambio de estado de variables Pasos de ejecucin de un proceso type tDimension = 1..100; eMatriz(f,c: tDimension) = array [1..f,1..c] of real; tRango = record f,c: tDimension value 1; end; tpMatriz = ^eMatriz;

procedure EscribirMatriz(var m: tpMatriz); var filas,col : integer; begin for filas := 1 to m^.f do begin for col := 1 to m^.c do write(m^[filas,col]:7:2); writeln(resultado); writeln(resultado) end;

end;

Paradigma orientado a objetos


Caractersticas:
Definicin de clases y herencia Objetos como abstraccin de datos y procedimientos Polimorfismo y chequeo de tipos en tiempo de ejecucin

Ejemplo (Java):

public class Bicicleta { public int marcha; public int velocidad; public Bicicleta(int velocidadInicial, int marchaInicial) { marcha = marchaInicial; velocidad = velocidadInicial; } public void setMarcha(int nuevoValor) { marcha = nuevoValor; } public void frenar(int decremento) { velocidad -= decremento; } public void acelerar(int incremento) { velocidad += incremento; } } public class MountainBike extends Bicicleta { public int alturaSillin; public MountainBike(int alturaInicial, int velocidadInicial, int marchaInicial) { super(velocidadInicial, marchaInicial); alturaSillin = alturaInicial; } public void setAltura(int nuevoValor) { alturaSillin = nuevoValor; } } public class Excursion { public static void main(String[] args) {

MountainBike miBicicleta = new MoutainBike(10,10,3); miBicicleta.acelerar(10); miBicicleta.setMarcha(4); miBicicleta.frenar(10); } }

Compiladores e intrpretes
Existe una gran variedad de estrategias para conseguir que un programa se ejecute en un computador. Todas se basan en los "meta-programas" (compiladores, intrpretes, etc.) cuyos datos de entrada son el cdigo fuente de otros programas. Estos meta-programas procesan otros programas y realizan mltiples tareas.

Compilacin
La siguiente figura muestra el proceso de generacin y ejecucin de un programa compilado.

Ejemplos: C, C++
Diferentes momentos en la vida de un programa: tiempo de compilacin y tiempo

de ejecucin
Mayor eficiencia

Interpretacin

Ejemplos: BASIC, LISP, Scheme, Python, Ruby


No hay diferencia entre el tiempo de compilacin y el tiempo de ejecucin

Mayor flexibilidad: el cdigo se puede construir y ejecutar "on the fly" (funciones

lambda o clousures).

Ejecucin en mquina virtual

Ejemplos: Java, Scala

Enlazado de rutinas y libreras

Preprocesamiento

El preprocesador analiza el cdigo y sustituye macros. Ejemplo: C, C++. Scala hace algo parecido con Java.

Das könnte Ihnen auch gefallen