StartprogrammingusingObjectPascal:FirstExampleDateAndTime
첫 번째 예제: 날짜와 시간
날짜와 시간에 대해 수행하는 동작과 날짜 시간이 들어있는 객체를 작성하도록 하겠습니다. DateTimeUnit이라고 하는 새 유닛을 만들고, TmyDateTime이라고 하는 클래스를 작성하도록 하겠습니다.
클래스는 객체의 형식입니다. 클래스를 사용하려면, 클래스의 인스턴스를 선언해야 합니다. 이 인스턴스를 객체라고 하며, Integer와 string 형으로 다루던 것과 동일합니다. 클래스의 인스턴스를 사용하려면, 이들을 변수(I, J, Address 등)로 선언합니다.
아래는 유닛의 코드입니다.
unit DateTimeUnit;
{$mode objfpc}{$H+}
interface
uses
Classes, SysUtils;
type
{ TMyDateTime }
TMyDateTime = class
private
fDateTime: TDateTime;
public
function GetDateTime: TDateTime;
procedure SetDateTime(ADateTime: TDateTime);
procedure AddDays(Days: Integer);
procedure AddHours(Hours: Single);
function GetDateTimeAsString: string;
function GetTimeAsString: string;
function GetDateAsString: string;
constructor Create(ADateTime: TDateTime);
destructor Destroy; override;
end;
implementation
{ TMyDateTime }
function TMyDateTime.GetDateTime: TDateTime;
begin
Result:= fDateTime;
end;
procedure TMyDateTime.SetDateTime(ADateTime: TDateTime);
begin
fDateTime:= ADateTime;
end;
procedure TMyDateTime.AddDays(Days: Integer);
begin
fDateTime:= fDateTime + Days;
end;
procedure TMyDateTime.AddHours(Hours: Single);
begin
fDateTime:= fDateTime + Hours / 24;
end;
function TMyDateTime.GetDateTimeAsString: string;
begin
Result:= DateTimeToStr(fDateTime);
end;
function TMyDateTime.GetTimeAsString: string;
begin
Result:= TimeToStr(fDateTime);
end;
function TMyDateTime.GetDateAsString: string;
begin
Result:= DateToStr(fDateTime);
end;
constructor TMyDateTime.Create(ADateTime: TDateTime);
begin
fDateTime:= ADateTime;
end;
destructor TMyDateTime.Destroy;
begin
inherited Destroy;
end;
end.
다음과 같이 메인 폼에 다섯 개의 단추를 놓아둡니다.
각각의 단추의 OnClick 이벤트에 다음 코드를 작성하도록 합니다.
unit main;
{$mode objfpc}{$H+}
interface
uses
Classes, SysUtils, FileUtil, LResources, Forms, Controls, Graphics, Dialogs,
StdCtrls, DateTimeUnit;
type
{ TForm1 }
TForm1 = class(TForm)
Button1: TButton;
Button2: TButton;
Button3: TButton;
Button4: TButton;
Button5: TButton;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure Button3Click(Sender: TObject);
procedure Button4Click(Sender: TObject);
procedure Button5Click(Sender: TObject);
procedure FormCreate(Sender: TObject);
private
{ private declarations }
public
MyDT: TMyDateTime;
{ public declarations }
end;
var
Form1: TForm1;
implementation
{ TForm1 }
procedure TForm1.FormCreate(Sender: TObject);
begin
MyDT:= TMyDateTime.Create(Now);
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
ShowMessage(MyDT.GetDateTimeAsString);
end;
procedure TForm1.Button2Click(Sender: TObject);
begin
ShowMessage(MyDT.GetDateAsString);
end;
procedure TForm1.Button3Click(Sender: TObject);
begin
ShowMessage(MyDT.GetTimeAsString);
end;
procedure TForm1.Button4Click(Sender: TObject);
begin
MyDT.AddHours(1);
end;
procedure TForm1.Button5Click(Sender: TObject);
begin
MyDT.AddDays(1);
end;
initialization
{$I main.lrs}
end.
이 예제에서 다음의 중요한 사실들을 눈여겨 보도록 합니다.
DateTimeUnit 유닛에서는
- TmyDateTime 를 새로운 클래스를 정의하는 키워드인 class로 정의했습니다.
- Create라고 하는 constructor 메서드를 도입했습니다. 메모리에 객체를 만들고 초기화 할 때 사용하는 특별한 프로시저 입니다.
- Destroy라고 하는 destructor 메서드를 도입했습니다. 객체를 사용을 마무리 짓고 나서 객체의 메모리에서 없앨 때 사용하는 특별한 프로시저 입니다.
- 클래스에 두 섹션이 있습니다.
- private: 클래스 유닛 밖에서 접근할 수 없는 속성이나 메서드를 포함합니다.
- 다른 섹션은 public 입니다: 유닛 밖에서 접근할 수 있는 속성이나 메서드를 포함합니다. 클래스에 public 섹션이 없다면 모든 곳에서 사용할 수 없음을 의미합니다.
메인 유닛에서는
1. 메인 폼의 uses절에 DateTimeUnit에 접근하기 위해 이것을 추가했습니다.
2. 유닛 안에 MyDT 객체를 선언했습니다.
MyDT: TmyDateTime;
3. 메인 폼의 OnCreate 이벤트에 객체를 만들고 초기화 했습니다.
MyDT:= TmyDateTime.Create(Now);
이는 오브젝트 파스칼 언어에서 객체를 만드는 메서드 입니다.