Ver Mensaje Individual
  #23  
Antiguo 16-05-2003
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Reputación: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
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
Responder Con Cita