Anda di halaman 1dari 10

Nama : Bimota Ares Daffa

NPM : 0620103004

UAS PEMROGRAMAN IV

I. (40 poin)
1. Apa kegunaan utama dari Constructor dan Destructor pada sebuah object! (Sertakan contoh
untuk menjelaskan)
JAWAB :
Constructor adalah method khusus yang akan dijalankan secara otomatis pada saat sebuah objek
dibuat (instansiasi), yakni ketika perintah “new” dijalankan.
Constructor biasa digunakan untuk membuat proses awal dalam mempersiapkan objek, seperti
memberi nilai awal kepada property, memanggil method internal dan beberapa proses lain yang
digunakan untuk mempersiapkan objek.
Deklarasi sederhana Constructor
using System;

public class Program


{
public class bimota
{

public idcsharp() // constructor, nama method sama dengan Class


{
Console.WriteLine("Selamat Datang");
}
}
public static void Main(string[] args)
{
idcsharp p = new idcsharp();
}
}
Implementasi Sederhana Constructor C#
using System;

namespace Bimota
{
public class Program
{
class bakso
{
private int jumlah;
private string nama;
public bakso(string name)
{
nama = name;
}
public string getNama()
{
return nama;
}
}
public static void Main(string[] args)
{
bakso b = new bakso("pak sugeng");
Console.WriteLine(b.getNama());
}
}
}

Destructor merupakan kebalikan dari Constructor, dalam bahasa pemrograman C#, destructor
sering disebut dengan nama Finalize.

Destructor atau Finalize dalam bahasa pemrograman C# digunakan untuk menghancurkan atau
destroy, suatu instance dari class

Destructor secara otomatis akan dipanggil ketika object telah di destroy atau keluar dari scope.

Tetapi ada perbedaan mengenai destructor pada bahasa pemrograman lain dengan bahasa
pemrograman C#, pada bahasa pemrograman C# kamu dapat tidak memanggil Destructor.
mengapa ?, Dalam bahasa pemrogaman C# kamu tidak akan bisa menghancurkan suatu object.
Jadi siapa yang akan bertanggung jawab mengontrol destructor, dalam C# dikenal dengan nama
.NET frameworks Garbage Collector (GC).
Destructor memiliki beberapa atribut berikut :
- Class hanya boleh mempunyai satu destructor.
- Destructor tidak dapat dipanggil, destructor dipanggil secara otomatis.
- Destructor tidak mengambil modifier atau tidak mempunyai parameters
Nama dari destructor sama dengan nama kelas yang diawali dengan tanda (~).
using System;
namespace Bimota
{
class Murid
{
public Murid()
{
Console.WriteLine("Instance Class Telah Dibuat");
}
// Destructor
~Murid()
{
Console.WriteLine("Instance Class Telah di Destroy");
}
}
public class Program
{
public static void Main(string[] args)
{
Jalankan();
GC.Collect();

}
public static void Jalankan()
{
// Membuat Instance Class
Murid murid = new Murid();
}
}
}

2. Jelaskan dengan menggunakan contoh mengenai akses Private, Protected, dan Public pada
pendefinisian member dari object!
JAWAB :
Public
Kata kunci public adalah pengubah akses untuk jenis dan anggota jenis. Akses publik merupakan
tingkat akses yang paling permisif. Tidak ada batasan untuk mengakses anggota publik, seperti
dalam contoh ini:
class SampleClass
{
public int x; // No access restrictions.
}
Dalam contoh berikut, dua kelas dideklarasikan, PointTest dan Program. Anggota publik x dan y
dari PointTest diakses langsung dari Program.
class PointTest
{
public int x;
public int y;
}

class Program
{
static void Main()
{
var p = new PointTest();
// Direct access to public members.
p.x = 10;
p.y = 15;
Console.WriteLine($"x = {p.x}, y = {p.y}");
}
}
// Output: x = 10, y = 15

Private
Kata private kunci adalah pengubah akses anggota.

Halaman ini mencakup private akses. Kata private kunci juga merupakan bagian dari pengubah
private protected akses.

Akses privat adalah tingkat akses yang paling tidak permisif. Anggota privat hanya dapat diakses
dalam isi kelas atau struktur tempat mereka dinyatakan, seperti dalam contoh ini:
class Employee
{
private int _i;
double _d; // private access by default
}
Dalam contoh ini, Employee kelas berisi dua anggota data privat, _name dan _salary. Sebagai
anggota privat, mereka tidak dapat diakses kecuali dengan metode anggota. Metode publik
bernama GetName dan Salary ditambahkan untuk memungkinkan akses terkontrol ke anggota
privat. Anggota _name diakses dengan cara metode publik, dan _salary anggota diakses dengan
cara properti baca-saja publik.
class Employee2
{
private readonly string _name = "FirstName, LastName";
private readonly double _salary = 100.0;

public string GetName()


{
return _name;
}

public double Salary


{
get { return _salary; }
}
}

