<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://trans.onionmixer.net/wiki/index.php?action=history&amp;feed=atom&amp;title=StartprogrammingusingObjectPascal%3AInheritance</id>
	<title>StartprogrammingusingObjectPascal:Inheritance - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://trans.onionmixer.net/wiki/index.php?action=history&amp;feed=atom&amp;title=StartprogrammingusingObjectPascal%3AInheritance"/>
	<link rel="alternate" type="text/html" href="https://trans.onionmixer.net/wiki/index.php?title=StartprogrammingusingObjectPascal:Inheritance&amp;action=history"/>
	<updated>2026-05-01T07:50:42Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.43.3</generator>
	<entry>
		<id>https://trans.onionmixer.net/wiki/index.php?title=StartprogrammingusingObjectPascal:Inheritance&amp;diff=401&amp;oldid=prev</id>
		<title>Onionmixer: SPOP 상속 페이지 추가</title>
		<link rel="alternate" type="text/html" href="https://trans.onionmixer.net/wiki/index.php?title=StartprogrammingusingObjectPascal:Inheritance&amp;diff=401&amp;oldid=prev"/>
		<updated>2012-07-26T11:57:04Z</updated>

		<summary type="html">&lt;p&gt;SPOP 상속 페이지 추가&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;===상속===&lt;br /&gt;
&lt;br /&gt;
객체지향 프로그래밍 에서의 상속은 기존의 클래스로부터 새로운 클래스를 만들고 기존의 메서드와 속성을 물려받음을 의미합니다. 기존의 속성과 메서드를 물려받고 나면, 새 클래스에 새 메서드와 속성을 추가할 수 있습니다.&lt;br /&gt;
&lt;br /&gt;
상속의 예제로서 이전 문자열 큐 클래스로부터 새로운 정수형 큐 클래스를 만들려고 합니다. 정수형 큐를 처음부터 완전히 새로 작성하는 대신에 문자열 큐로부터 상속할 수 있습니다.&lt;br /&gt;
&lt;br /&gt;
문자열 큐로부터 상속하려면, 새 유닛을 추가하고 uses 절에 문자열 큐를 놓습니다. 이제 새로운 정수형 큐를 다음과 같이 선언합니다.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;pascal&amp;quot;&amp;gt;&lt;br /&gt;
TIntQueue = class(TQueue)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
새 유닛의 이름은 IntQueue이고, 두 가지 새로운 메서드 PutInt와 GetInt를 도입합니다.&lt;br /&gt;
&lt;br /&gt;
TIntQueue 클래스가 들어있는 유닛의 전체 코드입니다.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;pascal&amp;quot;&amp;gt;&lt;br /&gt;
unit IntQueue;&lt;br /&gt;
// This unit contains TIntQueue class, which is inherits TQueue&lt;br /&gt;
// class and adds PutInt, GetInt methods to be used with&lt;br /&gt;
// Integer queue&lt;br /&gt;
&lt;br /&gt;
{$mode objfpc}{$H+}&lt;br /&gt;
&lt;br /&gt;
interface&lt;br /&gt;
&lt;br /&gt;
uses&lt;br /&gt;
    Classes, SysUtils, Queue;&lt;br /&gt;
&lt;br /&gt;
type&lt;br /&gt;
&lt;br /&gt;
    { TIntQueue }&lt;br /&gt;
&lt;br /&gt;
    TIntQueue = class(TQueue)&lt;br /&gt;
&lt;br /&gt;
    public&lt;br /&gt;
        function PutInt(AValue: Integer): Integer;&lt;br /&gt;
        function GetInt(var AValue: Integer): Boolean;&lt;br /&gt;
    end;&lt;br /&gt;
&lt;br /&gt;
implementation&lt;br /&gt;
&lt;br /&gt;
{ TIntQueue }&lt;br /&gt;
&lt;br /&gt;
function TIntQueue.PutInt(AValue: Integer): Integer;&lt;br /&gt;
begin&lt;br /&gt;
    Result:= Put(IntToStr(AValue));&lt;br /&gt;
end;&lt;br /&gt;
&lt;br /&gt;
function TIntQueue.GetInt(var AValue: Integer): Boolean;&lt;br /&gt;
var&lt;br /&gt;
    StrValue: string;&lt;br /&gt;
begin&lt;br /&gt;
    Result:= Get(StrValue);&lt;br /&gt;
    if Result then&lt;br /&gt;
        AValue:= StrToInt(StrValue);&lt;br /&gt;
end;&lt;br /&gt;
&lt;br /&gt;
end.&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
참고로 부모 클래스 TQueue에 Create, Destroy, Count 메서드가 이미 존재하기 때문에 이들 메서드를 새로 작성하지 않았습니다.&lt;br /&gt;
&lt;br /&gt;
새 정수형 큐 클래스를 사용하기 위해 새 프로그램을 만들고 이 구성요소들을 추가했습니다.&lt;br /&gt;
&lt;br /&gt;
[[image:lazarus_13.png]]&lt;br /&gt;
&lt;br /&gt;
유닛의 코드입니다.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;pascal&amp;quot;&amp;gt;&lt;br /&gt;
unit main;&lt;br /&gt;
&lt;br /&gt;
{$mode objfpc}{$H+}&lt;br /&gt;
&lt;br /&gt;
interface&lt;br /&gt;
&lt;br /&gt;
uses&lt;br /&gt;
    Classes, SysUtils, FileUtil, LResources, Forms, Controls, Graphics,&lt;br /&gt;
        Dialogs, IntQueue, StdCtrls;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
