Relasi Antar Kelas – Komposisi

Komposisi merupakan relasi antar kelas yang lebih ketat dibanding agregasi (lihat pos yang lalu), sedikit berbeda dibanding inheritance yang bersifat generalisasi/spesialisasi. Masih dengan kasus yang sama berikut ini.

Diagram kelas Unified Modeling Language (UML) di atas memperlihatkan relasi antara kelas Dosen dan Mahasiswa “Membimbing”. Teknik di atas sering muncul di buku karangan Alan Denis (System Analysis & Design – an OO Approach with UML).

Karakteristik agregasi antara dua kelas adalah independen. Jika dihapus satu objek yang berelasi, objek lain masih ada, sementara komposisi tidak. Ada istilah Wadah (Container) dan Isi (Contain). Jika wadah dihapus maka isi ikut terhapus juga. Misalnya komputer yang memiliki komponen prosesor, ram, mainboard, dan lain-lain dihapus, maka komponen otomatis ikut terhapus.

Secara kode mirip dengan agregasi, hanya saja isi, dalam hal ini isi, misalnya dosen pembimbing, dibangkitkan dalam objek yang berperan sebagai wadah, misal mahasiswa.

Pada agregasi, objek mahasiswa y (si Wahyu) memiliki dosen pembimbing x (Rahmadya). Jika objek y dihapus (ketik saja “del y” di colab) x masih ada. Nah, untuk komposisi dosen pembimbing y (Ujang) diletakan di dalam y sebagai wadah. Jika y dihapus/delete dosen pembimbing pun terhapus, berbeda dengan agregasi yang masih ada x tersisa. Berikut secara UML bagaimana notasi agregasi dan komposisi.

Namun dalam implementasinya antara agregasi dan komposisi hanya garis saja seperti dalam buku Alan Dennis et al, kecuali jika ingin merinci diagram kelasnya. Untuk inheritance harus dicantumkan dalam diagram simbolnya, karena atribut dan metode ada di kelas induk. Jika tidak diberi simbol panah khawatir pembaca akan bingung kemana atribut dan metode lainnya yang berada di kelas induk. Untuk lebih jelasnya silahkan lihat video Youtube berikut ini.

 

Random Forests dengan Google Colab Python

Decision Tree (DT) merupakan metode machine learning klasik yang memiliki keunggulan dari sisi interpretasi dibanding Deep Learning (DL). Memang akurasi Deep Learning, terutama yang digunakan untuk mengolah citra sudah hampir 100% tetapi beberapa domain, misalnya kesehatan membutuhkan model yang dapat dilihat “isi” di dalamnya. Kita tahu bahwa DL sering dikatakan “black box” karena tidak dapat diketahui alur di dalamnya. Nah, di sinilah DT digunakan karena memiliki keunggulan dari sisi transparansi. Bahkan ketika DT terbentuk kita bisa memprediksi secara manual hasil akhir dengan melihat alur DT tersebut tanpa bantuan komputer. Silahkan lihat pos saya terdahulu tentang DT.

Nah, karena data yang besar terkadang DT sangat sulit terbentuk. Seorang peneliti dari IBM bernama Tin Kam Ho membuat algoritma DT di tahun 1995 (saya baru masuk S1 FT UGM waktu itu). Prinsipnya adalah membuat DT-DT kecil secara acak kemudian digunakan untuk memprediksi melalui mekanisme voting. Misalnya kita ingin memprediksi sesuatu dengan enam buah Trees di bawah ini.

Jika hasilnya 2 Yes dan 4 No maka secara voting hasil prediksinya adalah No karena yang terbanyak No. Oiya, Tree yang dibentuk di atas ketika memilih root dan node tidak perlu menggunakan kalkulasi njlimet seperti DT yaitu dengan Entropi dan Gain Information.

Bagaimana menerapkan lewat bahasa pemrograman? Python memiliki library Scikit Learning untuk Random Forests. Oiya, jika ingin melihat kode di dalam library tersebut silahkan buka saja Source di Github yang disediakan oleh Scikit Learning. Jika ingin memodif silahkan tiru-amati-modifikasi source code tersebut, khususnya para mahasiswa doktoral yang fokus ke metode. Untuk lebih jelasnya silahkan lihat link Video saya di Youtube berikut ini. Sekian, semoga bermanfaat.

Support Vector Regression Untuk Prediksi Sebaran COVID-19

Support Vector Regression (SVR) merupakan metode klasik yang memanfaatkan teori matematika dan statistik untuk regresi dengan model Support Vector Machine (SVM). Jadi SVM ternyata bukan hanya untuk klasifikasi melainkan juga untuk regresi dan deteksi outliers.

Silahkan gunakan Scikit Learning untuk bahasa Python. Postingan ini mengilustrasikan penggunaannya dengan Google Colab. Data COVID dapat kita temukan di internet, atau silahkan gunakan file Excel link ini. Pilih negara yang ingin Anda prediksi kemudian simpan dalam bentuk file. Berikut kira-kira kode programnya.

