Executando verificação de segurança...
1

Vou dizer, a quantidade de GIFs e memes desse post me deixou tonto, mas fora isso tem alguns erros conceituais, eu não vou me alongar muito com fontes porque toda vez que se fala de POO com fontes alguém negativa:

A forma base de se pensar em POO é abstrair, e criar classes para servirem de modelo para a criação dos objetos que serão usados nos programas – perceba que POO tenta se voltar mais para a realidade, pois tenta pegar objetos do mundo real e transformá-los em código.

Mais ou menos, a forma base real é: abstrair, modelar, encapsular e extender, em outras fontes você acha termos diferentes mas com o mesmo efeito, ou seja que tipo os objetos vão ter, ao contrário da CRENÇA popular, POO não tem classes (sim, você e 90% aprenderam errado)

Classe, Estrutura, Protótipo

São diferentes formas de dizer como determinado objeto deve ser:

  • Protótipos são objetos que você pode usar diretamente e também pode fazer com que outros objetos busquem referências nele
  • Classe e Estrutura, são referencias para onde objetos buscam coisas faltando neles (vai ficar mais claro em extensão)

A diferença entre Classe e Estrutura é que em Estruturas o encapsulamento é feito dentro da declaração, e em estruturas, fora dela. Em resumo Classe e Estrutura ditam como um objeto deve se parecer funcionando como uma planta de construção, enquanto Protótipos são um modelo em si

Objeto

Um Objeto é uma entidade que agrupa propriedades e ações, pode ou não ser uma instancia de uma classe

Extensão (não da mais pra prosseguir sem)

Numa herança você tem uma linha de sucessão de referência, considerando o objeto "allSpark" que é do tipo Cubo, que por sua vez é do tipo Hexaedro (caso não saiba, nem todo hexaedro é um cubo), funciona assim:

allSpark->lados();

O que acontece aqui, allSpark é uma extensão de cubo (sim, instanciar uma classe é extender ela, já vou para Lua onde isso é mais explícito) então ele vai "perguntar": allSpark tem o método lados()? Se sim, chame ele e passe ele mesmo como primeiro argumento (geralmente implícito), não tem? Cubo tem? Se sim, chame ele, passando allSpark como primeiro argumento, ainda não tem? Hexaedro tem? Se sim, chame ele, passando allSpark como primeiro argumento, se não dê um erro, em Lua para visualizar melhor:

-- Declaramos a "Classe" Hexaedro e o método lados()
Hexaedro = {}
function Hexaedro:lados()
  print("Chamando de Hexaedro",self) -- O nome muda mas é o mesmo this de Java
  return 6
end
-- Declaramos a "Classe" Hexaedro e o método forma()
Cubo = {}
function Cubo:forma()
  print("Chamando de Cubo",self) -- O nome muda mas é o mesmo this de Java
  return "Quadrado"
end
-- Instanciamos o allSpark
local allSpark = setmetatable({},{__index=Cubo}
print(allSpark) -- Pra gente ver o ID na memória
allSpark:lados()
allSpark:forma()
-- Vamos pegar os métodos
print(rawget(allSpark,"lados")) -- nil, (Não existe em allSpark)
print(rawget(allSpark,"forma")) -- nil, (Não existe em allSpark)

Tudo isso pra mostrar que isso aqui não acontece "Na verdade o que será copiado são os métodos e atributos e colar em outra classe.", o que acontece é uma "cadeia de pesquisa" ou "Lookup chain" mesmo em Java, isso inclusive leva a ideia de que POO é lento, mas a verdade é que POO só fica lento com a "inheritance hell", mas aí já é assunto pra outro tópico

Carregando publicação patrocinada...
2

Rapaz, tu foi longe, entrou até em conceitos e/ou mecanismos de linguagens de programação.
Vá com calma, o cara está explicando com um game da infância de muitos, obviamente com o objetivo didático.

0

Obrigado pelo comentario.

Sobre os gifs, realmente é algo pessoal.

Mais ou menos, a forma base real é: abstrair, modelar, encapsular e extender, em outras fontes você acha termos diferentes mas com o mesmo efeito, ou seja que tipo os objetos vão ter, ao contrário da CRENÇA popular, POO não tem classes (sim, você e 90% aprenderam errado)

No mundo real de desenvolvimento as classes existem.

Tudo isso pra mostrar que isso aqui não acontece "Na verdade o que será copiado são os métodos e atributos e colar em outra classe.", o que acontece é uma "cadeia de pesquisa" ou "Lookup chain" mesmo em Java, isso inclusive leva a ideia de que POO é lento, mas a verdade é que POO só fica lento com a "inheritance hell", mas aí já é assunto pra outro tópico

Na verdade de modo prático é exatamente isso que acontece, as classes estariam "copiando" umas as outras, apenas abstrai essa parte e logo não me aprofundei em assinatura e nem referencia

1

No mundo real de desenvolvimento as classes existem.

Não, classe é uma keyword Syntax Sugar que algumas linguagens POO tem e apenas isso, no mundo real POO não tem classes, quanto mais rápido você desapegar dessa ideia errada, mais rápido você se torna um programador livre das amarras de uma linguagens e aumenta o seu valor como profissional

Na verdade de modo prático é exatamente isso que acontece, as classes estariam "copiando" umas as outras

Não, de modo nenhum é isso que ocorre, entender a diferença entre uma cadeia de pesquisa e essa "copia" te permite entender quando você deve herdar/extender e quando deve criar uma "Classe" independente, essa ideia de "Na verdade de modo prático é exatamente isso que acontece, as classes estariam 'copiando' umas as outras, apenas abstrai essa" é a origem de softwares que consomem de 10 a 20x mais memória,são extremamente lentos e que trazem a má fama do POO

1

Entendi seu ponto, sei o que é sintax sugar e não sabia sobre da cadeia de pesquisa.
Creio que será enriquecedor se você compartilhase conosco materiais em texto ou video que pudesse ser bom para entender esses conceitos que por exemplo você usou para adquirir esse conhecimento