TUTORIAL CODEIGNITER : APLIKASI WEBSITE / BLOG (WEBLOG) SEDERHANA DENGAN CODEIGNITER

Oke gan, langsung saja untuk screen shoot contoh aplikasi website, weblog, blog dengan codeigniter yang ane kasi, seperti di bawah ini...

Tutorial HTML

HTML merupakan bahasa dasar pembuatan web. Disebut dasar karena dalam membuat web, jika hanya menggunakan HTML tampilan web terasa hambar. Terdapat banyak bahasa pemograman web yang ditujukan untuk memanipulasi kode HTML, seperti ...

TUTORIAL ORACLE - KONEKSI ORACLE KE JAVA, PHP DAN C# (C-SHARP)

Disitu juga ane kasi contoh aplikasi CRUD nya yang bisa ente download Gratisss :D ...

Kamis, 20 Desember 2012

Aplikasi CRUD Java - koneksi Java dan Mysql

Di malam yang sesunyi ini... aku sendiri... tiada yang menemani... akhirnya kini kusadari.... dia telah pergi... tinggalkan diriku.....:D ya inilah gan, keadaan ane sekarang... jomblo yg kece (Kecepian maksudnya)... tapi kecepian ini membawa suatu hikmah yg gak bisa di mengerti sama orang lain... banyak yg bilang kalo ane susah dapet pacar, sebenarnya si gak susah2 amat buat dptin cewek... emang si kali ini ane lagi suka sama salah satu cewek dikampus ane ya.. walopun beda jam tayang :D ... sehingga kita terpisah antara jarak dan waktu... tapi bukan itu masalah sebenarnya kenapa ane gak mau pacaran dulu kali ini... Banyak yg harus ane pikirin... mana lagi ane harus mikir tugas2 yg lagi numpuk, mikir kuliah yg terus2an nuntut ane buat blajar... dan satu hal yg paling bikin ane saat ini bener2 ogah sama yg namanya pacaran... ane kapok di akal2in sama cewek... kjadian yg lalu itu bnr2 memberikan plajaran yg besar buat ane untuk memahami bagaimana sebenarnya wanita itu.... tapi gak apa-apalah sehancur-hancurnya ane kmaren toh ane masi bisa hidup dan meraih prestasi yang belum ane raih sebelumnya...


udah dulu deh gan curcolnya :D ... pada postingan kali ini ane mau ngasi contoh program Aplikasi CRUD (Cread, Read, Update, Delete) Java dan Koneksi Java - Mysql

sebelumnya ente harus buat dulu database untuk manipulasi datanya, kalo gak ada databasenya pa yang mau di manipulasi ??? hehehee...
create database if not exists `kantor`;

USE `kantor`;

