¿Diferencia entre el idioma y el patrón de diseño?

39

¿Cuál es la diferencia entre idioma y patrón de diseño? Parece que estas terminologías se superponen en alguna parte; donde exactamente, no lo se ¿Son intercambiables? ¿Cuándo debo usar qué?

Aquí hay una lista de los Modismos en C ++. ¿Puedo llamarlos patrones de diseño?

Wikipedia define,

  

El lenguaje de programación como un patrón de diseño de bajo nivel

¿Qué significa? ¿Qué significa "bajo nivel" aquí?

Esta pregunta está inspirada en otra pregunta: enlace

    
pregunta Nawaz 08.09.2011 - 08:20

10 respuestas

30

Una expresión idiomática es una idea para trabajar alrededor de las peculiaridades de un idioma. Algunos ejemplos que vienen a la mente son cualquiera de los modismos en C ++ que vinculó en la pregunta original. Resuelven un problema común en ese idioma de forma enlatada.

Un patrón de diseño es similar, ya que resuelve un problema común. Pero el patrón de diseño ideal se basa en características comunes del lenguaje y, por lo tanto, es agnóstico en el lenguaje.

Sin embargo, existe una continuidad entre los modismos y los patrones de diseño, al igual que los lenguajes de bajo nivel a alto.

El patrón de visitante es un buen ejemplo; Si solo hubiera un idioma que solo admitiera el envío dinámico único, entonces podríamos considerar el patrón de Visitador como un idioma de ese idioma. Pero hay hordas enteras de idiomas que no admiten directamente el envío múltiple. Por lo tanto, el patrón de visitante nació.

El patrón Observer también viene a la mente: C # lo admite directamente, por lo que no necesita la forma de solución común del patrón.

Un ejemplo que va en la otra dirección son las características OO (herencia, polimorfismo, etc.). C no los apoya directamente. Si más idiomas fueran como C, entonces podríamos desarrollar patrones de diseño para implementar v-tables, tipos de seguridad, etc. Dado que muchos de los lenguajes son compatibles con esas características, llamaríamos cualquier solución común en C a un idioma, en lugar de llamar a la generalizada. solución a un patrón de diseño.

    
respondido por el Merlyn Morgan-Graham 08.09.2011 - 09:39
37

Los patrones de diseño no suelen ser específicos del idioma. Las expresiones idiomáticas de los idiomas tienden a depender de la característica particular de un idioma (o clase de idiomas) o a solucionar una deficiencia específica en dichos idiomas.

    
respondido por el µBio 08.09.2011 - 08:33
12

No pondría demasiada moneda en la definición de Wikipedia.

Como mínimo, un idioma es específico del idioma, mientras que un patrón de diseño se esfuerza, o debería esforzarse, por ser agnóstico del lenguaje. Yendo más allá, los modismos generalmente son convenciones para mejorar la legibilidad, o son la alternativa superior (por algún mérito técnico) cuando hay más de una forma de hacer algo. Todas esas cosas están relacionadas con la forma en que se expresan las ideas (emite claridad, verbosidad, concisión), pero no con las ideas en sí mismas.

Por otra parte, los patrones de diseño son la esencia de una idea recurrente, una idea que a priori se puede expresar en cualquier idioma que se preste. El Visitante es una implementación de doble despacho que se basa en el despacho único y la sobrecarga, y se puede usar en cualquier idioma que tenga despacho único y sobrecarga. Saber sobre el patrón no ayuda a escribir un código más expresivo o más legible, ayuda a resolver el problema relacionado. No hay nada idiomático al respecto porque, por ejemplo, no hay una forma canónica del Visitante en, por ejemplo, C ++.

    
respondido por el Luc Danton 08.09.2011 - 08:38
6

La definición normal de idioma inglés de Idiom. Es una frase cuyo significado aceptado no está contenido en las palabras utilizadas. Algunos ejemplos serían "Llover gatos y perros" o "¿Dónde está la carne?"

En los lenguajes de programación, por lo general se refiere a un atajo sintáctico que hace algo que no es obvio desde el propio código, pero que se usa con la frecuencia suficiente para que otros programadores reconozcan el significado al instante.

Perl es quizás el lenguaje más rico en idiomas. Con construcciones como:

while (<IN>) {
    print $_
}

El significado de quién es obvio para un programador perl experimentado, pero un misterio para cualquier otra persona

    
respondido por el James Anderson 08.09.2011 - 08:41
2

Los modismos son específicos del idioma. P.ej. while (*dest++=*src++); es un modismo C / C ++. Es completamente imposible escribir algo remotamente similar en Pascal o Java. Use la palabra "idioma" como la usa en inglés. "¿Cómo lo haces?" como un saludo es un modismo. Algunos idiomas como el alemán y frensh tienen el mismo idioma. Pero muchos otros idiomas no "pedirían" algo así como un saludo. Por otro lado, un patrón (orientado a objetos) por lo general se puede adaptar a cualquier idioma que admita herencia y delegación. Un modismo puede ser tan simple como una línea de código. Un patrón de diseño siempre involucra varias clases.

    
respondido por el Angel O'Sphere 26.09.2011 - 14:27
2

