BAB II LANDASAN TEORI
2.1
Sistem Perangkat Lunak Sistem secara umum adalah sekumpulan komponen yang menerapkan model
dan fungsionalitas yang dibutuhkan. Komponen-komponen tersebut saling berinteraksi di dalam sistem guna mentransformasi masukan yang diberikan kepada sistem tersebut menjadi keluaran yang berguna dan bernilai bagi aktornya. Perangkat lunak adalah : 1. Perintah (program komputer) yang bila dieksekusi memberikan fungsi dan unjuk kerja seperti yang diinginkan. 2. Struktur data yang memungkinkan program memanipulasi informasi secara proporsional. 3. Dokumen yang menggambarkan operasi dan kegunaan program. Sistem perangkat lunak adalah sekumpulan komponen yang saling berinteraksi berupa perintah (program komputer) dan struktur data guna mentransformasi masukan yang diberikan menjadi keluaran yang berguna bagi penggunanya.
2.2
Rekayasa Perangkat Lunak Usaha yang berhubungan dengan rekayasa perangkat lunak dapat
dikategorikan kedalam 3 fase umum, yaitu: 1. Fase definisi Pada fase ini pengembang perangkat lunak harus mengidentifikasi informasi apa yang akan diproses, fungsi dan unjuk kerja apa yang dibutuhkan, tingkah laku sistem apa yang diharapkan, interface apa yang akan dibangun, batasan desain apa yang ada dan kriteria validasi apa yang dibutuhkan untuk mendefinisikan sistem yang baik.
2. Fase Pengembangan Pada fase ini pengembang perangkat lunak harus mengidentifikasi bagaimana data dikonstruksikan, bagaimana fungsi-fungsi diimplementasikan sebagai sebuah arsitektur perangkat lunak, bagaimana detail prosedur akan diimplementasikan, bagaimana interface akan ditandai (dikarakterisasi), bagaimana rancangan akan diterjemahkan ke dalam bahasa pemrograman serta bagaimana pengujian akan dilakukan. 3. Fase Pemeliharaan Fase ini berfokus pada perubahan yang dihubungkan dengan koreksi kesalahan, penyesuaian yang dibutuhkan ketika lingkungan perangkat lunak berkembang, serta perubahan sehubungan dengan perkembangan yang disebabkan oleh perubahan kebutuhan pelanggan. Ada 4 tipe perubahan yang terjadi selama fase pengembangan, yaitu: a. Koreksi Yaitu perubahan yang terjadi karena adanya cacat atau kerusakan. b. Adaptasi Yaitu pemeliharaan untuk mengakomodasi perubahan pada kebutuhan fungsi original. c. Perkembangan Yaitu perubahan untuk memperluas perangkat lunak sehingga melampaui kebutuhan fungsi originalnya. d. Pencegahan Perubahan ini untuk memungkinkan perangkat lunak melayani kebutuhan para pemakainya sehubungan dengan waktu sehingga menjadi lebih mudah untuk dikoreksi, disesuaikan dan dikembangkan.
2.3
Proses Perangkat Lunak Untuk menyelesaikan masalah aktual di dalam sebuah setting industri,
rekayasa perangkat lunak harus menggabungkan strategi pengembangan yang melingkupi lapisan proses, metode dan alat bantu serta fase-fase generic yang telah diungkapkan pada sub bab (2.2).
Salah satu model proses perancangan perangkat lunak yaitu model sekuensial linier. Model ini sering disebut dengan siklus kehidupan klasik atau model air terjun (waterfall). Model ini mengusulkan sebuah pendekatan kepada perkembangan perangkat lunak yang sistematik dan sekuensial yang mulai pada tingkat dan kemajuan sistem pada seluruh analisis, desain, pengkodean, pengujian dan pemeliharaan.
Gambar 2.1 Model Waterfall.
Model sequensial linier (waterfall) melingkupi aktifitas-aktifitas sebagai berikut : 1.
Rekayasa dan pemodelan sistem / informasi Yaitu aktifitas pengumpulan kebutuhan pada tingkat sistem dengan sejumlah kecil analisis serta desain tingkat puncak, tingkat bisnis strategis dan tingkat area bisnis.
2.
Analisa kebutuhan perangkat lunak Yaitu aktifitas pengumpulan kebutuhan yang diintensifkan dan difokuskan khususnya pada perangkat lunak seperti memahami domain informasi, tingkah laku, unjuk kerja dan interface yang diperlukan.
3.
Desain
Yaitu aktifitas pada empat atribut dalam sebuah program yang berbeda yaitu struktur data, arsitektur perangkat lunak, representasi interface dan detail (algoritma) prosedural. 4.
Pengkodean Yaitu aktifitas menterjemahkan ke dalam bentuk mesin yang bisa dibaca.
5.
Pengujian Yaitu aktifitas pengujian yang berfokus pada logika internal perangkat lunak, memastikan bahwa semua pernyataan sudah diuji dan pada eksternal fungsional yaitu mengarahkan pengujian untuk menemukan kesalahankesalahan dan memastikan bahwa input yang dibatasi akan memberikan hasil aktual yang sesuai dengan hasil yang dibutuhkan.
6.
Pemeliharaan Yaitu aktifitas perubahan yang terjadi karena menyesuaikan dengan perubahan di dalam lingkungan eksternalnya (contoh: perubahan yang dibutuhkan sebagai akibat dari perangkat peripheral atau sistem operasi yang baru) atau karena pelanggan membutuhkan perkembangan fungsional atau unjuk kerja.
2.4
Prinsip Dasar Kriptografi Kriptografi mempunyai tiga komponen yaitu:
1. Plain text: sumber berita/pesan/teks asli. 2. Cipher text: teks yang sudah diproses (diacak, digantikan). 3. Algoritma dan kunci. Kriptografi mempunyai 2 (dua) bagian penting yaitu
enkripsi
dan
dekripsi. Enkripsi adalah proses dari penyandian pesan asli (Plain text) menjadi pesan yang sudah disandikan (Cipher text), sedangkan dekripsi adalah proses kebalikan dari enkripsi yaitu mengubah pesan yang sudah disandikan (Cipher text) menjadi pesan asli (Plain text).
Gambar 2.2 Proses Enkripsi dan Dekripsi Ada 2 (dua) model algoritma enkripsi yang menggunakan kunci, yaitu : 1. Kunci simetrik (Private key) yaitu kunci untuk mengunci dan membuka sama/satu, penggunaan algoritma ini mempunyai masalah dalam distribusi kunci karena pengiriman kunci membutuhkan saluran khusus dan juga jumlah kunci meledak secara eksponensial: n(n-1)/2. Keuntungan dari algoritma ini adalah operasi yang cepat.
Gambar 2.3. Enkripsi-Dekripsi Kunci Simetrik
2. Kunci asimetrik (Public key) yaitu kunci untuk mengunci dan membuka berbeda. Algoritma jenis ini memiliki jumlah kunci yang lebih sedikit dibandingkan
enkripsi
dengan
kunci
privat,
namun
algoritma
ini
membutuhkan komputasi yang tinggi (membutuhkan waktu yang lebih lama) dibandingkan dengan Private key dan juga membutuhkan penyimpanan kunci publik yang terpercaya.
Gambar 2.4 Enkripsi-Dekripsi Kunci Asimetrik
2.5
Tujuan Kriptografi Ilmu-ilmu kriptografi teruslah berkembang. Tujuan-tujuan yang ingin
dicapai dari kriptografi adalah : 1. Privasi, yaitu pihak yang tidak berkepentingan tidak dapat membongkar atau mengetahui tulisan/pesan yang kita kirim. 2. Autentikasi, yaitu penerima pesan dapat meyakinkan dirinya bahwa pesan yang diterima tidak terjadi perubahan dan berasal dari orang yang diinginkan. 3. Tanda tangan (Digital Signature), yaitu penerima pesan dapat meyakinkan pihak ketiga bahwa pesan yang diterima berasal dari orang yang diinginkan. Minimal, yaitu tidak ada yang dapat berkomunikasi dengan pihak lain kecuali berkomunikasi dengan pihak yang diinginkan. Pertukaran bersama, suatu nilai (misalnya tanda tangan sebuah kontrak) tidak akan dikeluarkan sebelum nilai lainnya (misalnya tanda tangan pihak lain) diterima. Koordinasi, di dalam komunikasi dengan banyak pihak, setiap pihak dapat berkoordinasi untuk tujuan yang sama walaupun terdapat kehadiran musuh.
2.6
Fungsi Hash Satu Arah Fungsi hash satu arah merupakan fungsi satu arah (one way function).
Fungsi hash satu arah adalah suatu fungsi dimana kita dengan mudah melakukan enkripsi untuk mendapatkan chipertext-nya tetapi sangat sulit untuk mendapatkan plaintext-nya (melakukan dekripsi). Fungsi hash biasanya digunakan untuk menjamin integritas dan digital signature. MD5 telah dimanfaatkan secara bermacam-macam pada aplikasi keamanan, MD5 juga umum digunakan untuk melakukan pengujian integritas sebuah file. Algoritma MD5 secara garis besar adalah mengambil pesan yang mempunyai panjang variabel diubah menjadi ‘sidik jari’ atau ‘intisari pesan’ yang mempunyai panjang tetap yaitu 128 bit. ‘Sidik jari’ ini tidak dapat dibalik untuk mendapatkan pesan, dengan kata lain tidak ada orang yang dapat melihat pesan dari ‘sidik jari’ MD5.
Fungsi hash satu arah dibuat berdasarkan ide tentang fungsi pemampatan. Fungsi hash adalah sebuah fungsi atau persamaan matematika yang mengambil input dengan panjang variabel (pre image) dan mengubahnya menjadi panjang yang tetap (biasanya lebih pendek), keluarannya biasa disebut nilai hash. Metode fungsi hash satu arah adalah berfungsi melindungi data dari modifikasi. Apabila ingin melindungi data dari modifikasi yang tidak terdeteksi, dapat dihitung hasil fungsi hash dari data tersebut, selanjutnya dapat menghitung hasil fungsi hash lagi dan membandingkannya dengan hasil pertama apabila berbeda maka terjadi perubahan selama pengiriman. Masukan dari fungsi hash satu arah adalah blok pesan dan keluaran dari blok teks atau nilai hash sebelumnya ini dapat dilihat pada gambar 2.5 sehingga secara garis besar, hash dari blok Mi adalah : hi = f(Mi,hi - 1) Nilai hash ini bersama blok pesan berikutnya menjadi masukan berikutnya bagi fungsi pemampatan. Nilai hash keseluruhan adalah nilai hash dari blok paling akhir. Pre-image sedapatnya mengandung beberapa binary yang menggambarkan panjang dari masukan pesan. Teknik ini digunakan untuk mengatasi masalah yang dapat terjadi bila pesan yang berbeda tetapi mempunyai nilai hash yang sama.
Gambar 2.5 Fungsi hash satu arah 2.7
Message Digest 5 (MD5) Message Digest 5 (MD5) adalah salah satu dari serangkaian algoritma
Message Digest yang didesain oleh Professor Ronald Rivest dari MIT. Saat kerja analitik menunjukkan bahwa pendahulu MD5, yaitu MD4 mulai tidak aman, MD5 kemudian di desain sebagai pengganti dari MD4 (kelemahan MD4 ditemukan oleh Hans Dobbertin).
Message Digest 5 (MD5) banyak digunakan pada bermacam-macam aplikasi termasuk SSL/TLS, IPSec dan protocol-protokol kriptografi lainnya. MD5 juga biasa digunakan pada implementasi Time stamping Mechanism, Commitment Schemes, dan aplikasi pengecekan integritas pada online software. MD5 tidak memiliki sistem pengamanan seperti persamaan matematika, namun untuk setiap fungsi hash h, domain D dan range R kita membutuhkan tiga hal berikut : 1. Pre Image Resistance: jika diberi suatu nilai y ε R, maka kita tidak akan dapat mencari suatu nilai x ε D dimana h(x)=y. 2. Second Pre Image Resistance : jika diberi suatu nilai x ε D, maka kita tidak akan dapat mencari nilai x’ ε D dimana h(x)=h(x’). 3. Collision Resistance: kita tidak akan dapat mencari nilai x,x’ ε D dimana h(x)=h(x’).
2.7.1
Prinsip Dasar Message Digest 5 (MD5) Message Digest 5 (MD5) adalah salah satu penggunaan fungsi hash satu
arah yang paling banyak digunakan. MD5 merupakan fungsi hash kelima yang dirancang oleh Ron Rivest dan didefinisikan pada RFC 1321. MD5 merupakan pengembangan dari MD4 dimana terjadi penambahan satu ronde. MD5 memproses teks masukan ke dalam blok-blok bit sebanyak 512 bit, kemudian dibagi ke dalam 32 bit sub blok sebanyak 16 buah. Keluaran dari MD5 berupa 4 buah blok yang masing-masing 32 bit yang mana akan menjadi 128 bit yang biasa disebut nilai hash.
2.7.2
Algoritma Message Digest 5 (MD5)
Gambar 2.6 Algoritma MD5 MD5 terdiri atas 64 operasi, dikelompokkan dalam empat putaran dari 16 operasi. F adalah fungsi nonlinear; satu fungsi digunakan pada tiap-tiap putaran. Mi menujukkan blok 32-bit dari masukan pesan, dan Ki menunjukkan konstanta 32-bit, berbeda untuk tiap-tiap operasi.
<<<s menunjukkan perputaran bit kiri oleh s, s bervariasi untuk tiap-tiap operasi menunjukkan tambahan modulo 232. MD5 memproses variasi panjang pesan ke dalam keluaran 128-bit dengan panjang yang tetap. Pesan masukan dipecah menjadi dua gumpalan blok 512-bit. Pesan ditata sehingga panjang pesan dapat dibagi 512. Penataan bekerja sebagai berikut: bit tunggal pertama 1, diletakkan pada akhir pesan. Proses ini diikuti dengan serangkaian nol (0) yang diperlukan agar panjang pesan lebih dari 64-bit dan kurang dari kelipatan 512. Bit - bit sisa diisi dengan 64-bit integer untuk menunjukkan panjang pesan yang asli. Sebuah pesan selalu ditata setidaknya dengan 1-bit tunggal, seperti jika panjang pesan adalah kelipatan 512 dikurangi 64-bit untuk informasi panjang (panjang mod(512) = 448), sebuah blok baru dari 512-bit ditambahkan dengan 1-bit diikuti dengan 447 bit-bit nol (0) diikuti dengan panjang 64-bit.
Algoritma MD5 yang utama beroperasi pada kondisi 128-bit, dibagi menjadi empat word 32-bit, menunjukkan A,B,C, dan D. Operasi tersebut diinisialisasi dijaga untuk tetap konstan. Register A,B,C dan D diinisialisasi dengan bilangan hexadecimal. word A: 01 23 45 67 word B: 89 AB CD EF word C: FE DC BA 98 word D: 76 54 32 10 Register-register ini biasa disebut dengan nama chain variable atau variabel rantai. Algoritma utama kemudian beroperasi pada masing-masing blok pesan 512-bit,
masing-masing
blok
melakukan
pengubahan
terhadap
kondisi.
Pemrosesan blok pesan terdiri atas empat tahap, batasan putaran, tiap putaran membuat 16 operasi serupa berdasar pada fungsi non-linear
F, tambahan
modular, dan rotasi ke kiri. Gambar 1 (satu) mengilustrasikan satu operasi dalam putaran. Ada empat macam kemungkinan fungsi F, berbeda dari yang digunakan pada tiap-tiap putaran. F(X,Y,Z) = (X G(X,Y,Z) = (X
Y) Z)
H(X,Y,Z) = X
Y
I(X,Y,Z) = Y
(X
,
,
,
(
X (Y
Z) Z)
Z Z)
menunjuknan operasi logika XOR, AND, OR dan NOT.
Berikut dapat dilihat satu buah operasi dari MD5 dengan operasi yang dipakai sebagai contoh adalah FF (a,b,c,d,Mj,s,ti) menunjukkan a = b + ((a + F(b,c,d) + Mj + ti) <<< s) Bila Mj menggambarkan pesan ke-j dari sub blok (dari 0 sampai 15) dan <<< s menggambarkan bit akan digeser ke kiri sebanyak s bit, maka keempat operasi dari masing-masing ronde adalah : FF(a,b,c,d,Mj,s,ti) menunjukan a = b + ((a + F(b,c,d) + Mj + ti) <<< s) . GG(a,b,c,d,Mj,s,ti) menunjukan a = b + ((a + G(b,c,d) + Mj + ti) <<< s) HH(a,b,c,d,Mj,s,ti) menunjukan a = b + ((a + H(b,c,d) + Mj + ti) <<< s) II(a,b,c,d,Mj,s,ti) menunjukan a = b + ((a + I(b,c,d) + Mj + ti) <<< s) Konstanta ti didapat dari integer 232x abs(sin(i)), dimana i dalam radian.
Keluaran dari MD5 adalah 128-bit dari word terendah A dan tertinggi word masing-masing 32-bit.
2.7.3
Hash - Hash Message Digest 5 (MD5) Hash-hash MD5 sepanjang 128-bit (16-byte), yang dikenal juga sebagai
ringkasan pesan, secara tipikal ditampilkan dalam bilangan heksadesimal 32-digit. Berikut ini merupakan contoh pesan ASCII sepanjang 43-byte sebagai masukan dan hash MD5 terkait:MD5 ("The quick brown fox jumps over the lazy dog") = 9e107d9d372bb6826bd81d3542a419d6. Bahkan perubahan yang kecil pada pesan akan (dengan probabilitas lebih) menghasilkan hash yang benar-benar berbeda, misalnya pada kata "dog", huruf d diganti menjadi c: MD5("The
quick
brown
fox
jumps
over
the
lazy
cog")
=
1055d3e698d289f2af8663725127bd4b.
2.8 2.8.1
Jenis Metode Enkripsi Yang Lain Metode Data Encryption Standard (DES) DES (Data Encryption Standard) adalah algoritma chiper blok yang populer
karena dijadikan standard algoritma enkripsi kunci simetri, sebenarnya DES adalah nama standard enkripsi simetri, nama algoritma enkripsinya sendiri adalah DEA (Data Encryption Algorithm), namun nama DES lebih populer dari pada DEA, Algoritma DES dikembangkan di IBM dibawah kepemimpinan W.L Tuchman pada tahun 1972. Algoritma ini didasarkan pada algoritma Lucifer yang dibuat oleh Horst Feistel. DES termasuk ke dalam sistem kriptografi simetri dan tergolong jenis cipher blok. DES beroperasi pada ukuran blok 64 bit. DES mengenkripsikan 64 bit plainteks menjadi 64 bit cipherteks dengan menggunakan 56 bit kunci internal (internal key) atau sub-kunci (subkey). Kunci internal dibangkitkan dari kunci eksternal (external key) yang panjangnya 64 bit. DES memadukan teknik permutasi, ekspansi, kompaksi, dan substitusi, yang semuanya dilakukan dalam 16 kali perulangan. Panjang kunci DES adalah 8 karakter atau 64 bit. Dari 64 bit tersebut, hanya 56 bit saja yang dipakai dalam
proses enkripsi. Namun demikian, hanya dengan 56 bit itu saja akan terdapat 256 atau 72.057.594.037.927.936 kemungkinan kunci. Diandaikan dalam satu detik dapat dicobakan satu juta kemungkinan kunci, maka akan diperlukan waktu 2284 tahun untuk menemukan kunci yang benar. Atas pertimbangan perkembangan teknologi yang semakin maju, dirasakan kunci DES menjadi terlalu pendek bagi keamanan komersial. 2.8.2
Metode Anvanced Encryption Standard (AES) Algoritma AES ini dibuat dengan tujuan untuk menggantikan algoritma
DES yang telah lama digunakan dalam menyandikan data elektronik. Setelah melalui beberapa tahap seleksi, algoritma yang ditemukan oleh Rijndael ini mulai efektif ditetapkan sebagai algoritma kriptografi AES pada tahun 2002. Algoritma AES merupakan algoritma kriptografi simetrik yang beroperasi dalam mode penyandi blok (block cipher) yang memproses blok data 128-bit dengan panjang kunci 128-bit (AES-128), 192-bit (AES-192), atau 256-bit (AES256). Beberapa mode operasi yang dapat diterapkan pada algoritma kriptografi penyandi blok AES di antaranya adalah Electronic Code Book (ECB), Cipher Block Chaining (CBC), Cipher Feedback (CFB), dan Output Feedback (OFB). Implementasi AES dengan mode operasi ECB, CBC, CFB, dan OFB. Keuntungan dari mode OBC ini adalah kemudahan dalam implementasi dan pengurangan resiko salahnya semua plaintext akibat kesalahan pada satu plain text. Namun mode ini memiliki kelemahan pada aspek keamanannya. Dengan mengetahui pasangan plaintext dan cipher text, seorang kriptanalis dapat menyusun suatu code book tanpa perlu mengetahui kuncinya. 2.9
Visual C++ 2005 C++ merupakan bahasa yang dikembangkan berdasarkan bahasa C.
Perbedaannya adalah C++ merupakan pemrograman berorientasi objek (Object Oriented Programming).
2.9.1
Fungsi Dasar
2.9.1.1 Fungsi Main Fungsi main() harus ada pada program, sebab fungsi inilah yang menjadi titik awal dan titik akhir eksekusi program. Tanda { di awal fungsi menyatakan awal tubuh fungsi dan sekaligus awal eksekusi program, sedangkan tanda } di akhir fungsi merupakan akhir tubuh fungsi dan sekaligus adalah akhir eksekusi program. Jika program terdiri atas lebih dari satu fungsi, fungsi main() biasa ditempatkan pada posisi yang paling atas dalam pendefinisian fungsi. Hal ini hanya merupakan kebiasaan. Tujuannya untuk memudahkan pencarian terhadap program utama bagi pemrogram. Jadi bukanlah merupakan suatu keharusan.
2.9.1.2 File Header File header (file yang berekstensi .h) adalah file yang berisi fungsi-fungsi dan telah dikompilasi sebelumnya. Apabila akan menggunakan suatu file header tertentu, maka harus mendaftarkanya melalui directive #include. Bentuk umum #include: #include “namafile” Bentuk pertama (#include
) mengisyaratkan bahwa pencarian file dilakukan pada direktori khusus, yaitu direktori file
include. Sedangkan
bentuk kedua (#include “namafile”) menyatakan bahwa pencarian file dilakukan pertama kali pada direktori aktif tempat program sumber dan seandainya tidak ditemukan pencarian akan dilanjutkan pada direktori lainnya yang sesuai dengan perintah pada sistem operasi.
2.9.1.3 Fungsi printf() atau cout << Fungsi “printf()” atau “cout <<” keduanya sama-sama merupakan fungsi yang umum dipakai untuk menampilkan suatu keluaran pada layar. Apabila mau menggunakan fungsi printf() maka harus menyertakan file header stdio.h diawal program dengan syntax sebagai berikut : “#include stdio.h”.
Apabila mau menggunakan “cout<<” maka harus menyertakan file header iosteam.h diawal program dengan syntax sebagai berikut : “#include iostream.h”. atau “#include iostream”
2.9.1.4 Fungsi scanf() atau cin >> Fungsi “scanf()” atau “cint >>” keduanya sama-sama merupakan fungsi yang umum dipakai untuk menerima masukan. Apabila mau menggunakan fungsi scanf() maka harus menyertakan file header stdio.h diawal program dengan syntax sebagai berikut : “#include stdio.h”. Apabila mau menggunakan “cin>>” maka harus menyertakan file header iosteam.h diawal program dengan syntax sebagai berikut : “#include iostream.h”. atau “#include iostream”
2.9.1.5 Komentar Dalam Program Untuk keperluan dokumentasi dengan maksud agar program mudah dipahami di suatu saat lain, biasanya pada program disertakan komentar atau keterangan mengenai program. Dalam C, suatu komentar ditulis dengan diawali dengan tanda /* dan diakhiri dengan tanda */.
2.9.2
Pemrograman Berorientasi Objek Dalam Visual C++ Karakteristik
dari
pemrograman
beorientasi
objek
adalah
yaitu
Encapsulation, Inheritance, dan Polymorphism.
2.9.2.1 Encapsulation Encapsulation adalah Penggabungan data dan method ke dalam suatu class. Salah satu keistimewaan C++ adalah pengkapsulan. Pengkapsulan adalah mengkombinasikan suatu struktur dengan fungsi yang memanipulasinya untuk membentuk tipe data baru yaitu kelas(class). Kelas akan menutup rapat baik data
maupun kode. Akses item di dalam kelas dikendalikan. Pengendalian ini tidak hanya berupa data tetapi juga kode. Saat kelas akan digunakan, kelas harus sudah dideklarasikan. Yang penting, pemakai kelas mengetahui deskripsi kelas, tetapi bukan implementasinya. Bagi pemakai, detail internal kelas tidak penting. Konsep ini disebut penyembunyian informasi (information hiding).
2.9.2.2 Inheritance Inheritance adalah Pewarisan sifat dari class induk kepada class anaknya. Suatu kelas dapat diciptakan berdasarkan kelas lain. Kelas baru ini mempunyai sifat-sifat yang sama dengan kelas pembentuknya, ditambah sifat-sifat khusus lainnya. Dengan pewarisan kita dapat menciptakan kelas baru yang mempunyai sifat sama dengan kelas lain tanpa harus menulis ulang bagian-bagian yang sama. Pewarisan merupakan unsur penting dalam pemrograman berorientasi objek dan merupakan blok bangunan dasar pertama penggunaan kode ulang (code reuse). Sifat pewarisan ini menyebabkan kelas-kelas dalam pemrograman berorientasi objek membentuk hirarki kelas mulai dari kelas dasar, kelas turunan pertama, kelas turunan kedua dan seterusnya. Sebagai gambaran misalnya ada hirarki kelas unggas.
2.9.2.3 Polymorfisme Polymorfisme adalah Objek dari sebuah class dapat memiliki implementasi yang berbeda-beda. Polimorfisme merupakan fitur pemrograman berorientasi objek yang penting setelah pengkapsulan dan pewarisan. Polimorfisme berasal dari bahasa Yunani, poly(banyak) dan morphos
(bentuk). Polimorfisme
menggambarkan kemampuan kode C++ berperilaku berbeda tergantung situasi pada waktu run (program berjalan). Konstruksi ini memungkinkan untuk mengadakan ikatan dinamis (juga disebut ikatan tunda, atau ikatan akhir). Kalau fungsi-fungsi dari suatu kelas dasar didefinisikan ulang atau ditindih pada kelas turunan, maka objek-objek yang dihasilkan hirarki kelas berupa objek polimorfik. Polimorfik artinya mempunyai banyak bentuk atau punya kemampuan untuk mendefinisi banyak bentuk.
2.9.2.4 Struktur Dan Class Dalam C++, tipe data struktur yang dideklarasikan dengan kata kunci struct, dapat mempunyai komponen dengan sembarang tipe data, baik tipe data dasar maupun tipe data turunan, termasuk fungsi. Dengan kemampuan ini, tipe data struktur menjadi sangat berdaya guna. Tipe data kelas didefinisikan dengan kata kunci (keyword) class, yang merupakan generalisasi dari pernyataan struct. Pernyataan struct secara umum digantikan dengan pernyataan class. Jika objek kotak dideklarasikan dalam bentuk kelas, maka deklarasinya mirip dengan struktur. Kelas pada C++ menawarkan tiga aras kenampakan anggota kelas (baik anggota data maupun fungsi anggota): 1. Private Anggota kelas private mempunyai kendali akses yang paling ketat. Dalam bagian private, hanya fungsi anggota dari kelas itu yang dapat mengakses anggota private atau kelas yang dideklarasikan sebagai teman (friend). 2. Public Dalam bagian public, anggotanya dapat diakses oleh fungsi anggota kelas itu sendiri, instance kelas, fungsi anggota kelas turunan. Suatu kelas agar bisa diakses dari luar kelas, misalnya dalam fungsi main(), perlu mempunyai hak akses publik. Hak akses ini yang biasanya digunakan sebagai perantara antara kelas dengan dunia luar. 3. Protected Suatu kelas dapat dibuat berdasarkan kelas lain. Kelas baru ini mewarisi sifatsifat dari kelas dasarnya. Dengan cara ini bisa dibentuk kelas turunan dari beberapa tingkat kelas dasar. Bila pada kelas dasar mempunyai anggota dengan hak akses terproteksi, maka anggota kelas ini akan dapat juga diakses oleh kelas turunannya. Anggota kelas terproteksi dibentuk dengan didahului kata kunci protected. Pada bagian protected, hanya fungsi anggota dari kelas dan kelas-kelas turunannya yang dapat mengakses anggota.
2.10
Pengujian
Pengujian adalah proses eksekusi suatu program dengan maksud menemukan kesalahan. Pengujian yang baik adalah yang memiliki probabilitas tinggi untuk menemukan kesalahan yang belum pernah ditemukan sebelumnya. Pengujian yang sukses adalah yang mengungkap semua kesalahan yang belum pernah ditemukan sebelumnya. Semua produk rekayasa perangkat lunak dapat diuji dengan satu atau dua cara yaitu: 1. Pengujian Black Box Dengan mengetahui fungsi yang ditentukan dimana produk rekayasa perangkat lunak dirancang untuk melakukannya. Pengujian ini dilakukan dengan mencari kesalahan pada tiap fungsi. Pengujian dapat dilakukan untuk memperlihatkan bahwa masing-masing fungsi beroperasi sepenuhnya pada waktu yang sama. 2. Pengujian white-box berfokus pada struktur control program. Test case dilakukan untuk memastikan bahwa semua statemen pada program telah dieksekusi paling tidak satu kali selama pengujian dan bahwa semua kondisi logis telah diuji. Pengujian black box berusaha menemukan kesalahan dalam kategori: 1. Fungsi – fungsi yang tidak benar atau hilang. 2. Kesalahan Interface. 3. Kesalahan dalam struktur data atau akses database dan eksternal. 4. Kesalahan kinerja. 5. Kesalahan initialisasi dan kesalahan terminasi.