Anda di halaman 1dari 10

Rangkuman Kelas

Modul Object Oriented Programming


Pada modul pendahuluan ini, kita telah mengenal dasar-dasar sebelum melangkah ke modul
selanjutnya, yaitu tentang Object Oriented Programming. Mari kita ulas sejenak apa saja
yang telah dipelajari pada rangkuman ini :

 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:

o Compile Time Polymorphism, adalah sebuah proses di mana sebuah method


atau fungsi dipanggil saat kompilasi. Contoh dari ini adalah konsep
overloading.
o Runtime Polymorphism, adalah proses di mana sebuah fungsi dipanggil pada
saat runtime. Contohnya adalah konsep overriding.
Modul Relasi pada OOP
Pada modul ini, Anda sudah mempelajari beberapa hubungan dalam OOP. Sebelum menuju
ke modul selanjutnya, mari kita mengingat-ingat point apa saja yang sudah dipelajari;

 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 One-to-one relationship, hubungan yang terjadi ketika satu objek A memiliki


referensi dari satu objek B, atau sebaliknya.
o One-to-many relationship, hubungan antara dua objek A dan B di mana objek
A terhubung dengan lebih dari satu objek B, tetapi anggota dari objek B
hanya terhubung dengan satu anggota A.
o Many-to-many relationship, hubungan antara dua buah objek A dan B, di
mana setiap anggota dari objek A maupun B memiliki hubungan lebih dari
satu objek A dan B.
 Dalam hubungan asosiasi antara 2 objek, terdapat 2 relasi yaitu:

o Aggregation, hubungan yang tidak terikat, hanya sekedar memiliki. Setiap


class yang berhubungan dapat berdiri sendiri jika salah satunya dihancurkan
atau tidak ada.
o Composition, hubungan yang saling terikat, yang saling memiliki satu sama
lain. Apabila salah satunya dihancurkan, maka class yang terikat lainnya akan
hancur juga, atau tidak bisa digunakan lagi.
 Dependency, adalah hubungan antara dua buah class, di mana satu class memiliki
ketergantungan dengan class lainnya tetapi class lainnya tidak atau mungkin
memiliki ketergantungan terhadap class pertama.
 Generalization, adalah konsep pemisahan karakteristik dari dua atau lebih class dan
menggabungkannya menjadi satu class yang lebih umum atau biasa disebut
Superclass. Berbanding terbalik dari generalisasi, specialization adalah konsep
membuat subclass dari class yang sudah ada.
 Realization, adalah hubungan abstraksi khusus antara dua kelas, satu mewakili kelas
yang direalisasikan (supplier) dan yang lainnya mewakili kelas implementasinya
(client)

Modul Software Design Principle


Akhirnya, kita telah selesai mempelajari tentang Software Design. Berikut adalah beberapa
materi yang telah dibahas:

 Dalam mengembangkan perangkat lunak, dibutuhkan architecture dan design yang


baik. Architecture menentukan struktur dari perangkat lunak. Sedangkan design,
lebih mengarah pada hubungan antar komponen yang berada di dalamnya.
 Software Design Principle merupakan pedoman yang dapat digunakan untuk
menghindari design yang buruk saat mengembangkan sebuah perangkat lunak.

 Menurut Robert C. Martin, terdapat 3 design yang buruk, 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:

 SOLID adalah kumpulan dari beberapa principle yang diwujudkan oleh


para engineer yang ahli di bidangnya dan membantu mengembangkan sebuah
perangkat lunak dengan tingkat kekukuhan yang tinggi.
 Ada beberapa tujuan dari prinsip SOLID, yaitu toleran terhadap perubahan, mudah
dipahami dan komponen dasar dapat digunakan kembali dalam bentuk software
system lainnya.
 SOLID adalah sebuah singkatan. Yang setiap hurufnya dapat dipecah lagi agar bisa
memahami isinya. Masing-masing pecahannya adalah

o Single Responsibility Principle (SRP), merupakan sebuah principle yang


digunakan untuk mengatur tanggung jawab dari sebuah entitas yang berada di
dalam sebuah proyek. Entitas dalam hal ini adalah sebuah module/class untuk
memenuhi kebutuhan actor. Sedangkan Actor sendiri merupakan kumpulan
"user" atau "stakeholder" yang menginginkan perubahan pada perangkat
lunak.

o Open / Close Principle, sebuah principle yang mengatur di mana artefak


perangkat lunak harus terbuka untuk ditambahkan tetapi tertutup untuk
dimodifikasi.
o Liskov Subtitution Principle, sebuah principle yang mengatur desain hirarki
pewarisan. Aturan - aturan tersebut antara lain

 Contravariant & Covariant,


Contravariant adalah kondisi di mana parameter dari sebuah fungsi
yang berada pada SubClass harus memiliki tipe dan jumlah yang sama
dengan fungsi yang berada pada SuperClass-nya.
Sedangkan Covariant, adalah kondisi pengembalian nilai dari fungsi
yang berada pada SubClass dan SuperClass.
 Precondition & PostCondition,
