《Android游戏开发详解》一2.14 隐藏变量

2.14 隐藏变量

Android游戏开发详解
注意,到目前位置,我们能够以两种不同的方式来修改Phone对象的状态。我们能够使用点运算符直接访问其变量,并且分配显式的值;还能够使用Phone对象提供的行为来间接地修改Phone对象的状态。

如果能够直接深入到myPhone对象,取出其信息并修改,我们说对象的变量是暴露的。从现在开始,我们将禁止暴露变量,基于很多原因,暴露变量可能会有问题。

例如,如果某人试图给一个变量分配一个非法的(或者不符合逻辑的)值,会怎么样呢?如下的代码对Java程序来说可能是可以接受的,但是,随后如果我们想要扩展这一程序的话,它可能会引发问题,并且这些值真的可能会影响到一些其他的功能。

myPhone.androidVersionNumber = -10;   // Version should be positive
myPhone.poweredOn = false;       // This is fine
myPhone.playingMusic = true;       // Shouldn’t play music while phone is off

暴露变量可能会引发问题,另一个原因在于,我们可能需要处理敏感信息。如果要运行一个本章开头所讨论的视频共享站点,我们可能不想让用户访问User对象的password变量,它应该总是隐藏起来的。在这里,安全性是一个问题。

我们想要隐藏变量的第三个原因,是为了可维护性和可扩展性。当我们随后有更加复杂的程序和游戏,它们带有众多不同类型的、彼此交互的对象,这时我们想要尽可能地减少依赖性(即那些严重依赖于特定交互的功能)。我们需要记住,程序和游戏可能会改变。你可能选择删除类并创建新的类,但是,你不想让这样的情况发生:即不得不重新编写整个应用程序来处理一处小小的修改。

例如,我们假设你有一个Enemy类,它与Player类和GameLevel类交互得很好。稍后,你决定要删除Enemy类,并且用一个SuperZombieOrangutan类来替代它。如果在Enemy、Player和GameLevel类之间有太多的依赖性,你可能需要重写这些类以处理新的敌人类型,你将要创建3个新的类而不是一个。这可能会变成一种恶意的模式。如果这需要花费很多的时间,你可能确定这一修改并不值得,这意味着你的游戏将会少一种僵尸怪兽。这绝不是好事情。

简而言之,你想要能够为游戏添加想要的功能,又不必担心修改已有的代码会成为可怕的梦魇。这意味着,我们想要让类尽可能地保持独立,而隐藏变量是朝着正确方向迈进的一步。我们将在后面的一章中更深入地讨论这一概念。

时间: 2024-09-01 17:50:23

《Android游戏开发详解》一2.14 隐藏变量的相关文章

《Android游戏开发详解》——第2章,第2.14节隐藏变量

2.14 隐藏变量Android游戏开发详解注意,到目前位置,我们能够以两种不同的方式来修改Phone对象的状态.我们能够使用点运算符直接访问其变量,并且分配显式的值:还能够使用Phone对象提供的行为来间接地修改Phone对象的状态. 如果能够直接深入到myPhone对象,取出其信息并修改,我们说对象的变量是暴露的.从现在开始,我们将禁止暴露变量,基于很多原因,暴露变量可能会有问题. 例如,如果某人试图给一个变量分配一个非法的(或者不符合逻辑的)值,会怎么样呢?如下的代码对Java程序来说可能

《Android游戏开发详解》——第1章,第1.7节控制流程第1部分——if和else语句

1.7 控制流程第1部分--if和else语句 Android游戏开发详解 我们现在把注意力转向控制流程(control flow ,也称为流程控制,flow control),这指的是代码行将要按照什么样的顺序执行.还记得代码执行的基本规则吧,它是说代码要从上到下地执行.在最简单的程序中,代码真的是按照线性方式从上向下执行的.然而,在任何有用的程序中,我们可能会看到,根据某些条件,会跳过一些代码行甚至重复执行一些代码行.让我们来看一些例子. 1.7.1 if-else语句块 if-else语句

《Android游戏开发详解》一1.7 控制流程第1部分——if和else语句

1.7 控制流程第1部分--if和else语句 Android游戏开发详解 我们现在把注意力转向控制流程(control flow ,也称为流程控制,flow control),这指的是代码行将要按照什么样的顺序执行.还记得代码执行的基本规则吧,它是说代码要从上到下地执行.在最简单的程序中,代码真的是按照线性方式从上向下执行的.然而,在任何有用的程序中,我们可能会看到,根据某些条件,会跳过一些代码行甚至重复执行一些代码行.让我们来看一些例子. 1.7.1 if-else语句块 if-else语句

《Android游戏开发详解》一2.19 使用字符串

2.19 使用字符串 Android游戏开发详解让我们通过使用熟悉的一个类String,来练习一下如何使用Java文档.创建一个名为FunWithStrings的新的Java项目,并且创建一个名为StringTester的.带有main方法的新的类,如程序清单2.18所示. 程序清单2.18 StringTester.java--空的版本 01 public class StringTester { 02 03 public static void main(String[] args) { 0

《Android游戏开发详解》一2.15 改进程序

2.15 改进程序 Android游戏开发详解让我们记住上面的原理,并且努力地改进程序.首先,添加一个内建的Java关键字private作为所有Phone对象的变量的修饰符,如程序清单2.14第4行到第7行所示. 程序清单2.14 隐藏Phone类中的变量 01 public class Phone { 02 03 // These variables describe the Phone object's state 04 private boolean poweredOn; 05 priva

《Android游戏开发详解》一2.9 类

2.9 类 Android游戏开发详解图2-19所示的一个对象框架,如何将其转换为Java代码呢?使用类(class).我们已经创建了很多类,但是,还没有介绍什么是类. 类提供了一个模板,以供创建Java对象.常用的类比把类描述为一个蓝图.如下是一个Phone类的样子. 程序清单2.8 Phone类的一个示例 01 public class Phone { 02 03 // These variables describe the Phone object's state 04 boolean

《Android游戏开发详解》一导读

前言Android游戏开发详解作为对编程知之甚少或者毫无所知的初学者,开始学习Android游戏开发,可能会觉得就像是穿越陌生的星际的旅程.有太多的事情要尝试,太多的知识要学习,令人遗憾的是,还有如此之多的方式令人陷入迷途. 究其原因之一,可能是Android游戏开发给人以很简单的错觉.这个术语给人的感觉是,只需要学习和掌握一个主题就够了,实际上,Android游戏开发包括各种不同的主题,其中的一些如下所示. 编程基础: Java编程语言: 面向对象设计原理: 游戏开发: 代码优化: Andro

《Android游戏开发详解》——第2章,第2.9节类

2.9 类Android游戏开发详解图2-19所示的一个对象框架,如何将其转换为Java代码呢?使用类(class).我们已经创建了很多类,但是,还没有介绍什么是类. 类提供了一个模板,以供创建Java对象.常用的类比把类描述为一个蓝图.如下是一个Phone类的样子. 程序清单2.8 Phone类的一个示例 01 public class Phone { 02 03 // These variables describe the Phone object's state 04 boolean p

《Android游戏开发详解》一2.7 构建一个简单的计数程序

2.7 构建一个简单的计数程序 Android游戏开发详解在下一个示例中,我们将利用第1章中介绍过的for循环来打印出数字5到12之间的每一个偶数.这是一个简单的游戏示例,但是,掌握for循环语法的技巧很重要. 创建一个名为CountingProject的新的Java项目,并且创建一个名为EvenFinder的新类,添加程序清单2.7所示的main方法. 程序清单2.7 EvenFinder类 01 public class EvenFinder { 02 03 public static vo