Tema 1: Introducció als llenguatges de programació i als seus paradigmes

46
Tema 1: Introducció als llenguatges de programació i als seus paradigmes

description

Tema 1: Introducció als llenguatges de programació i als seus paradigmes. Seccions. Llenguatge de Programació Història i Evolució Paradigmes i models de còmput subjacents. Llenguatge de Programació. Llenguatge de Programació. - PowerPoint PPT Presentation

Transcript of Tema 1: Introducció als llenguatges de programació i als seus paradigmes

Page 1: Tema 1: Introducció als llenguatges  de  programació  i  als seus paradigmes

Tema 1:Introducció als llenguatges de programació i als seus paradigmes

Page 2: Tema 1: Introducció als llenguatges  de  programació  i  als seus paradigmes

Seccions

• Llenguatge de Programació• Història i Evolució• Paradigmes i models de còmput subjacents

Page 3: Tema 1: Introducció als llenguatges  de  programació  i  als seus paradigmes

LLENGUATGE DE PROGRAMACIÓ

Page 4: Tema 1: Introducció als llenguatges  de  programació  i  als seus paradigmes

Llenguatge de Programació

• Un llenguatge de programació és una notació per a escriure programes. (Sethi, 89)

• Un programa és una especificació d’un còmput.

• Per còmput entenem allò que pot fer una màquina de Turing.

Page 5: Tema 1: Introducció als llenguatges  de  programació  i  als seus paradigmes

Tesis de Church-Turing

• Church’s Thesis: “Every effectively calculable function (effectively decidable predicate) is general recursive”.

• Turing’s Thesis: “Every function which would be naturally regarded as computable is computable by a Turing machine”.

Page 6: Tema 1: Introducció als llenguatges  de  programació  i  als seus paradigmes

slide 6

Formalismes de còmput• Lògica de Predicats

• Gottlöb Frege (1848-1925)• Base formal de la teoria de la

demostració i la demostració automàtica de teoremes

• Programació lògica– Un còmput és una deducció lògica

• Màquines de Turing• Alan Turing (1912-1954)• Programació imperativa

– Un còmput és l’evolució seqüencial d’estats mitjançant assignacions

Page 7: Tema 1: Introducció als llenguatges  de  programació  i  als seus paradigmes

slide 7

Formalismes de còmput• Lambda calculus

• Alonzo Church (1903-1995)• Base formal per als llenguatges

funcionals, la semàntica, la teoria de tipus, etc.

• Programació Funcional– Un còmput és la reescriptura d’una

expressió fins a una forma normal. No hi ha assignacions.

• Funcions recursives & automates• Stephen Kleene (1909-1994)• Expressions regulars, màquines

d’estats finits, PDAs

Page 8: Tema 1: Introducció als llenguatges  de  programació  i  als seus paradigmes

Sobre la Tesis de Church-Turing

• Turing-completesa: tenir la mateixa capacitat de còmput que les màquines de Turing.Per exemple: Lambda-càlcul, funcions recursives, lògica de predicats,…

• No serien Turing-complets: autòmates finits (DFAs), gramàtiques incontextuals, etc.

• No es coneix cap sistema Turing-complet que no sigui Turing-equivalent => reforça Tesis C-T

Page 9: Tema 1: Introducció als llenguatges  de  programació  i  als seus paradigmes

Llenguatge de Programació

• Notació formal per a especificar còmputs:– Lèxic (paraules permeses…)– Sintaxis (regles de formació de programes…)– Semàntica (significat i efecte de les diferents

construccions…)– Implementacions concretes…

• Normalment s’espera que el sistema notacional sigui intel·ligible per l’humà i fàcilment traduïble per a que la màquina l’“entengui”.

Page 10: Tema 1: Introducció als llenguatges  de  programació  i  als seus paradigmes

Perquè estudiar LP i Paradigmes?

• L’estructura d’un llenguatge de programació acota el procés intel·lectual del programador al programar.

• Aprendrem conceptes bàsics i de vegades ignorats les llenguatges: pas per valor, pas per paràmetre, tipus estàtics, funcions d’ordre superior, etc.

• Farà més fàcil aprendre nous llenguatges• Farà més fàcil dissenyar nous llenguatges

Page 11: Tema 1: Introducció als llenguatges  de  programació  i  als seus paradigmes

HISTÒRIA I EVOLUCIÓ

Page 12: Tema 1: Introducció als llenguatges  de  programació  i  als seus paradigmes

Primeres màquines amb “llenguatge”

• Teler de Jaquard, 1801.

• Permetia fer diferente tipus de teles en funció de les targetes perforades que contenien els patrons desitjats.

