2010-06-14 35 views
14

Tôi biết những điều cơ bản của phương pháp này, thủ tục, chức năng và các lớp học, nhưng tôi luôn luôn nhầm lẫn giữa những người trái ngược với lập trình hướng đối tượng vì vậy xin vui lòng bất kỳ cơ thể cho tôi biết sự khác biệt giữa những người có ví dụ đơn giản?phương pháp vs chức năng vs thủ tục vs lớp học?

+4

Một trong những thuật ngữ này không thực sự phù hợp với những người khác :) (theo so sánh) –

Trả lời

30

Một lớp, trong hiện tại, OOP truyền thống, là một tập hợp các dữ liệu (biến thành viên) liên kết với nhau với các chức năng/thủ tục mà làm việc trên dữ liệu đó (hàm thành viên hoặc các phương pháp). Lớp không có mối quan hệ với ba thuật ngữ khác ngoài thực tế là nó "chứa" (đúng hơn "được liên kết với") sau này.

Ba cụm từ còn lại ... tốt, điều đó phụ thuộc.

Chức năng là tập hợp các câu lệnh tính toán. Vậy là thủ tục . Tuy nhiên, trong một số ngôn ngữ nhớ lại rất hậu môn, một hàm trả về một giá trị và một thủ tục thì không. Trong thủ tục ngôn ngữ như vậy thường được sử dụng cho các tác dụng phụ của họ (như I/O) trong khi các chức năng được sử dụng để tính toán và có xu hướng tránh tác dụng phụ. (Đây là cách sử dụng tôi có xu hướng ưu tiên. Có, tôi là người theo dõi hậu môn.)

Hầu hết các ngôn ngữ không phải là hậu môn, và kết quả là mọi người sẽ sử dụng thuật ngữ "chức năng" và "thủ tục" , thích cái kia dựa trên nền của chúng. (Modula- * lập trình viên sẽ có xu hướng sử dụng "thủ tục" trong khi C/C++/Java/bất cứ điều gì sẽ có xu hướng sử dụng "chức năng", ví dụ.)

Một phương pháp chỉ là biệt ngữ cho một hàm (hoặc thủ tục) liên kết với một lớp học. Thật vậy không phải tất cả các ngôn ngữ OOP đều sử dụng thuật ngữ "phương pháp". Trong một triển khai điển hình (nhưng không phổ quát!), Các phương thức có một tham số đầu tiên ngụ ý (được gọi là các thông số như this hoặc self hoặc tương tự) để truy cập lớp chứa. Đây không phải là, như tôi đã nói, phổ quát. Một số ngôn ngữ làm cho tham số đầu tiên đó rõ ràng (và do đó cho phép được đặt tên bất cứ điều gì bạn muốn) trong khi vẫn còn những người khác không có tham số đầu tiên kỳ diệu nào cả.


Edited để thêm ví dụ này:

Sau đây chưa được kiểm trauncompiled C++ - như mã sẽ hiển thị cho bạn những gì loại của sự vật có liên quan.

class MyClass 
{ 
    int memberVariable; 

    void setMemberVariableProcedure(int v) 
    { 
    memberVariable = v; 
    } 

    int getMemberVariableFunction() 
    { 
    return memberVariable; 
    } 
}; 

void plainOldProcedure(int stuff) 
{ 
    cout << stuff; 
} 

int plainOldFunction(int stuff) 
{ 
    return 2 * stuff; 
} 

Trong mã này getMemberVariableProceduregetMemberVariableFunction là cả hai phương pháp.

+3

Sự khác biệt về chức năng/thủ tục không thực sự là hậu môn - đó là một ý tưởng thực sự hay và thường được gọi là tách/truy vấn. – kyoryu

+1

Tất cả những điều đó có nghĩa là bạn đang trở thành người theo dõi qua đường hậu môn (hay là "hậu môn") như tôi vậy. ;) –

+0

Cảm ơn bạn có thể cung cấp cho tôi ví dụ. để phân biệt giữa điều này? –

3

Thủ tục, chức năng và phương pháp nhìn chung giống nhau, chúng giữ một số câu lệnh xử lý.

Sự khác biệt duy nhất tôi có thể nghĩ giữa ba địa điểm này và những nơi chúng được sử dụng.

Tôi có nghĩa là 'phương pháp' thường được sử dụng để xác định các hàm bên trong lớp, trong đó một số loại quyền truy cập của người dùng giống như công khai, được bảo vệ, riêng tư có thể được xác định.

"Thủ tục", cũng có chức năng nhưng thường đại diện cho một loạt chức năng cần được thực hiện, khi hoàn thành một chức năng hoặc tương tự với một chức năng khác.


Lớp học là tập hợp các thuộc tính và phương pháp liên quan. Các thuộc tính định nghĩa đối tượng của lớp khi các phương thức là hành động được thực hiện bởi hoặc được thực hiện trên lớp.

Hope, đây là hữu ích

+0

Theo truyền thống, sự khác biệt giữa thủ tục và hàm là hàm trả về giá trị trong khi thủ tục không. Các ngôn ngữ kiểu C không tạo ra sự khác biệt này - mọi thứ đều là một hàm, nó chỉ có thể trả về 'void'. – walkytalky

+0

@walkytalky, cảm ơn bạn đã thêm rằng – Starx

Các vấn đề liên quan