:: Topo :: doCoding ::

Coding Languages

Paradigmas

Um paradigma de programação fornece (e determina) a visão que o programador possui sobre a estruturação e execução do programa. Por exemplo, em programação orientada a objectos, programadores podem abstrair um programa como uma colecção de objectos que interagem entre si, enquanto em programação funcional os programadores abstraem o programa como uma sequência de funções executadas de modo empilhado.

Concorrente

Programação concorrente é um paradigma de programação para a construção de programas de computador que fazem uso da execução concorrente (simultânea) de várias tarefas computacionais, que podem ser implementadas como programas separados ou como um conjunto de threads criadas por um único programa. Essas tarefas podem ser executadas por um único processador, vários processadores em um único equipamento ou processadores distribuídos por uma rede. Programação concorrente é relacionada com programação paralela, mas foca mais na interacção entre as tarefas.

  • Erlang ( 1986 ) - functional, concurrent, distributed
  • Scala ( 2003 ) - functional, imperative, concurrent (Actor model), object-oriented (class-based)
  • Clojure ( 2007 ) - functional, imperative, concurrent
  • Fantom ( 2007 ) - imperative, object-oriented, concurrent
  • Go ( 2009 ) - imperative, structured, concurrent

Declarativo

Programação declarativa é um paradigma de programação baseado em programação funcional, programação lógica ou programação restritiva. Tal termo é utilizado para discernir tais linguagens em relação à linguagens de programação imperativas. Outra definição determina que um programa é declarativo se descreve o que e não como seus procedimentos funcionam. Dessa forma, linguagens de marcação são declarativas pois descrevem o que são suas estruturas e não como elas serão utilizadas. Tal definição foge do âmbito pois não trata-se de linguagens de programação.

Funcional

Programação funcional é um paradigma de programação que trata a computação como uma avaliação de funções matemáticas e que evita estados ou dados mutáveis. Ela enfatiza a aplicação de funções, em contraste da programação imperativa, que enfatiza mudanças no estado do programa. Uma função, neste sentido, pode ter ou não ter parâmetros e um simples valor de retorno. Os parâmetros são os valores de entrada da função, e o valor de retorno é o resultado da função. A definição de uma função descreve como a função será avaliada em termos de outras funções.

  • Haskell ( 1990 ) - purely functional
  • Lisp ( 1958 ) - functional, imperative, reflective, metaprogramming
    • Scheme ( 1975 ) - functional, imperative, reflective, metaprogramming
    • CommonLisp ( 1984 ) - functional, procedural, reflective, object-oriented (class-based), metaprogramming
  • Ocaml ( 1996 ) - functional, imperative, generic (template metaprogramming), object-oriented (class-based)
  • F# ( 2002 ) - functional, imperative, object-oriented (class-based)
  • Erlang ( 1986 ) - functional, concurrent, distributed
  • Scala ( 2003 ) - functional, imperative, concurrent (Actor model), object-oriented (class-based)
  • Clojure ( 2007 ) - functional, imperative, concurrent
  • Perl ( 1987 ) - functional, imperative, object-oriented (class-based)
  • Tcl ( 1988 ) - functional, procedural, object-oriented, event-driven programming
  • Python ( 1991 ) - functional, imperative, object-oriented (class-based)
  • Ruby ( 1995 ) - functional, imperative, reflective, object-oriented (class-based)

Lógico

Programação lógica é um paradigma que usa a lógica matemática através da invocação orientada de padrões. Um programa lógico, na sua essência, forma conclusões imediatas a partir de uma lista de premissas. Estas conclusões são tanto sentenças declarativas quanto imperativas. Quando uma sentença imperativa é deduzida, o programa toma uma acção correspondente.

  • Prolog ( 1972 ) - purely logic

Imperativo

Programação imperativa (ou programação procedimental) é um paradigma de programação que descreve a computação como acções (comandos) que mudam o estado (variáveis) de um programa. Muito parecido com o comportamento imperativo das linguagens naturais que expressam ordens, programas imperativos são uma sequência de comandos para o computador executar.

Procedimental

O termo Programação procedimental é às vezes utilizado como sinónimo de Programação imperativa (paradigma de programação que especifica os passos que um programa deve seguir para alcançar um estado desejado), mas o termo refere-se ao paradigma de programação baseado no conceito de chamadas a procedimento. Os procedimentos, também conhecidos como rotinas, sub-rotinas, métodos, ou funções (que não devem ser confundidas com funções matemáticas, mas são similares àquelas usadas na programação funcional) simplesmente contêm um conjunto de passos computacionais a serem executados. Um dado procedimento pode ser chamado a qualquer hora durante a execução de um programa, inclusive por outros procedimentos ou por si mesmo.

  • ALGOL ( 1958 ) - purely procedural
  • Basic ( 1964 ) - unstructured, procedural (later), object-oriented (later)
  • Pascal ( 1970 ) - purely procedural
  • C ( 1972 ) - purely procedural
  • Lisp ( 1958 ) - functional, imperative, reflective, metaprogramming
    • Scheme ( 1975 ) - functional, imperative, reflective, metaprogramming
    • CommonLisp ( 1984 ) - functional, procedural, reflective, object-oriented (class-based), metaprogramming
  • Ocaml ( 1996 ) - functional, imperative, generic (template metaprogramming), object-oriented (class-based)
  • C++ ( 1983 ) - imperative, object-oriented (class-based), generic
  • Java ( 1995 ) - imperative, generic, reflective, object-oriented (class-based)
  • C# ( 2001 ) - functional (only lambda support), imperative, object-oriented (class-based)
  • F# ( 2002 ) - functional, imperative, object-oriented (class-based)
  • Groovy ( 2003 ) - imperative, aspect-oriented, object-oriented (class-based)
  • Perl ( 1987 ) - functional, imperative, object-oriented (class-based)
  • Tcl ( 1988 ) - functional, procedural, object-oriented, event-driven programming
  • Python ( 1991 ) - functional, imperative, object-oriented (class-based)
  • Ruby ( 1995 ) - functional, imperative, reflective, object-oriented (class-based)

