Programming Learning

Free IT e-learning

[Delphi] Abstraksi

Tutorial ini akan mencoba memaparkan tentang abstraksi dengan delphi jadi untuk anda yang belum mengerti tentang konsep class silahkan melihat kembali tutorial saya di https://programminglearning.wordpress.com/2009/05/02/bermain-main-dengan-class/ .

Hierarki dari sebuah class sebenarnya adalah merupakan kumpulan dari sebuah objek. abstraksi adalah merupakan beberapa method dalam class dimana terdapat satu class yang memiliki karakteristik yang merupakan dasar dari class yang lain. contohnya seperti komputer, walaupun memiliki jenis yang berbeda seperti PC(Personal Computer),Laptop/Notebook,Server Computer(Komputer Server) tetapi tetap memiliki kesamaan yaitu dapat dipakai untuk bekerja(mengetik,membuat laporan,dll)  dan bersenang-senang(main game,chat,facebook,dll). Dengan abstraksi kita dapat mendeklarasikan method ke dalam main class / class utama hanya untuk konsep suatu method (tidak dijabarkan), dan penjabarannya di class anakan yang mana penjabarannya ditambahkan tag override.

OK sekarang sepertinya udah cukup penjelasannya, waktunya untuk implementasi di Delphi secara langsung.  Saya akan membuat suatu class TKomputer seperti yang saya contohkan sebelumnya🙂 . supaya dapat diimplementasikan dengan efektif, saya akan membuatnya ke dalam visual delphi. langkah awal kita rancang suatu class TKomputer dimana rancangannya adalah sebagai berikut :

TKomputer = class
private
FLebar,FVGA: integer;
protected
function GetLebarLayar: Integer; virtual; abstract;
function GetUkuranVGA_MB: Integer; virtual; abstract;
procedure SetLebarLayar(const aLebar: Integer); virtual; abstract;
procedure SetUkuranVGA_MB(const aUkuran: Integer); virtual; abstract;
published
property LebarLayar: Integer read GetLebarLayar write SetLebarLayar;
property UkuranVGA_MB: Integer read GetUkuranVGA_MB write SetUkuranVGA_MB;
end;

Setelah itu kita membuat suatu class anakan dari class TKomputer, sebagai contoh kita akan membuat 2 class yaitu TNoteBook dan TPC. Di masing-masing class anakan, fungsi abstraksi daripada class TKomputer ditulis dan harus dipaparkan, masing-masing class sengaja diberikan tambahan property agar terlihat bedanya. berikut ini adalah rancangan dari class TPC :

TPC = class(TKomputer)
private
FMerkCassing: string;
procedure SetMerkCassing(const aMerk: string);
protected
function GetLebarLayar: Integer;
function GetUkuranVGA_MB: Integer;
procedure SetLebarLayar(const aLebar: Integer);
procedure SetUkuranVGA_MB(const aUkuran: Integer);
public
property MerkCassing: string read FMerkCassing write SetMerkCassing;
end;

dan pemaparan class TPC adalah sebagai berikut :

function TPC.GetLebarLayar: Integer;
begin
Result := FLebar;
end;

function TPC.GetUkuranVGA_MB: Integer;
begin
Result := FVGA;
end;

procedure TPC.SetLebarLayar(const aLebar: Integer);
begin
FLebar := aLebar;
end;

procedure TPC.SetMerkCassing(const aMerk: string);
begin
FMerkCassing := aMerk;
end;

procedure TPC.SetUkuranVGA_MB(const aUkuran: Integer);
begin
FVGA := aUkuran;
end;

Setelah itu kita akan membuat class TNoteBook yang perancangannya adalah sebagai berikut :

TNoteBook = class(TKomputer)
private
FDayaTahanBaterai_Jam: Integer;
FInternalBluetooth: Boolean;
FInternalWiFi: Boolean;
procedure SetDayaTahanBaterai_Jam(const aTahan: Integer);
procedure SetInternalBluetooth(const aInternal: Boolean);
procedure SetInternalWiFi(const aWifi: Boolean);
protected
function GetLebarLayar: Integer;
function GetUkuranVGA_MB: Integer;
procedure SetLebarLayar(const aLebar: Integer);
procedure SetUkuranVGA_MB(const aUkuran: Integer);
public
property DayaTahanBaterai_Jam: Integer read FDayaTahanBaterai_Jam write
SetDayaTahanBaterai_Jam;
property InternalBluetooth: Boolean read FInternalBluetooth write
SetInternalBluetooth;
property InternalWiFi: Boolean read FInternalWiFi write SetInternalWiFi;
end;

