Laporan Praktikum Pbo 6

31
LAPORAN PRAKTIKUM PBO UNIT VI MENGGUNAKAN CLASS Nama : Ridho Pratama NIM : 12/329855/TK/39089 Hari/Tanggal : Rabu Siang/10 Desember 2014 LABORATORIUM JARINGAN KOMPUTER

description

Praktikum PBO acara 6

Transcript of Laporan Praktikum Pbo 6

LAPORAN PRAKTIKUM PBO UNIT VI MENGGUNAKAN CLASS Nama: Ridho Pratama NIM: 12/329855/TK/39089 Hari/Tanggal: Rabu Siang/10 Desember 2014 LABORATORIUM JARINGAN KOMPUTERJURUSAN TEKNIK ELEKTRO DAN TEKNOLOGI INFORMASI FAKULTAS TEKNIK UNIVERSITAS GADJAH MADA YOGYAKARTA2014

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 classPada 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.csusing System;using System.Collections.Generic;using System.Linq;using System.Text;using 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 accountnamespace 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 accountnamespace 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 BankAccountCreate Accountnamespace 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 Accountnamespace 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 Pagepublic 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 BankAccountCreate Accountnamespace 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 Accountnamespace 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 Pagepublic 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();

} }}

AnalisisYang 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 masukkanCreate Accountnamespace 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 Accountnamespace 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

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

AnalisisPada 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 unikCreate Accountnamespace 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 Accountnamespace 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.csnamespace CreateAccount{ /// /// An empty page that can be used on its own or navigated to within a Frame. /// public sealed partial class MainPage : Page { List bankAccount = new List(); 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; } }}

AnalisisPada 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 userScreenShot saat program dijalankan :

Latihan 3 : 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 BankAccountBank Accountnamespace 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.csnamespace CreateAccount{ /// /// An empty page that can be used on its own or navigated to within a Frame. /// public sealed partial class MainPage : Page { List bankAccount = new List(); 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!"; } } }}

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

AnalisisBerikutnya 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 ituPerbedaan 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 kelas-kelas 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 variabel3. 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-berorientasi-objek.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 classLatihan 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 BankAccountJika gagal