DEV Community

Uriel dos Santos Souza
Uriel dos Santos Souza

Posted on

1

O que faz de uma linguagem Orientada a Objetos? Por Peter Wegner

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.

Fontes:
https://dl.acm.org/doi/abs/10.1145/38765.38823

Billboard image

Deploy and scale your apps on AWS and GCP with a world class developer experience

Coherence makes it easy to set up and maintain cloud infrastructure. Harness the extensibility, compliance and cost efficiency of the cloud.

Learn more

Top comments (3)

Collapse
 
eduardoklosowski profile image
Eduardo Klosowski

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 é um PartialEq, volta a discussão.

Collapse
 
urielsouza29 profile image
Uriel dos Santos Souza • Edited

Apesar de eu já ter visto ideias que deveriam-se usar mais interfaces e menos heranças,

não seria composição?

Rust não é mais voltado a paradigma funcional?

Collapse
 
eduardoklosowski profile image
Eduardo Klosowski

Também é possível usar algo parecido com composição, por exemplo:

fn exemplo<T: Ord + Eq>(item: &T) { ... }
Enter fullscreen mode Exit fullscreen mode

Nesse caso o parâmetro tem que implementar as traits Ord e Eq (ter funções para verificar maior/menor e igualdade), porém Ord requer que ele também seja PartialOrd e Eq requer que ele também seja PartialEq. 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.

AWS Security LIVE!

Join us for AWS Security LIVE!

Discover the future of cloud security. Tune in live for trends, tips, and solutions from AWS and AWS Partners.

Learn More