Entrar
¿Nuevo usuario? Inscribirme
smalltalking · Un lugar para el estudio y desarrollo de Ambientes de Objetos virtuales.
? ¿Ya estás suscrito? Entra a Yahoo!

Consejos

¿Sabías que...?
Podés hacer búsquedas de antiguos mensajes del grupo.

Mensajes

  Mensajes Ayuda
Avanzado
Smalltalk is free   Lista de mensajes  
Responder | Reenviar Mensaje #16558 de 17205 |
Re: [objetos] RE:Smalltalk is free

Hola kikoGregoris, te respondo entre líneas (y mirá que no soy ningún experto)

On Mon, 7 Jul 2008 15:55:15 -0700 (PDT)
kikoGregoris <kikogregoris@...> wrote:

> También me pregunto porque se usa esto:
>  
> Según el profe:
> Java, normalmente usa Dynamic Binding: la resolución de las invocaciones a
métodos, se resuelve en ejecución, basándose en el tipo del objeto receptor.
Java provee un mecanismo para  determinar en ejecución el tipo del objeto
receptor e invocar al
> método apropiado.
>  
> Si yo conozco su tipo, se que método se invoca en todo momento. NO ¿?. Será
por las interfaces ¿?
>  
> Sobre interface, el profe las define así:
>  
> -Una interface es un tipo de dato nuevo.
...
> -Entre las interfaces existe una jerarquía (independiente de la de las clases)
que permite herencia simple y múltiple. Cuando una interface deriva de otra,
incluye todas sus constantes y declaraciones de métodos.
>  
> Aquí quiero hacer un alto, para preguntar algo que esta relacionado con la
herencia Multiple, Clases y Especies, que hablábamos en otro mail.
>  

mmm... no. En mi opinión la herencia tiene que ver con comportamiento. Las
interfaces no son comportamiento. Una interfaz no añade nada nuevo al
comportamiento de una clase. Lo mejor es entender a las interfaces (a veces)
como "vistas" de una clase. La interfaz declara pero no define el comportamiento
(los métodos no tienen cuerpos). De todas formas concuerdo que puede ser
chocante para quienes tienen un paradigma de obejtos tan simple como los
smalltalkers. Sin embargo, resultaron ser super utiles en lenguajes orientados a
objetos de naturaleza estática o tipada como java.

> Ale decía en un histórico algo así:
>  
> En resumen, colocar habilidades (caracteristicas sujetas a cambio)
> en la especiacion nos rigidiza el sistema y nos lleva a pensar
> a veces que necesitamos herencia multiple (que una especie
> hereda de dos especies).
> Fijate que la herencia por especie es herencia SIMPLE
> pues es resultado de la evolucion, no de mezclas
> de caracteristicas de individuos.
>  
> No comprendo bien porque es herencia simple ¿??.
> Lo pregunto porque el profe usa el ejemplo de herencia múltiple  como un buen
uso de las Interfaces.

mmm.. no estoy deacuerdo con tu profesor en java no es lo mismo heredar que
implementar; la herencia en java no es múltiple. pero bueno cada cual lo
entenderá a su modo... Para mi las interfaces van mas allá de los objetos o
tipos.... Por ejemplo la interfaz Control (play, stop, pause) puede ser
implementada por el panel de una lavarropa, de una licuadora por el control
remoto de una tv, por la interfaz gráfica de una applicación reproductor
multimedia o por el panel de un avión. No hay relación entre los objetos que
implementan la interfaz. La interfaz lo unico que dice es que a dichos objetos
les podremos enviar ciertos mensajes. define una semántica sobre un conjunto de
clases sin que estas tengan que estar relacionadas.

Una nota interesante sobre interfaces java. Yo actualmente estoy trabajando con
traductores java->javascript. javascript es un lenguage no tipado, con una
síntaxs parecida a la de java / C pero con una forma de trabajar mucho más
parecida a smalltalk en algunos aspectos. Estos traductores ignoran por completo
las interfaces cuando realizan la traducción. Es decir la interfaz no aporta
nada al funcionamiento del sistema... son solo un artilugio que facilita la
abstracción y la separación de responsabilidades a los humanos.

> En ST:
>  
> >>recorrer: aCollection
>  
> aCollection do:[:each | each imprimirCerificado].
>  
> No les parece mucho mas simple y limpio que en JAVA ??.
>  

jaja. Siguiendo con el tema de interfaces, una de los motivos de las interfaces
es poder trabajar con closures en java. Una closure es la declaración literal de
un bloque de código como el de tu ejemplo anterior ([:each | each
imprimirCerificado]). Ya se que este es un ejemplo medio bobo, pero está bueno
comparar las closures en lenguajes con y sin tipos y ver como se las arreglan
los lenguajes no tipados (el secreto está en las declaraciones de clase
anónimas). Tu código smalltalk desglosado sería:

|miClosure aCollection|
miClosure:=[:each | each imprimirCerificado].
aCollection do:miClosure.


En java sería algo como:

interface MiClosure<T> {
void run(T o);
}
MiClosure<Persona> miClosure = new MiClosure<Persona>() {
void run(Persona p) {
p.imprimirCertificado();
}
}
Iterator<Persona>i=aCollection.iterator();
while(i.hasNext()) {
miClosure.run(i.next());
}

igualito no? jajaja . Notar cómo debo declarar el tipo de la closure anteds de
instanciar el objeto que representa la closure. Notar como una closure en java
no es más que un objeto común y corriente cumpliendo con un trabajo un poco
extraño... para un objeto...



> Preguntas:
>  
> Porque hay que usar iteredores ¿?.
> Cual es la limitación técnica, para no usarlos o para usarlos ¿?.

la idea de utilizar iteradores es poder acceder a una Collection (no importa
cual) de forma homogenea. Collection<T>, Iterator<T>, etc son interfaces
implementadas por las colecciones en si y sus propios iteradores. esto te
permite hacer i=col.iterator() no importando cuál sea la colección en si. Dado
que cualquier colección puede iterarse utilizando los mismos mensajes, en las
últimas versiones del lenguage optimizaron el compilador para que acepte
iteraciones de este tipo "for(Persona p : aCollection) {}"

> Porque las colecciones se implementan a nivel de inteface y no como una
jerarquía de clases comunes y corrientes como en ST ¿??.

No. Las colecciones de java se implementan en clases, igual que las de
smalltalk. La jerarquía de clases que implementan las colecciones en java es
bastante parecida a la de smalltalk. Sin embargo, la diferencia está en el uso
de interfaces para separar responsabilidades. Por ejemplo:

public class Vector<E>
extends AbstractList<E>
implements List<E>, RandomAccess, Cloneable, java.io.Serializable

quiere decir: Vector es una Abstractlist que acepta los mensajes
declarados en List, RandomAccess, Cloneable y Serializable

> Como solucionan el que la colección pueda alojar cualquier tipo/clase de
objeto ¿?.
>  

igual que en smalltalk, almacenando Object s. Te obviás el casteo de tipo
utilizando genericos (Collection<Persona>).

>  
>  
> Saludos kiko
>  PD: Mis preguntas no tienen carácter irónico  o de mala leche, solo pregunto
intentando no ser uno mas de los tantos que hablan de todo sin saber nada.
>
>
>
________________________________________________________________________________\
____
> ¡Buscá desde tu celular!
>
> Yahoo! oneSEARCH ahora está en Claro
>
> http://ar.mobile.yahoo.com/onesearch


--
Sebastian Gurin <sgurin@...>



Mar, 8 de Jul, 2008 1:48 pm

cancerbero_sgx
Sin conexión Sin conexión
Enviar correo Enviar correo

Reenviar Mensaje #16558 de 17205 |
Desplegar mensajes Autor Ordenar por fecha

Hola Gente ATENCIÓN: este mail puede herir susceptibilidades de los usuarios JAVA. Hoy tuve la oportunidad de asistir a una clase sobre java. La verdad...
kikogregoris
Sin conexión Enviar correo
9 de Abr, 2008
4:49 pm

Hola Kiko, gente Desde ya que es un lenguaje restricitivo. No es homogeneo,etc. En general se hace una bajada de linea (desde afuera) al poco uso de herencia y...
Elvio Fernandez
elvisman_780
Sin conexión Enviar correo
9 de Abr, 2008
7:21 pm

