Class adalah blueprint atau template untuk membuat object. Class mendefinisikan properti dan method yang akan dimiliki oleh object.
// Contoh class sederhanaclassPerson {// Properties (attributes)String name;int age;// MethodsvoidsayHello() {print('Hello, my name is $name'); }voidhaveBirthday() { age++;print('Happy birthday! Now I am $age years old'); }}voidmain() {// Membuat object dari class Personvar person1 =Person(); person1.name ='Budi'; person1.age =25;// Mengakses method person1.sayHello(); person1.haveBirthday();}
Properties dan Methods
6.2 Constructor
Default Constructor
Named Constructor
Factory Constructor
6.3 Inheritance
Basic Inheritance
Abstract Class
6.4 Encapsulation
Private Members dan Getters/Setters
6.5 Praktek: Program Sistem Perpustakaan Sederhana
Latihan Mandiri
Tambahkan fitur untuk mengedit informasi buku dan member
Implementasikan sistem denda untuk keterlambatan pengembalian
Tambahkan fitur pencarian buku berdasarkan judul atau penulis
Buat sistem reservasi buku yang sedang dipinjam
Implementasikan fitur untuk melihat history peminjaman
Tips OOP
Gunakan private members (diawali dengan _) untuk encapsulation
Manfaatkan inheritance untuk mengurangi duplikasi kode
Gunakan abstract class untuk template yang akan diimplementasikan
Pilih constructor yang sesuai dengan kebutuhan
Validasi input di constructor atau setter
Gunakan getter/setter untuk akses kontrol yang lebih baik
class Car {
// Properties
String brand;
String model;
int year;
int _mileage = 0; // Private property
// Getter
int get mileage => _mileage;
// Setter
set mileage(int value) {
if (value >= 0) {
_mileage = value;
}
}
// Method
void drive(int kilometers) {
if (kilometers > 0) {
_mileage += kilometers;
print('Driving $kilometers km. Total mileage: $_mileage');
}
}
// Method dengan return value
String getInfo() {
return '$year $brand $model';
}
}
class Student {
String name;
int age;
// Default constructor
Student(this.name, this.age);
void introduce() {
print('Hi, I am $name and I am $age years old');
}
}
class Rectangle {
double width;
double height;
// Regular constructor
Rectangle(this.width, this.height);
// Named constructor
Rectangle.square(double size)
: width = size,
height = size;
// Named constructor with initializer list
Rectangle.fromMap(Map<String, double> map)
: width = map['width'] ?? 0,
height = map['height'] ?? 0;
double get area => width * height;
}
void main() {
var rect1 = Rectangle(10, 5);
var rect2 = Rectangle.square(10);
var rect3 = Rectangle.fromMap({'width': 10, 'height': 5});
}