+62 812-1171-5379 Fast Respond

Penerapan OOP pada Database

Penerapan OOP pada Database

Pengertian OOP

OOP (Object Oriented Programming) adalah suatu metode pemrograman yang berorientasi kepada objek.

Tujuan dari OOP diciptakan adalah untuk mempermudah pengembangan program dengan cara mengikuti model yang telah ada di kehidupan sehari-hari.

Jadi setiap bagian dari suatu permasalahan adalah objek, nah objek itu sendiri merupakan gabungan dari beberapa objek yang lebih kecil lagi. Saya ambil contoh Pesawat, Pesawat adalah sebuah objek. Pesawat itu sendiri terbentuk dari beberapa objek yang lebih kecil lagi seperti mesin, roda, baling-baling, kursi, dll. Pesawat sebagai objek yang terbentuk dari objek-objek yang lebih kecil saling berhubungan, berinteraksi, berkomunikasi dan saling mengirim pesan kepada objek-objek yang lainnya. Begitu juga dengan program, sebuah objek yang besar dibentuk dari beberapa objek yang lebih kecil, objek-objek itu saling berkomunikasi, dan saling berkirim pesan kepada objek yang lain.

Konsep OOP

  • Abstrak Class
    1. Kelas merupakan deskripsi abstrak informasi dan tingkah laku dari sekumpulan data.
    2. Kelas dapat diilustrasikan sebagai suatu cetak biru(blueprint) atau prototipe yang digunakan untuk menciptakan objek.
    3. Kelas merupakan tipe data bagi objek yang mengenkapsulasi data dan operasi pada data dalam suatu unit tunggal.
    4. Kelas mendefinisikan suatu struktur yang terdiri atas data kelas (data field), prosedur atau fungsi (method), dan sifat kelas (property).
  • Encapsulation
    1. Istilah enkapsulasi sebenarnya adalah kombinasi data dan fungsionalitas dalam sebuah unit tunggal sebagai bentuk untuk menyembunyikan detail informasi.
    2. Proses enkapsulasi memudahkan kita untuk menggunakan sebuah objek dari suatu kelas karena kita tidak perlu mengetahui segala hal secara rinci.
    3. Enkapsulasi menekankan pada antarmuka suatu kelas, atau dengan kata lain bagaimana menggunakan objek kelas tertentu.
    4. Contoh: kelas mobil menyediakan antarmuka fungsi untuk menjalankan mobil tersebut, tanpa kita perlu tahu komposisi bahan bakar, udara dan kalor yang diperlukan untuk proses tersebut.
  • Inheritance
    1. Kita dapat mendefinisikan suatu kelas baru dengan mewarisi sifat dari kelas lain yang sudah ada.
    2. Penurunan sifat ini bisa dilakukan secara bertingkattingkat, sehingga semakin ke bawah kelas tersebut menjadi semakin spesifik.
    3. Sub kelas memungkinkan kita untuk melakukan spesifikasi detail dan perilaku khusus dari kelas supernya.
    4. Dengan konsep pewarisan, seorang programmer dapat menggunakan kode yang telah ditulisnya pada kelas super berulang kali pada kelas-kelas turunannya tanpa harus menulis ulang semua kodekode itu.
  • Polymorphism
    1. Polimorfisme merupakan kemampuan objekobjek yang berbeda kelas namun terkait dalam pewarisan untuk merespon secara berbeda terhadap suatu pesan yang sama.
    2. Polimorfisme juga dapat dikatakan kemampuan sebuah objek untuk memutuskan method mana yang akan diterapkan padanya, tergantung letak objek tersebut pada jenjang pewarisan.
    3. Method overriding.
    4. Method name overloading.

Apa saja Kelebihan Menggunakan OOP ?