Dan pemaparan method dari class TNoteBook adalah sebagai berikut :

function TNoteBook.GetLebarLayar: Integer;
begin
Result := FLebar;
end;

function TNoteBook.GetUkuranVGA_MB: Integer;
begin
Result := FVGA;
end;

procedure TNoteBook.SetDayaTahanBaterai_Jam(const aTahan: Integer);
begin
FDayaTahanBaterai_Jam := aTahan;
end;

procedure TNoteBook.SetInternalBluetooth(const aInternal: Boolean);
begin
FInternalBluetooth := aInternal;
end;

procedure TNoteBook.SetInternalWiFi(const aWifi: Boolean);
begin
FInternalWiFi := aWifi;
end;

procedure TNoteBook.SetLebarLayar(const aLebar: Integer);
begin
FLebar := aLebar;
end;

procedure TNoteBook.SetUkuranVGA_MB(const aUkuran: Integer);
begin
FVGA := aUkuran;
end;

Lalu untuk menggunakannya di Form, terlebih dahulu kita rancang formnya sebagai berikut :

Rancangan FormSetelah itu kita deklarasikan 2 variabel yang bertipe masing-masing class yang telah kita buat sebelumnya :

var
frmMain: TfrmMain; //nama form, bawaan dari IDE Delphi
cNoteBook: TNoteBook;
cPC: TPC;

Supaya desain anda sama dengan saya (penamaan form dan letak), maka berikan nama unit dengan uMain dan nama form dengan frmMain dan edit uMain.dfm sebagai berikut :

object frmMain: TfrmMain
Left = 0
Top = 0
BorderStyle = bsDialog
Caption = 'Abstraksi  '
ClientHeight = 342
ClientWidth = 401
Color = clBtnFace
Font.Charset = DEFAULT_CHARSET
Font.Color = clWindowText
Font.Height = -11
Font.Name = 'Tahoma'
Font.Style = []
OldCreateOrder = False
Position = poDesktopCenter
PixelsPerInch = 96
TextHeight = 13
object rgJenis: TRadioGroup
Left = 8
Top = -1
Width = 385
Height = 42
Caption = ' [ Pilih Jenis ]  '
Columns = 2
ItemIndex = 0
Items.Strings = (
'PC (Personal Computer)'
'NoteBook / Laptop')
TabOrder = 0
OnClick = rgJenisClick
end
object Panel1: TPanel
Left = 8
Top = 47
Width = 385
Height = 66
BevelOuter = bvLowered
TabOrder = 1
object edUkuran: TLabeledEdit
Left = 144
Top = 7
Width = 33
Height = 21
EditLabel.Width = 103
EditLabel.Height = 13
EditLabel.Caption = 'Ukuran Layar (Inch) :'
LabelPosition = lpLeft
TabOrder = 0
end
object edVGA: TLabeledEdit
Left = 144
Top = 34
Width = 33
Height = 21
EditLabel.Width = 89
EditLabel.Height = 13
EditLabel.Caption = 'Ukuran VGA (MB) :'
LabelPosition = lpLeft
TabOrder = 1
end
end
object pnNotebook: TPanel
Left = 8
Top = 167
Width = 385
Height = 137
BevelOuter = bvLowered
Enabled = False
TabOrder = 2
object Label1: TLabel
Left = 72
Top = 34
Width = 68
Height = 13
Caption = 'Internal WiFi :'
end
object Label2: TLabel
Left = 46
Top = 71
Width = 94
Height = 13
Alignment = taRightJustify
Caption = 'Internal Bluetooth :'
end
object edBaterai: TLabeledEdit
Left = 144
Top = 7
Width = 33
Height = 21
EditLabel.Width = 132
EditLabel.Height = 13
EditLabel.Caption = 'Daya Tahan Baterai (Jam) :'
LabelPosition = lpLeft
TabOrder = 0
end
object rgWifi: TRadioGroup
Left = 146
Top = 34
Width = 145
Height = 31
Columns = 2
Items.Strings = (
'Ada'
'Tidak')
TabOrder = 1
end
object rgBluetooth: TRadioGroup
Left = 146
Top = 71
Width = 145
Height = 31
Columns = 2
Items.Strings = (
'Ada'
'Tidak')
TabOrder = 2
end
end
object btnSimpan: TButton
Left = 8
Top = 310
Width = 75
Height = 25
Caption = '&Simpan'
TabOrder = 3
OnClick = btnSimpanClick
end
object btnTampil: TButton
Left = 89
Top = 310
Width = 75
Height = 25
Caption = '&Tampilkan'
TabOrder = 4
end
object btnKeluar: TButton
Left = 318
Top = 310
Width = 75
Height = 25
Caption = '&Keluar'
TabOrder = 5
OnClick = btnKeluarClick
end
object pnPC: TPanel
Left = 8
Top = 119
Width = 385
Height = 41
BevelOuter = bvLowered
TabOrder = 6
object edMerk: TLabeledEdit
Left = 144
Top = 12
Width = 201
Height = 21
EditLabel.Width = 70
EditLabel.Height = 13
EditLabel.Caption = 'Merk Cassing :'
LabelPosition = lpLeft
TabOrder = 0
end
end
end

