O que faz de uma linguagem Orientada a Objetos? Por Peter Wegner
Uriel dos Santos Souza

Uriel dos Santos Souza @urielsouza29

About: https://twitter.com/urielsouza29

Location:
Guamiranga Paraná, Brasil
Joined:
Jan 8, 2021

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

Publish Date: Mar 16 '23
1 3

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

Comments 3 total

  • Eduardo Klosowski
    Eduardo KlosowskiMar 16, 2023

    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.

    • Uriel dos Santos Souza
      Uriel dos Santos SouzaMar 16, 2023

      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?

      • Eduardo Klosowski
        Eduardo KlosowskiMar 16, 2023

        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.

Add comment