class PrivateTest
{
static void Main()
{
var e = new Employee2();

// The data members are inaccessible (private), so


// they can't be accessed like this:
// string n = e._name;
// double s = e._salary;

// '_name' is indirectly accessed via method:


string n = e.GetName();

// '_salary' is indirectly accessed via property


double s = e.Salary;
}
}

Protected
Kata protected kunci adalah pengubah akses anggota.Anggota yang dilindungi dapat diakses
dalam kelasnya dan oleh instans kelas turunan.

Untuk perbandingan protected dengan pengubah akses lainnya. Anggota kelas dasar yang
dilindungi dapat diakses di kelas turunan hanya jika akses terjadi melalui jenis kelas turunan.
Misalnya, pertimbangkan segmen kode berikut:
class A
{
protected int x = 123;
}
class B : A
{
static void Main()
{
var a = new A();
var b = new B();

// Error CS1540, because x can only be accessed by


// classes derived from A.
// a.x = 10;

// OK, because this class derives from A.


b.x = 10;
}
}
Pernyataan a.x = 10 menghasilkan kesalahan karena dibuat dalam metode statis Utama, dan
bukan instans kelas B.

Anggota struct tidak dapat dilindungi karena struct tidak dapat diwariskan.

Dalam contoh ini, kelas DerivedPoint berasal dari Point. Oleh karena itu, Anda dapat mengakses
anggota kelas dasar yang dilindungi langsung dari kelas turunan.
class Point
{
protected int x;
protected int y;
}

class DerivedPoint: Point


{
static void Main()
{
var dpoint = new DerivedPoint();

// Direct access to protected members.


dpoint.x = 10;
dpoint.y = 15;
Console.WriteLine($"x = {dpoint.x}, y = {dpoint.y}");
}
}
// Output: x = 10, y = 15

3. Jelaskan cara dan manfaat penggunaan Konstanta dan Enumerasi pada pemrograman!
(Sertakan contoh untuk menjelaskan)

JAWAB :

Konstanta adalah sebuah tempat atau container dari suatu nilai. Sesuai dengan namanya, nilai dari
konstanta bersifat tetap (konstan) dan tidak bisa diubah sepanjang program berjalan. Inilah yang
menjadi pembeda antara konstanta dengan variabel.
Cara Membuat Konstanta C++ dengan Perintah “#define”
Untuk membuat konstanta dalam bahasa C++ terdapat 2 cara: menggunakan keyword #define
atau menggunakan keyword const. Kita akan bahas dengan perintah #define terlebih dahulu

Jika ingin membuat konstanta dengan keyword #define, konstanta ini ditulis sebelum main().
Berikut contoh cara pembuatan konstanta menggunakan #define:
#include <iostream>

using namespace std;

#define PANJANG 8
#define LEBAR 5

int main()
{
cout << "Panjang = " << PANJANG;
cout << "\n";

cout << "Lebar = " << LEBAR;


cout << "\n";

cout << "Luas (panjang*lebar) = " << PANJANG*LEBAR;


cout << "\n";

return 0;
}
Disini saya membuat 2 buah konstanta: PANJANG dan LEBAR. Masing-masing berisi nilai 8
dan 5. Perintah ini harus ditulis sebelum int main().

Format pembuatan konstanta menggunakan perintah #define adalah:

#define nama_konstanta nilai_konstanta


Dalam kode program diatas, perintah #define PANJANG 8 artinya saya membuat konstanta
bernama PANJANG yang di isi nilai 8. Sedangkan perintah #define LEBAR 5 artinya saya
membuat konstanta bernama LEBAR yang di isi nilai 5.

Tipe data enum atau tipe data enumerated adalah tipe data khusus yang isinya bisa kita tentukan
sendiri. Sebagai contoh, kita bisa membuat tipe enum warna yang hanya bisa diisi nilai: merah,
kuning, biru dan ungu. Atau tipe enum nama_hari yang hanya bisa di isi nama-nama hari seperti
senin, selasa, rabu, dst.

Setelah di definisikan, data yang bisa diinput hanya nilai yang telah ditentukan saja, tidak bisa di
isi nilai lain.
#include <iostream>

using namespace std;

enum nama_hari {minggu, senin,selasa,rabu,kamis,jumat,sabtu};

int main()
{
nama_hari var1;
var1 = senin;
cout << var1 << endl;

var1 = rabu;
cout << var1 << endl;

var1 = sabtu;
cout << var1 << endl;

return 0;
}
Hasil kode program:

1
3
6
Dalam kode program ini pendefinisian enum nama_hari dilakukan pada baris 5. Kemudian di
dalam function main(), variabel var1 di deklarasikan agar bertipe data nama_hari di baris 9. Cara
pendeklarasian ini mirip seperti tipe data biasa, hanya saja sekarang menggunakan tipe data enum
nama_hari.

