SlideShare una empresa de Scribd logo
1 de 30
Lenguajes y Paradigmas
   de Programación
Clase 2: Lenguajes de Programación
Índice

 Historia de los lenguajes de programación
 Características de los lenguajes de
 programación
 Paradigmas de programación
Lenguajes más importantes
1957 FORTRAN   1972 C              1987 Perl
1958 ALGOL     1975 Pascal         1988 Tcl/Tk
1960 Lisp      1975 Scheme         1990 Haskell
1960 COBOL     1975 Modula         1991 Python
1962 APL       1983 Smalltalk-80   1993 Ruby
1962 SIMULA    1983 Objective-C    1995 Java
1964 BASIC     1983 Ada            1995 PHP
1964 PL/I      1986 C++            2000 C#
1970 Prolog    1986 Eiffel



                             enlace
Lista completa




  Diagrama completo
  Póster de O'Reilly
Influencias en la evolución de los LP

 Recursos del ordenador
 Aplicaciones
 Métodos de programación
 Estudios teóricos
 Estandarización
Lenguajes y sus influencias a finales
del siglo XX
¿Por qué estudiar lenguajes de
programación?
 Mejora el uso de los lenguajes de programación
 Incrementa el vocabulario de los elementos de
 programación
 Permite una mejor elección del lenguaje de programación
 Mejora la habilidad para desarrollar programas efectivos y
 eficientes
 Facilita el aprendizaje de un nuevo lenguaje de
 programación
 Facilita el diseño de nuevos lenguajes de programación
Proyectos activos en la actualidad

           freshmeat.net
Historia en expansión

 Timeline of Programming Languages

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

                 Lenguaje de Programación Ruby
                    1993
                    Yukihiro Matsumoto
                    Más potente que Perl
                    Más OO que Phyton
                    P. Funcional e Imperativa
                    balanceada
                    Expansión: grupos de noticias
¿Podemos conocer TODOS los
 lenguajes de programación?
XML no es un lenguaje de
programación
  XML es un lenguaje de representación de datos
  No 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>
¿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
¿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"
¿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."
Características de un lenguaje de
programación
 Define un proceso que se ejecuta en un
 computador
 Es 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
Elementos de los LP

 Expresiones primitivas, que representan las entidades
 más simples del lenguaje
 Mecanismos de combinación con los que se construyen
 elementos compuestos a partir de elementos más simples
 Mecanismos de abstracción con los que dar nombre a los
 elementos compuestos y manipularlos como unidades
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
     remoto
     Servicios del sistema operativo: dispositivos, memoria,
     ficheros
 Los informáticos crean nuevas abstracciones:
     Nuevas APIs para los programas
     Modelos de datos que simulan la realidad (aplicaciones
     de gestión, inventario, matriculación, etc.)
     Nuevos interfaces de usuario (iPhone, web, etc.)
Abstracción
   Segú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.
Paradigmas de programación

 Los más importantes
     Paradigma funcional
     Paradigma lógico
     Paradigma imperativo o procedural
     Paradigma orientado a objetos
 Buen artículo en la Wikipedia:
 http://en.wikipedia.org/wiki/Programming_paradigm
Paradigma funcional

 Definición de funciones
 Funciones como datos primitivos
 Valores sin efectos laterales, no existe la mutación
 Programación declarativa
 Lenguajes: LISP, Scheme, Haskell, Scala, Clojure
Ejemplo: Scheme

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

   >(factorial (+ 2 1 5))
   40320
   >(factorial 30)
   265252859812191058636308480000000
Paradigma lógico
 Definición de reglas
 Unificación como elemento de computación
 Programación declarativa
 Lenguajes: Prolog, Mercury, Oz
Ejemplo: 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 procedural
 Definición de procedimientos
 Definición de tipos de datos
 Chequeo de tipos en tiempo de compilación
 Cambio de estado de variables
 Pasos de ejecución de un proceso
 Lenguajes: Fortran, Algol, C, Pascal
