Presentation is loading. Please wait.

Presentation is loading. Please wait.

第 1 章 認識Visual Basic.

Similar presentations


Presentation on theme: "第 1 章 認識Visual Basic."— Presentation transcript:

1 第 1 章 認識Visual Basic

2 本章重點提要 1-1 Visual Basic 的精神 1-2 進入 Visual Basic 1-3 建立主控台應用程式

3 本章閱讀建議 1-1 Visual Basic 的精神:本節先從 Basic 語言開始, 介紹Visual Basic 語言的發展, 讓大家瞭解 Visual Basic 的三大特色:所見即所得的 Visual 效果、在 .NET 上的全新意涵、以及好學好用的物件導向能力! 1-2 進入 Visual Basic:學習 Visual Basic, 開發工具的使用佔相當重要的份量, 因此我們必須認識 Visual Basic的操作環境, 及智慧型的程式輸入法。

4 本章閱讀建議 1-3 建立主控台應用程式:我們先從最簡單的文字模式開始建立簡單的程式, 這樣, 對於如何寫程式, 就能有個基本的概念。

5 1-1 Visual Basic 的精神 從 Basic 到 Visual Basic
早在 1965 年, 當程式還是打在一張張的卡片上, 然後送入電腦等待執行結果的時代, 美國 Dartmouth 大學的教授 John George Kemeny 及 Thomas Eugene Kurtz 將當時最流行的程式語言 Fortran 加以簡化, 並加入一些新的特點, 而創造了 BASIC (Beginner's All-puporse Symbolic Instruction Code) 語言, 意思是『初學者的萬用語言』。

6 Basic:輸入指令馬上看到結果 Kemeny 和 Kurtz 提出 『交談式學習程式語言』 的概念。換句話說, 在 Basic 環境中, 學生只要輸入一個指令或簡單的程式, 就能馬上看到執行結果, 這樣子學生才會勇於嘗試新的指令。 1975 年, 比爾蓋茲 (Bill Gates) 與好友保羅愛倫 (Paul Allen) 開發出供個人電腦使用的 BASIC 軟體。

7 Basic:輸入指令馬上看到結果 隨著電腦技術的演進, 單純的文字輸出入也逐漸改為圖形化的操作介面 (稱為 GUI-Graphic User Interface, 圖形使用者介面),Windows 的流行更是把這個事實推到最高峰。 微軟公司在 1990 年推出 Windows 3.0 之後, 於 1991 年就發表結合 BASIC 語言及 Windows 圖形介面功能的 Visual Basic (簡稱VB) 1.0 版, 這對 BASIC 的愛好者來說無疑是一個大好消息,同時也是入門 Windows 程式設計的絕佳選擇。

8 Visual Basic:執行結果設計時就看到
Visual 在字義上是 『看得見的、視覺的...』 的意思, 為什麼要用『看得見的』來形容 Basic 呢?因為 Visual Basic 提供許多視覺化的工具給程式設計人員使用, 而且在設計程式時就可以看到程式的長相, 我們在設計時所看到的和程式執行時的畫面是相同的, 就好像未來執行的結果在設計階段就看得見一樣。

9 Visual Basic:執行結果設計時就看到
Visual Basic 的 Visual 意思是指? 使用者可以看到原始程式 我們可以看到程式執行步驟 在設計階段即可看到程式執行時的外觀

10 Visual Basic:執行結果設計時就看到
(3), Visual 在字義上是『看得見的、視覺的...』的意思, 由於Visual Basic 提供了許多視覺化的工具, 供程式設計師設計視窗程式, 使得許多原本需要撰寫程式碼的工作 (Coding) 現在只要拉曳物件和設定屬性就可完成, 因此程式設計的工作變得更為簡單。

11 進化的 Visual Basic.NET 在 2002 年, 微軟公司推出名為 .NET Framework 的物件作業平台,並將包括 Visual Basic 在內的主要程式語言如 C++/C#, 都改成在.NET Framework 環境執行。

12 進化的 Visual Basic.NET 到 2005 年, 新版的 Visual Basic 改用西元年份取代版本編號, 也就是 Visual Basic 2005 (即 VB 8.0);而目前最新版本則是 Visual Basic2008 (亦即 VB 9.0)。這些版本都是在 .NET 上執行的。

13 傳統的編譯與直譯式語言 傳統上, 用高階語言寫好的程式 (稱為原始程式), 需經過『編譯』(Compile) 或『直譯』 (Interpret) 的方式, 轉成電腦認得的機器碼後, 才能執行。

14 傳統的編譯與直譯式語言 『編譯』是一次將『整個』原始程式轉譯為機器碼, 並儲存成執行檔供日後使用, 日後執行時並不需要再編譯, 所以執行速度快。雖然執行速度較快, 但每種微處理器的機器碼不盡相同, 因此要讓同一個原始程式在不同機器上執行, 就必須重新編譯:

15 傳統的編譯與直譯式語言 『直譯』則是每次需要執行程式時, 才將原始程式轉譯為機器碼, 並加以執行。其缺點是每次執行時都要經過一次直譯過程,因此速度較慢, 但因為每次執行時才產生機器碼, 所以只要直譯器相容 (能直譯我們的程式), 在不同的機器上都能順利執行。

16 .NET Framework 的優點 前面提到程式語言需經『編譯』或『直譯』才能在電腦上執行, 兩者的主要優缺點如下:

17 .NET Framework 的優點 而 .NET Framework 則取兩者之長, 在.NET 的環境下, 我們用Visual Basic/C#/C++/C等語言撰寫的程式, 都需先編譯成中間碼(MSIL, Microsoft Intermediate Language Code)。當使用者要執行此程式時, .NET Framework 的執行環境 (CLR, Common Language Runtime) 再將中間碼編譯為機器碼執行:

18 .NET Framework 的優點

19 .NET Framework 的優點 因此編譯成中間碼的程式, 在任一台安裝有 .NET Framework 環境的電腦上, 都能順利執行, 不需程式開發人員重新編譯程式。

20 .NET Framework 的優點 目前在網際網路應用較廣的 Java 應用程式, 其實也是採用類似的設計理念, 所以在任一台有安裝 Java 執行環境的電腦, 瀏覽含 Java 元件的網頁時, Java 程式都能正常執行。

21 Visual Basic 和 C#、C++/C 一樣快
以往直譯式的 Basic 語言, 因為效率差, 所以被認為不具實用價值。現在, 由於在 .NET Framework 環境下, 不管用 Visual Basic、C#、C++/C 等語言所寫的程式, 都是先編譯成同一種中間碼, 再於 CLR 中執行。 所以就程式的功能、效率而言, Visual Basic 和C#、C++/C 這些語言都是一樣的, 但 Visual Basic 在學習上仍是最適合初學者的程式語言

22 『好學好用』的物件導向語言 Visual Basic.NET 相較於其之前的 Visual Basic 語言, 還有一項重大變革, 就是加入新的語法, 成為一個真正的物件導向(Object-Oriented) 程式語言。 物件導向程式設計以往都被初學者認為不易親近, 因為要熟悉物件導向語法後, 才能設計出實用的程式, 但 Visual Basic 卻打破了這個障礙, 原因可歸功於 .NET Framework 及 Visual Basic 的視覺化開發工具。

23 『好學好用』的物件導向語言 .NET Framework 提供了功能十分豐富的類別庫 (Class Library), 我們可以把類別庫視為寫程式時所用的工具箱和現成類別庫, 它能幫助我們以較簡易的方式, 撰寫出功能強大的程式。本書各章, 會陸續介紹 .NET Framework 類別庫所提供的各種實用工具和類別。

24 『好學好用』的物件導向語言 因此學習 Visual Basic 時, 物件導向程式設計的第一課不再是令人頭痛的類別設計, 而是直接使用現成的類別與物件。初學者只要能應用 .NET Framework 類別庫, 即能設計出功能完整的 Visual Basic 應用程式。

25 『好學好用』的物件導向語言 而在使用 Visual Basic 的視覺化開發工具 (稱為 Visual Studio) 時,其內含的精靈會適時自動產生 Visual Basic 程式碼, 因此連代表主程式之類別, 都由精靈替我們設計好、並進行必要的初始化, 我們只要動動滑鼠, 就能完成一個物件導向的 Visual Basic 程式。

26 『類別』、『物件』是什麼啊? 『類別』(Class) 就是具備某類功能的一組資料與程式, 例如『表單類別』可用來產生各式各樣的視窗 (在 Visual Basic 中, 將視窗稱為表單 - Form) , 而『數學類別』則提供各種數學運算功能 (例如開平方根)。 有了這些類別, 我們在寫程式時就輕鬆多了, 因為類別可以幫助我們完成許多原本很複雜的工作。

27 『類別』、『物件』是什麼啊? 用『類別』所產生的實體, 則稱為『物件』(Object)。例如使用『表單類別』所產生的各種視窗, 就是一個個的『表單物件』 (也就是『屬於表單類別的物件』)。 我們只要改變表單物件中的資料屬性, 例如位置、大小、背景顏色等,就能讓每個物件呈現不同的樣貌:

28 『類別』、『物件』是什麼啊? 讀者目前只需對『類別』與『物件』有個初步的認識, 以後使用多了, 自然會有更深入的了解。

29 『好學好用』的物件導向語言 請列出 Visual Basic 的三大特色。 在設計時就能看到執行時的外貌。
使用 .NET Framework 架構, 執行效能與 C#、C++/C 平起平坐。 物件導向。

30 1-2 進入 Visual Basic 如果您尚未裝妥 Visual Basic 2008 Express Edition (以下簡稱VB ), 可依附錄 A 的說明下載安裝。從本節開始, 我們就要進入VB 的世界, 學習使用它來開發 Visual Basic 程式。

31 VB 的內容 安裝好 VB 後, 可在開始功能表的所有程式中看到兩項 VB 所安裝的項目:

32 VB 的內容

33 VB 的內容 Microsoft Visual Basic 2008 Express Edition:執行此項就會啟動 VB, 稍後我們就會介紹如何用 VB 建立程式專案。 Microsoft SQL Server 2005:如果安裝時有選擇安裝SQL Server 2005 Express Edition, 就會看到這個項目,其下包含數個 SQL Server 2005 Express Edition 管理工具的捷徑。

34 建立應用程式專案 VB 提供一個整合的應用程式開發環境, 初次執行『開始/所有程式/ Microsoft Visual Basic 2008 Express Edition』命令,就會出現如下畫面:

35 建立應用程式專案

36 建立應用程式專案 在 VB 寫程式。微軟公司(Microsoft) 把 Visual Basic 的程式開發稱為專案(Project), 因此, 要寫 Visual Basic 程式, 首先要建立一個專案。 按起始頁左側建立旁邊的專案項目、或按工具列上的  鈕、或執行功能表中的『檔案/ 新增/ 專案』命令, 都可開啟新增專案交談窗。

37 建立應用程式專案

38 建立應用程式專案 接著要選擇主控台應用程式, 並輸入專案名稱 ( 本書均以ChXX-XX 的格式為專案命名), 再按   鈕:

39 建立應用程式專案 VB 有五種不同類型的專案, 其中主控台應用程式 (也就是在文字模式中執行的程式) 較能專注於語法學習, 因此初學 Visual Basic,我們先建立一個主控台應用程式。

40 建立應用程式專案 接著 VB 就會自動建立專案的內容, 包括專案的設定檔、原始程式檔, 並自動進入原始程式的編輯畫面:

41 建立應用程式專案 上圖畫面就是 VB 自動替我們產生的程式架構, 稍後我們會在其中練習輸入程式的方法, 以下我們先練習儲存及關閉專案。

42 建立應用程式專案 在 VB 中儲存及關閉專案。 按工具列上的 鈕 ( 或執行功能表中的『 檔案/ 全部儲存』 命令)。
按工具列上的  鈕 ( 或執行功能表中的『 檔案/ 全部儲存』 命令)。 接著可設定儲存的路徑, 預設會存到目前使用者的文件資料夾( 例如:C:\Users\ 登入名稱\Documents) 下的 Visual Studio2008\Projects 子資料夾中, 本書範例則一律存於 C:\VB2008 資料夾下, 以章節編號 "Ch01" 為名的子資料夾中, 並取消為方案建立目錄的選項:

43 建立應用程式專案

44 建立應用程式專案 儲存完畢後, 執行『檔案/ 關閉專案』命令, 就會關閉Ch01-01 專案, 回到未開啟任何專案的狀態:

45 關於專案與方案 雖然剛才我們建立了 VB 的『專案』(Project), 但在 VB 畫面右窗格看到的是方案總管(Solution Explorer, 用途類似於 Windows 的檔案總管), 而在儲存專案時也會看到方案名稱選項。究竟專案與方案有何不同呢?

46 關於專案與方案 在 Visual Studio 環境中, 專案 (Project) 是用來管理原始程式檔, 當我們要撰寫一個 Visual Basic 程式時, 一定要建立專案來包含這個程式;而方案 (Solution) 則是用於管理專案, 所以建立專案時, 也要用一個方案來包含此專案。 所以在上述建立專案的過程中, VB 會自動建立與專案同名的方案, 以包含我們新建的專案:

47 關於專案與方案 在方案中可包含多個專案, 在專案中可包含多個程式檔或其它檔案。

48 關於專案與方案

49 關於專案與方案 建立專案後, 在方案總管預設只會看到『一個』程式檔, 但其實 VB還會另外產生幾個必要的程式檔(例如:My Project 資料夾下會有Application.Designer.vb 等檔案), 我們不需理會這些檔案, 但在專案的資料夾中看到這些檔案時, 也請不要去更動、刪除。

50 開啟舊專案 在起始頁會列出最近開啟過的專案名稱, 按一下即可立即開啟專案。不過日後當我們建立的專案較多時, 在起始頁可能會找不到我們要用的專案, 此時就需改用以下的方式進行。

51 開啟舊專案 透過開啟專案交談窗開啟舊專案。 在起始頁中按開啟:旁邊的專案項目, 或執行功能表中的『檔案/ 開啟專案』命令:

52 開啟舊專案

53 開啟舊專案 在開啟專案交談窗中瀏覽到專案所在的資料夾, 並雙按要開啟的專案檔:

54 開啟舊專案 此時在右邊的方案總管就可以看到 VB 已開啟所選的專案, 再雙按其中的 Module1.vb 就可開啟程式碼視窗編寫程式了:

55 開啟舊專案 要儲存專案內容, 在 VB 中可採下列何種操作? 按 鈕 執行功能表中的『檔案/全部儲存』命令
按 鈕 執行功能表中的『檔案/全部儲存』命令 (1)、(3)。 鈕的功能是建立新專案。

56 1-3 建立主控台應用程式 主控台應用程式(Console Application) 就是在『文字模式』中執行的應用程式, 也是最簡單的程式形式, 所以在本章及下一章都會利用此種方式來做練習, 以便能快速熟悉 Visual Basic 的語法。

57 為什麼稱為『主控台』? 前面提過以打孔機『打』出程式給電腦讀取的時代, 會有一位負責操作電腦(包括將卡片放到讀卡機等動作) 的操作員 (Operator), 操作員操作電腦時的控制檯面就稱為主控台(Console)。

58 為什麼稱為『主控台』? 之後隨著電腦的演進, 主控台 (Console) 這個名詞仍延用至今, 在個人電腦上, 主控台指的就是螢幕和鍵盤, 我們可以由鍵盤下命令給電腦、可以由螢幕看到電腦輸出的文字結果。 在 Windows 作業系統中, 則把文字模式的執行環境稱為主控台, 以便和 Windows 的圖形介面環境做區隔。因而在 VB 中, 就將在文字模式下執行的程式稱為主控台應用程式。

59 建立主控台應用程式 在本章稍後也會看到, 在 .NET Framework 類別庫中, 文字模式的鍵盤輸入與螢幕輸出類別, 其名稱也是 Console。

60 在 VB 中撰寫程式 VB 的程式編輯器基本用法類似於一般文字編輯器, 但它還提供一些附加功能輔助我們撰寫程式, 最常用到的就屬 Intellisense智慧輸入功能, 以下我們就來輸入一個簡單的程式, 同時來熟悉Intellisense 的用法。

61 在 VB 中撰寫程式 撰寫使用訊息窗 (Message Box) 顯示文字訊息的程式。
請依上一節最後介紹的方式開啟 Ch01-01 專案, 並開啟Module01.vb 程式。

62 在 VB 中撰寫程式 將游標移到原有的 Sub Main() 和 End Sub 這兩行程式間,並輸入『 ms』:

63 在 VB 中撰寫程式 如圖所示, 當我們在輸入程式時, VB 的 Intellisense 功能就會依我們輸入的內容, 自動提示可使用的文字, 以幫助我們自動完成所要輸入的程式片段。由於我們要輸入的恰好是提示中的第1 個項目MsgBox, 此時只要輸入左括弧 "(", VB 就會自動輸入後續『gBox』內容:

64 在 VB 中撰寫程式

65 在 VB 中撰寫程式 繼續輸入這一串文字『 " 第一個 Visual Basic 程式")』:

