Alan Kay: "The Big Idea is Messaging" [duplicato]

3

Alan Kay ha dichiarato che "OO" riguardava la messaggistica , non gli oggetti e ha disegnato un parallelo con le celle biologiche .

Le sue opinioni sono allettanti, ma vaghe. Il modo in cui lo capisco è qualcosa come un automa cellulare.

In un automa cellulare c'è una griglia di celle che può trovarsi in una varietà di stati. Quindi un evento di aggiornamento viene inviato a tutte le celle. In risposta, le celle aggiornano il loro stato in base al loro stato e allo stato dei loro vicini.

Quindi se assumiamo ...

Grid => Software System
Cell => Object
Update Rule => Event/Message

Quindi abbiamo un punto di partenza. La località è diversa (a meno che non definiamo i vicini come oggetti connessi) e non ci sia una sola regola di aggiornamento, ma una varietà di messaggi / eventi a cui gli oggetti possono rispondere.

Avendo usato gli automi cellulari, sono consapevole del loro potere e della straordinaria emergenza globale che emerge dalle interazioni locali. Pensare a questo applicato alla sfera degli oggetti è mozzafiato.

O forse per dirla in un altro modo, è un sistema di eventi estremi in cui una rete di oggetti forma l'architettura, eventi (globali?) definiscono il flusso di informazioni e l'interazione di questi oggetti definisce il comportamento del sistema.

Questa comprensione è corretta? In caso contrario, mi piacerebbe chiarimenti e anche esempi di codice scritto in questo sistema di messaggi (rispetto al codice che non lo è), per renderlo concreto.

    
posta R. Barzell 05.12.2014 - 20:14
fonte

1 risposta

2

La chiave per la vista di Alan Kay è la ragione per cui perché viene inviato un messaggio.

Quando un oggetto di classe A invia un messaggio a un oggetto di classe B perché A vuole che B faccia qualcosa di specifico, non è OO (secondo la visione di Kay). Se A sta inviando il messaggio a informa B che qualcosa è successo (piuttosto che dire di fare qualcosa,) che è OO.

Un buon esempio di questo è un metodo onClick che informa qualcosa su cui è stato fatto clic su un pulsante.

Un cattivo esempio potrebbe essere il metodo append su un contenitore. Questa non è la programmazione OO, piuttosto è una programmazione modulare standard di palude. Non c'è niente di sbagliato nella programmazione modulare, ma è diverso da OO.

Modifica

Sento il bisogno di difendere qualcosa di quanto sopra ... Vedi l'e-mail di Alan Kay che è stata postata nella domanda ( qui ). Notare le citazioni come "Volevo sbarazzarmi dei dati". Nota come continua a tornare alla nozione di evitare i dati a favore dell'invio di messaggi agli oggetti.

Quando dici a un contenitore di aggiungere, stai occupando esplicitamente dei dati. Ti interessa se l'attributo dimensione del contenitore è aumentato o meno. Ogni volta che viene chiamata una funzione perché il chiamante vuole garantire la post-condizione del chiamato, ovvero un riferimento ai dati, esplicito o implicito.

Mr. Kay voleva evitarlo, e questo significa che OO riguarda l'invio di messaggi a informare oggetti di cose che accadono, non a forzarli per cambiare il loro stato.

    
risposta data 05.12.2014 - 23:00
fonte