Anda di halaman 1dari 25

LAPORAN PRAKTIKUM PBO

UNIT VI
MENGGUNAKAN CLASS

Nama
NIM

: Ridho Pratama
: 12/329855/TK/39089

Hari/Tanggal : Rabu Siang/10 Desember 2014

LABORATORIUM JARINGAN KOMPUTER


JURUSAN TEKNIK ELEKTRO DAN TEKNOLOGI
INFORMASI FAKULTAS TEKNIK UNIVERSITAS
GADJAH MADA YOGYAKARTA
2014

BAB I PENDAHULUAN

Tujuan Praktikum
Membangun aplikasi Windows Store
Membuat class dan menginstankan objek
Menggunakan data dan method yang bersifat non-static
Menggunakan data dan method yang bersifat static
Menampilkan data di dalam class ke dalam XAML
Dasar Teori
Class merupakan cetak biru (blueprint) atau template dari objek dengan kata lain class
merupakan representasi abstrak. Suatu class dapat berisi property, field, method dan event
dari suatu objek yang disebut members dari suatu class. Pada C#, objek lebih dikenal sebagai
instance class. Objek ini dapat digunakan untuk mendefinisikan method dan variable.
Dalam .net semua class dasar dikelompokkan kedalam Namespace.

Sebagai contoh suatu kelas kalkulator yang megandung data bilangan1 dan bilangan2
dan memiliki fungsi untuk mengakses data tersebut, seperti : inisialisasi(), penjumlahan(),
pengurangan(), perkalian() dan pembagian(). Data dan fungsi yang berada dalam sebuah
class dinamakan anggota. Secara lebih khusus , data yang terletak dalam kelas dinamakan
anggota data dan fungsi yang berada dalam kelas disebut anggota fungsi atau fungsi anggota
atau terkadang disebut metode.

BAB II

PEMBAHASAN

Latihan 1 : MEMBUAT DAN MENGGUNAKAN CLASS


Pada latihan ini Anda akan menggunakan bank account yang dibuat pada modul sebelumnya
dan mengubahnya menjadi sebuah class. Anda akan mendeklarasikan data membernya
sebagai private namun memberikan akses ke data dengan cara menggunakan method yang
public dan non-static. Anda akan membuat uji ketahanan yang nantinya akan membuat
sebuah objek account dan mengembangkannya dengan account number dan balance yang
telah ditentukan oleh user. Akhirnya, anda akan menampilkan datanya pada account.
Berikut adalah tahapan - tahapan dalam pembuatan program latihan ini :

Mengubah BankAccount dari tipe data struct menjadi sebuah class

Pada sub latihan akan dibuat class BankAccount yang berisikan account number, account
balance, dan account type dengan access modifier public. Untuk tipe datanya disesuaikan
tergantung yang diinginkan. Dan selanjutnya kita akan masuk ke User Interface dari
program ini. Ditambahkan 3 buah text blok untuk masing-masing account.
BankAccount.cs
using
using
using
using
using

System;
System.Collections.Generic;
System.Linq;
System.Text;
System.Threading.Tasks;

namespace CreateAccount
{
struct BankAccount
{
public long accNo;
public decimal accBal;
public AccountType accType;
}
}

Untuk di compile, class tersebut berhasil. Pada screenshot terlihat terdapat tiga buah text
objek.
Dan untuk selanjutnya untuk struct akan diganti dengan class. Sehingga terjadi kegagalan
saat di compile. Lalu buka file CreateAccount.cs. Terlihat kegagalan didapat karena
BankAccount masih bertipe data struct, deklarasi variabel created, membuat nilai (value)
dari BankAccount (pada stack). Namun ketika BankAccount menjadi sebuah class,
deklarasi variabel created tidak membuat nilai dari BankAccount. Berikut penambahan
kode yang dilakukan :
create account
namespace CreateAccount
{
class CreateAccount
{
public static BankAccount newBankAccount()
{
BankAccount created = new BankAccount();
created.accNo = 123; //error di sini
created.accBal = 3000000;
created.accType = AccountType.Checking;
return created;
}
}
}

Bank account
namespace CreateAccount
{
class BankAccount
{
public long accNo;
public decimal accBal;
public AccountType accType;
}
}