type&lt;br /&gt;
&lt;br /&gt;
    { TfmMain }&lt;br /&gt;
&lt;br /&gt;
    TfmMain = class(TForm)&lt;br /&gt;
        bbAdd: TButton;&lt;br /&gt;
        bbCount: TButton;&lt;br /&gt;
        bbGet: TButton;&lt;br /&gt;
        edCustomerID: TEdit;&lt;br /&gt;
        Label1: TLabel;&lt;br /&gt;
        Memo1: TMemo;&lt;br /&gt;
        procedure bbAddClick(Sender: TObject);&lt;br /&gt;
        procedure bbCountClick(Sender: TObject);&lt;br /&gt;
        procedure bbGetClick(Sender: TObject);&lt;br /&gt;
        procedure FormClose(Sender: TObject;&lt;br /&gt;
            var CloseAction: TCloseAction);&lt;br /&gt;
        procedure FormCreate(Sender: TObject);&lt;br /&gt;
    private&lt;br /&gt;
        { private declarations }&lt;br /&gt;
    public&lt;br /&gt;
        MyQueue: TIntQueue;&lt;br /&gt;
        { public declarations }&lt;br /&gt;
    end;&lt;br /&gt;
&lt;br /&gt;
var&lt;br /&gt;
    fmMain: TfmMain;&lt;br /&gt;
&lt;br /&gt;
implementation&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{ TfmMain }&lt;br /&gt;
&lt;br /&gt;
procedure TfmMain.FormCreate(Sender: TObject);&lt;br /&gt;
begin&lt;br /&gt;
    MyQueue:= TIntQueue.Create;&lt;br /&gt;
end;&lt;br /&gt;
&lt;br /&gt;
procedure TfmMain.FormClose(Sender: TObject; var CloseAction: TCloseAction);&lt;br /&gt;
begin&lt;br /&gt;
    MyQueue.Free;&lt;br /&gt;
end;&lt;br /&gt;
&lt;br /&gt;
procedure TfmMain.bbCountClick(Sender: TObject);&lt;br /&gt;
begin&lt;br /&gt;
    Memo1.Lines.Add(&amp;#039;Queue length is: &amp;#039; + IntToStr(MyQueue.Count));&lt;br /&gt;
end;&lt;br /&gt;
&lt;br /&gt;
procedure TfmMain.bbAddClick(Sender: TObject);&lt;br /&gt;
var&lt;br /&gt;
    APosition: Integer;&lt;br /&gt;
begin&lt;br /&gt;
    APosition:= MyQueue.PutInt(StrToInt(edCustomerID.Text));&lt;br /&gt;
    Memo1.Lines.Add(edCustomerID.Text + &amp;#039; has been added as # &amp;#039;&lt;br /&gt;
        + IntToStr(APosition + 1));&lt;br /&gt;
end;&lt;br /&gt;
&lt;br /&gt;
procedure TfmMain.bbGetClick(Sender: TObject);&lt;br /&gt;
var&lt;br /&gt;
    ACustomerID: Integer;&lt;br /&gt;
begin&lt;br /&gt;
    if MyQueue.GetInt(ACustomerID) then&lt;br /&gt;
    begin&lt;br /&gt;
    Memo1.Lines.Add(&amp;#039;Got: Customer ID : &amp;#039; + IntToStr(ACustomerID) +&lt;br /&gt;
        &amp;#039; from the queue&amp;#039;);&lt;br /&gt;
    end&lt;br /&gt;
    else&lt;br /&gt;
        Memo1.Lines.Add(&amp;#039;Queue is empty&amp;#039;);&lt;br /&gt;
end;&lt;br /&gt;
&lt;br /&gt;
initialization&lt;br /&gt;
    {$I main.lrs}&lt;br /&gt;
&lt;br /&gt;
end.&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
참고로 TQueue의 속성과 메서드 그리고 추가적으로 TIntQueue의 속성과 메서드를 사용했습니다.&lt;br /&gt;
&lt;br /&gt;
이 경우 본래 TQueue를 기반 클래스 또는 조상이라고 부르며,  새 클래스를 자손이라고 부릅니다.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
새 클래스를 만드는 대신에 문자열 큐 유닛을 수정하고 정수형을 다루기 위해 IntPut과 IntGet을 추가할 수 있었지만, 상속을 표현하기 위해 새로운 TIntQueue 클래스를 만들었습니다. 또 다른 이유들이 있습니다. 라자루스의 &amp;#039;&amp;#039;.ppu&amp;#039;&amp;#039;와 델파이의 &amp;#039;&amp;#039;.dcu&amp;#039;&amp;#039;와 같은 이미 컴파일한 유닛 파일만 가지고 있을 때와 같이 TQueue의 본래 소스 코드를 가지고 있지 못했다고 가정합니다. 이 경우 소스 코드를 볼 수 없고 물론 수정할 수도 없습니다. 상속은 이 큐에 대해 보다 기능적인 추가를 하기 위한 유일한 방법이 될 것입니다&lt;br /&gt;
[[Category:StartprogrammingusingObjectPascal]]&lt;/div&gt;</summary>
		<author><name>Onionmixer</name></author>
	</entry>
</feed>