66 在 VB 中撰寫程式 接著只要用方向鍵或滑鼠將游標 ( 插入點) 移到別行程式,VB 就會自動調整程式的編排, 例如自動縮排、在字間加入適當的空白:

67 在 VB 中撰寫程式 在程式編寫過程中, 隨時可按工具列上的  鈕儲存目前的程式內容, 例如完成上述輸入後, 按  鈕即可將剛才輸入的內容存檔。

68 編譯及執行程式 輸入好程式後, 即可編譯並執行之。雖然編譯和執行算是兩個獨立的動作, 但我們只要一個操作即可同時完成。

69 編譯及執行程式 編譯及執行程式 按工具列上的  鈕 ( 或按[F5]鍵) 表示要執行程式, 若程式尚未編譯, VB 會自動先編譯再執行;若程式修改過尚未存檔,VB 也會先存檔再編譯並執行。

70 編譯及執行程式 由於我們的專案類型是主控台應用程式, 所以程式需在文字模式下執行, 因此執行時會出現文字模式視窗( 也可稱為命令提示字元視窗), 用以顯示程式的執行結果:

71 編譯及執行程式 按下訊息窗中的   鈕, 就會結束程式, 並返回 VB視窗:

72 程式不能執行? 當我們輸入的程式有問題時, VB 就無法順利編譯程式, 當然也就無法執行程式了。如果執行程式時出現如下圖的畫面, 即表示程式輸入錯誤, 可依以下步驟解決:

73 程式不能執行?

74 程式不能執行?

75 程式不能執行?

76 主控台應用程式的結構 看過執行結果後, 我們來認識一下這個主控台應用程式的結構:

77 主控台應用程式的結構

78 主控台應用程式的結構

79 主控台應用程式的結構

80 在文字模式中輸出訊息 剛才的主控台應用程式是用訊息窗輸出文字, 現在我們再練習建立一個新專案, 不用訊息視窗而直接在文字模式視窗中輸出文字, 同時也再熟悉 Intellisense 的輔助輸入功能。

81 在文字模式中輸出訊息 用 Visual Basic 程式在文字模式中輸出訊息。
請執行『檔案/ 關閉專案』命令關閉 Ch01-01 專案, 並用 1-2 節介紹的方式建立另一個新的主控台應用程式專案, 並命名為 Ch01-02:

82 在文字模式中輸出訊息

83 在文字模式中輸出訊息 在專案的 Moudule1.vb 窗格中, 將游標移到 Sub Main()中的空白處。我們要輸入『Console.WriteLine()』這段程式, 所以先輸入『cons』, 並用方向鍵將反白游標移到『Console』這一項:

84 在文字模式中輸出訊息

85 在文字模式中輸出訊息 再按[.]鍵 ( 小數點), VB 就會替我們輸入 『Console』這個字, 同時列出接下來可輸入的內容:

86 在文字模式中輸出訊息 接著輸入『wr』, 再用方向鍵選WriteLine:

87 在文字模式中輸出訊息 再按[ ( ]鍵輸入左括弧, VB 就會替我們輸入『WriteLine(』, 請在括弧後緊接著輸入『"Hello Visual Basic")』 ( 注意, 最後面要加上右括弧):

88 在文字模式中輸出訊息 編寫好程式後, 即可編譯、執行之。但讀者若按[F5] 鍵,會發現螢幕上有個視窗閃一下就不見了!因此這次我們要換另一個 VB 支援的程式執行方式, 請按[Ctrl] +[F5] 組合鍵, 就會出現如下的畫面:

89 在文字模式中輸出訊息 在 VB 中[Ctrl] +[F5] 代表啟動但不偵錯(Start Without Debugging) 的功能, 也就是不使用 VB 的除錯工具 (參見附錄 C ) 來執行程式, 此時文字模式視窗就不會在程式結束時立即關閉, 而會如上圖所示, 等待我們按任意鍵才會關閉。

90 在文字模式中輸出訊息 這次我們在 Sub Main() 輸入的程式是:
Console 是 .Net Framework 中的類別(Class), 讀者暫不必瞭解什麼是類別, 把類別想成是一群程式的組合即可。Console 類別代表輸出入裝置的角色 (螢幕、鍵盤)。

91 在文字模式中輸出訊息 小數點 ( . ) 表示要『取用』類別的成員, 此處取用的就是WriteLine() 方法(在物件導向程式設計中, 將類別中的程序稱為方法-Method)。 WriteLine() 的功能就是輸出雙引號中指定的訊息, 所以這行程式會在螢幕輸出 "Hello Visual Basic" 這串文字內容。

92 就地弄懂:『類別、物件』 與『屬性、方法』、『成員』
Viaual Basic 是一個物件導向的語言, 物件導向程式設計, 是為模擬真實世界事物所發展出來的, 所以我們可用真實世界的事物, 來說明物件導向程式設計中的名詞與概念。

93 就地弄懂:『類別、物件』 與『屬性、方法』、『成員』
在真實世界中, 常會將事物依其特性歸類為不同的類別, 例如我們可以歸類出人、汽車、狗...等『類別』。而類別的實體, 則可稱為『物件』, 例如你、我、老王、大雄、小美等, 都是屬於『人』類別的『物件』;至於老王的載卡多、大雄的賓士車、小美的保時捷等, 則是『汽車』類別的『物件』。 也就是說類別是一種分類, 有其特定的性質, 例如人和車就是不同的兩個類別, 而老王和小美則是『人』這個類別的實體。

94 就地弄懂:『類別、物件』 與『屬性、方法』、『成員』
在 Visual Basic 中, 『類別』的概念也是相同的, 我們可先定義類別的資料屬性(稱為屬性) 與程式功能 (稱為方法), 當我們要用到相似的需求時, 即可由已設計好的類別產生一個物件來完成我們的需求。 例如前面我們曾介紹過的『表單類別』, 當我們需要表單時, 就不用再重新設計, 而可以由『表單類別』產生一個個的『表單(視窗)物件』來使用。

95 就地弄懂:『類別、物件』 與『屬性、方法』、『成員』

96 就地弄懂:『類別、物件』 與『屬性、方法』、『成員』
以上無論是『屬性』(Propert?y) 或『方法』(method), 都屬於 Dog 類別組成中的一員, 因此可通稱為『成員』, 屬性一般是指靜態的資料, 例如:大、小、公、母, 而方法一般是動態的動作, 例如:叫、坐下、撿報紙。 有了 Dog 類別之後,就可用它來模擬實際的狗狗了, 而且每隻狗 (一隻狗就是一個物件) 還可以指定不同的特性喔:

97 就地弄懂:『類別、物件』 與『屬性、方法』、『成員』

98 就地弄懂:『類別、物件』 與『屬性、方法』、『成員』
以上的小白、小黃都是屬於『Dog 類別』的物件, 我們稱之為『Dog 物件』。 當我們要存取物件內的成員 (屬性或方法) 時, 則是使用 "." 來指定成員, 例如:

99 就地弄懂:『類別、物件』 與『屬性、方法』、『成員』
您可以把 "." (英文叫 dot ) 想成是 "的", 因此『小黃.毛色』就是要存取小黃『的』毛色屬性, 而『小白.舔人(老張)』則是要執行小白『的』舔人() 方法。 除了可針對『物件』來操作之外, 有時也會直接使用『類別』, 例如想要讀取狗類的『特色』屬性, 或執行『播放簡介()』動作:

100 就地弄懂:『類別、物件』 與『屬性、方法』、『成員』
像狗的特色、簡介, 由於和實體的狗 (物件) 無關, 因此跳過物件而直接用類別來存取會比較方便!像是在前文提到的 Console.WriteLine(), 就是在執行 Console類別的 WriteLine() 方法。

101 在文字模式中輸出訊息 請練習修改專案 Ch01-02 程式中 Console.WriteLine() 的內容, 讓它輸出不同的訊息, 例如輸出自己的姓名。

102 在文字模式中輸出訊息 在 Console.WriteLine() 的括弧之間, 輸入 “你好, 王小明”, 按[Ctrl] +[F5]鍵就會看到如下的畫面:


Download ppt "第 1 章 認識Visual Basic."

Similar presentations


Ads by Google