Delphi 다시 보기:객체 지향

11196 단어
어떤 언어든'봉인, 계승, 다태'라는 세 가지 기본 능력을 갖추면 그 실현 방식이 직접적이거나 굴절되거나 복잡하거나 간결하든지 간에'대상향적'언어라고 할 수 있다.
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 인터페이스를 실현했기 때문에 밥을 할 줄 압니다:)

좋은 웹페이지 즐겨찾기