¿Cuál es el equivalente de Smalltalk de los campos y métodos estáticos de Java? IOW, ¿qué hacen los Smalltalkers cuando necesitan datos y/o métodos de nivel de clase?¿Cuál es el equivalente de Smalltalk de Java estático?
Respuesta
Utilizamos métodos de clase/variables de instancia. Una clase es un objeto, después de todo, entonces puede tener métodos.
Por ejemplo, la clase rectángulo tiene un método #origin: Esquina: por lo que puede escribir
Rectangle origin: [email protected] corner: [email protected]
para crear un rectángulo. Este es solo el mensaje #origin: corner: enviado al objeto llamado Rectangle (¡una clase es un objeto!) Con los dos Puntos como parámetros.
Las variables de instancia del lado de la clase funcionan de la misma manera. Una clase, al ser un objeto, puede tener variables de instancia. Desde la biblioteca Sunit:
TestCase class
instanceVariableNames: 'history'
y después de clase TestCase expone esto en la forma habitual, con un captador/definidor (#history y #history :).
EDITAR: El @
que he usado ha causado un poco de discusión. Es lo que se llama binary message, que le permite a uno definir selectores que se ven exactamente lo que otros lenguajes llamarían operadores de infijo. Por ejemplo, 3 + 4
o [email protected]
. En el caso de @
, la clase Number
define un método llamado @
tomando un parámetro y
, definido como ^Point x: self y: y
- "devuelve un Punto cuya coordenada x es mi propio valor y cuya coordenada y es el parámetro".
Point es un par ordenado, pero, por supuesto, no hay nada que impida definir las versiones de mayor dimensión. Point
podría definir un método llamado @
que se veía así, por ejemplo: ^Triple x: self x y: self y z: z
- "devuelve un punto en R^3 cuyas coordenadas x, y son mías y cuya coordenada z es el parámetro dado".
¿Usa algún otro idioma que no sea Smalltalk @ para delimitar las diferentes coordenadas de un punto? No creo haber visto esa sintaxis específica antes. – JAB
¿Eso '@' indica una tupla? – Jim
@ es un "mensaje binario" - un mensaje que toma un solo parámetro, pero no necesita el seguimiento habitual:. Number define un método llamado @ que devuelve un punto:^Point x: self y: y (donde y es el único parámetro, obviamente). –
En la mayoría de los tipos de Smalltalk tiene variables de clase. Normalmente, las variables de clase se utilizan para, p. singletons. Sin embargo, existen diferencias en los tipos de variables que puede usar entre los sabores de Smalltalk, así que lea la documentación sobre este punto para su implementación particular.
El cambio de mentalidad más importante que se necesita si viene a Smalltalk desde Java o similar, es que las clases son objetos.
Una estática en lenguajes similares a Java puede tener muchas semánticas diferentes. Por lo general, esto tiene que ver con la visibilidad. Necesita un objeto que sea independiente de cualquier instancia de una clase, pero desea restringir la visibilidad de este objeto dentro de la clase, es decir, solo visible desde instancias de la clase o la clase misma (en Smalltalk, porque en Java las clases no son objetos de primera clase).
En Smalltalk por lo general tienen más opciones para esto:
- variables de instancia de clase
- Las variables de clase o variables de la piscina (dependiendo de su dialecto Smalltalk)
Una variable de instancia de clase es de hecho al igual que una variable de instancia de instancias de cualquier clase: la clase tiene esta propiedad, y puede hacerse accesible para cualquier instancia de la clase al proporcionar un método getter en la clase (no en las instancias, a esto lo llamamos método de clase) . Esto es útil si tiene valores predeterminados y tal. Ejemplo:
definir una clase Car
, con instancia de variable colour
, además de una instancia de clase variable de defaultColour
(que por supuesto tendría el valor "NEGRO" ;-))
Smalltalk defineClass: #Car
superclass: #{Core.Object}
indexedType: #none
private: false
instanceVariableNames: 'colour '
classInstanceVariableNames: 'defaultColour'
imports: ''
category: ''
Esta es una definición de clase (realmente un mensaje al objeto Smalltalk
) en VisualWorks Smalltalk. Si crea una subclase de Car
, hereda la variable de instancia de clase defaultColour
, como lo haría también un objeto normal. Si la variable de instancia de clase defaultColour
tiene un valor, la subclase también hereda este valor.
- 1. ¿Cuál es la diferencia de ANSI Smalltalk y Smalltalk-80?
- 2. ¿Cuál es el equivalente de Clojure de inyectar: en: en Smalltalk?
- 3. ¿Cuál es el significado de "sintético estático"?
- 4. ¿Cuál es el equivalente de Java de AggregateException de .net?
- 5. ¿Cuál es el equivalente de Ruby para StringReader de Java?
- 6. ¿cuál es el equivalente de C# de static {...} en Java?
- 7. ¿Cuál es el equivalente de Scala del ClassName.class de Java?
- 8. ¿Cuál es el equivalente de Java 1.4.2 de Pattern.quote()
- 9. ¿Cuál es el equivalente .NET de NumberFormatException de Java?
- 10. ¿Cuál es el equivalente de C# de Java DecimalFormat?
- 11. ¿Cuál es el equivalente de Thread.sleep() de Java en JavaScript?
- 12. ¿Cuál es el equivalente de Java de ManualResetEvent?
- 13. ¿Cuál es el equivalente .NET de StringBuffer en Java?
- 14. ¿Cuál es el C# equivalente a la instancia de Java()?
- 15. ¿cuál es el equivalente .NET de @Deprecated en java?
- 16. ¿Cuál es el equivalente Java de un objeto Scala?
- 17. ¿Cuál es el equivalente de largo sin signo en Java
- 18. ¿Cuál es el equivalente de LinkedHashSet (Java) en C#?
- 19. ¿Cuál es el equivalente de Java a este preg_replace?
- 20. ¿Cuál es el equivalente Java de PHP var_dump?
- 21. ¿Cuál es el equivalente Python de Tomcat?
- 22. ¿Cuál es el equivalente de C# al "self ::" de PHP?
- 23. ¿Qué es el equivalente de Scala del bloque estático de Java?
- 24. ¿Cuál es el equivalente a .NET SortedDictionary, en Java?
- 25. ¿Cuál es el equivalente Ruby de "pythonic"?
- 26. ¿Cuál es el equivalente Monotouch de dealloc?
- 27. ¿Cuál es el equivalente de argv [0]?
- 28. ¿Cuál es el mejor IDE gratis para aprender smalltalk?
- 29. ¿Cuál es el equivalente de C# de java.util.regex?
- 30. ¿Cuál es la función equivalente de 'nth_element' en Java?
No es digno de una respuesta "formal", pero me encontré con esta página que podría ayudarlo: http://per.bothner.com/papers/smalltalk.html. –
Sugeriría dividir tu segunda pregunta en una _siguiente pregunta_. –
@Frank: Bien. Como usted dice. – Jim