# Tugas Pendahuluan Modul 8 ``` Nama : Hasan Abdullah Azzam NPM : 2406428314 ``` > Note: Soal Programming tidak perlu dicantumkan referensi, hanya soal Teori saja yang perlu referensi minimal 2. ## Teori ### 1. Jelaskan apa itu class dan object. Berikan contoh penggunaan class dan object serta tunjukkan bagian mana yang merupakan class ataupun object dalam bahasa pemrograman C++! (10 poin) --- Class adalah tipe data buatan yang berfungsi sebagai cetak biru (blueprint) yang merepresentasikan kelompok objek yang kemiripan dalam sifat dan perilaku. class mendefinisikan atribut (variabel/data) dan method (fungsi) yang dimiliki objek tersebut. Sedangkan object merupakkan var nyata yang dapat diidentifikasi serta memiliki karakteristik dan perilaku tertentu. Dalam bahasa C++, objek merupakan instansiasi (perwujudan) dari sebuah kelas. class seperti tipedata sedangkan object variabel dari tipedata class. ```cpp #include <iostream> using namespace std; class Mobil { public: string merk; int tahun; void tampilkanInfo() { //fungsi untuk menampilkan data object } }; int main() { //contoh object, dibuat dengan cara menginilisiasikanya Mobil mobilSaya; // Mengisi nilai untuk tiap data di objectrtertentu mobilSaya.merk = "Toyota"; mobilSaya.tahun = 2020; // Memanggil fungsi dari class melalui object mobilSaya.tampilkanInfo(); return 0; } ``` ### Referensi: - “Pengertian Methode, Class dan Objek dalam OOP,” Himpunan Mahasiswa Sistem Informasi. https://student-activity.binus.ac.id/himsisfo/2016/07/pengertian-methode-class-dan-objek-dalam-oop/ [Diakses: 20-April-2025] - GeeksforGeeks, “Object Oriented Programming in C++ - GeeksforGeeks,” GeeksforGeeks, Aug. 08, 2015. https://www.geeksforgeeks.org/object-oriented-programming-in-cpp/ [Diakses: 20-April-2025] ‌ --- ### 2. Jelaskan apa itu constructor. Berikan contoh penggunaan constructor dalam bahasa pemrograman C++! (10 poin) Constructor adalah metode khusus dalam kelas yang digunakan untuk menginisialisasi objek saat objek dibuat. secara umum c++ akan membuat contructor default yang tidak memerlukkan parameter dan harus menginisialisaikan atribut data satu persatu, namum kita bisa membuat contructor parameter untuk menangani maslah ini sehingga atribut data bisa dimasukan dalam parameter iniisasi obejct tanpa constructor ```cpp #include <iostream> using namespace std; class Mobil { public: string merk; int tahun; }; int main() { //inilisasi object tanpa parameter Mobil mobilSaya; // Mengisi nilai untuk tiap atribut data satu satu mobilSaya.merk = "Toyota"; mobilSaya.tahun = 2020; return 0; ``` menggunakkan constructor ```cpp #include <iostream> #include <string> using namespace std; class Mobil { private: string merk; int tahun; public: //membangun contructor Mobil(string m, int t) { merk = m; tahun = t; } }; int main() { // Membuat objek dengan parameter Mobil m2("Toyota", 2021); return 0; } ``` ### Referensi: - geeksforgeeks, “Constructors in C++,” GeeksforGeeks, May 28, 2014. https://www.geeksforgeeks.org/constructors-c/ [Diakses: 20-April-2025] ‌ - “Constructor in OOps- Logicmojo,” logicmojo.com. https://logicmojo.com/constructor-in-oops [Diakses: 20-April-2025] ‌ --- ### 3. Jelaskan apa itu encapsulation dan manfaatnya sebagai salah satu konsep OOP! Berikan contoh kode encapsulation dalam C++! (10 poin) Encapsulation adalah metode untuk melindungi atribut data dalam sebuah class, sehingga data hanya bisa diakses atau dimodifikasi melalui fungsi tertentu. Ini memungkinkan kita untuk melakukan validasi inputan, menjaga data tetap konsisten dan aman. ```cpp #include <iostream> using namespace std; class Mobil { private: string merk; int tahun; public: void setMerk(string nama){ merk = nama; } void setTahun(int n){ tahun = n; } }; int main() { Mobil mobilSaya; // akses langsung ke atribut merk akan menyebabkan error. mobilSaya.merk = "Toyota"; //harus menggunakan fungsi set yang ada mobilSaya.setMerk("Toyota"); // hal ini agar data yang masuk bisa tervalidasi dan aman return 0; ``` ### Referensi: - “Encapsulation in C++,” GeeksforGeeks, May 26, 2017. https://www.geeksforgeeks.org/encapsulation-in-cpp/ [Diakses: 21-April-2025] - “C++ Encapsulation and Getters and Setters,” www.w3schools.com. https://www.w3schools.com/cpp/cpp_encapsulation.asp [Diakses: 21-April-2025] ‌ --- ### 4. Jelaskan apa itu access modifier dan jelaskan perbedaan antara public, private, dan protected! (10 poin) **public:** atribut maupun method didalamnya bisa diakses dari mana saja, baik di dalam Class, luar class, maupun turunan/subclass. Cocok untuk fungsi-fungsi umum seperti setter/getter. **private:** atribut maupun method didalamnya hanya bisa diakses dari dalam class itu sendiri. Ini membantu menjaga keamanan data (encapsulation). Biasanya digunakan untuk atribut data utama. **protected:** Mirip seperti private, tapi dapat diakses oleh class turunan. Cocok dalam penggunaan inheritance/turunan ketika subclass/child butuh akses langsung ke atribut/fungsi induknya/parent. ### Referensi: - “Access Modifiers in C++,” GeeksforGeeks, May 20, 2017. https://www.geeksforgeeks.org/access-modifiers-in-c/ [Diakses: 21-April-2025] - “C++ Access Specifiers,” www.w3schools.com. https://www.w3schools.com/cpp/cpp_access_specifiers.asp [Diakses: 21-April-2025] ‌ --- ### 5. Jelaskan apa itu abstraction dalam OOP! Tunjukkan contoh kode abstraction lewat header file dalam C++! (10 poin) Abstraction dalam OOP adalah konsep untuk menyembunyikan detail implementasi dan hanya menampilkan fungsionalitas penting dari suatu objek/class kepada pengguna. Tujuannya adalah agar menyederhanakan code dan pengguna cukup tahu apa yang dilakukan suatu fungsi tanpa harus tahu bagaimana cara kerja di dalamnya. dalam bahsa c++ konsep ini bisa diterapkan melalui header file, dengan membuat header khusus, kita dapat menyederhanakan code di main file dan memungkainkan penggunaan berulang sehingga tidak ada duplikasi, selain itu ini juhga meningkatkan keamanan code karena user hanya melihat data yang ingin diguakan dan esensial saja. Header file ```cpp // Mobil. #ifndef MOBIL_H #define MOBIL_H #include <string> using namespace std; class Mobil { private: string merk; int tahun; public: Mobil(string m, int t); // Constructor void tampilkanInfo(); // Method }; #endif ``` file implementasi ```cpp // Mobil.cpp #include <iostream> #include "Mobil.h" using namespace std; Mobil::Mobil(string m, int t) { merk = m; tahun = t; } void Mobil::tampilkanInfo() { cout << "Merk: " << merk << endl; cout << "Tahun: " << tahun << endl; } ``` Main File ```cpp // main.cpp #include <iostream> #include "Mobil.h" using namespace std; int main() { // kita langsung bisa menggunakan class mobil hanya dengan memasukkan header class nya // hal ini bisa menyederhannakan code di main file dan membuat lebih rapih Mobil mobilSaya("Toyota", 2020); mobilSaya.tampilkanInfo(); return 0; } ``` ### Referensi: - “Abstraction in C++,” GeeksforGeeks, May 27, 2017. https://www.geeksforgeeks.org/abstraction-in-cpp/ [Diakses: 21-April-2025] - Board Infinity, “OOPs Abstraction in C++ | Board Infinity,” Board Infinity, Apr. 27, 2023. https://www.boardinfinity.com/blog/oops-abstraction-in-c/ [Diakses: 21-April-2025] ‌ ## Programming > Gunakan abstraction lewat header file untuk kode di bawah ini. ### 1. Buatlah enumeration bernama `Jurusan` dengan isi sebagai berikut: ```cpp enum Jurusan { ELEKTRO, BIOMEDIK, KOMPUTER }; ``` --- ### 2. Buatlah class bernama `Dosen` dengan isi sesuai deskripsi berikut: - Class ini memiliki atribut private `name` dan `id`. - Buat **constructor** untuk mengisi kedua atribut tersebut. - Tambahkan getter `getName()` dan setter `setName()` serta `setId()` untuk encapsulation. --- ### 3. Buatlah class bernama `Kelas` dengan atribut private: - `namaKelas` (string) - `nilai` (float) - `sks` (int) - `dosen` (objek dari class `Dosen`) Isi dari class: - Buat constructor yang menerima semua atribut sebagai parameter. - Buat method `showDetail()` yang menampilkan informasi nama kelas, nama dosen pengajar, SKS, dan nilai. - Tambahkan method `getNilai()`, `getSKS()`, serta setter `setNilai()`, `setSKS()`, dan `setNamaKelas()`. Contoh output method `showDetail()`: ```bash Kelas: Alpro, Nilai: 3.5, SKS: 3, Dosen: Mr. Budi ``` --- ### 4. Buatlah class `Mahasiswa` dengan atribut private: - `nama` (string) - `id` (int) - `alprog`, `sisben`, `matdis`, `fislis` (tipe Kelas) - `jurusan` (tipe enum Jurusan) Isi dari class: - Constructor untuk mengisi semua atribut. - Method `getIPK()` yang menghitung IPK berdasarkan rumus: ```txt IPK = (nilai * sks dari semua mata kuliah) / total sks ``` - Method `showDetail()` yang menampilkan: - Nama mahasiswa - ID - Jurusan (sebagai string, seperti "Teknik Elektro", dll) - IPK dengan format dua angka di belakang koma - Informasi seluruh kelas mahasiswa (panggil `showDetail()` dari masing-masing objek kelas) Contoh output: ```bash Nama: Ali, ID: 12345, Jurusan: Teknik Elektro Kelas: Alpro, Nilai: 3.5, SKS: 3, Dosen: Mr. Budi Kelas: Sisben, Nilai: 3.7, SKS: 3, Dosen: Mr. Thomas Kelas: Matdis, Nilai: 3.9, SKS: 3, Dosen: Ms. Puff Kelas: Fislis, Nilai: 3.6, SKS: 2, Dosen: Ms. Sandy IPK: 3.66 ``` --- ### 5. Buatlah `main.cpp` dan lakukan hal berikut: - Buat 4 objek dosen: | Object | Nama Dosen | ID | |------------|-------------|-----| | dosenAlpro | Mr. Budi | 10 | | dosenSisben| Mr. Thomas | 11 | | dosenMatdis| Ms. Puff | 12 | | dosenFislis| Ms. Sandy | 13 | - Buat 4 objek kelas: | Object | Nama Kelas | Nilai | SKS | Dosen | |-------------|------------------|-------|-----|---------------| | alprog | Algoritma Pemrograman | bebas | 3 | dosenAlpro | | sisben | Sistem Benam | bebas | 3 | dosenSisben | | matdis | Matematika Diskrit| bebas | 3 | dosenMatdis | | fislis | Fisika Listrik | bebas | 2 | dosenFislis | - Buat 1 objek `Mahasiswa` dengan nama bebas yang mengikuti 4 objek kelas yang sudah diset di atas. --- ### 6. Jalankan program dan pastikan output menampilkan: - Informasi setiap kelas (`alprog`, `sisben`, `matdis`, `fislis`) - Informasi lengkap mahasiswa Contoh output: ```bash Nama: Burhan, ID: 12345, Jurusan: Teknik Elektro Kelas: Alprog, Nilai: 3.8, SKS: 3, Dosen: Pak Budi Kelas: Fismek, Nilai: 3.5, SKS: 3, Dosen: Bu Sari Kelas: Matdis, Nilai: 4, SKS: 2, Dosen: Pak Budi Kelas: Fislis, Nilai: 3.6, SKS: 2, Dosen: Bu Sari IPK: 3.71 ``` --- Nama File 1 :Class.h ```cpp #ifndef Class_H #define Class_H #include<iostream> #include <iomanip> using namespace std; enum Jurusan { ELEKTRO, BIOMEDIK, KOMPUTER }; class Dosen{ private: string name; int id; public: Dosen(string data, int n); string getName(); void setName(string m); void setId(int n); }; class Kelas{ private: string namaKelas; float nilai; int sks; Dosen dosen; public: Kelas(string m,float n, int jml, Dosen data); void showDetail(); float getNilai(); int getSKS(); void setNilai(float m); void setSKS(int n); void setNamaKelas(string n); }; class Mahasiswa{ private: string nama; int id; Kelas alprog,sisben,matdis,fislis; Jurusan jurusan; public: Mahasiswa(string n, int m, Kelas w,Kelas x, Kelas y,Kelas z,Jurusan jur); float getIPK(); string jurusanToString(Jurusan j); void showDetail(); }; #endif ``` Nama File 2 : Class.cpp ```cpp #include "Class.h" Dosen::Dosen(string data, int n){ name = data; id = n; } string Dosen::getName(){ return name; } void Dosen::setName(string m){ name = m; } void Dosen::setId(int n){ id = n; } Kelas::Kelas(string m,float n, int jml, Dosen data) :dosen(data){ namaKelas = m; nilai = n; sks = jml; } void Kelas::showDetail(){ cout<<"Kelas: "<<namaKelas<<", Nilai: "<<nilai<<", SKS: "<<sks<<", Dosen: "<<dosen.getName()<<endl; } float Kelas::getNilai(){ return nilai; } int Kelas::getSKS(){ return sks; } void Kelas::setNilai(float m){ nilai = m; } void Kelas::setSKS(int n){ sks = n; } void Kelas::setNamaKelas(string n){ namaKelas = n; } Mahasiswa::Mahasiswa(string n, int m, Kelas w,Kelas x, Kelas y,Kelas z,Jurusan jur) :alprog(w),sisben(x),matdis(y),fislis(z){ nama = n; id = m; jurusan = jur; } float Mahasiswa::getIPK(){ float ipk = (alprog.getNilai()*alprog.getSKS()+sisben.getNilai()*sisben.getSKS()+matdis.getNilai()*matdis.getSKS()+fislis.getNilai()*fislis.getSKS())/ (alprog.getSKS()+sisben.getSKS()+matdis.getSKS()+fislis.getSKS()); return ipk; } string Mahasiswa::jurusanToString(Jurusan j) { switch(j) { case ELEKTRO: return "Teknik Elektro"; case BIOMEDIK: return "Teknik Biomedik"; case KOMPUTER: return "Teknik Komputer"; default: return "Jurusan Tidak Diketahui"; } } void Mahasiswa::showDetail(){ cout<<"Nama: "<<nama<<", ID: "<<id<<", Jurusan: "<<jurusanToString(jurusan)<<endl; alprog.showDetail(); sisben.showDetail(); matdis.showDetail(); fislis.showDetail(); cout<<"IPK: "<< fixed << setprecision(2)<<getIPK()<<endl; } ``` Nama File 3 : TP 8.cpp(main file) ```cpp #include "Class.h" int main() { // Membuat objek dosen Dosen dosenAlprog("Mr. Budi", 10); Dosen dosenSisben("Mr. Thomas", 11); Dosen dosenMatdis("Ms. Puff", 12); Dosen dosenFislis("Ms. Sandy", 13); // Membuat objek kelas Kelas alprog("Algoritma Pemrograman", 3.7, 3, dosenAlprog); Kelas sisben("Sistem Benam", 3.8, 3, dosenSisben); Kelas matdis("Matematika Diskrit", 3.5, 3, dosenMatdis); Kelas fislis("Fisika Listrik", 3.9, 2, dosenFislis); // Membuat objek mahasiswa Mahasiswa mhs("Hasan", 202210, alprog, sisben, matdis, fislis, ELEKTRO); // Menampilkan detail mahasiswa mhs.showDetail(); return 0; } ``` SS Output Program Kalian : ![image](https://hackmd.io/_uploads/BJXVW5Xyge.png)