Ejemplo: Pascal
 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

 Definición de clases y herencia
 Objetos como abstracción de datos y procedimientos
 Polimorfismo y chequeo de tipos en tiempo de ejecución
 Lenguajes: Modula, Smalltalk, Java, C#
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;
    }
}
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);
    }
}
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!
¿Preguntas?

Más contenido relacionado

La actualidad más candente

Libro 1 - LENGUAJES DE PROGRAMACIÓN
Libro 1 - LENGUAJES DE PROGRAMACIÓNLibro 1 - LENGUAJES DE PROGRAMACIÓN
Libro 1 - LENGUAJES DE PROGRAMACIÓN
Gabriel Alija
 

La actualidad más candente (16)

Historia Y EvolucióN De Los Lenguajes De ProgramacióN
Historia Y EvolucióN De Los Lenguajes De ProgramacióNHistoria Y EvolucióN De Los Lenguajes De ProgramacióN
Historia Y EvolucióN De Los Lenguajes De ProgramacióN
 
Lenguaje de programacion
Lenguaje de programacionLenguaje de programacion
Lenguaje de programacion
 
Lenguajes de Programacion
Lenguajes de ProgramacionLenguajes de Programacion
Lenguajes de Programacion
 
Lenguajes de programación
Lenguajes de programaciónLenguajes de programación
Lenguajes de programación
 
METODOS DE ELEMENTOS DE PROGRAMACIÒN
METODOS DE ELEMENTOS DE PROGRAMACIÒNMETODOS DE ELEMENTOS DE PROGRAMACIÒN
METODOS DE ELEMENTOS DE PROGRAMACIÒN
 
Programacion
ProgramacionProgramacion
Programacion
 
Lenguajes de programacion
Lenguajes de programacionLenguajes de programacion
Lenguajes de programacion
 
Tipos de lenguaje de programacion
Tipos de lenguaje de programacionTipos de lenguaje de programacion
Tipos de lenguaje de programacion
 
Lenguajes de programación
Lenguajes de programaciónLenguajes de programación
Lenguajes de programación
 
Libro 1 - LENGUAJES DE PROGRAMACIÓN
Libro 1 - LENGUAJES DE PROGRAMACIÓNLibro 1 - LENGUAJES DE PROGRAMACIÓN
Libro 1 - LENGUAJES DE PROGRAMACIÓN
 
Mario martinez alvarez
Mario martinez alvarezMario martinez alvarez
Mario martinez alvarez
 
TIPOS DE LENGUAJES DE PROGRAMACION
TIPOS DE LENGUAJES DE PROGRAMACIONTIPOS DE LENGUAJES DE PROGRAMACION
TIPOS DE LENGUAJES DE PROGRAMACION
 
Lenguajes de programacion
Lenguajes de programacionLenguajes de programacion
Lenguajes de programacion
 
Programacion
ProgramacionProgramacion
Programacion
 
lenguaje de Programacion
lenguaje de Programacionlenguaje de Programacion
lenguaje de Programacion
 
Algoritmos y programas
Algoritmos y programasAlgoritmos y programas
Algoritmos y programas
 

Similar a Clase02 paradigmas

Programacion
ProgramacionProgramacion
Programacion
leonadan
 
Introducción a la programación
Introducción a la programaciónIntroducción a la programación
Introducción a la programación
Cati Oliver
 

Similar a Clase02 paradigmas (20)

Lenguajes
LenguajesLenguajes
Lenguajes
 
Programacion
ProgramacionProgramacion
Programacion
 
Programacion
ProgramacionProgramacion
Programacion
 
Lenguajes de-programacion-clase
Lenguajes de-programacion-claseLenguajes de-programacion-clase
Lenguajes de-programacion-clase
 
Lógica De La Programación Y Lenguaje de Pascal
Lógica De La Programación Y Lenguaje de PascalLógica De La Programación Y Lenguaje de Pascal
Lógica De La Programación Y Lenguaje de Pascal
 
Evolucion historica del lenguaje de programacion
Evolucion historica del lenguaje de programacionEvolucion historica del lenguaje de programacion
Evolucion historica del lenguaje de programacion
 
Algoritmos+sam+deyson
Algoritmos+sam+deysonAlgoritmos+sam+deyson
Algoritmos+sam+deyson
 
