Aluno: Eduardo Ribeiro Silva de Oliveira
Orientador: Prof. Dr. Valdemar W. Setzer
Este trabalho de conclusão de curso propõe o desenvolviemento de um pré-processador para tabelas de decisão (TDs) em Python, em que a abordagem e método de tradução de TDs se baseia na dissertação de Satoshi Nagayama [Nagayama, 1990]. A dissertação apresenta diversos modelos de tradução de TDs, como o switch method, que foi utilizado no pré-processador deste trabalho. Além disso, ressalta-se a relevância da documentação, utilizando uma técnica de auto-documentação do Prof. Dr. Valdemar W. Setzer [Setzer, 1988].
Além disso, o trabalho ressalta a relevância da auto-documentação, utilizando a técnica proposta pelo Prof. Dr. Valdemar W. Setzer [1988]. Essa prática facilita a manutenção do código e promove a colaboração entre desenvolvedores.
A programação, em sua essência, envolve a criação de algoritmos que fazem escolhas com base em condições lógicas. Tradicionalmente, essas escolhas lógicas são implementadas por meio de árvores de decisão com aninhamentos de `if...then...else`, que podem se tornar complexas e difíceis de manter. Nesse contexto, as TDs emergem como uma alternativa poderosa, oferecendo uma forma compacta, gráfica e organizada de especificar escolhas lógicas [\cite{setzer_comunicacao_pessoal}].
Abaixo está um exemplo de tabela de decisão:
Hierarquia | Gestor | Gestor | Gestor | Gestor | Analista | Analista | Analista | Analista |
Setor | Comercial | Comercial | Administrativo | Administrativo | Comercial | Comercial | Administrativo | Administrativo |
Metas atingidas | Y | N | Y | N | Y | N | Y | N |
Inscrição em cursos de desenvolvimento | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 |
Bonificação de 5% do salário | - | - | - | - | 2 | 2 | - | - |
Bonificação de 10% do salário | 2 | 2 | - | - | - | - | 2 | 2 |
Bonificação de 15% do salário | - | - | 2 | 2 | - | - | - | - |
3 dias de folga | 3 | - | 3 | - | 3 | - | 3 | - |
hierarquia = '' setor = '' meta_atingida = '' def inscreve_em_cursos(): print(f'Funcionário inscrito em cursos de desenvolvimento') def define_bonificacao(valor:int): print(f'Funcionário recebe bonificacção de {valor}% do salário') def atribui_3dias_de_folga(): print(f'Funcionário recebe 3 dias de folga') if __name__ == '__main__': hierarquia = input('').upper() setor = input('').upper() meta_atingida = (input('').upper() == 'Y') #TD decision table td_estrutura_de_incentivos #TD sets #TD hierarquia_gestor {"GESTOR"} #TD hierarquia_analista {"ANALISTA"} #TD setor_comercial {"COMERCIAL"} #TD setor_administrativo {"ADMINISTRATIVO"} #TD conditions #TD hierarquia hierarquia_gestor hierarquia_gestor hierarquia_gestor hierarquia_gestor hierarquia_analista hierarquia_analista hierarquia_analista hierarquia_analista #TD setor setor_comercial setor_comercial setor_administrativo setor_administrativo setor_comercial setor_comercial setor_administrativo setor_administrativo #TD meta_atingida Y N Y N Y N Y N #TD actions #TD inscreve_em_cursos() 1 1 1 1 1 1 1 1 #TD define_bonificacao(5) 0 0 0 0 2 2 0 0 #TD define_bonificacao(10) 2 2 0 0 0 0 2 2 #TD define_bonificacao(15) 0 0 2 2 0 0 0 0 #TD atribui_3dias_de_folga() 3 0 3 0 3 0 3 0 #TD end table
hierarquia = '' setor = '' meta_atingida = '' def inscreve_em_cursos(): print(f'Funcionário inscrito em cursos de desenvolvimento') def define_bonificacao(valor:int): print(f'Funcionário recebe bonificacção de {valor}% do salário') def atribui_3dias_de_folga(): print(f'Funcionário recebe 3 dias de folga') if __name__ == '__main__': hierarquia = input('').upper() setor = input('').upper() meta_atingida = (input('').upper() == 'Y') #2[ #2 #TD decision table td_estrutura_de_incentivos #2 #TD sets #2 #TD hierarquia_gestor {"GESTOR"} #2 #TD hierarquia_analista {"ANALISTA"} #2 #TD setor_comercial {"COMERCIAL"} #2 #TD setor_administrativo {"ADMINISTRATIVO"} #2 #TD conditions #2 #TD hierarquia hierarquia_gestor hierarquia_gestor hierarquia_gestor hierarquia_gestor hierarquia_analista hierarquia_analista hierarquia_analista hierarquia_analista #2 #TD setor setor_comercial setor_comercial setor_administrativo setor_administrativo setor_comercial setor_comercial setor_administrativo setor_administrativo #2 #TD meta_atingida Y N Y N Y N Y N #2 #TD actions #2 #TD inscreve_em_cursos() 1 1 1 1 1 1 1 1 #2 #TD define_bonificacao(5) 0 0 0 0 2 2 0 0 #2 #TD define_bonificacao(10) 2 2 0 0 0 0 2 2 #2 #TD define_bonificacao(15) 0 0 2 2 0 0 0 0 #2 #TD atribui_3dias_de_folga() 3 0 3 0 3 0 3 0 #2 #TD end table #2] def decision_table_td_estrutura_de_incentivos() ->None: I_0 = 0 #Inicialização do auxiliar da condição hierarquia I_1 = 0 #Inicialização do auxiliar da condição setor I_2 = 0 #Inicialização do auxiliar da condição meta_atingida I = 0 #Inicialização do número da regra if hierarquia in set(["GESTOR"]): I_0 = 0 elif hierarquia in set(["ANALISTA"]): I_0 = 1 if setor in set(["COMERCIAL"]): I_1 = 0 elif setor in set(["ADMINISTRATIVO"]): I_1 = 1 if meta_atingida == True: I_2 = 0 elif meta_atingida == False: I_2 = 1 I = (2*2*1)*I_0 + (2*1)*I_1 + (1)*I_2 match I: case 0: inscreve_em_cursos() define_bonificacao(10) atribui_3dias_de_folga() case 1: inscreve_em_cursos() define_bonificacao(10) case 2: inscreve_em_cursos() define_bonificacao(15) atribui_3dias_de_folga() case 3: inscreve_em_cursos() define_bonificacao(15) case 4: inscreve_em_cursos() define_bonificacao(5) atribui_3dias_de_folga() case 5: inscreve_em_cursos() define_bonificacao(5) case 6: inscreve_em_cursos() define_bonificacao(10) atribui_3dias_de_folga() case 7: inscreve_em_cursos() define_bonificacao(10) case _: exit() decision_table_td_estrutura_de_incentivos()
O pré-processador desenvolvido foi capaz de traduzir TDs em código Python executável, utilizando o método de tradução switch method, foi projetado usando o Strategy Pattern[Freeman et al., 2004], possibilitando a fácil extensão de novos métodos de tradução; A modularidade do sistema permitiu uma fácil manutenção e evolução do projeto; E a integração de práticas de auto-documentação foi outro marco importante do trabalho por acarretar em uma documentação clara, atualizada e concisa.