Da dove viene "metodo" come termine speciale in OOP?


13

"Metodo" è un termine speciale nella programmazione orientata agli oggetti. Qualcuno sa quando la parola ha iniziato ad essere usata in questo senso particolare, e in relazione a quale linguaggio di programmazione o altro ramo dell'apprendimento quantitativo?

Risposte:


11

Java e C # hanno ottenuto il metodo da C ++, che lo ha ottenuto da Simula .

E Algol probabilmente ha avuto influenza su Simula:

Inoltre, una versione MIT ALGOL, AED-0, ha collegato le strutture di dati ("plex", in quel dialetto) direttamente con le procedure, prefigurando quelli che in seguito furono chiamati "messaggi", "metodi" e "funzioni membro"


3
IIRC, C ++ preferisce di solito la 'funzione membro' rispetto a 'metodo'.
tdammers,

Secondo lo stesso articolo di Wikipedia, questo colloca il conio del termine (relativo a OOP) nella prima metà degli anni '60.
Tulains Córdova,

2

È difficile trovare una risposta definita là fuori, ma la prima lingua a riferirsi a cose come i metodi sembra essere stata Simula sebbene questo possa essere falso o retroattivo. Dato che le funzioni (dalla matematica) e le procedure (anche dalla matematica) si presentano nei linguaggi di programmazione, la cosa migliore che posso immaginare è che "Metodo" è una forma abbreviata di "Metodologia".

Tutti questi sono subroutine, bit di codice che compongono un programma per computer. Immagino che "Metodo" sia stato scelto perché l'idea alla base della programmazione in stile OOP è quella di riutilizzare il codice il più possibile. Pertanto, potresti avere una procedura, ma un metodo rende più chiaro che si tratta di un nuovo stile al lavoro. Onestamente, sono stato conosciuto per chiamare funzioni di metodi e ho sentito funzioni chiamate metodi.


6
Temo che "calcoli" in modo errato: il metodo (un processo per raggiungere un obiettivo) e la metodologia (lo studio) hanno significati diversi.
JK,

1
Inoltre, "metodo" esiste da molto tempo come parola inglese. Non è necessario cercare una parola più lunga da cui contrarre.
Steve314,

Usando "funzione" invece di "metodo", questo è in gran parte colpa di C ++, e poiché C non ha il concetto di "procedura", solo una "funzione" che ritorna void. Le funzioni dei membri C ++ sono strettamente correlate alle normali funzioni (diversamente da Simula) - avere un thisparametro implicito e (possibilmente) un meccanismo di invio in fase di runtime non cambia davvero quello con cui hai a che fare. Non so se C sia stato il primo a trattare funzioni e procedure come la stessa cosa, ma Pascal (un linguaggio più recente) ha functione procedureparole chiave - sebbene IIRC, le funzioni Pascal potrebbero avere effetti collaterali.
Steve314,

In particolare, il metodo è un modo per raggiungere un obiettivo, una descrizione / conoscenza, non il processo stesso. Questo ha un significato in relazione alla "classe", un altro concetto astratto, che definisce un tipo di oggetti. Ottieni una classe di oggetti e un metodo per fare X con ciascuno / uno qualsiasi degli oggetti, purché appartengano a quella classe. Si applica un metodo generico a un oggetto specifico e si ottengono risultati specifici per quell'oggetto.
SF.

1

Ho cercato informazioni su questo per decenni. La mia ipotesi finora è che il termine è entrato in Simula dallo speciale sottocampo del calcolo numerico, in cui l'algoritmo specifico per implementare una funzione (ad esempio un autovalore o altro) viene spesso chiamato un metodo . Questo perché potresti avere diversi metodi numerici per calcolare la stessa funzione matematica, con vari compromessi. In OOP, a causa dell'override del metodo, potresti avere la "stessa" funzione implementata in modo diverso come appropriato per la classe - ad esempio, l' area verrebbe implementata in modo diverso per Cerchio e Rettangolo , che sono entrambe le Forme , che hanno un'area. Questa sembra una ragionevole estensione del tradizionale concetto di metodo numerico.


0

Non so nulla sull'etimologia di questa parola nella storia di OOP. Ma so che non è deduttivo (deducibile). Un termine migliore (un termine più deduttivo o MDT) potrebbe essere reazione o agire


2
Sono assolutamente sicuro di non essere d'accordo con te. "Metodo" è una parola perfettamente cromulenta per quello che è iniziato tutto, un modo di modellare varie cose, con ogni "cosa" di una classe, con metodi per cambiare il modo in cui la cosa era. Allo stesso modo in cui i metodi cambiano le cose nel mondo reale, come.
Vatine,

Immagino che "metodo" originariamente descrivesse il codice di implementazione, simile a "procedura" - il metodo / procedura / algoritmo per calcolare il risultato. Usarlo per un'interfaccia in cui l'implementazione non è nota è un po 'strano, ma originariamente (in Simula) è stato probabilmente utilizzato per questo. Anche così, quando chiami un metodo, stai invocando il codice di implementazione, anche se non riesci a sapere (nel sito di chiamata) quale implementazione.
Steve314,

1
Immagino che le tre parole "funzione", "procedura" e "metodo", "funzione" abbiano una connotazione matematica (mappare gli ingressi alle uscite), "procedura" è indispensabile (eseguire una serie di passaggi, utilizzati anche nello stesso senso in campo militare); 'metodo' non ha alcuna connotazione, motivo per cui è preferito in OOP.
tdammers,

@Vatine +1 per "cromulento"
MattDavey,

-1

I programmatori con REAL REAL BASIC, VBx e VB.net sono a conoscenza di due tipi di dichiarazioni di metodo "FUNCTION" e "SUB". La famiglia di lingue BASIC consente di dichiarare una funzione con la parola chiave "FUNCTION" e la parola chiave "SUB". La differenza tra questi due è che una "FUNZIONE" può o non restituirà un valore dove come "SUB", esegue semplicemente il codice ma non restituisce alcun valore. Ma con l'avvento dei concetti di OO, i termini sub e funzione vengono iniziati in modo intercambiabile come metodi.


2
Lo stesso vale per la procedura / funzione di Pascal
Mchl

3
VB usa "Funzione" e "Sottotitolo", abbreviazione di "Sottoprogramma", non "Metodo".
Formica,

5
Dubito che Alan Kay pensasse di base quando si
inventò
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.