Isso era um assunto controverso nos anos 80.
Em 87, Peter Wegner, publicou um artigo na OOPSLA que resolveu a questão (pelo menos entre aqueles que concordam com o Wegner)
Para uma linguagem ser Orientada a Objetos ela precisa segundo Wegner
ser baseada em objetos, ou seja, deve ser fácil programar objetos que encapsulam dados e operações;
ser baseadas em classes, ou seja, cada objeto pertence a (ou é fabricado a partir de) uma classe; e +
permitir herança, ou seja, deve ser fácil agrupar classes em hierarquias de subclasses e superclasses.
Outros estudiosos (chatos?) acrescentam outros itens à lista: (eu não concordo - Wegner)
enlace dinâmico, tardio (late binding)
A linguagem Self é uma grande exceção entre as linguagens claramente orientada a objetos: ela não possui classes.
JS e Lua tem coletores de lixo e não são baseadas em classes.
Para Wegner essas não são linguagem OOP.
Top comments (3)
Rust também entra na discussão. Ela possui structs e permite criar funções associadas a elas. Então, apesar de não ter o nome classe, e separar atributos (variáveis) de comportamento (métodos/funções), ela possui algo bem parecido ao conceito de classe, podendo ser considerado orientado a objetos por isso. Porém, não tem herança, então por essa definição não seria orientada a objetos. Apesar de eu já ter visto ideias que deveria-se usar mais interfaces e menos heranças, e como Rust tem traits, que podem ser considerada uma interface com mais recursos, e inclusive que lembram bastante herança, como todo
Eq
também é umPartialEq
, volta a discussão.não seria composição?
Rust não é mais voltado a paradigma funcional?
Também é possível usar algo parecido com composição, por exemplo:
Nesse caso o parâmetro tem que implementar as traits
Ord
eEq
(ter funções para verificar maior/menor e igualdade), porémOrd
requer que ele também sejaPartialOrd
eEq
requer que ele também sejaPartialEq
. Então, sim, da para misturar tudo.Porém Rust não é voltado para programação funcional, é imperativo mesmo, mas traz algumas coisas comuns de programação funcional, ou seja, tenta aproveitar o que pode ser adaptado e faz sentido com a linguagem.