2013-04-25 5 views
8

Po prostu zdecydowałem się zintegrować moje umiejętności programowania MATLAB z bardziej spójnym i rygorystycznym kodowaniem Java. Dlatego mam nadzieję, że to nie będzie zbyt naiwne pytanie.Metody Java vs. funkcje

Chciałbym wiedzieć, czy istnieje prawdziwy powód, dla którego Java odnosi się do funkcji jako methods, a nie jako functions, jak to robi wiele innych języków programowania.

Czy to z powodu wewnętrznej natury Javy w porównaniu z językami proceduralnymi, takimi jak C/C++? czy są jakieś inne ważne (lub subtelne) powody?

Z góry dziękuję.

+0

metody są funkcje w zajęciach z zakresu klasy ... –

+0

@JavaNewb Co? –

+1

Nie jestem naprawdę zadowolony z definicji zawartej w przyjętej odpowiedzi w "dupe", szczerze mówiąc; nadal sprowadza się do kwestii definicji, a ta definicja jest zależna od kontekstu. Dolna linia to "ponieważ tak nazywa się Java". –

Odpowiedz

3

Moim zdaniem ta http://www.jot.fm/issues/issue_2008_03/article4/images/figure2.gif

one, two and three dimensional method dispatch

z http://www.jot.fm/issues/issue_2008_03/article4/ pomaga zrozumieć jedną z głównych różnic między oo oraz programowanie proceduralne. Zasadniczo chodzi o to, że

programowanie proceduralne zapewnia tylko jeden wymiar skojarzyć jednostkę obliczeniową z nazwy. Tutaj wywołania procedur lub nazwy są bezpośrednio mapowane do implementacji procedur.Na rysunku a nazywając m1 nie pozostawia wyboru, ale wezwanie jedynej procedury m1

podczas

programowanie obiektowe dodaje kolejny wymiar do rozpoznawania nazw do tego programowania proceduralnego. Oprócz metody lub nazwy procedury , wysyłanie wiadomości powoduje uwzględnienie odbiornika komunikatu w analizie podczas wyszukiwania metody. Na rysunku 2b widzimy dwie implementacje metody m1. Wybór odpowiedniego sposobu zależy nie tylko nazwa wiadomości M1, ale odbiorca rzeczywista komunikat o Ry

trzecia część rysunku (c) odnosi się do poddawania zorientowany programowania w którym zachowanie obiektu (nazywana metoda) zależy nie tylko od statusu obiektu, ale także od podmiotów, które go wywołują (lub obserwują). Jest to jednak poza zakresem twojego pytania.

0

Są takie same. C++ zazwyczaj nazywa je funkcjami. Java zazwyczaj określa je jako metody.

Metody są zwykle powiązane z klasą.

Od czasu do czasu usłyszysz też "funkcję klasy", która jest tylko metodą.

Nie ma znaczenia, ludzie będą wiedzieć, o czym mówisz, jeśli je nazwiesz.

+4

To nieprawda, nawet jeśli uważamy, że to to samo. Metoda dotyczy obiektów, a funkcja jest niezależna od obiektów. –

+1

Oczywiście nie byłeś długo w świecie programowania. Wracając przed Javą, nazywaliśmy metody "funkcjami klasy". Nie dajcie się zwieść semantykom. –

+1

Zobacz ten wpis (odpowiedź Aarona). http://stackoverflow.com/questions/155609/what-is-the-difference-between-a-method-and-afunction –

4

Istnieje pewna różnica między metodą a funkcją.

Funkcja jest po prostu kodem, który można wywołać w dowolnym momencie po nazwie i można przekazać do niego argumenty zwane również parametrami, a także można uzyskać wynik z dowolnej funkcji, tj. Zwracanej wartości funkcji.

Ale metoda jest kodem, który jest wywoływany przez jego nazwę, ale jest powiązany z dowolnym obiektem. Możesz przekazać parametry również metodom i możesz również uzyskać pewną wartość zwracaną przez metody, ale rzeczą jest, że zawsze będą one kojarzone z niektórymi obiektami.

EDITED

Java jest obiektowym, nie można mieć kodu Java, aby uruchomić bez klas, w większości przypadków jednak w C++ można uzyskać bieg kodu bez klas. Tak więc w Javie będą klasy, a kod będzie zapisywany w klasach, więc nazywane są metodami zamiast funkcjami, ponieważ będą one powiązane z obiektami.

Ale w C++ możesz mieć jakąś funkcję, którą można wywołać jawnie przekazując wartości.

W prostych słowach można powiedzieć, że metoda jest funkcją związaną z obiektem.

+2

* Java jest naprawdę obiektowa * Nie powiedziałbym tego. Java ma metody statyczne (w rzeczywistości punktem wejścia do każdego programu Java jest metoda statyczna) i należą one do klas, ale nie do obiektów. Java jest imperatywnym, proceduralnym językiem, który może (i powinien) być używany w sposób zorientowany na obiekt, ale w żadnym wypadku nie jest to czysty język OO. –

+0

@SeanPatrickFloyd Nie nazwałem go PURELY OO, nazwałem to naprawdę. czy to też jest złe? i jak możesz powiedzieć, że Java to język proceduralny? Jakieś źródła do czytania tego? – gprathour

+0

Jest to język OO, który może zostać nieprawidłowo użyty w sposób inny niż OO (nic nie powstrzyma cię od napisania pojedynczej głównej metody o długości tysięcy linii bez przydzielania pojedynczego obiektu). jeśli to pasuje do twojej definicji prawdziwie OO, nasze definicje różnią się –

1

Nie mogę pomóc, myśląc o niepotrzebnym dramacie w tym. "metody" to po prostu nazwa, z której korzysta Java, dla podprogramów, które mogą lub nie wymagają parametrów i mogą zwracać wartość lub nie?

E.g. prawidłowe "metody" mogą być następujące, bez wchodzenia w czystość OO, kanoniczne definicje "funkcji" itp .; oba poniżej mogą lub nie mogą korzystać z aktualnego stanu „” An obiektu (instancja wartości zmiennych) w ich realizacji też:

// kind of a function, returns a value 
public int calculateStuff(int param1) 

// more of a procedure, presumably just "does stuff", returns nothing 
public void doStuff(int param1)