《交互式程序设计 第2版》一2.6 对象和属性

2.6 对象和属性

对象是什么?对象是将多个属性集中在一起、代表所有这些不同属性的东西。听起来挺抽象的是不?其实很简单,就拿一把椅子打个比方。一把椅子有它的高度、重量,还有若干椅子腿。好,这里就有三个属性了,它们都属于一种叫做“椅子”的东西。写成代码就是这样:

Chair myChair;
myChair.height = 22;

看到Chair实例的名字和属性之间的那个点(.)吗?那是点操作符。在现有流行的编程语言中,常用点操作符访问、使用和设置对象的属性。我们继续对椅子做些事情:

myChair.legs = 4;
myChair.weight = 5;

现在你制作了一把名叫“myChair”的椅子,它有若干属性:椅子腿、重量和高度。做椅子有点无聊吧,那么我们来看些实用的例子。以下是一段Processing代码。

PImage img = loadImage("mypicture.jpg");
image(img, 20, 10);
img.x = 300; // 设置图像在x轴上的位置
img.y = 300; // 设置图像在y轴上的位置

上面这几行代码初看让人迷惑,其实细看就很快能明白的。PImage是Processing里的一个对象,用于加载和显示图像文件,还可以调整图像尺寸以及处理图像的像点。下一章我们讲Processing的时候会对此进行详细解释,现在你只需要看最后的两行:

img.x = 300; // 设置图像在x轴上的位置
img.y = 300; // 设置图像在y轴上的位置

这两行就是说,PImage有一个名为x的属性和一个名为y的属性。当你创建了一个PImage对象,就是上面代码里的img,就可以获得或者设置这些属性。你可以告诉对象图像应该放在哪个位置,也可以获取图像的位置,就看你把img放在等号的哪一边了。

int xPosition = img.x; // 获取图像在x轴上的位置
img.x = 400; // 设置图像在x轴上的位置

接下来我们看看这图像还能做点别的什么,例如复制和返回它所有的像点,以便被其他图像使用。PImage用函数copy实现这个操作,我们来看看是怎么调用这个函数的:

img.copy();

又见到点操作符了。除了操作属性,点操作符还可以调用函数。的确容易混乱,但这样挺方便的。这个点告诉你正在使用对象内部的东西。所以PImage的函数copy也可以理解为PImage的一个属性,只是它以函数的方式存在而已。
注意: 方法和函数:当一个函数作为某物的一部分时,这个函数就是一个“方法”,例如copy就是PImage的一个方法。它们几乎只有字面上的差别,使用的时候完全不需要担心。只要记住,“方法”就是指属于一个对象(如PImage)的函数。
如果你碰巧点开了函数copy在Processing主页上的文档,你会见到如图2-7所示的页面。
你可以从中获得什么信息呢?它给你举了个调用PImage copy的例子,并告诉你函数签名是什么。在Processing里是这样用的:

img.copy(sx, sy, swidth, sheight, dx, dy, dwidth, dheight);
img.copy(srcImg, sx, sy, swidth, sheight, dx, dy, dwidth, dheight);

这是告诉你PImage有一个叫copy的函数,这个函数有两种调用的方式。具体怎么调用还要继续查文档,看看分别传入的是什么参数,但仅看参数名也能猜出个大概。我们继续看图2-7所示的文档,可以发现末尾处说明格式的部分第一个函数的括号里,有些参数开头加了s,有些加了d。s表示来源,d表示目标,这样参数的意义更容易理解,也更便于记忆。这个函数把一个PImage对象的像素复制到另一个PImage对象。粗略了解函数的参数后,就可以试着用它了,用在两个不同的PImage对象上:

图2-7:PImage copy在Processing.org的文档

PImage p1 = loadImage("baby.jpg");
image(p1, 0, 0);
PImage p2 = new PImage(400, 400);
p2.copy(p1, 0, 0, p1.width, p1.height, 10, 10, p1.width  2, p1.height  2);
image(p2, 100, 100);

