POO - Programação Orientada a Objeto

Oi pessoal, com o módulo de TypeScript o assunto orientação a objetos começará a ficar mais constante. Esse paradigma de programação é realmente muito adotado.
Queria compartilhar um vídeo que fiz em forma de react ao curso ministrado pela excelente Camila Cavalcante. Espero que possa ajudar a alguém que está iniciando neste assunto. Eu particularmente gosto muito desse tema e depois que dá o ‘click’ o entendimento começa a ficar natural.
Também tem o artigo onde apresento o vídeo que mando em anexo. Bons estudos!!!
Vídeo
Artigo
Video React-Abstraindo um bootcamp usando orientação a objeto em Java.pdf (185,5,KB)

17 Likes

Realmente é um tema importantíssimo, Alberto!
Obrigada pela indicação.

Obrigado pela indicação, Alberto! Vai ser muito útil

Eu sei que não tem haver com o título, mas com o POST, então gostaria de dar uma dica que talvez ajude.

Eu tento imaginar POO como um RPG de mesa.

Por exemplo:

Existem classes como mago, guerreiro, ladino, entre outros. Cada classe tem ações específicas e ações gerais.

Um mago pode conjurar bola de fogo, coisa que um guerreiro não poderia, por não ter conhecimento de magia. Mas um feiticeiro poderia, por exemplo, mesmo que sua magia seja de forma diferente. Nesse ponto da para entender que cada classe tem um escopo de ações próprias para ela que funcionam de uma forma específica.

Neste exemplo, segundo o POO, se eu quisesse que meu mago conjurasse bola de fogo seria algo assim:

Mago.bolaDeFogo(alvoTres);

Bola de fogo é uma função, pois é uma ação da Classe Mago. O parâmetro dentro, é aonde ele vai jogar essa bola de fogo, que é uma variável que recebeu uma firmação de onde está o alvo.

Neste contexto, o sistema acessaria a magia bola de fogo, dentro da classe mago, e a usaria para gerar alguma ação no alvoTres.

Não sei se deu para entender, mas espero que sim.

6 Likes

Aaah, a beleza da POO <3

Orientação a objetos funciona um pouco diferente da orientação a funções (caso do Javascript).

Basicamente, são 4 pilares:

Abstração
Encapsulamento
Polimorfismo
e Herança

Explicando cada um deles:
Abstração é a capacidade de transformar coisas físicas (pessoas, casas, carros) em um objeto digital. A proposta é identificar o que nós precisamos saber dessas coisas e extrair todos os atributos (que viram propriedades, são variáveis) necessários pra usar no nosso software. Por exemplo, uma caneta, pode ter propriedades como cor da tinta, cor da tampa, comprimento, cor do corpo, volume de tinta e por aí vai.

Encapsulamento é tornar cada objeto especialista em uma determinada coisa. Por exemplo, Pessoa e Carro podem ser dois objetos diferentes, com propriedades distintas cada um, mas a Pessoa só sabe coisas sobre ela mesma, não tem conhecimento algum sobre o Carro, tudo que cada um faz deve estar contido em cada objeto separado.

Herança é a capacidade de abstrair um objeto específico em um objeto genérico. Um carro e uma moto por exemplo tem muitas características em comum, então os dois podem ser filhos de um objeto Veículo, que tem todas as coisas em comum, entre cada um deles. O objeto Carro só implementa coisas que não tem no objeto Moto, e o contrário também é verdadeiro. Basicamente, o objeto Carro herda propriedades do objeto Veículo.

Por fim o polimorfismo, é consequência da herança. É a capacidade de um objeto filho (o carro) se transformar em um objeto pai(o veículo), e vice-versa.

Pra aprofundar um pouquinho.

7 Likes

Muito bom! Todo conteúdo sobre POO é sempre importante e útil. Obrigado pela indicação

1 Like

Rodrigo, muito bom esse conteúdo abordado por você. Obrigada!

1 Like

Sim, é legal esse exemplo porque ambos, o mago e o feiticeiro podem ser classes herdeiras/especialistas de uma mais geral como (vou arriscar aqui hahaha) artemágico. Uma vez estava respondendo a uma amiga sobre a abstração de uma cadeira e gostei
do que escrevi hahaha. Resgatei aqui para compartilhar com vocês:

Quanto à cadeira, em POO a cadeira pode ser uma classe abstrata que caracteriza o essencial, ainda sem implementação. As classes filhas implementam a classe mãe abstrata (cadeira) colocando em prática (por meio de código) os métodos da classe mãe. As classes filhas também são chamadas de especializações da classe mãe porque implementam a superclasse e acrescentam (ou não) novos métodos. Então se a nossa classe mãe tivesse um único método (sem código) “disporLocalSeguroParaSentar”. Em tese (e no limite) poderíamos especializar a classe mãe cadeira por meio de um local limpo no chão onde a pessoa se sentasse. Mas como está muito longe do senso comum do que seria uma cadeira então precisamos melhorar nossa classe abstrata para que a implementação fique mais próxima do que queremos. Então podemos colocar um campo (atributo) chamado “altura” e um regra que obrigue que seja maior que 20 cm. Agora qualquer implementação fica obrigada a colocar um local seguro para sentar com certa altura. Uma pedra pode especializar a classe mãe desde que a parte dela destinada ao acento fique a pelo menos 20 cm do chão. Se a pedra ainda não atende à nossa ideia comum do que é uma cadeira precisamos incluir mais restrições como um limite de peso para possibilitar a movimentação da cadeira, por exemplo.

1 Like

Exemplo excelente o da cadeira! Eu sempre achei muito complicado entender abstração pq parece algo que é “não natural” na minha mente, mas com esses exemplos assim ajudam demais a entender a base da coisa.

1 Like

Se puder, assiste ao vídeo que fiz sobre o tema. Acho que tem umas coisas bem interessantes lá. Queria muito saber a opinião de vocês.

Que explicação maravilhosa, vou levar para a vida quando disserem que POO é muito difícil de entender ^^

1 Like

#somostodesmagos hahaha :sparkling_heart:

1 Like

Excelentes referências para o assunto, valeu!
Para quem curte pokemon, recomento esse artigo de complemento:
Pokemons ensinam: POO - DEV Community :woman_technologist::man_technologist:

4 Likes