Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Debates (https://www.clubdelphi.com/foros/forumdisplay.php?f=29)
-   -   nesecito enviar mensajes a objetos de un DataModule.Components[i] (https://www.clubdelphi.com/foros/showthread.php?t=352)

delphi.com.ar 13-05-2003 16:40:27

Cita:

Posteado originalmente por roman
¿Qué son los eventos de Delphi?

¿Son métodos? ¿Son mensajes? ¿A qué corresponden en el ambiente Windows?

Creo que Delphi es uno de los lenguajes más claros para entender este concepto, para Delphi los eventos no son mas que propiedades del tipo "procedure of object", son manejadas como propiedades por el lenguaje y reciben el mismo trato que cualquier propiedad, la única diferencia notable es en tiempo de diseño.
Con respecto al ambiente Windows, un evento de una clase en Delphi no necesariamente tiene que ser causa de un mensaje de Windows, por ejemplo el evento OnChange de un TStringList, lejos está de ser algo propio del sistema operativo. Los mensajes de Windows, son es la manera que tiene Windows de producir eventos para comunicarle a las ventanas los "eventos" sucedidos. Es medio redundante, pero espero que sea claro.


Saludos Foristas!

Kafu 16-05-2003 17:09:06

Un saludo a todos.
Aunque creo que en lo básico es un tema de semántica, desde mis escasos conocimientos sí se me hace más cómoda una diferenciación entre método y mensaje.
Perdonadme si no soy muy estricto en la terminología. Creo que para quien no se interna a menudo en la vcl, que francamente da miedo, el uso de métodos explicitos es lo que se nos presenta como única opción.
Quiero decir que es más fácil de comprender y controlar la llamada a un método público de un objeto puesto que sabemos qué es lo que va a ocurrir y casi cuándo.
Pero sí me parece que es de alguna manera diferenciable eso, por mucho que internamente se traduzca en mensajes, con por ejemplo la creación de un mensaje nuevo (no tiene que ser de windows como ya se ha comentado) que se lance para que objetos preparados con métodos "oreja" reaccionen en consecuencia. Esta reacción es menos previsible, no es una llamada explicita.

roman 16-05-2003 18:31:53

Cita:

Kafu llegó y dijo
Un saludo a todos.
... creo que en lo básico es un tema de semántica,
desde mis escasos conocimientos sí se me hace más cómoda una diferenciación entre método y mensaje.

Tienes razón, es una cuestion de semántica y ciertamente cada quien utilizará la terminología con la cual se sienta más cómodo.

Cita:

Kafu llegó y dijo

Perdonadme si no soy muy estricto en la terminología. Creo que para quien no se interna a menudo en la vcl, que francamente da miedo, el uso de métodos explicitos es lo que se nos presenta como única opción.
Quiero decir que es más fácil de comprender y controlar la llamada a un método público de un objeto puesto que sabemos qué es lo que va a ocurrir y casi cuándo.

También esto es correcto. El trabajo del VCL es lidiar con las entrañas del Api de Windows para proporcionarnos una interfaz más sencilla y acorde a la semántica de Delphi. En una gran cantidad de ocasiones el programador no tiene que entender las entrañas del VCL ni del Api de Windows, de lo contrario estaríamos mejor programando en C.


Cita:

Posteado originalmente por Kafu
Pero sí me parece que es de alguna manera diferenciable eso, por mucho que internamente se traduzca en mensajes, con por ejemplo la creación de un mensaje nuevo (no tiene que ser de windows como ya se ha comentado) que se lance para que objetos preparados con métodos "oreja" reaccionen en consecuencia. Esta reacción es menos previsible, no es una llamada explicita.
Aquí es donde ya difiero pero el punto es que no me he dado a entender bien. Yo no estaba tratando de establecer un paralelismo entre Windows y Delphi. Uno y otro son dos cosas muy distintas. Uno es un sistema operativo y el otro un ambiente de desarrollo y un lenguaje de programación.

Lo que yo trato de establecer es:

Desde el punto de vista teórico de orientación a objetos, los objetos se mandan mensajes unos a los otros.

En la práctica, distintos sistemas implementarán los objetos y el envío de mensajes de formas distintas.

Delphi y Windows son dos ejemplos de implementación de objetos y ambos lo hacen de maneras muy distintas

El hecho de que una llamada a un método en Delphi sea un mensaje desde el punto de vista OO, no se debe a que internamente se traduzca a una llamada a SendMessage del Api de Windows, sino a que le estamos comunicando a un objeto lo que deseamos hacer con él.

La razón de que Form1.Close, desde el punto de vista de OO, sea un mensaje, no se debe a que se traduzca en una llamada a SendMessage(Form1.Handle, WM_CLOSE, 0, 0). Se debe simplemente a que le estamos comunicando al objeto Form1 que se cierre.

Esto es, OO establece el concepto de mensajes desde un punto de vista conceptual y no se preocupa de como estos mensajes se implementen porque de hecho OO no se refiere a ningún lenguaje en particular.

Por otro lado, si bien Delphi y Windows son sistemas muy distintos y cada cuál resuelve las cosas a su manera, Delphi debe comunicarse con Windows. Dado que hablan lenguas distintas (implementan OO de formas distintas) debe haber una traducción. El traductor (al menos para la parte visual) es justamente el VCL.



Y lo cierto también es que, al programar en Delphi, debido a que en ocasiones debemos lidiar con el Api de Windows, conviene por razones prácticas distinguir llamadas a métodos (implementación Delphi de mensajes OO) de mensajes a ventanas (implementación de Windows de los mensajes OO)

// Saludos

delphi.com.ar 19-05-2003 17:52:40

Cita:

Posteado originalmente por roman
al programar en Delphi, debido a que en ocasiones debemos lidiar con el Api de Windows, conviene por razones prácticas distinguir llamadas a métodos
Ese fue el comienzo del debate, en lo que creo que estamos todos de acuedo!

roman 19-05-2003 20:01:15

Cita:

delphi.com.ar llegó y dijo
Ese fue el comienzo del debate...
No precisamente, en realidad fué:

Cita:

Hace varias lunas delphi.com.ar dijo:

Bueno, ante todo aclaremos que estas confundiendo los temas, no estas enviando mensajes, estas queriendo ejecutar un método propio de una clase, tené en cuenta que los mensajes solo se los puedes enviar a las ventanas, en Delphi todos los componentes heredados de TControl y alguno otro en particular que cree una ventana.

Tu afirmación fue categórica y negó los principios de OO sin aclarar que te referías a los usos y costumbres pues, tal como

Cita:

marcs indicó

es cierto que existen los dos significados...

- Desde el punto de vista cuotidiano del programador windows, entendemos que enviar un mensaje es ejecutar una llamada a la API de Windows.

- Sin embargo, cuando se estudia la orientación a objetos desde el punto de vista teórico, lo que nos venden ( o al menos me vendieron a mi) es que los métodos son la manera de implementar lo que a nivel conceptual es enviar un mensaje a un objeto
.
Y el segundo significado no sólo es el que establece la teoría de OO (aunque la práctica use otra terminología), sino que es válido e importante para quienes se encuentren estudiando orientación a objetos.

// Saludos

delphi.com.ar 20-05-2003 00:25:24

Tenés razón en que fué un no categórico, pero como vos bien dijiste, conviene por razones prácticas distinguir llamadas a métodos (implementación Delphi de mensajes OO) de mensajes a ventanas (implementación de Windows de los mensajes OO)
Creo que en eso estamos todos de acuerdo.

Saludos y Feliz Cumpleaños! :D

roman 20-05-2003 01:06:52

Cita:

Posteado originalmente por delphi.com.ar
Saludos y Feliz Cumpleaños! :D
Muchas gracias d.c.a!

Me parece que sería buena idea declarar cerrado este debate para no empantanarnos en él :)

// Saludos


La franja horaria es GMT +2. Ahora son las 16:40:04.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi