PBO : TM 8 Class Strings

TM 08 : Class Strings

a. Desain class String. Klas ini mempunyai dua data anggota dengan level akses private, yaitu string aktual s yang disajikan dalam bentuk pointer char * s dan len untuk menyajikan panjang string s. Fungsi anggotanya, level akses public, adalah default constructor String(), constructor String (char*, unsigned), constructor String (const char*), copy constructor String (const String &) dan destructor ~String(). Dalam desain ini semua fungsi anggota harus berbentuk prototipe.

#include<iostream>

using namespace std;

class String{
private:
	char *s;
	unsigned int len;
public:
	String(){}
	String(char *, unsigned);
	String(const char*);
	String(const String&);
	~String(){}
};

b. Selanjutnya implementasikan definisi semua fungsi anggota di luar class String. Ingat jangan lupa gunakan scope resolution operator :: .

String :: String(){
	s="";
	len=0;
}

String :: String(char * s, unsigned int len){
	for(int i=0; is[i]=s[i];
		this->s[i]='';
	}
}

String :: String(const char* s){
	for(int i=0; is[i]=s[i];
		this->s[i]='';
	}
}

String :: String(const String& ss){
	for(int i=0; is[i]=ss.s[i];
		this->s[i]='';
	}
}

String :: ~String(){}

c. Terakhir, tulislah fungsi main() sebagai driver untuk menguji desain kamu.

int main(){
const char *ss = "Halo";
char *s = "Hai";
String w;
String x(s, strlen(s));
String *y;
String(z);
cin.get();
return 0;
}

I AM PROUD AS BINUSIAN

Soal dan Jawaban PBO: ADT Array and Struct

NAMA: Riyn Winesdyo W.
NIM: 1701292866
KELAS: 02PPT

TM 03 : ADT Array dan Struct

Array adalah suatu ADT. Seperti halnya ADT lain, array mempunyai data anggota dan operasi, metode atau fungsi anggota. Elemen array diakses berdasarkan posisinya di dalam array relatif terhadap elemen pertama. Operasi utama array adalah store dan retrieve. Operassi store untuk menyimpan elemen e di indeks i array A[] adalah A[i] = e sedangkan operasi retrieve untuk mengambil suatu elemen dari array A[] di indeks i dan disimpan di elemen e adalah e = A[i].

a. Desain class Array berdasarkan uraian ADT Array di atas dengan ketentuan level akses data anggota adalah private dan level akses fungsi anggota adalah public. Selain itu jangan lupa untuk menambahkan constructor dan destructor pada class tersebut. Dalam desain ini, semua fungsi anggota kecuali constructor dan destructor, harus berbentuk prototype.

const int MAX =10;
class Array {
private :
int A[MAX];
int i, e;
public :
Array() { for ( i =0; i < MAX; i++) A[i] = 0; }
~Array();
void store( int, int );
int retrieve (int, int);
};

b. Selanjutnya definisikan semua fungsi anggota di luar class Array. Ingat jangan lupa untuk menggunakan scope resolution operator ::

void Array :: store (int i, int e) { A[i] = e; }
int Array :: retrieve (int i, int e) { e = A[i]; }

c. Terakhir, tulis fungsi main() sebagai driver untuk menguji desain kamu.

void main() {
int e;
Array a;
a.store(1,11);
a.store(2,22);
a.store(3,33);
cout << endl << a,retrieve (3,e);
cout << endi << a.retrieve(2,e);
cout << endl << a.retrieve(1,e);
}

Seperti halnya array, struct adalah suatu ADT yang mempunyai data anggota dan operasi, metode atau fungsi anggota. Elemen, member atau field struct diakses menggunakan operator dot atau pointer ->. Bentuk umumnya adalah sebagai berikut:

<structure_variabel>.<field_name>
<structure_pointer> -> <field_name>

Operasi utama di struct adalah store(e) dan retrieve(). Operassi store(e) untuk menyimpan elemen e di field i struct s adalah s.i = e sedangkan operasi retrieve() untuk mengambil suatu elemen dari struct s di field i dan disimpan di elemen e adalah e = s.i.

