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:

matlab
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
end

Pemanggilannya 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:

matlab
k = KalkulatorStatistik([70 85 90 60 95]);

k.tampilkan();      % menampilkan ke Command Window, output kosong
m = k.rataan();     % mengembalikan angka, tidak menampilkan apa pun

Output yang Dihasilkan:

text
data    : [70 85 90 60 95]
ringkas : n=5, rataan=80.0000, std=14.5774

Method 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:

matlab
methods (Static = true)
    function z = skorStandar(v)
        z = (v - mean(v)) ./ std(v);
    end
end

Mekanismenya: 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):

matlab
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));
end

Bentuk 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:

matlab
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
end

Mari kita bedah baris-baris kode di atas:

  1. Baris 10-14 (constructor): input data bersifat opsional; tanpa input, property memakai default [].
  2. Baris 15-23 (rataan, simpanganBaku, jumlahData): tiga method pengembali nilai — masing-masing satu baris perhitungan yang membaca obj.data.
  3. Baris 24-31 (ringkasan): method dua bentuk — jumlah argumen diperiksa dengan nargin, lalu format specifier %.*f mengambil jumlah digit dari argumen kedua.
  4. Baris 32-35 (tampilkan): method penyaji — dan sekaligus contoh method memanggil method lain milik class yang sama lewat obj.ringkasan().
  5. Baris 37-41 (methods (Static = true)): blok terpisah untuk static method; pemanggilannya KalkulatorStatistik.skorStandar(v) tanpa object.

Skrip uji uji_KalkulatorStatistik.m:

matlab
% 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:

text
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.0000

Method vs Fungsi Biasa #

Kapan memilih method, kapan fungsi lepas? Tabel berikut membandingkan keduanya:

AspekFungsi biasaMethod dalam class
Tempat tinggalberkas .m sendiri di pathblok methods milik satu class
Akses datahanya lewat argumenlangsung lewat obj.property
Pemanggilannama(input)obj.nama() atau nama(obj)
Namespaceglobal — benturan nama mungkindi bawah class — nama boleh sama antar class
Cocok untukutilitas umum, transformasi data bebas stateperilaku 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.