Tugas Pertemuan 6 PPL - Low Level Design

Nama Akmal Sulthon Fathulloh
NRP 5025211047
Kelas PPL - A

Low Level Design (LLD) adalah proses dalam pengembangan perangkat lunak di mana detail teknis dari sebuah sistem atau komponen sistem didefinisikan dengan sangat rinci. LLD berada di tingkat yang lebih mendetail daripada Desain Tingkat Tinggi (High Level Design) dan lebih dekat dengan implementasi aktual dalam bahasa pemrograman tertentu. Dalam LLD, fokus utamanya adalah pada implementasi teknis dari rancangan yang dibuat dalam tahap Desain Tingkat Tinggi. Ini melibatkan pembuatan diagram, spesifikasi, dan dokumen teknis lainnya yang menjelaskan bagaimana setiap fitur atau komponen sistem akan diimplementasikan. Pada pertemuan kelima mata kuliah Perancangan Perangkat Lunak kali ini, kita diminta untuk berlatih membuat high-level design (HLD) dan low-level design (LLD) dari sebuah dokumentasi pengembangan perangkat lunak, bisa dari tugas akhir, kerja praktik, maupun dokumen perusahaan. Berikut adalah referensi dokumen yang saya gunakan.

Deskripsi Umum

Perangkat lunak pada dokumentasi di atas bertajuk "Rancang Bangun Aplikasi Travel Online Berbasis Android".

System Requirements

Kebutuhan Fungsional

  • Pengguna dapat melihat jadwal keberangkatan travel berupa rute kota asal hingga kota tujuan, hari dan waktu keberangkatan
  • Pengguna memesan tiket dengan memasukkan data diri yang terdiri dari nama dan nomor hp
  • Pengguna dapat melihat rute, jarak, dan harga jika sudah memasukkan alamat asal dan alamat tujuan

Kebutuhan Non-fungsional

Kebutuhan non-fungsional (non-functional requirements) tidak dijelaskan secara spesifik dalam jurnal di atas. Namun, berikut adalah beberapa kebutuhan non-fungsional yang umumnya diperlukan dalam pengembangan perangkat lunak tersebut.

  • Performa: Aplikasi harus responsif dan tidak lambat saat digunakan
  • Keamanan: Data pengguna harus terenkripsi dan tidak mudah diakses oleh pihak yang tidak berhak
  • Usability: Aplikasi harus mudah digunakan oleh pengguna
  • Portabilitas: Aplikasi harus dapat berjalan di berbagai perangkat Android

High-Level Design (HLD)

Arsitektur Sistem

Aplikasi travel online dibangun berbasis Android dan menggunakan webservice untuk mengirim dan menerima data dari aplikasi ke server. Untuk menjalan aplikasi ini dibutuhkan koneksi internet untuk komunikasi antara klien dan server. Data yang dikirim dan diterima baik oleh Android maupun server tidak bisa dijalankan jika pada smarthphone tidak ada jaringan internet. Pada Praktik menampilkan rute, jarak, dan harga, menggunakan Google Maps Distance Matrix API sehingga dibutuhkan juga koneksi intenet agar fitur ini berjalan. Arsitektur yang digunakan pada sistem digambarkan pada gambar berikut.

Cara Kerja Layanan

Pada aplikasi travel online, proses untuk melakukan pemesanan tiket pertama kali adalah dengan melihat jadwal. Calon penumpang bisa melihat jadwal yang tersedia pada halaman jadwal. Jika ada jadwal yang sesuai dengan keinginan, penumpang bisa melanjutkan pemesanan dengan kembali ke halaman awal lalu memasukkan identitas berupa nama dan nomor hp. Jika sudah mengisikan data diri, pengguna bisa melanjutkan memasukkan alamat penjemputan dan alamat tujuan. Aplikasi akan menampilkan rute, jarak dan biaya berdasarkan alamat yang dimasukkan pengguna. Diagram alur bisa dilihat pada gambar di bawah.

Desain Model Data

Berikut adalah model data yang digunakan dalam aplikasi ini.

Low-Level Design (LLD)

Perangkat Bantu Implementasi Aplikasi

Aplikasi diimplementasikan dan dikembangkan dalam lingkungan pemrograman dengan spesifikasi berikut ini:

  • Windows 10
  • Android Studio sebagai IDE
  • Android SDK
  • Android Development Tools
  • Ponsel pintar Android Redmi 1S
  • Emulator Android Studio
  • XAMPP sebagai Apache Server

Komponen dan Antarmuka

Komponen Jadwal

Pada proses melihat jadwal, sistem akan menampilkan data yang diambil dari database server. Sistem menggunakan retrofit untuk mengubah REST API ke Interface Java. Untuk mengubah JSON string menjadi JAVA objek menggunakan library GSON.

Implementasi Membuat Tabel Jadwal


CREATE TABLE `coba_json` (
  `id` int(11) NOT NULL,
  `hari` varchar(10) NOT NULL,
  `kotaasal` varchar(25) NOT NULL,
  `kotatujuan` varchar(25) NOT NULL,
  `jam` time NOT NULL
)

Implementasi Webservice Menampilkan Jadwal