a. Diketahui struktur dtMhs dengan tiga data anggota : nim, nama dan IPK serta fungsi anggota store() dan retrieve(). Desain class dtMhs berdasarkan uraian di atas dengan ketentuan level akses data anggota adalah private dan level akses fungsi anggota adalah public. Selain itu jangan lupa untuk menambahkan constructor dan destructor pada class tersebut. Dalam desain ini, semua fungsi anggota kecuali constructor dan destructor, harus berbentuk prototype.

#include<iostream>
using namespace std;
struct data{
	int i;
};

class Struct{
private :
	data s;
	int e;
public :
	void store(int e);
	int retrieve();
	Struct(){
		s.i=0;
	}
	~Struct(){}
};

class dtMhs{
private :
	char nama[100];
	char nim[100];
	float IPK;
public :
	void storeNama(char e[100]);
	char* retrieveNama();
	void storeNim(char e[100]);
	char* retrieveNim();
	void storeIPK(float e);
	float retrieveIPK();
	
	dtMhs(){}
	~dtMhs(){}
};

b. Selanjutnya definisikan semua fungsi anggota di luar class Struct Ingat jangan lupa untuk menggunakan scope resolution operator ::

void Struct::store(int e){
	s.i = e;
}

int Struct::retrieve(){
	e = s.i;
	return e;
}
void dtMhs::storeNama(char e[100]){
	strcpy(nama,e);
}

char* dtMhs::retrieveNama(){
	return nama;
}

void dtMhs::storeNim(char e[100]){
	strcpy(nim, e);
}

char* dtMhs::retrieveNim(){
	return nim;
}

void dtMhs::storeIPK(float e){
	IPK=e;
}

float dtMhs::retrieveIPK(){
	return IPK;
}

c. Terakhir, tulis fungsi main() sebagai driver untuk menguji desain kamu

void main(){
	dtMhs obj;

	obj.storeNim("1701292866");
	obj.storeNama("Riyn");
	obj.storeIPK(35.80);

	cout<<"NIM  : "<<obj.retrieveNim();
	cout<<endl<<"Nama : "<<obj.retrieveNama();
	cout<<endl<<"IPK  : "<<obj.retrieveIPK();
cin.get();
}

Soal dan Jawaban : TM4 Data and Function Modifier

NAMA: Riyn Winesdyo W.
NIM: 1701292866
Kelas: 02PPT

TM 04 : Class Time

a. Desain klas dengan nama Time yang mempunyai tiga data anggota yaitu hour, minute dan second dengan level akses adalah private. Selain fungsi anggota baku constructor dan destructor, class Time juga mempunyai tiga fungsi anggota lain yang prototipenya adalah sebagai berikut: void setData() , fungsi konstant void geData() dan fungsi konstant void printData(). Tugas ketiga fungsi terakhir ini adalah sebagai berikut: fungsi setData() untuk memberi nilai hour, minute dan second , fungsi getData() untuk mengambil nilai data yang diisi oleh fungsi setData(), sedangkan fungsi printData() untukmencetak ketiga data anggota tersebut.

#include<iostream>
using namespace std;

class Time{
private:
	int hour;
	int minute;
	int second;
public:
	void setData(int hr, int min, int sec){
		hour=hr;
		minute=min;
		second=sec;
	}

		void getData(int hr, int min, int sec)const{
		hr=hour;
		min=minute;
		sec=second;
	}
	
	Time(){
		hour=1;
		minute=1;
		second=1;
	}

	Time(int hr, int min, int sec){
		hour=hr;
		minute=min;
		second=sec;
	}

	void printData()const{
		cout<<"Hour   : "<<hour<<endl;
		cout<<"Minute : "<<minute<<endl;
		cout<<"Second : "<<second<<endl;
	}

	~Time(){}

};

b. Definisikan atau implementasikan constructor dan destructor di dalam klas sedangkan fungsi setData() , getData() dan printData() di luar klas Time. Untuk definisi fungsi yang ada di luar class jangan lupa untuk menggunakan scope resolution operator.

	#include<iostream>
	using namespace std;

class Time{
private:
	int hour;
	int minute;
	int second;
public:
	void setData(int, int, int);
	void getData(int, int, int)const;

	Time(){
		hour=1;
		minute=1;
		second=1;
	}

	Time(int hr, int min, int sec){
		hour=hr;
		minute=min;
		second=sec;
	}

	void printData()const;

~Time(){}

};

void Time::setData(int hr, int min, int sec){
	hour=hr;
	minute=min;
	second=sec;
}

void Time::getData(int hr, int min, int sec)const{
		hr=hour;
		min=minute;
		sec=second;
}

void Time::printData()const{
	cout<<"Hour   : "<<hour<<endl;
	cout<<"Minute : "<<minute<<endl;
	cout<<"Second : "<<second<<endl;
}

c. Berikan alasan mengapa fungsi getData() dan printData() perlu dibuat konstant?

Konstan digunakan agar fungsi hanya bisa dibaca dan tidak bisa diubah. Member fungsi konstan tidak dapat mengubah non-static data member atau memanggil member fungsi yang tidak konstan.

d. Selanjutnya tulis fungsi main() untuk mengetes klas yang Anda desain.

void main(){
	Time obj(3,50,10);
	obj.printData();
	cin.get();
}

I AM PROUD AS A BINUSIAN

Soal dan Jawaban Pemrograman Berorientasi Objek : TM2

NAMA : Riyn Winesdyo W.
NIM : 1701292866
KELAS: 02PPT

TM 02

1. Copy constructor suatu klas dieksekusi jika obyek klas di-copy dengan mekanisme di bawah ini kecuali
a. direct assignment
b. initialization
c. passing by value
c. return by value

2. Fungsi anggota yang otomatis di-create oleh kompilator meskipun ia tidak secara eksplisit ditulis oleh pemrogram dalam definisi klas adalah opsi-opsi di bawah ini kecuali
a. default constructor
b. copy constructor
c. destructor
d. overloaded constructor

3. Level akses utility function atau helper function suatu klas adalah
a. public
b. protected
c. private
d. inline

4. Untuk class X, sintaks copy constructor adalah
a. X(& X)
b. X(const X&)
c. X(const &X)
d. X(X &)

5. C++ class mempunyai
a. satu konstruktor dan satu destructor
b. lebih dari satu konstruktor dan satu destructor
c. satu konstruktor dan lebih dari satu destructor
d. lebih dari satu konstruktor dan lebih dari satu destructor

6. Apa keluaran dari penggalan program berikut ini:

class Rational {
public:
Rational() { cout << “OBYEK LAHIR.\n”; }
~Rational() { cout << “OBYEK MATI. \n”; }
private:
int num, den;
};

main() {
{ Rational x;
cout << “SEKARANG x HIDUP.\n”;
}
cout << “ANTAR BLOK.\n”;
{ Rational y;
cout << “SEKARANG y HIDUP.\n”;
}
}

hasil:
OBYEK LAHIR
SEKARANG x HIDUP
OBYEK MATI
ANTAR BLOK
OBYEK LAHIR
SEKARANG y HIDUP
OBYEK MATI

7. Uraikan apa yang kamu ketahui tentang constructor, user defined constructor, default constructor, parameterized constructor, constructor initialization list, copy constructor dan destructor.
• Constructor adalah method khusus yang mendeskripsikan bagaimana instance of class(object) dibuat. Constructor juga digunakan untuk menginisialisasi nilai dari object yang baru dibuat. (className();)
Constructor memiliki ciri-ciri menggunakan nama yang sama dengan nama class-nya serta tidak memiliki return type.

• User defined constructor dibagi menjadi 2 yaitu re-define default constructor, merupakan constructor yang secara eksplisit memiliki nama yang sama dengan class-nya tetapi memiliki isi yang didefinisikan sendiri oleh user. Constructor ini tidak punya parameter; Overloading constructor, merupakan constructor yang memiliki beberapa parameter. Perilakunya sama seperti function overload.

• Default constructor merupakan constructor yang secara otomatis dibuat oleh compiler saat compile time jika user tidak mendeklarasikan constructor dan tidak mempunyai parameter.

• Parameterized constructor adalah constructor yang dideklarasikan dengan parameter.

• Constructor initialization list digunakan untuk menginisialisasi beberapa member sekaligus. Nama anggota yang diinisialisasi dituliskan setelah parameter formal constructor dan setiap nama anggota diikuti oleh sejumlah argument yang sesua dengan user-defined constructor yang ada.