Setelah itu berikan aksi untuk TRadioGroup bernama rgJenis pada event onClick sebagai berikut :

pnNotebook.Enabled := rgJenis.ItemIndex = 1;
pnPC.Enabled       := rgJenis.ItemIndex = 0;

Lalu berikan aksi untuk TButton bernama btnSimpan pada event onClick sebagai berikut :

case rgJenis.ItemIndex of
0:
begin
cPC := TPC.Create;
with cPC do
begin
LebarLayar    := StrToInt(edUkuran.Text);
UkuranVGA_MB  := StrToInt(edVGA.Text);
MerkCassing   := edMerk.Text;
end;
end;
1:
begin
cNoteBook := TNoteBook.Create;
with cNoteBook do
begin
LebarLayar            := StrToInt(edUkuran.Text);
UkuranVGA_MB          := StrToInt(edVGA.Text);
DayaTahanBaterai_Jam  := StrToInt(edBaterai.Text);
InternalWiFi          := not Boolean(rgWifi.ItemIndex);
InternalBluetooth     := not Boolean(rgBluetooth.ItemIndex);
end;
end;

edUkuran.Clear;
edVGA.Clear;
edBaterai.Clear;
edMerk.Clear;
rgWifi.ItemIndex := 0;
rgBluetooth.ItemIndex := 0;end;

Lalu berikan aksi untuk TButton bernama btnTampil pada event onClick sebagai berikut :

CONST
arrPilihan : array[0..1] of string = ('PC (Personal Computer)','Notebook / Laptop');
arrBoolean : array[0..1] of string = ('Tersedia','Tidak Tersedia');
var
sMessage: string;
begin

sMessage := 'Pilihan Anda adalah : ' + arrPilihan[rgJenis.ItemIndex] + #13 +
'===============================================================' + #13 +
'Spesifikasi yang Anda tuliskan : ' + #13 +
'Ukuran Layar : %s"' + #13 +
'Ukuran VGA : %s MB' + #13;
case rgJenis.ItemIndex of
0:
begin
sMessage := sMessage + 'Merk Cassing : %s';
sMessage := Format(sMessage,[IntToStr(cPC.LebarLayar),IntToStr(cPC.UkuranVGA_MB),cPC.MerkCassing]);
end;
1:
begin
sMessage := sMessage + 'Daya Tahan Batterai : %s Jam' + #13 +
'Internal WiFi : %s ' + #13 +
'Internal Bluetooth : %s';
sMessage := Format(sMessage,[IntToStr(cNoteBook.LebarLayar),IntToStr(cNoteBook.UkuranVGA_MB),
IntToStr(cNoteBook.DayaTahanBaterai_Jam),
arrBoolean[Integer(cNoteBook.InternalWiFi)],
arrBoolean[Integer(cNoteBook.InternalBluetooth)]]);
end;
end;
ShowMessage(sMessage);

Langkah Terakhir, berikan kode untuk TButton bernama btnKeluar pada event onClick sebagai berikut :

Close;

Nah, apabila anda telah menjalankan langkah-langkah di atas dengan benar maka saatnya sekarang menguji coba aplikasi dengan menekan F9 pada keyboard dan apabila telah benar maka hasilnya akan sebagai berikut :
Aplikasi Abstraksi

Langkah penggunaanya isikan jenis pilihan terlebih dahulu (PC / Notebook) kemudian isikan detailnya sesuai dengan pilihannya (beberapa group panel akan disable tergantung dari pilihan jenis). lalu tekan tombol simpan dan terakhir tekan tombol tampilkan untuk menampilkan data yang telah terisi.

Kode selengkapnya dari uMain adalah sebagai berikut :

unit uMain;
{********************************************************************
THIS SOURCE CODE IS DOWNLOADED FROM programminglearning.wordpress.com

Created by Tigor Mangatur Manurung for Education only
cp : einsthonk@gmail.com
*********************************************************************}
interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, ExtCtrls;

type
  TfrmMain = class(TForm)
    rgJenis: TRadioGroup;
    Panel1: TPanel;
    edUkuran: TLabeledEdit;
    edVGA: TLabeledEdit;
    pnNotebook: TPanel;
    edBaterai: TLabeledEdit;
    Label1: TLabel;
    rgWifi: TRadioGroup;
    rgBluetooth: TRadioGroup;
    Label2: TLabel;
    btnSimpan: TButton;
    btnTampil: TButton;
    btnKeluar: TButton;
    pnPC: TPanel;
    edMerk: TLabeledEdit;
    procedure btnSimpanClick(Sender: TObject);
    procedure btnKeluarClick(Sender: TObject);
    procedure btnTampilClick(Sender: TObject);
    procedure rgJenisClick(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

  TKomputer = class
  private
    FLebar,FVGA: integer;
  protected
    function GetLebarLayar: Integer; virtual; abstract;
    function GetUkuranVGA_MB: Integer; virtual; abstract;
    procedure SetLebarLayar(const aLebar: Integer); virtual; abstract;
    procedure SetUkuranVGA_MB(const aUkuran: Integer); virtual; abstract;
  published
    property LebarLayar: Integer read GetLebarLayar write SetLebarLayar;
    property UkuranVGA_MB: Integer read GetUkuranVGA_MB write SetUkuranVGA_MB;
  end;

  TPC = class(TKomputer)
  private
    FMerkCassing: string;
    procedure SetMerkCassing(const aMerk: string);
  protected
    function GetLebarLayar: Integer;override;
    function GetUkuranVGA_MB: Integer;override;
    procedure SetLebarLayar(const aLebar: Integer);override;
    procedure SetUkuranVGA_MB(const aUkuran: Integer);override;
  public
    property MerkCassing: string read FMerkCassing write SetMerkCassing;
  end;

  TNoteBook = class(TKomputer)
  private
    FDayaTahanBaterai_Jam: Integer;
    FInternalBluetooth: Boolean;
    FInternalWiFi: Boolean;
    procedure SetDayaTahanBaterai_Jam(const aTahan: Integer);
    procedure SetInternalBluetooth(const aInternal: Boolean);
    procedure SetInternalWiFi(const aWifi: Boolean);
  protected
    function GetLebarLayar: Integer;override;
    function GetUkuranVGA_MB: Integer;override;
    procedure SetLebarLayar(const aLebar: Integer);override;
    procedure SetUkuranVGA_MB(const aUkuran: Integer);override;
  public
    property DayaTahanBaterai_Jam: Integer read FDayaTahanBaterai_Jam write
        SetDayaTahanBaterai_Jam;
    property InternalBluetooth: Boolean read FInternalBluetooth write
        SetInternalBluetooth;
    property InternalWiFi: Boolean read FInternalWiFi write SetInternalWiFi;
  end;

var
  frmMain: TfrmMain;
  cNoteBook: TNoteBook;
  cPC: TPC;

implementation

{$R *.dfm}

{ TPC }

function TPC.GetLebarLayar: Integer;
begin
Result := FLebar;
end;

function TPC.GetUkuranVGA_MB: Integer;
begin
Result := FVGA;
end;

procedure TPC.SetLebarLayar(const aLebar: Integer);
begin
FLebar := aLebar;
end;

procedure TPC.SetMerkCassing(const aMerk: string);
begin
  FMerkCassing := aMerk;
end;

procedure TPC.SetUkuranVGA_MB(const aUkuran: Integer);
begin
FVGA := aUkuran;
end;

{ TNoteBook }

function TNoteBook.GetLebarLayar: Integer;
begin
Result := FLebar;
end;

function TNoteBook.GetUkuranVGA_MB: Integer;
begin
Result := FVGA;
end;

procedure TNoteBook.SetDayaTahanBaterai_Jam(const aTahan: Integer);
begin
  FDayaTahanBaterai_Jam := aTahan;
end;

procedure TNoteBook.SetInternalBluetooth(const aInternal: Boolean);
begin
  FInternalBluetooth := aInternal;
end;

procedure TNoteBook.SetInternalWiFi(const aWifi: Boolean);
begin
  FInternalWiFi := aWifi;
end;

procedure TNoteBook.SetLebarLayar(const aLebar: Integer);
begin
FLebar := aLebar;
end;

procedure TNoteBook.SetUkuranVGA_MB(const aUkuran: Integer);
begin
FVGA := aUkuran;
end;

procedure TfrmMain.btnSimpanClick(Sender: TObject);
begin
case rgJenis.ItemIndex of
  0:
    begin
      cPC := TPC.Create;
      with cPC do
        begin
          LebarLayar    := StrToInt(edUkuran.Text);
          UkuranVGA_MB  := StrToInt(edVGA.Text);
          MerkCassing   := edMerk.Text;
        end;
    end;
  1:
    begin
      cNoteBook := TNoteBook.Create;
      with cNoteBook do
        begin
          LebarLayar            := StrToInt(edUkuran.Text);
          UkuranVGA_MB          := StrToInt(edVGA.Text);
          DayaTahanBaterai_Jam  := StrToInt(edBaterai.Text);
          InternalWiFi          := not Boolean(rgWifi.ItemIndex);
          InternalBluetooth     := not Boolean(rgBluetooth.ItemIndex);
        end;
    end;
end;

edUkuran.Clear;
edVGA.Clear;
edBaterai.Clear;
edMerk.Clear;
rgWifi.ItemIndex := 0;
rgBluetooth.ItemIndex := 0;
end;

procedure TfrmMain.btnKeluarClick(Sender: TObject);
begin
Close;
end;

procedure TfrmMain.btnTampilClick(Sender: TObject);
CONST
  arrPilihan : array[0..1] of string = ('PC (Personal Computer)','Notebook / Laptop');
  arrBoolean : array[0..1] of string = ('Tidak Tersedia','Tersedia');
var
  sMessage: string;
begin

sMessage := 'Pilihan Anda adalah : ' + arrPilihan[rgJenis.ItemIndex] + #13 +
            '===============================================================' + #13 +
            'Spesifikasi yang Anda tuliskan : ' + #13 +
            'Ukuran Layar : %s"' + #13 +
            'Ukuran VGA : %s MB' + #13;
case rgJenis.ItemIndex of
  0:
    begin
      sMessage := sMessage + 'Merk Cassing : %s';
      sMessage := Format(sMessage,[IntToStr(cPC.LebarLayar),IntToStr(cPC.UkuranVGA_MB),cPC.MerkCassing]);
    end;
  1:
    begin
      sMessage := sMessage + 'Daya Tahan Batterai : %s Jam' + #13 +
                  'Internal WiFi : %s ' + #13 +
                  'Internal Bluetooth : %s';
      sMessage := Format(sMessage,[IntToStr(cNoteBook.LebarLayar),IntToStr(cNoteBook.UkuranVGA_MB),
                         IntToStr(cNoteBook.DayaTahanBaterai_Jam),
                         arrBoolean[Integer(cNoteBook.InternalWiFi)],
                         arrBoolean[Integer(cNoteBook.InternalBluetooth)]]);
    end;
end;
ShowMessage(sMessage);
end;

procedure TfrmMain.rgJenisClick(Sender: TObject);
begin
pnNotebook.Enabled := rgJenis.ItemIndex = 1;
pnPC.Enabled       := rgJenis.ItemIndex = 0;
end;
end.

Apabila temen-temen ingin mendownload project ini silahkan download disini
Demikian tutorial tentang abstraksi dan semoga apa yang ditulis bermanfaat untuk temen-temen semuanya.

Tinggalkan Balasan

Isikan data di bawah atau klik salah satu ikon untuk log in:

Logo WordPress.com

You are commenting using your WordPress.com account. Logout / Ubah )

Gambar Twitter

You are commenting using your Twitter account. Logout / Ubah )

Foto Facebook

You are commenting using your Facebook account. Logout / Ubah )

Foto Google+

You are commenting using your Google+ account. Logout / Ubah )

Connecting to %s

%d blogger menyukai ini: