StartprogrammingusingObjectPascal:FirstExampleDateAndTime

From 흡혈양파의 번역工房
Jump to: navigation, search

첫 번째 예제: 날짜와 시간

날짜와 시간에 대해 수행하는 동작과 날짜 시간이 들어있는 객체를 작성하도록 하겠습니다. DateTimeUnit이라고 하는 새 Unit을 만들고, TmyDateTime이라고 하는 클래스를 작성하도록 하겠습니다.

클래스는 객체의 형식입니다. 클래스를 사용하려면, 클래스의 인스턴스를 선언해야 합니다. 이 인스턴스를 객체라고 하며, Integerstring 형으로 다루던 것과 동일합니다. 클래스의 인스턴스를 사용하려면, 이들을 변수(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.

다음과 같이 메인 폼에 다섯 개의 버튼을 놓습니다.

Lazarus 10.png

각각의 단추의 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 Unit에서는

  1. TmyDateTime 를 새로운 클래스를 정의하는 키워드인 class로 정의했습니다.
  2. Create라고 하는 constructor 메서드를 도입했습니다. 메모리에 객체를 만들고 초기화 할 때 사용하는 특별한 프로시저 입니다.
  3. Destroy라고 하는 destructor 메서드를 도입했습니다. 객체를 사용을 마무리 짓고 나서 객체의 메모리에서 없앨 때 사용하는 특별한 프로시저 입니다.
  4. 클래스에 두 섹션이 있습니다.
    • private: 클래스 유닛 밖에서 접근할 수 없는 속성이나 메서드를 포함합니다.
    • 다른 섹션은 public 입니다: 유닛 밖에서 접근할 수 있는 속성이나 메서드를 포함합니다. 클래스에 public 섹션이 없다면 모든 곳에서 사용할 수 없음을 의미합니다.


메인 Unit에서는
1. DateTimeUnit에 접근하기 위해 메인 폼의 uses절에 이 클래스를 추가했습니다.
2. Unit 안에 MyDT 객체를 선언했습니다.

   MyDT: TmyDateTime;

3. 메인 폼의 OnCreate 이벤트에 객체를 만들고 초기화 했습니다.

   MyDT:= TmyDateTime.Create(Now);

이는 오브젝트 파스칼 언어에서 객체를 만드는 메서드 입니다.