• Copy constructor merupakan constructor khusus yang digunakan untuk duplikasi isi dasi suatu object ke dalam object baru yang sedang diciptakan. Copy constructor secara otomatis dipanggil ketika deklarasi inisialisasi object diduplikasi, object passed by value ke function, dan object returned by value dari function. (className (const className&);)

• Destructor merupakan function yang terakhir kali dijalankan sebelum siklus hidup object berakhir. Tugasnya untuk deinisialisasi, clean up, dealokasi memory, dll. Nama destructor sama dengan nama class-nya dengan penambahan tanda ~ (tilde) di depan namanya. (~className();)

8. Uraikan apa yang kamu ketahui tentang default arguments di C++. Sebutkan apa saja yang dapat digunakan sebagai devalut value. Mengapa nilai constant tidak dapat digunakan sebagai default value untuk reference variable?
Suatu nilai tertentu yang akan dipakai sebagai argumen bila fungsi tidak dipanggil dengan argumen lengkap. Default values bisa berupa nilai konstan, variabel global, atau function calls.
Nilai constant tidak dapat digunakan sebagai default value untuk reference variable karena reference variable berupa pointer yang menunjuk alamat dari variabel tertentu.

9. Apa yang dimaksud dengan function overloading? Kriteria apa yang digunakan untuk menyatakan bahwa dua fungsi dengan nama yang sama adalah berbeda satu sama lain.
Function overloading berarti terdapat dua atau lebih fungsi dengan penggunaan nama yang sama.

Kriteria yang digunakan untuk menyatakan dua fungsi dengan nama yang sama adalah berbeda bisa dilihat dari return type-nya serta parameternya. Dua fungsi dengan nama sama akan dikatakan berbeda jika return type-nya berbeda. Sedangkan dua fungsi dengan nama sama tidak bisa dikatakan overloaded ketika jumlah parameter kedua fungsi tersebut berbeda, tipe data yang digunakan parameter kedua fungsi berbeda, serta perbedaan urutan parameter.

10. Banyak penulis buku menyatakan bahwa untuk class X paling sedikit mempunyai satu constructor yaitu default constructor dengan prototype X(). Tetapi John Hubbard dalam bukunya Programming with C++ menyatakan bahwa setiap class X paling sedikit mempunyai dua constructor yaitu default X() dan copy constructor yang prototipe sintaksnya adalah X (const X & ), fungsi anggota dengan satu parameter dan pass by constant reference.

Tugas Anda:
a. Kapan copy constructor dieksekusi?

Copy constructor dieksekusi ketika:
– An object is copied by means of a declaration initialization
– An object is passed by value to a function
– An object is returned by value from function

b. Untuk penggalan kode berikut berapa kali copy constructor dieksekusi?

class Rational {
public : Rational(int n, int d) : num(n), den (d) { }
Rational(const Rational & r) : num(r.num), den(r.den)
{ cout << “COPY CONSTRUCTOR CALLED\n”;}
private: int num, den;
};

Rational f(Rational r) {
Rational s = r;
return s;
}

main() {
Rational(22,7);
Rational y(x);
f(y);
}

Copy constructor dieksekusi sebanyak 3 kali di dalam main

I AM PROUD AS A BINUSIAN

Soal dan Jawaban Pemrograman Berorientasi Objek : TM1

NAMA: Riyn Winesdyo W.
NIM: 1701292866
KELAS: 02PPT

TM 01
1. Ada tiga istilah yang saling berkaitan saat kita mulai mempelajari OOP yaitu ADT (Abstract Data Type), encapsulation dan class. Coba uraikan secara rinci apa yang dimaksud istilah-istilah tersebut. Selain itu berikan contoh-contohnya.
Abstract Data Type atau bisa disebut dengan singkatan ADT merupakan cara untuk enkapsulasi/pembungkusan data yang tipe datanya bisa berbeda menjadi suatu tipe data baru. Enkapsulasi merupakan proses pemaketan pada sebuah data yang bertujuan untuk menyembunyikan informasi dari user/information hiding.
ADT pada OOP disebut dengan class. Class terdiri dari 3 bagian yaitu, class name, attribute/data member, dan method/function. Class adalah sebuah konsep OOP yang digunakan untuk enkapsulasi attribute dan method yang memiliki kesamaan behavior.

