MODUL PRAKTIKUM PEMROGRAMAN BERORIENTASI OBJEK

MODUL PRAKTIKUM PEMROGRAMAN BERORIENTASI OBJEK

Sistem Presensi Mahasiswa menggunakan Dart

Capaian Pembelajaran

Setelah mengikuti praktikum ini, mahasiswa diharapkan dapat:

  1. Memahami konsep 4 pilar OOP (Encapsulation, Inheritance, Polymorphism, dan Abstraction)

  2. Mengimplementasikan 4 pilar OOP menggunakan bahasa Dart

  3. Membuat sistem presensi mahasiswa sederhana dengan pendekatan OOP

Dasar Teori

1. Object-Oriented Programming (OOP)

OOP adalah paradigma pemrograman yang berfokus pada konsep objek yang memiliki data dan kode. Struktur data dalam OOP dirancang sebagai objek yang memiliki properties (atribut) dan methods (fungsi).

2. Empat Pilar OOP

  1. Abstraction: Menyembunyikan kompleksitas dengan menunjukkan hanya fitur-fitur penting dari objek

  2. Encapsulation: Membungkus data dan method dalam satu unit/objek

  3. Inheritance: Kemampuan sebuah class untuk mewarisi properties dan methods dari class lain

  4. Polymorphism: Kemampuan objek untuk memiliki berbagai bentuk method yang sama

Alat dan Bahan

  1. Dart SDK (minimal versi 2.15.0)

  2. Visual Studio Code atau IDE lainnya

  3. Git (opsional)

  4. Terminal atau Command Prompt

Langkah Percobaan

Percobaan 1: Implementasi Abstract Class (Abstraction)

// Buat file person.dart
abstract class Person {
  String name;
  String id;
  
  Person(this.name, this.id);
  
  void displayInfo(); // Abstract method
}

Tugas:

  1. Jelaskan mengapa kita menggunakan abstract class?

  2. Apa perbedaan abstract class dengan interface?

Percobaan 2: Implementasi Inheritance

// Buat file student.dart
class Student extends Person {
  String major;
  List<Attendance> attendanceHistory = [];
  
  Student(String name, String id, this.major) : super(name, id);
  
  @override
  void displayInfo() {
    print('Mahasiswa: $name (NIM: $id)');
    print('Jurusan: $major');
  }
}

Tugas:

  1. Tambahkan property tambahan pada class Student

  2. Implementasikan method baru untuk menampilkan riwayat presensi

Percobaan 3: Implementasi Encapsulation

// Buat file course.dart
class Course {
  final String _courseId;
  final String _courseName;
  final String _lecturer;
  
  Course(this._courseId, this._courseName, this._lecturer);
  
  // Getters
  String get courseId => _courseId;
  String get courseName => _courseName;
  String get lecturer => _lecturer;
}

Tugas:

  1. Tambahkan setter dengan validasi

  2. Jelaskan pentingnya encapsulation dalam konteks ini

Percobaan 4: Implementasi Polymorphism

// Buat file attendance.dart
abstract class Attendance {
  DateTime dateTime;
  Course course;
  String status;
  
  Attendance(this.dateTime, this.course, this.status);
  String getAttendanceInfo();
}

class OfflineAttendance extends Attendance {
  String room;
  
  OfflineAttendance(DateTime dateTime, Course course, String status, this.room)
      : super(dateTime, course, status);
  
  @override
  String getAttendanceInfo() {
    return 'Presensi Offline - Ruang: $room';
  }
}

class OnlineAttendance extends Attendance {
  String platform;
  
  OnlineAttendance(DateTime dateTime, Course course, String status, this.platform)
      : super(dateTime, course, status);
  
  @override
  String getAttendanceInfo() {
    return 'Presensi Online - Platform: $platform';
  }
}

Tugas:

  1. Tambahkan satu jenis attendance baru (misal: HybridAttendance)

  2. Implementasikan method khusus untuk jenis attendance baru tersebut

Percobaan 5: Implementasi Sistem Lengkap

// Buat file main.dart
void main() {
  // Inisialisasi Course
  var mobileProgramming = Course('MK001', 'Pemrograman Mobile', 'Dr. Budi');
  
  // Inisialisasi Student
  var student = Student('John Doe', '2024001', 'Teknik Informatika');
  
  // Menambahkan presensi
  student.addAttendance(
    OfflineAttendance(
      DateTime.now(),
      mobileProgramming,
      'Hadir',
      'Lab Mobile 01'
    )
  );
  
  // Menampilkan informasi
  student.displayInfo();
  student.showAttendanceHistory();
}

Tugas:

  1. Tambahkan minimal 3 mahasiswa dan 2 mata kuliah

  2. Implementasikan sistem presensi untuk satu semester penuh

Latihan Mandiri

  1. Buatlah class Lecturer yang merupakan turunan dari Person

  2. Implementasikan sistem validasi presensi dengan batasan waktu

  3. Tambahkan fitur untuk mengekspor riwayat presensi ke format CSV

  4. Implementasikan sistem perhitungan persentase kehadiran

  5. Buatlah interface untuk menangani notifikasi ketika presensi berhasil dilakukan

Kriteria Penilaian

  1. Ketepatan implementasi 4 pilar OOP (40%)

  2. Kelengkapan fitur sistem presensi (30%)

  3. Kerapian dan dokumentasi kode (15%)

  4. Pengembangan fitur tambahan (15%)

Referensi

  1. Dart Documentation - https://dart.dev/guides

  2. Clean Code: A Handbook of Agile Software Craftsmanship - Robert C. Martin

Kesimpulan

Dalam praktikum ini, mahasiswa telah mempelajari dan mengimplementasikan 4 pilar OOP dalam konteks sistem presensi mahasiswa. Pemahaman dan implementasi konsep-konsep ini sangat penting dalam pengembangan software yang terstruktur dan mudah dimaintain.

Tugas Akhir

Kembangkan sistem presensi ini dengan menambahkan:

  1. Database persistence menggunakan SQLite

  2. User authentication dan authorization

  3. REST API untuk akses mobile

  4. Unit testing untuk semua class utama

  5. UI sederhana menggunakan Flutter

Catatan: Dokumentasikan semua pengembangan dan tambahkan komentar yang jelas pada kode.

Last updated