Existem linguagens de programação orientadas a objetos que não são baseadas em classes?

44

Há alguma linguagem de programação orientada a objetos que não seja baseada no paradigma de classe?

    
por blunders 20.10.2011 / 21:04
fonte

8 respostas

74

Até onde eu sei, Self é o idioma original que inventou o paradigma "livre de classes" baseado nos protótipos . Já existia (em um estágio experimental) na década de 1980 e empurra o uso elegante do Smalltalk do prototype pattern ao extremo, de modo que as classes sejam completamente eliminadas.

Isso influenciou todas as outras linguagens OO "sem classes" que eu conheço:

  • mais proeminentemente Javascript,
  • a linguagem de programação clássica e o ambiente Squeak (que é construído sobre o Smalltalk)
  • a linguagem de script multi-paradigma Lua .
por 20.10.2011 / 21:18
fonte
32

Idiomas como o JavaScript são baseados em protótipos , onde o comportamento é reutilizado pela clonagem de objetos existentes. O artigo da Wikipedia ao qual eu associei indica que Lua, ActionScript e várias outras linguagens seguem esse paradigma.

    
por 20.10.2011 / 21:09
fonte
13

A linguagem de programação orientada a objetos mais popular do mundo não tem classes, é chamada de Javascript e é baseada em protótipos: link

    
por 20.10.2011 / 21:11
fonte
6

A orientação a objetos é um termo abrangente para vários conceitos importantes que são apenas parcialmente contingentes entre si. Por exemplo, a herança pode ser declarada caso a caso entre instâncias e não entre classes, ou a classe inteira pode ser representada por um objeto prototype concreto, como Thomas escreveu. É mais comum separar a descrição da estrutura da criação da instância. Da mesma forma, ligação tardia significa que objetos com o mesmo método nominal não necessariamente fazem a mesma coisa quando são invocados, e que a decisão é tomada em tempo de execução. Isso é igualmente possível com a abordagem baseada em protótipos. E o encapsulamento é essencialmente independente de seus objetos serem instâncias de classes declaradas ou não.

Dito isto, a maioria dos idiomas OO está firmemente no campo baseado em classes. Mas, mesmo assim, há idiomas que confundem a linha: o design orientado a domínio geralmente leva a sistemas em que a identidade de objetos particulares é muito mais importante do que o diagrama de classes estático, e decoradores permitem que objetos da mesma classe ou interface tenham muito comportamento diferente.

    
por 20.10.2011 / 21:15
fonte
6

Fortaleza é uma linguagem orientada a objetos baseada em características em vez de classes. A diferença está principalmente na composição da implementação. O comportamento de um objeto (definições de método) ainda é determinado pelas declarações em um ponto específico no texto do programa. Então, nesse sentido, é semelhante aos sistemas baseados em classes.

Existem cálculos de objetos (por Cardelli, eu acho), que são puramente baseados em objetos. Todo método é um membro da instância. Você forma novos objetos pegando o conteúdo de um objeto existente e adicionando, removendo ou substituindo alguns de seus membros. É um pouco diferente dos protótipos, já que o novo objeto não tem link para o objeto antigo, apenas alguns de seus conteúdos.

IIRC, é possível programar de maneira semelhante usando Python e outras linguagens orientadas por hashtable: você pode adicionar uma função como um membro de instância e chamá-la como um método.

    
por 20.10.2011 / 23:20
fonte
5
Ada, a partir de sua revisão de 1995, Ada é orientada a objetos, mas ao contrário de muitas outras linguagens OO, não combina tipos e módulos orientados a objetos em um único constructo chamado "classe". Em vez de declarar um tipo como "classe Foo" e colocar todas as declarações de método associadas dentro da declaração de classe, você declara um pacote e declara o tipo (como record ) e outras coisas dentro do pacote. Não é "livre de classes" da mesma forma que algumas das outras linguagens mencionadas, é apenas uma maneira ligeiramente diferente de organizar as coisas.

Os recursos orientados a objeto do Ada 95 foram adicionados à versão existente em 1983 da linguagem; ele estendeu as construções de registros e pacotes existentes para suportar herança et al.

    
por 21.10.2011 / 00:42
fonte
5

Io é outra linguagem orientada a objetos baseada em protótipos. Na verdade, inspira-se em várias das linguagens já mencionadas em outras respostas.

Io is a dynamic prototype-based programming language. The ideas in Io are mostly inspired by Smalltalk (all values are objects), Self (prototype-based), NewtonScript (differential inheritance), Act1 (actors and futures for concurrency), Lisp (code is a runtime inspectable / modifiable tree) and Lua (small, embeddable).

    
por 21.10.2011 / 13:06
fonte
4

Erlang. E sim, Erlang é uma linguagem orientada a objetos, pois cumpre todos os três pontos da definição de OO.

    
por 21.10.2011 / 01:53
fonte