Precondition adalah tindakan yang harus ada sebelum sebuah proses
dijalankan. Sedangkan postcondition sebaliknya, yaitu tindakan yang
harus ada ketika sebuah proses selesai dijalankan.
 Invariant, adalah penjelasan dari kondisi suatu proses yang benar
sebelum proses tersebut dimulai dan tetap benar setelahnya.
 Constraint, adalah pembatasan yang ditentukan oleh SuperClass
terhadap perubahan keadaan sebuah obyek.
o Interface Segregation Principle, sebuah principle yang bertujuan untuk
mengurangi jumlah ketergantungan sebuah class terhadap interface class yang
tidak dibutuhkan.

o Dependency Inversion Principle, sebuah principle yang mengatur


ketergantungan antar module. Terdapat 2 aturan dalam dependency inversion
principle, yaitu

 High-level module tidak diperbolehkan untuk bergantung pada low-


level module. Keduanya harus bergantung pada abstraction.
 Abstraksi tidak diperbolehkan untuk bergantung pada detail. Detail
harus bergantung pada abstraksi.
Apa itu CI/CD?

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.

Manfaat dari CI/CD

Setelah mengetahui pengertian dari CI/CD, sekarang kita akan membahas manfaat dari
penggunaan CI/CD dalam pengembangan perangkat lunak. Berikut ini adalah manfaatnya:

 Mendapat feedback lebih cepat


Dalam penggunaan CI/CD pipeline ini kode akan diuji coba secara bersamaan agar
proses pengembangan perangkat lunak dapat berjalan dengan seimbang. Uji coba
dilakukan dengan CI tool. Tanggapan atau error yang terjadi juga bisa didapatkan
lebih cepat sehingga tim pengembang pun dapat langsung
menindaklanjuti feedback tersebut secepat mungkin.
 Dapat mendeteksi bug lebih cepat
Seperti yang dikatakan sebelumnya, CI/CD ini bekerja dengan melakukan pengujian
secara otomatis, sehingga jika ada bug yang muncul pada aplikasi yang
dikembangkan maka akan langsung terdeteksi oleh CI tool. Pengembang juga dapat
dengan mudah menemukan dan memperbaiki bug tersebut.
 Dapat mempercepat proses rilis
Proses rilis dari suatu aplikasi dapat mungkin dapat dipercepat. Hal itu disebabkan
kode-kode yang terus digabungkan dan diterapkan ke dalam produk, sehingga aplikasi
selalu dalam kondisi siap untuk dirilis kapan pun.

Tools untuk CI/CD

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, apa itu CI/CD?

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.

Sifat-sifat Clean Architecture

1. Tidak tergantung pada framework, library atau metode penyimpanan


Pada saat memulai koding, posisikan lah bahwa framework, library, metode penyimpanan
dan yang lainnya hanyalah tool/alat. Sebagaimana pada kehidupan sehari-hari, gunanya alat
adalah membantu kita, bukannya kita yang bergantung pada alat, dan alat sifatnya bisa
diganti, bukan kitanya yang diganti. Begitu juga pada pemrograman, pastikan kodingan kita
tidak bergantung pada tool, dalam kata lain, apabila ingin mengganti framework, maka
gantilah skrip penghubungnya(penghubung antara skrip original kita dengan tool-tool luar)
saja, dan apabila nanti ingin mengganti metode penyimpanan dari MySQL ke Oracle dan
lainnya, maka gantilah skrip penghubungnya saja, bukan sebagian besar apalagi keseluruhan
kodingan kita. Tempatkan tool sebagai budak kita, bukan kita yang menjadi budak tool
tersebut

2. Tidak menakutkan untuk diedit


Pernahkah Anda berpikiran untuk merapihkan kodingan project Anda, kemudian Anda mulai
merapihkannya sedikit demi sedikit dengan cara edit kemudian compile, edit kemudian
compile, edit kemudian compile dan seterusnya hingga akhirnya Anda menemukan pesan
error, dan di keadaan itu Anda berpikir untuk berhenti merapihkan kodingan karena takut
akan merusak keseluruhan project Anda. Dengan Clean Architecture, Anda bisa dengan
mudah merubah-rubah suatu kodingan tanpa harus takut akan mempengaruhi keseluruhan
project, hal ini karena clean architecture memaksa sang programmer untuk mengkotak-
kotakkan tiap-tiap fungsi-fungsi atau fitur-fitur dengan jalur lingkaran kecil dan lingkaran
besar, yakni fitur-fitur yang ada di lingkaran kecil, tidak terpengaruh oleh fitur-fitur di
lingkaran yang lebih besar, sebaliknya, fitur-fitur yang lebih besar sangat tergantung dan
harus mengikuti aturan-aturan yang ditetapkan oleh fitur-fitur yang lebih kecil darinya.

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.

Anda mungkin juga menyukai