2013-04-25 45 views
8

Tôi vừa quyết định tích hợp các kỹ năng lập trình MATLAB của mình với một số mã Java chặt chẽ hơn và chặt chẽ hơn. Vì vậy, tôi hy vọng nó sẽ không phải là một câu hỏi quá ngây thơ.Phương pháp của Java so với hàm

Tôi muốn biết nếu có bất kỳ lý do thực sự nào tại sao Java đề cập đến các chức năng như methods và không phải là functions, như nhiều ngôn ngữ khác của chương trình.

Có phải vì bản chất bên trong của OOP Java so với các ngôn ngữ thủ tục như C/C++? hoặc có bất kỳ lý do quan trọng (hoặc tinh tế) nào khác không?

Xin cảm ơn trước.

+0

phương pháp là chức năng trong lớp học với quy mô lớp học ... –

+0

@JavaNewb gì? –

+1

Tôi không thực sự hài lòng với định nghĩa chứa trong câu trả lời được chấp nhận trong "dupe", khá thẳng thắn; nó vẫn đi xuống một vấn đề định nghĩa, và định nghĩa đó phụ thuộc vào ngữ cảnh. Điểm mấu chốt là "bởi vì đó là những gì Java gọi chúng". –

Trả lời

3

Theo tôi con số này http://www.jot.fm/issues/issue_2008_03/article4/images/figure2.gif

one, two and three dimensional method dispatch

từ http://www.jot.fm/issues/issue_2008_03/article4/ giúp tìm hiểu một trong những khác biệt chính giữa OO và lập trình thủ tục. Về cơ bản ý tưởng là

Lập trình thủ tục chỉ cung cấp một thứ nguyên để liên kết đơn vị tính toán với tên. Ở đây, các cuộc gọi thủ tục hoặc tên được ánh xạ trực tiếp đến các triển khai thủ tục.Trong hình một gọi m1 lá không có lựa chọn nào khác invocation của việc thực hiện duy nhất của thủ tục m1

khi

lập trình hướng đối tượng cho biết thêm một chiều hướng cho tên độ phân giải với lập trình thủ tục. Ngoài phương thức hoặc tên thủ tục , công cụ nhắn tin sẽ đưa người nhận tin nhắn vào số xem xét khi tìm kiếm phương pháp. Trong Hình 2b, chúng ta thấy hai triển khai của phương thức m1. Việc lựa chọn phương pháp thích hợp không chỉ phụ thuộc vào tên thông điệp m1, mà còn người nhận thông điệp thực tế, đây Ry

phần thứ ba của các con số (c) đề cập đến nội dung chương trình định hướng, trong đó hành vi của một đối tượng (phương thức được gọi) không chỉ phụ thuộc vào trạng thái đối tượng mà còn trên các đối tượng đang gọi (hoặc quan sát) nó. Tuy nhiên điều này thực sự nằm ngoài phạm vi câu hỏi của bạn.

0

Chúng giống nhau. C++ thường gọi chúng là các hàm. Java thường đề cập đến chúng như là các phương thức.

Phương pháp thường được liên kết với một lớp học.

Bạn thỉnh thoảng cũng sẽ nghe thấy "chức năng lớp", đây chỉ là một phương pháp.

Không quan trọng, mọi người sẽ biết bạn đang nói về điều gì nếu bạn gọi cho họ.

+4

Nó không đúng, ngay cả khi chúng tôi nghĩ rằng đó là điều tương tự. Một phương thức dành cho các đối tượng và một hàm độc lập với các đối tượng. –

+1

Bạn rõ ràng đã không ở trong thế giới lập trình lâu dài. Quay lại trước Java, chúng tôi gọi các phương thức là "các hàm lớp". Không bị treo lên trên ngữ nghĩa. –

+1

Nhìn vào bài này (Aaron trả lời). http://stackoverflow.com/questions/155609/what-is-the-difference-between-a-method-and-a-function –

4

Vâng, có một sự khác biệt nhỏ giữa phương pháp và hàm.

Hàm chỉ là mã mà bạn có thể gọi bất kỳ lúc nào theo tên và bạn có thể chuyển đối số còn được gọi là tham số cho nó và bạn cũng có thể nhận kết quả từ bất kỳ hàm nào tức là giá trị trả về của hàm.

Nhưng phương pháp là mã được gọi bằng tên của nó nhưng được liên kết với bất kỳ đối tượng nào. Bạn cũng có thể truyền tham số cho các phương thức và bạn cũng có thể nhận được một số giá trị trả về từ các phương thức nhưng điều là chúng sẽ luôn được liên kết với một số đối tượng.

EDITED

Java là hướng đối tượng, bạn không thể có mã Java để chạy mà không có các lớp học trong nhiều trường hợp tuy nhiên trong C++ bạn có thể chạy mã của bạn mà không cần lớp. Vì vậy, trong Java sẽ có các lớp và mã sẽ được viết trong các lớp để chúng được gọi là các phương thức thay vì các hàm, vì chúng sẽ được liên kết với các đối tượng.

Nhưng trong C++ bạn có thể có một số hàm có thể được gọi bằng cách chuyển giá trị một cách rõ ràng.

Nói một cách đơn giản, bạn có thể nói, một phương thức là hàm có liên quan đến một đối tượng.

+2

* Java thực sự là hướng đối tượng * Tôi sẽ không nói như vậy. Java có các phương thức tĩnh (trên thực tế, điểm vào cho mỗi chương trình Java là một phương thức tĩnh), và chúng thuộc về các lớp, nhưng không thuộc về các đối tượng. Java là một ngôn ngữ bắt buộc, thủ tục có thể (và nên) được sử dụng theo cách hướng đối tượng, nhưng nó không phải là ngôn ngữ OO thuần túy –

+0

@SeanPatrickFloyd Tôi không gọi nó là PURELY OO, tôi gọi nó là Truely. nó có tệ không? và làm thế nào bạn có thể nói Java là ngôn ngữ thủ tục? Bất kỳ nguồn nào để đọc điều này? – gprathour

+0

Đó là một ngôn ngữ OO có thể được sử dụng sai theo cách không phải OO (không có gì ngăn bạn viết một phương thức chính hàng nghìn dòng dài mà không có phân bổ đối tượng đơn lẻ). nếu điều đó phù hợp với định nghĩa của bạn về OO thực sự, các định nghĩa của chúng tôi khác nhau –

1

Không thể giúp suy nghĩ rất nhiều bộ phim không cần thiết trong bộ phim này. "phương pháp" chỉ là một cái tên chắc chắn, Java sẽ xảy ra, cho các chương trình con có thể hoặc không yêu cầu tham số, và có thể hoặc không thể trả về một giá trị?

Ví dụ: "các phương thức" hợp lệ có thể như sau, mà không đi vào độ tinh khiết của OO, các định nghĩa kinh điển của "các hàm", v.v. cả hai dưới đây có thể hoặc không thể sử dụng một đối tượng hiện tại "nhà nước" (ví dụ giá trị biến) trong thực hiện của họ quá:

// 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) 
Các vấn đề liên quan