Presentation is loading. Please wait.

Presentation is loading. Please wait.

计算机可视化编程 基于Visual C++6.0的面向对象编程 第一讲 主讲教师:隋振                学时:32.

Similar presentations


Presentation on theme: "计算机可视化编程 基于Visual C++6.0的面向对象编程 第一讲 主讲教师:隋振                学时:32."— Presentation transcript:

1 计算机可视化编程 基于Visual C++6.0的面向对象编程 第一讲 主讲教师:隋振                学时:32

2 Visual C++ 面向对象编程教程 版权所有 复制必究 http://www.51Labor.com
高等学校计算机专业课教育教材精选 王育坚 编著 Visual C++ 面向对象编程教程 版权所有 复制必究

3 目录 版权所有 复制必究 第1章 Visual C++集成开发环境 第2章 C++语言基础 第3章 C++面向对象程序设计
第4章 创建应用程序框架 第5章 文档与视图 第6章 MFC原理与方法 第7章 对话框和控件 第8章 图形设备接口 版权所有 复制必究

4 第 1 章 Visual C++集成开发环境

5 1.1 Visual C++概述 一、C语言及其发展
1、它的原型ALGOL 60语言(A语言)1963年年剑桥大学发展成为CPL(Combined Programming Language)语言, 1967简化成BCPL语言 2、1970年,美国贝尔实验室的Ken Thompson将BCPL进行了修改,并为它起了一个有趣的名字“B语言”。意思是将CPL语言煮干,提炼出它的精华。并且他用B语言写了第一个UNIX操作系统。 3、1973年,B语言也给人“煮”了一下,美国贝尔实验室的D.M.RITCHIE在B语言的基础上最终设计出了一种新的语言,他取了BCPL的第二个字母作为这种语言的名字,这就是C语言。  

6 1.1 Visual C++概述 一、C语言及其发展 4、1977年Dennis M.Ritchie 发表了不依赖于具体机器系
5、1978年Brian W.Kernighian和Dennis M.Ritchie出版了 名著《The C Programming Language》,从而使C语 言成为目前世界上流行最广泛的高级程序设计语言 6、1990年,国际化标准组织ISO(Intrernational Standard Organization)接受了87 ANSI C为ISO C 的标准(ISO )。1994年,ISO修订了C语言的标准。   

7 1.1 Visual C++概述 二、C++语言及其发展
1、C++语言是由贝尔实验室的Bjarne Stroustrup 在1980年创建的。自90年代后,C++越来越受到重视并得到广泛的应用。 2、1993年Microsoft公司推出Visual C++ 1.0, Visual C++是一个可视化软件开发工具 3、 2001年推出Visual C++.NET(即Visual C++ 7.0), 4、如Borland的Borland C++和C++ Builder

8 二、C++语言及其发展 Visual C++已成为专业程序员进行软件开发的首选工具。要使用 Visual C++编程,首先要了解它的集成开发环境。Visual C++集成开发环境中的程序开发工具很多,要真正掌握它们必须结合具体的编程内容。本章只简单介绍 Visual C++集成开发环境的一般特点、界面风格和简单工具的使用,使我们对Visual C++有一个感性的认识。

9 三 Visual C++可视化 Visual C++不仅仅是一个C++编译器,而是一个基于Windows操作系统的可视化集成开发环境IDE(Integrated Development Environment)。Visual C++由许多组件组成,包括编辑器、编译器、调试器以及程序向导AppWizard、类向导ClassWizard等开发工具。这些组件通过一个名为Developer Studio的组件集成为一个和谐的开发环境。

10 1 Visual C++的特点 源程序用C++语言编写,支持面向对象设计方法,使用功能强大的微软基础类库MFC(Microsoft Foundation Class)。 开发出来的软件稳定性好、可移植性强。 可以编制各种各样Windows应用程序,包括对话框程序、文档 / 视图程序和组合界面程序。 作为Visual Studio可视化组件家族中最重要的一个成员,与其它可视化开发工具如Visual J++、Visual Basic及Visual C#紧密地集成在一起,适用于特殊、复杂和综合软件项目的开发,乃至一个系统软件的设计。 联机帮助系统MSDN(Microsoft Developer Network Library)功能强大。它既能与集成开发环境有机地结合在一起,使得用户在编程时随机查询需要的内容信息,又能脱离集成开发环境而独立地运行。

