2011-06-22 30 views
13

Tôi có một số nền C++ và muốn sử dụng các lớp trong Matlab.Sự khác biệt về cách xử lý và giá trị lớp học

Sự khác biệt giữa tay cầm và lớp giá trị là gì?

Tôi biết rằng tôi sẽ sử dụng một lớp giá trị nếu tôi muốn xác định một lớp ma trận với các toán tử quá tải như "+" và "*". Tuy nhiên, đôi khi có vẻ như mọi thứ chỉ làm việc cho tôi như tôi muốn khi tôi chọn một lớp xử lý.

Trả lời

19

MathWorks cung cấp một số thông tin sẽ được sử dụng cho mục đích nào trong số help và cũng trong số PDF documentation. Tôi cũng đã tìm thấy this article từ Yagtom Project (ban đầu là Matt Dunham) để trở thành một giới thiệu tuyệt vời cho OOP trong MATLAB.

Trong sự giúp đỡ này được giải thích như sau (tôi nhấn mạnh):

MATLAB hỗ trợ hai loại lớp - xử lý các lớp học và các lớp học giá trị. Loại lớp bạn sử dụng tùy thuộc vào hành vi mong muốn của các cá thể lớp và các tính năng bạn muốn sử dụng.

Sử dụng xử lý lớp khi bạn muốn tạo tham chiếu đến dữ liệu chứa trong đối tượng của lớp và không muốn sao chép đối tượng tạo bản sao của dữ liệu đối tượng. Ví dụ, sử dụng một lớp xử lý để thực hiện một đối tượng có chứa thông tin cho một mục nhập danh bạ điện thoại. Nhiều chương trình ứng dụng có thể truy cập vào một mục nhập danh bạ điện thoại cụ thể, nhưng chỉ có thể có một bộ dữ liệu cơ bản.

Hành vi tham chiếu của tay cầm cho phép các lớp này hỗ trợ các tính năng như sự kiện, người nghe và thuộc tính động.

Sử dụng các lớp giá trị để thể hiện các thực thể không cần phải là duy nhất, như giá trị số. Ví dụ, sử dụng một lớp giá trị để thực hiện một kiểu dữ liệu đa thức. Bạn có thể sao chép

Trong bài viết của Matt Dunham, một điểm tốt được thực hiện để phân biệt cả hai loại lớp:

trước đây Chúng tôi đã đề cập rằng các đối tượng trong Matlab là, (theo mặc định) đi ngang qua giá trị, có nghĩa là các bản sao đầy đủ được chuyển qua lại trong các cuộc gọi phương thức. Tuy nhiên, đối tượng đồ họa Matlab là được chuyển bởi tham chiếu, (qua tay cầm). Nếu chúng ta phân lớp lớp được xây dựng trong lớp xử lý [...] thì đối tượng của lớp của chúng ta cũng sẽ được chuyển qua tham chiếu, chứ không phải giá trị.

Cá nhân tôi có xu hướng sử dụng các lớp xử lý để có được một số cú pháp Tôi đã quen với với Java: cho một lớp xử lý, bạn có thể có các cửa hàng đối tượng tất cả các thông tin, chẳng hạn bạn có thể có các hoạt động như sort(a) (hoặc a.sort()) được thực hiện tại chỗ. Đối với các lớp giá trị tương đương với số này là a = sort(a) (hoặc a = a.sort()). Đối với các toán tử, cú pháp đầu tiên không có ý nghĩa gì cả, nhưng cú pháp thứ hai rõ ràng là sử dụng chung: ví dụ: a = a + b (điều này tương đương với a = plus(a,b)a = a.plus(b)).

  • Nếu mối quan tâm chính của lớp học là lưu trữ các giá trị (số) của một số loại và để có thể thực hiện thao tác, lớp giá trị có nhiều khả năng là cách nhất.
  • Nếu bạn muốn lưu trữ trạng thái, giá trị liên quan đến nhóm, kết nối các đối tượng khác nhau với nhau (danh sách liên kết, đồ thị, ...), lớp xử lý có thể là cách để đi.

Hoặc ít nhất, đó là những gì tôi có xu hướng sử dụng để phân biệt.

0

Nó thực sự khá đơn giản và khác với ngôn ngữ bạn lưu ý. Xử lý các lớp được chuyển qua tham chiếu. Các lớp giá trị truyền theo giá trị. Sự khác biệt từ c/C++ là cơ chế đó là một phần của hệ thống kiểu, không phải là một phép toán có thể được thực hiện trên bất kỳ biến nào.

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