Encontré esta publicación en busca de modismos comunes en C ++, ya que he estado profundizando en ella recientemente y me gustaría que mi código no se vea tan aficionado como creo que es ... :-P

Después de haber pasado bastante tiempo con Perl, he encontrado que los idiomas en ese idioma son muy parecidos a los que se encuentran en los idiomas naturales, como el inglés o el español (solo dos lo sé lo suficiente como para saber algunos idiomas). p>

No estoy de acuerdo con que un idioma sea como un "patrón de diseño pequeño". Todavía no estoy de acuerdo, aunque no tanto, de que un modismo sea una forma de solucionar una deficiencia en un idioma.

Quizás la la respuesta de Luc Danton sea la más cercana, pero déjame explicarte. Creo que un idioma es, bueno, idiomático de aquellos que usan el lenguaje. Por lo general, una expresión común o una secuencia de expresiones que, aunque quizás no sean obvias, realizan una operación o expresan la intención de una manera que tenga sentido para aquellos que son fluidos lo suficiente como para haberlo visto antes.

De vuelta a Perl, quizás el lenguaje más conocido es la " Schwartzian Transform ", una expresión que realiza una clasificación Sobre los datos de forma compacta y eficiente. No es la forma más obvia de realizar una operación de este tipo, pero es sucinta y los que la han visto antes saben al instante lo que está haciendo.

Otro ejemplo notable es " The Orcish Maneuver ", que aprovecha las nociones de Perl de verdadero / falso, operadores ricos y precedencia del operador.

Una que a mí personalmente me gusta un poco está relacionada con la Maniobra Orca, pero no conozco ningún nombre para ella:

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

De hecho, esto no es una ofuscación, sino más bien una expresión clara y compacta de algo que de otra manera tomaría varias líneas para hacer. Si la clave está presente en el hash y tiene un valor verdadero, elimine la referencia como una matriz y presione $ some_value en esa matriz. Si el elemento hash no está presente o tiene un valor falso, asígnele una matriz vacía, luego elimine la referencia a esa matriz y realice la inserción.

También vale la pena señalar que a partir de Perl 5.14, parte de este idioma está obsoleto: push ahora puede operar directamente en la referencia de la matriz, ¡no se necesita @ {}! Además, a partir de Perl 5.10, se puede usar // = en lugar de || = que comprueba no la verdad sino la definición.

    
respondido por el Hercynium 17.10.2011 - 17:25
0

el punto de un Idioma es ser una idea o concepto que abarque lenguajes de programación, es una forma de hacer las cosas y un proceso que funciona sin mucha reestructuración conceptual cuando lo toma de uno y lo pega en otro, como el tipo de burbuja humilde. Los patrones de diseño son implementaciones específicas de un idioma, o extensiones de la idea para adaptarse a un lenguaje, por lo tanto, tiene el patrón de diseño javascript del idioma del oyente de eventos, etc.

    
respondido por el shortstick 08.09.2011 - 08:31
0

No estoy 100% seguro, pero los modismos son simplemente términos que pertenecen a un campo determinado. Cuando dice "patrones de diseño", piensa en "Patrón de observador" "Cadena de responsabilidad" "Patrón de visitante" "Fábrica". Estos son patrones comunes utilizados para resolver problemas comunes en la programación. Busque aquí una lista completa: enlace

    
respondido por el EddieBytes 08.09.2011 - 08:31
0
  

¿Qué significa? ¿Qué significa "bajo nivel" aquí?

Entiendo que no es una forma abstracta y de alto nivel para modelar su aplicación o los componentes de su aplicación, sino un uso inteligente o común de la semántica del lenguaje.

por ejemplo, establecer una variable si se evalúa como falso (comúnmente se usa para establecer nulas variables condicionalmente):

var ||= some_default_value
    
respondido por el Ed S. 08.09.2011 - 08:32
0

Aquí hay un ejemplo de un idioma (en C #) para manejar un evento. No está permitido disparar un evento si no tiene ningún controlador adjunto, por lo que el idioma es verificar siempre esto primero.

Por lo tanto, el idioma general para manejar eventos se convierte en:

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

Este idioma es específico (aunque no exclusivo) para el lenguaje C #.

Más generalmente, sin embargo, el mecanismo de eventos de C # es un ejemplo del patrón de diseño observador que se puede implementar en cualquier idioma .

    
respondido por el cxfx 08.09.2011 - 08:49

Lea otras preguntas en las etiquetas

Comentarios Recientes

El problema es que a Idiom le gusta hacer distinciones tan bien que las hace imposibles de entender. Ambas áreas están más allá del alcance de este artículo. Todo esto es estrictamente una cuestión de marketing, mantengamos claras las líneas de negocios. Comprendamos aún más por qué Idiom es un patrón de diseño tan malo que no sigue 3 criterios: Trata demasiado difícil de ajustar su vocabulario dentro de una oración. Por lo tanto, OAF es demasiado poderoso y definitivamente debe usarse en elementos basados... Lee mas