public class TravelRestManager {
  private TravelRestService mRestService;
  public TravelRestService getmRestService() {
    if(mRestService == null) {
      Retrofit retrofit = new Retrofit.Builder().baseUrl(Constants.BASE_URL).addConverterFactory(GsonConverterFactory.create()).build();
      mRestService = retrofit.create(TravelRestService.class);
    }
  return mRestService;
  }
}

Implementasi Mengambil Data dari Database


public void onBindViewHolder(RecyclerView.ViewHolderholder, int position) {
  JadwalVH vh = (JadwalVH) holder;
  Jadwal item = mItems.get(position);
  vh.tv_hari.setText(item.hari);
  vh.tv_rute.setText(item.kotaAsal + " - " + item.kotaTujuan);
  vh.tv_jam.setText(item.jam);
  vh.itemView.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View view) {
    }
  });
}

Implementasi Menampilkan Jadwal


public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) {
  JadwalVH vh = (JadwalVH) holder;
  Jadwal item = mItems.get(position);
  vh.tv_hari.setText(item.hari);
  vh.tv_rute.setText(item.kotaAsal + " - " + item.kotaTujuan);
  vh.tv_jam.setText(item.jam);
  vh.itemView.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View view) {
    }
  });
}

Komponen Pemesanan Tiket

Pada fitur memesan tiket, pengguna memasukkan nama dan nomor hp kemudian akan disimpan ke server oleh sistem.

Implementasi Membuat Tabel Penumpang


CREATE TABLE `penumpang` (
  `ID_PENUMPANG` varchar(10) NOT NULL,
  `NAMA_PENUMPANG` text NOT NULL,
  `NO_HP` varchar(12) NOT NULL
)

Implementasi Memesan Tiket


simpan.setOnClickListener(new View.OnClickListener() {
  public void onClick(View v) {
    ArrayList postParameters = new ArrayList();
    postParameters.add(new BasicNameValuePair("nama", namax.getText().toString()));
    postParameters.add(new BasicNameValuePair("nohp", nohpx.getText().toString()));
  }
});

Komponen Menampilkan Rute, Jarak, dan Harga

Pada fitur Menampilkan Rute, Jarak, dan Harga, pertama pada tampilan ditampilkan peta dengan fragmen ditunjukkan dalam kode seperti pada Gambar 4.7. Untuk menampilkan rute ditunjukkan pada Gambar 4.8 dan untuk Perhitungan jarak ditunjukkan pada gambar 4.9.

Implementasi Tampilan Peta


<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:map="http://schemas.android.com/apk/resauto" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical">
<fragment android:id="@+id/map" android:name="com.google.android.gms.maps.SupportMapFragment" android:layout_width="match_parent" android:layout_height="match_parent" />
</LinearLayout>

Implementasi Rute


public void onDirectionFinderStart() {
  progressDialog = ProgressDialog.show(this, "Please wait.", "Finding direction..!", true);
  if (originMarkers != null) {
    for (Marker marker:originMarkers) {
      marker.remove();
    }
  }
  if (destinationMarkers != null) {
    for (Marker marker:destinationMarkers) {
      marker.remove();
    }
  }
  if (polylinePaths != null) {
    for (Polyline polyline:polylinePaths) {
      polyline.remove();
    }
  }
}

Implementasi Jarak


public void onDirectionFinderSuccess(List routes) {
  progressDialog.dismiss();
  polylinePaths = new ArrayList<>();
  originMarkers = new ArrayList<>();
  destinationMarkers = new ArrayList<>();
  
  int cost = 1000;
  
  for (Route route : routes) {
    mMap.moveCamera(CameraUpdateFactory.newLatLngZoom(route.startLocation, 16));
    ((TextView) findViewById(R.id.tvDuration)).setText(route.duration.text);
    ((TextView) findViewById(R.id.tvDistance)).setText(route.distance.text);
    ((TextView) findViewById(R.id.tvCost)).setText("14000");
    originMarkers.add(mMap.addMarker(new MarkerOptions().icon(BitmapDescriptorFactory.fromResource(R.drawable.start_blue)).title(route.startAddress).position(route.startLocation)));

    destinationMarkers.add(mMap.addMarker(new MarkerOptions().icon(BitmapDescriptorFactory.fromResource(R.drawable.end_green)).title(route.endAddress).position(route.endLocation)));
    PolylineOptions polylineOptions = new PolylineOptions().geodesic(true).color(Color.BLUE).width(10);

    for (int i = 0; i < route.points.size(); i++)
      polylineOptions.add(route.points.get(i));
    
    polylinePaths.add(mMap.addPolyline(polylineOptions));
  }
}

Tampilan Aplikasi

Tampilan Antarmuka Jadwal

Tampilan Form Pemesanan

Tampilan Rute, Jarak, dan harga

Referensi

https://kuliahppl.blogspot.com/2024/04/low-level-design.html

Komentar

Postingan populer dari blog ini

Tugas Pertemuan 2 PPL - Identifikasi Proses PPL

Tugas Pertemuan 5 PPL - High Level Design

Evaluasi Tengah Semester Perancangan Perangkat Lunak