BAGIAN I
PENDAHULUAN
1.1 Pengertian Dasar
Ada beberapa pengertian dasar yang harus diingat dan dipahami kembali sebelum
kita belajar pemrograman. Berikut adalah penjelasan singkat untuk pengertian-
pengertian dasar tersebut.
A. Program
o Kumpulan instruksi dan pernyataan yang mengikuti sistematika dan logika
tertentu untuk mencapai tujuan tertentu
o Jadwal atau rencana yang menentukan/menetapkan aksi atau tindakan apa
yang harus dilaksanakan [IEEE]
o Deretan instruksi yang disusun untuk diproses oleh komputer [ISO]
B. Pembuatan Program
o Proses menerjemahkan bahasa manusia (keinginan manusia) menjadi
pemrograman (program)
o Proses memahami permasalahan, analisis dan sintesis yang dinyatakan
dengan suatu kode dalam bahasa pemrograman tertentu secara sistematis
dan metodologis
C. Bahasa Pemrograman
o Bahasa buatan yang dirancang untkuk membuat atau menyatakan program
[ISO]
o Media komunikasi antara pembuat program dengan komputer
D. Belajar Pemrograman dan Belajar Bahasa Pemrograman
o Belajar pemrograman adalah belajar tentang strategi dan sistematika
pemecahan masalah untuk kemudian dituangkan dalam statu notasi yang
disepakati bersama, yaitu bahasa pemrograman
o Belajar bahasa pemrograman adalah belajar memakai suatu bahasa, aturan
tata bahasa dan instruksi-instruksinya untuk membuat atau menulis program
yang akan ditulis dalam bahasa itu
//compiler directive
#include <stdio.h>
#include <conio.h>
//Program Utama
void main()
{
clrscr();
Baca_Data();
printf(\nLuas : %d, Luas());
printf(\nKeliling : %d, Keliling());
getch();
}
Program Prosedural
Bentuk I
#include <stdio.h>
void main()
{
int p, l, ls;
clrscr();
printf(\nPanjang : ); scanf(%d, &p);
printf(\nLebar : ); scanf(%d, &l);
ls=p*l;
printf(\nLuas : %d, ls);
getch();
}
Bentuk II
//compiler directive
#include <stdio.h>
#include <conio.h>
//Program Utama
void main()
{
clrscr();
Baca_Data();
printf(\nLuas : %d, Luas());
getch();
}
Pemrograman Objek
#include <stdio.h>
#include <conio.h>
class SegiEmpat {
public:
//deklarasi atribut
int panjang, lebar;
//deklarasi layanan
void BacaData(){
printf(Panjang : );scanf(%d, &panjang);
printf(Lebar : );scanf(%d, &lebar);
};
int HitungLuas(){
return panjang*lebar ;
};
};
//program utama
void main()
{
//ciptakan objek
SegiEmpat S4;
clrscr();
printf(Segi Empat \n);
s4.BacaData();
print(Luas : %d \n, s4.HitungLuas());
BAGIAN II
BAHASA PEMROGRAMAN OBJEK
#prepocessor directive
main()
{
// Batang Tubuh Program Utama
}
Melihat bentuk seperti itu dapat kita ambil kesimpulan bahwa batang tubuh
program utama berada didalam fungsi main(). Berarti dalam setiap pembuatan
program utama, maka dapat dipastikan seorang pemrogram menggunakan minimal
sebuah fungsi. Pembahasan lebih lanjut mengenai fungsi akan diterangkan
kemudian. Yang sekarang coba ditekankan adalah kita menuliskan program utama
kita didalam sebuah fungsi main(). Jangan lupa bahwa C++ bersifat case sensitive,
sehingga, nama hallo dan Hallo berbeda artinya.
Semicolon
Tanda semicolon ; digunakan untuk mengakhiri sebuah pernyataan. Setiap
pernyataan harus diakhiri dengan sebuah tanda semicolon. Baris yang diawali
dengan tanda #, seperti
#include <iostream.h>
tidak diakhiri dengan tanda semicolon, karena bentuk tersebut bukanlah suatu
bentuk pernyataan, tetapi merupakan prepocessor directive
Contoh :
#include <iostream.h>
main()
{
char nama[100]; //Dekalarasi variable nama
cout<<Masukkan nama Anda : ;
cin>>nama;
//Meminta user untuk menginisialisasi variable nama
cout<<Nama anda adalah <<nama;
return 0;
}
Panjang String
Contoh :
#include <iostream.h>
#include <string.h>
main()
{
cout<<strlen("Selamat Pagi.\n")<<endl;
cout<<strlen("Selamat Pagi.")<<endl;
cout<<strlen("Selamat")<<endl;
cout<<strlen("S")<<endl;
cout<<strlen("");
return 0;
}
Keluarannya:
14
13
7
1
0
Perhatikan, bahwa disetiap akhir baris pernyataan diakhiri dengan tanda titik koma
(semicolon) ; .
Perhatikan, bahwa \n dihitung satu karakter. \n disebut newline karakter. Endl juga
merupakan newline karakter ( sama kegunaannya seperti \n ).
Dalam C++, selain \n terdapat juga beberapa karakter khusus yang biasa dsebut
escape sequence characters, yaitu
Karakter Keterangan
\0 Karakteeer ber-ASCII nol ( karakter null )
\a Karakter bell
\b Karakter backspace
\f Karakter ganti halaman ( formfeed )
\n Karakter baris baru ( newline )
\r Karakter carriage return ( ke awal baris )
\t Karakter tab horizontal
\v Karakter tab vertika
\\ Karakter \
\ Karakter
\ Karakter
\? Karakter ?
\ooo Karakter yang nilai oktalnya adalah ooo ( 3 digit octal )
\xhh Karakter yang nilai heksadesimalnya adalah hh (2 digit
heksadesimal )
Contoh :
#include <iostream.h>
main()
{
int n=66;
cout<<n<<endl; // n sebagai variabel
return 0;
}
Keluarannya:
66
Yang akan diolah terlebih dahulu adalah ekspresi, baru hasilnya dimasukkan
kedalam variable
Tanda = adalah operator penugasan.
Contoh :
#include <iostream.h>
main()
{
int n;
n=66; // sama juga jika ditulis int n=66;
cout<<n<<endl; // n sebagai variabel
cout<<n<<endl; // end sebagai karakter
return 0;
}
Keluarannya :
66
n
Deklarasi dari suatu variable adalah sebuah pernyataan yang memberikan informasi
tentang variable kepada compiler C++. Sintaksnya adalah
type variable ;
dengan type adalah tipe data yang didukung oleh C++, beberapa contohnya yaitu:
#include <iostream.h>
main()
{
int n;
cout<<n<<endl; // n sebagai variabel
return 0;
}
Keluarannya:
18125
2.3.6 Konstanta
1. Konstanta Oktal, digit yang digunakan 0-7
2. Konstanta Heksadesimal, digit yang digunakan 0-9, A-F
3. Konstanta Bernama
a. Menggunakan keyword const
Contoh : const float PI = 3.14152965;
Berbeda dengan variable, konstanta bernama tidak dapat diubah
jika telah diinisialisasi
b. Menggunakan #define
Contoh : #define PI 3.14152965
Keuntungan menggunakan #define apabila dibandingkan dengan const
adalah kecepatan kompilasi, karena sebelum kompilasi dilaksanakan,
kompiler pertama kali mencari symbol #define ( oleh sebab itu mengapa #
dikatakan prepocessor directive ) dan mengganti semua PI dengan nilai
3.14152965.
2.4. Operator
Operator adalah symbol yang biasa dilibatkan dalam program untuk melakukan
sesuatu operasi atau manipulasi.
Contoh : a = b + c * d / 4
a, b, c, d disebut operand
=, +, *, / disebut operator
Contoh :
#include <iostream.h>
void main()
{
int m = 82, n = 26;
cout<<m<<" + "<<n<<" = "<<m+n<<endl;
cout<<m<<" - "<<n<<" = "<<m-n<<endl;
cout<<m<<" * "<<n<<" = "<<m*n<<endl;
cout<<m<<" / "<<n<<" = "<<m/n<<endl;
cout<<m<<" % "<<n<<" = "<<m%n<<endl;
cout<<"-"<<m<<" = "<<-m<<endl;
}
Keluarannya :
82 + 26 = 108
82 - 26 = 56
82 * 26 = 2132
82 / 26 = 3
82 % 26 = 4
-82 = -82
Karena tipe datanya adalah int, maka 82/26=3, supaya dapat merepresentasikan
nilai yang sebenarnya, gunakan tipe data float.
Contoh :
#include <iostream.h>
main()
{
int m = 44, n = 66;
cout<<m = <<m<<, n = <<n<<endl;
++m; --n;
cout<<m = <<m<<, n = <<n<<endl;
m++; n--;
cout<<m = <<m<<, n = <<n<<endl;
return 0;
}
Keluarannya :
m = 44, n = 66
m = 45, n = 65
m = 46, n = 64
Contoh :
#include <iostream.h>
main()
{
int m = 66, n ;
n = ++m;
cout<<"m = "<<m<<", n = "<<n<<endl;
n = m++;
cout<<"m = "<<m<<", n = "<<n<<endl;
cout<<"m = "<<m++<<endl;
cout<<"m = "<<m<<endl;
cout<<"m = "<<++m<<endl;
return 0;
}
Pemrograman Berorientasi Objek I 10
Universitas Informatika dan Bisnis Indonesia
Keluarannya :
m = 67, n = 67
m = 68, n = 67
m = 68
m = 69
m = 70
Penjelasan :
Dalam penugasan yang pertama, m adalah pre-increment, menaikkan nilainya
menjadi 67, yang selanjutnya dimasukkan ke n.
Dalam penugasan kedua, m adalah post-increment, sehingga 67 dimasukkan dahulu
ke n baru kemudian nilai m-nya dinaikkan, itu sebabnya mengapa nilai m = 68 dan n
= 67.
Dalam penugasan ketiga, m adalah post-increment, sehingga nilai m ( = 68 )
ditampilkan dahulu ( ke layar ) baru kemudian nilai m dinaikkan menjadi 69.
Dalam penugasan keempat, m adalah pre-increment, sehingga nilai m dinaikkan
dahulu menjadi 70 baru kemudian ditampilkan ke layar.
Supaya lebih paham, perhatikan pula contoh dibawah.
Contoh :
AND OR
A B P A B P
0 0 0 0 0 0
0 1 0 0 1 1
1 0 0 1 0 1
1 1 1 1 1 1
XOR
A B P
0 0 0
0 1 1
1 0 1
1 1 0
Contoh :
#include <iostream.h>
void main()
{
int m = 82, n = 26;
cout<<m<<" << 2"<<" = "<<(m<<2)<<endl;
cout<<m<<" >> 2"<<" = "<<(m>>2)<<endl;
cout<<m<<" & "<<n<<" = "<<(m&n)<<endl;
cout<<m<<" | "<<n<<" = "<<(m|n)<<endl;
cout<<m<<" ^ "<<n<<" = "<<(m^n)<<endl;
cout<<"~"<<m<<" = "<<~m<<endl;
}
Keluarannya :
82 << 2 = 328
82 >> 2 = 20
82 & 26 = 18
82 | 26 = 90
82 ^ 26 = 72
~82 = 83
Penjelasan :
Nilai keluaran diatas, tergantung dari jenis compiler yang digunakan. Hasil diatas
merupakan keluaran dari compiler Turbo C++.
Pada Turbo C++ besar dari integer adalah 2 byte atau sama dengan 16 bit, untuk
mengetahuinya digunakan perintah
cout<<sizeof(int)<<endl; // Untuk mengetahui besar dari int
Maka :
8210 = 00000000010100102 dan
2610 = 00000000000110102
Sehingga :
82 << 2 00000001010010002 = 32810
82 >> 2 00000000000101002 = 2010
82 & 26 00000000010100102
00000000000110102
------------------------------------------ &
00000000000100102 = 1810
dan begitu juga untuk operasi OR dan XOR.
~82 digunakan 2s complement, yaitu
8210 = 00000000010100102 lalu dinegasikan tiap bitnya menjadi
11111111101011012 kemudian LSB ditambah 1 menjadi
1111111110101110 = 6545410 nilai ini melebihi jangkauan
maksimum int yang berkisar di -32768 sampai 32767, sehingga nilai yang keluar
yaitu 83.
m=m&n m &= n
m=m|n m |= n
m=m^n m ^= n
Contoh:
#include <iostream.h>
main()
{
int m = 5, n =7;
if(m == n) cout<<m<< sama dengan <<n<<endl;
else if(m != n) cout<<m<< tidak sama dengan <<n<<endl;
else if(m > n) cout<<m<< lebih besar dari <<n<<endl;
else if(m < n) cout<<m<< lebih kecil dari <<n<<endl;
return 0;
}
Keluarannya :
5 lebih kecil dari 7
Contoh :
#include <iostream.h>
void main()
{
int m = 166;
cout<<(m>=0 && m<=150) <<(m>=0 && m<=150)<<endl;
cout<<(m>=0 || m<=150) <<(m>=0 || m<=150)<<endl;
}
Keluarannya :
(m>=0 && m<=150) 0
(m>=0 || m<=150) 1
Penjelasan :
Hasil / keluaran dari operator logika adalah 0 dan 1.
0 jika keluarannya salah dan 1 jika keluarannya benar.
Contoh :
#include <iostream.h>
main()
{
int m = 26, n = 82;
int min = m < n ? m : n;
cout<<Bilangan terkecil adalah <<min<<endl;
return 0;
}
Keluarannya :
Bilangan terkecil adalah 26
Operator relasi, logika dan kondisi akan banyak digunakan pada pernyataan
berkondisi
if(kondisi)
{
pernyataan1;
pernyataan1a;
pernyataan1b;
}
else
{
pernyataan2;
pernyataan2a;
pernyataan2b;
}
Contoh :
#include <iostream.h>
void main() Selain
{ dari if
int m = 166; else,
if(m == 0)cout<<Nilainya sama dengan nol\n; juga
else dikenal
{ bentuk
cout<<Nilainya tidak sama dengan nol\n;
if
cout<<Nilainya sama dengan <<m<<endl;
else if.
}
Adapun
}
perbedaannya diilustrasikan oleh dua contoh dibawah ini.
Contoh 1 :
#include <iostream.h>
void main()
{
int m = 166;
if(m > 1000) cout<<m<< lebih besar dari 1000\n;
if(m > 100) cout<<m<< lebih besar dari 100\n;
if(m > 10) cout<<m<< lebih besar dari 10\n;
}
Keluarannya :
166 lebih besar dari 100
166 lebih besar dari 10
Contoh 2 :
#include <iostream.h>
void main()
{
int m = 166;
if(m > 1000) cout<<m<< lebih besar dari 1000\n;
else if(m > 100) cout<<m<< lebih besar dari 100\n;
else if(m > 10) cout<<m<< lebih besar dari 10\n;
}
Keluarannya :
166 lebih besar dari 100
Mengapa ? Karena contoh 2 sama saja jika ditulis seperti dibawah ini
#include <iostream.h>
void main()
{
int m = 166;
if(m > 1000) cout<<m<<" lebih besar dari 1000\n";
else
{
if(m > 100) cout<<m<<" lebih besar dari 100\n";
else if(m > 10) cout<<m<<" lebih besar dari 10\n";
}
}
switch(ekspresi)
{
case konstanta1 : pernyataan1;
case konstanta2 : pernyataan2;
case konstanta3 : pernyataan3;
:
:
case konstantaN : pernyataanN;
default : pernyataanlain;
}
Contoh :
Keluaran :
Masukkan nilai test : 45
D
Masukkan nilai test : 450
Salah, nilai diluar jangkauan.
Masukkan nilai test : nilai_test
Salah, nilai diluar jangkauan.
Ket : 45, 450 dan nilai_test adalah hasil input dari user
Bentuk :
While(kondisi)
{
pernyataan
}
Contoh:
#include <conio.h>
#include <iostream.h>
#define TINGGI 5
#define LEBAR 10
// Program menggambarkan karakter khusus pada sebuah
// koordinat yang ditentukan
void main()
{
char matrix[TINGGI][LEBAR];
int x,y;
for(y=0;y<TINGGI;y++)
for(x=0;x<LEBAR;x++)matrix[y][x]='.';
cout<<"Ketik koordinat dalam bentuk x y(4 2).\n";
cout<<"Gunakan bilangan negatif untuk berhenti.\n";
Penjelasan :
Program ini adalah program menggambar karakter [] jika dicompile di
Turbo C++ atau mengambar jika dicompile di Borland C++. ( ditunjukkan
oleh karakter xBO ).
Karena adanya pernyataan while(x>=0 && y>=0), maka program
akan langsung mengeksekusi pernyataan
cout<<"Koordinat : ";
cin>>x>>y;
matrix[y-1][x-1]='\xBO';
jika user memasukkan bilangan negatif.
Pada program diatas terdapat fungsi getch(). Gunanya adalah untuk
memberhentikan keluaran program sampai user menekan tombol
keyboard. Untuk menggunakannya, file conio.h harus diinclude.
Bentuk :
do{
pernyataan;
} while(kondisi);
Contoh :
#include <iostream.h>
#include <conio.h>
#include <math.h>
// Program konversi bilangan desimal ke biner
void main()
{
int p,n,i=0;
cout<<"Masukkan bilangan desimal : ";
cin>>p;
double A[100];
do
{
A[++i]=p%2;
p=p/2;
floor(p);
} while (p>1);
cout<<"Nilai binernya : ";
cout<<p;
for(n=i;n>=1;n--)
{
cout<<A[n];
}
getch();
}
Penjelasan :
Coba anda masukkan bilangan negatif.
Itulah letak kesalahan program ini ( sekaligus untuk menunjukkan sifat dari do
while )
Jika anda memasukkan bilangan positif, maka program ini akan menghasilkan
nilai biner yang bersesuaian dengan nilai desimal yang anda masukkan.
Bentuk :
for( inisialisasi ; kondisi ; perubahan)
{
pernyataan;
}
Contoh :
//Program mencetak angka 1-100
#include <iostream.h>
void main()
{
for(int x=1 ; x<=100 ; x++) cout<<x<<endl;
}
#include <iostream.h>
void main()
{
for(int x=1 ; ;x++) cout<<x<<endl;
}
Pernyataan for dapat berada di dalam pernyataan for lainnya yang biasa
disebut nested for
Contoh :
// Program menghasilkan segitiga pascal
#include <iomanip.h>
#include <conio.h>
#include <iostream.h>
main()
{
unsigned int n,a,b,x,s[100],p[100];
cout<<"Masukkan nilai n: "; cin>>n;
for(a=0,x=0;a<=n;a++,x+=2)
{
cout<<setw(3*n-x);
s[a]=1;
p[a]=1;
for(b=0;b<=a;b++)
{
if (b<1||b==a) cout<<"1"<<setw(4);
else
{
s[b]=p[b];
p[b]=s[b-1]+s[b];
cout<<p[b]<<setw(4);
}
cout<<endl;
}
getch();
return 0;
Pernyataan continue digunakan untuk pergi ke bagian awal dari blok loop untuk
memulai iterasi berikutnya.
Contoh :
#include <iostream.h>
void main()
{
int n;
for(;;)
{
cout<<Masukkan bilangan integer : ; cin>>n;
if(n % 2 == 0) continue;
else if(n % 5 == 0) break;
cout<<\tLanjutkan loop berikutnya.\n;
}
cout<<Akhiri Loop.\n;
}
Keluarannya :
Masukkan bilangan integer : 9
Lanjutkan loop berikutnya
Masukkan bilangan integer : 8
Masukkan bilangan integer : 5
Akhiri Loop
2.6. FUNGSI
Fungsi adalah sekumpullan perintah operasi program yang dapat menerima
argumen input dan dapat memberikan hasil output yang dapat berupa nilai ataupun
sebuah hasil operasi.
Nama fungis yang didefinisikan sendiri oleh pemrogram tidak boleh sama
dengan nama build-in function pada compiler C++.
Fungsi digunakan agar pemrogram dapat menghindari penulisan bagian
program ( kode ) berulang-ulang, dapat menyusun kode program agar terlihat lebih
rapi dan kemudahan dalam debugging program.
Contoh :
// Fungsi kuadrat
// tipe_return nama_fungsi (tipe_argument argumen)
float kuadrat ( float x )
{
return x*x;
}
Fungsi yang didefinisikan oleh pemrogram terdiri atas dua bagian, yaitu judul (
header ) dan isi ( body ). Judul dari sebuah fungsi terdiri dari tipe return ( float ),
nama fungsi ( kuadrat ) dan list parameter ( float x ).
Isi dari sebuah fungsi adalah blok kode yang mengikuti judulnya. Berisi kode
yang menjalankan aksi dari fungsi, termasuk pernyataan return yang memuat nilai
fungsi yang akan dikembalikan ke yang memanggilnya, Isi dari fungsi kuadrat()
adalah
{
return x*x;
}
Biasanya isi dari fungsi cukup besar. Meskipun demikian, judulnya tetap hanya
berada dalam satu baris. Isi dari sebuah fungsi dapat memanggil fungsi itu sendiri
( disebut rekursif ) atau memanggil fungsi lainnya.
Pernyataan return dari sebuah fungsi mempunyai dua manfaat, yaitu akan
mengakhiri fungsi dan mengembalikan nilainya ke program pemanggil. Bentuk
umum pernyataan return adalah :
return ekspresi;
Dengan ekspresi adalah sebuah ekspresi yang nilainya dinyatakan untuk sebuah
variable yang tipenya sama seperti tipe return. Terdapat juga fungsi yang tidak
memberikan nilai return atau tipe returnnya void.
Contoh :
#include <iostream.h>
void sayHello(char[]) ; // deklarasi fungsi sayHello()
void main()
{
char n[50];
cout<<"Masukkan nama anda : "; cin>>n;
sayHello(n);
}
Contoh :
// Penggunaan Fungsi Rekursif :
// Program mengecek sebuah bilangan integer atau bukan
#include <iostream.h>
#include <conio.h>
#include <math.h>
void cekInt(double);
void main()
{
double angka;
cout<<"Masukan sebuah angka :";cin>>angka;
cekInt(angka);
}
void cekInt(double n)
{
if(n>1)cekInt(n-1);
else if(n<1)cekInt(-n-1);
else
{
if(n>0&&n<1)cout<<n<<"\t Bukan bilangan bulat\n";
else cout<<n<<"\t Bilangan bulat\n";
}
}
Keluaran :
Masukkan sebuah angka : 57
Bilangan bulat
Masukkan sebuah angka : 0.57
Bukan bilangan bulat
Masukkan sebuah angka : -24
Bilangan bulat
Contoh :
#include <iostream.h>
#include <conio.h>
void sayHello(int);
void main()
{
sayHello();
}
Penjelasan :
Jika pada program, argumen sayHello tidak diberikan, maka program akan
menampilkan
Halloo
Sebanyak satu kali, namun jika argumen pada fungsi sayHello diberikan, misalkan
sayHello(4), maka program akan menampilkan
Halloo
Halloo
Halloo
Halloo
Misalkan :
Fungsi fungsi matematika, anda harus meng-include file math.h
Fungsi fungsi pengolah string dan karakter, anda harus meng-include file
string.h
Fungsi clrscr(), getch(), getche() dalam file conio.h
BAGIAN III
KONSEP PEMROGRAMAN OBJEK
Merupakan tingkatan paling lanjut dimana OOP akan memodelkan objek aktif
secara konkuren (ada beberapa objek yang diaktifkan pada saat yang sama
berbarengan dengan atau tanpa komunikasi diantaranya)
3.4.1 Objek
- Objek adalah abstarksi dari sesuatu yang mewakili dunia nyata seperti
benda, manusia, satuan organisasi, tempat, kejadian, struktur, status atau
hal-hal lain yang bersifat abstrak.
- Dalam konteks OOP, objek adalah instanisasi (yang dibentuk secara
seketika) dari kelas pada saat dieksekusi (seperti halnya deklarasi variabel
pada pemrogramn prosedural). Jadi semua objek adalah instan dari kelas.
- Objek adalah elemen yang akan diciptakan, dimanipulasi, dan dihancurkan
pada saat eksekusi. Jadi memrogram objek tidak lain adalah menciptakan,
memanipulasi dan menghancurkan objek.
3.4.2 Kelas
- Merupakan kumpulan dari objek-objek dengan karakteristik yang sama.
- Kelas adalah definisi statik dari himpunan objek yang sama yang mungkin
lahir atau diciptakan dari kelas tersebut.
- Suatu kelas dapat diturunkan dari kelas lain dimana atribut dari kelas semula
dapat diwariskan ke kelas yang baru.
Jadi pada saat eksekusi, yang kita punyai adalah objek semntara di dalam teks
program, yang kita lihat adalah kelas.
BAGIAN IV
PEMROGRAMAN OBJEK DENGAN ADT
4.1 Pengertian
o Merupakan pemrograman objek yang paling sederhana
o Program disusun dari objek-objek yang berdiri sendiri, tidak saling
berkomunikasi
o Struktur atau skema program menyerupai program yang menggunakan ADT
(Abstract Data Type), tetapi deklarasi data (atribut) dan prosedur serta
fungsinya (layanan, metode) dienkapsulasi sebagai satu kesatuan menjadi
objek-objek.
o ADT adalah suatu model matematika dan sekumpulan operasi yang
didefinisikan terhadap model tersebut.
o Dalam konteks pemrograman objek, ADT adalah definisi suatu kelas.
class namakelas {
private:
type identifier;
...
protected:
type identifier;
...
public:
type identifier;
...
} [namaobjek];
Keterangan:
o namakelas adalah nama kelas yang diciptakan
o type menyatakan jenis data anggota kelas, dapat berupa jenis data
standar, bentukan, atau berupa kelas yang lain.
o identifier menyatakan nama anggota kelas, dapat berupa data atau fungsi
dan sering disebut sebagai data kelas atau fungsi anggota.
o namaobjek menyatakan nama objek yang diciptakan dari kelas
namakelas, bersifat optimal.
o Data dan fungsi yang dideklarasikan di bagian private hanya dapat diakses
oleh fungsi anggota, protected oleh fungsi anggota dan fungsi turunannya,
sementara public oleh fungsi anggota, fungsi kelas turunan, dan fungsi dari
luar kelas. Jika tidak dinyatakan, maka data dan fungsi akan dianggap
dideklarasikan secara private (default).
o Biasanya data didefinisikan di bagian private, sehingga untuk mengaksesnya
digunakan fungsi anggota yang didefinisikan secara public.
o Definisi fungsi dapat dilakukan di dalam kelas atau di luar kelas.
Contoh :
// definisi kelas kotak
class Kotak {
private:
// deklarasi atribut
float panjang, lebar;
public:
atau
float Kotak::Keliling() {
return (2*(panjang+lebar));
};
Kotak() {
cout << Objek diciptakan... << endl;
panjang = lebal = 0;
};
~Kotak () {
cout << Objek dimusnahkan .... << endl;
};
#include <iostream.h>
#include <conio.h>
// definisi kelas kotak
class Kotak {
// deklarasi atribut
float panjang, lebar;
public:
//konstruktor dan destruktor
Kotak();
Kotak(float,float);
~Kotak();
//deklarasi layanan
void AssignKotak(float, float);
float Luas();
float Keliling();
};
Kotak::Kotak(float p, float l) {
cout << "Objek diciptakan ..." <<endl;
panjang = p;
lebar = l;
};
Kotak::~Kotak(){
cout << "Objek dimusnahkan ..." <<endl;
};
float Kotak::Luas() {
return (panjang*lebar);
};
float Kotak::Keliling() {
return (2*(panjang+lebar));
};
//Program utama
void main() {
//ciptakan objek kotak K1 dan K2
Kotak K1, K2(17, 8);
float pj, lb;
cout<<"\nKotak K2:"<<endl;
cout<<"Luas = "<< K2.Luas()<<endl;
cout<<"Keliling = "<< K2.Keliling()<<endl;
getch();
}
Contoh 4.2:
Program ADT untuk kelas clock yang dibuat dalam beberapa file. Buka editor
baru dalam C++ dan tuliskan kode program berikut. Simpan dalam sebuah file
clock.h
/* =============================================================/
/ Nama File : clock.h /
/ Deskripsi : deklarasi kelas Clock yang berada di file /
/ yang berbeda /
/ Dibuat Oleh : M-Won /
/ =============================================================*/
class Clock {
// deklarasi atribut
int hour, minute, second;
public:
// konstruktor dan destruktor
Clock();
Clock(int, int, int);
~Clock();
//deklarasi layanan
int AmbilJam();
int AmbilMenit();
int AmbilDetik();
void AssignJam(int);
void AssignMenit(int);
void AssignDetik(int);
void AssignClock(int, int, int);
void TampilJam();
int ConvertDetik();
};
Buat file baru untuk memuat definisi dari setiap yang ada pada kelas clock dan
beri nama clock.cpp
/* =============================================================/
/ Nama File :clock.cpp /
/ Deskripsi: definisi fungsi anggota dari kelas Clock /
/ pada file clock.h /
/ Dibuat oleh :M-Won /
/ =============================================================*/
#include "clock.h"
#include <stdio.h>
// konstruktor dan destruktor
Clock::Clock() {
hour = 0;
minute = 0;
second = 0;
}
Clock::~Clock() {
//tidak ada aksi apapun
}
//deklarasi layanan
int Clock::AmbilJam() {
return hour;
}
int Clock::AmbilMenit() {
return minute;
}
int Clock::AmbilDetik() {
return second;
}
void Clock::AssignJam(int x) {
hour = x ;
}
void Clock::AssignMenit(int x) {
minute = x ;
}
void Clock::AssignDetik(int x) {
second = x ;
}
void Clock::TampilJam() {
printf("%2d:%2d:%2d", hour, minute, second);
}
int Clock::ConvertDetik() {
long s;
s = 3600*hour + 60*minute + second;
return s;
}
Buat file baru untuk memuat program utama dan beri nama drvclock.cpp
/*=============================================================/
/ Nama File :drvclock.cpp /
/ Deskripsi : Program utama untuk mencoba kelas Clock /
/ Dibuat oleh :M-Won /
/ =============================================================*/
#include <conio.h>
#include "clock.cpp"
void main() {
//ciptakan objek jam
Clock jam1, jam2(21, 15, 55);
clrscr();
jam1.AssignJam(14);
jam1.AssignMenit(5);
jam1.AssignDetik(13);
printf("\n Waktu dari jam1 "); jam1.TampilJam();
printf("\n Nilai jam = %d", jam1.AmbilJam());
printf("\n Nilai menit = %d", jam1.AmbilMenit());
printf("\n Nilai detik = %d", jam1.AmbilDetik());
printf("\n Nilai konversi = %d detik", jam1.ConvertDetik());
getch();
}
Contoh 4.3:
Program ADT untuk nilai mahasiswa. Buat sebuah file yang digunakan untuk
mendeklarasikan kelas Nilai_Mhs dan simpan dengan nama nilai.h
/*============================================================= /
/ Nama File : nilai.h /
/ Deskripsi : deklarasi kelas Nilai MHS di file terpisah /
/ Dibuat oleh : M-Won /
/ =============================================================*/
//deklarasi kelas
class Nilai_Mhs {
public:
//deklarasi atribut
char NPM[8], Nama[30], Kelas[6];
int Hadir, Tugas, UTS, UAS;
//deklarasi layanan
void Baca_Data();
float Hitung_NA();
char Hitung_HM();
char* Set_Lulus();
void Cetak_Info();
};
Buat definisi setiap layanan yang ada dalam kelas Nilai_Mhs dan simpan ke
dalam file nilai.cpp
/* ============================================================ /
/ Nama File : nilai.cpp /
/ Deskripsi : Definisi fungsi anggota dari kelas Nilai_Mhs /
/ Dibuat Oleh : M-Won /
/ ============================================================ */
#include <string.h>
#include "nilai.h"
Nilai_Mhs::~Nilai_Mhs(){
//tidak ada aksi apapun
}
//definisi layanan
void Nilai_Mhs::Baca_Data() {
printf("1. NPM :");scanf("%s", NPM);
printf("2. Nama Mahasiswa :");scanf("%s", Nama);
printf("3. Kelas :");scanf("%s", Kelas);
printf("4. Nilai Kehadiran :");scanf("%s", &Hadir);
printf("5. Nilai Tugas :");scanf("%s", &Tugas);
printf("6. Nilai UTS :");scanf("%s", &UTS);
printf("7. Nilai UAS :");scanf("%s", &UAS);
}
float Nilai_Mhs::Hitung_NA() {
return (0.1*Hadir+0.2*Tugas+0.3*UTS+0.4*UAS);
}
char Nilai_Mhs::Hitung_HM() {
//deklarasi variabel lokal
float NAkhir;
char HM;
return HM;
}
char* Nilai_Mhs::Set_Lulus(){
char HM;
char* Status;
void Nilai_Mhs::Cetak_Info(){
printf("1. NPM : %s \n", NPM);
printf("2. Nama Mahasiswa : %s \n", Nama);
Buat program utama yang akan menggunakan kelas Nilai_Mhs dan simpan ke
dalam file mnilai.cpp
/* ============================================================ /
/ Nama File : mnilai.cpp /
/ Deskripsi: Program Utama untuk menjalankan kelas Nilxai_Mhs /
/ Dibuat oleh : M-Won /
/ =============================================================*/
#include <stdio.h>
#include <conio.h>
#include "nilai.cpp"
void main() {
// ciptakan objek Nilai_Mhs
Nilai_Mhs mhs;
BAGIAN V
PEMROGRAMAN OBJEK CLIENT-SUPPLIER
5.1 Pengertian
o Pemrograman objek dimana objek-objek yang menyusun program sudah
saling berinteraksi.
o Interaksi antar objek yang terjadi berupa hubungan client-supplier. Artinya akan
ada objek yang berperan sebagai client dan ada objek yang akan berperan
sebagai supplier.
o Client adalah objek yang akan menggunakan sebagian atau seluruh atribut
dan layanan objek lain, sementara supplier adalah objek yang menyediakan
sebagian atau seluruh atribut dan layanannya untuk digunakan oleh objek lain.
o Secara teknis, biasanya objek yang berperan sebagai supplier merupakan
atribut dari objek client sehingga menjadi bagian (property) dari objek client.
o Pemrograman objek client-supplier merupakan implementasi dari hubungan
antar objek asosiasi dan whole-part (part of)
Pada contoh 4.2 kita telah membuat sebuah kelas yang kita beri nama clock,
sesuai dengan salah satu karakteristik OOP reusability, maka kita tinggal
menggunakan kelas yang sudah ada. Buat file baru yang digunakan untuk
mendeklarasikan kelas baru yaitu PulseCounter dan simpan dengan nama pc.h
/* ========================================= /
/ Nama File : pc.h /
/ Deskripsi : deklarasi kelas pulsecounter /
/ yang menggunakan kelas clock /
/ Dibuat oleh : M-Won /
/ ==========================================*/
#include "clock.cpp"
class PulseCounter {
public:
int NoKBU;
Clock JamMulai;
Clock JamSelesai;
int HitungPulsa();
};
Buat definisi layanan dari kelas PulseCounter dan simpan dalam file pc.cpp
/* ========================================= /
/ Nama File : pc.cpp /
/ Deskripsi : definisi layanan kelas /
/ PulseCounter /
/ Dibuat oleh : M-Won /
/ ==========================================*/
#include "pc.h"
#include <math.h>
int PulseCounter::HitungPulsa(){
double lama;
float pulsa;
/* ========================================= /
/ Nama File : drvpc.cpp /
/ Deskripsi : program utama /
/ Dibuat oleh : M-Won /
/ ==========================================*/
#include "pc.cpp"
#include <conio.h>
void main(){
PulseCounter pc;
pc.NoKBU=1;
pc.JamMulai.AssignClock(11, 12, 16);
pc.JamSelesai.AssignClock(12, 15,6);
Tugas 5.1 :
o Tambahkan layanan hitung biaya percakapan yang dihitung berdasarkan
jumlah pulsa dikali tarif per pulsa. Tarif per pulsa hdala 500 rupiah.
o Tambahkan kode program pada Program Utama yang digunakan untuk
meminta inputan NoKBU, JamMulai, JamSelesai.
Contoh 5.2
Pada gambar 5.2 dapat dilihat hubungan whole-part. Misalkan sebuah personal
komputer tersusun dari CPU, monitor dan printer. Dari hasil pemodelan,
komputer, CPU, monitor dan printer hdala objek-objek yang mempunyai
hubungan whole-part. Lebih lengkap dapat kita gambarkan sebagai berikut.
Gambar 5.4 Detail hubungan whole-part antara CPU, Monitor, Printer dan Komputer
char* getmerk(){
return (merk);
};
int getkecepatan(){
return (kecepatan);
};
};
class monitor{
char* merk;
long harga;
public:
void isiatribut(char *m, long h){
merk=m;
harga=h;
};
char* getmerk(){
return (merk);
};
int getharga(){
return (harga);
};
};
class printer{
char* merk;
char* tipe;
long harga;
public:
void isiatribut(char *m, char *t, long h){
merk=m;
tipe=t;
harga=h;
};
char* getmerk(){
return (merk);
};
char* gettipe(){
return (tipe);
};
int getharga(){
return (harga);
};
};
void displayspec(){
cout<<"Kode : "<<kode <<endl;
cout<<"Processor :"<<proc.getmerk()<<" "<<proc.getkecepatan()<<endl;
cout<<"Monitor : "<<mon.getmerk()<<endl;
cout<<"Printer : "<<prn.getmerk()<<" "<<prn.gettipe()<<endl;
};
};
//program utama
void main(){
//create objek
komputer pc;
Tugas 5.2 :
- Tambahkan atribut harga serta layanan getharga() pada class CPU
- Tambahkan layanan menghitung total harga berdasarkan harga CPU +
harga monitor + harga printer
Contoh 5.3
OOP client-supplier untuk menghitung biaya pemakaian komputer di statu rental.
#include "clock.cpp"
#include <conio.h>
#include <iostream.h>
float getsewaperjam(){
return sewaperjam;
}
};
clrscr();
cout<<"Nomor Komputer = ";cin>>nk;
pc.isidata(nk);
cout<<"Sewa per Jam = Rp "<<pc.getsewaperjam()<<endl;
cout<<"Jam Mulai = : : ";
gotoxy(18,3);cin>>h;
gotoxy(21,3);cin>>m;
gotoxy(24,3);cin>>s;
jammulai.AssignClock(h,m,s);
cout<<"Jam Selesai = : : ";
gotoxy(18,4);cin>>h;
gotoxy(21,4);cin>>m;
gotoxy(24,4);cin>>s;
jamselesai.AssignClock(h,m,s);
}
int HitungLama(){
return(jamselesai.ConvertDetik()- jammulai.ConvertDetik())/3600;
}
float HitungBayar(){
return HitungLama()* pc.getsewaperjam();
}
void Display(){
cout<<"Lama Pemakaian = "<<HitungLama()<<" jam"<<endl;
cout<<"Total Bayar = Rp "<<HitungBayar();
}
};
//program utama
void main() {
rental r;
r.EntryPemakaian();
r.Display();
getch();
}
Tugas 5.3 :
Sempurnakan layanan HitungLama pada kelas rental sehingga lama pemakaian
yang kurang dari 1 jam dianggap satu jam (dilakukan pembulatan)
Contoh 5.4
OOP client-supplier untuk menghitung nilai teori dan nilai praktek mahasiswa.
Buat sebuah file untuk mendeklarasikan kelas dan simpan dengan nama uts.h
//deklarasi kelas
class NilaiTeori {
public:
//deklarasi atribut
int hadir, tugas, UTS_T, UAS_T;
//deklarasi layanan
float NilaiAkhir();
};
class NilaiPraktik {
public:
//deklarasi atribut
int UTS_P, UAS_P;
//deklarasi layanan
float NilaiRata2();
};
class NilaiKuliah{
public:
//deklarasi atribut
char Nama[15];
NilaiTeori NT;
NilaiPraktik NP;
//deklarasi layanan
char *StatusLulus();
void CetakInfo();
};
Buat sebuah file yang berisi definisi dari setiap layanan yang ada di kelas yang
sudah dideklarasikan pada file uts.h. Simpan file tersebut dengan nama uts.cpp
#include "uts.h"
//definisi untuk kelas NilaiTeori
//konstruktor dan destruktor
NilaiTeori::NilaiTeori(){
hadir=0;
tugas=0;
UTS_T=0;
UAS_T=0;
}
NilaiTeori::~NilaiTeori(){}
//definisi layanan
float NilaiTeori::NilaiAkhir() {
return 0.1*hadir+0.2*tugas+0.3*UTS_T+0.4*UAS_T;
}
NilaiPraktik::~NilaiPraktik(){}
//definisi layanan
float NilaiPraktik::NilaiRata2() {
return (UTS_P+UAS_P)/2;
}
NilaiKuliah::~NilaiKuliah(){}
//definisi layanan
char *NilaiKuliah::StatusLulus() {
if ((NT.NilaiAkhir()>=60)&&(NP.NilaiRata2()>=60))
return ("Lulus");
else if((NT.NilaiAkhir()>=60)||(NP.NilaiRata2()>=60))
return ("Her");
else
return ("Tidak Lulus");
}
void NilaiKuliah::CetakInfo(){
printf("Nama Mahasiswa : %s\n",Nama);
printf("Nilai Akhir Teori : %f\n",NT.NilaiAkhir());
printf("Nilai Rata-rata Praktik : %f\n",NP.NilaiRata2());
printf("Status Kelulusan : %s\n",StatusLulus());
}
#include <string.h>
#include <stdio.h>
#include <conio.h>
#include "uts.cpp"
void main() {
//deklarasi objek
NilaiKuliah NK;
clrscr();
strcpy(NK.Nama, "Acak Adul");
NK.NT.hadir=85;
NK.NT.tugas=0;
NK.NT.UTS_T=50;
NK.NT.UAS_T=55;
NK.NP.UTS_P=80;
NK.NP.UAS_P=76;
//clrscr();
NK.CetakInfo();
getch();
}