Diferença entre idioma e padrão de design?

39

Qual é a diferença entre o idioma e o padrão de design? Parece que essas terminologias se sobrepõem em algum lugar; onde exatamente eu não sei. Eles são intercambiáveis? Quando devo usar o quê?

Aqui é uma lista de idiomas C ++. Posso chamá-los de padrões de design?

Wikipedia define,

Programming Idiom as a low-level Design Pattern

O que isso significa? O que "baixo nível" significa aqui?

Esta questão é inspirada em outra pergunta: link

    
por Nawaz 08.09.2011 / 08:20
fonte

10 respostas

30

Uma expressão idiomática é uma ideia para contornar as peculiaridades de um idioma. Alguns exemplos que vêm à mente são alguns dos idiomas do C ++ que você vinculou na pergunta original. Eles resolvem um problema comum nessa linguagem de forma enlatada.

Um padrão de projeto é semelhante, na medida em que resolve um problema comum. Mas o padrão ideal de design é baseado em características comuns de linguagem e, portanto, é agnóstico em termos de linguagem.

Existe um continuum entre idiomas e padrões de design, assim como existe de linguagens de baixo nível a linguagens de alto nível.

O padrão Visitor é um bom exemplo; se houvesse apenas um idioma que apenas suportasse o despacho dinâmico único, poderíamos considerar o padrão Visitor como um idioma desse idioma. Mas há hordas inteiras de idiomas que não suportam diretamente o envio múltiplo. Assim, o padrão Visitor nasceu.

O padrão Observer também vem à mente - o C # o suporta diretamente, portanto, não precisa da forma comum de contornar o padrão.

Um exemplo indo na outra direção é o OO (herança, polimorfismo, etc). C não suporta diretamente eles. Se mais linguagens fossem como C, então poderíamos desenvolver padrões de projeto para implementar v-tables, type-safety, etc. Já que muitos idiomas suportam esses recursos, nós chamamos qualquer solução comum em C um idioma, ao invés de chamar o generalizado. solução um padrão de design.

    
por 08.09.2011 / 09:39
fonte
37

Padrões de design não costumam ser específicos da linguagem. As expressões idiomáticas tendem a depender de uma característica particular de uma língua (ou classe de línguas) ou a contornar uma deficiência específica na (s) referida (s) língua (s).

    
por 08.09.2011 / 08:33
fonte
12

Eu não colocaria muita moeda na definição da Wikipedia.

No mínimo, uma expressão idiomática é específica do idioma, enquanto um padrão de design esforça-se ou deve se esforçar para ser agnóstico de linguagem. Indo mais longe, as expressões idiomáticas são geralmente convenções para melhorar a legibilidade, ou são a alternativa superior (em algum mérito técnico) quando há mais de uma maneira de fazer alguma coisa. Todas essas coisas estão relacionadas a como as idéias são expressas (clareza, verbosidade, concisão), mas não às idéias em si.

Por outro lado, os padrões de design são a essência de uma ideia recorrente, uma ideia que a priori pode ser expressa em qualquer idioma que se aplique a ela. O Visitante é uma implementação de despacho duplo que depende de despacho único e sobrecarga e isso pode ser usado em qualquer idioma que tenha despacho único e sobrecarga. Saber sobre o padrão não ajuda a escrever códigos mais expressivos ou mais legíveis, ajuda a resolver o problema relacionado. Não há nada de idiomático sobre isso, porque, por exemplo, não há forma canônica do Visitante em, e. C ++.

    
por 08.09.2011 / 08:38
fonte
6

A definição normal de inglês do idioma. É uma frase cujo significado aceito não está contido nas palavras usadas. Exemplos seriam "Chovendo gatos e cachorros" ou "Onde está a carne?"

Em linguagens de programação, ele geralmente se refere a um atalho sintático que faz algo não imediatamente óbvio a partir do próprio código, mas que é usado com freqüência suficiente para que outros programadores reconheçam o significado instantaneamente.

Perl é talvez a linguagem mais idiomática. Com construções como:

while (<IN>) {
    print $_
}

Cujo significado é óbvio para um programador perl experiente, mas um mistério para qualquer outra pessoa

    
por 08.09.2011 / 08:41
fonte
2

As expressões idiomáticas são específicas da linguagem. Por exemplo. while (*dest++=*src++); é uma linguagem C / C ++. É completamente impossível escrever algo remotamente semelhante em Pascal ou Java. Use a palavra "idiom" como você a usa em inglês. "Como vai?" como uma saudação é uma expressão idiomática. Algumas linguagens como german e frensh têm o mesmo idioma. Mas muitas outras línguas não "pedem" algo como uma saudação. Um padrão (orientado a objetos), por outro lado, geralmente pode ser adaptado em qualquer linguagem que suporte herança e delegação. Uma expressão idiomática pode ser tão simples quanto uma linha de código. Um padrão de design sempre envolve várias classes.

    
por 26.09.2011 / 14:27
fonte
2

