Property menyimpan data, tetapi class yang hidup adalah class yang bisa berbuat — dan perilaku itu ditulis sebagai method. Method adalah function biasa yang tinggal di dalam blok methods, dengan satu kemewahan: akses langsung ke data object lewat argumen pertama obj. Pada chapter ini kita menyusun KalkulatorStatistik, class yang membungkus statistik deskriptif lengkap dengan static method dan satu method yang menerima dua bentuk pemanggilan. Cakupan materi:
- method biasa: input, output, dan argumen pertama
obj - method yang menampilkan hasil vs mengembalikan nilai
- static method dan pemanggilan lewat nama class
- overloading gaya MATLAB lewat
nargin
Method: Function Milik Class #
Aturannya: semua method dideklarasikan dalam blok methods dan — kecuali static method — menerima object sebagai argumen pertama. Mekanisme di balik layar: pemanggilan k.rataan() oleh MATLAB diterjemahkan menjadi rataan(k); di dalam method, identifier obj (nama bebas, obj hanya konvensi) menunjuk object pemanggil sehingga obj.data membaca data milik object tersebut. Satu blok methods boleh berisi banyak function sekaligus:
methods
function m = rataan(obj)
m = mean(obj.data);
end
function s = simpanganBaku(obj)
s = std(obj.data);
end
function n = jumlahData(obj)
n = numel(obj.data);
end
endPemanggilannya memakai dot notation — k.rataan() — atau function style rataan(k); dua gaya setara yang diperkenalkan pada Chapter Membuat Class. Input tambahan ditulis setelah obj, misalnya hitungBunga(obj, tingkat) pada chapter sebelumnya, dan output bisa lebih dari satu dengan format function [a, b] = nama(obj).
Menampilkan Hasil vs Mengembalikan Nilai #
Dua method berikut tampak mirip tetapi berperilaku berbeda — dan campur aduk keduanya adalah sumber bug klasik:
k = KalkulatorStatistik([70 85 90 60 95]);
k.tampilkan(); % menampilkan ke Command Window, output kosong
m = k.rataan(); % mengembalikan angka, tidak menampilkan apa punOutput yang Dihasilkan:
data : [70 85 90 60 95]
ringkas : n=5, rataan=80.0000, std=14.5774Method tampilkan() tidak punya variabel output: seluruh hasil kerjanya berakhir di layar lewat fprintf, seperti script lama kita. Sebaliknya rataan() mengembalikan m = 80 secara diam-diam — angka tersebut belum tampil di layar, tetapi siap dipakai dalam perhitungan lanjutan. Aturan praktisnya: method yang mengembalikan nilai mudah diuji dan dirantai; method yang menampilkan enak dilihat manusia. Kombinasikan — method penghitung mengembalikan nilai, method penyaji menampilkannya.
Static Method: Method Tanpa Object #
Sebagian perilaku relevan bagi sebuah class tetapi tidak memerlukan data object tertentu — contohnya standarisasi skor yang bekerja pada vektor apa pun. Atribut Static = true pada blok methods melepaskan keterikatan pada object:
methods (Static = true)
function z = skorStandar(v)
z = (v - mean(v)) ./ std(v);
end
endMekanismenya: static method tidak menerima obj dan dipanggil lewat nama class — KalkulatorStatistik.skorStandar(data) — tanpa instansiasi. Pola ini nyaman untuk utility yang secara konsep milik domain class (statistik milik KalkulatorStatistik) sekaligus menjaga namespace tetap rapi: nama skorStandar tidak mencemari path global seperti function lepas.
Satu Method, Banyak Bentuk Panggilan #
Di Java, satu class boleh punya ringkasan() dan ringkasan(int digit) sebagai dua method berbeda. MATLAB tidak bekerja demikian — satu nama method hanya punya satu definisi, dan variasi pemanggilan ditangani di dalam method dengan memeriksa jumlah argumen yang benar-benar dikirim (nargin):
function s = ringkasan(obj, nDigit)
if nargin < 2
nDigit = 4; % bentuk satu argumen -> default
end
s = sprintf('n=%d, rataan=%.*f, std=%.*f', ...
numel(obj.data), nDigit, mean(obj.data), ...
nDigit, std(obj.data));
endBentuk k.ringkasan() memanggil method dengan satu argumen, sehingga nargin bernilai 1 dan nDigit diisi 4; bentuk k.ringkasan(2) mengirim dua argumen dan presisinya mengecil. Variadic input varargin memperluas pola ini untuk jumlah argumen bebas — teknik yang sudah kita kuasai pada Section Fungsi.
Contoh Lengkap: KalkulatorStatistik #
Class berikut merangkai seluruh teknik di atas menjadi satu berkas KalkulatorStatistik.m:
classdef KalkulatorStatistik
%KALKULATORSTATISTIK Statistik deskriptif dari vektor data.
properties
data = []
end
properties (Constant = true)
VERSI = '1.0'
end
methods
function obj = KalkulatorStatistik(data)
if nargin > 0
obj.data = data;
end
end
function m = rataan(obj)
m = mean(obj.data);
end
function s = simpanganBaku(obj)
s = std(obj.data);
end
function n = jumlahData(obj)
n = numel(obj.data);
end
function s = ringkasan(obj, nDigit)
if nargin < 2
nDigit = 4;
end
s = sprintf('n=%d, rataan=%.*f, std=%.*f', ...
numel(obj.data), nDigit, mean(obj.data), ...
nDigit, std(obj.data));
end
function tampilkan(obj)
fprintf('data : %s\n', mat2str(obj.data, 5));
fprintf('ringkas : %s\n', obj.ringkasan());
end
end
methods (Static = true)
function z = skorStandar(v)
z = (v - mean(v)) ./ std(v);
end
end
endMari kita bedah baris-baris kode di atas:
- Baris 10-14 (
constructor): inputdatabersifat opsional; tanpa input, property memakai default[]. - Baris 15-23 (
rataan,simpanganBaku,jumlahData): tiga method pengembali nilai — masing-masing satu baris perhitungan yang membacaobj.data. - Baris 24-31 (
ringkasan): method dua bentuk — jumlah argumen diperiksa dengannargin, lalu format specifier%.*fmengambil jumlah digit dari argumen kedua. - Baris 32-35 (
tampilkan): method penyaji — dan sekaligus contoh method memanggil method lain milik class yang sama lewatobj.ringkasan(). - Baris 37-41 (
methods (Static = true)): blok terpisah untuk static method; pemanggilannyaKalkulatorStatistik.skorStandar(v)tanpa object.
Skrip uji uji_KalkulatorStatistik.m:
% uji_KalkulatorStatistik.m - menguji class KalkulatorStatistik
data = [70 85 90 60 95];
k = KalkulatorStatistik(data);
k.tampilkan();
fprintf('rataan : %.4f\n', k.rataan());
fprintf('simpangan baku : %.4f\n', k.simpanganBaku());
fprintf('jumlah data : %d\n', k.jumlahData());
% "overloading" MATLAB: jumlah argumen berbeda, satu method
fprintf('ringkasan(4) : %s\n', k.ringkasan());
fprintf('ringkasan(2) : %s\n', k.ringkasan(2));
% static method dipanggil lewat nama class, tanpa objek
z = KalkulatorStatistik.skorStandar(data);
fprintf('z-skor : %s\n', mat2str(z, 3));
% dua gaya pemanggilan method biasa
fprintf('dot notation : %.4f\n', k.rataan());
fprintf('function style : %.4f\n', rataan(k));Output yang Dihasilkan:
data : [70 85 90 60 95]
ringkas : n=5, rataan=80.0000, std=14.5774
rataan : 80.0000
simpangan baku : 14.5774
jumlah data : 5
ringkasan(4) : n=5, rataan=80.0000, std=14.5774
ringkasan(2) : n=5, rataan=80.00, std=14.58
z-skor : [-0.686 0.343 0.686 -1.37 1.03]
dot notation : 80.0000
function style : 80.0000Method vs Fungsi Biasa #
Kapan memilih method, kapan fungsi lepas? Tabel berikut membandingkan keduanya:
| Aspek | Fungsi biasa | Method dalam class |
|---|---|---|
| Tempat tinggal | berkas .m sendiri di path | blok methods milik satu class |
| Akses data | hanya lewat argumen | langsung lewat obj.property |
| Pemanggilan | nama(input) | obj.nama() atau nama(obj) |
| Namespace | global — benturan nama mungkin | di bawah class — nama boleh sama antar class |
| Cocok untuk | utilitas umum, transformasi data bebas state | perilaku yang melekat pada data class |
Fungsi mean() tidak perlu menjadi method siapa pun karena bekerja untuk semua array; rataan() pantas menjadi method karena maknanya terikat pada data yang disimpan KalkulatorStatistik.
Ringkasan #
Method dideklarasikan dalam blok methods dan menerima object sebagai argumen pertama — dot notation k.rataan() hanyalah bentuk manis dari rataan(k). Method penghitung mengembalikan nilai agar bisa dirantai dan diuji, method penyaji menampilkan lewat fprintf. Atribut Static = true membuat method bisa dipanggil lewat nama class tanpa object, dan variasi bentuk pemanggilan ditangani satu definisi method dengan nargin — bukan signature overloading ala Java. Berkas KalkulatorStatistik.m dan uji_KalkulatorStatistik.m di bagian bawah halaman memuat class lengkap yang sudah teruji.