Rasgo (tipo abstracto)

La versión actual de la página aún no ha sido revisada por colaboradores experimentados y puede diferir significativamente de la versión revisada el 8 de octubre de 2020; las comprobaciones requieren 9 ediciones .

Tipo (a veces - rasgo, rasgo / rasgo de comportamiento , disposición, del rasgo inglés  ) - tipo de datos abstractos utilizado como "un modelo conceptual simple para estructurar programas orientados a objetos " [1][ especificar ] . El concepto apareció debido a conflictos al usar clases en OOP para herencia. Es similar en los problemas que resuelve al heredar con interfaces y mixins y, a diferencia del cual, solo contiene . También son específicos en la forma en que resuelven los conflictos: los rasgos no permiten que los nombres de los métodos coincidan. El concepto fue desarrollado originalmente por el Grupo de Ingeniería de Software Estructural de la Universidad de Berna [2] .

Son la base del lenguaje Rust y están integrados en el lenguaje Scala [3] [4] , incluido en la variante Squeak del lenguaje Smalltalk desde la versión 3.9, introducida en Perl 6 (donde se denominan "roles"; para Perl 5 - implementado como un módulo en Moose ), introducido en el lenguaje C# 8.0 (donde se les llama interfaces con implementaciones de métodos predeterminados) también se implementan en el marco Joose para JavaScript . También hay planes para incluir características en ActionScript 3.0 . Los mixins de módulos en Ruby son algo similares a los rasgos.

En algunos lenguajes de programación, los rasgos se refieren a tipos que en realidad son mixins . Entonces, por ejemplo, en PHP , los rasgos pueden contener no solo métodos, sino también propiedades [5] .

Ejemplo de Rust para un tipo existente que describe hash:

hash de rasgos { fn hash ( y uno mismo ) -> u64 ; }

Implementación del rasgo Hash para algún tipo - ejemplos de métodos hash con la firma correspondiente:

impl Hash para bool { fn hash ( y uno mismo ) -> u64 { if * self { 0 } else { 1 } } } hash impl para i64 { fn hash ( y uno mismo ) -> u64 { * auto como u64 } }

Notas

  1. Fuente . Consultado el 4 de agosto de 2009. Archivado desde el original el 9 de agosto de 2017.
  2. SCG: Bibliografía de SCG . Consultado el 4 de agosto de 2009. Archivado desde el original el 4 de mayo de 2009.
  3. http://www.scala-lang.org/node/126 Archivado el 27 de septiembre de 2009 en Wayback Machine A Tour of Scala: Traits
  4. http://www.ibm.com/developerworks/java/library/j-scala04298.html Archivado el 26 de agosto de 2009 en Wayback Machine La atareada guía para desarrolladores de Java sobre Scala: características y comportamientos
  5. PHP: Rasgos - Manual . php.net. Consultado el 15 de marzo de 2017. Archivado desde el original el 14 de marzo de 2017.

Enlaces