leandronsp Profile picture
Aug 4 17 tweets 6 min read
☕️ O quê é OOP?

Sei que vocês estão cansados de ver artigos e threads do tipo, mas vamos nesta 🧵 de 15 passos tentar dissecar algumas características primordiais de OOP através de uma simulação de OOP em, isso mesmo, Bash script.

OOP em Bash, a thread 👇
Se você não tem hábito em Bash script, não há problema.

Os conceitos aqui explicados não exigem conhecimento avançado de Bash, a ideia é apenas tentar entender e simular OOP.
Para implementar OOP, precisamos obedecer algumas regras elementares:

* ter uma forma de representar o estado do objeto
* permitir execução dinâmica de ações no objeto

Claro que há mais coisas envolvidas, mas estas 2 são primordiais para se ter um mínimo de OOP.
Com Bash, conseguimos cumprir estas 2 regras? Vamos tentar demonstrar aos poucos, começando pela primeira.

Criamos então uma estrutura (função, pois não existem classes em Bash) que irá representar o template de um objeto
Okay. Agora, vamos ver como seria a uma potencial utilização desta função para criarmos objetos.

Basicamente é passar argumentos para a função.

"$1": tipo do objeto
"$2": referência para o objeto

demais args: key-pair que deve representar o estado inicial do objeto
Para fazer este truque funcionar, a função Object deve iterar por todos os args e criar o estado do objeto.

Mas onde fica tal estado, uma vez que Bash não é OOP?

Podemos deixar no estado global do script (credo, eu sei), onde cada atributo precede com a referência do objeto
Okay, resolvemos a primeira regra, garantindo que o objeto tem um estado único e acessível (mas infelizmente global devido à característica léxica da linguagem).

E quanto à segunda regra, a ~execução dinâmica de ações no objeto~, ou comportamento?

Algo assim hipoteticamente:
Mas "chamar uma função" em um objeto não é possível, pois Bash não tem ~escopo léxico~, que é uma característica importante para que tenhamos o despacho dinâmico de mensagens em tempo de execução.

Entretanto podemos recorrer a outro truque.
Dá pra guardar a função em uma variável associada ao objeto, e *posteriormente* passar a referência desse mesmo objeto para a função, que será então executada.

Começamos por definir, na criação do objeto, um argumento a mais que representará o comportamento.
Então, definir a função em si que recebe a referência do objeto como primeiro argumento
Para então, modificar Object que agora também precisa saber fazer parse do argumento "fn_xxxx" que representa uma função do objeto, e guardar a referência da função em um atributo global de account (por isto o kind)
Com isto, podemos começar a criar objetos e chamar a função display neles.

Super YAY, mas dá pra melhorar isto.
Indo além, dá pra criar outra função chamada "Account", que será um wrapper para criação de objetos do tipo Account, assim dá pra agrupar todas as funções relacionadas à account dentro desta mesma estrutura.

Tá parecendo uma classe em OOP, não? :P
Implementação completa de Object
Agora, é só brincar com OOP em Bash
O código completo bem como uma explicação mais detalhada em inglês está neste Gist:

gist.github.com/leandronsp/5e7…

A ideia desta thread foi mostrar como que com 2 truques em Bash conseguimos simular 2 características primordiais de OOP.

Dá aquele RT maroto, gratidão ♥️
artigo quentinho publicado no #DEVCommunity

dev.to/leandronsp/sim…

• • •

Missing some Tweet in this thread? You can try to force a refresh
 

Keep Current with leandronsp

leandronsp Profile picture

Stay in touch and get notified when new unrolls are available from this author!

Read all threads

This Thread may be Removed Anytime!

PDF

Twitter may remove this content at anytime! Save it as PDF for later use!

Try unrolling a thread yourself!

how to unroll video
  1. Follow @ThreadReaderApp to mention us!

  2. From a Twitter thread mention us with a keyword "unroll"
@threadreaderapp unroll

Practice here first or read more on our help page!

More from @leandronsp

Aug 4
ultimamente to numa de impulsionar conteúdo bom, então vou deixar na thread links de blogs (dos que acompanho no dev.to) de pessoas que eu sigo por lá.

quem tiver links pra compartilhar, manda aqui também 💪

🧵
simplesmente a melhor.

sou fã do conteúdo que a @anakbns produz e da forma que ela explica as coisas. pra não mencionar que já tive a honra de trabalhar junto :P

