Programação baseada em protótipos

 Nota: Para outros significados, veja Prototype.

A programação baseada em protótipos é um estilo de programação orientada a objetos em que a reutilização de comportamento (conhecida como herança) é realizada por meio de um processo de reutilização de objetos existentes que servem como protótipos. Esse modelo também pode ser conhecido como programação prototípica, orientada a protótipos, sem classes ou baseada em instância.

A programação baseada em protótipos usa objetos generalizados, que podem então ser clonados e estendidos. Usando frutas como exemplo, um objeto "fruta" representaria as propriedades e a funcionalidade das frutas em geral. Um objeto "banana" seria clonado do objeto "fruta" e propriedades gerais específicas para bananas seriam anexadas. Cada objeto "banana" individual seria clonado do objeto "banana" genérico. Compare com o paradigma baseado em classes, onde uma classe "fruta" seria estendida por uma classe "banana".

A primeira linguagem de programação orientada a protótipos foi Self, desenvolvida por David Ungar e Randall Smith em meados da década de 1980 para pesquisar tópicos de design de linguagem orientada a objetos. Desde o final da década de 1990, o paradigma sem classes tem se tornado cada vez mais popular. Algumas linguagens orientadas a protótipos atuais são JavaScript (e outras implementações ECMAScript, como JScript e ActionScript 1.0 do Flash), Lua, Cecil, NewtonScript, Io, Ioke, MOO, REBOL e AHK.

Projeto e implementação[editar | editar código-fonte]

A herança prototípica em JavaScript é descrita por Douglas Crockford como:

Você faz protótipos de objetos e então… cria novas instâncias. Os objetos são mutáveis ​​em JavaScript, então podemos aumentar as novas instâncias, dando-lhes novos campos e métodos. Eles podem atuar como protótipos para objetos ainda mais novos. Não precisamos de classes para fazer muitos objetos semelhantes... Objetos herdam de objetos. O que poderia ser mais orientado a objetos do que isso?[1]

Os defensores da programação baseada em protótipo argumentam que ela encoraja o programador a se concentrar no comportamento de algum conjunto de exemplos e só mais tarde se preocupar em classificar esses objetos em objetos arquetípicos que mais tarde são usados ​​de maneira semelhante às classes.[2] Muitos sistemas baseados em protótipos encorajam a alteração de protótipos durante o tempo de execução, enquanto poucos sistemas orientados a objetos baseados em classes (como o sistema dinâmico orientado a objetos, Common Lisp, Dylan, Objective-C, Perl, Python, Ruby ou Smalltalk) permitem que as classes sejam alteradas durante a execução de um programa.

Quase todos os sistemas baseados em protótipos são baseados em linguagens interpretadas e dinamicamente tipadas. Sistemas baseados em linguagens estaticamente tipadas são tecnicamente viáveis, entretanto. A linguagem Omega discutida em Prototype-Based Programming[3] é um exemplo de tal sistema, embora de acordo com o site da Omega mesmo a Omega não seja exclusivamente estática, mas sim seu "compilador pode escolher usar ligação estática onde isso é possível e pode melhorar a eficiência de um programa."

Referências

  1. Crockford, Douglas. «Prototypal Inheritance in JavaScript». Consultado em 20 de agosto de 2013 
  2. Taivalsaari, Antero. «Section 1.1». Classes vs. Prototypes: Some Philosophical and Historical Observations. [S.l.: s.n.] p. 14. CiteSeerX 10.1.1.56.4713Acessível livremente 
  3. Blaschek, Günther. «Section 2.8». Omega: Statically Typed Prototypes. [S.l.: s.n.] p. 177 
Ícone de esboço Este artigo sobre programação de computadores é um esboço. Você pode ajudar a Wikipédia expandindo-o.