#impor pustaka svm
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
from sklearn.svm import SVR
from google.colab import files
import io
#data latih
upload_files = files.upload()
for filename in upload_files.keys():
x=upload_files[filename].decode(‘utf-8’)
data1 = pd.read_csv(io.StringIO(x), header=None)
#print(data1.head())
X1=np.asarray(data1)
x_train=X1[0:,0:1]
y_train=X1[0:,1:2]
#membuat model (classifier)
clf = SVR(kernel=‘poly’, C=100, gamma=‘auto’, degree=2, epsilon=.1,
oef0=1)
clf.fit(x_train,y_train)
#prediksi data
test=x_train.reshape(-1,1)
y_pred=clf.predict(test)
y_next=np.array([[457],[465],[470],[471],[480]])
prednext=clf.predict(y_next)
print(prednext)
#Visualisasi Data
absis=[x_train]
ordinat=[y_train]
#ordinat2=np.concatenate([x_train],[prednext])
plt.scatter(absis, ordinat, cmap=‘flag’, marker=‘o’)
plt.scatter(absis, y_pred, cmap=‘flag’, marker=‘x’)
plt.scatter(y_next, prednext, cmap=‘flag’, marker=‘x’)
#Label
plt.xlabel(“Day”)
plt.ylabel(“Number of infected People”)
plt.title(“Projection Pattern of COVID-19 Spread in India”)
plt.grid()

Jika dijalankan, masukan saja data CSV yang Anda ingin prediksi dan tunggu beberapa saat, agak lama karena 400-an hari (lebih dari setahun). Jika selesai pastikan hasil prediksi muncul.

Tampak garis biru merupakan data asli dari Excel sementara garis oranye merupakan hasil fitting berdasarkan kernel polinomial (kuadratik). Lima tanggal prediksi tampak di ujung kanan berwarna hijau. Silahkan lihat video lengkapnya di chanel saya. Sekian, semoga bisa menginspirasi.

P.S. Tulisan di atas sebagian diambil dari publikasi kami di https://ieeexplore.ieee.org/document/9415858

Relasi Antar Kelas – Agregasi

Relasi antar kelas pada Pemrograman Berorientasi Objek (PBO) dikenal dengan nama Asosiasi, yang terdiri dari agregasi dan komposisi, selain dari pewarisan/inheritance yang merupakan ciri khas PBO. Postingan kali ini akan membahas agregasi, merupakan relasi/asosiasi yang dikenal dengan istilah “Is – a”. Perhatikan diagram kelas berikut ini:

Di sini kita akan mengintegrasikan konsep pewarisan (kelas Unisma memiliki anak Dosen, Mahasiswa, dan Satpam) dan agregasi (mahasiswa memiliki dosen pembimbing dari kelas Dosen). Atribut mahasiswa di sini antara lain:

  • Nama
  • Status
  • Jurusan
  • NPM
  • Pembimbing

Atribut nama, status, dan jurusan berasal dari kelas induk (Unisma) sementara NPM dan Pembimbing dari kelas Mahasiswa (kelas anak). Agregasi digambarkan dengan garis, terkadang ada panah disertai penjelasan relasi tersebut, misalnya “membimbing”. Berikut kelas Unisma.

class Unisma(object):
  def __init__(self,nama,status,jurusan):
      self.nama=nama
      self.status=status
      self.jurusan=jurusan
  def Salam(self):
      print(‘Selamat Hari Raya Idul Fitri 1442H’)
  def Info(self):
      print(“INFO”)
      print(“Nama    : “ + self.nama)
      print(“Jurusan : “ + self.jurusan)

Berikut ini kode kelas Dosen. Perhatikan kata kunci “super” yang berarti dosen merupakan pewarisan dari kelas Unisma. Jadi Dosen mewarisi atribut-atribut nama, status, dan jurusan, berikut juga metode/operasi Salam() dan Info().

class Dosen(Unisma):
  def __init__(self,nama,status,jurusan,nip):
      super().__init__(nama,status,jurusan)
      self.nip=nip
  def SalamDosen(self):
      print(‘Kami {}  {} mengucapkan’.format(
          self.status,self.jurusan))
      self.Salam()

Berikut ini kode kelas Mahasiswa dengan tambahan satu atribut “pembimbing” yang nantinya akan direlasikan dengan objek Dosen selaku pembimbing.

class Mahasiswa(Unisma):
  def __init__(self,nama,status,jurusan,npm,pembimbing):
      super().__init__(nama,status,jurusan)      
      self.npm=npm
      self.pembimbing=pembimbing
  def SalamSiswa(self):
      print(‘Hai teman-teman, kami {} {} mengucapkan’.format(
          self.status,self.jurusan))
      self.Salam()
  def GetInfo(self):
      print(“Pembimbing : “ + self.pembimbing.nama)

Jalankan dengan kode-kode berikut untuk mengeceknya.

x=Dosen(“Rahmadya”,“Dosen”,“Teknik Komputer”,123)
y=Mahasiswa(“Wahyu”,“Mahasiswa”,“Teknik Mesin”,1111123,x)
y.Info()
y.GetInfo()

Untuk lebih jelasnya silahkan lihat video penjelasannya berikut ini. Sekian, semoga bermanfaat.