Berikut ini adalah kelebihan menggunakan OOP dalam membuat aplikasi:

  1. Syntax lebih terstruktur.
  2. Sangat efektif jika di gunakan untuk membuat aplikasi yang berskala besar.
  3. Lebih mudah dan menghemat waktu, karena function bisa di panggil berulang-ulang kali.
  4. Aplikasi lebih mudah di kembangkan.
  5. Memudahkan kamu untuk memetakan objek dalam problem domain ke objek dalam program.
  6. Prinsip enkapsulasi data, dapat membantu kamu untuk membangun program yang aman dan tidak mudah diserang oleh kode di bagian lain dari program.
  7. Dengan menggunakan prinsip inheritance, kamu dapat menghilangkan kode yang berlebihan dan memperluas penggunaan kelas yang ada.
  8. Teknik pengiriman pesan berguna untuk komunikasi antar objek yang membuat deskripsi antarmuka dengan sistem eksternal menjadi lebih sederhana.

Apa yang di maksud dengan Visibility

Visibility adalah Teknik yang digunakan untuk mengatur property maupun method pada sebuah objek.Dengan menggunakan Access Modifier nantinya akan memberi batasan akses yang di inginkan terhadap suatu objek tertentu.

Berikut ini 3 jenis keyword visibilty pada OOP :
1. Public
Property dan Mehod dapat di akses dari mana saja, bahkan dari luar class yang digunakan.Penggunaan Visibilty public sebenarnya sudah ktia lakukan dari awal belajar OOP pada PHP di tutorial sebelumnya.
2. Protected
Penggunaan Method dan Property dapat di akses pada class itu sendiri maupun class turunannya, parent dan child. Property dan Method yang menggunuakan visibility protected tidak dapat di instance.
3. Private
Digunakan hanya untuk class tertentu atau class itu sendiri. Class ini yang sangat tertutup terhadap pemanggilan / intance method maupun property.
Penggunaan visibility private untuk data-data untuk class itu sendiri yang biasanya berupa data secara detail dan tidak di miliki oleh class lainnya.

 

Function vs Method

Pada kelas OOP ini banyak sekali yang bertanya perihal apa bedanya function dengan method, baik sampai sini berarti saya menduga pertanyaan ini muncul pastinya sudah bisa membedakan antara Procedure dan Function, tapi tidak apa-apa saya lanjutkan saja hanya untuk saling memahami saja.

Fungsi

Fungsi bisa terdiri dari serangkaian instruksi terhadap data atau terhadap variabel yang ada dan dapat mengembalikan sebuah hasil. Salah satu keunggulan fungsi adalah dapat digunakan berulang-ulang sehingga kita cukup memanggil fungsi tersebut tanpa harus mengetik serangkaian instruksi di dalamnya secara berulang-ulang.

Metode

Sebuah metode (method) sama seperti fungsi (function), yaitu serangkaian instruksi-instruksi untuk menjalankan sebuah tugas. Bedanya adalah metode berasosiasi dengan object sedangkan fungsi tidak. 

 

Supaya tidak bingung dan lebih jelas lagi saya akan contohkan terapan sederhana pada kasus master data karyawan :

 


Silahkan membuat database bernama oop kemudian buat tabel bernama t_karyawan, secara kebetulan saya menggunakan pada mysql pada contoh kali ini

CREATE TABLE `t_karyawan` ( `Id` int(11) NOT NULL AUTO_INCREMENT, `nik` varchar(6) DEFAULT NULL, `nama` varchar(150) DEFAULT NULL, `alamat` varchar(150) DEFAULT NULL, `keterangan` varchar(250) DEFAULT NULL, PRIMARY KEY (`Id`) ) ENGINE=MyISAM DEFAULT CHARSET=latin1;

unit UKaryawan;

interface

uses DB, ADODB, Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, ComCtrls, StdCtrls, Buttons, ExtCtrls, DBAccess, MyAccess;

type
  TCKaryawan = Class
  private
    Nik : string;
    Nama : string;
    Alamat : string;
    Keterangan : String;
  public
    constructor create;
    procedure Set_Nik(nik1: string);
    procedure Set_Nama(nama1: string);
    procedure Set_Alamat(alamat1: string);
    procedure Set_Keterangan(keterangan1: string);

    function Get_Nik():string;
    function Get_Nama():string;
    function Get_Alamat():string;
    function Get_Keterangan():string;

    Procedure Konekdb;
    function RefreshData(nama_LV : Tlistview): boolean;
    function Simpan(Var_nik, Var_nama, Var_alamat, Var_keterangan: string): boolean;
    function Koreksi(Var_nik, Var_nama, Var_alamat, Var_keterangan: string): boolean;
    function Hapus(Var_nik : String): boolean;
    function Find_data(Var_nik: string): boolean;
    function Filter_data(SQltext: string; nama_LV : TListView): boolean;
  End;

