Delphi Basics 2: Pengenalan Class dan Object

Dalam rangka menyambut kedatangan Delphi 2009, saya akan menulis beberapa artikel tentang dasar-dasar Delphi. Ide kode-kode yang ditampilkan diambil dari buku C# How To Program. Susah lagi cari ide sendiri :) . Ini adalah bagian kedua.

1. Membuat Sebuah Class yang Memiliki Satu Method:

unit GradeBook;

interface

type
  // Class declaration with one method
  TGradeBook = class(TObject)
  public
    procedure displayMessage();
  end;

implementation

procedure TGradeBook.displayMessage();
begin
  Writeln('Welcome to the Grade Book!');
  Readln;
end;

end.

2. Membuat Instan Obyek dari Class No. 1 di Atas.
Ingat bahwa kode no. 2 dan no. 1 di atas berada di dalam satu project.

program GradeBookTest;

{$APPTYPE CONSOLE}

uses
  SysUtils,
  GradeBook in 'GradeBook.pas';

var
  GradeBook : TGradeBook;
begin
  // Creating an object of class GradeBook and
  // calling its displayMessage method
  try
    GradeBook := TGradeBook.Create;
    GradeBook.displayMessage();
  except
    on E:Exception do
      Writeln(E.Classname, ': ', E.Message);
  end;
end.

3. Membuat Sebuah Class dengan Satu Method yang Memiliki Parameter:

unit GradeBook;

interface

uses SysUtils;

type
  // Class declaration with a method that has a parameter
  TGradeBook = class(TObject)
  public
    procedure displayMessage(courseName: String);
  end;

implementation

procedure TGradeBook.displayMessage(courseName: String);
begin
  Writeln(Format('Welcome to the grade book for' + #13#10
    + '%s' ,[courseName]));
  Readln;
end;

end.

4. Membuat Instan Obyek dari Class No. 3 di Atas.
Ingat bahwa kode no. 4 dan no. 3 di atas berada di dalam satu project.

program GradeBookTest;

{$APPTYPE CONSOLE}

uses
  SysUtils,
  GradeBook in 'GradeBook.pas';

var
  GradeBook : TGradeBook;
  NameOfCourse : String;
begin
  // Create GradeBook object and pass a string to
  // its DisplayMessage method
  try
    GradeBook := TGradeBook.Create;

    Write('Please enter the course name: ');
    Readln(NameOfCourse);

    GradeBook.displayMessage(NameOfCourse);
  except
    on E:Exception do
      Writeln(E.Classname, ': ', E.Message);
  end;
end.

5. Membuat Sebuah Class dengan Sebuah Property.

unit GradeBook;

interface

uses SysUtils;

type
  // GradeBook class that contains a property
  // to get (read) and set (write) its value.
  TGradeBook = class(TObject)
  private
    FCourseName: String;
    procedure SetCourseName(const Value: String);
  public
    property CourseName: String read FCourseName write SetCourseName;
    procedure displayMessage();
  end;

implementation

procedure TGradeBook.displayMessage();
begin
  Writeln(Format('Welcome to the grade book for' + #13#10
    + '%s' ,[CourseName]));
  Readln;
end;

procedure TGradeBook.SetCourseName(const Value: String);
begin
  FCourseName := Value;
end;

end.

6. Menggunakan Property dari Class No. 5 di Atas.
Ingat bahwa kode no. 6 dan no. 5 di atas berada di dalam satu project.

program GradeBookTest;

{$APPTYPE CONSOLE}

uses
  SysUtils,
  GradeBook in 'GradeBook.pas';

var
  GradeBook : TGradeBook;
  NameOfCourse : String;
begin
  // Create and manipulate a GradeBook object.
  try
    GradeBook := TGradeBook.Create;

    WriteLn(Format('Initial course name is:' + #13#10 +
      '%s', [GradeBook.CourseName]));

    WriteLn('Please enter the course name: ');
    Readln(NameOfCourse);

    GradeBook.CourseName := NameOfCourse;

    GradeBook.displayMessage();
  except
    on E:Exception do
      Writeln(E.Classname, ': ', E.Message);
  end;