Public, Private, dan Protected Pada Python

Public, Private, dan Protected dikenal dengan nama Visibility. Istilah ini telah lama dikenal oleh bahasa pemrograman C++ dan Java. Python, merupakan bahasa baru secara default mendefinisikan suatu atribut atau metode bersifat public. Diagram kelas UML mendefinisikan public dan private dalam bentuk simbol positif dan negatif.

Untuk membuat private dengan menggunakan simbol garis bawah dimana untuk protected satu garis bawah (“_”) dan untuk private dua garis bawah (“__”).

Berikut contoh kelas Unisma sebagai induk dan kelas Dosen dan Mahasiswa sebagai anak yang diambil dari materi sebelumnya tentang inheritance/pewarisan. Silahkan gunakan editor Python, misalnya Google Colab untuk menjalankan kode berikut.

class Unisma(object):
  def __init__(self,nama,status,jurusan):
      self.__nama=nama
      self.__status=status
      self.__jurusan=jurusan
  def Salam(self):
      print(‘Selamat Hari Raya Idul Fitri 1442H’)
  def Info(self):
      print(“INFO”)
      print(“Nama    : “ + self._Unisma__nama)
      print(“Jurusan : “ + self._Unisma__jurusan)

Berikutnya untuk kelas Mahasiswa:

class Mahasiswa(Unisma):
  def __init__(self,nama,status,jurusan,npm):
      super().__init__(nama,status,jurusan)      
      self.__npm=npm
  def SalamSiswa(self):
      print(‘Hai teman-teman, kami {} {} mengucapkan’.format(
          self._Unisma__status,self._Unisma__jurusan))
      self.Salam()

Berikutnya coba jalankan dengan instruksi pengaksesan kelas-kelas di atas.

y=Mahasiswa(“Wahyu”,“Mahasiswa”,“Teknik Mesin”,123)
y.SalamSiswa()
y.Info()

Berikut video youtube untuk lebih jelasnya.

Naïve Bayes – Kalkulasi secara Manual dan dengan Komputer

Saat ini tidak dapat dipungkiri bahwa Deep Learning paling banyak diteliti dan digunakan dalam aplikasi-aplikasi artificial intelligence. Beberapa pengguna tidak menyukai metode tersebut karena karakteristiknya yang tidak dapat dilihat logika di dalam modelnya atau sering diistilahkan dengan black box walaupun akurasinya saat ini dengan model terbarunya hingga mendekati 100%. Selain itu, deep learning membutuhkan kinerja prosesor yang tinggi, terutama ketika proses pelatihan (learning).

Jika ingin membuat model yang dapat dilihat alur logikanya, naïve bayes merupakan salah satu pilihan yang baik. Walaupun kinerjanya menurut beberapa penelitian kalah dengan metode terkini seperti misalnya support vector machine (SVM), metode ini memiliki karakteristik statistik yang kental, yaitu probabilistik. Ada istilah confidence dalam metode ini.

Untuk perhitungan, naïve bayes lebih mudah menurut saya dibanding decision tree yang mengharuskan membuat model tree dengan konsep entropy dan gain informationnya. Pada naïve bayes, kita hanya menghitung probabilitas ketika menghitung confidence tiap-tiap kelas prediksi.

Plus Minus

Metode naïve bayes, dalam Scikit Learn diisitilahkan dengan Gaussian Naïve Bayes, karena dalam mengkonversi tabel kategorikal lewat pendekatan fungsi Gauss. Walaupun akurasinya kurang dibanding metode lain, sifat probabilistiknya sangat membantu penjelasan ke pengguna dalam aplikasinya. Misalnya dalam memprediksi sebuah sentimen dalam sentiment analysis, metode ini tidak hanya menjelaskan positif, negatif, atau netral saja, melainkan berapa kadar positif dan negatifnya dalam bentuk probabilitas. Terkadang jika dalam sistem dashboard menunjukan negatif dengan probabilitas yang tinggi bisa saja digambarkan dengan warna merah yang artinya warning, sehingga eksekutif segera mengambil tindakan yang perlu dalam manajemen.

Statistik merupakan bidang yang paling banyak dimanfaatkan dalam machine learning. Belakangan beberapa ahli machine learning enggan disebut ahli statistik karena belakangan metode-metode terbaru tidak terlalu mengadopsi konsep statistik, misalnya tensorflow yang cenderung ke arah tensor dan matriks dalam aljabar. Silahkan lihat penjelasan slide di atas dalam video youtube berikut ini, semoga bermanfaat.

Pseudocode

Bahasa pemrograman sangat beragam dari yang sulit seperti bahasa rakitan hingga yang paling mudah dengan bantuan Integrated Development Environment (IDE) yang interaktif. Hanya dengan drag and drop mouse, sebuah aplikasi terbentuk. Karena tiap programmer memiliki bahasa pemrograman sendiri, terkadang untuk berkomunikasi membutuhkan bahasa universal tentang sebuah algoritma. Di sinilah peran pseudocode, dimana sebuah alur algoritma dibuat dalam bahasa umum yang dimengerti manusia.