On Wed, 9 Apr 2008 16:21:53 -0300 ... Como yo lo veo las ventajas de java frente a lo que ya había son en productividad. nada más.. "productividad" tomada...
Sebastian Gurin
cancerbero_sgx
Sin conexión Enviar correo
9 de Abr, 2008
11:44 pm

On Tue, 8 Apr 2008 23:10:00 -0300 (ART) ... Hola! Si, a este respecto, es interesante comparar técnicas de refactoring en ambas tecnologías (me refiero, al...
Sebastian Gurin
cancerbero_sgx
Sin conexión Enviar correo
9 de Abr, 2008
11:44 pm

kiko, No te escuses aquí sobre que podría opinar alguien que sea fanático de Java (ellos tienen muchos foros infinitamente mas frecuentados que nosotros), ...
Alejandro F. Reimondo
alereimondo
Sin conexión Enviar correo
11 de Abr, 2008
5:14 pm

Hola sebastian Gracias por los comentarios. Sobre esto: yo lo entiendo así: en java todas las clases que definamos, en tiempo de ejecución, los objetos que...
kikogregoris
Sin conexión Enviar correo
11 de Abr, 2008
5:27 pm

On Fri, 11 Apr 2008 14:04:43 -0300 (ART) ... hola kiko ... si ahora que me leo a mi mismo no me quedó muy claro. En resumen mi punto era que la diferencia...
Sebastian Gurin
cancerbero_sgx
Sin conexión Enviar correo
11 de Abr, 2008
6:31 pm

Hola gente   Hace algunos días repasaba conceptos de java para el examen y me volvía a sorprender por todo lo que impone el solo echo de decir "Clase =...
kikogregoris
Sin conexión Enviar correo
26 de Jun, 2008
2:30 pm

... ¿que? En Java el tipo está modelado/representado por la Interface, no por la clase....
Sergio Fedi
sfedi
Sin conexión Enviar correo
26 de Jun, 2008
2:33 pm

On Thu, 26 Jun 2008 06:02:06 -0700 (PDT) ... Hola Kiko, yo he leído las discusiones sobre clase vs especie y nunca terminé de entender la diferencia... tal...
Sebastian Gurin
cancerbero_sgx
Sin conexión Enviar correo
26 de Jun, 2008
5:47 pm

kiko, Los tipos son de los datos. Cuando algo no puede cambiar podes asignarle un tipo. Los tipos son utiles para hacer sistemas cerrados. Ale. ... From:...
Alejandro F. Reimondo
alereimondo
Sin conexión Enviar correo
26 de Jun, 2008
6:54 pm

Hola Sergio, Sebastian, Angel, Ale, lista   Ante todo disculpas por la demora en responder, estaba ocupado con un trabajo de prolog para la facultad. Todo lo...
kikogregoris
Sin conexión Enviar correo
8 de Jul, 2008
12:12 am

Hola kikoGregoris, te respondo entre líneas (y mirá que no soy ningún experto) On Mon, 7 Jul 2008 15:55:15 -0700 (PDT) ... mmm... no. En mi opinión la...
Sebastian Gurin
cancerbero_sgx
Sin conexión Enviar correo
8 de Jul, 2008
2:24 pm

Hola gente! Gregoris, bien, al fin entiendo alguna frase tuya de un anterior email.... Bueno, me estoy despertando, aca va un comentario parcial.... Primero,...
Angel "Java" Lopez
ajlopez2000
Sin conexión Enviar correo
8 de Jul, 2008
9:17 am

Hola gente! Un comentario a la completa, clara e interesante respuesta de Sebastian... No solo interfaces es para humanos. Pienso que gran parte de los...
Angel "Java" Lopez
ajlopez2000
Sin conexión Enviar correo
8 de Jul, 2008
4:33 pm
Avanzado

Copyright © 2009 Yahoo! de Argentina S.R.L. Todos los derechos reservados.
Política de privacidad - Condiciones del Servicio - Reglas de la comunidad de Yahoo! - Ayuda