Kemajuan teknologi informasi dan komunikasi menyebabkan semakin banyak aplikasi teknologi informasi dan komunikasi dalam bentuk perangkat lunak yang digunakan untuk mendukung kegiatan bisnis dan kegiatan sehari-hari manusia. Kemajuan bidang pengembangan perangkat lunak juga disertai dengan kemajuan bidang teknologi informasi dan komunikasi lainnya. Pada bab ini, akan dijelaskan konsep dasar pengembangan sebuah perangkat lunak, metode yang digunakan, perangkat untuk pemodelan, melakukan analisi kebutuhan, dan menerjemahkan kebutuhan menjadi deskripsi teknis.
Seperti bidang teknologi informasi yang lainnya, pemrograman telah mengalami evolusi sejak teknologi komputer diperkenalkan. Berbagai paradigma pemrograman telah dikembangkan, dan saat ini, paradigma pemrograman berorientasi objek merupakan paradigma pemrograman yang paling banyak digunakan. Paradigma pemrograman adalah cara pandang atau pola pendekatan terhadap masalah-masalah pemrograman yang akan menentukan suatu solusi dapat dihasilakan. Paradigma memberikan alur cara berpikir, aturan-aturan, dan batasan-batasan kepada Anda mengenai cara menyelesaikan sebuah persoalan.
Sejak teknologi pemrograman di perkenalkan, berbagai paradigma pemrgraman telah banyak digunkan secara luas dan mengalami perkembangan. Beberapa paradigma pemrograman yang pernah dikenal ecara luas antara lain sebagai berikut.
Pemrograman nonstruktural merupakan paradigma pemrograman yang paling awal di perkenalkan. Kode programnya terdiri atas rangkaian instruksi yang disusun secara berurutan. Setiap perintah atau statment akan ditempatkan di sebuah baris yang baru. Setiap baris diberi nomor baris atau label untuk memudahkan identifikasi atau pembacaaan kode program. berikut adalah contoh kode program yang bersifat nonstruktural.
Salah satu kelemahan terbesar dari paradigma nonstruktural adalah ketika Anda harus membuat aplikasi yang besar atau kompleks. kode program akan bertambah secara masif atau besar-besaran yang menyebabkan jumlah baris program yang sangat banyak. Akibatnya, kode program akan sulit dibaca dan dipahami oleh orang lain. dengan demikian, proses perbaikan atau pengembangan program akan sulit dilakukan. Hal ini dikarnakan perbaikan atau pengembangan harus dilakukan dengan cara memerikasa baris demi baris tiap kode program. seiring perkembangan teknologi informasi dengan kebutuhan akan perangkat lunak yang kompleks semakin besar, paradigma pemrograman nonstruktural sudah ditinggalkan.
Masalah yang timbul pada paradigma pemrograman tidak terstruktur dihilangkan dengan teknik pemrograman terstruktur. pada paradigma pemrograman ini, kode program akan dipecah menjadi beberapa bagian sesuai dengan proses yang di jalankan. Contoh memisahkan kode program untuk menjalankan proses perhitungan, menerima masukan dari pengguna, dan menampilkan hasil kepada pengguna. Berikut contoh kode program bersifat terstruktur yang ditulis dalam bahasa python
Paradigma pemrograman terstruktur memberikan peningkatan yang jauh lebih baik dibandingkan dengan pemrograman nonstruktural. Pemanfaatan fungsi dan prosedur yang terpisah untuk menjalakan logika atau proses pengembangan program menjadi lebih mudah dan cepat. Namun, meskipun dengan perbaikan tersebut, programer masih mempunyai kesulitan ketika harus mengembangkan program yang lebih besar dan kompleks. pemrograman terstruktur belum dapat mengakomodasi semua kebutuhan kompleksyang ada. Oleh karena itu, paradigma pemrograman berorientasi objek diperkenalkan.
Untuk menghilangkan permasalahan dari paradigma pemrograman sebelumnya, dikembangkan paradigma pemrograman sebelumnya, dikembangkan paradigma pemrograman berorientasi objek. Pada teknik pemrograman ini, segala sesuatu dianggap sebagai sebuah objek dan atribut. Adapun perilaku diterjemahkan menjadi bagian program yang disebut objek. Setiap objek merupakan bagian dari sebuah sistem yang berinteraksi satu dengan lainya. Setiap objek memiliki karakteristik dan perilaku tersendiri. Paradigma pemrograman berorientasi objek merupakan paradigma pemrograman yang adapat menggambarkan lebih dekat kondisi dunia nyata.
Ide tentang pemrograman berorientasi objek (Object Oriented Programming atau OOP) telah berkembang sejak tahun 1970-an. Namun, ide tersebut baru diperkenalkan pada tahun 1980-an, ketika Bjorne Stroustrup mengintegrasikan konsep OOP ke dalam bahasa pemrograman C dan menyebut bahasa pemrograman tersebut, yaitu C++. Bahasa pemrograman C++ kemudian menjadi bahasa pemrograman pertama yang mengakomodasi paradigma OOP dan digunakan secara luas untuk penggunaan komersial.
Pada buku ini, pemodelan perangkat lunak yang akan dijelaskan adalah pemodelan yang ditujukan untuk perangkat lunak yang dibangun dengan konsep berorientasi objek. Oleh karena itu, pemodelan berorientasi objek dikenal juga dengan istilah Object Oriented Design (OOD).
Paradigma pemrograman berorientasi objek didasarkan pada beberapa prinsip yang mendasari proses sebuah perangkat lunak dibangun. Prinsip-prinsip tersebut perlu anda pahami dengan baik. Adapun prinsip-prinsip tersebut adalah objek, class, abstraksi, enkapsulasi, inheritance, dan polimorfisme.
Objek
Objek adalah sesuatu yang menjadi fokus perhatian anda.
Objek juga dapat berupa sebuah benda yang sederhana, seperti bola tenis, atau sebuah objek yang lebih rumit seperti pendingin ruangan. Objek dapat juga berupa sebuah benda yang jauh lebih kompleks seperti pesawat udara. Ketika berbicara sebuah objek, anda dapat memperhatikan bahwa sebuah objek dapat saja terdiri atas objek-objek yang lain. Objek-objek yang lebih sederhana seperti lampu belajar terdiri atas beberapa objek yang lain. Adapun objek yang lebih kompleks seperti pesawat udara dibangun dari ribuan potongan objek. Objek tersebut saling berinteraksi dan bekerja menjadi sebuah objek yang lebih besar. Konsep yang sama akan digunakan dalam pemrograman.
Untuk membedakan sebuah objek dengan objek yang lain, biasanya objek dideskripsikan dengan karakteristik yang dimilikinya. Karakteristik tersebut dapat berupa ciri-ciri fisik yang dimiliki atau nilai(value) yang ada pada objek. Objek bola tenis memiliki ciri-ciri berupa warna, berat, diameter, bahan, dan harga. Karakteristik tersebut akan membedakan sebuah objek dengan objek yang lain.
Dalam paradigma pemrograman berorientasi objek, ciri-ciri atau karakteristik sebuah objek disebut dengan atribut. Beberapa atribut sebuah objek dapat mempunyai nilai yang berubah ketika berinteraksi dengan objek lain atau lingkungannya, sebaliknya beberapa atribut akan tetap mempunyai nilai yang sama. Contohnya pada objek bola tenis, ketika menggelinding, atribut posisi, kecepatan, dan percepatan akan berubah, sebaliknya atribut seperti diameter, bahan, dan warna akan tetap.
Selain karakteristik dan ciri-ciri, objek juga mempunyai identitas. Identitas adalah atribut objek yang membedakan satu objek dengan objek lain yang sejenis. Jika anda mempunyai lima buah objek bola tenis, kemudian anda mengambil satu dan melemparkannya ke dinding, bola tersebut akan memantul di dinding dan akan kembali ke arah anda. Anda dapat melihat bahwa yang anda lakukan pada sebuah objek bola tenis tidak akan mengubah tingkat keadaan bola tenis yang lain. Dengan kata lain, masing-masing bola tenis tersebut mempunyai keadaan yang bebas satu dengan lainnya, atau dengan kata lain, tingkat keadaan satu bola tenis tidak dipengaruhi oleh tingkat keadaan bola tenis yang lain. Hal ini terjadi karena masing-masing objek bola tenis memiliki identitas yang berbeda.
Masalah yang timbul pada paradigma pemrograman tidak terstruktur dihilangkan dengan teknik pemrograman terstruktur. pada paradigma pemrograman ini, kode program akan dipecah menjadi beberapa bagian sesuai dengan proses yang di jalankan. Contoh memisahkan kode program untuk menjalankan proses perhitungan, menerima masukan dari pengguna, dan menampilkan hasil kepada pengguna. Berikut contoh kode program bersifat terstruktur yang ditulis dalam bahasa python
2. Classes
Class adalah cetak biru (blueprint) atau template untuk membangun sebuah objek tertentu. Setiap objek yang ada di dalam sebuah program dibangun dari sebuah class. Sebuah class biasanya dibangun untuk membuat objek tertentu saja. Karena sebuah aplikasi pada umumnya terdiri atas banyak objek, sebuah aplikasi juga mempunyai banyak class.
Class dapat diibaratkan sebagai sebuah cetakan pada pabrik plastik. Cetakan tersebut dapat digunakan untuk membentuk banyak barang dengan bentuk dan karakteristik yang sama. Pabrik dapat membuat sebanyak mungkin barang yang sama dari sebuah cetakan. Namun, jika ingin membentuk barang yang lain, harus menggunakan bahan cetakan yang lain.
Pada paradigma berorientasi objek, sebuah class dapat mempunyai class di dalamnya. Dengan kata lain, sebuah class dapat diturunkan dari class yang lain. Konsep ini dikenal dengan istilah inheritance
3. Abstraksi
Abstraksi adalah sebuah proses menghilangkan atau membuang sebagian informasi yang tidak penting dan fokus pada informasi yang penting. Pada beberapa kasus, objek yang ada mungkin saja mempunyai banyak atribut dan perilaku. Akan tetapi, tidak semua dapat relevan dengan kepentingan anda. Dalam hal ini, sebagian atribut atau perilaku dari objek tersebut dapat diabaikan dan anda dapat fokus pada atribut dan perilaku yang relevan saja. Sebagai contoh, pada objek bola tenis jika anda ingin mengamati perilaku bola dan apa yang terjadi dengan pola pada saat dijatuhkan tidak akan berhubungan dengan atribut warna bola sehingga atribut tersebut dapat dibuang.
Dalam paradigma berorientasi objek, Anda hanya menggunakan atribut-atribut yang penting dan relevan dengan kepentingan organisasi dan mengabaikan atribut yang tidak relevan. Sebagai contoh, misalnya Anda ingin memodelkan sebuah class Siswa, yang akan digunakan pada aplikasi yang dibangun. Atribut seperti Nama Siswa, Alamat, Tanggal Lahir, Jenis Kelamin, dan Nama Orang Tua merupakan atribut-atribut yang penting. Sebaliknya, atribut-atribut seperti Tinggi Badan, Berat Badan, Warna Favorit, dan Makanan Kesukaan adalah atribut-atribut yang tidak relevan atau tidak penting bagi sekolah. Oleh sebab itu, atribut-atribut yang penting tersebut akan diikutkan dalam sebuah class, sedangkan atribut yang tidak penting akan dihilangkan dari class. Dengan demikian, sebelum mendesain sebuah class, anda terlebih dahulu harus melakukan proses abstraksi sehingga class yang dibangun adalah class yang relevan dengan kepentingan bisnis organisasi.
4. Enkapsulasi
Proses enkapsulasi adalah proses menyembunyikan informasi dari luar pada sebuah paket dan hanya menampilkan informasi yang perlu saja kepada pihak lain. Proses enkapsulasi dapat dibayangkan seperti halnya sebuah kapsul obat. Berbagai zat obat dengan tiap khasiatnya dicampur dan ditempatkan dalam sebuah kapsul. Ketika pasien memakannya, yang dirasakan adalah efek obat secara keseluruhan tanpa mengetahui efek dari masing-masing campuran obat yang ada. Proses enkapsulasi class mempunyai konsep yang sama. Informasi yang dimiliki sebuah class seperti atribut dan metode dibungkus dalam sebuah paket. Adapun pihak luar hanya dapat melihat atribut-atribut dan metode-metode yang diperlukan saja.
Proses enkapsulasi juga sering dikenal dengan istilah data hiding, yaitu menyembunyikan data dari pihak luar. Konsep ini dilakukan dengan tujuan menghindari intervensi pihak luar pada objek yang ada. Konsep ini juga memberikan kemudahan kepada pengguna karena tidak perlu direpotkan berbagai atribut dan perilaku yang tidak relevan ketika berinteraksi dengan sebuah class.
Sebagai contoh, anda mungkin pernah menggunakan setrika untuk menyetrika pakaian. Anda dapat mengatur panas yang dihasilkan dengan mengatur knop pengatur suhu dan menggunakan pelat panas di bagian bawah untuk menyetrika pakaian. Ada banyak perangkat yang ada di dalam setrika, tetapi demi kemudahan, pengguna hanya berinteraksi dengan bagian-bagian tertentu saja. Selain mencegah kerusakan pada setrika karena pengaturan dan intervensi yang tidak tepat, hal ini juga dilakukan untuk kemudahan dan keamanan pengguna. Intervensi ke bagian-bagian tertentu dapat menyebabkan kerusakan perangkat dan membahayakan pengguna.
5. Inheritance
Inheritance adalah konsep menurunkan sebuah class dari class yang sudah ada. Konsep ini memungkinkan sebuah class menggunakan sebagian atau seluruh atribut atau metode yang dimiliki oleh induk dari class yang diturunkan. Dengan menggunakan konsep inheritance, class yang ada dapat dikelompokkan ke dalam kelompok class yang memiliki kesamaan karakteristik dan ditempatkan dalam sebuah class induk. Sebagai contoh, Anda ingin membuat class untuk properti yang dijual. Sebagai class induk, Anda dapat membuat class Properti yang mempunyai atribut No Sertifikat, Lokasi, dan Nama Pemilik. Class Properti tersebut dapat menurunkan atribut ke class lain, seperti class Rumah, Tanah, Ruangan Bisnis, dan Gedung Bisnis. Semua atribut yang ada pada class Properti akan dimiliki class yang lain. Setiap class dapat mempunyai atribut tambahan yang menjadi milik sendiri dari class tersebut.
Konsep inheritance memberikan banyak kemudahan ketika sebuah model diterjemahkan ke dalam bentuk kode program. Inheritance memungkinkan kode-kode program digunakan secara berulang untuk mendefinisikan class yang berbeda. Hal ini akan memudahkan ketika harus melakukan perubahan, pemeliharaan, dan pengembangan program. Jika ada pengembangan program atau perubahan yang ingin dilakukan, pengembangan dan perubahan tersebut hanya perlu dilakukan pada bagian-bagian tertentu saja.
6. Polimorfisme
Polimorfisme berasal dari dua suku kata yang berasal dari bahasa Yunani, yaitu polys yang berarti banyak dan morfis yang berarti bentuk. Polimorfisme dapat diartikan mempunyai banyak bentuk. Sebagai contoh, seekor objek kucing mempunyai perilaku menggoyang-goyangkan ekor, mengeong (senang), mengeong (marah), dan sebagainya. Ketika berinteraksi dengan pemiliknya, objek kucing akan menampilkan perilaku menggoyangkan ekornya dan mengeong (senang). Sebaliknya, jika bertemu dengan orang yang tidak dikenal dan merasa terancam, objek kucing akan berperilaku mengeong (marah). Sebuah objek dapat mempunyai banyak bentuk perilaku (behavior).
Dalam konteks pemrograman, polimorfisme dapat diartikan bahwa sebuah class dapat mempunyai banyak bentuk. Dengan kata lain, sebuah class dapat menampilkan atribut-atribut yang berbeda atau behavior yang berbeda ketika berinteraksi dengan lingkungan atau objek yang lain. Hal tersebut bergantung pada keperluan dari interaksi objek-objek tersebut di dalam program.