PDA

View Full Version : Lập trình hướng đối tượng trên Matlab


hoaln
23-03-2008, 12:54 PM
Em đang tìm hiểu vấn đề này.
Em có đọc Help của Matlab nhưng mà 1 số ví dụ của nó lại không chạy được.
http://www.mathworks.com/access/helpdesk/help/pdf_doc/matlab/matlab_oop.pdf

Em dùng version 7.1,không biết phải version bao nhiêu thì mới hỗ trợ lập trình hướng đối tượng.
Thêm 1 điểm nữa là matlab hình như không cho định nghĩa kiểu.Thế thì thật là bất lợi.

Ai có kinh nghiệm rồi có thể chỉ bảo cho em được không ạ

picvendor
23-03-2008, 03:18 PM
Version 7.1 cũng đã hỗ trợ lập trình hướng đối tượng rồi. Suốt version 7 cho đến R2007b, hình như là cách lập trình hướng đối tượng giống nhau. Sang R2008a thì có thay đổi.

Với version 7.1, cấu trúc của nó rất đơn giản:


1 thư mục sẽ là một lớp, thư mục này có tên bắt đầu bằng ký tự @

File khởi tạo đối tượng của lớp phải có tên giống tên thư mục (bỏ chữ @)

File khởi tạo ấy sẽ khai báo các biến của đối tượng. Theo đặc điểm của Matlab, nó sẽ tự nhận biết kiểu nào là phù hợp, chứ mình không cần định kiểu cho biến. (ví dụ gán biến a=1 thì a sẽ là double, gán a=true thì a sẽ là boolean)

Các biến của đối tượng không có phân biệt giữa public / protected / private (nhưng sang version 7.6 - R2008a thì có). Mặc định tất cả các biến là private, hàm nào ở bên ngoài thư mục của lớp đều không truy cập được biến, mà phải gọi một hàm bên trong thư mục của lớp (bất kỳ file .m nào thuộc thư mục đó đều có quyền truy cập biến của đối tượng). Người ta hay viết hàm set.m và get.m cho mỗi lớp.

Matlab có kiểu override các hàm cơ bản, ví dụ nếu mình viết hàm có tên plus.m, thì khi thực hiện lệnh a+b (với a và b là 2 đối tượng của lớp đó), nó tương đương với plus(a,b). Tương tự với các hàm trùng với từ khóa minus, multiply...

hoaln
23-03-2008, 04:13 PM
Em thấy trong help của Matlab
http://www.mathworks.com/access/helpdesk/help/techdoc/matlab_oop/ug_intropage.html
Có mấy ví dụ:trong đó có ví dụ viết trong M-files
http://www.mathworks.com/access/helpdesk/help/techdoc/matlab_oop/class_3a.gif
classdef
properties
....
end
methods
function ...
function ....
end
Cái cấu trúc này gần giống C++,tuy nhiên matlab của em lại không hiểu.Có thể nó là cấu trúc của matlab R2008a.
Không biết 1 chương trình OOP trên Matlab 7.1 có viết giống C++ không.

picvendor
23-03-2008, 05:10 PM
Đấy là cách viết của Matlab R2008a đấy (một class đặt trong một file .m, bao gồm cả phần khai báo và các methods của nó, không phải là một thư mục như trước).

Em xem phần Help trong bản Matlab cài trong máy, thì nó chỉ chính xác cách làm với bản Matlab đó. (Mathworks.com hình như cũng có lưu phần help của các version cũ, nhưng không biết giờ link cho v7.1 là gì)