#include
#include
#include
//——————–
// main program class
//——————–
class data
{
public:
int sks;
int nilaitotal;
void input()
{
cout<>sks;
cout<>nilaitotal;
};
void akhir()
{
total=nilaitotal/sks;
};
float hasil()
{
return total;
};
private:
float total;
};
void main()
{
data mahasiswa;
mahasiswa.input();
mahasiswa.akhir();
cout<<"Nilai IP-nya: "<<mahasiswa.hasil();
}

2. Ada tiga karakteristik yang membedakan OOP dengan procedural programming yaitu ADT, inheritance dan dynamic binding, Dua topik terakhir belum kita pelajari sehingga dalam soal ini kita hanya fokus pada ADT.
a. Apa yang dimaksud dengan ADT?

ADT(Abstract Data Type) merupakan penggabungan berbagai object dengan berbagai maca tipe data beserta dengan fungsinya untuk membentuk suatu tipe data baru. ADT dibuat untuk menghindari pemrograman yang kompleks dengan cara menyederhanakan proses pemrograman.

b. Apa yang dimaksud dengan properties suatu ADT?
Properties suatu ADT merupakan bagian-bagian yang dimiliki di dalam ADT.

• Class Name merupaka nama dari kelas itu sendiri
• Data member/attribute merupakan objek-objek dari kelas
• Method/function merupakan definisi dari objek tersebut(operasi yang ingin user lakukan pada objek)

c. Mengapa kita memerlukan ADT?
Kita memerlukan ADT karena ADT menyederhanakan proses pemrograman yang kompleks sehingga program yang kita buat terorganisir, dapat dimodifikasi, dan dapat dikompilasi secara terpisah. Selain itu, ADT yang mendukung information hiding dapa digunakan untuk menyembunyikan bagian-bagian penting yang tidak perlu diperlihatkan pada user.

d. Bagaimana suatu ADT berhubungan dengan ADT lain?
Suatu ADT berhubungan dengan ADT lain menggunakan access modifier yang merupakan kata kunci yang digunakan untuk menentukan spesifikasi tingkat akses suatu attribute atau method. Kata kunci tersebut adalah private, protected, dan public.

e. Apa yang dimaksud dengan ”…dalam ADT implementasi disembunyikan dari user…” Berikan contohnya.
Implementasi disembunyikan dari user berkaitan dengan information hiding. Information hiding dibagi menjadi 3 yaitu:
• Private(-), dimana attribute dan method hanya bisa diakses oleh class-nya sendiri.
• Protected(#), attribute dan method hanya bisa diakses oleh class itu sendiri dan turunannya.
• Public(+), attribute dan method bisa diakses oleh class-nya sendiri, class lain, atau pun dari lingkungan luar class.

3. Esensinya tidak ada perbedaan mendasar antara struct dan class tetapi kita lebih suka menggunakan class daripada struct. Uraikan mengapa kita lebih suka menggunakan class daripada struct?
Kita lebih suka menggunakan class daripada struct karena penggunaan enkapsulasi pada class. Kita dapat memasukkan attribute bersamaan dengan methodnya dalam satu kelas. Selain itu pada lass terdapat constructor dan destructor yang berguna untuk dealokasi memory. Constructor merupakan method khusus yang dijalankan secara otomatis tanpa harus dipanggil saat instance dibuat. Constructor digunakan untuk inisialisasi nilai terhadap data-data yang terdapat pada kelas yang bersangkutan. Sedangkan destructor secara otomatis akan dipanggil oleh compiler ketika objek meninggalkan blok main().

4. Esensinya class dan struct adalah sama dalam C++. Perbedaan yang signifikan di antara mereka adalah
a. default akses class adalah private sedangkan struct adalah private
b. default akses class adalah private sedangkan struct adalah public
c. default akses class adalah public sedangkan struct adalah private
d. default akses class adalah public sedangkan struct adalah public

5. Interface suatu class terdiri dari
a. data anggota
b. prototipe fungsi anggota
c. implementasi fungsi anggota
d. data anggota dan prototipe fungsi anggota

-d1030-