Dalam perjalanannya, pseudocode memiliki kompromi antara bahasa yang mudah dimengerti manusia dengan yang mudah diimplementasikan programmer. Cornel University menawarkan saran dalam pembuatan pseudocode sebagai berikut.

  • Dibuat menyerupai bahasa manusia dan kode program.
  • Hindari detil yang tidak perlu.
  • Jangan menulis yang sudah jelas.
  • Gunakan beberapa sintax program yang lebih ringkas dari bahasa, misal struktur if-then-else.
  • Perhatikan konteks-nya. Terkadang “use quicksort” pada pseudocode cukup jika audiens mengerti. Namun “quicksort” perlu dijabarkan pada kasus tertentu.
  • Jangan melupakan algoritma yang mendasari algoritma yg sedang dibuat pseudocodenya.
  • Seimbangkan antara pemahaman user dan programmer.

Buku-buku referensi internasional, terutama yang membahas metode-metode komputasi memiliki style terntentu dalam pembuatannya. Jurnal-jurnal ilmiah pun memiliki patokan-patokan dasar dalam pembuatan pseudocode. Ada yang merepresentasikan pseudocode dalam Figure/Gambar, ada pula yang menyamakan dengan naskah teks. Masing-masing ada kekurangan dan kelebihannya.

Thomas Cormen dalam buku Algoritma-nya kebanyakan merepresentasikan sebuah pseudocode dalam format fungsi dimana variabel input dimasukan dalam tanda kurung “()”. Selain itu, sebuah penomoran diberikan di tiap baris perintahnya.

Terkadang pembaca awam pun harus memahami seluk-beluk pemrograman, misalnya konsep rekursif yang unik dimana satu fungsi memanggil dirinya sendiri di dalam alur algoritmanya. Contoh sederhana adalah fungsi faktorial berikut.

Untuk lebih jelasnya silahkan simak video youtube berikut, yang masuk dalam materi kuliah logika dan algoritma.

Pohon Keputusan (Decision Tree)

Pohon keputusan merupakan satu metode klasik dalam prediksi/klasifikasi. Tekniknya adalah dengan menggunakan pertanyaan di suatu atribut (disebut test attribute) kemudian mengarahkan ke cabang mana sesuai dengan jawabannya. Tugas utama dalam metode ini adalah model membuat pohon/tree berdasarkan informasi dari data yang menjadi rujukan.

Perhitungan Manual

Pada slide di bawah, perhitungan manual dijelaskan yang diambil dari buku Data Mining karya Han and Kamber.

Beberapa kesalahan hitung terjadi ketika menghitung expected information dan entropi di tiap-tiap fitur/atribut. Untuk yang sedang mengambil kuliah ini ada baiknya berlatih soal-soal agar ketika ujian tidak terjadi salah hitung.

Perhitungan dengan Program

Berikutnya disertakan pula bagaimana mengimplementasikannya dengan Python, dalam hal ini menggunakan Google Colab. Saran untuk mahasiswa S1 dan D3 ada baiknya mengetik langsung kode (tanpa copas) agar bisa melatih skill/keterampilan. Sekaligus juga debug ketika ada error terjadi. Silahkan lihat video lengkapnya di youtube berikut ini. Semoga bermanfaat.

Inheritance/Pewarisan dengan Python

Salah satu konsep terkenal pada pemrograman berorientasi objek adalah inheritance/pewarisan. Istilah ini identik dengan generalisasi dan spesialisasi dimana seorang induk akan mewariskan sifat-sifat ke seorang anak yang general dan seorang anak memiliki sifat khusus yang spesifik. Gambar di bawah ini contoh diagram UML dalam menggambarkan relasi generalisasi yang menggambarkan konsep pewarisan.

Kotak menggambarkan kelas dengan tiga kompartemen/ruang yaitu nama, atribut dan metode/operasi. Kelas Unisma di atas merupakan kelas induk yang akan mewariskan tiga buah atribut (nama, status, dan jurusan) dan dua buah operasi/metode (salam dan Info). Di sini simbol minus berarti private (tidak bisa diakses dari luar kelas) dan plus berarti publik (bisa diakses di luar kelas). Silahkan lihat slide berikut.

Kelas Dosen dan Mahasiswa berturut-turut memiliki atribut unik NIP dan NPM, juga metode SalamDosen() dan SalamSiswa(). Perhatikan jangan lupa menulis “()” setelah nama metode/operasi, yang merupakan standar/konvensi internasional. Silahkan buat satu sel yang berisi kelas Unisma yang merupakan kelas Induk.

https://colab.research.google.com/drive/1T19eiVktOrMQzXqZLD3jV4I0fbbQZ6oA?usp=sharing

Kode di atas juga mengilustrasikan pembuatan dua kelas anak yaitu kelas Dosen dan kelas Mahasiswa. Di sini kita menggunakan IDE Google Colab yang dapat diakses tanpa perlu instalasi karena hanya menggunakan browser dengan network ke internet.