仔细看看第4行。对PImage的一个实例p2调用了函数,把实例p1的高和宽作为参数传递给函数。让我们再看一次这个函数的签名。

img.copy(srcImg, sx, sy, swidth, sheight, dx, dy, dwidth, dheight);

函数从srcImg复制像素,被复制的像素处于srcImg横轴的sx位置和纵轴的sy位置,像素将被复制到目标图像的dx和dy位置,同时也指定了复制的范围大小。可以利用一个PImage实例的属性向另一个实例的函数传递参数。这是惯常的做法,用来保存、传递和获取对象的属性。
如果你制作了一个对象,这个对象包含了多个对象在内,这好比是一个有多张照片的相册。好吧,我们先把这个对象命名为PhotoAlbum。这个对象有一个名为getNewestPicture的函数。在Processing中可以这样处理PhotoAlbum类:

PhotoAlbum newAlbum;
newAlbum.getNewestPicture().filter(BLUR);

我们还没提过filter函数,但想必你已经能猜到filter(BLUR)是做什么用的。亮点在于两个函数连续调用。其实以上两行代码等价于:

PhotoAlbum newAlbum;
PImage img = newAlbum.getNewestPicture();
img.filter(BLUR);

两种写法效果一样,你自己写的时候挑一种就行了,重要的是这两种写法你都能看懂。

时间: 2024-08-22 15:03:05

《交互式程序设计 第2版》一2.6 对象和属性的相关文章

《交互式程序设计 第2版》一1.2 交互领域中的编程

1.2 交互领域中的编程 这本书之所以名为<交互式程序设计>,是因为我们主要关注交互设计中要用到的编程知识,也就是用编程的手段,去创造用户能直接与之交互的应用.编程有很多种,其中有些技术和思维方法更适合用于服务器和数据库,而不是交互.而本书集中讨论的东西将是你用来建立用户和应用之间沟通的知识和技能.交互设计中的一大挑战是如何在你设计的作品和用户之间建立真正的交互. 1.2.1 交互的本质 那么,"交互"到底是什么呢?我们可以把它定义为双方或多方之间的信息交换.作家及电子游戏

《交互式程序设计 第2版》一第3章

第3章 使用ProcessingProcessing是较早的开源项目之一,它简化了创建交互式图形应用程序的难度.它就像是艺术家和设计师的专用工具一样,你无需高深的编程技巧,也可以容易地用它进行艺术创作.Processing是完全开源和免费的,你可以下载.使用甚至修改它.最初,麻省理工学院的Casey Reas和Ben Fry在John Maeda的指导下开始这个项目,后来一组开发人员不断更新Processing的内核和工具.现在Processing的最新版本是1.5版译注1,提供的工具支持创建J

《交互式程序设计 第2版》一3.11 小结

3.11 小结 Processing既是一个集成开发环境,也是一门程序设计语言.它们是一体的,可以在processing.org/download上下载.Processing语言是基于Java语言的,但作了简化,以便帮助艺术家和设计师容易地建立可视化样本和交互式应用程序.Processing集成开发环境顶端的工具栏上有几个按钮.单击"Run"按钮可以运行程序:单击"Stop"按钮可以停止应用程序的运行:此外还有"New"."Open&q

《交互式程序设计 第2版》一1.1 本书读者对象

1.1 本书读者对象 本书基于这样一个目标:技术和代码不是计算机科学家和工程师的专用工具,任何人都不需要畏惧或逃避电子技术.硬件和代码.艺术家和设计师可能想知道,如何通过定制的计算机应用程序来更好地实现用户之间以及应用之间的交互.你可能会关心如何创造出富有科技感的应用,这里有两种情况,一种是该应用本身具有突出的科技特性,另一种是看上去很高科技或者使用了一些代表了科技力量的元素,例如键盘.鼠标和触摸屏.你也可能关注交互领域的其他方面,又或者希望把冰冷的技术隐藏于更具生命机理的界面之下.本书会介绍用