Const
     Onidle = 0;
     OnAppend = 1;
     OnEdit = 2;
     Onbrowse = 3;

Var val_karyawan : byte;
    Adokon : TMyConnection;
    MyQuery1 : TMyQuery;

implementation

constructor TCKaryawan.Create;
begin
     Nik := '';
     Nama := '';
     Alamat := '';
     Keterangan := '';
end;

Procedure TCKaryawan.Konekdb;
begin
     Adokon := TMyConnection.Create(nil);
     Adokon.Close;
     Adokon.Server := 'localhost';
     Adokon.Username := 'root';
     Adokon.port := 3306;
     Adokon.Password := '';
     Adokon.Database := 'oop';
     Adokon.LoginPrompt := False;
     Adokon.Open;
end;

procedure TCKaryawan.Set_Nik(nik1: string);
begin
     Nik := nik1;
end;

procedure TCKaryawan.Set_Nama(nama1: string);
begin
     Nama := nama1;
end;

procedure TCKaryawan.Set_Alamat(alamat1: string);
begin
     Alamat := alamat1;
end;

procedure TCKaryawan.Set_Keterangan(keterangan1: string);
begin
     Keterangan := keterangan1;
end;

function TCKaryawan.Get_nik: string;
begin
     result := nik;
end;

function TCKaryawan.Get_nama: string;
begin
     result := nama;
end;

function TCKaryawan.Get_alamat: string;
begin
     result := Alamat;
end;

function TCKaryawan.Get_keterangan: string;
begin
     result := Keterangan;
end;

function TCKaryawan.Find_data(Var_nik: string): boolean;
var
  Hasil : boolean;