Perlu diperhatikan bahwa pemrograman berorientasi objek memiliki konsep Konstruktor dalam tiap pembuatan kelas. Karena tiap kelas harus mampu menciptakan satu objek. Tanpa konstruktor maka kelas tersebut tidak bisa membentuk objek. Istilahnya adalah kelas abstrak, terkadang diperlukan juga kelas jenis ini pada penerapannya. Silahkan lihat video berikut, semoga bermanfaat.

Bahasa Untuk Pemrograman Berorientasi Objek

Tiap kampus ternyata berbeda-beda awal perkuliahannya, termasuk kampus tempat saya mengajar yang baru mulai pertemuan pertama semester genap. COVID-19 memang membuat beberapa agenda perkuliahan berubah. Faktor perkuliahan online dan kesiapan kampuslah yang membuah pergeseran dan perubahan sistem, dari yang tatap muka menjadi online. Terutama kesiapan dalam menangani praktikum.

Untuk bidang komputer, khususnya materi pemrograman dapat dilakukan praktik secara online. Problem utama hanyalah di sisi mahasiswa yang terpaksa memindahkan komputer lab ke dalam laptop sendiri, sekaligus sarana network berupa pulsa/paket internet. Nah, untuk mahasiswa yang pas-pasan, tentu saja agak kesulitan ketika memiliki laptop dengan spesifikasi minim. Oleh karena itu perlu difikirkan bagaimana menyiapkan sarana yang murah-meriah.

Java

Java dan C++ sudah sejak lama menjadi sarana belajar pemrograman berorientasi objek. Silahkan lihat postingan saya tentang DB4O untuk basis data objek. Sebelumnya, bahasa ini menjadi andalah saya untuk praktik pemrograman berorientasi objek, tetap kondisi online sangat menyulitkan mahasiswa, sehingga perlu sarana murah-meriah lainnya.

Python

Bahasa yang paling banyak diminati saat ini adalah Python. Banyak paket yang tersedia dari Python berbasis konsol hingga paket Anaconda yang gratis diunduh. Hanya saja paket ini membutuhkan sumber daya yang besar untuk mengaktifkan fasilitas-fasilitas seperti Jupyter Notebook atau Spyder.

Untungnya Google menyediakan sarana programming hanya dengan browser dan mempersilahkan orang menggunakan servernya, termasuk Graphic Processing Unit (GPU) yang cukup ampuh dalam menangani Deep Learning. Bagaimana untuk pemrograman berorientasi objek?

Saat ini Python memiliki pesaing kuat, suatu bahasa pemrograman secepat C++, sedinamis Ruby, dan semudah Python, yaitu Julia. Namun bahasa ini tidak ditujukan untuk pemrograman berorientasi objek, berbede dengan Python yang dari awal memang untuk objek.

Mencoba Pemrograman Objek Sederhana

Baik untuk praktik awal, silahkan buka Google Colab Anda (lihat tata cara di post yang lalu). Copy paste saja kode berikut ini sebagai ilustrasi bagaimana sebuah kelas dengan method yang tersedia.


import math
class Point:
    'Represents a point in two-dimensional geometric coordinates'
    def __init__(self, x=0, y=0):
        '''Initialize the position of a new point. The x and y
        coordinates can be specified. If they are not, the point
        defaults to the origin.'''
        self.move(x, y)
    def move(self, x, y):
        "Move the point to a new location in two-dimensional space."
        self.x = x
        self.y = y
    def reset(self):
        'Reset the point back to the geometric origin: 0, 0'
        self.move(0, 0)
    def calculate_distance(self, other_point):
        """Calculate the distance from this point to a second point
        passed as a parameter.
        This function uses the Pythagorean Theorem to calculate
        the distance between the two points. The distance is returned
        as a float."""
        return math.sqrt((self.x - other_point.x)**2 + (self.y - other_point.y)**2)

Kelas di atas tidak menghasilkan output karena belum dihidupkan objeknya. Berikut cara mencoba method yang direpresentasikan dalam keyword “def” di atas.

point=Point(3,5)
print("point awal = ",point.x, point.y)
point2=Point(5,5)
jarak=point.calculate_distance(point2)
print("jarak dari point awal =",jarak)

Pastikan hasilnya tampak seperti di bawah ini, selamat mencoba.

Menggunakan Algoritma Genetika dengan Python

Algoritma Genetika (GA) merupakan salah satu nature-inspired optimization yang meniru evolusi makhluk hidup. Gampangnya, generasi terkini merupakan generasi yang terbaik yang adaptif terhadap lingkungan. Prinsip seleksi, kawin silang, dan mutasi diterapkan ketika proses optimasi secara pemilihan acak (random) dilakukan. Karena adanya unsur pemilihan acak, GA masuk dalam kategori metaheuristik bersama particle swarm optimization (PSO), simulated annealing (SA), tabu search (TS), dan lain-lain.

Bagaimana algoritma tersebut bekerja dalam suatu bahasa pemrograman saat ini dengan mudah kita jumpai di internet, dari youtube, blog, hingga e-learning gratis. Saat ini modul-modul atau library dapat dijumpai, misalnya di Matlab. Nah, dalam postingan ini kita akan mencoba dengan bahasa pemrograman Python. Sebelumnya perlu sedikit pengertian antara pembuatan program dari awal dengan pemrograman lewat bantuan sebuah modul atau library.

