Qual è la connessione tra i messaggi nei diagrammi di sequenza e le chiamate ai metodi?

3

Poiché i diagrammi di sequenza rappresentano messaggi tra oggetti in un sistema, i messaggi devono rappresentare le chiamate di metodo. La mia domanda è se ho due oggetti nella linea di vita del diagramma

A --- doSomething (parametri) - > B

quale oggetto sta invocando il metodo?

A chiama il suo metodo doSomething che a sua volta usa B nella sua implementazione? Oppure A invia un messaggio a B e B è l'oggetto reale che richiama il metodo doSomething?

    
posta Arnold Doveman 19.07.2015 - 12:08
fonte

3 risposte

3

Is A calling its method doSomething which in turn uses B in its implementation? Or is A sending a message to B and B is the actual object that invokes the doSomething method?

A sta chiamando doQualcosa su B.

Come ciò accade è un dettaglio di implementazione.

Potrebbe essere una chiamata di funzione diretta, dove A sta chiamando il metodo su B, o potrebbe essere un messaggio, ad es. RPC, attraverso una rete, dove A richiede a B di eseguire il metodo e restituire il risultato. Potrebbe anche essere A chiamare la propria funzione che chiama B, se non sta facendo qualcos'altro di importante nel processo.

Ciò che è importante capire è che un diagramma di sequenza è un'astrazione che mostra chi sta facendo cosa quando. Non è tanto nei dettagli come ciò accade. Non sta cercando di scrivere il codice per te.

Quindi, se è importante che A stia chiamando se stesso, sarebbe nel diagramma della sequenza. Ma se A si chiama solo per chiamare B, questo verrebbe probabilmente estratto in A B .

    
risposta data 19.07.2015 - 14:34
fonte
2

A sta inviando il messaggio doSomething(parameters) a B

o

A chiama doSomething(parameters) su B

entrambi sono equivalenti. Penso che sia stato quando "loro", dove il factoring eval e / o apply nello schema (lisp), "loro" si sono resi conto che il passaggio di messaggi e le chiamate di metodo sono la stessa cosa.

Quindi la 2 delle 2 opzioni.

    
risposta data 19.07.2015 - 14:32
fonte
2

"Chiamare un metodo" e "inviare un messaggio" sono semplicemente due termini di due comunità diverse per la stessa cosa.

Quando Alan Kay ha inventato il termine "Orientamento agli oggetti", è stato strongmente ispirato da ciò che in seguito sarebbe diventato ARPANet e poi Internet: macchine indipendenti ("oggetti") con la loro memoria privata ("variabili d'istanza") che comunicano tra loro inviando messaggi.

Quindi, nel gergo di Smalltalk e dei suoi successori, gli oggetti derivati e cugini (Self, Ruby, Python, ECMAScript / JavaScript, Objective-C, Java, ...) inviano messaggi ad altri oggetti e quegli oggetti "rispondono" a quel messaggio comunque lo ritengono opportuno. La reazione più comune è invocare un metodo con lo stesso nome (cioè se si invia il messaggio foo a bar , il risultato sarà che verrà invocato il metodo foo di bar ), ma un oggetto può anche inoltrare il messaggio a un altro oggetto o rispondere con un valore precalcolato (variabile di istanza) o ignorarlo in modo evidente.

Nel gergo di Simula e della sua famiglia, questo è chiamato "chiamare un metodo" e il processo di decidere cosa fare in risposta è chiamato "dispacciamento virtuale." Nella famiglia C ++, è chiamato "chiamare una funzione virtuale" e "ricerca vtable".

Ma è tutto più o meno lo stesso.

Personalmente preferisco la metafora della messaggistica, perché evidenzia l'incapsulamento (quando invii un messaggio a qualcuno, non hai idea di cosa faccia con il messaggio, l'unica cosa che puoi osservare è la risposta), e perché evoca le analogie di consegnare il messaggio a qualcun altro ecc.

    
risposta data 19.07.2015 - 15:17
fonte

Leggi altre domande sui tag