11 比较 Visual Basic、C++ Builder 和 Delphi 等编程工具,用Visual C++编写Windows应用程序最富于挑战性和艰巨性。而当熟练掌握Visual C++后,你会感受到作为一个Visual C++程序员的无比优越性。要想在使用Visual C++编程时做到游刃有余,必须解决四个主要困难: C++语言的面向对象机制 MFC类库功能的庞大 Windows编程的复杂性 向导所建立的应用程序框架的透明性

12 2 Visual C++的安装 要求CPU为Pentium以上系列,内存为64MB,所需硬盘空间约为500M,操作系统为Windows 95/98/2000或Windows NT。 在“Visual Studio 6.0 Enterprise – 企业版工具”页上的“选项”下,确保未选中“Visual Studio Analyzer”复选框。 运行光盘根目录下的Setup.exe程序后,安装向导程序将自动完成Visual C++的安装,用户只需要根据对话框提示输入具体的内容。如输入产品序列号,选择安装选项、安装路径和需要安装的组件等。 安装完毕后,如果要安装MSDN,选择Install MSDN,插入Visual Studio 6.0的MSDN光盘继续进行安装。用户最好随系统一起安装MSDN。

13 3 集成开发环境窗口 例1-1 利用Visual C++ 6.0创建一个Windows应用程序Mysdi。
3 集成开发环境窗口 例1-1 利用Visual C++ 6.0创建一个Windows应用程序Mysdi。 1. 执行File|New菜单命令,出现New对话框。在Project页面窗口中选择MFC AppWizard[exe]选项,在Project Name编辑框中输入项目名称Mysdi,在location编辑框中输入保存项目的路径。 2. 在MFC AppWizard-Step1对话框中设置应用程序的类型,本例创建一个单文档程序,选择Single document项,单击Finish按钮,出现New Project Information对话框,单击OK按钮,将生成应用程序框架文件,并在项目工作区窗口打开生成的应用程序的项目。

14