Beberapa pengajar biasanya melarang mahasiswa untuk langsung menggunakan library karena memang peserta didik harus memahami konsep dasarnya terlebih dahulu. Untungnya beberapa situs menyediakan kode program jenis ini yang dishare misalnya ahmedfgad, datascienceplus, pythonheatlhcare, dan lain-lain. Saya dulu menggunakan Matlab, dan ketika beralih ke Python karena pernah dengan bahasa lain maka dengan mudah mengikuti kode dengan bahasa lainnya. Oiya, saat ini GA, PSO, TS, dan lain-lain lebih sering disebut metode dibanding dengan algoritma karena tingkat kompleks dan ciri khas akibat mengikuti prinsip tertentu (makhluk hidup, fisika, biologi, dan lain-lain).

Selain memahami prinsip dasar, dengan kode python GA yang murni berisi langkah-langkah dari seleksi, kawin silang dan mutasi, jika Anda mengambil riset doktoral terkadang perlu menggabungkan dengan metode-metode lain, misalnya riset saya dulu, mutlak harus memodifikasi seluruh kode yang ada, jadi agak sulit jika menggunakan library yang tinggal diimpor.

Nah, jika Anda sudah memahami, dan sekedar menggunakan atau membandingkan metode satu dengan lainnya, penggunaan library jauh lebih praktis. Misal Anda menemukan metode baru dan harus membandingkan dengan metode lain, maka metode lain pembanding itu dapat digunakan, bahkan karena karakternya yang dishare maka orang lain (terutama reviewer jurnal) yakin keabsahannya (bisa dicek sendiri). Untuk GA bisa menggunakan library dari situs-situs berikut antara lain geneticalgorithms, pygad, pydea, dan lain-lain. Sebagai ilustrasi silahkan melihat video saya berikut yang menggunakan Google Colab.

Upgrade Skill Pemrograman Android

Ketika tidak mengajar, hal paling mengasyikan bagi dosen adalah pelatihan, terutama dari program studi diploma dan vokasi. Program studi jenis ini mengharuskan dosen memiliki ketrampilan yang bisa dibagikan kepada mahasiswa walaupun tentu saja tidak mungkin seorang dosen menguasai seluruh bidang yang ada, salah satunya adalah pemrograman mobile berbasis Android.

Cara paling praktis adalah saling berbagi ilmu oleh dosen-dosen yang ada. Beberapa hari yang lalu diadakan pelatihan mobile programming dengan Android Studio. Bahasa yang digunakan adalah Java disertai dengan Web Service berbasis CodeIgniter. Web service ini berfungsi menghubungkan aplikasi Android dengan sistem basis data, misalnya MySQL.

Ternyata banyak elemen-elemen yang perlu dikuasai untuk membuat aplikasi untuk handphone itu. Dari pembuatan layout, Grader Script, hingga pembuatan menu-menu lanjut seperti masukan berupa tanggal, combo, hingga upload image ke server. Bahkan instalasi software Android Studio pun butuh waktu. Tips dan Trik banyak diberikan terutama untuk mempercepat proses pembuatan aplikasi, misalnya penggunaan Genymotion yang menggantikan emulator bawaan Android Studio yang berat.

Sangat perlu untuk mengetahui teknik-teknik pembuatan praktis dan bagaimana beberapa paket dimanfaatkan yang berhubungan dengan user interface dan koneksi ke DBMS, misalnya dengan library volley. Rencananya akan dilanjutkan dengan pelatihan-pelatihan sesuai dengan peminatan seperti android yang menggunakan artificial intelligence, networking, hingga sistem informasi management (SIM). Dari semua itu, yang terpenting adalah kebersamaan antar dosen terutama dalam mengikuti visi misi tujuan dan sasaran (VMTS) prodi teknik komputer yang fokus salah satunya ke pemrograman berbasis network dan artificial intelligence pada perangkat embedded, yang kali ini diwakili oleh aplikasi mobile/gadget.

Yuk Ikut Standar dalam Perancangan Sistem

Salah satu yang membuat jengkel mahasiswa ketika mengerjakan skripsi/tugas akhir adalah tidak adanya standar yang harus diikuti, terutama tema-tema perancangan sistem dan pemrograman. Tetapi saat ini sepertinya mulai berkurang karena era online sudah merambah ke semua lini. Sumber-sumber informasi mudah dijumpai lewat variasi-variasinya seperti dalam bentuk blog, video, ebook, milis, grup dan lain-lain. Akibat tidak adanya standar, sering dijumpai perdebatan yang tidak perlu ketika sidang skripsi. Bahkan ada yang curhat ketika seorang mahasiswa dibimbing oleh dua pembimbing berbeda yang tidak seia-sekata. Disuruh oleh pembimbing A merubah mengikuti petunjuknya tetapi oleh pembimbing B diminta hal sebaliknya.

