Member Publik vs Privat
Termasuk bagian Pemrograman Berorientasi Objek dalam perjalanan Dart di Coddy. Pelajaran 30 dari 110.
Enkapsulasi adalah salah satu prinsip inti pemrograman berorientasi object. Ini tentang mengendalikan akses ke data internal sebuah class, menentukan apa yang boleh terlihat oleh dunia luar dan apa yang harus tetap tersembunyi.
Di Dart, anggota class (field dan method) bersifat publik secara default. Artinya, kode apa pun dapat mengaksesnya secara langsung:
class BankAccount {
String owner;
double balance;
BankAccount(this.owner, this.balance);
}
var account = BankAccount('Alice', 1000);
account.balance = -500; // Siapa pun bisa mengubah nilai ini secara langsung!Ini bermasalah. Tidak ada yang mencegah penetapan saldo yang tidak valid.
Untuk melindungi data internal, Dart menggunakan member privat. Sebuah member menjadi privat saat namanya diawali garis bawah _:
class BankAccount {
String owner;
double _balance; // Privat, diawali garis bawah
BankAccount(this.owner, this._balance);
double get balance => _balance; // Akses terkendali
}Sekarang, _balance tidak dapat diakses secara langsung dari luar library tempat class didefinisikan. Kode eksternal harus menggunakan getter publik. Dengan begitu, kamu dapat mengontrol cara data dibaca dan diubah, sehingga object-mu selalu tetap dalam kondisi yang valid.
Tantangan
MudahMari kita buat pengelola kata sandi sederhana yang menunjukkan perbedaan antara anggota publik dan privat. Kamu akan melihat bagaimana prefiks garis bawah melindungi data sensitif agar tidak diakses langsung dari luar library class.
Kamu akan membuat dua file untuk mengatur kodemu:
credential.dart: Definisikan classCredentialyang menyimpan informasi login untuk sebuah situs web. Class ini harus memiliki:String websitepublik, siapa pun boleh melihat situs web yang ditujuString usernamepublik, nama pengguna boleh terlihatString _passwordprivat, kata sandi sebenarnya harus dilindungi- Sebuah konstruktor yang menerima ketiga nilai tersebut
- Getter publik
passwordyang mengembalikan_passwordprivat (akses terkontrol) - Method
getMaskedPassword()yang mengembalikan kata sandi dengan semua karakternya diganti tanda bintang*(panjangnya sama dengan kata sandi sebenarnya) - Method
displayCredential()yang mencetak informasi kredensial dengan aman (menampilkan kata sandi yang disamarkan, bukan kata sandi sebenarnya)
main.dart: Impor class kredensialmu dan tunjukkan bagaimana enkapsulasi melindungi kata sandi:- Buat kredensial untuk situs web
'github.com', nama pengguna'dev_user', dan kata sandi'secret123' - Buat kredensial lain untuk situs web
'email.com', nama pengguna'john_doe', dan kata sandi'myP@ss' - Untuk setiap kredensial, panggil
displayCredential(), lalu cetakActual password length: [length]menggunakan getter publik untuk mengakses panjang kata sandi
- Buat kredensial untuk situs web
Method displayCredential() harus mencetak dalam format ini:
--- Credential ---
Website: [website]
Username: [username]
Password: [maskedPassword]Output yang diharapkan:
--- Credential ---
Website: github.com
Username: dev_user
Password: *********
Actual password length: 9
--- Credential ---
Website: email.com
Username: john_doe
Password: ******
Actual password length: 6Coba sendiri
import 'credential.dart';
void main() {
// TODO: Buat kredensial untuk github.com
// website: 'github.com', username: 'dev_user', password: 'secret123'
// TODO: Panggil displayCredential() pada kredensial pertama
// TODO: Cetak panjang kata sandi sebenarnya menggunakan getter publik
// Format: "Actual password length: [length]"
// TODO: Buat kredensial untuk email.com
// website: 'email.com', username: 'john_doe', password: 'myP@ss'
// TODO: Panggil displayCredential() pada kredensial kedua
// TODO: Cetak panjang kata sandi sebenarnya menggunakan getter publik
}
Pelajaran ini berisi kuis singkat. Mulai pelajarannya untuk menjawab kuis dan melacak progresmu.
Semua pelajaran di Pemrograman Berorientasi Objek
1Dasar-Dasar OOP
file Eksternallibrary dan ImporPengantar OOPClass dan ObjectKata kunci thismethodVariabel InstanceDasar-Dasar ConstructorRingkasan: Kalkulator Sederhana4Keamanan Null
Pengantar Keamanan NullBisa Null vs Tidak Bisa NullOperator ? dan !Kata Kunci late dan Keamanan NullOperator Penanganan NullKeamanan Null dalam classRangkuman: Sistem Profil Pengguna7class Abstrak & Antarmuka
class AbstrakMethod abstrakAntarmuka di DartAntarmuka ImplisitMengimplementasikan vs MemperluasBeberapa AntarmukaRingkasan: Kalkulator Bentuk10Koleksi dan Generik
Gambaran Umum list, set, dan MapKoleksi dengan Tipe AmanKelas GenerikMetode GenerikBatasan GenerikIterable dan IteratorUlasan: Penyimpanan Generik2Konstruktor dalam Dart
Konstruktor DefaultKonstruktor BernamaInitializer ListsKonstruktor KonstanKonstruktor FactoryKonstruktor RedirectingRangkuman, Pembuat Bentuk5Enkapsulasi
Member Publik vs PrivatKonvensi Prefiks _Privasi Tingkat libraryPendalaman Getter & SetterPenyembunyian InformasiRingkasan: Catatan Siswa8Mixin
Pengantar MixinMembuat MixinMenggunakan Beberapa MixinKata Kunci on pada MixinMixin vs. PewarisanMixin vs. InterfaceRangkuman: Sistem Hewan3Property Class
Anggota Instance vs StaticField Final dan ConstVariabel LateMethod dan Field StaticGetter dan SetterRangkuman: Pengelola Rekening Bank6Pewarisan
Pewarisan DasarKata Kunci superPenimpaan methodAnotasi @overrideKata Kunci class finalKonstruktor dan PewarisanRangkuman, Hierarki Karyawan9Polimorfisme
Dasar-Dasar PolimorfismePolimorfisme melalui AntarmukaPemeriksaan Tipe saat RuntimeOperator is & asKata Kunci KovarianRangkuman: Pemroses PembayaranLatihan sendiri: Compiler Dart online