end.

7. Inisialisasi Obyek dengan Constructor.

unit GradeBook;

interface

uses SysUtils;

type
  // GradeBook class with a constructor
  // to initialize the course name
  TGradeBook = class(TObject)
  private
    FCourseName: String;
    procedure SetCourseName(const Value: String);
  public
    constructor Create(Name :String);
    property CourseName: String read FCourseName write SetCourseName;
    procedure displayMessage();
  end;

implementation

constructor TGradeBook.Create(Name: String);
begin
  CourseName := Name;
end;

procedure TGradeBook.displayMessage();
begin
  Writeln('Enjoy the Courses');
  Readln;
end;

procedure TGradeBook.SetCourseName(const Value: String);
begin
  FCourseName := Value;
end;

end.

8. Menggunakan Constructor dari Class No. 7 di Atas.
Ingat bahwa kode no. 8 dan no. 7 di atas berada di dalam satu project.

program GradeBookTest;

{$APPTYPE CONSOLE}

uses
  SysUtils,
  GradeBook in 'GradeBook.pas';

var
  GradeBook1 : TGradeBook;
  GradeBook2 : TGradeBook;
begin
  // GradeBook constructor used to specify the course name at the
  // time each GradeBook object is created
  try
    GradeBook1 := TGradeBook.Create('D101 Introduction to Delphi Programming');
    GradeBook2 := TGradeBook.Create('D102 Data Structures in Delphi');

    WriteLn(Format('GradeBook1 course name is::' + #13#10 +
      '%s', [GradeBook1.CourseName]));

    WriteLn('');

    WriteLn(Format('GradeBook1 course name is::' + #13#10 +
      '%s', [GradeBook2.CourseName]));

    WriteLn('');

    GradeBook1.displayMessage;
  except
    on E:Exception do
      Writeln(E.Classname, ': ', E.Message);
  end;
end.

9. Class dengan Constructor yang Membatasi Nilai Inisialisasi.
Diperkenalkan pula penggunaan decimal type atau currency type.

unit Account;

interface

type
  // Account class with a constructor to
  // initialize instance variable balance
  TAccount = class(TObject)
  private
    FBalance: Currency;
    procedure SetBalance(const Value: Currency);
  public
    property Balance : Currency read FBalance write SetBalance;
    constructor Create(InitialBalance: Currency);
    procedure Credit(Amount: Currency);
  end;

implementation

{ TAccount }

constructor TAccount.Create(InitialBalance: Currency);
begin
  // Constructor will use method SetBalance to write the
  // initial balance. If InitialBalance < 0 then balance = 0.
  Balance := InitialBalance;
end;

procedure TAccount.Credit(Amount: Currency);
begin
  Balance := Balance + Amount;
end;

procedure TAccount.SetBalance(const Value: Currency);
begin
  if Value >= 0 then
    FBalance := Value;
end;

end.

10. Menggunakan Class No. 9 di Atas.
Ingat bahwa kode no. 10 dan no. 9 di atas berada di dalam satu project.
Diperkenalkan pula memformat angka ke dalam bentuk currency dan number.

program AccountTest;

{$APPTYPE CONSOLE}

uses
  SysUtils,
  Account in 'Account.pas';

var
  Account1 : TAccount;
  Account2 : TAccount;
  DepositAmount : Currency;
