En Actionscript 3 no puedo declarar vars en Interfaces. No lo entiendo Sé que puedo solucionar esto definiendo getters y setters, pero ¿qué ocurre si solo quiero una propiedad pública simple? Usualmente uso getters y setters si hay algo que hacer cuando establezco u obtengo una propiedad, pero ¿qué ocurre si solo quiero almacenar un valor?Por qué las propiedades no son declarables en las interfaces
Respuesta
No soy una programación de actioscript, pero las interfaces (en java por ejemplo) están destinadas a definir el comportamiento no el estado, por lo que las intrerfaces en jave simplemente declaran los métodos que la clase que implementa la interfaz necesita definir. Las propiedades (o variable de instancia) no son en general necesarias para definir el comportamiento y no están permitidas en las interfaces.
Puede decirlo así: las interfaces existen porque en su idioma no puede heredar de múltiples clases base abstractas. Si AS3 te hubiera permitido hacer eso, probablemente no tendría 'interfaces', sino 'clases abstractas puras'.
En otras palabras, tener las propiedades implementación en su interfaz conduciría a conflictos de nombres y de allí a otros problemas de herencia múltiple (diamante).
Sin embargo, tener un getter o setter sin implementación debería funcionar.
public interface I { function get A():int; }
(no tengo el compilador AS3 a mano)
su respuesta es la solución correcta ... aunque estoy totalmente en desacuerdo sobre lo que está diciendo acerca de las interfaces ... la herencia es inherentemente mala ...: D ... no, en serio ... el punto de La herencia es CÓDIGO REUTILIZAR ... pero generalmente se usa mal para lograr para qué están diseñadas las interfaces: describir una función de objetos ... regla de oro: las clases definen la implementación, el comportamiento de las interfaces ... no usan clases para exigir un comportamiento ... no escriba algoMétodo (algoPa ram: SomeClass), escriba someMethod (someParam: SomeInterface) ... esto es mucho más flexible/extensible y más limpio ... – back2dos
Traté de evitar hacer una afirmación acerca de si la herencia múltiple era buena o mala :) Solo señalé que si tiene implementación de propiedades en estas 'interfaces', se requeriría un mecanismo similar a la herencia múltiple cuando el compilador encuentre 2 interfaces con la misma propiedad definida. – Vlagged
- 1. ¿Por qué las interfaces no son [Serializable]?
- 2. ¿Deben las interfaces definir propiedades?
- 3. Por qué son necesarias las propiedades de automatización en WPF
- 4. ¿Por qué las propiedades de dependencia son "estáticas"?
- 5. ¿Por qué las interfaces genéricas no son co/contravariantes por defecto?
- 6. ¿Qué son las interfaces y los delegados en C#?
- 7. ¿Por qué implementamos las interfaces recursivamente?
- 8. ¿Son necesarias las interfaces en JavaScript?
- 9. ¿Por qué las interfaces C# no pueden contener campos?
- 10. ¿Las interfaces de PHP tienen propiedades?
- 11. ¿Las interfaces con pestañas son confusas?
- 12. Delphi Rtti: Explore las propiedades de las interfaces?
- 13. ¿Las interfaces son redundantes con herencia múltiple?
- 14. ¿Por qué las clases de Java no heredan las anotaciones de las interfaces implementadas?
- 15. ¿Por qué [NonSerialized] no funciona en las propiedades autoaplicadas?
- 16. ¿Cuáles son las alternativas más elegantes a las interfaces constantes?
- 17. ¿por qué las interfaces en lenguajes dinámicos/de tipo suelto?
- 18. ¿Por qué "las propiedades que devuelven matrices son propensas a las ineficiencias del código"?
- 19. ¿Por qué las excepciones no son propagadas por WPF Dispatcher.Invoke?
- 20. Las interfaces (interfaz/clase abstracta) no son abstracciones?
- 21. ¿Por qué las propiedades no pueden ser de solo lectura?
- 22. ¿Qué son las cookies firmadas y por qué son útiles?
- 23. ¿Por qué las propiedades automáticas de C# no son compatibles con valores predeterminados como VB 2010?
- 24. ¿Por qué las estructuras no pueden tener propiedades externas, pero los métodos son correctos?
- 25. Autorreferencia en las interfaces
- 26. ¿Bajo qué circunstancias son útiles las propiedades atómicas?
- 27. ¿Por qué deberíamos colocar las interfaces con las clases que las usan en lugar de las que las implementan?
- 28. ¿Por qué son necesarias las declaraciones anticipadas?
- 29. ¿Por qué las etiquetas son todas minúsculas?
- 30. ¿Las propiedades estáticas autoejecutadas por C# son seguras para subprocesos?
Las propiedades no son las mismas que las variables de instancia. –
+1 en eso ... en principio ... porque esto no es realmente válido para AS3 ... hay una distinción entre las propiedades (proporcionadas por los usuarios) y las variables ... desde el exterior esto es completamente transparente, siendo IDÉNTICO a nivel sintáctico ... pero el acceso a la propiedad efectivamente significa una llamada y el acceso variable no ... las interfaces pueden declarar acceso de propiedad, pero no variables ... esto no es 100% consistente ni razonable ... pero así es la vida, supongo ... :) – back2dos