《交互式程序设计 第2版》一1.5 数据交换与探索

1.5 数据交换与探索 交互设备的任务.目标和实现其交互的方式都很重要.与之前提到的一样,下面的分类并不是一个交互作品分类的完整清单,只是列举了一些最常见主题,为本书后面的内容提纲挈领一下. 支持数据可视化 我们身处的社会越来越以信息为中心,每天都有大量的数据在处理,数据可视化就变得越来越重要了.结构良好的数据可视化是一种有力的工具,它不仅让用户理解独立的数据点,还让用户明白数据点之间的关系,检测数据模式,甚至重新配置数据,或将其置于新的语境中.数据可视化不是向用户单方面灌输信息,而是通过和用户

《交互式程序设计 第2版》一3.9 导出Processing应用程序

3.9 导出Processing应用程序 如果你想看看应用程序运行情况,想检查代码,那么运行和调试的确很有用.但如果你要把应用程序与某个朋友分享,运行和调试就没有用了,需要做的是导出应用程序.第一步是点击菜单"File"→"Export Application",或者直接按Ctrl + E组合键(Mac OS X下是-E).会弹出如图3-10所示的对话框,让你选择程序将来运行所需的操作系统.如果你单击了Export(导出)按钮,会显示一个对话框,将当前应用程序所在的

《交互式程序设计 第2版》一导读

前 言 本书分三部分.第一部分(第1-6章)介绍贯穿本书的3个项目,第二部分(第7-10章)介绍交互设计和应用程序创作中最普遍的主题,第三部分(第11-17章)深入讨论相关进阶主题.当中还有对相关人士的采访,包括程序员.艺术家.设计师以及工具的开发者.本书涉猎如此广泛,无法对每一个主题进行深入探讨,有兴趣进一步研究的读者不妨参考书中所列出的书目.网站.设计师和艺术家. 本书包括及未包括的内容 当下交互设计领域迅猛发展,观念日新月异,笔者对此的兴奋之情难以言表.受时间和篇幅所限,无法囊括所有的方面

《交互式程序设计 第2版》一2.3.4 运算符

2.3.4 运算符 在程序中,运算符就是编译器用来执行命令和运算的符号,例如"="用来赋值,"=="用来比较等.运算符有三类:一是数学运算符,用于数学运算,就跟数学课上学到的一样:二是赋值运算符,用来改变变量的值:三是比较运算符,比较两个变量是否相等,谁大谁小. 数学运算符的用法就跟一般数学式子里的一样.用"+"可以把两个变量相加,例如: int apples = 5: int moreApples = apples + 3; // moreAp

《交互式程序设计 第2版》一3.4 Processing绘图基础

3.4 Processing绘图基础 因为Processing是为艺术家提供的工具,所以它简化了很多任务,其中最重要的一个任务是绘图.第8章和第9章会介绍利用矢量和位图绘图.第13章将介绍图形库OpenGL(Open Graphics Library)和一些3D(3 Dimension,三维)基础,以及如何创建复杂的绘图系统.在本节,你将学习如何绘制简单的形状和线条,以及如何创建颜色去填充它们. 3.4.1 rect().ellipse()和line()方法 有3个最简单的绘图方法rect().

《交互式程序设计 第2版》一1.2.4 交互语言

1.2.4 交互语言 任何一种交互都需要一套相应的词汇.例如,你要用鼠标把桌面上的某个文件删除,你会说"选中该文件,然后把它拖到回收站".事实上,对你这个动作,系统并不是完全如你这般理解,但没关系.重要的是你明白你可以做什么动作,而对于同一个动作,系统有相同的理解,并作出你所预期的响应.建立一个有意义.有效和有结果的交互,就像创造一种语言或代码,需要交互双方对符号的意思和动作指令的意义有一致的协议.而同一个符号或动作,在不同类型的界面和交互中, 含义会相差很大. 各式各样的交互种类繁多