begin
  try
    Account1 := TAccount.Create(50.25);
    Account2 := TAccount.Create(-1.50);

    // Use %.2m format to display currency symbol
    WriteLn(Format('Account1 balance: %n', [Account1.Balance]));
    WriteLn(Format('Account2 balance: %n', [Account2.Balance]));
    WriteLn('');

    WriteLn('Enter deposit amount for Account1: '); // example: 34.54
    ReadLn(Currency(DepositAmount));
    WriteLn(Format('Adding %n to Account1 balance', [DepositAmount]));
    Account1.Credit(DepositAmount);
    WriteLn('');

    WriteLn('Enter deposit amount for Account2: '); // example: 34.54
    ReadLn(Currency(DepositAmount));
    WriteLn(Format('Adding %n to Account2 balance', [DepositAmount]));
    Account2.Credit(DepositAmount);
    WriteLn('');

    WriteLn(Format('Account1 balance: %n', [Account1.Balance]));
    WriteLn(Format('Account2 balance: %n', [Account2.Balance]));

    ReadLn;
  except
    on E:Exception do
      Writeln(E.Classname, ': ', E.Message);
  end;
end.

Buka Bersama SMAN 3 Malang Angkatan 91 di Jakarta 2008

Tanggal 16 September 2008, maunya sih ngundang sebanyak mungkin alumni SMAN 3 Malang angkatan 91 yang ada atau sedang di Jakarta buat buka bersama. Tapi hasilnya yang datang cuma 7 orang termasuk bayi dan suaminya Ulfa. Sayang belum bisa memecahkan rekor yang datang tahun lalu.

Good job buat Silvy yang telah milih tempat buka bersama di Senayan City. Makanannya enak dan relatif murah karena ada diskon 50%. Musholanya lux dan dapat menampung 100 orang. Next time kalo mau kumpul-kumpul lagi di Senayan City aja yah…

Coba lihat foto berikut. Mulai dari kanan: Ivan, Prasetiyo, Ulfa, Bayinya Ulfa (keliatan kakinya doang), Silvy, Asahari dan Suaminya Ulfa yang lagi moto pake hp-ku. Kali aja ada yang lupa.

Klik aja fotonya kalo mau diembat, tapi ukurannya cuma 800 X 600 pxl. Aku kecilin biar jerawatku gak keliatan :)

Silvy dan Ulfa rencananya mau jadi panitia lebaran. Pada datang semua yaa, jangan sampai gagal lagi kayak tahun kemarin.

Ditulis dalam Personal. 3 Komentar »

Mencoba: Tutorial 1 – Create a Simple Web Dynpro Application

Berikut adalah hal-hal yang saya garisbawahi setelah mencoba Tutorial 1 – Create a Simple Web Dynpro Application dari Web Dynpro for ABAP: Tutorials for Beginners.

Untuk membuat sebuah web page dengan grid view seperti di bawah ini:

dibutuhkan sedikit coding pada method WDDOINIT. Method tersebut adalah milik MAINVIEW. Method MAINVIEW yang lain adalah WDDOAFTERACTION, WDDOBEFOREACTION, WDDOEXIT, dan WDDOMODIFYVIEW. Method WDDOINIT berikut berguna untuk mengisikan data ke dalam grid view pada saat program dijalankan (run time).

method WDDOINIT.

* inisialisasi atau deklarasi data dan variabel
data:
Node_sflight type REF TO IF_WD_CONTEXT_NODE,

Itab_sflight type standard table of SFLIGHT.

* ambil data dari tabel SFLIGHT

select * from SFLIGHT into table Itab_sflight.

* navigate from <CONTEXT> to <SFLIGHT> via lead selection

Node_sflight = wd_Context->get_Child_Node( name = ‘SFLIGHT_NODE’ ).

* bind internal table to context node <SFLIGHT>

Node_sflight->Bind_Table( Itab_sflight ).

endmethod
.

IF_WD_CONTEXT_NODE langsung mendapat mendapat perhatian saya. Dari mana asalnya? Semoga tidak harus membuka dokumentasi untuk mendapat jawabannya. Doa saya terkabul, ternyata asalnya dari tab Attribute.

WD_CONTEXT dalam hal ini sepintas seperti datasource yang terhubung dengan metadata tabel fisik database. Node_sflight merepresentasikan data source dari grid view. Bagian akhir dari kode di atas adalah cara untuk mengaktifkan datasource sehingga data akan tampil di grid view saat program dijalankan. Namun, saya masih belum begitu percaya dengan pemahaman ini. Semoga dengan mencoba tutorial berikutnya akan bisa lebih mengerti.

