Object Oriented Programming (OOP) in Dart

APA SIH ITU OOP DALAM BAHASA DART? INI PENJELASANNYA

Pemrograman Berorientasi Objek (OOP) adalah paradigma pemrograman yang berfokus pada objek-objek sebagai elemen utama dalam perangkat lunak. Dalam OOP, setiap objek memiliki atribut (properti) dan perilaku (metode) yang didefinisikan oleh kelasnya. Bahasa Dart adalah bahasa pemrograman yang populer untuk pengembangan aplikasi mobile menggunakan Flutter. Mari kita jelaskan lebih detail tentang kelas, properti, dan metode dalam OOP menggunakan Bahasa Dart.

1. Kelas: Pengenalan dan Definisi

Dalam OOP, kelas adalah cetak biru atau blueprint untuk membuat objek. Kelas berisi definisi atribut (properti) dan perilaku (metode) dari objek yang akan dibuat berdasarkan kelas tersebut. Kelas adalah entitas utama dalam OOP yang memungkinkan kita mengelompokkan kode dan data bersama-sama dalam satu entitas yang koheren dan terstruktur.

dartCopy code// Contoh definisi kelas 'Person'
class Person {
  // Definisi properti (atribut)
  String name;
  int age;

  // Definisi metode
  void sayHello() {
    print('Hello, my name is $name, and I am $age years old.');
  }
}

2. Properti (Atribut): Representasi Data dalam Objek

Properti adalah data atau atribut yang dimiliki oleh suatu objek. Setiap objek yang dibuat dari suatu kelas akan memiliki set atribut yang unik. Properti biasanya merepresentasikan karakteristik atau keadaan dari objek tersebut.

dartCopy codeclass Person {
  String name; // Properti 'name'
  int age; // Properti 'age'
}

3. Metode: Perilaku atau Tindakan dari Objek

Metode adalah fungsi atau tindakan yang dapat dilakukan oleh objek berdasarkan kelasnya. Metode memberikan perilaku atau fungsionalitas tertentu pada objek yang dibuat.

dartCopy codeclass Person {
  void sayHello() { // Metode 'sayHello'
    print('Hello, my name is $name, and I am $age years old.');
  }
}

4. Konstruktor: Membuat Objek dari Kelas

Konstruktor adalah metode khusus yang digunakan untuk membuat dan menginisialisasi objek baru dari kelas tersebut. Konstruktor mengatur nilai awal dari properti objek.

dartCopy codeclass Person {
  String name;
  int age;

  // Konstruktor 'Person'
  Person(String name, int age) {
    this.name = name;
    this.age = age;
  }
}

5. Konstruktor Default dan Named

Dalam Bahasa Dart, terdapat konstruktor default yang akan digunakan jika tidak ada konstruktor yang didefinisikan secara eksplisit. Selain itu, kita juga dapat mendefinisikan konstruktor bernama (named constructor) dengan nama khusus untuk keperluan inisialisasi yang berbeda.

dartCopy codeclass Person {
  String name;
  int age;

  // Konstruktor Default
  Person(this.name, this.age);

  // Named Constructor
  Person.fromNameOnly(String name) {
    this.name = name;
    this.age = 0;
  }
}

6. Pewarisan (Inheritance)

Pewarisan adalah konsep penting dalam OOP di mana sebuah kelas (subclass) dapat mewarisi sifat dan perilaku dari kelas lain (superclass). Pewarisan memungkinkan kelas turunan untuk menggunakan properti dan metode dari kelas induknya.

dartCopy code// Superclass 'Animal'
class Animal {
  String species;
  void makeSound() {
    print('Animal is making a sound.');
  }
}

// Subclass 'Cat' yang mewarisi dari 'Animal'
class Cat extends Animal {
  String furColor;
  void purr() {
    print('Cat is purring.');
  }
}

7. Enkapsulasi: Pengaturan Akses Properti dan Metode

Enkapsulasi adalah konsep dalam OOP yang memungkinkan kita untuk menyembunyikan detail internal dari objek dan hanya mengizinkan akses melalui antarmuka publik yang ditentukan.

dartCopy codeclass Person {
  String _name; // Variabel 'name' diubah menjadi private dengan menggunakan tanda '_'
  int _age; // Variabel 'age' diubah menjadi private dengan menggunakan tanda '_'

  String getName() {
    return _name; // Getter untuk mengakses variabel private '_name'
  }

  void setName(String name) {
    _name = name; // Setter untuk mengubah variabel private '_name'
  }
}

8. Abstraksi: Kelas Abstrak dan Metode Abstrak

Abstraksi adalah konsep untuk menyembunyikan detail implementasi dan hanya menampilkan fitur penting dari objek. Kelas abstrak tidak dapat diinstansiasi dan berfungsi sebagai kerangka untuk kelas turunannya.

dartCopy code// Kelas Abstrak 'Shape'
abstract class Shape {
  double calculateArea(); // Metode Abstrak yang tidak diimplementasikan di sini
}

9. Polimorfisme: Penggunaan Objek dengan Pola yang Seragam

Polimorfisme adalah konsep yang memungkinkan objek dari berbagai kelas yang berbeda dianggap sebagai objek dari kelas induknya. Ini memungkinkan penggunaan objek dengan pola yang seragam dalam kode.

dartCopy codeclass Animal {
  void makeSound() {
    print('Animal is making a sound.');
  }
}

class Cat extends Animal {
  @override
  void makeSound() {
    print('Cat is meowing.');
  }
}

class Dog extends Animal {
  @override
  void makeSound() {
    print('Dog is barking.');
  }
}

void main() {
  Animal cat = Cat();
  Animal dog = Dog();

  cat.makeSound(); // Output: Cat is meowing.
  dog.makeSound(); // Output: Dog is barking.
}

10. Gabungan Konsep OOP dalam Bahasa Dart

Dalam Bahasa Dart, kita dapat menggabungkan konsep-konsep OOP seperti kelas, properti, metode, konstruktor, pewarisan, enkapsulasi, abstraksi, dan polimorfisme untuk menciptakan kode yang terstruktur, mudah dipahami, dan dapat di-maintain.

dartCopy codeclass Animal {
  String species;
  int _age;

  Animal(this.species, this._age);

  void makeSound() {
    print('$species is making a sound.');
  }

  int get age => _age;
}

class Cat extends Animal {
  String furColor;

  Cat(String species, int age, this.furColor) : super(species, age);

  @override
  void makeSound() {
    print('$species is meowing.');
  }
}

void main() {
  var cat = Cat('Cat', 2, 'Gray');
  cat.makeSound(); // Output: Cat is meowing.
  print('Age of the cat: ${cat.age} years'); // Output: Age of the cat: 2 years
}

Dalam contoh di atas, kita menggabungkan berbagai konsep OOP dalam Bahasa Dart, termasuk kelas, properti, metode, konstruktor, enkapsulasi, dan pewarisan. Ini adalah gambaran tentang bagaimana OOP berfungsi dalam Bahasa Dart dan bagaimana kita dapat menggunakannya untuk mengembangkan perangkat lunak yang kuat dan fleksibel.

Tertarik mengikuti training di ID-Networkers? Kami menyediakan berbagai pilihan training yang bisa kamu ikuti, klik disini untuk info lengkapnya.

Penulis : Muhammad Dzafuf Fawwaz Ghazy