Belajar Dart Dasar 8#: Pemrograman Berorientasi Objek (OOP) dalam Dart


👍 0 ❤️ 0 💡 0 🔥 0 🙌 0 🥳 0
Belajar Dart Dasar 8#: Pemrograman Berorientasi Objek (OOP) dalam Dart

Pemrograman Berorientasi Objek (OOP) adalah paradigma pemrograman yang menggunakan konsep class dan object untuk mengorganisasi kode secara modular dan reusable. Dart adalah bahasa yang sepenuhnya mendukung OOP.

Berikut penjelasan lengkap tentang OOP di Dart:

1. Class dan Object

Class adalah blueprint untuk membuat object. Class mendefinisikan property (variabel) dan method (fungsi).

  • Contoh Deklarasi Class

    class Person {
      // Property (variabel dalam class)
      String name;
      int age;
    
      // Constructor (method khusus untuk inisialisasi object)
      Person(this.name, this.age);
    
      // Method (fungsi dalam class)
      void greet() {
        print('Halo, nama saya $name, usia $age tahun.');
      }
    }
    
  • Membuat Object (Instance)

    void main() {
      var person1 = Person('Alice', 25); // Membuat object
      person1.greet(); // Output: Halo, nama saya Alice, usia 25 tahun.
    }
    

2. Constructor

Constructor adalah method khusus yang dipanggil saat membuat object. Dart mendukung beberapa jenis constructor:

  • Default Constructor

    class Car {
      String brand;
      String model;
    
      // Constructor biasa
      Car(this.brand, this.model);
    }
    
  • Named Constructor

    Digunakan untuk membuat constructor dengan nama berbeda.

    class Car {
      String brand;
      String model;
    
      Car(this.brand, this.model);
    
      // Named constructor
      Car.electric(String model) {
        this.brand = 'Tesla';
        this.model = model;
      }
    }
    
    // Penggunaan
    var tesla = Car.electric('Model 3');
    
  • Constructor dengan Initializer List

    Untuk inisialisasi sebelum constructor dijalankan.

    class Point {
      final int x;
      final int y;
    
      Point(int x, int y) 
        : x = x,
          y = y {
        print('Point created at ($x, $y)');
      }
    }
    

3. Inheritance (Pewarisan)

Inheritance memungkinkan class child mewarisi property/method dari class parent.

  • Contoh Inheritance

    class Animal {
      void eat() {
        print('Makan...');
      }
    }
    
    class Cat extends Animal {
      void meow() {
        print('Meow!');
      }
    }
    
    void main() {
      var cat = Cat();
      cat.eat(); // Dari parent class (Animal)
      cat.meow(); // Dari child class (Cat)
    }
    
  • Keyword super

    Digunakan untuk mengakses method/property dari parent class.

    class Dog extends Animal {
      @override
      void eat() {
        super.eat(); // Memanggil method eat() dari Animal
        print('Dog is eating...');
      }
    }
    

4. Mixins

Mixins adalah cara untuk menambahkan fungsionalitas ke class tanpa inheritance.

  • Contoh Mixin

    mixin Flyable {
      void fly() {
        print('Terbang...');
      }
    }
    
    class Bird with Flyable {} // Bird bisa fly()
    
    void main() {
      var bird = Bird();
      bird.fly(); // Output: Terbang...
    }
    

5. Enkapsulasi (Access Modifier)

Dart tidak memiliki keyword private, public, atau protected seperti di Java. Namun, kita bisa menggunakan underscore (_) untuk membuat property/method private (hanya bisa diakses dalam file yang sama).

  • Contoh Enkapsulasi

    class BankAccount {
      String _accountNumber; // Private property
    
      BankAccount(this._accountNumber);
    
      // Getter untuk mengakses _accountNumber
      String get accountNumber => '****${_accountNumber.substring(4)}';
    }
    
    void main() {
      var account = BankAccount('1234567890');
      print(account.accountNumber); // Output: ****567890
      // account._accountNumber // Error: Tidak bisa diakses dari luar
    }
    

6. Polymorphism

Polymorphism memungkinkan object berperilaku berbeda tergantung class-nya.

  • Contoh Polymorphism

    class Animal {
      void makeSound() {
        print('Suara hewan...');
      }
    }
    
    class Dog extends Animal {
      @override
      void makeSound() {
        print('Guk guk!');
      }
    }
    
    void main() {
      Animal animal1 = Animal();
      Animal animal2 = Dog(); // Polymorphism
    
      animal1.makeSound(); // Output: Suara hewan...
      animal2.makeSound(); // Output: Guk guk!
    }
    

7. Abstract Class

Abstract class tidak bisa diinstansiasi langsung, tetapi bisa digunakan sebagai blueprint untuk class lain.

  • Contoh Abstract Class

    abstract class Shape {
      void draw(); // Abstract method (tanpa implementasi)
    }
    
    class Circle extends Shape {
      @override
      void draw() {
        print('Menggambar lingkaran...');
      }
    }
    
    void main() {
      var circle = Circle();
      circle.draw(); // Output: Menggambar lingkaran...
    }
    

8. Interface (Implicit)

Dart tidak memiliki keyword interface seperti Java, tetapi semua class bisa berperan sebagai interface.

  • Contoh Interface

    class Flyable {
      void fly() => print('Terbang...');
    }
    
    class Airplane implements Flyable {
      @override
      void fly() {
        print('Pesawat terbang...');
      }
    }
    

Ringkasan Konsep OOP di Dart

Konsep Penjelasan Contoh Dart
Class/Object Blueprint dan instance-nya class Person {}, var p = Person()
Constructor Method untuk inisialisasi object Person(this.name, this.age)
Inheritance Child class mewarisi parent class class Child extends Parent
Mixins Menambahkan fungsionalitas tanpa waris class A with B, C
Polymorphism Object bisa berperilaku berbeda Animal a = Dog(); a.makeSound()
Abstract Class tidak bisa diinstansiasi langsung abstract class Shape
Interface Semua class bisa jadi interface class A implements B

Kesimpulan

Dengan belajar OOP di dart kita bisa membuat sebuah program yang lebih kompleks dan lebih mudah dalam mengorganisasi kode karena kode di buat modularitas.

Setelah kita mengenal OOP, pada artikel selanjutnya kita akan membahas Async Programming (Future & Stream).


Faisal Mahadi
Mobile Apps Developer | Android Enthusiast | Keep Learning | Android Dev Serta Owner Hariankoding.com

Suka dengan tulisan di SantriKoding? Kamu bisa memberikan dukungan dengan berdonasi atau bagikan konten ini di sosial media. Terima kasih atas dukungan Anda!

KEBIJAKAN KOMENTAR

Saat memberikan komenatar silahkan memberikan informasi lengkap tentang error, seperti: screenshot, link kode, dll. Baca aturan komentar kami