Menu
CoddyTech

Privasi Tingkat library

Termasuk bagian Pemrograman Berorientasi Objek dalam perjalanan Dart di Coddy. Pelajaran 32 dari 110.

Di Dart, privasi diterapkan pada tingkat library, bukan pada tingkat class. Ini merupakan perbedaan penting dari bahasa seperti Java atau C++. Library di Dart biasanya berupa satu file atau beberapa file yang dihubungkan dengan direktif part.

Anggota privat (yang diawali dengan _) dapat diakses di mana saja dalam library yang sama, bahkan dari class lain:

// Kedua class berada dalam file yang sama (library yang sama)
class Engine {
  int _horsepower = 200;  // Hanya bisa diakses dalam library ini
}

class Car {
  void showPower(Engine engine) {
    print(engine._horsepower);  // Bisa diakses! Masih dalam library yang sama
  }
}

Namun, saat kamu mengimpor class dari file yang berbeda, anggota privatnya benar-benar tersembunyi:

// file: engine.dart
class Engine {
  int _horsepower = 200;
  int get power => _horsepower;
}

// file: main.dart
import 'engine.dart';

void main() {
  var engine = Engine();
  // print(engine._horsepower);  // error! Tidak dapat diakses
  print(engine.power);           // Berfungsi, menggunakan getter publik
}

Privasi tingkat library ini memungkinkan class dalam file yang sama bekerja sama dengan erat sambil tetap menyembunyikan detail implementasi dari kode eksternal. Ini adalah pilihan desain yang disengaja untuk mendorong pengorganisasian class yang berkaitan dalam library yang sama.

challenge icon

Tantangan

Mudah

Mari buat sistem kolaborasi tim yang menunjukkan cara kerja privasi tingkat library di Dart. Kamu akan melihat cara class dalam file yang sama dapat mengakses member privat satu sama lain, sedangkan kode dalam file terpisah tidak bisa.

Kamu akan mengatur kodemu dalam dua file:

  • team.dart: File ini akan berisi dua class yang bekerja sama erat dalam library yang sama:
    • Class Member dengan String name yang bersifat publik dan int _performanceScore yang bersifat privat, dengan nilai awal 50. Sertakan constructor yang menerima nama, serta getter publik performanceScore yang mengembalikan skor privat tersebut.
    • Class TeamLead dalam file yang sama, yang dapat mengakses field privat milik Member secara langsung (karena keduanya berada dalam library yang sama). Class ini harus memiliki String name publik, constructor yang menerima nama, dan method evaluateMember(Member member) yang mengakses member._performanceScore secara langsung, menambahkan 10 ke nilainya, lalu mencetak [leadName] boosted [memberName]'s score to [newScore].
  • main.dart: Impor file timmu dan tunjukkan perbedaan akses:
    • Buat Member bernama 'Alice'
    • Buat TeamLead bernama 'Bob'
    • Cetak Initial score: [score] menggunakan getter publik milik Alice
    • Minta Bob mengevaluasi Alice menggunakan evaluateMember
    • Cetak Updated score: [score] menggunakan getter publik
    • Cetak Direct access from main: Not allowed (ini mengingatkan kita bahwa main.dart tidak dapat mengakses _performanceScore secara langsung karena berada dalam library yang berbeda)

Inti pentingnya adalah TeamLead dapat membaca dan mengubah _performanceScore privat milik Member secara langsung karena kedua class berada dalam file yang sama (library yang sama). Namun, kode dalam main.dart harus menggunakan getter publik karena berada dalam library yang berbeda.

Output yang diharapkan:

Initial score: 50
Bob boosted Alice's score to 60
Updated score: 60
Direct access from main: Not allowed

Coba sendiri

import 'team.dart';

void main() {
  // TODO: Buat Member bernama 'Alice'

  // TODO: Buat TeamLead bernama 'Bob'

  // TODO: Cetak "Initial score: [score]" menggunakan getter publik pada Alice

  // TODO: Minta Bob mengevaluasi Alice menggunakan evaluateMember

  // TODO: Cetak "Updated score: [score]" menggunakan getter publik

  // TODO: Cetak "Direct access from main: Not allowed"
  // Note: Kita tidak bisa mengakses alice._performanceScore di sini karena
  // main.dart berada di library yang berbeda dari team.dart
}
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 Dart online