Tujuan praktikum ini yaitu mahasiswa membuat menginstall kebutuhan Praktikum Aplikasi Mobile menggunakan bahasa Dart pada framework Flutter, mahasiswa menguasai dasar-dasar Bahasa pemrograman Dart serta konsep OOP Dart
buka link https://dart.dev/get-dart lalu ikuti langkah untuk install SDK Dart
Jika menggunakan system operasi MacOS maka dapat mengsintall SDK Dart menggunakan Homebrew
Buka command prompt kemudian pilih directory yang akan digunakan untuk menyimpan proyek dart dan ketikkan dart create halo maka proyek dart pertama dengan nama halo akan terbentuk.
Kode program ini adalah sebuah kalkulator geometri interaktif yang mampu menghitung luas bangun datar (persegi, lingkaran) dan volume bangun ruang (kubus, balok) berdasarkan input dari pengguna. Program ini sepenuhnya dibangun menggunakan pendekatan prosedural. Strukturnya terdiri dari beberapa fungsi terpisah (hitungLuasPersegi, hitungVolumeKubus, dll.), di mana setiap fungsi bertanggung jawab penuh atas satu tugas: mulai dari meminta input, melakukan proses kalkulasi, hingga mencetak hasilnya. Fungsi main bertindak sebagai pusat kendali yang menampilkan menu pilihan kepada pengguna dan mengarahkan alur program ke fungsi yang sesuai menggunakan struktur switch-case.
import 'dart:io';
void hitungLuasPersegi() {
stdout.write("Masukkan panjang sisi: ");
double sisi = double.parse(stdin.readLineSync()!);
double luas = sisi * sisi;
print("Hasil: Luas persegi adalah $luas\n");
}
void hitungLuasLingkaran() {
stdout.write("Masukkan jari-jari: ");
double jariJari = double.parse(stdin.readLineSync()!);
double luas = 3.14 * jariJari * jariJari;
print("Hasil: Luas lingkaran adalah $luas\n");
}
//FUNGSI BANGUN RUANG
void hitungVolumeKubus() {
stdout.write("Masukkan panjang sisi: ");
double sisi = double.parse(stdin.readLineSync()!);
double volume = sisi * sisi * sisi;
print("Hasil: Volume kubus adalah $volume\n");
}
void hitungVolumeBalok() {
stdout.write("Masukkan panjang: ");
double panjang = double.parse(stdin.readLineSync()!);
stdout.write("Masukkan lebar: ");
double lebar = double.parse(stdin.readLineSync()!);
stdout.write("Masukkan tinggi: ");
double tinggi = double.parse(stdin.readLineSync()!);
double volume = panjang * lebar * tinggi;
print("Hasil: Volume balok adalah $volume\n");
}
//FUNGSI UTAMA
void main() {
while (true) {
print("===== Kalkulator Prosedural =====");
print("1. Hitung Luas Persegi");
print("2. Hitung Luas Lingkaran");
print("3. Hitung Volume Kubus");
print("4. Hitung Volume Balok");
print("5. Keluar");
stdout.write("Pilih menu (1-5): ");
String? pilihan = stdin.readLineSync();
switch (pilihan) {
case '1':
hitungLuasPersegi();
break;
case '2':
hitungLuasLingkaran();
break;
case '3':
hitungVolumeKubus();
break;
case '4':
hitungVolumeBalok();
break;
case '5':
print("Program selesai. Terima kasih!");
return;
default:
print("Pilihan tidak valid. Coba lagi.\n");
}
}
}
Kode program ini adalah kalkulator geometri interaktif yang mengimplementasikan paradigma Object-Oriented Programming (OOP) untuk mencapai fungsionalitas yang sama. Perbedaan fundamental terletak pada arsitekturnya, di mana setiap bangun direpresentasikan sebagai sebuah class (Persegi, Lingkaran, dll.) yang mengenkapsulasi data (properti) dan logikanya (method) sendiri. Dalam fungsi main, setelah pengguna memilih menu dan memasukkan data, program akan membuat sebuah objek dari class yang relevan. Proses kalkulasi kemudian didelegasikan kepada objek tersebut dengan memanggil method-nya (misalnya persegi.hitungLuas()). Pendekatan ini secara efektif memisahkan antara logika antarmuka pengguna (dalam main) dengan logika bisnis inti (dalam setiap class), sehingga menghasilkan kode yang lebih terstruktur, modular, dan mudah dikelola.
import 'dart:io';
abstract class BangunDatar {
double hitungLuas();
}
abstract class BangunRuang {
double hitungVolume();
}
class Persegi implements BangunDatar {
double sisi;
Persegi(this.sisi);
@override
double hitungLuas() {
return sisi * sisi;
}
}
class Lingkaran implements BangunDatar {
double jariJari;
Lingkaran(this.jariJari);
@override
double hitungLuas() {
return 3.14 * jariJari * jariJari;
}
}
//CLASS BANGUN RUANG
class Kubus implements BangunRuang {
double sisi;
Kubus(this.sisi);
@override
double hitungVolume() {
return sisi * sisi * sisi;
}
}
class Balok implements BangunRuang {
double panjang, lebar, tinggi;
Balok(this.panjang, this.lebar, this.tinggi);
@override
double hitungVolume() {
return panjang * lebar * tinggi;
}
}
//FUNGSI UTAMA
void main() {
while (true) {
print("===== Kalkulator OOP =====");
print("1. Hitung Luas Persegi");
print("2. Hitung Luas Lingkaran");
print("3. Hitung Volume Kubus");
print("4. Hitung Volume Balok");
print("5. Keluar");
stdout.write("Pilih menu (1-5): ");
String? pilihan = stdin.readLineSync();
switch (pilihan) {
case '1':
stdout.write("Masukkan panjang sisi: ");
double sisi = double.parse(stdin.readLineSync()!);
Persegi persegi = Persegi(sisi);
print("Hasil: Luas persegi adalah ${persegi.hitungLuas()}\n");
break;
case '2':
stdout.write("Masukkan jari-jari: ");
double jariJari = double.parse(stdin.readLineSync()!);
Lingkaran lingkaran = Lingkaran(jariJari);
print("Hasil: Luas lingkaran adalah ${lingkaran.hitungLuas()}\n");
break;
case '3':
stdout.write("Masukkan panjang sisi: ");
double sisiKubus = double.parse(stdin.readLineSync()!);
Kubus kubus = Kubus(sisiKubus);
print("Hasil: Volume kubus adalah ${kubus.hitungVolume()}\n");
break;
case '4':
stdout.write("Masukkan panjang: ");
double panjang = double.parse(stdin.readLineSync()!);
stdout.write("Masukkan lebar: ");
double lebar = double.parse(stdin.readLineSync()!);
stdout.write("Masukkan tinggi: ");
double tinggi = double.parse(stdin.readLineSync()!);
Balok balok = Balok(panjang, lebar, tinggi);
print("Hasil: Volume balok adalah ${balok.hitungVolume()}\n");
break;
case '5':
print("Program selesai. Terima kasih!");
return;
default:
print("Pilihan tidak valid. Coba lagi.\n");
}
}
}