30
Lenguajes y Paradigmas de Programación Clase 2: Lenguajes de Programación

Lenguajes y Paradigmas de Programación¿Qué es un lenguaje de programación? Definición de Abelson y Sussman: "A powerful programming language is more than just a means for instructing

Embed Size (px)

Citation preview

Page 1: Lenguajes y Paradigmas de Programación¿Qué es un lenguaje de programación? Definición de Abelson y Sussman: "A powerful programming language is more than just a means for instructing

Lenguajes y Paradigmasde Programación

Clase 2: Lenguajes de Programación

Page 2: Lenguajes y Paradigmas de Programación¿Qué es un lenguaje de programación? Definición de Abelson y Sussman: "A powerful programming language is more than just a means for instructing

Índice

Historia de los lenguajes de programaciónCaracterísticas de los lenguajes de programaciónParadigmas de programación

Page 3: Lenguajes y Paradigmas de Programación¿Qué es un lenguaje de programación? Definición de Abelson y Sussman: "A powerful programming language is more than just a means for instructing

Lenguajes más importantes

enlace

1957 FORTRAN1958 ALGOL1960 Lisp1960 COBOL1962 APL1962 SIMULA1964 BASIC1964 PL/I1970 Prolog

1972 C1975 Pascal1975 Scheme1975 Modula1983 Smalltalk-801983 Objective-C1983 Ada1986 C++1986 Eiffel

1987 Perl1988 Tcl/Tk1990 Haskell1991 Python1993 Ruby1995 Java1995 PHP2000 C#

Page 5: Lenguajes y Paradigmas de Programación¿Qué es un lenguaje de programación? Definición de Abelson y Sussman: "A powerful programming language is more than just a means for instructing

Influencias en la evolución de los LP

Recursos del ordenadorAplicacionesMétodos de programaciónEstudios teóricosEstandarización

Page 6: Lenguajes y Paradigmas de Programación¿Qué es un lenguaje de programación? Definición de Abelson y Sussman: "A powerful programming language is more than just a means for instructing

Lenguajes y sus influencias a finales del siglo XX

Page 7: Lenguajes y Paradigmas de Programación¿Qué es un lenguaje de programación? Definición de Abelson y Sussman: "A powerful programming language is more than just a means for instructing

¿Por qué estudiar lenguajes de programación?

Mejora el uso de los lenguajes de programaciónIncrementa el vocabulario de los elementos de programaciónPermite una mejor elección del lenguaje de programaciónMejora la habilidad para desarrollar programas efectivos y eficientesFacilita el aprendizaje de un nuevo lenguaje de programaciónFacilita el diseño de nuevos lenguajes de programación

Page 8: Lenguajes y Paradigmas de Programación¿Qué es un lenguaje de programación? Definición de Abelson y Sussman: "A powerful programming language is more than just a means for instructing

Proyectos activos en la actualidad

freshmeat.net

Page 9: Lenguajes y Paradigmas de Programación¿Qué es un lenguaje de programación? Definición de Abelson y Sussman: "A powerful programming language is more than just a means for instructing

Historia en expansión

Timeline of Programming Languages

¿Quién diseña un lenguaje de programación?

Lenguaje de Programación Ruby1993Yukihiro Matsumoto Más potente que PerlMás OO que PhytonP. Funcional e Imperativa balanceadaExpansión: grupos de noticias

Page 10: Lenguajes y Paradigmas de Programación¿Qué es un lenguaje de programación? Definición de Abelson y Sussman: "A powerful programming language is more than just a means for instructing

¿Podemos conocer TODOS los lenguajes de programación?

Page 11: Lenguajes y Paradigmas de Programación¿Qué es un lenguaje de programación? Definición de Abelson y Sussman: "A powerful programming language is more than just a means for instructing

XML no es un lenguaje de programación

XML es un lenguaje de representación de datosNo tiene semántica asociada

<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE people_list SYSTEM "example.dtd"><people_list> <person> <name>Fred Bloggs</name> <birthdate>27/11/2008</birthdate> <gender>Male</gender> </person><person></people_list>

Page 12: Lenguajes y Paradigmas de Programación¿Qué es un lenguaje de programación? Definición de Abelson y Sussman: "A powerful programming language is more than just a means for instructing

¿Los lenguajes visuales son lenguajes de programación?

Son lenguajes muy interesantes pero no todos son lenguajes de programación. Por ejemplo, un lenguaje para definir animaciones multimedia no es un LP.

Scratch : un lenguaje visual para niños

Page 13: Lenguajes y Paradigmas de Programación¿Qué es un lenguaje de programación? Definición de Abelson y Sussman: "A powerful programming language is more than just a means for instructing

¿Qué es un lenguaje de programación?Definición 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"

Page 14: Lenguajes y Paradigmas de Programación¿Qué es un lenguaje de programación? Definición de Abelson y Sussman: "A powerful programming language is more than just a means for instructing

¿Qué es un lenguaje de programación?

Definición de Abelson y Sussman: "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."

Page 15: Lenguajes y Paradigmas de Programación¿Qué es un lenguaje de programación? Definición de Abelson y Sussman: "A powerful programming language is more than just a means for instructing

Características de un lenguaje de programación

Define un proceso que se ejecuta en un computadorEs de alto nivel, cercano a los problemas que se quieren resolver (abstracción)Permite construir nuevas abstracciones que se adapten al dominio que se programa

Page 16: Lenguajes y Paradigmas de Programación¿Qué es un lenguaje de programación? Definición de Abelson y Sussman: "A powerful programming language is more than just a means for instructing

Elementos de los LP

