2008-11-13 17 views

Respuesta

51

Generalmente significa que al aumentar el nivel de abstracción se puede hacer que el problema sea más fácil de comprender/resolver.

Sin embargo, tenga cuidado con sus abstracciones, la cita completa al menos tal como lo escuché es, "Puede resolver cada problema con otro nivel de indirección, excepto por el problema de demasiados niveles de indirección".

+1

Buen consejo. Trabajo rutinariamente con problemas muy abstractos y me gusta describir la abstracción como una gran palanca en la que presionas el extremo más pequeño: los pequeños cambios producen grandes movimientos, pero a costa de que debes esforzarte mucho. – BCS

+9

Esa no es la cita completa; es una versión corregida que alguien más ideó después del hecho. Es correcto, sin embargo. –

+10

http://zedshaw.com/essays/indirection_is_not_abstraction.html – unhammer

3

Básicamente significa que debe dividir su problema en problemas más pequeños hasta que los problemas sean fáciles de resolver.

a eliminar el problema en varias capas:

  • rutinas que resuelven el problema
  • Se llaman: rutinas que entienden el espacio del problema
  • Lo llaman: rutinas que hacen pequeños pasos (cargar un archivo , twiddle algunos bits, escribe una salida).

Las rutinas en la parte superior (los de resolución de problemas) están indirected/abstraído de los medios reales de la solución del problema, haciéndolos más flexibles para resolver el mismo problema de una manera ligeramente diferente después.

+4

¿Por qué el voto a favor? – jv42

9

Del libro Beautiful Code:

Todos los problemas de la informática se pueden resolver por otro nivel de indirección ", es una famosa cita atribuida a Butler Lampson, el científico que en 1972 prevé la computadora personal moderna.

Aunque esto es contradicted by Wikipedia que atribuye la frase de David Wheeler.

+45

Al final del capítulo, el libro menciona que Lampson atribuye la cita a David Wheeler, por lo que Wikipedia no está realmente contradiciéndola, simplemente siguiendo la indirección, si se quiere :), a la fuente. – jw013

2

Tal concepto muy importante y tan pocas respuestas aquí. Generall y cada problema presentado puede resolverse no necesariamente mediante ajustes directos del código, sino aplicando algún proxy (olvide la definición del patrón) de alguna forma. La intercepción & | la instrumentación de eventos está muy infravalorada.

+2

Por favor, ¿qué quiere decir con intercepción y/o instrumentación de eventos? ¿Qué eventos? ¿Y cómo está subvaluado? Gracias. – user712092

3

El corolario de Kevlin Henney es, "... a excepción del problema de demasiadas capas de indirección".

+1

Lo escuché con el corolario antes de escucharlo solo. Me encuentro con este corolario con más frecuencia de lo que me encuentro con la situación en la que necesito agregar capas de indirección. –

0

Esta cita es muy amplia en sus implicaciones. La clave para entender es enfocarse en la palabra 'problema'. El problema puede ser un error/problema de programación, la traducción de una entidad mundial a su componente informático equivalente, la asociación de costos con la solución informática. Supongamos que está tratando de resolver el problema con el costo de desarrollar algo usted mismo, es posible que desee considerar a otros expertos para que hagan el trabajo por usted mucho más barato en tiempo y dinero. Este es otro uso de direccionamiento indirecto

2

Primero debemos entender qué significa Agregar Nivel de Indirección.

Por lo general, Añadiendo el Nivel de Indirección significa que somos capaces de proporcionar una manera alternativa de resolver un problema, idealmente con algunos beneficios adicionales. Otras veces, cuando nada está funcionando actualmente, la indirección podría ser nuestra única solución.

Por ejemplo, si la necesidad del negocio es "Tenemos que decidir qué tamaño de bloque de IP comprar para poder proporcionar direcciones IP a todos nuestros sitios".

El problema es que si elegimos un bloque que es demasiado pequeño, tendremos que obtener uno más grande. Nuestro administrador no solo debe obtener otro bloque, sino que ahora debe agregarse un prefijo adicional en nuestra tabla de enrutamiento para acceder a mis sitios. Eso es tiempo extra, costo y complejidad. ¿Hay una mejor manera?

Hoy en día, una dirección IP significa quién es usted cuando inicia sesión y donde se encuentra.

LISP usa un nivel de direccionamiento indirecto para resolver el problema de enrutamiento indicado anteriormente.

Lo hace con un cierto coste:

  • Un nuevo servidor capaz LISP ahora deben existir para asignar direcciones a sitios

  • Se requieren dos espacios de nombres (uno para la ubicación del otro ID)

y algunos beneficios adicionales:

  • Eliminar la renumeración sitio cuando se añade un nuevo bloque

  • Reducción en el tamaño de las tablas de enrutamiento

  • ISP puede hacer cambios (sitios que se mueven desde un host a otro)

  • conserva el espacio de direcciones IPv4 (espacio localizador de direcciones no asignadas a los hosts)

  • con LISP un ISP puede asignar menos direcciones por sitio

La imagen siguiente muestra la nueva capa de indirección:

enter image description here

LISP resuelve el problema mediante la adición de un nueva capa de indirección y simplifica algunas cosas, pero no es del todo sencillo. Es diferente y en muchos sentidos es mejor.

Cuestiones relacionadas