Page 13: Tema 1: Introducció als llenguatges  de  programació  i  als seus paradigmes

Primeres màquines amb “llenguatge”

• Màquina analítica de Charles Babbage per a càlcul (1816+-)

• Motor a vapor, programes amb targetes perforades, …

• No es va arribar a fabricar.• Ada Lovelance, primera

programadora.

Page 14: Tema 1: Introducció als llenguatges  de  programació  i  als seus paradigmes

Primers “ordinadors”

• ENIAC: Electronic Numerical Integrator And Computer. (1946 … 1955)– Primer ordinador electronic de propòsit general.– Dim: 2,4m x 0,9m x 30m, 167m^2, 27 Tonelades,

17468 vàlvules, 150kW, …– Programar era complicat… per “passar al programa

dins d’ENIAC”, s’havia de tocar interruptors i cables…– Encara no havia implementat la idea de tenir memoria

per al programa i memòria per a les dades

Page 15: Tema 1: Introducció als llenguatges  de  programació  i  als seus paradigmes

• Altres ordinadors cohetanis durant WWII:• Z3 (1941): targetes perforades• Colossus (1943): criptoanàlisis• …

ENIAC:

Page 16: Tema 1: Introducció als llenguatges  de  programació  i  als seus paradigmes

Codis Màquina

• 40’s• Els codis eren numèrics.

– Poc llegibles– Poc modificables– Programar era molt complicat– Problemes inherents al hardware com falta

d’indexació, no existència d’aritmètica real, …• Llenguatge de Programació?

Page 17: Tema 1: Introducció als llenguatges  de  programació  i  als seus paradigmes

Llenguatges ensambladors

• Principis dels 50: per no haver de escriure/perforar directament codis binaris com a operacions del càlcul de les màquines, es va recorrer al mnemotècnics: – Llenguatge ensamblador: push ebp mov ebp, esp sub esp, 4 push edi– Introduia gestio de macros i subrutines.

Page 18: Tema 1: Introducció als llenguatges  de  programació  i  als seus paradigmes

Primer llenguatge algorísmic

• PlanKalkul per Conrad Zuse (dissenyador de Z3), 1948.

• No es va implementar…• Permetia coherència de tipus int/bool,

estructures condicionals, iteracions, assignacions, etc.

• Va dissenyar un programa per jugar a escacs.

Page 19: Tema 1: Introducció als llenguatges  de  programació  i  als seus paradigmes

FORTRAN (Formula Tranlator) • 1954-57 per John Backus.• Orientat al càlcul matemàtic.• Característiques:

– Variables de fins a 6 caràcters • Les que comencen per i, j, k, l, m o n eren enteres• Les altres floats

– Assignacions amb expressions aritm.– do … while– Subrutines i funcions– Formats d’entrada sortida– Independència de la màquina (idea de compilar/interpretar)

Page 20: Tema 1: Introducció als llenguatges  de  programació  i  als seus paradigmes

Exemple de Fortran

Page 21: Tema 1: Introducció als llenguatges  de  programació  i  als seus paradigmes

Èxit de Fortran

• Dubtes d’eficiència degut al Alt nivell, cosa que implicava traduir… però, molt bon traductor.

• Facilitava l’aprenentatge (vs. Assemblador)• IBM• Eficiència al desenvolupar• Moltes seqüeles i avui en dia encar utilitzat en

cert àmbits científics… (Fortran 2003, OO)

Page 22: Tema 1: Introducció als llenguatges  de  programació  i  als seus paradigmes

ALGOL (ALGOrithmic Language)

• 1958• Desenvolupat per comitè per a ser standard

(acadèmic) per descriure càlculs en publicacions.– Inclure notació matemàtica llegigle– Fàcil de traduir a codi màquina

• Descripció gramàtica amb BNF, facilitat compiladors.

Page 23: Tema 1: Introducció als llenguatges  de  programació  i  als seus paradigmes

ALGOL (ALGOrithmic Language) (2)

• Aportacions:– Variables amb nom qualsevol– Estructurat. Blocks i visibilitat– Arrays amb multiples dimensions – Estructures de control riques:

• Seqüències, if-then-else, For-step-until-do, …– Procediments recursius– Modes al pas de parametres (e/s)

Page 24: Tema 1: Introducció als llenguatges  de  programació  i  als seus paradigmes

Exemple d’Algol

Page 25: Tema 1: Introducció als llenguatges  de  programació  i  als seus paradigmes

Èxit Algol?

• Tres anys després de Fortran.• Era més ric i per tant més complicat

d’aprendre.• Els compiladors de Fortran eren més senzills

de fer i més eficients.• …• D’altra banda: influència tota la programació

estructurada: Pascal, C, JAVA, …

