Votação

O que vocês fazem na ausencia do Haitou Animes??

31% 31% [ 105 ]
8% 8% [ 28 ]
13% 13% [ 44 ]
4% 4% [ 12 ]
7% 7% [ 22 ]
7% 7% [ 23 ]
17% 17% [ 56 ]
9% 9% [ 30 ]
5% 5% [ 18 ]

Total dos votos : 338


Gambi Design Patterns

Ver o tópico anterior Ver o tópico seguinte Ir em baixo

Gambi Design Patterns

Mensagem por makotosan em 12/1/2011, 20:27

Padrão de Projeto Gambis

As Soluções Técnicas de Contorno ou Engenharias de Emergência (aka. gambiarras) podem ser aplicadas de várias formas. No entanto, não há ainda consenso entre desenvolvedores e analistas acerca de padrões de projeto para desenvolvimento orientado a gambiarras. Uma prática muito comum é criação de uma entidade específica, com o intuito único de prover uma funcionalidade emergencial a um sistema. Não são raros os casos de utilização de classes "gambiarra.java", "agoravai.java", "funcionapeloamordedeus.java", métodos "void ajeita()", "public String bruto()" e afins. Em alguns casos, métodos com nome sofisticados como "setMagicOn()" e "setApellationMode(true)" também são utilizados para dar um ar mais profissional. Também para tornar o código mais amigável e legível alguns programadores fazem uso abusivo do MO de métodos, utilizando nomes como "check"(), "checka()", "xeka()" ou "pussy()". São os chamados Gambiwares, componentes de software que promovem a entrega de projetos com o mínimo de atraso possível.

Nesta técnica as linhas de comentário devem ser evitadas ou proibidas. Em caso de extrema necessidade o uso de línguas como hebraico ou tupi-guarani é recomendado.

A técnica mais usada pelos programadores POG é usar sempre softwares que fazem todo serviço para ele e, claro, o Google para pegar scripts prontos e usar. Os programadores POG sempre são mais rápidos que o normal e cobram mais barato, enquanto que os outros programadores precisam cobrar mais caro pelo serviço porque eles sempre se enrolam e não conseguem entregar nada no prazo.

As métricas e estimativas da Programação Orientada a Gambiarras provêm das metodologias de medição de software denominadas Conceito Holístico Unilateral para Tipificação Estrutural, mais conhecido pela sua abreviação: C.H.U.T.E. e Cálculo Hipotético Usando Técnicas Estatísticas, mais conhecido pela sua abreviação: C.H.U.T.E..


Gambi Design Patterns catalogados

Zé do Caixão, ou "À Meia Noite Rodarei o teu Script"

É o tipo de código que faz um bocado de absurdos, como apagar logs e outros arquivos que possam comprometer o desenvolvedor do sistema (que por "acaso" é uma merda), todo dia à meia noite. Em alguns casos, é tão subversivo, que funciona como um vírus, e é possível que alguns antivírus detectem como tal.

Global Manual Counter

Padrão aplicado para quem não conhece variaveis globais (ou não consegue aplica-las em sua linguagem). Trata-se de criar uma classe utilizada só para contar. Ex:

Código:
class contador{
  public static $c = 0;
}
Para utilizar:

Código:
echo contador::$c++;

1234 Reorder

Código feito para quem precisa inverter a string "1234"! Muito comum hoje, nas provas seletivas em empresas. SIM ESTE CÓDIGO ESTAVA EM UMA PROVA!

Código:
funtion string Inverte_valor()
{
    string valor;
    valor = "1234";
    return "4321";<
}

Programação Keep Walking

É um estilo de produção de código rápido. O código de 10 dias é gerado em alguns minutos, com lógica avançada e estrutura complexa. Talvez não funcione. Uma das característica desse estilo é o a frequente reinvenção da roda e substituição de variáveis por letras do alfabeto. Exemplo:
Código:
// conta itens
$c = 0;
foreach($a as $val){
 $c++;
}
return $c;

Sleeper / Human Factor

