Download Paradigmas en lenguajes de programación
Transcript
Paradigmas en lenguajes de programación h4p://en.wikipedia.org/wiki/ Programming_paradigm qué es un paradigma? • un paquete de decisiones que suelen venir juntas • un es@lo de programación • una forma de entender los problemas, de aplicar las capacidades de los lenguajes de programación qué es un paradigma • los paradigmas emergen como resultado de los procesos sociales en los que la gente desarrolla ideas y crea principios y prácticas que instancian esas ideas Thomas Kuhn. La estructura de las revoluciones científicas • los paradigmas de programación son la consecuencia de las ideas de la gente sobre cómo hacer programas paradigmas • lenguajes de marcado (no turing completos) • precursores: lenguajes máquina • declara@vos (sin efectos secundarios) – funcionales: lisp, haskell, scheme, ML – lógicos: prolog – constraint sa@sfac@on • impera@vos (con estado) y luego... • orientados a objetos • scrip@ng • concurrentes • para aplicaciones específicas record Descriptive declarative programming XML, S−expression Data structures only Turing equivalent Observable nondeterminism? Yes No The principal programming paradigms "More is not better (or worse) than less, just different." v1.08 © 2008 by Peter Van Roy + procedure First−order functional programming + cell (state) Imperative programming Pascal, C + closure Imperative search programming Functional programming + unification (equality) + continuation Continuation programming Deterministic logic programming + search Relational & logic programming Scheme, ML + by−need synchron. Prolog, SQL Lazy embeddings functional + solver programming Constraint (logic) Haskell SNOBOL, Icon, Prolog + name (unforgeable constant) ADT functional programming + cell ADT imperative programming Scheme, ML Haskell, ML, E CLU, OCaml, Oz + thread + single assign. + nondeterministic + port choice (channel) Monotonic dataflow Nonmonotonic Multi−agent programming dataflow dataflow programming programming Declarative programming concurrent Concurrent logic Oz, Alice, AKL programming programming CLP, ILOG Solver Pipes, MapReduce Oz, Alice, Curry, Excel, + thread + thread + by−need AKL, FGHC, FCP Concurrent + single assignment synchronization + synch. on partial termination constraint Lazy programming Functional reactive dataflow programming (FRP) LIFE, AKL programming Weak synchronous + by−need synchronization Lazy programming Lazy concurrent declarative FrTime, SL constraint concurrent programming programming + instantaneous computation Oz, Alice, Curry Oz, Alice, Curry Strong synchronous programming Logic and Esterel, Lustre, Signal Dataflow and Functional constraints message passing Unnamed state (seq. or conc.) More declarative + search Nondet. state + port (channel) + cell (state) Event−loop programming E in one vat + thread Multi−agent programming Message−passing concurrent programming Erlang, AKL + local cell Active object programming Object−capability programming + closure Sequential object−oriented programming Stateful functional programming Java, OCaml + thread Concurrent object−oriented programming Shared−state concurrent programming Smalltalk, Oz, Java, Alice + log CSP, Occam, E, Oz, Alice, publish/subscribe, tuple space (Linda) SQL embeddings Message passing Shared state Software transactional memory (STM) Named state Less declarative comparación • h4p://en.wikipedia.org/wiki/ Comparison_of_programming_paradigms los lenguajes más usados • h4p://redmonk.com/sogrady/2015/01/14/ language-‐rankings-‐1-‐15/