Eu encontrei este post pesquisando por idiomas comuns em C ++, já que tenho me aprofundado bastante nele recentemente e gostaria que meu código não parecesse tão amadorístico quanto eu sinto que é ... :-P

Tendo passado bastante tempo com o Perl, descobri que expressões idiomáticas nessa linguagem são muito parecidas com aquelas encontradas em linguagens naturais, como o inglês ou o espanhol (apenas duas eu conheço bem o suficiente para conhecer algumas expressões idiomáticas).

Eu discordo que um idioma é como um "padrão de design pequeno". Eu ainda discordo, embora menos, que uma expressão idiomática é uma maneira de contornar uma deficiência em uma linguagem.

Talvez a resposta de Luc Danton chegue mais perto, mas deixe-me explicar. Eu acho que um idioma é, bem, idiomático daqueles que usam a linguagem. Normalmente, uma expressão comum ou sequência de expressões que, embora não seja óbvia, realiza uma operação ou expressa intenção de uma forma que faça sentido para aqueles que são suficientemente fluentes para ter visto isso antes. >

De volta a Perl, talvez o idioma mais conhecido seja a " Schwartzian Transform ", uma expressão que realiza uma classificação em dados de forma compacta e eficiente. Não é a maneira mais óbvia de realizar tal operação, mas é sucinta e aqueles que a viram antes sabem instantaneamente o que ela está fazendo.

Outro exemplo notável é " A manobra dos orcs ", que tira proveito das noções de perl sobre verdadeiro / falso, operadores ricos e precedência do operador.

Um que eu pessoalmente gosto bastante é um pouco relacionado com a Manobra dos Orcs, mas eu não conheço nenhum nome para isso:

push @{ $some_hash{$key} ||= [] }, $some_value;

Na verdade, isso não é ofuscação, mas sim uma expressão clara e compacta de algo que, de outra forma, levaria várias linhas a serem feitas. Se a chave estiver presente no hash e tiver um valor real, desmarque-a como uma matriz e insira $ some_value nessa matriz. Se o elemento hash não estiver presente ou tiver um valor falso, atribua a ele uma matriz vazia, desrefere essa matriz e faça o push.

É importante notar também que, a partir do Perl 5.14, parte deste idioma é obsoleto - o push agora pode operar diretamente na referência do array, não é necessário {@}! Além disso, a partir do Perl 5.10, pode-se usar // = ao invés de || =, que verifica não a verdade, mas a definição.

    
por 17.10.2011 / 17:25
fonte
0

o ponto de uma Idiom é ser uma idéia ou conceito que abrange linguagens de programação, é uma maneira de fazer as coisas e um processo que funciona sem muita reestruturação conceitual quando você tira isso de um e o coloca em outro, como o humilde bolha tipo. Padrões de design são implementações específicas de um idioma, ou extensões da ideia para se encaixar em uma linguagem, portanto, você tem o padrão de design de javascript do idioma event-listener etc.

    
por 08.09.2011 / 08:31
fonte
0

Não tenho 100% de certeza, mas expressões idiomáticas são simplesmente termos pertencentes a um determinado campo. Quando você diz "design patterns", você pensa em "Observer Pattern" "Cadeia de responsabilidade" "Visitor pattern" "factory". Esses são padrões comuns usados para resolver problemas comuns na programação. Procure aqui uma lista abrangente: link

    
por 08.09.2011 / 08:31
fonte
0

What does it mean? What does "low-level" mean here?

Acredito que não é uma maneira abstrata e de alto nível de modelar seu aplicativo ou componentes de seu aplicativo, mas sim um uso inteligente ou comum da semântica de linguagem.

por exemplo, definindo uma variável se ela for avaliada como falsa (geralmente usada para definir variáveis nativas condicionalmente):

var ||= some_default_value
    
por 08.09.2011 / 08:32
fonte
0

Aqui está um exemplo de uma expressão idiomática (em C #) para manipular um evento. Você não tem permissão para disparar um evento se ele não tiver nenhum manipulador anexado, então o idioma é sempre verificar isso primeiro.

Portanto, o idioma geral para manipular eventos se torna:

EventHandler handler = this.MyEvent;
if ( null != handler ) { handler( param1, param2 ); }

Esse idioma é específico (embora não exclusivo) para a linguagem C #.

Mais geralmente, no entanto, o mecanismo de eventos C # é um exemplo do padrão de design observador que pode ser implementado em qualquer idioma .

    
por 08.09.2011 / 08:49
fonte