Autor |
Mensaje |
Uciel
Nivel 6
Edad: 34
Registrado: 16 Ago 2010
Mensajes: 288
Carrera: Informática
|
|
Buenas gente, estoy tratando de aprender lo basico de pharo. Tengo un perro, y quiero hacer que ladre (que emita "guauu"), osea, en el workspace escribo:
unPerro := Perros.
unPerro ladrar.
el tema es la clase Perros, ¿como le defino el metodo ladrar? en la parte del system browser cuando estoy en la 2º columna (1º son las categorias y 2º las clases) ¿donde defino el metodo en Instace o en Class?
Saludos
|
|
|
|
|
|
|
|
|
Hache
Nivel 8
Registrado: 13 May 2010
Mensajes: 574
Carrera: Informática
|
|
Supongo que en Class (eso si queres que TODOS los perros ladren).
Creo que fer90 te va a poder decir mejor, casi seguro que él usó Pharo.
|
|
|
|
_________________
|
|
|
|
|
nerea
Nivel 3
Registrado: 26 Ago 2008
Mensajes: 32
Ubicación: Mercedes
Carrera: Informática
|
|
Lo deberías definir como instance.
Así es como lo hicieron en clase. Es una instancia de la clase Perro.
|
|
|
|
_________________ Y si tu cabeza explota también con oscuros presagios,
nos veremos en el lado oculto de la luna...
I can't think of anything to say except...
I think it's marvelous! HaHaHa
|
|
|
|
|
Keyword
Nivel 6
Edad: 32
Registrado: 19 Jul 2011
Mensajes: 224
Carrera: Informática
|
|
Va en instance. Class es para métodos de clase, ya lo van a explicar. Igualmente para crear una instancia deberias hacer unPerro:= Perros new.
|
|
|
|
_________________
Your soul is mine
|
|
|
|
|
koreano
Nivel 9
Registrado: 15 Jul 2010
Mensajes: 1796
Carrera: No especificada
|
|
unPerro := Perros.
unPerro ladrar.
Perros ladrar.
Perros = clase
unPerro = instancia de clase Perros
unPerro ladrar = mensaje ladrar a la instancia unPerro de la clase Perros (instance)
Perros ladrar = mensaje ladrar a la clase Perros (class)
|
|
|
|
|
|
|
|
|
Lautaz
Nivel 8
Registrado: 05 Sep 2008
Mensajes: 550
Carrera: Informática y Sistemas
|
|
Buenas, se define en la parte instance.
Por otra parte, cuando definís una clase, lo "estándar" es poner el nombre en singular. Si llamás a la clase Perros estás dando a entender que cada objeto de esa clase va a ser un conjunto de Perros.
|
|
|
|
_________________ 61.7
Death ... By exile
|
|
|
|
|
Uciel
Nivel 6
Edad: 34
Registrado: 16 Ago 2010
Mensajes: 288
Carrera: Informática
|
|
Cita:
|
unPerro ladrar = mensaje ladrar a la instancia unPerro de la clase Perros (instance)
Perros ladrar = mensaje ladrar a la clase Perros (class)
|
aca hay algo que no me quedo claro,
unPerro ladrar
y
Perros ladrar
¿¿hacen cosas distintas??
tal vez la confusion venga mas por el lado de la diferencia entre poner
unPerro := Perros
y
unPerro := Perros new
PD: Sí Lautaz tenes razon!! la clase tendria que ser Perro, lo dejo como Perros en este caso para seguir el hilo de la conversacion!
|
|
|
|
|
|
|
|
|
Sebastian Santisi
Administrador Técnico
Edad: 42
Registrado: 23 Ago 2005
Mensajes: 17451
|
|
Sin tener idea de qué es Pharo, de lo que te respondieron.
Como método de clase, la idea sería escuchar cómo es un ladrido de perro, sin tener ningún perro para ladrar. (si es que eso tiene sentido)
O sea, no hacés ladrar a una instancia determinada de la clase perro, hacés ladrar a la clase.
|
|
|
|
_________________
|
|
|
|
|
Lautaz
Nivel 8
Registrado: 05 Sep 2008
Mensajes: 550
Carrera: Informática y Sistemas
|
|
Uciel escribió:
|
Cita:
|
unPerro ladrar = mensaje ladrar a la instancia unPerro de la clase Perros (instance)
Perros ladrar = mensaje ladrar a la clase Perros (class)
|
aca hay algo que no me quedo claro,
unPerro ladrar
y
Perros ladrar
¿¿hacen cosas distintas??
tal vez la confusion venga mas por el lado de la diferencia entre poner
unPerro := Perros
y
unPerro := Perros new
PD: Sí Lautaz tenes razon!! la clase tendria que ser Perro, lo dejo como Perros en este caso para seguir el hilo de la conversacion!
|
Es un poco complicado de explicar pero no tenés que usar un método de clase (estático) para algo que es propio de cada perro. Vos me dirás "todos los perros ladran", sí, pero imaginate que cada vez que un perro ladra se le gastan un poco las cuerdas vocales, si ladrar es un método de clase, como hacés para determinar el perro que ladró y disminuirle la resistencia de sus cuerdas?
Espero explicarme bien, es un ejemplo algo raro pero bue.
La cuestión es:
- Método de clase: cosas comunes a todas las instancias de las mismas.
- Método de instancia: cosas que dependen de la instancia.
Te aconsejo que busqués en google: "métodos de clase vs métodos de instancia" y leas un poco sobre el tema (salen miles de artículos) para que te quede más claro
|
|
|
|
_________________ 61.7
Death ... By exile
|
|
|
|
|
Johann
Nivel 9
Edad: 34
Registrado: 04 Abr 2009
Mensajes: 1098
Ubicación: Nuñez
Carrera: Informática
|
|
Sebastian Santisi escribió:
|
Sin tener idea de qué es Pharo, de lo que te respondieron.
Como método de clase, la idea sería escuchar cómo es un ladrido de perro, sin tener ningún perro para ladrar. (si es que eso tiene sentido)
O sea, no hacés ladrar a una instancia determinada de la clase perro, hacés ladrar a la clase.
|
Pharo es una implementación de Smalltalk.
|
|
|
|
|
|
|
|
|
Uciel
Nivel 6
Edad: 34
Registrado: 16 Ago 2010
Mensajes: 288
Carrera: Informática
|
|
Bueno, parece q me cerro un poquito mas la idea. No estoy seguro de haberla usado antes en a&p II, no se si fue porque no era necesario o no nos la enseñaron.
En fin aca dejo otra explicacion (con ejemplo) que encontre por la web:
Mira, aquí tengo una clase
Class A{
A(){
printf(“soy un constructor”);
}
void funcA(){
printf(“soy una funcion”);
}
}
Esto es la declaracion de una clase. Tiene un metodo llamado funcA. Este
metodo es un metodo de instancia. Si le pusiera la palabra static se
convertiria en metodo de clase. La diferencia? Imagina que quisieramos hacer
una clase que cada vez que llamemos al constructor incremente un contador,
por ejemplo, para saber cuantas instancias tenemos de esa clase.
Class A{
private:
int b;
static int contador;
public:
A(){
printf(“soy un constructor”);
A::contador++;
b++
}
void funcA(){
printf(“%d %d”,A::cont,b);
}
}
Que estamos haciendo? Pues si te fijas en la clase, tenemos dato miembro
llamado b y otra llamada cont que es estatico. El estatico crecera siempre.
B sera siempre 1 (si esta correctamente inicializado, que aquí no esta). La
idea de las funciones es exactamente lo mismo. Cuando tienes una funcion de
clase, llamas a esa funcion sin necesidad de tener una instancia de la
clase, es decir, sin necesidad de habere creado antes un objeto de esa
clase. Cuando se usan este tipo de funciones? Cuando tienes una clase que
quieres llamar sin tener la seguridad de haberla creado, por ejemplo.
|
|
|
|
|
|
|
|
|
|