Perlu diketahui bahwa cara membuat aplikasi seperti di atas tidak disarankan karena mengakses langsung ke tabel database. Cara yang lebih baik adalah dengan menggunakan functions atau BAPI untuk data access. Saya belum mencobanya, tapi bisa jadi di dalam BAPI terdapat error dan control handling yang akan mempermudah pembuatan aplikasi.

Ditulis dalam SAP. Tag: , . 2 Komentar »

Delphi Basics 1 : Pengenalan Delphi

Dalam rangka menyambut kedatangan Delphi 2009, saya akan menulis beberapa artikel tentang dasar-dasar Delphi. Ini adalah bagian pertama.

1. Program Mencetak Text

program Welcome1;

{$APPTYPE CONSOLE}

uses
  SysUtils;

begin
  // Text-printing program
  try
      Writeln('Welcome to Delphi Programming!');
      Readln;
  except
    on E:Exception do
      Writeln(E.Classname, ': ', E.Message);
  end;
end.

2. Mencetak Satu Baris Text dengan Beberapa Statement

program Welcome2;

{$APPTYPE CONSOLE}

uses
  SysUtils;

begin
  // Printing a line of text with multiple statements
  try
    Write('Welcome to ');
    Writeln('Delphi Programming!');
    Readln;
  except
    on E:Exception do
      Writeln(E.Classname, ': ', E.Message);
  end;
end.

3. Mencetak Beberapa Baris Text dengan Satu Statement

program Welcome3;

{$APPTYPE CONSOLE}

uses
  SysUtils;

begin
  // Printing multiple lines of text with a single statement
  try
    Write('Welcome' + #13#10 + 'to' + #13#10 +
     'Delphi' + #13#10 + 'Programming!');
    Readln;
  except
    on E:Exception do
      Writeln(E.Classname, ': ', E.Message);
  end;
end.

4. Mencetak Beberapa Baris Text dengan Method

program Welcome4;

{$APPTYPE CONSOLE}

uses
  SysUtils;

begin
  // Displaying multiple lines with method
  try
    Write(Format('%s' + #13#10 + '%s',
      ['Welcome to','Delphi Programming!']));
    Readln;
  except
    on E:Exception do
      Writeln(E.Classname, ': ', E.Message);
  end;
end.

5. Penjumlahan

program Addition;

{$APPTYPE CONSOLE}

uses
  SysUtils;

var
  number1 : Integer;
  number2 : Integer;
  sum : Integer;
begin
  // Addition program that displays the sum of two numbers
  try
    Write('Enter first integer: ');
    Readln(number1);

    Write('Enter second integer: ');
    Readln(number2);

    sum := number1 + number2;

    Write(Format('Sum is %d' + #13#10 ,[sum]));
    Readln;
  except
    on E:Exception do
      Writeln(E.Classname, ': ', E.Message);
  end;
end.

6. Perbandingan

program Comparison;

{$APPTYPE CONSOLE}

uses
  SysUtils;

var
  number1 : Integer;
  number2 : Integer;
begin
  // Equality and relational operators
  try
    Write('Enter first integer: ');
    ReadLn(number1);

    Write('Enter second integer: ');
    ReadLn(number2);

    if (number1 = number2) then
      WriteLn(Format('%d == %d',[number1, number2]));

    if (number1 <> number2) then
      WriteLn(Format('%d != %d',[number1, number2]));

    if (number1 < number2) then
      WriteLn(Format('%d < %d',[number1, number2]));

    if (number1 > number2) then
      WriteLn(Format('%d > %d',[number1, number2]));

    if (number1 <= number2) then
      WriteLn(Format('%d <= %d',[number1, number2]));

    if (number1 >= number2) then
      WriteLn(Format('%d >= %d',[number1, number2]));

    Readln;
  except
    on E:Exception do
      Writeln(E.Classname, ': ', E.Message);
  end;
end.