Skip to content

Instantly share code, notes, and snippets.

@robotlolita
Last active Dec 27, 2018
Embed
What would you like to do?
O que é OOP? Por que Java não deve ser considerado uma linguagem com um bom suporte para esse paradigma?

Objeto é a noção de uma entidade que é definida inteiramente pelo seu comportamento. E esse comportamento é dinâmicamente selecionado. Em outras palavras, eu "peço" um objeto para "andar," e como ele vai fazer isso é inteiramente definido pelo objeto.

O exemplo:

objeto.anda()

Captura bem essa idéia. Eu tenho uma mensagem "anda," mas eu não consigo dizer o que essa função faz direto do meu código, porque isso depende no comportamento dinâmico da execução do programa (em uma linguagem estáticamente tipada você consegue optimizar isso, mas o raciocínio do código continua o mesmo).

Como os objetos são definidos inteiramente por aquilo que eles fazem, não faz muito sentido (do ponto de vista de OO) "marcar" o objeto com um nome único (tipagem nominal). Dessa forma, tipagem estrutural deveria ser o default para explorar essa idéia de "programação em cima de interfaces," com a possibilidade de optar por essa "marcação especial."

Por que Java não suporta bem OO? Porque quando você escreve:

if (a > b) { ... }

Você para de trabalhar com essa idéia de que o seu programa é o resultado da interação de objetos, e começa a trabalhar com a idéia de programação procedural ou funcional (dependendo de outras propriedades).

O correto, nesse caso, seria que o objeto True e o objeto False fossem as únicas coisas que determinassem seu if/else. Que > fosse só um método de qualquer objeto (não só números). E assim por diante. De outra forma, você está programando com uma forma muito limitada da idéia, e não pode aproveitar os benefícios desse modelo computacional (principalmente a parte de programar para interfaces).

Em outras palavras:

(a.>(b)).thenElse({ ... }, { ... })
@ricardomlourenco

This comment has been minimized.

Copy link

@ricardomlourenco ricardomlourenco commented Jun 10, 2014

Não entendi a parte do if ( a > b) poderia dar maiores detalhes?
Outra coisa, poderia recomendar um livro bom para aprofundamento nesses conceitos que vc explicou?

@IsTheJack

This comment has been minimized.

Copy link

@IsTheJack IsTheJack commented Jun 22, 2014

Quais boas linguagens, que você recomenda, usam esse conceito correto de orientação a objetos que você citou?

@robotlolita

This comment has been minimized.

Copy link
Owner Author

@robotlolita robotlolita commented Jun 23, 2014

@RobertoOll Smalltalk, Self, e outras linguagens descendentes de Smalltalk são as que melhor incorporam esse conceito.

Em termos de linguagens que possuem um suporte razoável: Ruby e Scala.

@marcoonroad

This comment has been minimized.

Copy link

@marcoonroad marcoonroad commented Jun 29, 2014

Legal Quildreen, massa isso aê, pena que eu tô tentando implementar flow structures como subrotinas mesmo, kkk, mas bom trabalho aê.

@thiagovsk

This comment has been minimized.

Copy link

@thiagovsk thiagovsk commented Feb 4, 2015

++ Em termos de linguagens que possuem um suporte razoável: Ruby e Scala.

@16boot

This comment has been minimized.

Copy link

@16boot 16boot commented Jul 10, 2015

:v

@648trindade

This comment has been minimized.

Copy link

@648trindade 648trindade commented Dec 1, 2016

O loco bicho

@Marlysson

This comment has been minimized.

Copy link

@Marlysson Marlysson commented Apr 10, 2017

Em python esse método de comparação é feito internamente pro meio do datamodel e usando um método pra isso..

Por exemplo:

a.__gt__(b)

Isso seria considerado bem OO , ou não ?

@lucasbretana

This comment has been minimized.

Copy link

@lucasbretana lucasbretana commented Dec 25, 2017

O uso de a > b é apenas um syntax sugar pro compareTo que qualquer classe numérico, i.e., que extensa Numeric, vai ter. Nada te impede de fazer algo mais "claro". Isso não é o mais chama atenção pra dizer que Java não é puramente OO.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment