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
- Kelas merupakan deskripsi abstrak informasi dan tingkah laku dari sekumpulan data.
- Kelas dapat diilustrasikan sebagai suatu cetak biru(blueprint) atau prototipe yang digunakan untuk menciptakan objek.
- Kelas merupakan tipe data bagi objek yang mengenkapsulasi data dan operasi pada data dalam suatu unit tunggal.
- Kelas mendefinisikan suatu struktur yang terdiri atas data kelas (data field), prosedur atau fungsi (method), dan sifat kelas (property).
- Encapsulation
- Istilah enkapsulasi sebenarnya adalah kombinasi data dan fungsionalitas dalam sebuah unit tunggal sebagai bentuk untuk menyembunyikan detail informasi.
- Proses enkapsulasi memudahkan kita untuk menggunakan sebuah objek dari suatu kelas karena kita tidak perlu mengetahui segala hal secara rinci.
- Enkapsulasi menekankan pada antarmuka suatu kelas, atau dengan kata lain bagaimana menggunakan objek kelas tertentu.
- 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
- Kita dapat mendefinisikan suatu kelas baru dengan mewarisi sifat dari kelas lain yang sudah ada.
- Penurunan sifat ini bisa dilakukan secara bertingkattingkat, sehingga semakin ke bawah kelas tersebut menjadi semakin spesifik.
- Sub kelas memungkinkan kita untuk melakukan spesifikasi detail dan perilaku khusus dari kelas supernya.
- 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
- Polimorfisme merupakan kemampuan objekobjek yang berbeda kelas namun terkait dalam pewarisan untuk merespon secara berbeda terhadap suatu pesan yang sama.
- Polimorfisme juga dapat dikatakan kemampuan sebuah objek untuk memutuskan method mana yang akan diterapkan padanya, tergantung letak objek tersebut pada jenjang pewarisan.
- Method overriding.
- Method name overloading.
Apa saja Kelebihan Menggunakan OOP ?
Berikut ini adalah kelebihan menggunakan OOP dalam membuat aplikasi:
- Syntax lebih terstruktur.
- Sangat efektif jika di gunakan untuk membuat aplikasi yang berskala besar.
- Lebih mudah dan menghemat waktu, karena function bisa di panggil berulang-ulang kali.
- Aplikasi lebih mudah di kembangkan.
- Memudahkan kamu untuk memetakan objek dalam problem domain ke objek dalam program.
- Prinsip enkapsulasi data, dapat membantu kamu untuk membangun program yang aman dan tidak mudah diserang oleh kode di bagian lain dari program.
- Dengan menggunakan prinsip inheritance, kamu dapat menghilangkan kode yang berlebihan dan memperluas penggunaan kelas yang ada.
- 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

