Menu
CoddyTech

Penyembunyian Informasi

Termasuk bagian Pemrograman Berorientasi Objek dalam perjalanan PHP di Coddy. Pelajaran 41 dari 91.

Penyembunyian informasi adalah prinsip yang mendasari enkapsulasi, yaitu gagasan bahwa sebuah class hanya boleh menampilkan hal-hal yang diperlukan dan menyembunyikan detail implementasi internalnya. Modifier akses serta getter/setter adalah alatnya, sedangkan penyembunyian informasi adalah filosofi desain yang memandu cara kamu menggunakannya.

Tujuannya adalah membuat batas yang jelas antara hal yang dilakukan sebuah class (antarmuka publiknya) dan cara class melakukannya (implementasi internalnya). Pemisahan ini berarti kamu dapat mengubah cara kerja internalnya tanpa memengaruhi kode yang menggunakan class tersebut:

<?php
class Temperature {
    private float $celsius;
    
    public function setCelsius(float $value): void {
        $this->celsius = $value;
    }
    
    public function getCelsius(): float {
        return $this->celsius;
    }
    
    public function getFahrenheit(): float {
        return ($this->celsius * 9/5) + 32;
    }
}

$temp = new Temperature();
$temp->setCelsius(25);
echo $temp->getCelsius() . "C = " . $temp->getFahrenheit() . "F";

Output:

25C = 77F

class menyimpan suhu secara internal dalam Celsius, tetapi pengguna tidak perlu mengetahui hal ini. Nanti, kamu bisa mengubah penyimpanan internal menjadi Fahrenheit atau Kelvin, dan selama method publik tetap berfungsi dengan cara yang sama, tidak ada kode eksternal yang rusak.

Inti: Penyembunyian informasi melindungi kodemu dari perubahan. Sembunyikan detail implementasi, tampilkan hanya antarmuka yang stabil, dan class-mu akan lebih mudah dipelihara dan dimodifikasi seiring waktu.

challenge icon

Tantangan

Mudah

Mari buat konverter mata uang yang menunjukkan cara kerja penyembunyian informasi. Kamu akan membuat class yang menyimpan uang secara internal dalam satu mata uang, tetapi bisa mengonversi ke dan dari beberapa mata uang dengan mudah, tanpa kode eksternal mengetahui cara data tersebut sebenarnya disimpan.

Kamu akan mengatur kodemu dalam dua file:

  • Money.php: Buat class Money yang menyimpan semua jumlah secara internal dalam sen (sebagai bilangan bulat) untuk menghindari masalah presisi floating-point. Detail implementasi ini harus sepenuhnya disembunyikan dari pengguna class. Class ini harus menyediakan:
    • Property private untuk menyimpan jumlah dalam sen
    • setDollars(float $amount): menerima jumlah dalam dolar dan menyimpannya secara internal dalam sen
    • getDollars(): mengembalikan jumlah dalam dolar (float, 2 angka desimal)
    • setEuros(float $amount): menerima jumlah dalam euro dan mengonversinya menjadi sen menggunakan kurs: 1 EUR = 1.10 USD
    • getEuros(): mengembalikan jumlah yang dikonversi menjadi euro (float, 2 angka desimal)
    • getInternalValue(): mengembalikan nilai sen mentah (bilangan bulat) untuk keperluan debug
  • main.php: Sertakan file Money. Kamu akan menerima dua input: jumlah dalam dolar dan jumlah dalam euro. Buat instance Money. Pertama, tetapkan jumlah dolar (yang dikonversi menjadi float) dan cetak tiga baris: nilai dalam dolar, nilai yang setara dalam euro, dan nilai sen internal. Lalu tetapkan jumlah euro (yang dikonversi menjadi float) dan cetak lagi tiga nilai yang sama.

Keunggulan desain ini adalah kode eksternal bekerja dengan nilai dolar dan euro yang umum digunakan, tanpa mengetahui bahwa semuanya disimpan secara internal dalam sen. Nantinya, kamu bisa mengubah penyimpanan internal agar menggunakan mata uang dasar atau strategi presisi yang berbeda. Selama method publik tetap bekerja dengan benar, kode eksternal tidak perlu diubah.

Format semua output dolar dan euro dengan tepat 2 angka desimal. Cetak setiap nilai pada barisnya sendiri, sehingga totalnya ada enam baris output.

Coba sendiri

<?php

require_once 'Money.php';

// Baca input
$dollarAmount = floatval(trim(fgets(STDIN)));
$euroAmount = floatval(trim(fgets(STDIN)));

// TODO: Buat instance Money

// TODO: Atur jumlah dolar dan cetak:
// - Nilai dolar (2 angka di belakang koma)
// - Nilai setara dalam euro (2 angka di belakang koma)
// - Nilai sen internal (bilangan bulat)

// TODO: Atur jumlah euro dan cetak:
// - Nilai dolar (2 angka di belakang koma)
// - Nilai setara dalam euro (2 angka di belakang koma)
// - Nilai sen internal (bilangan bulat)

?>
quiz iconUji dirimu

Pelajaran ini berisi kuis singkat. Mulai pelajarannya untuk menjawab kuis dan melacak progresmu.

Semua pelajaran di Pemrograman Berorientasi Objek

Latihan sendiri: Compiler PHP online