Delphi 다시 보기:객체 지향
Delphi가 그 당시 급속히 인기를 끌었던 것은 RAD의 빠른 개발로 프로그래머들의 눈길을 끌었기 때문이다.이것은 의심할 여지없이 가장 매력적인 장점이지만델파이가 vb의 고급 버전이라고 착각하여 대상을 대상으로 하는 특성을 소홀히 했다.
사실 Pacscal은 Delphi로 발전하여 대상을 대상으로 하는 모든 특징을 갖추었다. 사용자 정의 클래스 허용, 클래스 계승(단일 계승), 방법 재부팅/복사 허용, 인터페이스 정의, 클래스 실현 인터페이스, 정적 방법(즉class 방법), 허위 방법, 추상 클래스 허용...등등,델파이에 대한 편견을 가진 친구가델파이의 대상을 향한 능력을 의심할 수 있을까?
다음은 몇 가지 프레젠테이션 코드입니다. 1.기본 클래스 TPeople 정의
unit UPeople;
interface
type
TPeople = class(TObject)
private
_name:string; //
procedure Set_Name(value:string);//Name set
function Get_Name:string; //Name get
protected
function Get_Sex:Boolean;virtual;abstract; // ,
public
property Name:string read Get_Name write Set_Name; // Name
property Sex:Boolean read Get_Sex; // Sex ( , )
class function ToString:string; // , c# static
procedure ShowName;//
end;
//
implementation
procedure TPeople.Set_Name(value:string);
begin
_name := value;
end;
function TPeople.Get_Name:string;
begin
result := _name;
end;
class function TPeople.ToString:string;
begin
result := 'This is a People Class';
end;
procedure TPeople.ShowName;
begin
Writeln(' :' + _name);
end;
end.
2. 하위 TMan 정의
unit UMan;
interface
uses
UPeople ;
type
TMan = class(TPeople)
constructor Create(name:string); overload ; //
private
_sex:Boolean;
protected
function Get_Sex:Boolean; override;
public
function ToString:string; //
end;
implementation
constructor TMan.Create(name:string); // : overload
begin
inherited Create;
_sex := true; // true
Self.Name := name;
end;
function TMan.Get_Sex:Boolean;
begin
result := _sex;
end;
function TMan.ToString:string;
begin
result := ' TMan ToString ';
end;
end.
3. 하위 유형 TWoman 추가
unit UWoman;
interface
uses
UPeople,UICook;
type
TWoman = class(TPeople,ICook)
constructor Create(name:string); overload ;
private
_sex:Boolean;
protected
function Get_Sex:Boolean; override;
public
procedure Cook;//
procedure ShowName;overload;
// Class TObject , , function,
// , UPeople TInterfacedObject
function _AddRef:Integer; stdcall;
function _Release:Integer;stdcall;
function QueryInterface(const IID:TGUID;out Obj):HResult; stdcall;
end;
implementation
function TWoman._AddRef:Integer;
begin
result :=-1;
end;
function TWoman._Release:Integer;
begin
result :=-1;
end;
function TWoman.QueryInterface(const IID:TGUID;out Obj):HResult;
const
E_NOINTERFACE = $80004002;
begin
if GetInterface(IID,Obj) then
Result := 0
else
Result := -1; {E_NOINTERFACE}
end;
constructor TWoman.Create(name:string);
begin
inherited Create;
_sex := false;
Self.Name := name;
end;
function TWoman.Get_Sex:Boolean;
begin
result := _sex;
end;
procedure TWoman.ShowName;
begin
Writeln(' , .')
end;
procedure TWoman.Cook;
begin
Writeln(' ICook , :)')
end;
end.
TWoman이라는 하위 클래스는 다음과 같은 인터페이스 ICook을 구현합니다.
4. ICook 커넥터
unit UICook;
interface
type
ICook = interface //
procedure Cook;//
end;
implementation
end.
5. ConsoleApplication에서 테스트를 수행합니다.
program ClassDemo;
{$APPTYPE CONSOLE}
uses
SysUtils,
UPeople in 'UPeople.pas',
UMan in 'UMan.pas',
UWoman in 'UWoman.pas',
UICook in 'UICook.pas';
var
aPeople:TPeople;
aMan:TMan;
aWoman:TWoman;
aCook:ICook;
begin
aPeople := TPeople.Create;
aPeople.Name := 'jimmy.yang';
Writeln(aPeople.Name);
Writeln(TPeople.ToString);//
aPeople.ShowName;
Writeln('----------------------------------------');
aMan := TMan.Create(' ');
Writeln(aMan.Name);
Writeln(aMan.Sex);
aMan.ShowName; //
Writeln(aMan.ToString);//TMan
Writeln('----------------------------------------');
aWoman := TWoman.Create(' ');
Writeln(aWoman.Name);
Writeln(aWoman.Sex);
aWoman.ShowName; //
aWoman.Cook;//
Writeln('----------------------------------------');
aCook := ICook(aWoman);//
aPeople.Free;
aPeople:= TWoman.Create(' '); //
aPeople.ShowName;
aWoman.Free;
aWoman := TWoman(aPeople);
aWoman.Cook;
Readln;
end.
실행 결과:jimmy.yangThis is a People Class 이름:jimmy.yang--------------------------------------------------------------------------------------------------------------소룡녀 FALSE 여자들은 항상 꽃놀이를 좋아하기 때문에 다시 싣겠습니다.저는 ICook 인터페이스를 실현했기 때문에 밥을 할 줄 압니다:)----------------------------------------이름:청화는 제가 ICook 인터페이스를 실현했기 때문에 밥을 할 줄 압니다:)
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.