title: Interfaz pública
text: # Interfaz pública
  
  Una "'interfaz pública' es el punto lógico en el que interactúan las entidades independientes de software. Las entidades pueden interactuar entre sí dentro de una sola computadora, a través de una red, o a través de una variedad de otras topologías. Es importante que las interfaces públicas sean estables y diseñadas para soportar cambios futuros, mejoras y depreciación para que la interacción continúe.
  
  ## Diseño
  
  ### Orientación
  
  * Un proyecto debe proporcionar documentos adicionales que describan los planes y procedimientos que se pueden utilizar para evaluar el cumplimiento del proyecto.
  * Proporcionar un documento de diseño de la arquitectura.
  * Proporcionar un documento de normas de codificación.
  * Proporcionar un documento de plan de liberación de software.
  * Proporcionar un documento con un plan para la depreciación de interfaces obsoletas.
  * Crear clases completamente aisladas.
  * Aísle las interfaces públicas de las dependencias en tiempo de compilación.
  
  ### Buenas prácticas
  
  * Presentar conjuntos completos y coherentes de conceptos para el usuario.
  * Diseño de interfaces para ser escritas de forma estática.
  * Minimizar las dependencias de la interfaz en otras interfaces.
  * Interfaces Express en términos de tipos de nivel de aplicación.
  * Usar aserciones solo para ayudar al desarrollo y la integración.
  
  ### Ejemplos
  
  * 'Interfaz de C ++'
  
         Utilizar clases de protocolo para definir interfaces públicas.
         Las características de una clase de protocolo son:
         * No contiene ni hereda de clases que contienen datos de miembros, funciones no virtuales o miembros privados (o protegidos) de cualquier tipo.
  
         * Tiene un destructor virtual no-en línea definido con una implementación vacía.
  
         * Todas las funciones miembro distintas del destructor, incluidas las funciones heredadas, se declaran virtuales puras y no se definen.
  
         'Beneficios'
         Los beneficios del uso de clases de protocolo incluyen:
         * Aislamiento de aplicaciones desde el cliente externo.
  
         * Los cambios de aislamiento que son internos a la interfaz.
  
         * Aislamiento de los cambios en la interfaz pública de los cambios a la implementación de la interfaz.
  
         * El aislamiento tiene costos, pero éstos tienden a ser superados por las ganancias en interoperabilidad y reutilización.
  
         'Costes' :
         * Pasando por el puntero de implementación.
  
         * Adición de un nivel de indirección por acceso.
  
         * Adición del tamaño del puntero de implementación por objeto a los requisitos de memoria.
  * Varias metodologías, tales como refactorización, apoyan la determinación de interfaces. La refactorización generalmente se aplica a toda la implementación del software, pero es especialmente útil para limpiar adecuadamente las interfaces.
  