Khusus analisis dan disain basis data sudah dibahas pada postingan sebelumnya, yakni mencari sumber informasi tentang rancangan yang sudah sering dibuat orang. Pola-pola disain pun sudah umum ditemui, kita tidak perlu menemukan ide baru kecuali jika rancangan yang ingin dibuat khusus dengan karakteristik tertentu.

Standar Pemodelan Sistem

Sejak dulu, standar yang digunakan dalam pendidikan adalah buku referensi. Ketika beragumen, sebuah buku dijadikan rujukan akan kebenaran sebuah konsep. Masalah muncul ketika sebuah buku dianggap “kurang tepat” oleh pihak tertentu. Untuk cara aman biasanya akademisi menggunakan buku berstandar internasional. Hanya saja buku-buku jenis tersebut sulit dipahami oleh mahasiswa-mahasiswa kita, terutama para milenial-milenial yang lebih suka hal-hal yang praktis. Mereka butuh contoh-contoh kasus yang khusus yang ada di negara kita. Mau tidak mau buku-buku panduan berbahasa Indonesia yang ringkas sangat dibutuhkan. Masalah muncul ketika buku tersebut agak “kurang standar” walaupun sangat mudah dipahami. Oleh karena itu sebaiknya mahasiswa diajarkan melihat bentuk-bentuk standar resmi, misalnya untuk pemrograman berorientasi objek dapat dijumpai pada situs UML berikut.

Memang tidak ada orang yang memiliki pengetahuan lengkap akan suatu topik tertentu. Namun di era online, kita harus memanfaatkan fasilitas online tersebut. Amat disayangkan banyak dijumpai di jurnal-jurnal nasional penulisan diagram UML yang tidak mengikuti standar yang ada, padahal rancangannya bagus, hanya presentasi saja yang tidak mengikut standar. Bahayanya adalah, artikel tersebut dijadikan sitasi dan referensi sehingga artikel yang lain pun menjadi tidak mengikuti standar.

Contoh Kasus

Salah satu diagram UML yang paling banyak dibuat adalah diagram kelas dan use case. Bahkan saking seringnya use case digunakan ada istilah use case-driven. UML.org menyediakan unduhan versi terbaru untuk melihat standar yang ada. Standar di sini merupakan kesepakatan dari Object Management Group (OMG) dengan vendor-vendor perangkat lunak seluruh dunia. Jadi, jika kita berpatokan dengan situs resminya, pegangan kita menjadi kuat, jauh lebih kuat dibandingkan hanya berpegang pada buku referensi.

Gambar di atas merupakan salah satu contoh yang dibahas dalam UML.org yang dijumpai ketika membahas use case di halaman 643. Saya sendiri baru tahu kalau ada multiplicity dalam use case yang biasanya dijumpai pada diagram kelas. Perhatikan kesederhanaan yang ditampilkan. Sesuai fungsinya, use case memang diperuntukan sebagai penjelasan “apa” yang dilakukan sistem, bukannya “bagaimana”. Jadi jika rancangan use case kita berupa alur “bagaimana”, sudah dipastikan tidak sesuai dengan fungsi utama use case. Use case menggambarkan kewajiban apa saja yang harus diselesaikan programmer pada program yang diusulkan.

Contoh di atas mengharuskan programmer membuat fungsi-fungsi (dikenal dengan istilah functional requirement) dalam diagram use case di atas antara lain withdraw, transfer, deposit, register ATM, dan Read Log. Bagaimana dengan login? Silahkan tambahkan tapi jangan sampai berubah menjadi alur proses mendaftar Deposito dari login, registrasi, dll yang ujung-ujungnya ribet dan use case tidak memiliki fungsi utamanya. Silahkan jelaskan dengan diagram UML lainnya jika ingin detil, misalnya sequence atau activity diagram. Mungkin kita memiliki bentuk yang sedikit berbeda, misalnya tanpa multiplicity 0..1, 0..*, dll, tapi format garis tanpa anak panah perlu menjadi perhatian mengapa tidak ada panah di sana.

Perhatikan contoh lain bagaimana merinci suatu aktivitas dengan activity diagram di atas. Bagaimana fork dan join diimplementasikan dalam diagram aktivitas sebaiknya tetap mengacu standar. Sekian, silahkan kunjungi situs standar UML tersebut, semoga bisa membantu melerai pertengkaran di meja sidang skripsi/tugas akhir.

Merancang Sistem dengan Cepat Lewat Pola Umum Yang Ada

Banyak mahasiswa kesulitan ketika merancang sistem saat merampungkan skripsi atau tugas akhirnya. Sebagian besar melihat rancangan senior-senior yang sudah menyelesaikan rancangan. Tetapi banyak juga rancangan yang menjadi rujukan kurang baik sehingga kesalahan akan merambat ke adik-adik kelasnya.

Untuk sistem berorientasi objek, banyak referensi yang menyediakan pola (pattern) sebuah sistem informasi. Manfaatnya adalah kita bisa menggunakan kembali rancangan yang pernah dibuat. Biaya pembuatan sistem pun menjadi murah, bahkan sepertinya tidak masuk akal dengan harga yang murah itu. Tetapi dengan menggunakan pola yang pernah ada, sepertinya masuk akal karena perancang sistem tinggal menggunakan saja. Beberapa vendor pembuat sistem membedakan bayaran ke tim perancang jika sistem yang dibuat hanya menggunakan pola yang ada. Sementara itu jika tim membangun pola baru, perusahaan pembuat software itu akan membayar lebih karena pola yang dibuat menjadi aset perusahaan.

