Đây là lệnh PDL::Objectsp có thể chạy trong nhà cung cấp dịch vụ lưu trữ miễn phí OnWorks bằng cách sử dụng một trong nhiều máy trạm trực tuyến miễn phí của chúng tôi như Ubuntu Online, Fedora Online, trình mô phỏng trực tuyến Windows hoặc trình mô phỏng trực tuyến MAC OS
CHƯƠNG TRÌNH:
TÊN
PDL::Objects - Hướng đối tượng, nó là gì và cách khai thác nó
MÔ TẢ
Điều này vẫn cần phải được viết đúng. [Ngoài ra, có lý do chính đáng nào khiến chúng tôi không khuyến nghị
lưu trữ dữ liệu đối tượng bổ sung trong hàm băm tiêu đề?]
di sản
Về cơ bản có hai lý do để phân lớp piddles. Đầu tiên đơn giản là bạn
muốn có thể sử dụng các thói quen của riêng bạn như
$piddle->thứ gì đó()
nhưng không muốn làm xáo trộn không gian tên PDL (thực sự là một mục tiêu xứng đáng!). Cái khác là thế
bạn muốn cung cấp khả năng xử lý đặc biệt đối với một số chức năng hoặc thêm thông tin về dữ liệu
Piddle chứa. Trong trường hợp đầu tiên, bạn có thể làm với
gói THANH;
@ISA=qw/PDL/;
sub foo {my($this) = @_; vĩ cầm;}
gói chính;
$a = PDL::pdl(BAR,5);
$a->foo();
Tuy nhiên, vì đối tượng PDL là một tham chiếu không rõ ràng tới cấu trúc C nên không thể
mở rộng lớp PDL bằng cách thêm dữ liệu thông qua phân lớp. Để tránh vấn đề này
PerlDL có hỗ trợ tích hợp để mở rộng lớp PDL thông qua có một mối quan hệ may mắn
băm. Bạn có thể nhận được CÓ MỘT cư xử như thế nào LÀ MỘT đơn giản là bạn gán đối tượng "PDL"
vào thuộc tính có tên PDL và xác định lại phương thức khởi tạo ().
gói FOO;
@FOO :: ISA = qw (PDL);
khởi tạo phụ {
$ class = shift của tôi;
$ self = {
create_time => time (), # phần mở rộng cần thiết :-)
PDL => null, # dùng để lưu trữ đối tượng PDL
};
chúc phúc cho $ tự, $ hạng;
}
Tất cả các nhà xây dựng PDL sẽ gọi khởi tạo () để đảm bảo rằng tiện ích mở rộng của bạn được thêm bởi
tất cả các Các hàm tạo PDL tự động. Thuộc tính "PDL" được PerlDL sử dụng để lưu trữ
Đối tượng PDL và tất cả các phương thức PDL sử dụng thuộc tính này một cách tự động nếu chúng được gọi với một
tham chiếu hàm băm may mắn thay vì đối tượng PDL (một đại lượng vô hướng may mắn).
Hãy nhớ rằng nếu bạn phân lớp một lớp được phân lớp từ một piddle, bạn cần phải
gọi SUPER::khởi tạo.
CẦN NHỮNG ĐIỀU VỀ MÃ GIỚI THIỆU!!
Các ví dụ
Bạn có thể tìm thấy một số ví dụ đơn giản về phân lớp PDL trong trường hợp thử nghiệm phân phối PDL
các tập tin. Tìm trong "t/subclass2.t", "t/subclass3.t", v.v.
Đầu ra Tự động tạo và Phân lớp Đối tượng
Đối với các Hàm PDL nơi đầu ra được tạo và trả về, PDL sẽ gọi
phương thức "khởi tạo" hoặc "sao chép" của đối tượng được phân lớp để tạo đối tượng đầu ra. (Nhìn thấy
PDL:: Lập chỉ mục để thảo luận về Tự động tạo đầu ra.) Hành vi này được tóm tắt là
sau:
·
Trong Đơn giản chức năng, được định nghĩa là có chữ ký của
func( a(), [o]b() )
PDL sẽ gọi $a->copy để tạo đối tượng đầu ra.
Theo tinh thần của triết lý Perl về việc tạo ra Dễ dàng Những điều Dễ dàng, Hành vi này cho phép
Các đối tượng được phân lớp PDL được ghi mà không cần phải làm quá tải nhiều PDL đơn giản
chức năng trong thể loại này.
Tệp t/subclass4.t trong bản phân phối PDL kiểm tra hành vi này. Xem tập tin đó
Ví dụ.
·
Đối với các hàm khác, PDL sẽ gọi $class->initialize để tạo đối tượng đầu ra. Ở đâu
$class là tên lớp của đối số đầu tiên được cung cấp cho hàm.
Đối với những trường hợp phức tạp hơn này, rất khó để đoán thứ hai về đối tượng được phân lớp con.
nhà thiết kế để biết liệu "sao chép" hay "khởi tạo" là phù hợp. Vì vậy đối với những trường hợp này,
$class->initialize được gọi theo mặc định. Nếu điều này không phù hợp với bạn, hãy quá tải
trong lớp con của bạn và làm bất cứ điều gì phù hợp là chức năng của hàm quá tải
Mã.
Sử dụng PDL::Objectsp trực tuyến bằng dịch vụ onworks.net