Conceptos basicos de lenguajes de programacion
Conceptos basicos de lenguajes de programacionConceptos basicos de lenguajes de programacion
Conceptos basicos de lenguajes de programacion
 
Javascript
JavascriptJavascript
Javascript
 
Javascript
JavascriptJavascript
Javascript
 
Javascript
JavascriptJavascript
Javascript
 
Javascript desde cero
Javascript desde ceroJavascript desde cero
Javascript desde cero
 
Javascript
JavascriptJavascript
Javascript
 
Javascript completo
Javascript completoJavascript completo
Javascript completo
 
C:\Documents And Settings\Alumnos\Escritorio\Programaion1
C:\Documents And Settings\Alumnos\Escritorio\Programaion1C:\Documents And Settings\Alumnos\Escritorio\Programaion1
C:\Documents And Settings\Alumnos\Escritorio\Programaion1
 
Generacionlenguajes
GeneracionlenguajesGeneracionlenguajes
Generacionlenguajes
 
Introducción a la programación
Introducción a la programaciónIntroducción a la programación
Introducción a la programación
 
POO
POOPOO
POO
 
Lenguaje de programacion
Lenguaje de programacionLenguaje de programacion
Lenguaje de programacion
 
Tarea3
Tarea3 Tarea3
Tarea3
 

Más de Manuel Hormechea (20)

Guia n5 tam 2009 1
Guia n5 tam 2009 1Guia n5 tam 2009 1
Guia n5 tam 2009 1
 
Guia n4 tam 2009 1
Guia n4 tam 2009 1Guia n4 tam 2009 1
Guia n4 tam 2009 1
 
Guia n4 tam 2009 1
Guia n4 tam 2009 1Guia n4 tam 2009 1
Guia n4 tam 2009 1
 
Guia n2 tam 2009 1
Guia n2 tam 2009 1Guia n2 tam 2009 1
Guia n2 tam 2009 1
 
Práctica funciones
Práctica funcionesPráctica funciones
Práctica funciones
 
Guia n1 tam 2009 1
Guia n1 tam 2009 1Guia n1 tam 2009 1
Guia n1 tam 2009 1
 
Presentacion java 1
Presentacion java 1Presentacion java 1
Presentacion java 1
 
Presentación clase 5 sept
Presentación clase 5 septPresentación clase 5 sept
Presentación clase 5 sept
 
P6 net2005
P6 net2005P6 net2005
P6 net2005
 
Presentación clase 29 agosto
Presentación clase 29 agostoPresentación clase 29 agosto
Presentación clase 29 agosto
 
18 p tablas
18 p tablas18 p tablas
18 p tablas
 
Ejercicio tablas ii
Ejercicio tablas iiEjercicio tablas ii
Ejercicio tablas ii
 
Tutorial uml
Tutorial umlTutorial uml
Tutorial uml
 
Guia no4 ado.net
Guia no4 ado.netGuia no4 ado.net
Guia no4 ado.net
 
Explotación laboral en colombia
Explotación laboral en colombiaExplotación laboral en colombia
Explotación laboral en colombia
 
Proyectoixfestivalnacionaldelajuventud.docx prueba
Proyectoixfestivalnacionaldelajuventud.docx pruebaProyectoixfestivalnacionaldelajuventud.docx prueba
Proyectoixfestivalnacionaldelajuventud.docx prueba
 
Guia no1 algoritmos
Guia no1 algoritmosGuia no1 algoritmos
Guia no1 algoritmos
 
Guia no3 ado.net
Guia no3 ado.netGuia no3 ado.net
Guia no3 ado.net
 
Guia no3 ado.net
Guia no3 ado.netGuia no3 ado.net
Guia no3 ado.net
 
Guia no2 ado.net
Guia no2 ado.netGuia no2 ado.net
Guia no2 ado.net
 

