Sigit Purnomo

C# Tutorial: How to Coding Your Software Design

Posted: April 16th 2007

Jika kita bekerja dalam suatu proyek pengembangan perangkat lunak, biasanya masing-masing anggota tim proyek tersebut akan diposisikan berbeda-beda, ada yang mendapatkan posisi sebagai system analyst, software architect, programmer, dll sesuai dengan kebutuhan. Proses komunikasi antar masing-masing posisi tersebut, salah satunya dilakukan dengan dokumentasi. Pada tutorial ini saya akan mencoba menguraikan salah satu bentuk komunikasi antara software architect dengan programmer untuk fungsionalitas sistem Login.

Software Architect
Berdasarkan hasil dokumentasi dari system analyst, maka software architect membuat desain bagi suatu fungsionalitas (Login) sistem. Hasilnya misalnya berupa Use Case Squence Diagram dan Class Diagram seperti gambar di bawah.

UC Sequence Diagram

Class Diagram

Pertanyaannya adalah, bagaimana programmer akan mengimplementasikan desain tersebut ke dalam bentuk C# code jika tools yang digunakan adalah Microsoft Visual Studio .NET 2003? Mari kita lihat jawabannya pada bagian berikutnya!

Programmer
Berdasarkan desain dari software architect, maka programmer akan berusaha menterjemahkan desain tersebut ke dalam bentuk code program (coding). Programmer dapat memulai dengan mengubah class diagram tersebut ke dalam bentuk coding dan disini jumlah class yang terbentuk harus sesuai dengan apa yang ada di desain. Setelah terbentuk skeleton dari class tersebut, maka programmer dapat menambahkan code untuk mewakili logic yang ada.

Pembahasan berikut akan menjelaskan mengenai Gambar Use Case Sequence Diagram yang sudah dikaitkan dengan hasil coding Programmer.

  1. Pengguna menampilkan antarmuka untuk login, yaitu boundary class LoginUI.
  2. Pengguna memasukkan username. Username ini unik untuk masing-masing pengguna dan panjang maksimalnya adalah 8 karakter.
  3. Pengguna memasukkan password. Password ini merupakan rangkaian karakter dengan panjang maksimal 8 karakter, dan bersifat case-sensitive.
  4. Pengguna memicu sistem untuk melakukan validasi login (validasi username dan password) melalui LoginUI (boundary class).
  5. LoginUI membentuk aNewAccount, yang merupakan instance baru class Account.


Account myAcc = new Account();

myAcc.Username = textUsername.Text.ToString().Trim();

myAcc.Password =  textPassword.Text.ToString().Trim();

  1. LoginUI melakukan validasi terhadap aNewAcccount dengan memanggil method validateAccount pada AccountManager (control class).


public bool validateAccount(Account myAcc)

{

        Account tempAcc  = new Account();

        tempAcc = getAccountForUsername(myAcc.Username);

        if (tempAcc.Password==myAcc.Password)

        {

             return  true;

        }

        else

        {

            return false;

        }

}

AccountManager memvalidasi aNewAccount ini dengan memanggil method getAccountForName, yang akan memeriksa di database, apakah ada baris database dengan field username sesuai username aNewAccount . Jika ada, maka sistem akan membandingkan password username tersebut dari database dengan password input user dari aNewAccount . User akan dapat masuk ke sistem bila username-nya ada dan password-nya sesuai.



public Account getAccountForUsername(string  username)

{

       string connString = "";

       SqlConnection myConn = new  SqlConnection(connString);

       string sqlQuery = "SELECT * FROM tbl_users WHERE  Username='" + username +"'";

       SqlCommand myCommand = new  SqlCommand(sqlQuery,myConn);

       myConn.Open();

       SqlDataReader  myReader;

       myReader = myCommand.ExecuteReader();

       if (myReader.HasRows)

      {

            myReader.Read();

            string usernametemp = myReader.GetString(0);

            string passwordtemp =  myReader.GetString(1);

            myReader.Close();

            myConn.Close();

            return new Account(usernametemp,passwordtemp);

      }

      else

      {

            return  new Account();

      }

}

  1. Objek aNewAccount digunakan sebagai parameter pada saat menampilkan antarmuka form utama.


if  (myAccMan.validateAccount(myAcc)==true)