CREATE TABLE `pegawai` (
`kodepegawai` int(3) NOT NULL,
`namapegawai` varchar(50) DEFAULT NULL,
`jeniskelamin` varchar(10) DEFAULT NULL,
PRIMARY KEY (`kodepegawai`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

kemudian isi dengan beberapa data
insert  into `pegawai`(`kodepegawai`,`namapegawai`,`jeniskelamin`) values (1,'Untung Slamet','Pria'),(2,'Yanti Puspita','Wanita'),(3,'Joko Siswanto','Pria'); 
kalo udah sekarang ente harus menyediakan connector jdbc agar project java ente terhubung dengan database... Kalo ente pake netbeans versi 6 keatas (kalo gak salah) udah disediain Connector nya... sekarang ane kasi tau caranya import connectornya ke dalam project...
  • Click kanan pada folder Libreries, kemudian Click add Library....

  • Pilih Mysql JDBC Driver 


  • Kalo berhasil di folder Libreries akan ada file Mysql JDBC Driver - Mysql Connector


Setelah itu ente bikin desain Form kayak gini...

Komponen Form :
  1. Jtextfield Kode Pegawai
  2. Jtextfield Nama Pegawai
  3. JradioButton Pria
  4. JradioButton Wanita
  5. Buttongrup(untuk Jradiobutton pria dan wanita)
  6. Button Simpan
  7. Button Update
  8. Button Delete
  9. Button Cari
  10. Button Bersih
Sekarang ente tambahin kode-kode berikut diatas sendiri d bawahnya package *(sesuaikan dengan kode yang ada di project ente)

import java.sql.*;
import java.util.ArrayList;
import java.util.List;
import javax.swing.JOptionPane;
import javax.swing.table.TableModel;


Kemudian ente buat 2 Class... nanti ane jelasin kegunaan 2 Class ini... yang peting ente buat dulu 2 Class ini

Class yang pertama ente kasi nama L_Pegawai

public class L_Pegawai {
private String kodepagawai,namapegawai,jeniskelamin;

public void setKodePegawai(String kodepagawai){
this.kodepagawai = kodepagawai;
}

public String getKodePegawai(){
return this.kodepagawai;
}

public void setNamaPegawai(String namapegawai){
this.namapegawai = namapegawai;
}

public String getNamaPegawai(){
return this.namapegawai;
}

public void setJenisKelamin(String jeniskelamin){
this.jeniskelamin = jeniskelamin;
}

public String getJenisKelamin(){
return this.jeniskelamin;
}
}

Class yang ke 2 ente kasi nama TmodelPegawai

import java.util.List;
import javax.swing.table.AbstractTableModel;

public class TmodelPegawai extends AbstractTableModel {
private List<L_Pegawai> list;

public TmodelPegawai(List<L_Pegawai> list) {
this.list = list;
}

public int getRowCount() {
return list.size();
}

public int getColumnCount() {
return 3;
}

public Object getValueAt(int rowIndex, int columnIndex) {
switch (columnIndex) {
case 0:
return list.get(rowIndex).getKodePegawai();
case 1:
return list.get(rowIndex).getNamaPegawai();
case 2:
return list.get(rowIndex).getJenisKelamin();
default:
return null;
}
}
@Override
public String getColumnName(int column) {
switch (column) {
case 0:
return "Kode Pegawai";
case 1:
return "Nama Pegawai";
case 2:
return "Jenis Kelamin";
default:
return null;
}
}
}
Fungsi dari 2 Class tersebut adalah sebagai object penampung data yang telah kita panggil dari database yang kita tampilkan pada Jtable... Coba nanti ente Analisa sendiri deh :D pokok nya bahasa gampangnya gitu...

Setelah itu ente tambahin beberapa Object yang akan membantu kita menghubungkan project kita dengan mysql di bawah Constructor... gak tau Construktor ??? kalo gak tau silahkan baca postingan ane yang membahas tentang dasar pemrograman Java, C# dan C++.... Tambahkan Beberapa object berikut

    private Connection koneksi;
private ResultSet hasil;
private Statement stat;
private String query,url,database;
private L_Pegawai pegawai;
private List<l_pegawai&gt list;
private TableModel model;
Kalo Udah Tambahkan kode barikut didalam Constructor...
        buttonGroup1.add(radiobutton_pria);
buttonGroup1.add(radiobutton_wanita);
try{
database= "kantor";
url = "jdbc:mysql://localhost:3306/"+database;
Class.forName("com.mysql.jdbc.Driver");
koneksi = DriverManager.getConnection(url, "root", "");
}catch(SQLException ex){
JOptionPane.showMessageDialog(null, ex);
}catch(ClassNotFoundException ex){
JOptionPane.showMessageDialog(null, ex);
}
Sekarang ente bangkitin semua event Action Performed pada semua button dan event WindowOpened... Ini kode yang ada pada WindowOpened
       try{
query = "select * from pegawai";
stat = koneksi.createStatement();
hasil = stat.executeQuery(query);
this._setModel(hasil);
btn_simpan.setEnabled(true);
btn_update.setEnabled(false);
btn_delete.setEnabled(false);
btn_bersih.setEnabled(false);
btn_cari.setEnabled(true);
text_kodepegawai.setText("");
text_kodepegawai.setEnabled(true);
text_kodepegawai.requestFocus();
text_namapegawai.setText("");
buttonGroup1.clearSelection();
}catch(SQLException ex){
JOptionPane.showMessageDialog(null, ex);
}
Ini kode yang ada di event Action Performed Button Simpan
       try{
String j_kelamin = "";
if(radiobutton_pria.isSelected()){
j_kelamin = "Pria";
}else if(radiobutton_wanita.isSelected()){
j_kelamin = "Wanita";
}else{}

if(text_kodepegawai.getText().equals("") && text_namapegawai.getText().equals("") || j_kelamin.equals("")){
JOptionPane.showMessageDialog(null, "data Tidak lengkap");
}else{
query = "insert into pegawai values ('"+text_kodepegawai.getText()+"','"+text_namapegawai.getText()+"','"+j_kelamin+"')";
stat = koneksi.createStatement();
int res = stat.executeUpdate(query);
if(res == 1){
JOptionPane.showMessageDialog(null, "Insert Data Sukses !");
formWindowOpened(null);
}
}
}catch(SQLException ex){
JOptionPane.showMessageDialog(null, ex);
}

Ini kode yang ada di event Action Performed Button Cari
       try{
String j_kelamin = "";
if(text_kodepegawai.getText().equals("")){
JOptionPane.showMessageDialog(null, "Tidak Ada data Yang Anda Pilih");
}else{
query = "select * from pegawai where kodepegawai = '"+text_kodepegawai.getText()+"'";
stat = koneksi.createStatement();
hasil = stat.executeQuery(query);
while(hasil.next()){
text_namapegawai.setText(hasil.getString("namapegawai"));
j_kelamin = hasil.getString("jeniskelamin");
}

if(j_kelamin.equals("")){
JOptionPane.showMessageDialog(null, "Data Yang Anda Pilih Tidak Ada di database");
formWindowOpened(null);
}else{
if(j_kelamin.equals("Pria")){
radiobutton_pria.setSelected(true);
}else{
radiobutton_wanita.setSelected(true);
}
query = "select * from pegawai where kodepegawai = '"+text_kodepegawai.getText()+"'";
stat = koneksi.createStatement();
hasil = stat.executeQuery(query);
_setModel(hasil);
btn_simpan.setEnabled(false);
btn_update.setEnabled(true);
btn_delete.setEnabled(true);
btn_cari.setEnabled(false);
btn_bersih.setEnabled(true);
text_kodepegawai.setEnabled(false);
}
}
}catch(SQLException ex){
JOptionPane.showMessageDialog(null, ex);
}
Ini kode yang ada di event Action Performed Button Bersih
        try{
formWindowOpened(null);
}catch(Exception ex){
JOptionPane.showMessageDialog(null, ex);
}
Tambahkan kode ini padaevent Action Performed Button Update
       try{
String j_kelamin = "";
if(radiobutton_pria.isSelected()){
j_kelamin = "Pria";
}else if(radiobutton_wanita.isSelected()){
j_kelamin = "Wanita";
}else{}
query = "update pegawai set namapegawai = '"+text_namapegawai.getText()+"', jeniskelamin = '"+j_kelamin+"' where kodepegawai = '"+text_kodepegawai.getText()+"'";
stat = koneksi.createStatement();
int res = stat.executeUpdate(query);
if(res == 1){
JOptionPane.showMessageDialog(null, "Update Data Sukses !");
formWindowOpened(null);
}
}catch(SQLException ex){
JOptionPane.showMessageDialog(null, ex);
}
Tambahkan kode ini pada event Action Performed Button Delete
try{
if(JOptionPane.showConfirmDialog(null, "Anda Yakin menghapus Data ini ??","Warning",2) == JOptionPane.YES_OPTION){
query = "delete from pegawai where kodepegawai = '"+text_kodepegawai.getText()+"'";
stat = koneksi.createStatement();
int res = stat.executeUpdate(query);
if(res == 1){
JOptionPane.showMessageDialog(null, "Delete Data Sukses !");
}
}
formWindowOpened(null);
}catch(SQLException ex){
JOptionPane.showMessageDialog(null, ex);
}
Dan terakhir ente tambahin satu Function... function ini dibuat dengan tujuan menghemat kode program yang ditulis berulang kali, function ini berisi program yang akan menempatkan data yang telah kita panggil dari database dan di tempatkan pada 2 Class yang kita buat diawal tadi :D ... kalo diproject ini si gak terlalu terasa soalnya kan project sederhana... kalo nanti udah molai ke project yang agak Luas baru kerasa fungsinya Function ini...
    private void _setModel(ResultSet hasil)
{
try{
list = new ArrayList&ltL_Pegawai&gt();
while(hasil.next()){
pegawai = new L_Pegawai();
pegawai.setKodePegawai(hasil.getString("kodepegawai"));
pegawai.setNamaPegawai(hasil.getString("namapegawai"));
pegawai.setJenisKelamin(hasil.getString("jeniskelamin"));
list.add(pegawai);
}
model = new TmodelPegawai(list);
jTable1.setModel(model);
}catch(SQLException ex){
JOptionPane.showMessageDialog(null, ex);
}

Oia ini demo dari Kode Program di Atas...







sekalian dulu ya Gan postingan yang ini... Pengunjung yang baik pasti meninggalkan jejak (Comment) :D... Oia ini project CRUD java nya kalo mau di download, silahkan download disini

Sabtu, 10 November 2012

OOP Java, C# dan C++

Object Oriented programming,,, sudah tidak asing lagi buat telinga orang IT, kalo di terjemahkan adalah pemrograman berorentasi object ...
kenapa harus OOP ?
pemrograman berorientasi objek dikatakan dapat memberi fleksibilitas yang lebih, kemudahan mengubah program, dan digunakan luas dalam teknik piranti lunak skala besar. Lebih jauh lagi, pendukung OOP mengklaim bahwa OOP lebih mudah dipelajari bagi pemula dibanding dengan pendekatan sebelumnya, dan pendekatan OOP lebih mudah dikembangkan dan dirawat.

Konsep-Konsep OOP antara Lain :

  1. Class, Method/Function dan Modifier
  2. Constructor dan Destructor
  3. Information Hidding dan Encapsulation
  4. Polymorphisme (Overload dan Override)
  5. Inheritance (penurunan)
  6. Inner Class
  7. Abstract Class
  8. Interface
  9. Exception Handling
  10. Multithreading

Jumat, 09 November 2012

Dasar Pemrograman Java, C sharp dan C++

Sudah lama gak pernah ngupdate status isi blog ini, kesibukan kuliah, kegalauan yang panjang karena cinta ... ya macem2lah sebab akibat sampek ane gak pernah njamah blog ini ... tapi Alhamdulillah smua itu sekarang udah berlalu jadi semangat yang kembali berkobar ...
kali ini ane gak akan berbagi dasar pemrograman yang baru tapi cuma mau ngulang bagi ente2 yang udah ngambil pelajaran dari blog ini tentang dasar program java, c sharp dan c++ ...
ane rasa dasar dari pemrograman yang ane posting disini seperti

  1. penerapan Class, method dan property
  2. Flow Control If
  3. Flow Control Switch
  4. Looping For
  5. Looping While
  6. Looping Do-while
  7. Array
  8. Array Multi Dimensi
  9. Function
Kalau ente2 udah paham beneran, i.Alloh ente gak akan sulit nanti kalo mau belajar pemrograman ke tingkat yang lebih tinggi seperti Object oriented programming yang juga udah ane posting disini.

Agar lebih bagus lagi pemahaman ente tentang dasar pemrograman, ada baiknya ente pelajari lebih lanjut seperti substring, split, concat, searching, sorting yang itu semua sebenarnya melatih algoritma kita biar lebih tajam, ente bisa pelajari tambahan2 itu disini.

setelah itu melangkahlah ke tingkat pemrograman selanjutnya yaitu pemrograman yang berbasis OOP.

salam suksess ya ...

Kamis, 10 Mei 2012

Form dan Event Handler di Java C# dan C++


Form adalah tampilan user interface yang disediakan oleh bahasa pmrograman agar mudah untuk menjalankan sebuah program. Event handler adalah sebuah method yang dapat mendeteksi suatu kejadian yang terjadi pada sebuah form, contoh ketika sebuah button di Click maka program akan melakukan sebuah eksekusi  perintah yang ada pada event handlernya.

Pada contoh code program berikut adalah Event Handler yang ada pada sebuah button, jika button tersebut di Click maka akan memunculkan Messagebox.

C sharp


using System;
using System.Collections.Generic;
using System.Drawing;
using System.Windows.Forms;

namespace OOP_praktikumForm
{
public partial class MainForm : Form
{
public MainForm()
{
InitializeComponent();
}


//event Handler
void BtnLihatClick(object sender, EventArgs e)
{
MessageBox.Show("Nama Anda "+textBox1.Text+"\t\nAlamat Anda = "+textBox2.Text);
}
}
}



Java


//Event Handler
private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {
JOptionPane.showMessageDialog(mainPanel, "Nama anda "+this.jTextField1.getText()+", \t\nAlamat Anda "+this.jTextField2.getText(), "Form Java dan Event Handler", 1);
}

// Variables declaration - do not modify
private javax.swing.JButton jButton1;
private javax.swing.JLabel jLabel1;
private javax.swing.JLabel jLabel2;
private javax.swing.JTextField jTextField1;
private javax.swing.JTextField jTextField2;
private javax.swing.JPanel mainPanel;
private javax.swing.JProgressBar progressBar;
private javax.swing.JLabel statusAnimationLabel;
private javax.swing.JLabel statusMessageLabel;
private javax.swing.JPanel statusPanel;
// End of variables declaration

private final Timer messageTimer;
private final Timer busyIconTimer;
private final Icon idleIcon;
private final Icon[] busyIcons = new Icon[15];
private int busyIconIndex = 0;

private JDialog aboutBox;



C++

#pragma once

namespace formcpp_test {

using namespace System;
using namespace System::ComponentModel;
using namespace System::Collections;
using namespace System::Windows::Forms;
using namespace System::Data;
using namespace System::Drawing;

/// <summary>
/// Summary for Form1
/// </summary>
public ref class Form1 : public System::Windows::Forms::Form
{
public:
Form1(void)
{
InitializeComponent();
//
//TODO: Add the constructor code here
//
}

protected:
/// <summary>
/// Clean up any resources being used.
/// </summary>
~Form1()
{
if (components)
{
delete components;
}
}
private: System::Windows::Forms::Label^ label1;
private: System::Windows::Forms::TextBox^ textBox1;
private: System::Windows::Forms::TextBox^ textBox2;
private: System::Windows::Forms::Label^ label2;
private: System::Windows::Forms::Button^ button1;
protected:

private:
/// <summary>
/// Required designer variable.
/// </summary>
System::ComponentModel::Container ^components;

#pragma region Windows Form Designer generated code
/// <summary>
/// Required method for Designer support - do not modify
/// the contents of this method with the code editor.
/// </summary>
void InitializeComponent(void)
{
this->label1 = (gcnew System::Windows::Forms::Label());
this->textBox1 = (gcnew System::Windows::Forms::TextBox());
this->textBox2 = (gcnew System::Windows::Forms::TextBox());
this->label2 = (gcnew System::Windows::Forms::Label());
this->button1 = (gcnew System::Windows::Forms::Button());
this->SuspendLayout();
//
// label1
//
this->label1->AutoSize = true;
this->label1->Location = System::Drawing::Point(33, 45);
this->label1->Name = L"label1";
this->label1->Size = System::Drawing::Size(55, 13);
this->label1->TabIndex = 0;
this->label1->Text = L"Username";
//
// textBox1
//
this->textBox1->Location = System::Drawing::Point(36, 85);
this->textBox1->Name = L"textBox1";
this->textBox1->Size = System::Drawing::Size(222, 20);
this->textBox1->TabIndex = 1;
//
// textBox2
//
this->textBox2->Location = System::Drawing::Point(36, 151);
this->textBox2->Name = L"textBox2";
this->textBox2->Size = System::Drawing::Size(222, 20);
this->textBox2->TabIndex = 3;
//
// label2
//
this->label2->AutoSize = true;
this->label2->Location = System::Drawing::Point(33, 111);
this->label2->Name = L"label2";
this->label2->Size = System::Drawing::Size(39, 13);
this->label2->TabIndex = 2;
this->label2->Text = L"Alamat";
//
// button1
//
this->button1->Location = System::Drawing::Point(182, 212);
this->button1->Name = L"button1";
this->button1->Size = System::Drawing::Size(75, 23);
this->button1->TabIndex = 4;
this->button1->Text = L"Lihat";
this->button1->UseVisualStyleBackColor = true;
this->button1->Click += gcnew System::EventHandler(this, &Form1::button1_Click);
//
// Form1
//
this->AutoScaleDimensions = System::Drawing::SizeF(6, 13);
this->AutoScaleMode = System::Windows::Forms::AutoScaleMode::Font;
this->ClientSize = System::Drawing::Size(288, 262);
this->Controls->Add(this->button1);
this->Controls->Add(this->textBox2);
this->Controls->Add(this->label2);
this->Controls->Add(this->textBox1);
this->Controls->Add(this->label1);
this->FormBorderStyle = System::Windows::Forms::FormBorderStyle::FixedSingle;
this->MaximizeBox = false;
this->Name = L"Form1";
this->StartPosition = System::Windows::Forms::FormStartPosition::CenterScreen;
this->Text = L"Praktikum OOP";
this->ResumeLayout(false);
this->PerformLayout();

}
#pragma endregion
//event handler
private: System::Void button1_Click(System::Object^ sender, System::EventArgs^ e) {
MessageBox::Show ("Nama anda "+textBox1->Text+"\nAlamat Anda"+textBox2->Text);
}
};
}




Mutlithreading di Java, C# dan C++

Multi threading adalah sebuah cara pengeksekuisian beberapa program secara bersamaan. saling berbagi sumber daya tetapi dapat dijalankan secara independen.

Keuntungan dari Multi threading adalah :
  • Aplikasi interaktif menjadi tetap responsif meskipun sebagian dari program sedang diblok atau melakukan operasi lain yang panjang.
  • Berbagi sumber daya. Beberapa thread yang melakukan proses yang sama akan berbagi sumber daya. Keuntungannya adalah mengizinkan sebuah aplikasi untuk mempunyai beberapa thread yang berbeda dalam lokasi memori yang sama.
  • Ekonomis, Pembuatan sebuah proses memerlukan pengalokasian memori dan sumber daya. Alternatifnya adalah dengan menggunakan thread, karena thread membagi memori dan sumber daya yang dimilikinya sehingga lebih ekonomis untuk membuat thread dan context switching thread. Akan susah mengukur perbedaan waktu antara thread dan switch, tetapi secara umum pembuatan dan pengaturan proses akan memakan waktu lebih lama dibandingkan dengan thread. Pada Solaris, pembuatan proses memakan waktu 30 kali lebih lama dibandingkan pembuatan thread sedangkan proses context switch 5 kali lebih lama dibandingkan context switching thread.
  • Utilisasi arsitektur multiprosesor. Keuntungan dari multithreading dapat sangat meningkat pada arsitektur multiprosesor, dimana setiap thread dapat berjalan secara paralel di atas procesor yang berbeda. Pada arsitektur processor tunggal, CPU menjalankan setiap thread secara bergantian tetapi hal ini berlangsung sangat cepat sehingga menciptakan ilusi paralel, tetapi pada kenyataanya hanya satu thread yang dijalankan CPU pada satu-satuan waktu.




Csharp


using System;
using System.Threading;

namespace OOPpraktikum
{
class Program
{
public static void Main(string[] args)
{
TesThread tes1 = new TesThread("Rizal Thread");
TesThread tes2 = new TesThread("Cha Thread");

Thread thd1 = new Thread(new ThreadStart(tes1.Thred));
Thread thd2 = new Thread(new ThreadStart(tes2.Thred));

thd1.Start();
thd2.Start();

Console.ReadKey(true);
}
}

class TesThread
{
string nama;
public TesThread(string nm)
{
nama = nm;
}

public void Thred()
{
for (byte i = 0; i<50; i++)
{
Console.WriteLine(nama+" "+(i+1));
Thread.Sleep(1000);
}
}
}
}

Java


package OOPpraktikum;
import java.util.*;

public class MainClass
{
static Scanner input = new Scanner(System.in);

public static void main(String[] args)
{
TesThread thd1 = new TesThread("Rizal Thread");
TesThread thd2 = new TesThread("Cha Thread");

thd1.start();
thd2.start();

}

}

class TesThread extends Thread
{
String nama;
public TesThread(String a)
{
nama = a;
}
public void run()
{
try
{
for(byte i = 0; i<50; i++)
{
Thread.sleep(1000);
System.out.println(nama+" "+i);
}
}
catch (Exception e)
{
// TODO: handle exception
}

}
}



Khusus C++ untuk membuat Multi thread harus menggunakan header file, dalam contoh kode program berikut memanfaatkan header file buatan programmer lain. Referensinya ada pada http://www.codeproject.com/Articles/5218/Synchronized-multi-threading-in-C-No-MFC

C++

ou_thread.h

namespace openutils {
class ThreadException;
class Mutex;

/** class Thread
* Represents a thread of execution
* in the process. To create a new Thread
* write an inherited class ot Thread and
* override the run() function
**/
class Thread {

private:
// unsigned long* to the low-level thread object
unsigned long* m_hThread;
// a name to identify the thread
string m_strName;

public:
Thread();
Thread(const char* nm);
virtual ~Thread();
void setName(const char* nm);
string getName() const;
void start();
virtual void run();
void sleep(long ms);
void suspend();
void resume();
void stop();

void setPriority(int p);

bool wait(const char* m,long ms=5000);
void release(const char* m);

public:
// Thread priorities
static const int P_ABOVE_NORMAL;
static const int P_BELOW_NORMAL;
static const int P_HIGHEST;
static const int P_IDLE;
static const int P_LOWEST;
static const int P_NORMAL;
static const int P_CRITICAL;
private:
};// class Thread

/** class Mutex
* Represents a Mutex object to synchronize
* access to shaed resources.
**/
class Mutex {
private:
// unsigned long* to the low-level mutex object
unsigned long* m_hMutex;
// name to identify the mutex
string m_strName;
public:
Mutex();
Mutex(const char* nm);
void create(const char* nm);
unsigned long* getMutexHandle();
string getName();
void release();
~Mutex();
};

/** class ThreadException
* thrown by Thread and Mutex function
* calls
**/
class ThreadException {
private:
string msg;
public:
ThreadException(const char* m);
string getMessage() const;
};
} // namespace openutils

// global function called by the thread object.
// this in turn calls the overridden run()
extern "C" {
unsigned int _ou_thread_proc(void* param);
}




ou_thread.cpp

#include <string>
using namespace std;

#include <windows.h>

#include "ou_thread.h"
using namespace openutils;

const int Thread::P_ABOVE_NORMAL = THREAD_PRIORITY_ABOVE_NORMAL;
const int Thread::P_BELOW_NORMAL = THREAD_PRIORITY_BELOW_NORMAL;
const int Thread::P_HIGHEST = THREAD_PRIORITY_HIGHEST;
const int Thread::P_IDLE = THREAD_PRIORITY_IDLE;
const int Thread::P_LOWEST = THREAD_PRIORITY_LOWEST;
const int Thread::P_NORMAL = THREAD_PRIORITY_NORMAL;
const int Thread::P_CRITICAL = THREAD_PRIORITY_TIME_CRITICAL;

/**@ The Thread class implementation
**@/

/** Thread()
* default constructor
**/
Thread::Thread() {
m_hThread = NULL;
m_strName = "null";
}

/** Thread(const char* nm)
* overloaded constructor
* creates a Thread object identified by "nm"
**/
Thread::Thread(const char* nm) {
m_hThread = NULL;
m_strName = nm;
}

Thread::~Thread() {
if(m_hThread != NULL) {
stop();
}
}

/** setName(const char* nm)
* sets the Thread object's name to "nm"
**/
void Thread::setName(const char* nm) {
m_strName = nm;
}

/** getName()
* return the Thread object's name as a string
**/
string Thread::getName() const {
return m_strName;
}

/** run()
* called by the thread callback _ou_thread_proc()
* to be overridden by child classes of Thread
**/
void Thread::run() {
// Base run
}

/** sleep(long ms)
* holds back the thread's execution for
* "ms" milliseconds
**/
void Thread::sleep(long ms) {
Sleep(ms);
}

/** start()
* creates a low-level thread object and calls the
* run() function
**/
void Thread::start() {
DWORD tid = 0;
m_hThread = (unsigned long*)CreateThread(NULL,0,(LPTHREAD_START_ROUTINE)_ou_thread_proc,(Thread*)this,0,&tid);
if(m_hThread == NULL) {
throw ThreadException("Failed to create thread");
}else {
setPriority(Thread::P_NORMAL);
}
}

/** stop()
* stops the running thread and frees the thread handle
**/
void Thread::stop() {
if(m_hThread == NULL) return;
WaitForSingleObject(m_hThread,INFINITE);
CloseHandle(m_hThread);
m_hThread = NULL;
}

/** setPriority(int tp)
* sets the priority of the thread to "tp"
* "tp" must be a valid priority defined in the
* Thread class
**/
void Thread::setPriority(int tp) {
if(m_hThread == NULL) {
throw ThreadException("Thread object is null");
}else {
if(SetThreadPriority(m_hThread,tp) == 0) {
throw ThreadException("Failed to set priority");
}
}
}

/** suspend()
* suspends the thread
**/
void Thread::suspend() {
if(m_hThread == NULL) {
throw ThreadException("Thread object is null");
}else {
if(SuspendThread(m_hThread) < 0) {
throw ThreadException("Failed to suspend thread");
}
}
}

/** resume()
* resumes a suspended thread
**/
void Thread::resume() {
if(m_hThread == NULL) {
throw ThreadException("Thread object is null");
}else {
if(ResumeThread(m_hThread) < 0) {
throw ThreadException("Failed to resume thread");
}
}
}

/** wait(const char* m,long ms)
* makes the thread suspend execution until the
* mutex represented by "m" is released by another thread.
* "ms" specifies a time-out for the wait operation.
* "ms" defaults to 5000 milli-seconds
**/
bool Thread::wait(const char* m,long ms) {
HANDLE h = OpenMutex(MUTEX_ALL_ACCESS,FALSE,m);
if(h == NULL) {
throw ThreadException("Mutex not found");
}
DWORD d = WaitForSingleObject(h,ms);
switch(d) {
case WAIT_ABANDONED:
throw ThreadException("Mutex not signaled");
break;
case WAIT_OBJECT_0:
return true;
case WAIT_TIMEOUT:
throw ThreadException("Wait timed out");
break;
}
return false;
}

/** release(const char* m)
* releases the mutex "m" and makes it
* available for other threads
**/
void Thread::release(const char* m) {
HANDLE h = OpenMutex(MUTEX_ALL_ACCESS,FALSE,m);
if(h == NULL) {
throw ThreadException("Invalid mutex handle");
}
if(ReleaseMutex(h) == 0) {
throw ThreadException("Failed to release mutex");
}
}

/**@ The Mutex class implementation
**@/

/** Mutex()
* default constructor
**/
Mutex::Mutex() {
m_hMutex = NULL;
m_strName = "";
}

/** Mutex(const char* nm)
* overloaded constructor
* creates a Mutex object identified by "nm"
**/
Mutex::Mutex(const char* nm) {
m_strName = nm;
m_hMutex = (unsigned long*)CreateMutex(NULL,FALSE,nm);
if(m_hMutex == NULL) {
throw ThreadException("Failed to create mutex");
}
}

/** create(const char* nm)
* frees the current mutex handle.
* creates a Mutex object identified by "nm"
**/
void Mutex::create(const char* nm) {
if(m_hMutex != NULL) {
CloseHandle(m_hMutex);
m_hMutex = NULL;
}
m_strName = nm;
m_hMutex = (unsigned long*)CreateMutex(NULL,FALSE,nm);
if(m_hMutex == NULL) {
throw ThreadException("Failed to create mutex");
}
}
/** getMutexHandle()
* returns the handle of the low-level mutex object
**/
unsigned long* Mutex::getMutexHandle() {
return m_hMutex;
}

/** getName()
* returns the name of the mutex
**/
string Mutex::getName() {
return m_strName;
}

void Mutex::release() {
if(m_hMutex != NULL) {
CloseHandle(m_hMutex);
}
}

Mutex::~Mutex() {
/*if(m_hMutex != NULL) {
CloseHandle(m_hMutex);
}*/
}

// ThreadException
ThreadException::ThreadException(const char* m) {
msg = m;
}

string ThreadException::getMessage() const {
return msg;
}

// global thread caallback
unsigned int _ou_thread_proc(void* param) {
Thread* tp = (Thread*)param;
tp->run();
return 0;
}

Main Program
#include <cstdlib>
#include <iostream>
#include <STRING>

using namespace std;
#include "ou_thread.h"
using namespace openutils;

class MyThread : public Thread {
private:
int m_nCount;
public:
MyThread(int n,const char* nm) {
Thread::setName(nm);
m_nCount = n;
}
void run() {
for(int i=0;i<m_nCount;i++) {
cout << getName().c_str()<<" "<<i<< endl;
sleep(1000);
}
}
};

int main(int argc, char *argv[])
{
Thread *t1 = new MyThread(50,"Rizal Thread");
Thread *t2 = new MyThread(50,"Cha Thread");
try
{
t1->start();
t2->start();
t1->stop();
t2->stop();
}
catch(ThreadException ex)
{
printf("%s\n",ex.getMessage().c_str());
}
delete t1;
delete t2;

system("PAUSE");
return EXIT_SUCCESS;
}



Exception (error) Handling di Java, C# dan C++

Exception handling adalah penangan error yang terjadi pada sebuah program. Exception handling akan mendeteksi error yang terjadi secara otomatis. Exception handling dalam pemrograman Csharp, Java dan C++ menggunakan keyword “try-cactch”. Pada contoh kode program berikut Exception Handling akan mendeteksi input jika terjadi error.

Csharp


using System;

namespace OOPpraktikum
{
class Program
{
public static void Main(string[] args)
{
int angka;

try
{
Console.Write("Masukkan Angka = ");
angka = Convert.ToInt32(Console.ReadLine());
}
catch(Exception)
{
Console.WriteLine("Input Pake Angka . . bukan Huruf . . .");
}


Console.Write("\nPress any key to continue . . . ");
Console.ReadKey(true);
}
}
}


Java

package OOPpraktikum;
import java.util.*;

public class MainClass
{
static Scanner input = new Scanner(System.in);
public static void main(String[] args)
{
int angka;

try
{
System.out.print("Masukkan Angka = ");
angka = input.nextInt();
}
catch(Exception e)
{
System.out.println("Input Pake Angka . . bukan Huruf . . .");
}

System.out.println("\nPress any key to continue . . . ");
}

}

C++

#include <cstdlib>
#include <iostream>

using namespace std;

int main(int argc, char *argv[])
{
try
{
int i;
cout<<"Masukkan Angka = ";
if(!(cin>>i))
{
throw i;
}

}
catch(int e)
{
cout<<"Input Pake Angka . . . Bukan Huruf . ."<<endl;
}

cout<<endl;
system("PAUSE");
return EXIT_SUCCESS;
}


Interface di Java, C# dan C++


Interface adalah sebuah fitur OOP yang menampung method-method kosong. Interface harus diturunkan pada sebuah Class jika ingin di implementasikan. Tidak jauh berbeda dengan Abstract Class kegunaan dari interface, hanya saja interface tidak bisa menampung method default dan tidak mempunyai modifier.

Penggunaan interface dalam bahasa pmrograman Csharp, Java dan C++ berbeda. Jika pada bahasa pmrograman Csharp dan Java, penggunaan interface menggunakan keyword “interface”, tetapi dalam C++ menggunakan fitur Hider File.


Csharp


using System;

namespace OOPpraktikum
{
class Program : KTP,MHS
{
public void ShowKTP(string nama,string alamat,string tlp)
{
Console.WriteLine("KTP");
Console.WriteLine();
Console.WriteLine("Nama anda : {0}",nama);
Console.WriteLine("Alamat : {0}",alamat);
Console.WriteLine("No Telp : {0}",tlp);
Console.WriteLine();
Console.WriteLine();
}

public void ShowMHS(string nama,string nim,string prodi,string tlp)
{
Console.WriteLine("MHS");
Console.WriteLine();
Console.WriteLine("Nama anda : {0}",nama);
Console.WriteLine("NIM : {0}",nim);
Console.WriteLine("Prodi : {0}",prodi);
Console.WriteLine("No Telp : {0}",tlp);
Console.WriteLine();
Console.WriteLine();
}

static Program pro = new Program();

public static void Main(string[] args)
{
string nama = "Muhammad Rizal Afani";
string alamat = "Banyuwangi";
string telp = "303058";
string NIM = "1110100601";
string Jurusan = "Tehnik Informatika";

pro.ShowKTP(nama,alamat,telp);
pro.ShowMHS(nama,NIM,Jurusan,telp);

Console.Write("\nPress any key to continue . . . ");
Console.ReadKey(true);
}
}

interface KTP
{
void ShowKTP(string nama,string alamat,string tlp);
}

interface MHS
{
void ShowMHS(string nama,string nim,string prodi,string tlp);
}
}

Java


package OOPpraktikum;
import java.util.*;

public class MainClass implements KTP,MHS
{

public void ShowKTP(String nama,String alamat,String tlp)
{
System.out.println("KTP");
System.out.println();
System.out.println("Nama anda : "+nama);
System.out.println("Alamat : "+alamat);
System.out.println("No Telp : "+tlp);
System.out.println();
System.out.println();
}

public void ShowMHS(String nama,String nim,String prodi,String tlp)
{
System.out.println("MHS");
System.out.println();
System.out.println("Nama anda : "+nama);
System.out.println("NIM : "+nim);
System.out.println("Prodi : "+prodi);
System.out.println("No Telp : "+tlp);
System.out.println();
System.out.println();
}

private static Scanner input = new Scanner(System.in);
static MainClass pro = new MainClass();

public static void main(String[] args)
{
String nama = "Muhammad Rizal Afani";
String alamat = "Banyuwangi";
String telp = "303058";
String NIM = "1110100601";
String Jurusan = "Tehnik Informatika";

pro.ShowKTP(nama,alamat,telp);
pro.ShowMHS(nama,NIM,Jurusan,telp);

System.out.println("\nPress any key to continue . . . ");
}

}

interface KTP
{
void ShowKTP(String nama,String alamat,String tlp);
}

interface MHS
{
void ShowMHS(String nama,String nim,String prodi,String tlp);
}


C++

KTP.h
Class KTP
{
public : virtual void ShowKTP() = 0;
}



MHS.h
Class MHS
{
public : virtual void ShowMHS() = 0;
}

Main


#include <cstdlib>
#include <iostream>

using namespace std;

#include "MHS.h"
#include "KTP.h"

class Implementasi : public MHS,KTP
{
public : void ShowKTP(string nama, string alamat, string tlp)
{
cout<<"KTP"<<endl;
cout<<endl;
cout<<"Nama anda : "<<nama<<endl;
cout<<"Alamat : "<<alamat<<endl;
cout<<"No Telp : "<<tlp<<endl;
cout<<endl;
cout<<endl;
}

public : void ShowMHS(string nama,string nim,string prodi,string tlp)
{
cout<<"MHS"<<endl;
cout<<endl;
cout<<"Nama anda : "<<nama<<endl;
cout<<"NIM : "<<nim<<endl;
cout<<"Prodi : "<<prodi<<endl;
cout<<"No Telp : "<<tlp<<endl;
cout<<endl;
cout<<endl;
}
};

int main(int argc, char *argv[])
{
Implementasi imp;


string nama = "Muhammad Rizal Afani";
string alamat = "Banyuwangi";
string telp = "303058";
string NIM = "1110100601";
string Jurusan = "Tehnik Informatika";

imp.ShowKTP(nama,alamat,telp);
imp.ShowMHS(nama,NIM,Jurusan,telp);


cout<<endl;
system("PAUSE");
return EXIT_SUCCESS;
}