Ada dua implementasi berbeda dari pemrograman berorientasi objek di Perl:
Salah satunya didasarkan pada metode tabel hash anonim. Inti dari setiap contoh objek adalah referensi yang menunjuk ke tabel hash anonim. Dalam tabel hash anonim ini, semua atribut instance disimpan.
Yang kedua adalah metode berbasis array. Saat mendefinisikan sebuah kelas, kita akan membuat array untuk setiap atribut instance, dan inti dari setiap instance objek adalah referensi yang menunjuk ke indeks baris dalam array tersebut. Dalam array ini, semua properti instance disimpan.
Ada banyak konsep dasar dalam berorientasi objek, disini kita menerima tiga: objek, kelas dan metode.
Objek : Objek adalah referensi ke item data di kelas. .
Kelas : Kelas adalah paket Perl yang berisi kelas-kelas yang menyediakan metode objek.
Metode : Metode adalah subrutin Perl, dan nama kelas adalah parameter pertamanya.
Perl menyediakan fungsi Bless(). Bless digunakan untuk membuat objek. Bless mengaitkan referensi dengan nama kelas dan membuat objek dengan mengembalikan referensi tersebut.
Kelas hanyalah sebuah paket sederhana.
Anda dapat menggunakan paket sebagai kelas, dan menggunakan fungsi dalam paket sebagai metode kelas.
Paket Perl menyediakan namespace independen, sehingga nama metode dan variabel dalam paket berbeda tidak akan bertentangan.
Ekstensi file untuk kelas Perl adalah .pm.
Selanjutnya kita membuat kelas Person:
paket Orang;
Rentang kode kelas mencapai baris terakhir file skrip, atau sebelum kata kunci paket berikutnya.
Untuk membuat sebuah instance (objek) dari sebuah kelas kita perlu mendefinisikan sebuah konstruktor. Kebanyakan program menggunakan nama kelas sebagai konstruktornya, namun di Perl Anda dapat menggunakan nama apa pun.
Anda dapat menggunakan berbagai variabel Perl sebagai objek Perl. Seringkali kita akan menggunakan array referensi atau hash.
Selanjutnya kita membuat konstruktor untuk kelas Person, menggunakan referensi hash Perl.
Saat membuat objek, Anda perlu menyediakan konstruktor, yang merupakan subrutin yang mengembalikan referensi ke objek tersebut.
Contohnya adalah sebagai berikut:
Selanjutnya kita membuat objek:
$objek = Orang baru("Xiao Ming", "王", 23234345);
Metode kelas Perl hanyalah subrutin Perl, yang umumnya dikenal sebagai fungsi anggota.
Definisi metode Perl dalam Perl berorientasi objek tidak menyediakan sintaks khusus apa pun, tetapi menetapkan bahwa parameter pertama dari metode ini adalah objek atau paket yang direferensikannya.
Perl tidak menyediakan variabel privat, namun kita dapat mengelola data objek melalui metode tambahan.
Selanjutnya kita mendefinisikan metode untuk mendapatkan nama:
sub getFirstName { kembalikan $self->{_firstName};}
Anda juga bisa menulis seperti ini:
sub setFirstName { saya ( $self, $firstName ) = @_; $self->{_firstName} = $firstName jika ditentukan($firstName); kembalikan $self->{_firstName};}
Selanjutnya kita modifikasi kode file Person.pm sebagai berikut:
Kode skrip Employee.pl adalah sebagai berikut:
Setelah program di atas dijalankan maka hasil keluarannya adalah:
$ perl Employee.pl Nama: Xiao Ming Nama Belakang: Wang Nomor: 23234345 Nama sebelum pengaturan adalah: Xiao Ming Nama setelah pengaturan: Xiao Qiang
Metode kelas di Perl diwarisi melalui array @ISA. Array ini berisi nama paket (kelas) lain. Warisan variabel harus diatur secara eksplisit.
Warisan berganda berarti array @ISA berisi beberapa nama kelas (paket).
Hanya metode yang dapat diwarisi melalui @ISA, bukan data.
Selanjutnya kita membuat kelas Employee yang mewarisi kelas Person.
Kode file Employee.pm terlihat seperti ini:
Sekarang kelas Employee berisi semua metode dan properti kelas Person. Kita masukkan kode berikut di file main.pl dan jalankan:
Setelah program di atas dijalankan maka hasil keluarannya adalah:
$ perl main.pl Nama: Xiao Ming Nama Belakang: Wang Nomor: 23234345 Nama sebelum pengaturan adalah: Xiao Ming Nama setelah pengaturan: Xiao Qiang
Dalam contoh di atas, kelas Karyawan mewarisi kelas Person, tetapi jika metode kelas Person tidak dapat memenuhi kebutuhan, metodenya perlu ditulis ulang.
Selanjutnya kita menambahkan beberapa metode baru ke kelas Employee dan mengganti metode kelas Person:
Kami memasukkan kode berikut di file main.pl dan menjalankannya:
Setelah program di atas dijalankan maka hasil keluarannya adalah:
$ perl main.pl Nama: Xiao Ming Nama belakang: Wang Nomor: 23234345 Ini adalah nama fungsi subkelas sebelum pengaturan: Xiao Ming Ini adalah nama fungsi subkelas setelah pengaturan: Xiaoqiang
Jika metode yang diminta tidak ditemukan di kelas saat ini, semua kelas dasar dari kelas saat ini, dan kelas UNIVERSAL, metode bernama AUTOLOAD() dicari lagi. Jika AUTOLOAD ditemukan, ia dipanggil dan variabel global $AUTOLOAD disetel ke nama metode yang hilang sepenuhnya.
Jika tidak berhasil, Perl gagal karena kesalahan.
Jika Anda tidak ingin mewarisi AUTOLOAD dari kelas dasar, caranya sangat sederhana, cukup satu kalimat:
sub OTOMATIS;
Objek secara otomatis dimusnahkan ketika referensi terakhir ke objek tersebut dilepaskan.
Jika Anda ingin melakukan sesuatu selama penghancuran, Anda dapat mendefinisikan metode bernama "HANCURKAN" di kelas. Ini akan dipanggil secara otomatis pada waktu yang tepat dan melakukan tindakan pembersihan tambahan sesuai keinginan.
paket MyClass;...sub DESTROY{ print "MyClass::DESTROY dipanggiln";}
Perl akan meneruskan referensi objek sebagai satu-satunya parameter ke DESTROY. Perhatikan bahwa referensi ini bersifat read-only, artinya Anda tidak dapat mengubahnya dengan mengakses $_[0]. (Catatan Penerjemah: Lihat perlsub) Tetapi objek itu sendiri (seperti "${$_[0]" atau "@{$_[0]}" dan "%{$_[0]}", dll.) bisa tetap tertulis.
Jika Anda memulihkan referensi objek sebelum destruktor kembali, Perl akan memanggil metode DESTROY dari objek yang Anda pulihkan setelah destruktor kembali. Ini memberi Anda kesempatan untuk memanggil destruktor kelas dasar atau kelas lain yang Anda tentukan. Perlu dicatat bahwa DESTROY juga dapat dipanggil secara manual, tetapi biasanya tidak perlu dilakukan.
Setelah objek saat ini dilepaskan, objek lain yang terdapat dalam objek saat ini akan dilepaskan secara otomatis.
Kita dapat lebih memahami penerapan Perl berorientasi objek melalui contoh berikut:
Dengan mengeksekusi program di atas, hasil keluarannya adalah:
Panggil metode MyClass MyClass::baru dipanggilKelas Saya::Metode Saya dipanggil! Panggil metode MySubClass MySubClass::baru dipanggilKelas Saya::baru dipanggilKelas Saya::Metode Saya dipanggil! SubClass::Metode Saya dipanggil! disebut Buat objek MyClass::baru dipanggilMyClass::DESTROY disebut eksekusi skrip berakhir...MyClass::DESTROY dipanggilMySubClass::HANCURKAN dipanggil