begin
      Hasil := false;
      Konekdb;
      MyQuery1 := TMyQuery.Create(nil);
      try
          MyQuery1.Connection := Adokon;
          MyQuery1.SQL.Add('select * from t_karyawan where nik='''+ Var_nik +''' ');
          MyQuery1.Open;
          if (Not MyQuery1.IsEmpty) or (Not MyQuery1.Eof) Then
          Begin
               Nik := MyQuery1.fieldbyname('nik').AsString;
               Nama := MyQuery1.fieldbyname('nama').AsString;;
               Alamat := MyQuery1.fieldbyname('alamat').AsString;
               Keterangan := MyQuery1.fieldbyname('keterangan').AsString;
          end;
          Hasil := true;
      finally
          Adokon.Connected := false;
          MyQuery1.Free;
          result:=hasil;
      end;
end;

function TCKaryawan.Filter_data(SQltext: string; nama_LV : TListView): boolean;
var
  Hasil : boolean;
  lv: TListItem;
begin
      Hasil := false;
      Konekdb;
      MyQuery1 := TMyQuery.Create(nil);
      nama_LV.Clear;
      Try
          MyQuery1.Connection := Adokon;
          MyQuery1.Close;
          MyQuery1.sql.Clear;
          if  SQltext ='' Then
          Begin
               MyQuery1.SQL.Add('Select * from t_karyawan '+
                                'order by nik');
          End else
          Begin
               MyQuery1.SQL.Add('Select * from t_karyawan where nik like ''%'+ SQltext +'%'' or '+
                                          'nama like ''%'+ SQltext +'%'' or '+
                                          'alamat like ''%'+ SQltext +'%'' or '+
                                          'keterangan like ''%'+ SQltext +'%'' '+
                                          'order by nik');
          End;
          MyQuery1.Open;
          if (Not MyQuery1.IsEmpty) or (Not MyQuery1.Eof) Then
          Begin
               MyQuery1.First;
               while not MyQuery1.Eof Do
               Begin
                    lv := nama_LV.Items.Add;
                    lv.Caption := MyQuery1.fieldbyname('nik').AsString;
                    lv.SubItems.Add(MyQuery1.fieldbyname('nama').AsString);
                    lv.SubItems.Add(MyQuery1.fieldbyname('alamat').AsString);
                    lv.SubItems.Add(MyQuery1.fieldbyname('keterangan').AsString);
                    MyQuery1.Next;
               End;
          End;

          Hasil := true;
      finally
          Adokon.Connected := false;
          MyQuery1.Free;
          result:=hasil;
      End;
end;

function TCKaryawan.Simpan(Var_nik, Var_nama, Var_alamat, Var_keterangan: string): boolean;
var
  Hasil : boolean;
begin
      Hasil := false;
      Konekdb;
      MyQuery1 := TMyQuery.Create(nil);
      try
          MyQuery1.Connection := Adokon;

          MyQuery1.SQL.Add('INSERT INTO t_karyawan(nik, nama, alamat, keterangan) VALUES (:f_nik, :f_nama, :f_alamat, :f_keterangan)');
          MyQuery1.ParamCheck := False;
          MyQuery1.Params.ParamByName('f_nik').Value := Var_nik;
          MyQuery1.Params.ParamByName('f_nama').Value := var_nama;
          MyQuery1.Params.ParamByName('f_alamat').Value := var_alamat;
          MyQuery1.Params.ParamByName('f_keterangan').Value := var_keterangan;
          MyQuery1.Execute;
          Hasil := true;
      finally
          Adokon.Connected := false;
          MyQuery1.Free;
          result:=hasil;
      end;
end;

function TCKaryawan.Koreksi(Var_nik, Var_nama, Var_alamat, Var_keterangan: string): boolean;
var
  Hasil : boolean;
begin
      Hasil := false;
      Konekdb;
      MyQuery1 := TMyQuery.Create(nil);

      try
          MyQuery1.Connection := Adokon;
          MyQuery1.SQL.Add('Update t_karyawan set nama= :f_nama, alamat= :f_alamat, keterangan= :f_keterangan where nik='''+ Var_nik +'''');
          MyQuery1.Params.ParamByName('f_nama').Value := var_nama;
          MyQuery1.Params.ParamByName('f_alamat').Value := var_alamat;
          MyQuery1.Params.ParamByName('f_keterangan').Value := var_keterangan;
          MyQuery1.Execute;
          Hasil := true;
      finally
          Adokon.Connected := false;
          MyQuery1.Free;
          result:=hasil;
      end;
end;

function TCKaryawan.Hapus(Var_nik : String): boolean;
var
  Hasil : boolean;
begin
      Hasil := false;
      Konekdb;
      MyQuery1 := TMyQuery.Create(nil);

      try
          MyQuery1.Connection := Adokon;
          MyQuery1.SQL.Add('Delete from t_karyawan where nik='''+ Var_nik +''' ');
          MyQuery1.Execute;
          Hasil := true;
      finally
          Adokon.Connected := false;
          MyQuery1.Free;
          result:=hasil;
      end;
end;

function TCKaryawan.RefreshData(nama_LV : Tlistview): boolean;
var
  Hasil : boolean;
  lv: TListItem;
begin
      Hasil := false;
      Konekdb;
      MyQuery1 := TMyQuery.Create(nil);
      nama_LV.Clear;
      Try
          MyQuery1.Connection := Adokon;
          MyQuery1.SQL.Add('Select * from t_karyawan order by nik');
          MyQuery1.Open;
          if (Not MyQuery1.IsEmpty) or (Not MyQuery1.Eof) Then
          Begin
               MyQuery1.First;
               while not MyQuery1.Eof Do
               Begin
                    lv := nama_LV.Items.Add;
                    lv.Caption := MyQuery1.fieldbyname('nik').AsString;
                    lv.SubItems.Add(MyQuery1.fieldbyname('nama').AsString);
                    lv.SubItems.Add(MyQuery1.fieldbyname('alamat').AsString);
                    lv.SubItems.Add(MyQuery1.fieldbyname('keterangan').AsString);
                    MyQuery1.Next;
               End;
          End;

          Hasil := true;
      finally
          Adokon.Connected := false;
          MyQuery1.Free;
          result:=hasil;
      End;
end;

end.

Cara menggunakan / memanggil class sebagai berikut


unit Uutama;

interface

uses
  UKaryawan, Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, ComCtrls, StdCtrls, Buttons, ExtCtrls, Data.DB, DBAccess, MyAccess,
  MemDS;

type
  TFUtama = class(TForm)
    Panel1: TPanel;
    Panel2: TPanel;
    Button1: TButton;
    Button3: TButton;
    Button4: TButton;
    Label1: TLabel;
    Edit1: TEdit;
    Button2: TButton;
    Button5: TButton;
    ListView1: TListView;
    Button6: TButton;
    MyConnection1: TMyConnection;
    MyQuery1: TMyQuery;
    procedure FormCreate(Sender: TObject);
    procedure Button1Click(Sender: TObject);
    procedure Button5Click(Sender: TObject);
    procedure Button3Click(Sender: TObject);
    procedure ListView1SelectItem(Sender: TObject; Item: TListItem;
      Selected: Boolean);
    procedure Button6Click(Sender: TObject);
    procedure Button4Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  FUtama: TFUtama;
  Class_Karyawan : TCKaryawan;
  nik_tepilih : String;

implementation

{$R *.dfm}

Uses UKaryawanEntry;

procedure TFUtama.FormCreate(Sender: TObject);
begin
     Class_Karyawan := TCKaryawan.create;
end;

procedure TFUtama.Button1Click(Sender: TObject);
begin
     val_karyawan := onappend;
     Class_Karyawan.Set_Nik('');
     Class_Karyawan.Set_Nama('');
     Class_Karyawan.Set_Alamat('');
     Class_Karyawan.Set_Keterangan('');

     FKaryawanEntry.EdtNik.Text := Class_Karyawan.Get_Nik;
     FKaryawanEntry.EdtNama.Text := Class_Karyawan.Get_Nama;
     FKaryawanEntry.EdtAlamat.Text := Class_Karyawan.Get_Alamat;
     FKaryawanEntry.EdtKeterangan.Text := Class_Karyawan.Get_Keterangan;
     FKaryawanEntry.Show;
end;

procedure TFUtama.Button5Click(Sender: TObject);
begin
     Class_Karyawan.RefreshData(ListView1);
end;

procedure TFUtama.Button3Click(Sender: TObject);
begin
     if Class_Karyawan.Find_data(nik_tepilih) Then
     Begin
          val_karyawan := OnEdit;
          Class_Karyawan.Set_Nik(Class_Karyawan.Get_Nik);
          Class_Karyawan.Set_Nama(Class_Karyawan.Get_Nama);
          Class_Karyawan.Set_Alamat(Class_Karyawan.Get_Alamat);
          Class_Karyawan.Set_Keterangan(Class_Karyawan.Get_Keterangan);

          FKaryawanEntry.EdtNik.Text := Class_Karyawan.Get_Nik;
          FKaryawanEntry.EdtNama.Text := Class_Karyawan.Get_Nama;
          FKaryawanEntry.EdtAlamat.Text := Class_Karyawan.Get_Alamat;
          FKaryawanEntry.EdtKeterangan.Text := Class_Karyawan.Get_Keterangan;
          FKaryawanEntry.Show;
     End;
end;

procedure TFUtama.ListView1SelectItem(Sender: TObject; Item: TListItem; Selected: Boolean);
Var indexnya : integer;
begin
     indexnya := Item.Index;
     nik_tepilih := ListView1.Items.Item[indexnya].Caption;
end;

procedure TFUtama.Button6Click(Sender: TObject);
begin
     if Class_Karyawan.Hapus(nik_tepilih) Then
     Begin
          Class_Karyawan.RefreshData(ListView1);
          ShowMessage('Data telah terhapus');
     End;
end;

procedure TFUtama.Button4Click(Sender: TObject);
begin
     Application.Terminate;
end;

procedure TFUtama.Button2Click(Sender: TObject);
begin
     Class_Karyawan.Filter_data(Edit1.Text, ListView1);
end;

end.

Tampilkan hasil program seperti dibawah ini

OOP Program
OOP Program Entry