![]() |
1
21
尽可能简洁:类描述了一组可以对其自身执行操作的数据。 例如,您可能有一个表示图像的类。此类的对象将包含描述图像所需的所有数据,然后还将包含诸如rotate、resize、crop等方法。它还具有可用于询问对象自身属性的方法,如getcolorpalette或getwidth。这与直接访问原始(非对象)数据收集中的颜色调色板或宽度不同-通过让数据访问通过类方法,对象可以强制实施保持一致性的约束(例如,在不将图像数据实际更改为该宽度的情况下,不应更改宽度变量)。 这就是面向对象编程与过程编程的不同之处。在过程编程中,您拥有数据和函数。函数作用于数据,但是数据没有“所有权”,并且数据和使用它的函数之间没有基本的联系。 在面向对象的编程中,有一些对象是与动作组合在一起的数据。每种类型的数据都有一组它自己可以执行的已定义操作,以及一组它允许函数和其他对象以一种已定义的、受约束的方式读写的已定义属性。 重点是将程序的各个部分相互分离。对于一个image类,可以确保操作图像数据的所有代码都在image类的方法中。您可以确保没有其他代码会以意想不到的方式干扰您的图像内部。另一方面,image类之外的代码可以知道有一种定义好的方法来操作图像(调整大小、裁剪、旋转方法等),而不必担心图像数据是如何存储的,或者图像函数是如何实现的。 编辑:还有一件事有时很难理解,那就是术语“class”和“object”之间的关系。“类”是对如何创建特定类型“对象”的描述。图像类将描述存储图像数据所需的变量,并给出所有图像方法的实现代码。图像对象,称为图像类的“实例”,是对该描述的特殊使用,用于存储一些实际数据。例如,如果您有五个图像要表示,您将有五个不同的图像“对象”,都是同一个图像“类”。 |
![]() |
2
3
类是面向对象编程(OOP)范式中使用的术语。它们提供抽象性、模块化以及更多的代码。OOP不是语言特定的,支持它的语言的其他例子是C++和Java。 我建议YouTube了解一些基本知识。例如 this video 以及其他相关的讲座。 |
![]() |
3
3
因为您使用的是PHP,所以我将在代码示例中使用它,但大多数情况下都应该适用。 OOP将所有东西都视为一个对象,它是方法(函数)和变量的集合。在大多数语言中,对象在代码中表示为类。 采用以下代码:
这是一个有效的(如果不是完美的)类使用此代码时,首先必须初始化类的实例,就像在变量中复制它一样:
然后,当您想要更改一些属性时(在技术上不是正确的单词,因为PHP中没有属性,但在这种情况下,我的意思是变量)。我们可以这样访问它们:
|
![]() |
4
2
注意:这假设您对编程有点熟悉,我猜您对编程有点熟悉。 类就像一个蓝图。假设你在玩一个有房子的游戏。你要上“家庭”课。这节课描述房子,并说它能做什么,能做什么。您可以有一些属性,例如高度、宽度、房间数、所在城市等。您还可以有“方法”(类内函数的花哨名称)。例如,你可以有一个“clean()”方法,它会告诉房子里的所有人来清理它。
现在假设有人在玩你的游戏,然后点击“新建房子”按钮。然后您将从该类创建一个新对象。在php中,你会写”
你可以造任意多的房子,它们都有相同的属性,你可以改变它们。例如,如果住在房子里的人决定再增加一个房间,你可以写
这是基础;关于类还有很多东西,比如继承、访问修饰符等。 现在,你可能会问自己为什么这是有用的。好吧,面向对象编程(OOP)的要点是把程序中的所有东西都看作独立的对象,试图设计它们以便不管上下文如何都可以使用它们。例如,您的房子可能是一个独立变量,可能在一系列房子中。如果你有一个带有“居住”属性的“人”类,那么你的房子可能就是那个属性。 这就是类和对象背后的理论。我建议你四处看看代码的例子。如果你愿意的话,你可以看看我为我编写的乒乓球游戏所做的课程。它是用python编写的,可能会用到一些你不理解的东西,但是你会得到基本的想法。课程是 here . |
![]() |
5
1
类本质上是一个抽象。 您有内置的数据类型,如“int”、“string”或“float”,每个数据类型都有特定的行为和可能的操作。 例如,可以取一个浮点的平方根,但不能取一个字符串的平方根。可以连接两个字符串,也可以添加两个整数。这些数据类型中的每一种都代表一个一般概念(整数、文本或具有固定数量有效数字的数字,可以是小数,也可以不是小数)。 类只是一个用户定义的数据类型,它可以表示其他一些概念,包括对其合法的操作。
例如,我们可以定义一个“password”类来实现预期的密码行为。也就是说,我们应该能够获取文本字符串并从中创建密码。(如果我键入'secret02',这是合法密码)。它应该对这个输入字符串执行一些验证,确保它至少有n个字符长,并且可能不是字典中的单词。它不应该允许我们
阅读
密码。(密码通常表示为
如果我刚输入的密码与我最初注册的密码相同,我应该可以登录。但实际上密码是什么 是 ,不是我登录到的应用程序应该知道的。所以我们的密码类应该定义一个比较函数,而不是一个“显示”函数。 类基本上包含一些数据,并定义哪些操作对该数据是合法的。它创建了一个抽象。 在密码示例中,数据显然只是内部的文本字符串,但类只允许对该数据执行一些操作。它阻止我们将密码用作字符串,而只允许对密码进行有意义的特定操作。 在大多数语言中,类的成员可以是私有的,也可以是公共的。任何私有的内容只能由类的其他成员访问。这就是我们如何实现密码类中存储的字符串。它是私有的,因此对操作人员仍然可见 我们 在类中定义,但类外的代码不能只访问密码内的字符串。他们只能访问该类的公共成员。 |
![]() |
6
1
类是您可以想到的一种结构形式,例如int、string等,通过使用面向对象的编程语言可以创建实例。像模板或蓝图一样,类采用结构。编写这个结构时,要考虑到与类的每个关联。类中的某些内容将用作main()方法中的对象实例,在该方法中执行所有的同步编程步骤。
这就是为什么你看到人们写代码
把它想成,
类本质上具有无穷多的形式。您可以编写描述carClass的属性,并且生成的每辆车都将具有这些属性。要从“获取”(读取)和“设置”(写入)数据的属性获取它们,只需在main()中生成的对象实例上使用点运算符,并将描述性属性声明为实际名词。这个类是本体(一个表示数学和数字的词,你不能从感官上感知它,但它是一个思想,就像1)。类使我们能够编写要使用的对象的定义,而不是将每个项作为变量写入。 有能力写无限多的东西就有很大的责任感!比如“你好,世界!”这个小小的第一句话如何充分说明了我们作为程序员的听众。 所以
现在,这些只是carclass的实现,而不是如何构建carclass。 您一定想知道其他一些术语、字段、构造函数和类级方法是什么,以及我们为什么要使用它们和索引。 田地 是属性的另一个修饰符。这些通常是在私有类级别上编写的,因此外部的任何东西都不会影响它,并且往往关注属性本身的功能性。它位于另一个区域中,您通常在该区域前面用下划线声明它。该字段将添加维护数据完整性所必需的约束,这意味着您将阻止人们写入上下文中没有意义的值。(就像在底片上的真实测量一样…这不是真的。) 构造函数 描述构造函数的最简单的方法是声明对象属性上的一些默认值,这些属性中放置了构造函数作用域。例如,一辆汽车有一种颜色,一种最高速度,一种型号和一家公司。但是,这些值应该是什么呢?一些值应该用在CarClass的数百万份拷贝中,还是仅仅用几个?构造函数允许这样做,通过建立基本质量来生成副本。这些值是分配给构造函数块中的属性的默认值。要设计构造函数块类型ctor[tab][tab]。在这里,只需引用上面写的那些属性,并在上面放置一个指定的值。 颜色=__红色__ 如果您转到main()并在任何写入输出组件(如控制台窗口或文本框)中使用car.color属性,您应该看到单词__red_。因此,细节是含蓄和隐藏的。不是提供每一个单词从一本书,你只需参考书,然后计算机得到剩余的信息。这使得代码脚本紧凑且易于使用。 类级方法应该解释如何反复执行一些过程。通常是一个字符串或一些文字,您可以为一个类格式化一些已写入的信息,并用正在写入的占位符格式化它,以显示用类属性表示的信息。当您创建一个对象实例,然后需要使用该对象以.toString()形式显示详细信息时,这是有意义的。在某种意义上,类对象实例还可以包含书籍或盒子之类的信息。当我们在类级别使用ToString重写方法编写.ToString()时,它将打印您的自定义ToString方法以及如何解释代码。您还可以编写一个property.toString()并读取它。下面这个字符串应该是正确的… console.writeline(car.color); 一旦你得到了许多对象,你可以一次一个地把它们放在一个列表中,允许你添加或删除它们。等一下… |
![]() |
7
0
这里有一个关于类和对象的好页面: |
![]() |
8
0
这是我很乐意推荐的资源 http://www.cplusplus.com/doc/tutorial/ 不知道为什么,但是从C++开始应用面向对象编程可能是 自然的 在使用任何其他语言之前,上面的链接至少在我刚开始的时候帮助了我很多。 |
![]() |
9
0
类是程序员在代码上标记其领域的一种方式。
不过,我想它们对代码的组织和分类很有帮助。 它使在IDE(如带有对象浏览器的Visual Studio)中导航代码更加容易。 以下是31种语言的类的一些用法演示 rosettacode |
![]() |
10
0
首先回到定义: 类定义:
对象定义:
实例化:
要使用类,必须通过构造函数实例化该类。在PHP中,一个直接的示例可以是:
|
![]() |
Eris · 纯虚拟成员有什么优势吗(除了他们可能防止的人为错误)? 2 年前 |
![]() |
AJA SMBAT · 我在获取列表而不是绑定方法时遇到问题 2 年前 |
![]() |
KiraHoneybee · 具有构造函数参数的模板化类 2 年前 |
![]() |
amirreza870 · Python OOP-更改类文本 3 年前 |
![]() |
Rocket Procd · 获取活动类实例的数量 3 年前 |
![]() |
cred · 为什么我请求的变量在从另一个类调用时显示为0.0? 3 年前 |
![]() |
Oliver Guy · 一个类的所有实例共享相同的值 3 年前 |