Méritos de Namepsaces / Paquetes

14

Algunos lenguajes de programación (por ejemplo, Java y C ++) tienen características de lenguaje llamadas "paquetes" o "espacios de nombres". ¿Qué tan útil es realmente tener espacios de nombres? Es posible marcar las funciones y clases como pertenecientes a alguna biblioteca en particular sin usar tal función de lenguaje, como hace el SDL (por ejemplo, SDL_BlitSurface() ). ¿Los espacios de nombres no son lo suficientemente útiles para que valga la pena tenerlos? ¿Son útiles en bibliotecas pero no en aplicaciones? ¿Son útiles en todas partes excepto en pequeños proyectos? ¿Pensamientos?

    
pregunta compman 21.12.2010 - 18:11

4 respuestas

16

¿No son prefijos de nombre lo mismo que espacios de nombre , excepto que se hace de una manera que es menos útil y más difícil de leer / analizar? ¿La pregunta no responde a sí misma?

    
respondido por el Nicole 21.12.2010 - 18:16
5

La mayoría de los idiomas (¿todos?) con espacios de nombres tienden a estar orientados a objetos. Muchas veces, un nombre legible para un tipo es apropiado, aunque existen múltiples implementaciones incompatibles. (Esto plantea otros problemas en la reutilización orientada a objetos, pero de eso no se trata esta pregunta). Por ejemplo, en Java tiene un temporizador que se usa para tareas de UI en segundo plano y un temporizador que se usa para tareas de aplicación en segundo plano (no vinculado a AWT / Swing). El espacio de nombres le permite tener estos objetos del mismo nombre que viven en diferentes sub-APIs.

La razón por la que surgieron los espacios de nombres tuvo que ver con la tarea irrazonable de anticipar lo que otros desarrolladores nombrarán sus objetos. C ++ introdujo el concepto (o al menos fue el primer lenguaje al que fui expuesto con el concepto), y fue útil aunque no existían pautas sobre las prácticas de mejor uso. Java adaptó el concepto y agregó algunas "mejores prácticas" que incluían el nombre de su empresa en el espacio de nombres. De esa manera, solo tenía que preocuparse por su propia empresa.

El prefijo puede ser bastante desordenado. ¿Cuándo lo aplicas? ¿Cuándo no lo aplica? ¿Las estructuras / clases / métodos globales obtienen el prefijo? ¿Qué pasa con los métodos? ¿Qué pasa con las propiedades en la estructura. He visto todas estas cosas en código, aunque afortunadamente no todas a la vez. Los espacios de nombres proporcionan cierta previsibilidad a todas estas preguntas y lo convierten en una característica del lenguaje en lugar de una "mejor práctica" personal.

    
respondido por el Berin Loritsch 21.12.2010 - 18:29
3

Creo que los espacios de nombres son una gran idea. Ayudan a evitar conflictos de nombres al limitar el alcance de un nombre. En los paquetes de Java, la convención de nomenclatura de paquetes sugerida se basa en los nombres de dominio, que debe ser único, lo que ayuda a evitar conflictos de nombres en bibliotecas personalizadas. En general, hacen que la denominación sea un poco más única en el sentido amplio, al mismo tiempo que le permite al programador un poco más de libertad para nombrar sus piezas sin tener que seguir alguna convención de denominación poco clara.

    
respondido por el Michael K 21.12.2010 - 18:17
1

Los espacios de nombres / Módulos / Paquetes son útiles para evitar conflictos de nombres. También lo es el prefijo de nombre, pero los espacios de nombres tienen la conveniencia adicional de poder importar símbolos en el espacio de nombres actual para que no tenga que molestarse con todo el Espacio de nombres :: *.

Algunos idiomas (como Python) amplían esta capacidad al permitirle importar solo símbolos específicos a su módulo actual o importar símbolos como un nombre diferente. Esto es útil si solo está interesado en algunas clases / funciones / constantes o si algunos de los símbolos entran en conflicto con los símbolos en su espacio de nombres, pero otros no.

Algunos idiomas (como Ruby) le permiten incluir los métodos de un módulo en su clase. Esto es útil para polimorfismo y genéricos. Por ejemplo, si tiene varias clases que tienen iteradores que actúan de la misma manera, puede combinar métodos en todas estas clases de un módulo separado que proporciona métodos para ordenar y filtrar los datos en el objeto. Esto permite las relaciones has a así como las relaciones is a (herencia).

    
respondido por el david4dev 21.12.2010 - 18:39

Lea otras preguntas en las etiquetas