Paradigma pemrograman adalah gaya atau cara dalam menulis suatu program
menggunakan bahasa pemrograman tertentu.
OOP (Object Oriented Programming) adalah salah satu paradigma atau teknik
pemrograman yang populer dalam pengembangan aplikasi. Dengan paradigma
tersebut, kita dapat dengan mudah memvisualisasikan kode karena OOP sendiri
mirip dengan skenario kehidupan nyata.
Dalam penerapannya, OOP menggabungkan kumpulan fungsi atau atribut yang
memiliki kesamaan dalam sebuah unit yang kita sebut sebagai objek.
Class, merupakan sebuah blueprint yang dapat dikembangkan untuk membuat
sebuah objek. Di dalam class bisa terdapat beberapa attribut ataupun behaviour.
Property, adalah data yang ada dalam sebuah class yang merepresentasikan
karakteristik dari sebuah class. Setiap property memiliki struktur dasar, diantaranya
adalah modifier, tipe data, nama konstanta dan nilai.
Function, sebuah prosedur yang memiliki keterkaitan dengan pesan dan objek.
Ada 4 pilar dalam OOP, yaitu Inheritance, Encapsulation, Abstraction,
dan Polymorphism
Inheritance, mekanisme pewarisan sifat yang dilakukan dari sebuah kelas (induk) ke
class baru (anak), di mana beberapa fungsi maupun property yang ada pada induk
kelas akan bisa diakses oleh kelas baru tersebut.
Ada beberapa istilah dalam inheritance, yaitu superclass dan
subclass. Superclass adalah class yang fitur-fiturnya akan diwariskan.
Sedangkan subclass adalah class baru yang akan mewarisi member milik superclass.
Inheritance di kenal ada beberapa jenis, yaitu :
o Single Inheritance, class yang dibuat hanya mewarisi satu class saja.
o Multiple Inheritance, class yang mewarisi lebih dari satu superclass
o Hierarchical Inheritance, sebuah superclass yang diwarisi oleh beberapa
subclass.
o Hybrid Inheritance, kombinasi dari beberapa inheritance.
Encapsulation, adalah proses di mana penanganan data diisolasi dan ditempatkan di
dalam sebuah class. Data yang terisolasi tidak dapat diakses langsung dari luar.
Abstraction, adalah mekanisme saat proses dalam sebuah objek disembunyikan dan
hanya akan menyediakan apa yang benar-benar perlu digunakan.
Polymorphism, merupakan kemampuan objek, variabel, atau fungsi yang dapat
memiliki berbagai bentuk. Polymorphism terbagi menjadi 2 yaitu:
Relations in OOP atau bisa disebut hubungan antar object adalah hal yang mendasar
dalam pemrograman berorientasi objek. Hubungan tersebut mendefinisikan
bagaimana objek-objek tersebut akan berinteraksi atau berkolaborasi satu sama lain.
Ada 3 kategori dalam hubungan antar objek, yaitu association, dependency,
dan generalization.
Association, didefinisikan sebagai hubungan yang terstruktur, yang secara konsep
memiliki arti bahwa dua komponen saling terhubung satu sama lain.
Hubungan dalam asosiasi disebut sebagai kardinalitas, yang merupakan hubungan
maksimum yang terjadi dari himpunan entitas yang satu ke himpunan entitas yang
lain, atau sebaliknya. Ada beberapa tipe dalam kardinalitas, yaitu:
o Rigidity, adalah kondisi suatu sistem yang sulit diubah, bahkan untuk
perubahan yang paling sederhana.
o Fragility, adalah kecenderungan perangkat lunak yang salah di beberapa
bagian setiap kali melakukan perubahan.
o Immobility, adalah sebuah ketidakmampuan untuk menggunakan kembali
perangkat lunak dari proyek lain atau bagian-bagian dari proyek yang sama.
Modul S.O.L.I.D
Berikut adalah rangkuman dari beberapa materi yang telah dibahas pada module ini:
CI/CD adalah istilah paralel dalam pengembangan perangkat lunak. CI adalah proses
integrasi sebuah kode ke repository, untuk selanjutnya melakukan proses uji otomatis, sering,
dan berlangsung cepat. Proses CI ini berlaku atas perintah dari commit.
Lalu apa itu CD? CD ini merupakan proses lanjutan dari CI, yakni proses praktik pada
kondisi setelah semua kode sukses terintegrasi. Selanjutnya aplikasi pun bisa rilis otomatis.
Antara pihak tim pengembang dan operasional terjadi tiga fase penting yakni dari mulai CI,
berlanjut devops continuous delivery, lalu terakhir continuous deployment.
CI/CD pipeline ini sangat lazim digunakan dalam pengembangan perangkat lunak.
CI/CD pipeline ini menjadi penghubung antara tim pengembang dengan tim operasional yang
di dalamnya terdapat tiga fase yang berupa continuous integration, continuous delivery,
dan continuous deployment. Ketiga fase tersebut akan dilakukan secara terus menerus dan
otomatis untuk mendapatkan perangkat lunak yang andal dan bebas dari bug.
Setelah mengetahui pengertian dari CI/CD, sekarang kita akan membahas manfaat dari
penggunaan CI/CD dalam pengembangan perangkat lunak. Berikut ini adalah manfaatnya:
Ada beberapa tools yang dapat digunakan dalam proses CI/CD. Berikut ini adalah tools yang
dapat kamu gunakan:
Jenkins
Tool yang pertama adalah Jenkins. Jenkins adalah salah satu CI/CD tool yang sering
digunakan. Jenkins ini bersifat open source dan menggunakan bahasa pemrograman
Java. Tool ini juga dapat digunakan pada berbagai sistem operasi seperti Windows,
macOS, dan Linux.
Tool ini memiliki banyak plugins yang dapat dimanfaatkan untuk membuat, men-
deploy, dan melakukan otomatisasi dalam proses pengembangan perangkat lunak.
AWS Codebuild
Tool berikutnya ada AWS Codebuild. Seperti namanya tool ini dikembangkan oleh
AWS. Tool ini memungkinkan pengembang untuk mem-build dan menguji kode
secara berkelanjutan. Selain itu tool ini juga aman dan dapat melakukan automasi.
Azure DevOps
Jika kamu masih belum mendapatkan tool CI/CD yang sesuai untuk kamu gunakan,
mungkin Azure DevOps ini dapat kamu coba. Ia dapat diandalkan untuk mengatur,
testing,hingga melakukan deploy untuk aplikasi. Tool ini diciptakan oleh Microsoft
dan dapat berjalan pada berbagai sistem operasi, mulai dari Windows, macOS, hingga
Linux.
GitLab CI/CD
Tool yang terakhir adalah Gitlab CI/CD. Tool ini dibuat dan dikembangkan oleh
GitLab. Tools ini dapat dimanfaatkan untuk pengembangan perangkat lunak mulai
dari awal hingga akhir. Tool ini bekerja dengan menggunakan tiga metode,
yaitu continuous integration, continuous delivery, dan continuous deployment. Fitur
lain yang ditawarkan oleh tool ini adalah, ia dapat mengerjakan proyek di virtual
machine, docker container, atau server lainnya.
Jadi, CI/CD adalah salah satu praktik DevOps yang digunakan untuk pengembangan
perangkat lunak menjadi lebih terorganisir. Penggunaan CI/CD pada pengembangan aplikasi
memberikan banyak manfaat yang akan langsung terasa oleh tim pengembang. Selain itu, ada
banyak pilihan tool atau alat yang dapat digunakan untuk mendukung berjalannya proses
CI/CD ini secara otomatis dan aman.
Clean architecture
Clean architecture berbeda dengan clean code, sebuah proyek dikatakan memiliki clean
architecture apabila orang lain bisa mudah mengetahui program apa yang sedang dia buat,
hanya dari melihat struktur file di folder projectnya, begitu dia melihat isi folder kita, yang
dia tahu bukanlah dengan framework apa program kita dibuat, bukan dengan database apa
penyimpanan yang kita buat, bukan pula library apa saja yang kita gunakan, tapi yang
pertama kali dia tangkap adalah, program apakah itu, apakah aplikasi keuangan, atau sistem
manajemen rumah sakit, atau aplikasi gudang, atau yang lainnya. Ibaratkan sketsa arsitektur
bangunan, begitu kita melihatnya, kita akan tahu itu adalah arsitektur untuk bangunan
sekolah, atau rumah sakit, atau perpustakaan, hanya dari melihat sketsanya saja, dan kita
tidak tahu dengan bahan apa bangunan tersebut dibuat, dengan pasir jenis apa, dengan baja
ringan atau apa, yang kita tahu, hanyalah fungsi bangunannya.
Sebagai contoh, fitur data user, pada fitur ini tidak peduli apakah penyimpanannya akan
menggunakan database, file atau session, yang fitur ini tahu hanyalah tugasnya untuk
memberikan data-data yang harus disimpan ke lingkaran yang lebih besar darinya yakni fitur
basis data, disinilah ditentukan akan disimpan dengan metode apa. Dan apabila nanti akan
diganti dari MySQL atau Oracle misalnya, fitur data user tidak perlu dirubah, yang perlu
dirubah hanya fitur basis data
3. Mudah, portable dan cepat dites
Karena setiap fitur "terkotak-kotak", maka akan dengan mudah mengetes setiap fitur tersebut,
misal kita ingin mengetes fitur yang menampilkan profil user, yang datanya diambil dari fitur
basis data, maka walaupun program kita belum terkoneksi ke databaase, kita bisa merubah
agar fitur basis data ini mengambil data dari hardcode array atau membaca file, sembari
menunggu kesiapan database, dan jika di lain waktu nanti terjadi migrasi database (misal dari
MySQL ke Oracle) maka yang perlu dirubah hanyalah dari fitur basis data ini. Yang
dimaksud portable adalah misal kita membuat aplikasi android menggunakan android studio
dengan bahasa JAVA, sebuah fitur disebut portable apabila bisa ditest tanpa membutuhkan
android studio, yaitu karena bahasanya JAVA maka bisa ditest dengan JVM, dengan begini
programmer tidak bergantung pada versi android studio tertentu atau library tertentu untuk
melakukan pengetesan.