Clase02 paradigmas

  • 1. Lenguajes y Paradigmas de Programación Clase 2: Lenguajes de Programación
  • 2. Índice Historia de los lenguajes de programación Características de los lenguajes de programación Paradigmas de programación
  • 3. Lenguajes más importantes 1957 FORTRAN 1972 C 1987 Perl 1958 ALGOL 1975 Pascal 1988 Tcl/Tk 1960 Lisp 1975 Scheme 1990 Haskell 1960 COBOL 1975 Modula 1991 Python 1962 APL 1983 Smalltalk-80 1993 Ruby 1962 SIMULA 1983 Objective-C 1995 Java 1964 BASIC 1983 Ada 1995 PHP 1964 PL/I 1986 C++ 2000 C# 1970 Prolog 1986 Eiffel enlace
  • 4. Lista completa Diagrama completo Póster de O'Reilly
  • 5. Influencias en la evolución de los LP Recursos del ordenador Aplicaciones Métodos de programación Estudios teóricos Estandarización
  • 6. Lenguajes y sus influencias a finales del siglo XX
  • 7. ¿Por qué estudiar lenguajes de programación? Mejora el uso de los lenguajes de programación Incrementa el vocabulario de los elementos de programación Permite una mejor elección del lenguaje de programación Mejora la habilidad para desarrollar programas efectivos y eficientes Facilita el aprendizaje de un nuevo lenguaje de programación Facilita el diseño de nuevos lenguajes de programación
  • 8. Proyectos activos en la actualidad freshmeat.net
  • 9. Historia en expansión Timeline of Programming Languages ¿Quién diseña un lenguaje de programación? Lenguaje de Programación Ruby 1993 Yukihiro Matsumoto Más potente que Perl Más OO que Phyton P. Funcional e Imperativa balanceada Expansión: grupos de noticias
  • 10. ¿Podemos conocer TODOS los lenguajes de programación?
  • 11. XML no es un lenguaje de programación XML es un lenguaje de representación de datos No 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>
  • 12. ¿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
  • 13. ¿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"
  • 14. ¿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."
  • 15. Características de un lenguaje de programación Define un proceso que se ejecuta en un computador Es 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
  • 16. Elementos de los LP Expresiones primitivas, que representan las entidades más simples del lenguaje Mecanismos de combinación con los que se construyen elementos compuestos a partir de elementos más simples Mecanismos de abstracción con los que dar nombre a los elementos compuestos y manipularlos como unidades
  • 17. 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 remoto Servicios del sistema operativo: dispositivos, memoria, ficheros Los informáticos crean nuevas abstracciones: Nuevas APIs para los programas Modelos de datos que simulan la realidad (aplicaciones de gestión, inventario, matriculación, etc.) Nuevos interfaces de usuario (iPhone, web, etc.)
  • 18. Abstracción Segú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.
  • 19. Paradigmas de programación Los más importantes Paradigma funcional Paradigma lógico Paradigma imperativo o procedural Paradigma orientado a objetos Buen artículo en la Wikipedia: http://en.wikipedia.org/wiki/Programming_paradigm
  • 20. Paradigma funcional Definición de funciones Funciones como datos primitivos Valores sin efectos laterales, no existe la mutación Programación declarativa Lenguajes: LISP, Scheme, Haskell, Scala, Clojure
  • 21. Ejemplo: Scheme (define (factorial x) (if (= x 0) 1 (* x (factorial (- x 1))))) >(factorial (+ 2 1 5)) 40320 >(factorial 30) 265252859812191058636308480000000
  • 22. Paradigma lógico Definición de reglas Unificación como elemento de computación Programación declarativa Lenguajes: Prolog, Mercury, Oz
  • 23. Ejemplo: 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
  • 24. Paradigma procedural Definición de procedimientos Definición de tipos de datos Chequeo de tipos en tiempo de compilación Cambio de estado de variables Pasos de ejecución de un proceso Lenguajes: Fortran, Algol, C, Pascal
  • 25. Ejemplo: Pascal 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;
  • 26. Paradigma Orientado a Objetos Definición de clases y herencia Objetos como abstracción de datos y procedimientos Polimorfismo y chequeo de tipos en tiempo de ejecución Lenguajes: Modula, Smalltalk, Java, C#
  • 27. 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; } }
  • 28. 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); } }
  • 29. 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!