Rabu, 18 Oktober 2017

Bebras.. Only Nine Keys Visualisation

Dari.. juniorukbebras 2014.

Soal




Daniel sedang mengirim pesan dengan handphone jadulnya.
Untuk setiap huruf dia harus menekan angka yang tepat sebanyak 1, 2, 3 atau 4 kali, diikuti henti sejenak.
Jika ingin mengetik 'C' ia harus menekan tombol 2 sebanyak 3 kali, karena 'C' adalah huruf ke 3 dari tombol 2.

Jika ingin mengetik 'HIM' ia harus menekan angka 4, 2kali lalu 4 lagi 3 kali dan angka 6 sekali.

Daniel menekan tepat 6 kali untuk mengetik sebuah nama temanya.

Siapa nama teman yang diketik Daniel?

a. Miriam    b. Iris    c. Emma   d. Ina


 Dibawah ini simulasi nya ..

Senin, 28 November 2016

Design Pattern - Iterator Pattern

Iterator Pattern ?

Iterator pattern adalah mekanisme untuk mengakses koleksi seperti array, recordset pada database, isi directory dan isi file. Tujuan dari pola ini adalah untuk membuat interface yang berfungsi sebagai iterator yang dapat digunakan kembali (reusable). Pada dasarnya pola Iterator memungkinkan kita untuk membakukan dan menyederhanakan kode yang kita buat untuk bergerak melalui koleksi dalam kode anda.

Nih ada Video singkatnya
 


 Nah untuk contoh program yang akan saya tampilkan disini, misalkan kita memiliki daftar channel Radio dan program client ingin menjelajah keseluruh channel satu demi satu berdasarkan tipe channelnya. Contohnya beberapa program client hanya tertarik ke channel Inggris dan ingin memproses hanya itu saja, mereka tidak mau mengakses channel lainya.

Jadi, kita dapat menyediakan koleksi channel channel ke client dan membiarkan mereka menuliskan logika yang digunakan untuk menjelajahi channel channel dan menentukan untuk memprosesnya. Tapi solusi ini memiliki banyak masalah semisal si client harus punya logika untuk menjelajah/melintasi channelnya, dan kita tidak bisa memastikan apakah logika si client itu benar, karena itu kalau jumlah klient kita terus meningkat, akan jadi sangat sulit untuk dipertahankan

Disini kita akan menggunakan Iterator pattern dan memberikan iterasi berdasarkan tipe channelnya.
Kita harus memastikan client program bisa mengakses daftar channel dari Iterator

Mari buatt.., yang pertama kita tetapkan kontrak koleksi channelnya dan interface iteratornya

public enum ChannelTypeEnum {

 ENGLISH, HINDI, FRENCH, ALL;
}

public class Channel {

 private double frequency;
 private ChannelTypeEnum TYPE;
 
 public Channel(double freq, ChannelTypeEnum type){
  this.frequency=freq;
  this.TYPE=type;
 }

 public double getFrequency() {
  return frequency;
 }

 public ChannelTypeEnum getTYPE() {
  return TYPE;
 }
 
 @Override
 public String toString(){
  return "Frequency="+this.frequency+", Type="+this.TYPE;
 }
 
}
}

public interface ChannelCollection {

 public void addChannel(Channel c);
 
 public void removeChannel(Channel c);
 
 public ChannelIterator iterator(ChannelTypeEnum type);
 
}


Interface ChannelCollection menetapkan kontrak dari implementasi class koleksi kita. Ingat, ada method untuk menambah dan menghapus channel tapi tidak ada method untuk me-return daftar channel.
ChannelCollection punya method me-return iterator untuk travesal(menjelajah/melintasi).ChannelIterator menentukan method berikut,

public interface ChannelIterator {

 public boolean hasNext();
 
 public Channel next();
}

Sekarang base interface kita dan class inti sudah jadi, lanjut ke implementasi collection class dan iterator.

import java.util.ArrayList;
import java.util.List;

public class ChannelCollectionImpl implements ChannelCollection {

 private List channelsList;

 public ChannelCollectionImpl() {
  channelsList = new ArrayList<>();
 }

 public void addChannel(Channel c) {
  this.channelsList.add(c);
 }

 public void removeChannel(Channel c) {
  this.channelsList.remove(c);
 }

 @Override
 public ChannelIterator iterator(ChannelTypeEnum type) {
  return new ChannelIteratorImpl(type, this.channelsList);
 }

 private class ChannelIteratorImpl implements ChannelIterator {

  private ChannelTypeEnum type;
  private List channels;
  private int position;

  public ChannelIteratorImpl(ChannelTypeEnum ty,
    List channelsList) {
   this.type = ty;
   this.channels = channelsList;
  }

  @Override
  public boolean hasNext() {
   while (position < channels.size()) {
    Channel c = channels.get(position);
    if (c.getTYPE().equals(type) || type.equals(ChannelTypeEnum.ALL)) {
     return true;
    } else
     position++;
   }
   return false;
  }

  @Override
  public Channel next() {
   Channel c = channels.get(position);
   position++;
   return c;
  }

 }
}


public class IteratorPatternTest {

 public static void main(String[] args) {
  ChannelCollection channels = populateChannels();
  ChannelIterator baseIterator = channels.iterator(ChannelTypeEnum.ALL);
  while (baseIterator.hasNext()) {
   Channel c = baseIterator.next();
   System.out.println(c.toString());
  }
  System.out.println("******");
  // Channel Type Iterator
  ChannelIterator englishIterator = channels.iterator(ChannelTypeEnum.ENGLISH);
  while (englishIterator.hasNext()) {
   Channel c = englishIterator.next();
   System.out.println(c.toString());
  }
 }

 private static ChannelCollection populateChannels() {
  ChannelCollection channels = new ChannelCollectionImpl();
  channels.addChannel(new Channel(98.5, ChannelTypeEnum.ENGLISH));
  channels.addChannel(new Channel(99.5, ChannelTypeEnum.HINDI));
  channels.addChannel(new Channel(100.5, ChannelTypeEnum.FRENCH));
  channels.addChannel(new Channel(101.5, ChannelTypeEnum.ENGLISH));
  channels.addChannel(new Channel(102.5, ChannelTypeEnum.HINDI));
  channels.addChannel(new Channel(103.5, ChannelTypeEnum.FRENCH));
  channels.addChannel(new Channel(104.5, ChannelTypeEnum.ENGLISH));
  channels.addChannel(new Channel(105.5, ChannelTypeEnum.HINDI));
  channels.addChannel(new Channel(106.5, ChannelTypeEnum.FRENCH));
  return channels;
 }

}

Nah, kalo programnya kita run, akan menghasilkan output sebagai berikut:



Referensi:

http://www.journaldev.com/1716/iterator-design-pattern-java
http://ryan-sponge.blogspot.co.id/2011/01/iterator-pattern.html



 

Senin, 24 Oktober 2016

NEW CASE STUDY : ONLINE SHOP MANAGEMENT SYSTEM

Di post kali ini saya akan memberikan sebuah case study baru dengan use case diagram , sequence diagram dan contoh implementasi sederhananya.
CASE STUDY nya adalah ONLINE SHOP MANAGEMENT SYSTEM

1. Use Case Diagram


2. Sequence Diagram for Olshop
3. Activity Diagram


4. Implementasi code c++ sederhana





Sultan Bonar M
5114100006

PPL E