Postagem em destaque

Criando bot do Telegram em Shell script com ShellBot

Simulando programação orientada a objeto.

Programação orientada a objetos e que também é reconhecida pela sigla POO, é um modelo de programação de sistemas de software baseado na composição e interação entre diversas unidades. O Shell não possui suporte a este tipo de modelagem, pois a base de sua programação é realizada entre PIPES '|', ou seja, os comandos são empilhados para tratamento da saída do comando que o antecede. Mas isso não significa que não podemos simular uma.

A simulação será aplicada em cima de um comando, onde irei transformar seus parâmetros em métodos e seus argumentos em propriedades.

O comando escolhido para essa experiência foi o yad, que é uma ferramenta via linha de comando que permite ao usuário criar interfaces gráficas (GUI) em GTK e implementar em seu script.




Classe Métodos e propriedades
As classes com seus métodos e propriedades
calendar day, month, year, details, date_format
general title, window_icon, width, height, geometry, timeout, timeout_indicator, text, text_align, image, image_on_top, icon_theme, expander, button, no_buttons, buttons_layout, no_markup, borders, always_print_result, selectable_labels, sticky, fixed, on_top, center, mouse, undecorated, skip_taskbar, maximized, fullscreen, plug, tabnum, kill_parent, print_xid, image_path
color color, init_color, palette, extra
dnd tooltip, command
entry entry_label, entry_text, hide_text, completion, numeric, editable, licon, licon_action, ricon, ricon_action
file filename, multiple, directory, save, separator, confirm_overwrite, file_filter, add_preview, quoted_output
font fontname, preview
form field, align, columns, separator, item_separator, date_format, scroll, quoted_output
icons read_dir, compact, generic, listen, item_width, term, sort_by_name, descend, single_click
list no_headers, column, checklist, radiolist, no_click, separator, multiple, editable, print_all, ellipsize, print_column, hide_column, expand_column, search_column, tooltip_column, limit, dclick_action, regex_search, listen, quoted_output
multi_progress bar, vertical, align, auto_close, auto_kill
notebook key, tab, tab_pos, tab_borders
notification command, listen, separator, item_separator, menu, no_middle, hidden
print filename, type, headers, print_add_preview, fontname
progress progress_text, percentage, pulsate, auto_close, auto_kill, rtl, enable_log, log_expanded, log_on_top, log_height
scale value, min_value, max_value, step, page, print_partial, hide_value, vertical, invert, mark
text fore, back, fontname, wrap, justify, margins, tail, filename, editable, show_uri, listen
Mantive a nomenclatura original dos parâmetros.

Antes de começar vou mostrar a forma convencional do comando na passagem dos parâmetros.

Criando uma janela simples com o título 'Minha janela'.

$ yad --form --title 'Minha janela'

 

Foi exibido uma janela com o título 'Minha Janela', contendo os botões padrões (OK e Cancelar).

Imagine que eu precise adicionar um texto ao corpo da janela. Para isso preciso digitar novamente a linha de comando inserindo o parâmetro '--text'.
$ yad --form --title 'Minha janela' --text 'Esse é o texto da minha janela.'

O texto foi inserido no top do formulário principal.

Digamos que ao invés de dois botões (Cancelar e OK) eu precise de um único botão de configurações. Basta usar o parâmetro '--button' para inserir o botão desejado.
$ yad --form --title 'Minha janela' --text 'Esse é o texto da minha janela.'--button 'Configurações'

Os dois botões que haviam foram substituídos por um único botão de 'configurações', a nossa janela começa a ganhar vida e ao mesmo tempo sua linha de comando comprimento.

Claro que não vou abordar todos os parâmetros do yad aqui; é simplesmente para lhe dar uma noção de como ele funciona.

Você pode perceber que quanto mais trabalhada é a janela, maior será sua linha de comando. Quando se está trabalhando com yad, na maioria dos casos o uso da barra invertida '\' para quebra de linha é indispensável.

Bom, agora que você tem uma pequena  noção do que é o o comando yad, vamos partir para aplicação da orientação a objeto. Criei uma biblioteca em shell puro chamada dê wyad.sh, onde as "classes" estão declaradas com um conjunto de funções que simulam os "mêtodos" e "propriedades" da mesma.

Para começar, precisamos importar nossa 'biblioteca' usando o comando source ou executando normalmente.
(O código-fonte do wyad.sh está disponível no final da postagem).

Importando

$ source wyad.sh
Uma vez importada, todas as 'classes' ficaram disponíveis.

Agora precisamos instanciar nossa 'classe'.


Sintaxe
$ <classe> nome_da_classe

Vou criar uma 'classe' do tipo 'form' e com o nome 'janela'.
$ form janela

Ao criar a classe 'janela', basta digitar o nome da nova classe e pressionar [TAB] e então será exibida a lista acima; mostrando todos os métodos e propriedades herdados da classe 'form' e 'general'. A classe 'general' é herdada por qualquer classe criada; pois ela contém os métodos e propriedades padrões de uma janela.

Agora vamos criar nossa janela definindo os valores de suas propriedades.
$ janela.title 'Minha janela'

$ janela.text 'Texto inserido com orientação a objeto.'
$ janela.button 'Configurações'

Para exibir a janela basta chamar o método 'show'
$ janela.show

Note a forma como criei a janela, definindo os valores das propriedades um por linha.

Ficou até parecendo uma outra linguagem. 😂😂😂

Talvez você deve estar pensando.
- Qual a vantagem nisso ?

Lembra que anteriormente sempre que realiza uma alteração na janela, tinha que digitar tudo de novo ? Então, agora eu só preciso atuar em cima da propriedade que desejo.

Exemplo

Imagine que preciso alterar o texto no corpo da janela. Agora basta alterar somente o valor da propriedade 'text' e reexibir a janela.

Alterando valor

$ janela.text 'Tem um novo texto agora.'
$ janela.show

Somente a propriedade 'text' sofreu alterações.

Você também pode obter o valor de uma propriedade; basta digitar somente o nome da classe seguido da propriedade que deseja.

Obtendo valor.

$ janela.text


Ou se quiser, pode armazenar o valor em uma variável.
$ var=$(janela.txt)


Para deletar uma classe criada:
$ janela.del

ou

$ wyad.__del__ janela

Após executar o método 'del' a classe deixa de existir.

Para visualizar ou baixar o código-fonte do wyad.sh clique aqui.

Jamais se esqueçam, a beleza e a mágica do Shell está nos PIPES.

Bom, espero que você tenham curtido e explore os métodos das outras classes. E se por intermédio dessa postagem vier a oportunidade de estudar e se aprofundar no comando yad, não pensem duas vezes.

Comentários

Contato

Nome

E-mail *

Mensagem *