Orientado a Objectos

A Programação Orientada a Objectos (POO) é um paradigma de análise, projecto e programação de sistemas de software baseado na composição e interacção entre diversas unidades de software chamadas de objectos. Em alguns contextos, prefere-se usar modelação orientada ao objecto, em vez de programação.

Baseado em Classes

A programação baseada em classes, ou orientada a classes, é uma vertente do paradigma de programação orientada a objectos na qual a herança é alcançada pela definição de classes de objectos - em oposição à definição dos próprios objectos. É o mais popular e desenvolvido modelo OOP, e neste modelo os objectos são entidades que combinam estado (dados), comportamento (métodos) e identidade (existência única entre todos os objectos).

  • Smalltalk ( 1972 ) - reflective, object-oriented (class-based)
  • Eiffel ( 1986 ) - design by contract, object-oriented (class-based)
  • CommonLisp ( 1984 ) - functional, procedural, reflective, object-oriented (class-based), metaprogramming
  • Ocaml ( 1996 ) - functional, imperative, generic (template metaprogramming), object-oriented (class-based)
  • C++ ( 1983 ) - imperative, object-oriented (class-based), generic
  • Java ( 1995 ) - imperative, generic, reflective, object-oriented (class-based)
  • C# ( 2001 ) - functional (only lambda support), imperative, object-oriented (class-based)
  • F# ( 2002 ) - functional, imperative, object-oriented (class-based)
  • Groovy ( 2003 ) - imperative, aspect-oriented, object-oriented (class-based)
  • Perl ( 1987 ) - functional, imperative, object-oriented (class-based)
  • Tcl ( 1988 ) - functional, procedural, object-oriented, event-driven programming
  • Python ( 1991 ) - functional, imperative, object-oriented (class-based)
  • Ruby ( 1995 ) - functional, imperative, reflective, object-oriented (class-based)
  • PHP ( 1995 ) - imperative, object-oriented (class-based)
  • Boo ( 2003 ) - imperative, object-oriented (class-based)
Baseado em Protótipos

A programação baseada em protótipos é uma vertente do paradigma de programação orientada a objectos na qual o conceito classe não existe e a re-utilização de comportamentos (conhecida como herança) é realizada através da clonagem de objectos existentes que servem como protótipos. Este modelo é também conhecido como orientado a protótipos, baseado em instâncias ou simplesmentes class-less.

  • Self ( 1987 ) - purely object-oriented (prototype-based)
  • Io ( 2002 ) - object-oriented (prototype-based)
  • Ioke ( 2008 ) - object-oriented (prototype-based)
  • Lua ( 1993 ) - functional, imperative, object-oriented (prototype-based)
  • JavaScript ( 1995 ) - functional, imperative, object-oriented (prototype-based)

Multi

Uma linguagem de programação multi-paradigma é uma linguagem de programação que suporta mais do que um paradigma de programação.

Tal como diz Timothy Budd, designer da linguagem de programação Leda, a ideia por detrás destas linguagens de programação é a de facilitar uma base sobre a qual os programadores possam trabalhar numa grande variedade de estilos de programação, livres para misturarem conceitos oriundos de diferentes paradigmas. O objectivo do desenho de tais linguagens é permitir aos programadores usarem a ferramenta mais adequada para um dado trabalho, admitindo que não existe um só paradigma que resolva todo e qualquer problema da forma mais fácil ou eficiente.

  • Lisp ( 1958 ) - functional, imperative, reflective, metaprogramming
    • Scheme ( 1975 ) - functional, imperative, reflective, metaprogramming
    • CommonLisp ( 1984 ) - functional, procedural, reflective, object-oriented (class-based), metaprogramming
  • Ocaml ( 1996 ) - functional, imperative, generic (template metaprogramming), object-oriented (class-based)
  • C++ ( 1983 ) - imperative, object-oriented (class-based), generic
  • Java ( 1995 ) - imperative, generic, reflective, object-oriented (class-based)
  • C# ( 2001 ) - functional (only lambda support), imperative, object-oriented (class-based)
  • F# ( 2002 ) - functional, imperative, object-oriented (class-based)
  • Groovy ( 2003 ) - imperative, aspect-oriented, object-oriented (class-based)
  • Vala ( 2006 ) - imperative, structured, object-oriented
 
docoding/languages.txt · Modificado em: 2011/01/22 23:13 por straider     Voltar ao topo