Selanjutnya var1 di isi dengan nilai senin, rabu, dan sabtu secara bergantian. Setelah itu isi
variabel var1 ditampilkan dengan perintah cout.

Dari hasil kode program, terlihat bahwa nilai yang tersimpan dalam var1 adalah angka, atau lebih
tepatnya index dari posisi setiap nilai tipe data enum.

Sebagai contoh, pada saat pendefinisian enum nama_hari, hari senin berada di posisi kedua, yakni
di index 1 (ingat, index mulai dari 0). Maka hasil dari cout << var1 adalah 1. Begitu juga saat
var1 diisi dengan hari sabtu, perintah cout menampilkan angka 6.

Ciri khas dari tipe data enum adalah, kita tidak bisa menginput nilai selain yang sudah
didaftarkan.

4. Apa saja yang dapat diakses oleh class turunan dari Parent Classnya melalui pemrograman!
(Sertakan class diagram bila perlu)
JAWAB :

class Vehicle // base class (parent)


{
public string brand = "Ford"; // Vehicle field
public void honk() // Vehicle method
{
Console.WriteLine("Tuut, tuut!");
}
}

class Car : Vehicle // derived class (child)


{
public string modelName = "Mustang"; // Car field
}

class Program
{
static void Main(string[] args)
{
// Create a myCar object
Car myCar = new Car();

// Call the honk() method (From the Vehicle class) on the myCar object
myCar.honk();

// Display the value of the brand field (from the Vehicle class) and the value of the modelName
from the Car class
Console.WriteLine(myCar.brand + " " + myCar.modelName);
}
}

II. (60 poin)


5. Sebuah mesin cuci mobil otomatis memiliki sebuah tombol untuk memproses sebuah mobil di
depan pintu masuk mesin. Mesin dapat mendeteksi ada atau tidaknya mobil di depan pintu
masuk. Mesin cuci mobil otomatis tersebut memiliki kendali terhadap suatu pompa untuk
mengalirkan air ke sistem mesin cuci apabila diperlukan. Mesin cuci mobil juga memiliki sebuah
lubang cairan detergen. Ada atau tidaknya cairan detergen dapat dideteksi juga. Tombol proses
pencucian mobil dapat ditekan untuk memulai proses cucian, namun dapat ditekan kembali untuk
mematikan proses cucian. Proses pencucian mobil dapat dimulai ketika ada mobil di depan pintu
dan cairan detergen terisi.
Buatlah sebuah class MesinCuciMobil sebagai implementasi dari deskripsi di atas! Gunakan
obyek Pump dan Sensor untuk mengakses Pump.On(), Pump.Off(), Sensor.IsCarOnDoor() dan
Sensor.IsShampooExist() untuk menyalakan dan mematikan pompa, serta sensor pintu dan
detergen yang mengembalikan nilai boolean. Dan gunakan obyek Timer bila perlu.
JAWAB :
using System;
using System.Timers;

class Sensor
{
public bool carOnDoor {get; set;}
public bool shampooAvailable {get; set;}

public Sensor();

public bool IsCarOnDoor()


{
return carOnDoor;
}

public bool IsShampooExist()


{
return shampooAvailable;
}
}

class Pump
{
public bool status = false;
public bool isOn {get; set;}

public Pump();

public void On() {


status = true;
}

public void Off() {


status = false;
}
}

class MesinCuciMobil
{
public MesinCuciMobil();

public bool Wash() {


if (sensor.IsCarOnDoor() && sensor.IsShampooExist()) {
pump.On();
// sleep for x mins
}

pump.Off();
}

private Pump pump;


private Sensor sensor;
private static System.Timers.Timer aTimer;
}

6. Buatlah sebuah class mesin cuci mobil lain dengan menurunkan MesinCuciMobil dari No. 5,
kemudian tambahkan method-method lain untuk proses mengeringkan selama 1 jam! Anda dapat
mengakses obyek Dryer.On() dan Dryer.Off() untuk menyalakan dan mematikan pengering.
JAWAB :
class MesinCuciMobilLain : MesinCuciMobil
{
public MesinCuciMobilLain;

public bool Wash()


{
if (sensor.IsCarOnDoor() && sensor.IsShampooExist())
{
pump.On();
// sleep for x mins
}

pump.Off();
}
private Pump pump;
private Sensor sensor;
private static System.Timers.Timer aTimer;
}

7. Override atau overload sebuah fungsi pencucian pada MesinCuciMobil di No. 5 agar dapat
melakukan proses pencucian mobil hanya dengan sekali tekan/panggil fungsi/tombol tersebut!
JAWAB :
class MesinCuciMobilLain : MesinCuciMobil
{
public MesinCuciMobilLain;

public bool Wash()


{
if (sensor.IsCarOnDoor() && sensor.IsShampooExist())
{
pump.On();
// sleep for x mins
}

pump.Off();
}

private Pump pump;


private Sensor sensor;
private static System.Timers.Timer aTimer;
}

Anda mungkin juga menyukai