dev.to/anakbns
esse aqui, o fera do Linux @____Marcell

dev.to/____marcell
Read 9 tweets
Jul 27
🧦 Se você quer entender o que são Network Sockets, como funcionam e qual sua relação com a famosa Internet, acompanha esta 🧵 em 25 passos 👇
É preciso antes ter uma noção do que são standard streams, file descriptors e pipes.

Se você não tem familiaridade com esses termos, dá uma olhada nessa sequência que criei dias atrás e depois volta aqui 👇

Named pipes (recap)

Para entender o que é um socket, vamos lembrar dos named pipes, que são arquivos FIFO compartilhados *entre dois processos*.

O "server" fica bloqueado até que alguma mensagem de outro processo seja escrita no pipe.
Read 27 tweets
Jul 19
💻 Mais uma thread 🧵sobre processos em sistemas UNIX-like.

Desta vez vamos entender um pouco mais sobre file descriptors, named pipes e *tee* 🫖 🥁.

Por isto, busque um ☕️ ou chá e venha tranquile que são 17 passos 🧵👇 Image
Se você não viu a outra thread sobre *standard streams* e redirecionamento de streams, sugiro primeiro ver a outra e depois voltar para esta 👇

1/17

Standard Streams (recap)

Cada processo tem acesso aos 3 principais file descriptors que representam as standard streams.

0: STDIN
1: STDOUT
2: STDERR

2/17 Image
Read 21 tweets
Jul 14
💻 Em sistemas operacionais baseados em UNIX, processos são isolados e têm seu próprio espaço de memória.

Como eles se comunicam?

Nesta 🧵, em 20 passos vou explicar sobre standard streams e mostrar algumas formas de comunicação entre processos🕸️

1/20
Tendo como exemplo o programa "echo", e uma vez que o processo é isolado, como a mensagem aparece no screen?

2/20
FD

Através de *file descriptors* (fd), que são arquivos especiais numerados do filesystem.

Por padrão, todo processo tem um canal de saída chamado STDOUT que utiliza o fd 1.

Este canal faz parte de uma funcionalidade chamada *standard streams*.

3/20
Read 20 tweets
May 17
Sempre quis saber o quê é e como funciona uma tabela hash?

Então em 20 steps tento mostrar um problema e também como implementar uma hash table passo-a-passo em Ruby :foguinho: e :navinha:

🧵
Começamos por definir um algoritmo do maior número em uma lista utilizando nested loops (loop dentro de loop).

Utilizando o benchmark do Ruby, para 10 mil elementos na lista, leva-se 3.63 segundos para encontrar o maior número.

1/
Qual o problema com esta abordagem?

A operação com nested loops faz com que, p/ cada elemento da lista, é feito um novo "ciclo" com todos os elementos da lista novamente, fazendo com q a operação seja quadrática O(n^2)

2/
Read 24 tweets
Apr 12
Como entender volumes no Docker e fazer o melhor uso para experimentar em ambiente de desenvolvimento, *painless*

👉 Mastering Docker Volumes { by @leandronsp } from @hashnode

#docker #containers #linux leandronsp.com/mastering-dock…
E pra quem ainda não viu, tenho mais 2 artigos sobre Docker

1. "Thinking like containers" leandronsp.com/thinking-like-…

2. "Docker in development, the right way" leandronsp.com/using-docker-i…
"ah blz fera, mas como faz deploy no GCP com Kubernetes e Pulumi usando essas paradas aí de IaC?"

👉 Rodando NGINX no Google Kubernetes Engine utilizando IaC com Pulumi e Typescript *em 7 passos*, a thread
Read 4 tweets

Did Thread Reader help you today?

Support us! We are indie developers!


This site is made by just two indie developers on a laptop doing marketing, support and development! Read more about the story.

Become a Premium Member ($3/month or $30/year) and get exclusive features!

Become Premium

Don't want to be a Premium member but still want to support us?

Make a small donation by buying us coffee ($5) or help with server cost ($10)

Donate via Paypal

Or Donate anonymously using crypto!

Ethereum

0xfe58350B80634f60Fa6Dc149a72b4DFbc17D341E copy

Bitcoin

3ATGMxNzCUFzxpMCHL5sWSt4DVtS8UqXpi copy

Thank you for your support!

Follow Us on Twitter!

:(