Expresiones primitivas, que representan las entidades más simples del lenguajeMecanismos de combinación con los que se construyen elementos compuestos a partir de elementos más simplesMecanismos de abstracción con los que dar nombre a los elementos compuestos y manipularlos como unidades

Page 17: Lenguajes y Paradigmas de Programación¿Qué es un lenguaje de programación? Definición de Abelson y Sussman: "A powerful programming language is more than just a means for instructing

Abstracción

La abstracción es la herramienta/habilidad fundamental de los informáticos.Los informáticos usan abstracciones:

Arrays, grafos, estructuras de datos, ...Protocolos: TCP/IP, HTTP, llamadas a procedimiento remotoServicios del sistema operativo: dispositivos, memoria, ficheros

Los informáticos crean nuevas abstracciones:Nuevas APIs para los programasModelos de datos que simulan la realidad (aplicaciones de gestión, inventario, matriculación, etc.)Nuevos interfaces de usuario (iPhone, web, etc.)

Page 18: Lenguajes y Paradigmas de Programación¿Qué es un lenguaje de programación? Definición de Abelson y Sussman: "A powerful programming language is more than just a means for instructing

AbstracciónSegún la Wikipedia:

"Abstraction is the process or result of generalization by reducing the information content of a concept or an observable phenomenon, typically in order to retain only information which is relevant for a particular purpose. For example, abstracting a leather soccer ball to a ball retains only the information on general ball attributes and behaviour. Computer scientists use abstraction to understand and solve problems and communicate their solutions with the computer in some particular computer language."

Los lenguajes de programación proporcionan herramientas para construir abstracciones.

Page 19: Lenguajes y Paradigmas de Programación¿Qué es un lenguaje de programación? Definición de Abelson y Sussman: "A powerful programming language is more than just a means for instructing

Paradigmas de programación

Los más importantes Paradigma funcionalParadigma lógicoParadigma imperativo o proceduralParadigma orientado a objetos

Buen artículo en la Wikipedia:http://en.wikipedia.org/wiki/Programming_paradigm

Page 20: Lenguajes y Paradigmas de Programación¿Qué es un lenguaje de programación? Definición de Abelson y Sussman: "A powerful programming language is more than just a means for instructing

Paradigma funcional

Definición de funcionesFunciones como datos primitivosValores sin efectos laterales, no existe la mutaciónProgramación declarativaLenguajes: LISP, Scheme, Haskell, Scala, Clojure

Page 21: Lenguajes y Paradigmas de Programación¿Qué es un lenguaje de programación? Definición de Abelson y Sussman: "A powerful programming language is more than just a means for instructing

Ejemplo: Scheme

(define (factorial x) (if (= x 0) 1 (* x (factorial (- x 1)))))

>(factorial (+ 2 1 5))40320>(factorial 30)265252859812191058636308480000000

Page 22: Lenguajes y Paradigmas de Programación¿Qué es un lenguaje de programación? Definición de Abelson y Sussman: "A powerful programming language is more than just a means for instructing

Paradigma lógicoDefinición de reglasUnificación como elemento de computaciónProgramación declarativaLenguajes: Prolog, Mercury, Oz

Page 23: Lenguajes y Paradigmas de Programación¿Qué es un lenguaje de programación? Definición de Abelson y Sussman: "A powerful programming language is more than just a means for instructing

Ejemplo: Prologpadrede('juan', 'maria'). % juan es padre de mariapadrede('pablo', 'juan'). % pablo es padre de juanpadrede('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

Page 24: Lenguajes y Paradigmas de Programación¿Qué es un lenguaje de programación? Definición de Abelson y Sussman: "A powerful programming language is more than just a means for instructing

Paradigma proceduralDefinición de procedimientosDefinición de tipos de datosChequeo de tipos en tiempo de compilaciónCambio de estado de variablesPasos de ejecución de un procesoLenguajes: Fortran, Algol, C, Pascal

Page 25: Lenguajes y Paradigmas de Programación¿Qué es un lenguaje de programación? Definición de Abelson y Sussman: "A powerful programming language is more than just a means for instructing

Ejemplo: Pascaltype tDimension = 1..100;eMatriz(f,c: tDimension) = array [1..f,1..c] of real;

tRango = recordf,c: tDimension value 1;end;

tpMatriz = ^eMatriz;

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

Page 26: Lenguajes y Paradigmas de Programación¿Qué es un lenguaje de programación? Definición de Abelson y Sussman: "A powerful programming language is more than just a means for instructing

Paradigma Orientado a Objetos

Definición de clases y herenciaObjetos como abstracción de datos y procedimientosPolimorfismo y chequeo de tipos en tiempo de ejecución Lenguajes: Modula, Smalltalk, Java, C#

Page 27: Lenguajes y Paradigmas de Programación¿Qué es un lenguaje de programación? Definición de Abelson y Sussman: "A powerful programming language is more than just a means for instructing

Ejemplo: Java (1)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; }}

Page 28: Lenguajes y Paradigmas de Programación¿Qué es un lenguaje de programación? Definición de Abelson y Sussman: "A powerful programming language is more than just a means for instructing

Ejemplo: Java (2)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); }}

Page 29: Lenguajes y Paradigmas de Programación¿Qué es un lenguaje de programación? Definición de Abelson y Sussman: "A powerful programming language is more than just a means for instructing

Resumiendo

Siempre se ha dicho que aprender idiomas sirve para abrir la mente y madurar como persona...

¡Lo mismo pasa con los lenguajes de programación!

Page 30: Lenguajes y Paradigmas de Programación¿Qué es un lenguaje de programación? Definición de Abelson y Sussman: "A powerful programming language is more than just a means for instructing

¿Preguntas?