麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

首頁 > 編程 > Delphi > 正文

將面向對象的思想貫穿始終--談Delphi開發(第一篇)

2019-11-18 18:53:09
字體:
來源:轉載
供稿:網友
    國內有許多人將Delphi作為首選的開發工具。其原因當然是因為Delphi給開發者提供了諸多特性:面向對象的開發,可視化界面設計,組件豐富,多平臺的可移植性(Delphi6的新特性)。  

      可是對于初學者來說,面向對象的思想可能并不是Delphi給其帶來的最大的感受。而可視化的界面設計,豐富多樣的可用組件反而給其留下最深刻難忘的印象。由此帶來的嚴重的后果是,初學者往往在很長一段時間里,只將注意力集中在Delphi提供的現有的VCL組件的使用上,而忽視去思考面向對象的思想對于Delphi的整個組件構架體系所蘊含的意義。

     下面的一段代碼,包含了一個最常見的,也是初學者最易犯的一個錯誤,這個錯誤雖然不是語法錯誤,但是卻顯露出使用者的面向對象的思想還有待加強:

var
  Form1: TForm1;

implementation

{$R *.dfm}

PRocedure TForm1.Button1Click(Sender: TObject);
begin
  ShowMessage(Form1.Caption); // <-- 這里的Form1的使用就有些問題。
end;

這樣的代碼,粗看看好像沒有什么錯。但是,這里Form1的出現就有些說不過去了。明明這里的代碼,寫的是TForm1的ButtonClick方法的實現,而Form1作為TForm1類的一個實例,居然被寫死到類的實現中,難道不是有些概念混亂嗎?要改成符合面向對象思想的,也很簡單,可以有兩種寫法:

 1. ShowMessage(Self.Caption); // <-- 這種寫法非常明確,即將要Show的信息是類的當前實例的Caption

 2. ShowMessage(Caption); // <-- 這里的寫法和上述的雷同,省略了關鍵字Self;

    面向對象思想的三大核心內容是封裝,繼承,多態。而上述例子暴露的問題就是封裝的問題。類似的例子還有:

    var

       Form1: TForm1;

      ......

     var

       Form2: TForm2;

    procedure TForm1.Button1Click(Sender: TObject);

    begin

       Form2.Show;  // <-- 作為一個全局的變量,Form2在這里的使用同樣讓人覺得混亂。

    end;

    上述的例子,可能更具有普遍性吧,對于大多數情況,在一個工程中,TForm1,和TForm2只可能各只有一個實例,所以這樣的代碼也算馬馬虎虎通過。但是從嚴格意義上來說,也是不符合封裝性的要求。參照如下代碼:

type
  TForm1 = class(TForm)
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
    FNext: TForm;
  public
    { Public declarations }
    property NextForm: TForm read FNext write FNext;
  end;

var
  Form1: TForm1;

implementation

uses Unit2;

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
begin
  if Assigned(FNext) then
    TForm2(FNext).Show;
end;

end.

// 以下是工程文件中的內容:

program Project1;

uses
  Forms,
  Unit1 in 'Unit1.pas' {Form1},
  Unit2 in 'Unit2.pas' {Form2};

{$R *.res}

begin
  application.Initialize;
  Application.CreateForm(TForm1, Form1);
  Application.CreateForm(TForm2, Form2);

  Form1.NextForm := Form2; // <-- 增加這么一句,勉強讓代碼符合封裝的要求了

  Application.Run;
end.

將Form2指針,作為Form1的一個屬性,傳遞給Form1,這樣,Form1在調用的時候,才遵守了封裝性的原則!當然,這些代碼僅僅是為了體現封裝的思想,而在實際中,可以依個人的習慣來決定是否真的要實現的這么徹底。但是這種思想,應當在腦子里扎根......(未完,待續)。

      更多文章


上一篇:將面向對象的思想貫穿始終--談Delphi開發(第二篇)

下一篇:VC與Delphi之間動態鏈接庫互相調用

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
學習交流
熱門圖片

新聞熱點

疑難解答

圖片精選

網友關注

主站蜘蛛池模板: 1024亚洲天堂 | jizzzzxxxxx| 7777网站 | 欧美第1页 | 玩偶姐姐 在线观看 | 亚洲免费视频大全 | 圆产精品久久久久久久久久久 | chinese xvideos gay | 国产精品视频一区二区三区综合 | a级高清免费毛片av在线 | 中文字幕在线观看日韩 | 蜜桃久久一区二区三区 | 国产精品午夜小视频观看 | 黄网站色成年大片免费高 | 久久999久久 | 一区二区三区欧美在线 | 污视频在线免费 | 黄色片网站免费 | 亚洲成人福利在线观看 | 久久美女免费视频 | 夜夜夜影院 | 久章草影院 | 久久撸视频 | 久久精品一区二区三区四区五区 | 中文字幕一二三区芒果 | 看91 | 国产精品91在线 | 成人免费一区二区 | 国产一精品久久99无吗一高潮 | 国产一区二区三区影视 | 青青国产在线视频 | 久久区二区| 国产精品欧美日韩一区二区 | 日日草夜夜操 | 黑人日比视频 | 国产精品成人久久 | 国产高清成人久久 | 成人短视频在线观看免费 | 国产手机av在线 | 久久九九热re6这里有精品 | 欧美性成人|