Compartir vía


Abstracciones (Tipos e interfaces abstractos)

Nota:

Este contenido se ha copiado con permiso de Pearson Education, Inc. de Framework Design Guidelines: Conventions, Idioms, and Patterns for Reusable .NET Libraries, 2ª edición. Esa edición se publicó en 2008 y el libro se ha revisado completamente en la tercera edición. Parte de la información de esta página puede estar obsoleta.

Una abstracción es un tipo que describe un contrato, pero no proporciona una implementación completa del contrato. Las abstracciones se suelen implementar como clases abstractas o interfaces, e incluyen un conjunto bien definido de documentación de referencia que describe la semántica necesaria de los tipos que implementan el contrato. Entre las abstracciones más importantes de .NET Framework se encuentran Stream, IEnumerable<T> y Object.

Puede extender los marcos implementando un tipo concreto que admita el contrato de una abstracción y usando este tipo concreto con las API del marco que consumen la abstracción u operan en ella.

Una abstracción significativa y útil que pueda resistir la prueba del tiempo es muy difícil de diseñar. La principal dificultad es obtener el conjunto correcto de miembros, ni más ni menos. Si una abstracción tiene demasiados miembros, será difícil o incluso imposible de implementar. Si no tiene suficientes miembros para la funcionalidad prometida, será inservible en muchos escenarios interesantes.

Si un marco tiene demasiadas abstracciones, también afecta negativamente a la facilidad de uso de dicho marco. A menudo es bastante difícil entender una abstracción sin comprender cómo encaja en el panorama más amplio de las implementaciones concretas y las API que operan en la abstracción. Además, los nombres de las abstracciones y sus miembros son necesariamente abstractos, lo que a menudo hace que sean crípticos e inalcanzables sin entender primero el contexto más amplio de su uso.

Sin embargo, las abstracciones proporcionan una extensibilidad extremadamente eficaz que los demás mecanismos de extensibilidad no suelen igualar. Son el núcleo de muchos patrones arquitectónicos, como complementos, inversión de control (IoC), canalizaciones, etc. También son muy importantes para probar los marcos. Las buenas abstracciones permiten eliminar las dependencias pesadas con el fin de realizar pruebas unitarias. En resumen, las abstracciones son las responsables de la buscada importancia de los marcos modernos orientados a objetos.

❌ NO proporcione abstracciones, a menos que se prueben mediante el desarrollo de varias implementaciones concretas y API que consuman las abstracciones.

✔️ Elija cuidadosamente entre una clase abstracta y una interfaz al diseñar una abstracción.

✔️ Recomendamos proporcionar pruebas de referencia para implementaciones concretas de abstracciones. Dichas pruebas deben permitir que los usuarios prueben si sus implementaciones implementan correctamente el contrato.

Portions © 2005, 2009 Microsoft Corporation. Todos los derechos reservados.

Material reimpreso con el consentimiento de Pearson Education, Inc. y extraído de Framework Design Guidelines: Conventions, Idioms, and Patterns for Reusable .NET Libraries, 2nd Edition (Instrucciones de diseño de .NET Framework: convenciones, expresiones y patrones para bibliotecas .NET reutilizables, 2.ª edición), de Krzysztof Cwalina y Brad Abrams, publicado el 22 de octubre de 2008 por Addison-Wesley Professional como parte de la serie Microsoft Windows Development.

Vea también