{

       textUsername.Clear();

       textPassword.Clear();

       (new  MainUI(myAcc)).ShowDialog();

}

else

{

       MessageBox.Show("Proses Login  Gagal!","Perhatian",

       MessageBoxButtons.OK,MessageBoxIcon.Warning)  ;

}

Catatan
Anda harus membuat dulu sebuah database di SQL Server dengan tabel TBL_USERS, kemudian Anda sesuaikan connection string ke databasenya pada code.

Download File
1. Tutorial OOAD


26 responses to “C# Tutorial: How to Coding Your Software Design”

  1. Leo Ganda says:

    myAcc.Username = textUsername.Text.ToString().Trim();
    myAcc.Password = textPassword.Text.ToString().Trim();

    Kenapa inisialisasi Username dan Pasword di object myAcc langsung seperti itu. Sementara di Use case ada constructor(username,password)

    nah pertanyaanya kalo username dan password itu ‘private’ kan ga bisa?? hayo gimana pak? hehehe

    trus yang query select di tabel user itu bisa di SQLinjection ya?

    CMIIW

  2. y_sigit_p says:

    #Leo Ganda:
    Kenapa inisialisasi Username dan Pasword di object myAcc langsung seperti itu. Sementara di Use case ada constructor(username,password)

    nah pertanyaanya kalo username dan password itu ‘private’ kan ga bisa?? hayo gimana pak? hehehe

    assign nilai username dan password dapat dilakukan langsung karena di class account saya membuat properti Username dan Password (‘public’) yang bisa kita Get maupun Set… konstruktor Account(username, password) digunakan di method getAccountforUsername untuk menghasilkan object Account…

    username dan password-nya ‘tidak private’ yang ‘private’ adalah accUsername dan accPassword…

    trus yang query select di tabel user itu bisa di SQLinjection ya?

    masak sih… sql injectionnya seperti apa?

  3. Leo Ganda says:

    yang pake ‘1’ or =1′ yang kaya gitulah…
    bener ga ya pak??

  4. y_sigit_p says:

    kalau dilihat dari logika programnya sih harusnya sudah gak bisa…

  5. Leo widiarto says:

    trus gini pak, kan di pp itu saya bikin program pake OO design, trus untuk mengakses kelas2 yang telah saya buat, saya tidak menggunakan fungsi accessor dan muttator, tetapi langsung saya akses dari form dengan memanggil kelas tersebut dan mengisikan value dari text box, label dan lain2 kedalam parameter fungsi (soalnya lebih cepat pak,,)
    yang mau saya tanya, klo seperti itu masih dikatakan OO programming nggak pak?? apa OO programming itu harus ada fungsi SET GET dan kawan2nya itu pak??!!

  6. Fazz says:

    dimisalkan serangan SQL injection-nya bukan hanya untuk validasi password ‘1? or =1?. Attacker menyerang dengan menggunakan inject data baru pada database user & password dengan perintah ->
    ‘; insert into tbl_users values( 666, ‘attacker’, ‘foobar’, 0xffff )–

    inputan nama table
    666 -> id user
    attacker -> user nama
    foobar -> password
    0xffff -> privasi
    nama table2 diperoleh setelah attacker menggunakan perintah having

    Jadi gimana apakah code diatas valid dengan serangan SQL seperti ini ??

  7. MarCH says:

    pembuatan skeleton dari class yang disebukan pada pembahasan diatas apakah dilakukan secara manual atau dengan men-generate code dari class diagram yang ada?
    apakah class diagram yang dibuat (penentuan class-classnya) itu harus mencocokkan dengan bahasa implementasi yang akan digunakan? -dengan pertimbangan kebutuhan class utk tiap bahasa implementasi kan suka berbeda-beda.
    terima kasih.

  8. Bagus sekali pak, anak-anak diberikan tutorial semacam ini, karena dari pengamatan saya, banyak implementasi code yang tidak sesuai dengan apa yang dirancang pada waktu desain. CMIIW
    Kalau boleh kasih saran, sebaiknya pada waktu penilaian PP, disesuaikan juga antara implementasi dengan desain, nilai yang paling bagus adalah yang bisa mengimplementasikan code sesuai dengan apa yang tertulis di dokumentasi [SKPL + DPPL]. Buat yang ambil PP, tetap semangat! 🙂

  9. Willy Juisan says:

    Maaf sebelumnya pak.
    Saya cuma mau bertukar pikiran dengan bapak dan siap pun yang membaca tulisan ini. Desain arsitektur yang bapak buat apakah sudah 3 tiers application? Setahu saya aplikasi yang baik terdiri dari 3 lapisan (tier), yaitu UI Layer, Business Layer, dan Data Layer. Dari pengalaman saya dulu kerja praktek, untuk setiap use case, minimal ada 4 komponen, yaitu, boundary class yang menangani UI, control class yang menangani business layer, data access object (DAO) class yang menangani akses ke database (select, insert, update, dan delete), dan yang terakhir adalah domain class yang menangani masalah data-data yang ada dalam sistem kita. Dalam tutorial yang bapak buat, saya masih bingung dengan rancangan arsitektur sistem yang bapak buat (sekali lagi maaf, saya ga bermaksud apa2), apalagi relasi antara class2 yang ada semuanya dependency, semakin menambah bingung saya. Terus dari UI ingin memasingkan data login mengapa data login tidak dibungkus dalam sebuah object (object domain) dan baru dikirim ke control class. Kalau di contoh yang bapak buat, seandainya data login yang akan dipassingkan lebih dari 10, tentu akan repot bukan untuk developer bukan? Saya harap bapak bisa memberikan penjelasan yang lebih jelas lagi untuk tutorial ini, mungkin di tutorial part 2 dari tutorial ini. Saya harap masukan saya bisa berguna.
    Thanks.

    Willy,
    Regards.

  10. y_sigit_p says:

    #All: berikut ada beberapa artikel yang mungkin bisa lebih melengkapi dan memperjelas tutorial yang saya buat

    Object Oriented Analysis and Design Using UML
    Introduction to the Diagrams of UML 2.0
    UML Tutorial: Part 1 — Class Diagrams

    #Fazz: let me check first… tp sepertinya model SQL Injection yang seperti itu bisa menembus program tutorial yang saya buat… jika ingin lebih aman, sebenarnya ada cara lain yaitu dengan membatasi masukan pengguna baik dalam username maupun password (hanya bisa karakter a-z, angka 0-9) sehingga karakter-karakter ‘aneh’ yang biasanya dipakai dalam SQL Injection tidak akan bisa digunakan…

    #MarCH: pembuatan skeleton dari class pada tutorial saya masih secara manual dan belum dengan men-generate dari desain… di Visual Studio 2005 sudah ada fasilitas untuk membuat class diagram dan class skeleton-nya akan otomatis di-generate… jika kita menggunakan Rational Rose, maka nanti kita bisa men-generate dengan sebelumnya kita memilih IDE-nya dulu…

    #Alex: setuju, saya membuat tutorial ini (meski tidak sempurna) berawal dari keprihatinan bahwa banyak yang pada saat membuat DPPL hanya mencontoh dari template tanpa memahami nanti implementasinya seperti apa… untuk penilaian kesesuaian desain dengan implementasi di PP sepertinya sulit karena waktu ujiannya terbatas… mungkin bisa pada waktu penilaian mingguan…

    #Willy Juisan: jangan ragu, segan atau pekewuh untuk memberikan masukan, karena saya justru membutuhkannya dan dengan begini maka pengetahuan kita bisa bertambah… untuk desain arsitektur yang ada ditutorial ini saya memang belum memikirkan sampai ke arsitektur implementasinya (n-tiers), saya hanya memperhatikan model yang banyak digunakan di PP… pada saat mengerjakan project, dalam satu use case, saya juga membuat minimal 4 komponen, yaitu boundary class, control class, entity class dan data access class sehingga pemisahannya menjadi makin jelas… saya juga berharap di PP mahasiswa sudah memisahkan seperti itu, tp sepertinya belum bisa semua ke sana… btw, untuk masalah relasi antar class bisa dibaca di artikel yang saya berikan di atas, untuk ditutorial saya sebenarnya lebih tepatnya relasi asosiasi, hanya saja waktu membuat menggunakan tools, yang ada hanya yang dependency (yang garis tidak putus-putus tidak ada)… untuk masalah object domain saya rasa hanya diperlukan jika derajat relasi classnya one to many, untuk kasus login menurut saya hanya one to one so tidak perlu object domain….

  11. thompel says:

    Gileeee bener… Dosen sama Mahasiswa UAJY dari dulu bener-bener hebat-hebat oiiii…. Saya baca posting2nya sampe puyeng…
    Ampunnn deh para dewa programming…. ampuni saya yg rakyat jelata…

  12. yayan says:

    Hemmmmmmmmm…..
    Inget masa-masa doeloe bikin skripsi ma pak wahyu. Bikin Use case trus implementasi ke Java. Tapi yang ini kok bikin pusyang ya. Apa memang aku yang udah tua ya…
    Terus maju UAJY.

  13. Krisna says:

    pak kalo akses database(MSAccess ) dengan java gimana caranya pak????
    btw,kok ga ada tutorial java sie pak???
    makasih…

  14. Nav Online says:

    informasi yang menarik, Trims

  15. -R- says:

    menarik sekali forum di blog bapak…
    kapn2 saya tanya…
    tengkyu

  16. y_sigit_p says:

    #Alex Budiyanto, Leo Ganda: keren dari Hongkong hehehe, tuh desain kan belum jadi kekekekek…

    #Pat, Krisna: waduh, kok gak sesuai dengan topik yang di-post nih…

    #Fuji: wah, klo sekarang saya lg ngajar IMK/PI mungkin saya kasih nilai tambah, tp berhubung saya tidak ya saya kasih nilai tambah aja yaitu Anda dapat pengalaman, tenar + punya portfolio :p

    #Anonymous: coba baca2 di sini

  17. gogo says:

    boleh ikutaaaan gaaaa??? bisa jelasin saya apa itu SKPL??

  18. Ada says:

    Password di enccripth aja gmn?? kan beres….

  19. gusdek says:

    coba saya plajari dulu yach…

  20. Amril says:

    saya kira artikel mengenai segala macam yang berbau login, username dan password itu uda benar. sepengetahuan yang saya gunakan tentang sql injection tidak dapt menembus passing parameter. untuk lebih aman tentang security agar tidak dapat ditembus menggunakan data injection sebaiknya gunakan aja security enkripsi. aman kan …… jadi g ada lagi debat yang aneh-aneh itu. ok.

  21. dumpri says:

    mas2.. kalau user name sama password dienkripsi itu belum bisa menjamin keamanan data. Weleh2, coba kalau masukin sql injection nya buat apus data delete atau drop atau update.. mau dienkripsi juga kalau data hilang sama aja bohong. Konsep keamanan data kan ada 5 tuh harus inget ya pas kuliah dulu: privacy, authentication, integrity, nonrepudiation, authorization. Enkripsi symmetric yang biasa kita pake itu cuma menangani aspek privacy.

  22. ari says:

    BRho2..maaf Agatek…..
    bisa kasih tau ga detail nya yang di bahas…
    misalkan Password tadi.. UI nya kaya Pa?aplikasinya? kalo perlu kasih sample detai…llllllL…plis

  23. y_sigit_p says:

    @ari:
    download aja file-nya maka nanti UI dan aplikasinya akan bisa dilihat…

  24. ipung says:

    kk programer tolong ade mu ini…..
    aku mengerjakan TA dengan menggunakan UML…
    mslhnya aku gk ngerti sama sekali apa itu UML, tlng ajarin ade mu ini kk !!!!….
    khususnya yg class diagram…
    huhuh…huh…
    🙁

    ditunggu yah !!

  25. y_sigit_p says:

    @ipung:
    UML adalah notasi yang digunakan untuk menggambarkan proses analisis dan desain perangkat lunak… sudah ada beberapa buku versi Bahasa Indonesia-nya kok, silahkan di cari saja… tutorial di atas juga sudah menggambarkan prosesnya mulai dari awal…

  26. Ecep says:

    Boleh nimrung pak… untuk Class “Account” tadi ternyata kan ada banyak Typenya sesuai Use Case (kebutuhan), misal: “Administrator”, “Operator”, “Manager”, dll
    dan itu inherit ke Account tadi… itu bagaimana pak implementasinya di program?

    Mohon pencerahannya….
    Jika tidak keberatan bisa ke email saya.

    Salam

Leave a Reply

Your email address will not be published. Required fields are marked *

© 2021 Universitas Atma Jaya Yogyakarta
css.php