Belajar Pemrograman Dart: Paradigma OOP

{tocify} $title={Daftar Isi}

Pendahuluan:

Paradigma object-oriented programming pada dasarnya memiliki empat pilar, yaitu:
  • Abstraksi
  • Enkapsulasi
  • Inheritance, dan
  • Polimorfisme
Empat pilar tersebut merupakan landasan penting saat membangun sebuah class objek sehingga rancangan dari sebuah objek dapat dibaca dengan jelas oleh tim yang terlibat dalam pengembangan.

Abstraksi:

Abstraksi merupakan mekanisme dari salah satu pilar oop di mana sebuah class dibuat private yang bertujuan untuk meminimalisir kompleksitas program, anda tidak dapat membuat instance / objek dari sebuah class abstrak untuk itu class abstrak biasanya dijadikan sebagai parent class untuk melakukan inisialisasi atribut berserta fungsi-fungsinya yang akan diimplementasi ke class turunannya, untuk menginisialisasi class abstract di Dart anda bisa menggunakan keyword abstract sebelum keyword class, contohnya sebagai berikut:


Dikarenakan pada constructor dari class abstract di atas memiliki parameter "jenis" maka class turunannya perlu mengakses parameter tersebut, anda dapat menggunakan keyword super untuk mengakses atribut "jenis" di mana ada dua cara untuk menggunakan keyword super, adapun contohnya sebagai berikut:


Encapsulation:

Enkapsulasi merupakan suatu metode dalam paradigma oop untuk membatasi akses pada atribut / field pada sebuah class yang bertujuan untuk menjamin keamanan data agar tidak mengalami perubahan akibat akses langsung atau kesalahan yang tidak disengaja contohnya saja sebagai berikut:

Transparansi tersebut tidak baik untuk program karena jika anda bekerja yang terdiri dari beberapa tim dan anda atau salah satu dari tim anda melakukan kesalahan karena mengakses atribut tersebut maka tentu akan mempengaruhi program anda, enkapsulasi dapat meminimalisir kesalahan tersebut, untuk melakukan enkapsulasi di bahasa Dart anda perlu menggunakan simbol garis bawah / underscore ( _ ), contohnya sebagai berikut:


Setelah membuat atribut menjadi private anda belum bisa menggunakan atribut tersebut karena atribut tersebut tidak dapat di akses langsung maka sebagai gantinya anda akan membutuhkan method khusus yang bersifat public yaitu method setter yang digunakan untuk menampung / memberikan nilai ke field dan getter untuk mengambil / mengakses nilai dari suatu field, anda juga bisa menggunakan keyword set atau get yang dapat diikuti dengan tipe data kembalian (return) atau tanpa tipe kembalian (void), adapun contohnya sebagai berikut:


Pada dasarnya dalam membuat method setter adalah sama sebagaimana anda membuat method biasa di mana anda dapat menggunakan tipe kembalian (return) atau tanpa tipe kembalian (void) namun untuk method getter jika berupa void maka anda harus mendeklarasikannya tanpa parameter dan selalu membutuhkan tipe kembalian, dengan demikian jika anda ingin memberikan nilai ke sebuah objek maka method setter yang anda gunakan bukan atribut dari class objek dan untuk mengambil nilainya dapat menggunakan method getter, contohnya sebagai berikut:


Dengan menggunakan method setter anda dapat memastikan keamanan data yang diterima oleh sebuah field, misalnya saja anda ingin memastikan sebuah field hanya dapat menerima angka positif sehingga jika user memasukan berapapun nilai negatif maka nilai tersebut akan selalu berganti menjadi positif, contohnya sebagai berikut:


Selain membuat method setter anda juga dapat membuat properti setter yang tujuannya sama sebagaimana method setter hanya saja tidak memiliki tipe kembalian dan tanpa menggunakan keyword void, selain itu anda juga dapat mempersingkat method getter dengan menggunakan arrow notation, contohnya sebagai berikut:


Inheritance:


Sebuah class dalam paradigma oop umumnya dapat menerapkan mekanisme inheritance atau pewarisan/penurunan di mana arti sebenarnya dari pewarisan adalah mengakses properti dan fungsi-fungsi yang ada pada suatu class untuk di implementasikan kepada class yang lain sehingga terbentuk menjadi sebuah hierarki class sebagaimana ilustrasi gambar di atas, inheritance sangat membantu ketika anda perlu membuat sebuah blueprint objek yang kiranya memiliki kesamaan sebagaimana contoh-contoh di atas sebelumnya, yaitu class Kendaraan dapat mewarisi setiap properti dan fungsi yang ada di dalamnya untuk di implementasikan ke class yang lain karena memiliki kesamaan, hal tersebut jauh lebih efisien ketimbang membuat banyak class yang sekiranya memiliki kesamaan karakteristik.

Bayangkan saja jika anda memiliki dua blueprint yang sekiranya memiliki kesamaan antara mobil dan motor di mana keduanya memiliki properti seperti merk kendaraan, warna, kecepatan min/max, cc, dll maka ketimbang anda membuat dua class yang hampir mirip dan mendeklarasikan ulang atribut yang sama lebih baik anda membuat satu buah class untuk menjadi parent class sehingga dapat mewarisi properti/fungsi yang ada di dalamnya. 

Penggunaan:

Inheritance di dalam bahasa pemrograman Dart dapat menggunakan beberapa keyword, diantaranya:

  • Extends:

keyword extends dapat mewariskan properti dan method yang ada pada parent class di mana class child memiliki akses penuh ke class parent, jika class parent tidak memiliki field atau method apapun alias hanya berupa class kosong maka pewarisan extends tetap dapat dilakukan, class child juga tidak harus mengimplementasikan setiap field dan method yang ada di class parentnya, contohnya sebagai berikut:


Jika class parent memiliki constructor dengan penggunaan keyword required atau this maka class child perlu mengakses constructor dari class parentnya dengan menggunakan keyword super, contohnya sebagai berikut:

  • Implements:

Jika anda ingin mewarisi sebuah class yang identik dengan class parentnya anda dapat menggunakan keyword implements di mana class child perlu menulis ulang / mengimplementasikan setiap field, method, setter / getter yang ada di dalam class parentnya sebagaimana contoh berikut:


Lalu dari contoh di atas mengapa anda mendapat pesan "Annotate overriden members"? Anotasi override digunakan oleh Dart analyzer yang dimaksudkan untuk memberikan peringatan terhadap beberapa potensi masalah program yang sebenarnya dinyatakan valid sehingga anotasi ini tidak memberikan dampak apapun namun pada best practicenya anda perlu menambah keyword @override, anotasi tersebut berlaku untuk method, getter / setter dan variable (field) pada class child dengan pewarisan implements, contohnya sebagai berikut:

  • With (Mixin) dan On:
Mixin digunakan untuk menambahkan kemampuan dari suatu atau beberapa class ke class utama anda, ilustrasinya mirip seperti sebuah adonan kue di mana anda dapat menambahkan bahan-bahan lainnya, anda dapat menggunakan keyword with diikuti dengan satu atau beberapa nama class lainnya atau bisa dengan keyword mixin diikuti dengan penggunaan keyword On dan satu atau beberapa nama class, contohnya sebagai berikut:


Jika anda menggunakan with maka pastikan pada class yang akan anda gunakan dengan with tidak memiliki constructor dan bukan merupakan class pewarisan dengan menggunakan keyword extends sedangkan mixin dan on, anda dapat mengkombinasikan keduanya di mana anda dapat menambahkan class yang merupakan class pewarisan.

Macam-macam bentuk inheritance:

Inheritance juga memiliki beberapa macam bentuk, diantaranya sebagai berikut:
  • Single inheritance - Hanya memiliki satu pewarisan / pewarisan tunggal:

  • Multiple inheritance - Pewarisan dari satu atau beberapa class sekaligus

  • Multi-level inheritance - Pewarisan dari pewarisan yang lain (bertingkat)

  • Hierarki inheritance - Pewarisan yang membentuk hierarki tertentu

Polimorfisme:

Suatu class yang memungkinkan untuk memiliki banyak pewarisan maka disebut sebagai polimorfisme, tidak ada keyword khusus yang digunakan untuk menginisialisasi polimorfisme, adapun contohnya sebagai berikut:



Bayu Radityo

Seorang lulusan teknik informatika yang senang dalam berbagi ilmu pengetahuan, dan membuat karya digital berupa photomanipulation dan digital drawing. instagram external-link

Posting Komentar

Lebih baru Lebih lama