Compile berhasil dan screenshot sama dengan yang sebelumnya.


ScreenShot saat program dijalankan :

Mengenkapsulasi class BankAccount

Create Account
namespace CreateAccount
{
class CreateAccount
{
public static BankAccount newBankAccount()
{
BankAccount created = new BankAccount();
//created.accNo = 123;
//created.accBal = 3000000;
//created.accType = AccountType.Checking;
created.Populate(123, 3000000);
return created;
}
}
}

Bank Account
namespace CreateAccount
{
class BankAccount
{
public void Populate(long number, decimal balance)
{
accNo = number;
accBal = balance;
accType = AccountType.Checking;
}
public long Number()
{
return accNo;
}
public decimal Balance()
{
return accBal;

}
public AccountType Type()
{
return accType;
}

private long accNo;


private decimal accBal;
private AccountType accType;

Main Page
public sealed partial class MainPage : Page
{
public MainPage()
{
this.InitializeComponent();
BankAccount created = CreateAccount.newBankAccount();
accno.Text = created.Number().ToString();
accbal.Text = created.Balance().ToString();
acctype.Text = created.Type().ToString();

}
}

Analisis
Pada newBankAccount ditambahkan kode setelah kalimat komentar. Namun pada saat di
compile terjadi kegagalan yang disebabkan adanya tiga kalimat pada class MainPage yang
mengakses secara langsung ke bagian BankAccount. Sehingga diperlukan penambahan tiga
buah method ke BankAccount yang bersifat public yang mengembalikan nilai dari tiga field
tadi. Selanjutnya ditambahkan method Number yang dimana method ini akan
mengembalikan nilai-nilai pada tipe long, decimal, AccountType dan tidak memerlukan
parameter. Pada MainPage.xaml.cs, tipe data pada accno,accbal dan acctype diubah ke string.
Dan hasil screenshot sama dengan yang sebelumnya.
ScreenShot saat program dijalankan :

Melakukan enkapsulasi lebih jauh pada class BankAccount

Create Account
namespace CreateAccount
{
class CreateAccount
{
public static BankAccount newBankAccount()
{
BankAccount created = new BankAccount();
//created.accNo = 123;
//created.accBal = 3000000;
//created.accType = AccountType.Checking;
created.Populate(123, 3000000);
return created;
}
}
}

Bank Account
namespace CreateAccount
{
class BankAccount
{
public void Populate(long number, decimal balance)
{
accNo = number;
accBal = balance;
accType = AccountType.Checking;
}
public string Number()
{
return accNo.ToString();
}
public string Balance()
{
return accBal.ToString();
}

public string Type()


{
return accType.ToString();
}
private long accNo;
private decimal accBal;
private AccountType accType;
}

Main Page
public sealed partial class MainPage : Page
{
public MainPage()
{
this.InitializeComponent();
BankAccount created = CreateAccount.newBankAccount();
accno.Text = created.Number();
accbal.Text = created.Balance();
acctype.Text = created.Type();

Analisis
Yang membedakan pada sub latihan ini akan dilakukan enkapsulasi pada ToString sehingga
dimasukkan kedalam class sehingga tidak dipanggil diluar kode.
ScreenShot saat program dijalankan :

Menampilkan daftar dari akun bank yang kita masukkan

Create Account
namespace CreateAccount
{

class CreateAccount
{
public static BankAccount newBankAccount()
{
BankAccount created = new BankAccount();
//created.accNo = 123;
//created.accBal = 3000000;
//created.accType = AccountType.Checking;
created.Populate(123, 3000000);
return created;
}
}
}

Bank Account
namespace CreateAccount
{
class BankAccount
{
public void Populate(long number, decimal balance)
{
accNo = number;
accBal = balance;
accType = AccountType.Checking;
}
public string Number()
{
return accNo.ToString();
}
public string Balance()
{
return accBal.ToString();
}
public string Type()
{
return accType.ToString();
}
public long accNo { get; set; }
public decimal accBal { get; set; }
public AccountType accType { get; set; }
}
}

Main Page.xaml
<Grid Background="{StaticResource ApplicationPageBackgroundThemeBrush}">
<ListView x:Name="BankAccList" HorizontalAlignment="Left" Height="215"
Margin="110,101,0,0" VerticalAlignment="Top" Width="1091">
<ListView.ItemTemplate>
<DataTemplate>
<Grid DataContext="{Binding}" Margin="0,266,0,0">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="363"/>
<ColumnDefinition Width="363"/>
<ColumnDefinition Width="363"/>
</Grid.ColumnDefinitions>
<TextBlock x:Name="accno" FontSize="36"
Text="{Binding accNo}" Grid.Column="0"/>
<TextBlock x:Name="accbal" FontSize="36"

Text="{Binding accBal}" Grid.Column="1"/>


<TextBlock x:Name="acctype" FontSize="36"
Text="{Binding accType}" Grid.Column="2"/>
</Grid>
</DataTemplate>
</ListView.ItemTemplate>
</ListView>

Main page xaml.cs


public sealed partial class MainPage : Page
{
public MainPage()
{
this.InitializeComponent();
List<BankAccount> bankAccount = new List<BankAccount>();
BankAccount created = CreateAccount.newBankAccount();
//accno.Text = created.Number();
//accbal.Text = created.Balance() ;
//acctype.Text = created.Type();
bankAccount.Add(created);
BankAccList.ItemsSource = bankAccount;
}
}
}

Analisis
Pada sub latihan ini ditambahkan bracket DataTemplate. Dan diharapkan pada saat di
compile, dapat ditekan pada bagian UI untuk bagian checking maupun deposit.
Untuk compile pertama, sesuai dengan modul akan gagal pada MainPage.xaml.cs
dikarenakan control accno, accbal, dan acctype sudah tidak ada lagi pada MainPage.xaml.
sehingga harus mengganti kode pada MainPage.xaml.cs menjadi sebuag daftar. Selanjutnya
pada class BankAccount ditambahkan getter+setter pada tipe data sekaligus yang sebelumnya
private,diubah lagi menjadi public. Fungsi getter + setter ialah untuk meneruskan variabel ke
dalam seluruh kelas yang ada dalam namespace CreateAccount. Pada bagian ini compile
berhasil sehingga dilanjutkan dengan menambah fungsi add dimana nantinya berfungsi untuk
deposit.
ScreenShot saat program dijalankan :

Latihan 2 : MENGHASILKAN ACCOUNT NUMBER


Pada latihan kali ini Anda akan memodifikasi class BankAccount dari latihan 1 sehingga bisa
menghasilkan account number yang unik. Anda akan melakukan hal ini dengan menggunakan
variabel static pada class di BankAccount dan method yang menaikkan dan mengembalikan
nilai dari variabel tersebut. Ketika uji ketahan membuat account baru, maka akan memanggil
method tersebut untuk menghasilkan account number. Kemudian nantinya akan memanggil
method dari class BankAccount yang nantinya akan mengatur angka dari account, yang
dilewatkan sebagai parameter.
Berikut adalah tahapan - tahapan dalam pembuatan program latihan ini :

Memastikan setiap angka di BankAccount adalah unik

Create Account
namespace CreateAccount
{
class CreateAccount
{
public static BankAccount newBankAccount(decimal balance)
{
BankAccount created = new BankAccount();
//created.accNo = 123;
//created.accBal = 3000000;
//created.accType = AccountType.Checking;
created.Populate(balance); //sebelumnya:
//created.Populate(123,balance)
return created;
}
}

Bank Account
namespace CreateAccount
{
class BankAccount
{
public void Populate(decimal balance)
{
accNo = NextNumber;
accBal = balance;
accType = AccountType.Checking;
}
public string Number
{
get
{
return accNo.ToString();
}
set
{
}
}
public string Balance
{
get
{
return accBal.ToString();
}
set
{
}
}
public string Type
{
get
{
return accType.ToString();
}
set
{
}
}
public static long NextNumber
{
get
{
return nextAccNo++;
}
set
{
}
}
public long accNo { get; set; }
public decimal accBal { get; set; }
public AccountType accType { get; set; }

public static long nextAccNo { get; set; }

Main Page xaml.cs


namespace CreateAccount
{
/// <summary>
/// An empty page that can be used on its own or navigated to within a Frame.
/// </summary>
public sealed partial class MainPage : Page
{
List<BankAccount> bankAccount = new List<BankAccount>();
public MainPage()
{
this.InitializeComponent();
}

private void Button_Click(object sender, RoutedEventArgs e)


{
//BankAccount created = CreateAccount.newBankAccount(3000000);
BankAccount created =
CreateAccount.newBankAccount(decimal.Parse(balanceTextBox.Text)
);
bankAccount.Add(created);
BankAccList.ItemsSource = null;
BankAccList.ItemsSource = bankAccount;
}

Analisis
Pada percobaan ini, kita akan mengubah setiap kode yang terdapat di project solution
bernama UniqueNumbers.sln. Dimana nantinya kita akan memasukkan setiap nomor yang
unik dan balance sesuai keinginan user.
Pada bagian awal kode, ditambahkan method yaitu public static dengan tipe data long dengan
nama nextAccNo. Hal ini nantinya akan berguna untuk fungsi accNo. Setelah itu
ditambahkan method bersifat public static yaitu NextNumber ke class BankAccount. Method
ini akan mengembalikan sebuah nilai bertipe long dan tidak meminta parameter. Karena hal
ini, method public yang telah dibuat di awal, diubah ke private begitu juga dengan accNo,
accBal, dan accType.
Pada method populate, long number yang ada di hapus dan untuk accNo diubah menjadi
NextNumber agar langsung menuju ke penomoran selanjutnya setelah user berhasil
memasukkan nilai balance (accBal). Namun terdapat error pada saat method populate diubah.
Sehingga diperlukan perubahan kode sesuai dengan yang tertera pada modul. Agar sesuai
dengan keinginan user agar tombol dapat diklik, digunakan fungsi Button_Click yang

nantinya pada UI, tombol dapat ditekan. Tentu saja untuk kode didalamnya diatur agar
penomoran benar.
Satu hal lagi yang masih error ialah amount balance yang ketika dimasukkan ke dalam
textbox tidak terbaca. Aplikasi akan terus mengeluarkan angka sebanyak 3000000 terus
menerus dikarenakan kode sebelumnya disetting nilainya 3000000. Sehingga diperlukan
perubahan kode pada MainPage.xaml.cs pada fungsi Button_Click yaitu parsing tipe data
string yang sebelumnya sehingga menjadi decimal. Hal ini dilakukan karena text pada
textbox masih bertipe string. Jika ingin memasukkan sendiri berupa angka. Maka kode
diubah seperti yang tertera pada modul. Setelah itu jalankan program dan pastikan setiap
account yang ditambah mempunyai nomor yang unik dan balance yang dimasukkan sesuai
keinginan user
ScreenShot saat program dijalankan :

Latihan

MENGGUNAKAN

VARIABEL

BERTIPE

OBJECT

UNTUK

MELAKUKAN PERHITUNGAN PENARIKAN DAN DEPOSITO


Pada latihan kali ini, Anda akan menambahkan dua buah method ke class Account: Withdraw
dan Deposit.
Withdraw akan mengambil parameter bertipe decimal dan akan mengurangi jumlah yang
diberikan oleh balance. Namun, sebelum memotongnya parameter tersebut akan melakukan
pengecekan terlebih dahulu untuk memastikan bahwa dana yang dibutuhkan tersedia, karena
account tidak mengijinkan untuk kondisi pengambilan yang berlebihan. Parameter ini akan
mengambalikan nilai bool yang member indikasi apakan pengambilan dana sudah berhasil.
Deposit juga akan mengambil nilai parameter bertipe decimal yang nilainya akan
ditambahkan ke balance pada account. Parameter ini akan memberikan nilai terbaru dari
balance.
Berikut adalah tahapan - tahapan dalam pembuatan program latihan ini :

Menambahkan method Deposit ke class BankAccount

Menambahkan method Withdraw ke class BankAccount

Bank Account
namespace CreateAccount
{
class BankAccount
{
public void Populate(decimal balance)
{
accNo = NextNumber;
accBal = balance;
accType = AccountType.Checking;
}
public string Number
{
get
{
return accNo.ToString();
}
set
{
}
}
public string Balance
{
get

return accBal.ToString();
}
set
{
}
}
public string Type
{
get
{
return accType.ToString();
}
set
{
}
}
public static long NextNumber
{
get
{
return nextAccNo++;
}
set
{

}
}
private long accNo { get; set; }
public decimal accBal {get; set;}
private AccountType accType { get; set; }
private static long nextAccNo { get; set; }

Main Page xaml.cs


namespace CreateAccount
{
/// <summary>
/// An empty page that can be used on its own or navigated to within a Frame.
/// </summary>
public sealed partial class MainPage : Page
{
List<BankAccount> bankAccount = new List<BankAccount>();
public MainPage()
{
this.InitializeComponent();

//accno.Text = created.Number();
//accbal.Text = created.Balance() ;
//acctype.Text = created.Type();
//bankAccount.Add(new BankAccount { accNo = 124, accBal = 5000000, accType =
AccountType.Deposit });

private void Button_Click(object sender, RoutedEventArgs e)


{
BankAccount created =
CreateAccount.newBankAccount(decimal.Parse(balanceTextBox.Text));
bankAccount.Add(created);
BankAccList.ItemsSource = null;
BankAccList.ItemsSource = bankAccount;
}
private void Deposit_Button_Click(object sender, RoutedEventArgs e)
{
BankAccount SelectedItemFromList = (BankAccList.SelectedItem)
as BankAccount;
decimal amount = decimal.Parse(balanceTextBox.Text);
decimal oldamount =
decimal.Parse(SelectedItemFromList.Balance);
amount += oldamount;
bankAccount.First(item => item.Number ==
SelectedItemFromList.Number).accBal = amount; //error di sini
BankAccList.ItemsSource = null;
BankAccList.ItemsSource = bankAccount;
}
private void Withdraw_Button_Click(object sender, RoutedEventArgs e)
{
try
{
BankAccount SelectedItemFromList =
(BankAccList.SelectedItem) as BankAccount;
decimal amount = decimal.Parse(balanceTextBox.Text);
decimal oldamount =
decimal.Parse(SelectedItemFromList.Balance);
oldamount -= amount;
if (oldamount < 0)
{
throw new Exception();
}
bankAccount.First(item => item.Number ==
SelectedItemFromList.Number).accBal = oldamount;
BankAccList.ItemsSource = null;
BankAccList.ItemsSource = bankAccount;
}
catch
{
balanceTextBox.Text = "Insufficient funds!";
}
}
}

Analisis
Pada method deposit, ditambahkan fungsi untuk mengambil sejumlah deposit yang ingin kita
tambahkan ke dalam BankAccount. Nilai deposit akan ditambahkan sesuai jumlah yang kita
masukkan pada TextBox yang sama. Penambahan dilakukan antara nilai balance yang lama

(oldamount) dengan yang baru (amount). Namun terdapat error dikarenakan variabel accBal
masih bertipe privat. Sehingga harus diganti menjadi public.
ScreenShot saat program dijalankan :

Analisis
Berikutnya pada method withdraw, fungsi yang ditambahkan merupakan kebalikan dari
fungsi deposito. Jadi hamper sebagian kode sama dengan kode deposito. Namun untuk
menghindari adanya penarikan jumlah uang berlebih dibandingkan dengan saldo yang ada,
dilakuan pengecekan apakah saldo bernilai negative setelah ditarik atau tidak. Jika iya maka
akan muncul pesan bahwa saldo tidak mencukupi. Pada source code dapat dilihat oldamount
-= amount; dan juga perhitungan terjadi setelahnya dengan throw new Exception agar
nantinya jika nilai negative akan dicatch dan muncul pesan Insufficient Funds.
ScreenShot saat program dijalankan :

ScreenShot saat program gagal dijalankan :

JAWABAN PERTANYAAN
1. Apakah perbedaan antara class dan struct.
Jawaban :
-

Class adalah sesuatu yang mempunyai data (sifat) dan fungsi (kelakuan) untuk
mendeskripsikan suatu objek.

Struct mendefinisikan tipe data dan memberitahukan kepada Visual C++ untuk
memperlakukan koleksi tipe data dasar sebagai satu kesatuan tipe data, yang darinya
dapat mendefinisikan variabel dan array variabel.

class tanpa fungsi hampir serupa dengan structure, di class dapat memasukkan fungsi, namun
di structure tidak dapat memasukkan fungsi.

2. Apakah yang dimaksud dengan access modifier dan kemukakan berbagai jenis access
modifier yang terdapat pada C# beserta penjelasannya. (public private dan sebagainya)
Jawaban :
Access modifier merupakan keyword yang digunakan untuk menspesifikasikan akses dari
suatu anggota ada tipe dari class dan juga dapat menentukan ruang lingkup visibilitas untuk
variabel dan metode.
Berikut jenis-jenis access modifier :
-

Publik = Semua dapat mengakses dari anggota public

Private = Access terbatas dalam definisi class. Akses ini default apabila tidak ada
deklarasi.

Protected = Access terbatas pada class yang diinheritance dari class tersebut

Internal = Access terbatas secara eksklusif pada definisi class dalam project assembly
saat itu

Perbedaan public dan private :


-

Private : berguna untuk memberikan hak akses data hanya kepada kelas yang
bersangkutan saja. Artinya kelas-kelas turunan ataupun lingkungan luar di dalam
program tidak diizinkan untuk mengakses data tersebut

Public : berfungsi untuk memberikan hak akses secara umum (public) kepada kelaskelas turunannya maupun terhadap lingkungan luar di dalam program.

BAB III PENUTUP


KESIMPULAN :
1. Class adalah sesuatu yang mempunyai data (sifat) dan fungsi (kelakuan) untuk
mendeskripsikan suatu objek.
2. Struct mendefinisikan tipe data dan memberitahukan kepada Visual C++ untuk
memperlakukan koleksi tipe data dasar sebagai satu kesatuan tipe data, yang darinya
dapat mendefinisikan variabel dan array variabel
3. Access modifier merupakan keyword yang digunakan untuk menspesifikasikan akses
dari suatu anggota ada tipe dari class dan juga dapat menentukan ruang lingkup
visibilitas untuk variabel dan metode.
4. Jenis-jenis access modifier yaitu public, private, protected internal dan lain-lain.

BAB IV DAFTAR PUSTAKA


-

http://yohandamandala.blogspot.com/2009/11/class-di-c.html

http://fathulazi.blogspot.com/2012/11/oop-di-pemograman-c.html

http://www.galih-afm.com/2012/08/membuat-program-class-sederhana-pada-c.html

http://netindonesia.net/blogs/itong/archive/2008/10/29/belajar-c-pemrograman-berorientasiobjek.aspx

http://id.answers.yahoo.com/question/index?qid=20091015185012AAN4VT7

http://ainkhina.blogspot.com/2010/05/struct-pada-c.html

BAB V LAMPIRAN
Modul 6 : Menggunakan class
Latihan 1 : Membuat dan Menggunakan Class

Untuk mengubah BankAccount dari tipe data struct menjadi sebuah class

gambar 1 mengubah BankAccount dari tipe data struct menjadi sebuah class

Untuk mengenkapsulasi class BankAccount

gambar 2 mengenkapsulasi class bankaccount

Untuk melakukan enkapsulasi lebih jauh pada class BankAccount

gambar 3 melakukan enkapsulasi lebih jauh pada class bankaccount

Untuk menampilkan daftar dari akun bank yang kita masukkan

gambar 4 menampilkan daftar dari akun bank yang kita masukkan

Latihan 2 : Menghasilkan Account Number

Untuk memastikan setiap angka di Bank Account adalah unik

gambar 5 memastikan setiap angka dibankaccount adalah unik

gambar 6 memastikan setiap angka di Bank Account adalah unik

Latihan 3 : Menggunakan variable bertipe object untuk melakukan perhitungan


penarikan dan deposito

Untuk menambahkan method deposito ke class BankAccount

gambar 7 menambahkan method deposito ke class bankaccount

Untuk menambahkan method withdraw keclass BankAccount

gambar 8 menambahkan method withdraw keclass BankAccount

Jika gagal