Transaksi

Untuk file master (data nasabah, data barang, data mahasiswa, dan sejenisnya) sepertinya tidak ada masalah bagi perancang. Hal ini karena hanya melibatkan operasi create, read, update, dan delete (CRUD). Teknik bagaimana proses penyimpanan sudah standar tingga memakai saja tergantung jenis bahasa pemrograman yang digunakan. Nah, untuk transaksi berbeda karena melibatkan alur proses bisnis. Untuk yang standar digunakan seperti penjualan, pembelian, pendaftaran, dan yang sering dijumpai sepertinya tidak ada masalah. Tetapi untuk domain tertentu seperti kedokteran, data warehouse, dan sistem lain yang jarang dijumpai atau masih baru sangat sulit didapat. Untuk merancang dari nol pun sepertinya membutuhkan waktu yang lama. Memanfaatkan jasa konsultan pun membutuhkan kocek yang tidak murah.

Sumber Informasi Pola Disain Sistem

Banyak buku yang menyediakan pola sistem informasi, salah satu penulis yang rajin membuat pola sistem adalah Martin Fowler. Khususnya yang tertarik dengan sistem berorientasi objek. Namun salah satu informasi yang murah-meriah dan cukup baik polanya adalah link berikut ini.

Silahkan cari pola yang cocok dengan rancangan yang sedang kita buat. Selain transaksi tertentu seperti peminjaman, pembelian, penyewaan, dan lain-lain, pola tersebut untuk domain spesifik (business rule) tertentu seperti lembaga asuransi, hotel, farmasi, kedokteran, dan lain-lain sehingga bisa lebih akurat dibanding jika hanya mengandalkan jenis transaksinya. Berikut ini contoh untuk penyewaan apartemen.

Perhatikan, ternyata tersedia juga model logika (logical data model) selain model fisik/file (physical data model). Jadi untuk para mahasiswa jangan sampai berpusing-pusing ria merancang sesuatu yang sudah ada, apalagi jika hasilnya “nyeleneh”. Untuk DBMS bisa mengunakan produk yang banyak tersedia di pasaran, misalnya untuk kasus pembelian barang dengan database sederhana (Microsoft Access) berikut ini.

Mengimpor Kelas Pada Python

Pemrograman berorientasi objek (PBO) saat ini lebih diminati dari pemrograman terstruktur. Hal ini karena PBO ternyata lebih terstruktur dengan pola yang terdiri dari atribut dan metode (operasi). Untuk penggunaan fungsi eksternal pada jenis pemrograman terstruktur sudah dibahas pada post terdahulu. Agar lebih jelas ada baiknya kita menggunakan contoh kasus yang sama, yaitu pembelian barang.

Membuat Kelas

Kelas dapat dibuat dalam satu file yang sama atau terpisah. Di sini kita coba menggunakan file terpisah, misalnya bernama “hitung.py”. File ini berisi tiga buah method dengan fungsi seperti kasus yang lalu: total, diskon dan bayar. Berikut kelas “struk” yang dibuat dengan kata kunci “class”. Perhatikan indent (menjorok) baik setelah “class” maupun “def”.

class struk:
	def total(harga,jumlah):
		"""fungsi untuk menghitung Total bayar"""
		return harga*jumlah

	def diskon(harga):
		""" fungsi menghitung diskon """
		if (harga >= 500000):
			potongan=harga*0.1
		else:
			potongan=harga*0.05
		return potongan

	def bayar(harga,potongan):
		""" fungsi menghitung total bayar """
		return harga-potongan

Memanggil Kelas

Kelas dipanggil dengan kata kunci “import”. Perhatikan pada listing di bawah cara memanggil fungsi/metode yang dimiliki oleh kelas, dalam hal ini kelas “struk”. Formatnya adalah <nama_kelas>.<nama_metode>. Di sini kita coba menggunakan Google Colab. Kita bisa juga menggunakan Jupyter Notebook atau versi terdahulu dengan IDLE.

from hitung import struk
print(" ———Toko Amanah Jaya———")
#input data
harga= int(input("masukan harga barang: "))
jumlah= int(input("masukan jumlah baju yang dibeli: "))
Total=struk.total(harga,jumlah)
potongan=struk.diskon(Total)
tagihan=struk.bayar(Total,potongan)
print("Total Harga = ", "Rp.",Total)
print("Diskon", "Rp.", potongan)
Bayar=int(input("Jumlah Nominal Uang =" ))
Kembalian= (Bayar-tagihan)
print("Uang Kembalian = ", "Rp.",Kembalian)

Berikut hasil “running” ketika transaksi barang dengan harga Rp. 100.000,- sebanyak 4 buah. Karena di bawah Rp. 500.000,- maka diskonnya 5 %. Sekian semoga bermanfaat.