15 浮动窗口和停靠窗口 集成开发环境中的窗口有两种:浮动窗口和停靠窗口。浮动窗口是一般的带边框的子窗口,用它显示源代码或图形。浮动窗口能以平铺方式或层叠方式显示在集成开发环境中,源代码编辑窗口就是一个浮动窗口。 除了浮动窗口,集成开发环境中的所有其它窗口都是停靠窗口,如工具栏、菜单栏、Workspace窗口、Output窗口和Debugger调试器窗口(调试时自动打开。

16 停靠窗口可以固定在集成开发环境中的顶端、底端或侧面,或者浮动在屏幕上任何位置。停靠窗口不论是浮动着的还是固定着的,总是出现在浮动窗口的前面。这样就保证了当焦点从一个窗口移到另一个窗口时,停靠窗口总是可见的。 一个停靠窗口的固定和浮动形式可以相互转换。当拖动一个固定窗口任何边缘未使用部分至屏幕中间位置,该固定窗口就转换成浮动窗口。反之,当拖动一个浮动窗口的标题栏至开发环境主窗口的任何边缘上,该浮动窗口就转换成固定窗口。 单击窗口上的关闭按钮将关闭窗口,要想重新打开窗口,在View主菜单中选择相应的菜单项。

17 4 MSDN帮助系统 Visual C++ 帮助系统包括: 有关Visual C++ IDE使用说明的联机帮助文件;
MSDN Library(Microsoft Developer Network Library)组件。 MSDN帮助系统是一个HTML格式的帮助文件,它所包含的内容非常丰富,容量超过1.1GB,包含了有关Visual Studio的编程原理、方法和应用实例等内容。使用MSDN时可以通过访问微软网站“

18 MSDN的启动方法: 执行Help|Contents命令或Search工具栏按钮;
单击F1键快速获取相关内容的帮助,如在源文件编辑器中用光标把一个需要查询的单词全选上,或单击一条出错提示信息,按F1键出现MSDN的“索引”页面; 脱离于Visual C++集成开发环境而独立运行,MSDN是Microsoft Visual Studio的一个组件,从Windows“开始|程序”菜单中选择Microsoft Developer Network菜单中的MSDN Library菜单项,就启动了MSDN帮助系统。

19 1.2 项目和项目工作区 编写一个应用程序首先要创建一个项目(Project),在创建项目的同时创建了项目工作区Workspace。项目工作区记录了一个项目的集成开发环境的设置,如Developer Studio最后一次关闭前各窗口的状态。

20 项目 从软件工程的角度出发,每个程序的开发工作都是一个项目工程,它涉及到计算机和相关专业等领域的知识及其应用。编程时还要使用代码生成、编辑、编译、链接、调试等一系列工具,并且Window可执行程序不是仅由一个源程序文件所生成的,而是由一些相互关联的源文件和资源文件共同生成的。

21 在Visual C++ IDE中,把实现程序设计功能的一组相互关联的C++源文件、资源文件以及支撑这些文件的类的集合称为一个项目。Visual C++ IDE以项目作为程序开发的基本单位,项目用于管理组成应用程序的所有元素,并由它生成应用程序。 项目用项目文件DSP(Developer Studio Project)来描述,文件名后缀为.dsp。项目文件保存了项目中所用到的源代码文件和资源文件的信息,如文件名和路径。同时,项目文件还保存了项目的编译设置等信息,如调试版(Debug)或发布版(Release)。 一个项目至少包含一个项目文件。根据项目类型的不同,一个项目包含的源文件、资源文件和其它文件也不同。

22 项目工作区 Visual C++ IDE以项目工作区的方式来组织应用程序的项目,项目工作区用工作区文件DSW(Developer Studio Workspace)来描述,文件名后缀为.dsw。 工作区文件保存了应用程序集成开发环境的项目设置信息,它将一个DSP项目文件与具体的Developer Studio结合在一起,在Visusal C++ IDE中一般以打开工作区文件DSW的方式来打开指定的项目。 创建项目后,可通过项目工作区Workspace窗口来查看项目中的组成元素。Workspace窗口由ClassView、ResourceView和FileView三个页面组成。这些页面按照一定的逻辑关系将一个项目分成几个部分,以树形结构显示项目所创建的类、资源和文件。

23 1. ClassView类视图 2. ResourceView资源视图 3
1. ClassView类视图 2. ResourceView资源视图 3. FileView文件视图 可通过File菜单和Project菜单中的有关命令添加C++源文件、资源文件和其它文件到项目中,在工作区窗口中将显示被添加的文件与其它文件之间的关系。若要删除项目中的某个文件,选中要删除的文件,然后按Delete键即可。

24 项目设置 一般使用默认的项目设置生成应用程序的执行代码,也可以改变当前项目的设置。Visusal C++ IDE提供了相关的命令来设置项目,如Project菜单中的Settings命令、Build菜单中的Configurations命令和Tool菜单中的Customize、Options命令等。

25 执行Project|Settings菜单命令打开 Project Settings 项目设置对话框:
在Debug页面可设置程序执行时的命令行参数; 在C/C++页面可优化编译器设置和添加预处理器宏; 在Link页面可设置链接器选项。 执行Build|Configurations菜单命令可添加或删除项目的版本设置。

26

27 有多种方法可以改变 Developer Studio 环境,使它适应我们个人的工作方式。执行Tool|Customize菜单命令,在Toolbars页面可设置工具栏选项,在Commands页面设置菜单栏选项。执行Tool|Options菜单命令可进行编辑器等选项的设置,如设置编辑窗口的字体和颜色。 要想了解每一项的具体含义,可先单击该项,然后按F1键即可得到需要的联机帮助信息。

28 1.3 编辑器 程序代码由操作码和数据组成,除了一般数据,一个Windows应用程序大量使用被称作为资源的数据。Visual C++作为可视化的程序开发工具,提供了功能强大的源代码编辑器和各种类型的资源编辑器。 源代码编辑器 资源编辑器:菜单编辑器、工具栏编辑器、 对话框编辑器、图标编辑器、光标编辑器、位图编辑器、快捷键编辑器、串表编辑器

29 1.3.1 源代码编辑器 编辑文件的类型: C/C++头文件 C++源文件 Text文本文件 HTML文件 方便编程的特色功能:
源代码编辑器 编辑文件的类型: C/C++头文件 C++源文件 Text文本文件 HTML文件 方便编程的特色功能: 在编辑C++源程序时,在编辑窗口根据C++语法对不同的语句元素以不同的颜色显示,并进行合适长度的自动缩进。 自动提示功能。当输入源程序代码时,编辑器会显示对应类的成员函数和变量;当输入函数调用语句时,编辑器会自动提示函数的参数个数和类型;当将光标指向变量、函数或类时,编辑器将给出对应的变量类型、函数声明或类的信息。 自动补全单词功能。在输入标识符时右击鼠标,从弹出菜单中选择Complete Word项可自动补全单词的其余部分。

30 更方便地使用Complete Word功能:
在输入较长的标识符时,为了更方便地使用自动补全单词功能,可为该功能的命令添加一个快捷键。执行菜单命令Tools|Customize|Keyboard,在Category栏选择All Commands项,在Editor栏选择Text项,Commands框中找到命令项CompleteWord,将光标置于Press new shortcut 框中,按下需要的快捷键组合,如Alt+Space,最后单击Assign按钮。设置快捷键后,在输入关键字、标识符和变量时,按下 Alt+Space 就可以自动补全单词的其余部分。

31 资源编辑器 在Windows环境下,资源是独立于程序源代码的,加上不同资源的不同特点,因此Visual C++提供了不同的可视化资源编辑器和资源属性对话框。使用资源编辑器,可以创建新的资源或编辑已有的资源。当新建或打开一个资源时,系统将自动打开相应的资源编辑器。当新建一个资源时,资源管理器自动给资源分配一个资源标识号ID。

32 1. 图象编辑器 图象编辑器由绘图区、Graphics绘图工具箱和Colors调色板组成。当图象编辑器打开后,Developer Studio菜单栏上将出现Image主菜单。Graphics工具栏中有画笔、画刷等常用绘图工具,并可输入文本。Colors工具栏供用户选择绘图时所用的颜色。 图象编辑器主要用于绘制位图、图标、光标和工具条,在Workspace项目工作区中的ResourceView页面双击这些资源时就会打开对应的图象编辑器,例如,当双击一个Icon图标资源时将打开图标编辑器。

33

34 2. 工具栏编辑器 工具栏一般表示常用菜单命令的快速执行方式,Windows应用程序用一个形象的位图来作为工具栏按钮的外观。
2. 工具栏编辑器 工具栏一般表示常用菜单命令的快速执行方式,Windows应用程序用一个形象的位图来作为工具栏按钮的外观。 工具栏编辑器实际上也是一个图象编辑器,主要用于创建新的工具栏按钮。在项目工作区ResourceView页面打开Toolbar文件夹,双击其中的工具栏资源,出现工具栏编辑器和Graphics工具栏、Colors工具栏,单击最后的空白项可添加一个新的按钮。鼠标按下并拖动某个工具栏按钮,可将该按钮删除。

35

36 3. 快捷键编辑器 快捷键是利用键盘输入方式代替执行应用程序的菜单或工具栏命令。快捷键一般是两个键的组合,如Alt+S。利用快捷键编辑器可编辑、添加和删除应用程序项目中的快捷键。 在项目工作区ResourceView页面打开Accelerator文件夹,双击其中的快捷键资源出现快捷键编辑器。 双击快捷键列表项,打开Accel Properties快捷键属性对话框编辑快捷键。也可单击鼠标右键,在快键菜单中选择Properties命令,进入快捷键属性对话框。 要添加快捷键,双击编辑器中快捷键列表底部的空白行,在随后出现的快捷键属性对话框中选择需要添加快捷键的菜单项标识ID,然后设置快捷键和组合键。 要删除一个快捷键,单击该快捷键,然后按Delete键。

37

38 4. 串表编辑器 Windows应用程序运行后,当鼠标指向菜单项和工具栏按钮时,在底部状态栏将显示所指项的有关提示信息,串表就是这样一种资源字符串。 利用字符串编辑器可进行串表的编辑、添加和删除等操作。在项目工作区ResourceView页面打开String Table文件夹,双击串表资源出现串表编辑器。串表编辑器的使用方法与快捷键的使用方法类似。

39

40 5. 版本信息编辑器 在Windows中,版本信息也是作为资源处理。版本信息包括版本号、产品的操作系统、语言和公司名称等,版本信息编辑器用于编辑上述信息。 每个应用程序有一个版本信息资源,其标识ID为VS_VERSION_INFO。编程时版本信息可帮助用户判断当前使用系统的版本号,避免用旧版本替换新的版本。调用函数GetFileVersionInfo()和VerQueryValue()可获取版本信息。 在项目工作区ResourceView页面打开Version文件夹,双击其中的VS_VERSION_INFO出现版本信息编辑器。双击版本信息资源中某一项可以编辑相应的版本信息。

41

42 例1-2 对例1-1中的应用程序Mysdi使用资源编辑器编辑图标、工具栏、快捷键、串表和版本信息。
1.执行File|Open Workspace命令,找到Mysdi文件夹,双击Mysdi.dsw文件就打开了应用程序项目。可采取另一种简单方法打开项目,即通过File菜单中的Recent Workspace子菜单找到以前建立的应用程序项目Mysdi。 2.将应用程序的大小图标改为“SDI”。 在Workspace项目工作区ResourceView页面打开Icon文件夹,双击IDR_MAINFRAME,在右边的编辑区显示程序的图标资源。利用Graphics工具栏中的橡皮擦去原来的图象,再利用文本工具“A”输入字符串“SDI”,并设置合适的字体和大小。注意16×16和32×32两种大小规格的图标都要进行修改。

43 3.在工具栏上添加一个“+”按钮。在项目工作区ResourceView页面打开Toolbar文件夹,双击IDR_MAINFRAME出现程序的工具栏资源。单击最后的空白项,利用Graphics中的画线工具画一个“+”。 4.将“文件”菜单项“打开(O)...”改为“打开(R)...”,并将其快捷键改为“Ctrl+R”。在项目工作区ResourceView页面打开Menu文件夹,双击IDR_MAINFRAME出现程序的菜单栏资源。双击菜单项“打开(O)…”弹出Properties属性对话框,将其Caption改为“打开(&R)...\tCtrl+R”。在项目工作区ResourceView页面打开Accelerator文件夹,双击IDR_MAINFRAME出现程序的快捷键资源。双击快捷键ID_FILE_OPEN打开Properties属性对话框,将Key输入栏的字符改为“R”。

44 5.将程序运行后底部状态栏的显示信息改为“这是一个单文档应用程序”。在项目工作区ResourceView页面打开String Table文件夹,双击String Table出现程序的串表资源。双击ID为AFX_IDS_IDLEMESSAGE的串表资源项打开Properties属性对话框,将其Caption改为“这是一个单文档应用程序”。 6.修改版本信息,将版本号改为1.1,并修改“关于…”对话框中相应的显示信息。在项目工作区ResourceView页面打开Version文件夹,双击VS_VERSION_INFO出现程序的版本信息。双击CompanyName项,输入姓名。同样将FileVersion和ProductVersion项的内容改为“1.1”。 在项目工作区ResourceView页面打开Dialog文件夹,双击IDD_ABOUTBOX出现“关于Mysdi”对话框。鼠标右击静态文本控件“Mysdi 1.0 版”弹出浮动式菜单,选择Properties项弹出属性对话框,将其Caption改为“Mysdi 1.1 版”。

45 打开Build菜单,执行Build Mysdi
打开Build菜单,执行Build Mysdi.exe命令即可编译、链接并生成应用程序Mysdi。打开Build菜单,执行Execute Mysdi.exe命令运行应用程序,出现如图所示结果。

46 1.4 菜单栏和工具栏 菜单栏和工具栏是Visual C++ IDE的重要组成部分,工具栏一般与菜单项有对应关系。Visual C++ IDE包括100多个不同的菜单项和几乎同样数目的工具栏按钮,而且它们中的大多数还会引导出复杂的对话框和具有大量选项的属性页。随着今后学习内容的深入,我们将会比较全面地掌握Visual C++ IDE中的菜单栏和工具栏的使用。

47 菜单栏 Visual C++ IDE中的菜单栏由File、Edit、View、Insert、Project、Build(Debug)、Tools、Window和Help等9个主菜单组成,每个主菜单又由多个菜单项和子菜单组成。菜单项提供的功能几乎可以完成所有的Developer Studio功能。 除了主菜单,在Visual C++ IDE中窗口的不同地方单击鼠标右键还可弹出相应的快捷菜单。

48 File菜单 File主菜单包括一些与文件有关的操作命令,如新建、打开、关闭、保存和显示最近的项目、文件、工作区等。 例如,在编程过程中,若要创建新的头文件或实现源文件并添加到项目中,打开File菜单,选择New菜单项,在New对话框的选择File页面,选择C/C++ Header File或C++ Source File项,选择Add to Project,输入文件名。

49 Edit菜单 Edit主菜单主要包括一些与文件编辑有关的操作命令,如复制、粘贴、剪切、查找、替换、设置、删除和查看断点等。 例如,Edit的查找功能很丰富,可利用Find菜单命令在当前打开的文件中进行查找,还可利用Find in Files菜单命令在指定的多个文件中进行查找。

50 View菜单 例如,当进入程序调试状态时,通过Debug Windows子菜单可以激活几个不同的调试窗口。
View主菜单中的菜单命令项主要用于改变窗口的显示方式和激活指定的窗口,如激活ClassWizard类向导、Workspace工作区窗口、Output输出窗口和Debug Windows调试窗口。 例如,当进入程序调试状态时,通过Debug Windows子菜单可以激活几个不同的调试窗口。

51 Insert菜单 例如,编程时经常通过Insert菜单的Resource命令,向项目添加一个指定类型的资源。

52 Project菜单 Project主菜单主要包括一些与项目管理有关的操作命令,如向项目添加文件、设置当前项目、改变编译器和链接器选项等。 例如,若要将一个现有的C++源文件或资源文件添加到项目中,可执行Project|Add to Project|Files命令,在Insert Files Into Project对话框中,选择要插入的文件。

53 Build菜单 Build主菜单主要包括一些与建立可执行程序有关的操作命令,如编译、链接和调试程序等。 例如,Build菜单命令项是对最近修改过的文件进行编译和链接,而Rebuild All菜单命令项是对所有文件全部重新进行编译和链接。Clean用于清除编译链接时在项目运行目录中产生的临时文件和输出文件。 注意,当启动调试器后,Debug主菜单将代替Build主菜单出现在菜单栏中。

54 Tools菜单 Tools主菜单中的菜单命令项主要用于启动Visual Studio实用工具、定制Visual C++集成开发环境界面,如利用Customize菜单命令设置某个主菜单中的菜单项(该主菜单要与Customize对话框同时打开)、显示或关闭工具栏和修改命令的快捷键。

55 Window菜单 Window主菜单主要包括一些与窗口显示有关的操作命令,如切换窗口、Split分离窗口及设置停靠窗口。

56 工具栏 为了提高操作效率, Visual C++集成开发环境为菜单命令项提供了对应的快捷键,但需要用户熟练记忆才能使用。Windows应用程序一般都提供了工具栏,弥补了快捷键的不足之处。 工具栏是由一些形象化的位图按钮组成,工具栏按钮一般都对应于菜单命令项,用于方便、快捷地使用Visual C++集成开发环境的常用功能。

57 Visual C++ IDE的工具栏以停靠窗口的形式出现,其位置可以通过鼠标拖曳的方法来改变,并可以根据需要进行显示或隐藏的切换。一般的方法是执行Tools|Customize菜单命令,选择Toolbars标签页,根据需要进行选择。 也可以在菜单栏或工具栏的空白处单击鼠标右键,然后在一个弹出式菜单中选择要显示或隐藏的工具栏。 如果要恢复工具栏或菜单栏到系统原来的默认状态,在Customize对话框中单击Reset All或Reset All Menus按钮。

58

59 Standard工具栏   Standard工具栏中主要包括一些与文件和编辑有关的常用操作命令,每个按钮的功能与File、Edit和View等主菜单中某个菜单项对应。下图给出了Standard工具栏的一般形式。

60 Build MiniBar工具栏 Build MiniBar工具栏中主要包括了项目的选择、编译、链接和调试等操作命令,每个按钮的功能主要与Build和Debug主菜单中某个菜单项对应。 Compile Insert Breakpoint Build Execute Go Stop Build

61 WizardBar工具栏 在默认设置情况下,Visual C++ IDE中将显示WizardBar工具栏,它位于Standard工具栏下面。WizardBar是对Visual C++中特色功能的快捷操作,它提供了对某个类的某个成员的快速访问,能显示、跟踪和操作当前的成员。


Download ppt "计算机可视化编程 基于Visual C++6.0的面向对象编程 第一讲 主讲教师:隋振                学时:32."

Similar presentations


Ads by Google