Page 26: Tema 1: Introducció als llenguatges  de  programació  i  als seus paradigmes

program P0;var

R1, T1: real;A1: array[0:5,0:20] of real;

 procedure P1(

X: real;

varT: real;Y: array[0:5,0:20] of real;)

 procedure P2;

var R2, T2: real; A2: array[0:5,0:20]

of real;

begin R2 := 5; T2 := 25; P1(R2, T2, A2); /*

calls P1 */end;(* P2 *)

 begin

P2; /* calls P2 */

end; (* P1 *) 

begin

P1(R1, T1, A1); /* calls P1 */end;(* program *)

Program Stack

Working space for Procedure P0, the main program

Memory for variable T1

Pointer to elements of A1

Memory for variable R1

Reference to procedure P1

Working space for Procedure P2

Memory for the variable R2

Memory for the variable T2

Pointer to the elements of A2

Activation record for

P0

Activation record for

P1

Activation record for

P2

Working space for Procedure P1

Memory for variable X

Pointer to variable T1

Indirect pointer to elements of A1

Reference to procedure P2

Page 27: Tema 1: Introducció als llenguatges  de  programació  i  als seus paradigmes

COBOL (Common Business Oriented Language)

• 1957• És bàsicament un llenguatge processador de dades,

orientat a negoci.• Aportacions:

– Dades i programes separats– Llenguatge proper al natural (ops. en anglès)– Fàcil implementació– Noms de dades 30 caràcters– Tipus registre– Autodocumentat – …

Page 28: Tema 1: Introducció als llenguatges  de  programació  i  als seus paradigmes

Exemple de COBOL 000100 ID DIVISION. 000200 PROGRAM-ID. ACCEPT1. 000300 DATA DIVISION. 000400 WORKING-STORAGE SECTION. 000500 01 WS-FIRST-NUMBER PIC 9(3). 000600 01 WS-SECOND-NUMBER PIC 9(3). 000700 01 WS-TOTAL PIC ZZZ9. 000800* 000900 PROCEDURE DIVISION. 001000 0000-MAINLINE. 001100 DISPLAY 'ENTER A NUMBER: '. 001200 ACCEPT WS-FIRST-NUMBER. 001300* 001400 DISPLAY 'ANOTHER NUMBER: '. 001500 ACCEPT WS-SECOND-NUMBER. 001600* 001700 COMPUTE WS-TOTAL = WS-FIRST-NUMBER + WS-SECOND-NUMBER. 001800 DISPLAY 'THE TOTAL IS: ', WS-TOTAL. 001900 STOP RUN.

Page 29: Tema 1: Introducció als llenguatges  de  programació  i  als seus paradigmes

Èxit de COBOL

• Llenguatge simple• Molt arrelat en l’entorn financer, e.g. Bancs i

Caixes.• Entorns molt grans on els canvis són molt

costosos…. (ex. cas de l’any 2000)• Avui en dia… OO

Page 30: Tema 1: Introducció als llenguatges  de  programació  i  als seus paradigmes

LISP (List Processing Language)

• 1959, MIT, McCarthy (T. Aw.)• Basat en lambda-càlcul• Aportacions

– Garbagge collector– Tipatge dinàmic– Identificació de manipulació entre codi i dades– Pare de la programació funcional…

Page 31: Tema 1: Introducció als llenguatges  de  programació  i  als seus paradigmes

Frases sobre LISP

• “LISP being the most powerful and cleanest of languages, that's the language that the GNU project always prefer” -- Richard Stallman

• “Anyone could learn Lisp in one day, except that if they already knew FORTRAN, it would take three days” -- Marvin Minsky

Page 32: Tema 1: Introducció als llenguatges  de  programació  i  als seus paradigmes

Exemple LISP

(defun list-nth (N L)"Return the N'th member of a list L." (if (null L) nil (if (zerop N) (first L) (list-nth (1- N) (rest L)) ) ))

Page 33: Tema 1: Introducció als llenguatges  de  programació  i  als seus paradigmes

PL/1

• 1964• Desenvolupat per un comitee d’IBM

– Millorar el rendiment dels programadors de propòsit general (vs. Fortran i Cobol)

– Eclèctic:• Pas de paràmetres, estructurat, registres, processament

de llistes, excepcions, multi-tasca, punters, …– Però: massa gran i complexe

Page 34: Tema 1: Introducció als llenguatges  de  programació  i  als seus paradigmes

Exemple de PL/1

Page 35: Tema 1: Introducció als llenguatges  de  programació  i  als seus paradigmes

BASIC(Beginner’s All-purpose Symbolic Instruction Code)

• 1966• Característiques:

– Variables no es declaren. Els noms són lletres simples. S’inicialitzen a 0.

– Fàcil de fer servir i aprendre.– GOTO…

Page 36: Tema 1: Introducció als llenguatges  de  programació  i  als seus paradigmes

Exemple de BASIC10 REM THIS IS A BASIC PROGRAM FOR FINDING THE MEAN20 DIM A(99)30 INPUT N40 FOR I = 1 TO N50 INPUT A(I)60 LET S = S + A(I)70 NEXT I80 LET M = S/N90 LET K = 0100 FOR I = 1 TO N110 IF A(I) < M THEN 130120 LET K = K + 1130 NEXT I140 PRINT “MEAN IS”, M150 PRINT “NUMBER GREATER THAN MEAN IS”, K160 STOP170 END

Page 37: Tema 1: Introducció als llenguatges  de  programació  i  als seus paradigmes

PASCAL

• 71, Wirth (T. Aw.)• Llenguatge educatiu.• El més usat dels 70.• Inclou “rut-time environment”: (Codi, dades

estàtiques, pila -> … <- Heap)• Permet definir nous tipus a l’usuari.• Continua amb C, ADA, Java, …

Page 38: Tema 1: Introducció als llenguatges  de  programació  i  als seus paradigmes

Frases de Wirth

• “Power of a language lies in its regularity and not in its abundant of Features”

• “Character of a language is defined by what it prevents more than by what it allows to be expressed”

Page 39: Tema 1: Introducció als llenguatges  de  programació  i  als seus paradigmes

Exemple de Codi PASCAL(*Pascal program for finding the mean*)Program main (input, output);

type intlist = array [1 . . 99] of integer; var a : intlist; i, n, number : integer; sum, mean : real;(*main program starts here *) begin number := 0; sum := 0;

readln (n); for I := 1 to n do begin readln(a[i]); sum := sum + a[i] end; mean := sum/n; for I := 1 to n do if (a[i] > mean) then number := number + 1; writeln (‘the number over mean is: ‘, number)end.

Page 40: Tema 1: Introducció als llenguatges  de  programació  i  als seus paradigmes

C

• 72, Dennis Ritchie (T. Aw.)• Més baix nivell que PASCAL• Fortament lligat a Unix• Descomposició de mòduls i linkatge• Sistema de tipus més permissiu.• Clar condicionador de C++ i JAVA (sintaxi)

Page 41: Tema 1: Introducció als llenguatges  de  programació  i  als seus paradigmes

80s

• ADA: TAD, taskes, excepcions, paquets, …• Smalltalk: OOP (Simula 67), entorn de

desenvolupament visual• Funcionals: ML, Miranda, … Fortament tipats, lazyness,

…primes = sieve [2..] sieve (p:x) = p : sieve [n | n <- x; n mod p ~= 0]

• Prolog: Primer en programació lògica• C++: C + classes, i herència múltiple,

Templates/genèrics, excepcions, … Té molt èxit.

Page 42: Tema 1: Introducció als llenguatges  de  programació  i  als seus paradigmes

90’s

• JAVA: interfaces explítics, herència simple, garbagge collection (s’amaga la gestió de memòria), …– Èxit per la conexió amb l’explosió WWW– Compile once, run everywhere– Màquina virtual– +lent que C++– Sintaxi similar al C++ -> fàcil trànsit.

Page 43: Tema 1: Introducció als llenguatges  de  programació  i  als seus paradigmes

90’s

• Scripting: Perl, python, AWK,…– senzills, dinàmics, estructures de tipus d’alt nivell,

no fortament tipats, etc.

• Haskell: fortament tipat, lazy, pur, …

• Constraint Programming: SICSTUS Prolog, …

Page 44: Tema 1: Introducció als llenguatges  de  programació  i  als seus paradigmes

2000’s

• SCALA– Web, Concurrencia, Funcional (alt nivell i

modularitat) + JAVA• MiniZinc

– Constraint programming declaratiu– Model once solve everywhere

Page 45: Tema 1: Introducció als llenguatges  de  programació  i  als seus paradigmes

Què volem d’un bon llenguatge?• Claritat, simplictat i unicitat

– Pocs conceptes fàcils de combinar (integritat)– Llegibilitat

• Suport a l’abstracció– Tipus– Funcions

• Facilitat de raonar-ne la correctesa i de testejar• Eficiència• Portabilitat• Entorna de desenvolupament• Documentació• …

Page 46: Tema 1: Introducció als llenguatges  de  programació  i  als seus paradigmes

Biblio

• Capítol: 1,2: “Concepts in programming languages”

• Capítol 1,2: “Lenguajes de programación: principios y prácticas”

• Wikipedia (fotos i demés…)