Imagine que o POGramador precise criar uma tela que mostre o progresso de uma operação. Um problema muito comum é que determinadas operações executam muito rápido, impedindo que o usuário veja a tela de progresso. Então, para que o usuário tenha a certeza de que algo está sendo executado, o algoritmo é modificado intencionalmente para que este execute de forma mais ineficiente. Este pattern também é conhecido como Human Factor, pois é nada mais que uma tentativa de demonstrar o esforço computacional de uma tarefa em uma medida humanamente perceptível, implementando avançados conceitos de usabilidade. Isso prova que, ao contrário dos programadores convencionais, os programadores POG pensam no bem-estar dos seus usuários.

Código:
public class MedidorDePOGresso implements Runnable {
  public void run() {
      while (true) { // Até terminar o processo..
       
        // Realiza um processamento rápido aqui...

        try {
            Thread.sleep(1000); // ... e ferra com a performance aqui
        }
        catch (InterruptedException exc) {}

        // Atualiza a ProgressBar
        progress.setValue(blablabla.getPorcentagem());
    }
  }
}

Abaixo segue um exemplo real. O detalhe é que, originalmente, ele tinha sido implementado sem o sleep, o que foi adicionado posteriormente sob solicitação dos usuários:

Código:
    public function action_sorteiar(){

        //aqui você implementa o eficiente algoritmo de sorteio de Fisher–Yates O(n)
        $this->realizarSorteio();

        //aqui você leva em conta o fator humano
        sleep("5");

        $this->request->response = View::factory('sorteio_realizado');
    }



QPÉ

Mais conhecido como "Que p* é essa!?" ou ainda WTF (What'a'fuck) ou WTH (What'a'hell). É aquele código que você sabe como funciona, mas depois do resultado pronto olha para aquela merda e não quer nem saber como vão dar manutenção depois! Exemplo:

"/ .*?< ".replaceAll("","").trim();

Outro exemplo interessante retirado de um sistema real em produção.

Código:
private static void setDayOfMonth(Calendar calendar, int day)
    {
        calendar.setLenient(false);
       
        Date date = null;
        int offset = 0;
        while (date == null)
        {
            calendar.set(Calendar.DAY_OF_MONTH, day - offset);
            try
            {
                date = calendar.getTime();
            }
            catch (IllegalArgumentException e)
            {               
               System.out.println("offset = " + offset);
                offset++;               
            }
        }       
    }


Programação Orientada a Estagiário

Consiste na capacidade do analista de sistemas sobrecarregar o estagiário ou o técnico mais próximo com todas as suas funções, desde interação com clientes até desenvolvimento de casos de uso e bancos de dados, aproveitando ao máximo toda a energia gambiarrizadora que essas criaturas possuem. Sabendo que fica mais fácil para o programador entender e realizar a POGização do sistema se ele conversar diretamente com o usuário, o analista sabiamente permite que o programador realize os contatos com o cliente, permitindo assim que o analista realize funções que condizem mais ao seu cargo, como acessar a desciclopédia ou ficar o dia inteiro na cantina, por exemplo. Além do mais, o contato do programador com o usuário economiza papel e tinta de impressora, pois a parte da documentação impressa é nula, já que o analista não participa do processo e assim não gera as toneladas de folhas com diagramas e especificações. O acoplamento do sistema é muito maior, pois foi desenvolvido por uma única pessoa, facilitando na manutenção, pois existem poucas classes para serem modificadas (no máximo cinco, para programas muito complexos).

O resto do texto se encontra no link abaixo

http://desciclo.pedia.ws/wiki/Gambi_Design_Patterns
avatar
makotosan
WebMaster

Mensagens : 288
Data de inscrição : 20/05/2010
Idade : 38
Localização : Curitiba

Ver perfil do usuário http://lista.mercadolivre.com.br/_CustId_34531442

Voltar ao Topo Ir em baixo

Ver o tópico anterior Ver o tópico seguinte Voltar ao Topo

- Tópicos similares

 
Permissão deste fórum:
Você não pode responder aos tópicos neste fórum