我如何使用课程?

时间:2009-06-20 16:07:22

标签: class

我对编程很新,而且有一件事我很困惑。什么是课程,我该如何使用?我理解了一点,但我似乎找不到完整的答案。

顺便说一下,如果这是特定于语言的,那么我就是用PHP编程。

编辑:还有别的我忘了说。具体来说,我想问一下如何在类中使用定义函数。我已经看到了PHP代码的示例,其中函数在类中定义,但我不能理解为什么。

10 个答案:

答案 0 :(得分:21)

尽可能简洁:类描述了可以对自身执行操作的数据集合。

例如,您可能有一个代表图像的类。此类的对象将包含描述图像所需的所有数据,然后还包含旋转,调整大小,裁剪等方法。它还可以使用方法来向对象询问其自身的属性,比如getColorPalette或getWidth。这与能够直接访问原始(非对象)数据集合中的颜色调色板或宽度相反 - 通过数据访问通过类方法,对象可以强制执行保持一致性的约束(例如,您不应该能够更改宽度变量而不实际将图像数据更改为该宽度。)

这就是面向对象编程与过程编程的不同之处。在过程编程中,您拥有数据并且具有函数。这些函数对数据起作用,但没有数据的“所有权”,数据和使用它的函数之间没有基本的联系。

在面向对象的编程中,您拥有与操作结合的数据对象。每种类型的数据都有一组可以对其自身执行的已定义的操作,以及一组定义的属性,它允许函数和其他对象以定义的,受约束的方式进行读写。

重点是将程序的各个部分相互分离。使用Image类,可以确保操作图像数据的所有代码都在Image类的方法中。您可以确定没有其他代码会以意想不到的方式与您的图像内部混淆。另一方面,图像类之外的代码可以知道有一种定义的方式来处理图像(调整大小,裁剪,旋转方法等),而不必担心图像数据的确切存储方式或图像如何功能已实现。

编辑:有时难以理解的另一件事是术语“阶级”和“对象”之间的关系。 “类”是如何创建特定类型的“对象”的描述。 Image类将描述存储图像数据所需的变量,并为所有Image方法提供实现代码。 Image对象,称为图像类的“实例”,是该描述的特定用途,用于存储一些实际数据。例如,如果要表示五个图像,则会有五个不同的图像“对象”,所有图像都是相同的“类”。

答案 1 :(得分:3)

Classes是面向对象编程(OOP)范例中使用的术语。它们为您的代码提供抽象,模块化等等。 OOP不是特定于语言的,支持它的语言的其他示例是C ++和Java。

我建议你了解一下基础知识。例如this video和其他相关讲座。

答案 2 :(得分:3)

由于您使用的是PHP,我将在我的代码示例中使用它,但大多数应用都适用。 OOP将所有内容视为对象,它是方法(函数)和变量的集合。在大多数语言中,对象在代码中表示为类。 请使用以下代码:

class person
{
   $gender = null;
   $weight = null;
   $height = null;
   $age = null;
   $firstName = null;
   $lastName = null;
   function __CONSTRUCT($firstName, $lastName)
   {
      //__CONSTRUCT is a special method that is called when the class is initialized
      $this->firstName = $firstName;
      $this->lastName = $lastName;
   }
}

这是一个有效的(如果不是完美的)类当你使用这个代码时,你首先必须初始化一个类的实例,就像在变量中复制它一样:

$steve = new person('Steve', 'Jobs');

然后当你想要改变一些属性时(不是技术上正确的单词,因为PHP中没有属性,但在这种情况下我只是忍受我的意思是变量)。我们可以这样访问它们:

$steve->age = 54;

答案 3 :(得分:2)

注意:这假设你对编程有点熟悉,我猜你是。

一个类就像一个蓝图。让我们假设你正在制作一个有房子的游戏。你有一个“House”课程。这个课程描述了这个房子,并说明它可以做什么以及可以做些什么。您可以拥有属性,例如高度,宽度,房间数,城市所在的位置等。您还可以使用“方法”(类中的函数的名称)。例如,您可以使用“Clean()”方法,该方法可以告诉房屋内的所有人清理它。

现在假设有人在玩游戏并点击“制作新房子”按钮。然后,您将从该类创建一个新对象。在PHP中,你会写“$house = new House;”,现在$ house具有类的所有属性和方法。

您可以根据需要制作尽可能多的房屋,并且它们都具有相同的属性,然后您可以更改这些属性。例如,如果住在房子里的人决定增加一个房间,你可以写“$house->numberOfRooms++;”。如果房子的默认房间数是4,那么这个房子将有5个房间,而其他所有房间都有4.如您所见,属性独立于一个实例到另一个。< / p>

这是基础;有很多关于类的东西,比如继承,访问修饰符等等。

现在,你可能会问自己为什么这很有用。嗯,面向对象编程(OOP)的观点是将程序中的所有内容都视为独立对象,尝试设计它们,以便无论上下文如何都可以使用它们。例如,您的房子可能是一个独立的变量,可能在一系列房屋内。如果您的“人”类具有“居住”属性,那么您的房子可能就是该属性。

这是类和对象背后的理论。我建议你四处寻找代码示例。如果你愿意,你可以查看我为我编程的Pong游戏制作的课程。它是用Python编写的,可能会使用一些你不理解的东西,但你会得到基本的想法。这些课程是here

答案 4 :(得分:1)

一个类本质上是一个抽象。

您有内置的数据类型,例如“int”或“string”或“float”,每种数据类型都有某些行为和可能的操作。

例如,您可以采用浮点数的平方根,但不能采用字符串。您可以连接两个字符串,也可以添加两个整数。这些数据类型中的每一种都代表一般概念(整数,文本或具有固定有效位数的数字,可能是也可能不是小数)

类只是一个用户定义的数据类型,可以表示其他一些概念,包括合法的操作。

例如,我们可以定义一个“password”类来实现密码所需的行为。也就是说,我们应该能够获取文本字符串并从中创建密码。 (如果我输入'secret02',那是合法密码)。它可能应该对此输入字符串执行一些验证,确保它至少有N个字符长,并且可能它不是字典单词。并且它不应该允许我们读取密码。 (密码通常在屏幕上显示为******)。相反,它应该只允许我们将密码与其他密码进行比较,看它是否相同。

如果我输入的密码与我最初注册的密码相同,我应该被允许登录。但实际上的密码是,不是应用程序我的'我要登录才能知道。所以我们的密码类应该定义一个比较函数,而不是一个“显示”函数。

一个类基本上包含一些数据,并定义哪些操作对该数据是合法的。它创造了一种抽象。

在密码示例中,数据显然只是内部的文本字符串,但该类只允许对此数据进行一些操作。它阻止我们将密码用作字符串,而只允许对密码有意义的特定操作。

在大多数语言中,班级成员可以是私人或公共成员。任何私有的东西只能由该类的其他成员访问。这就是我们如何实现密码类中存储的字符串。它是私有的,因此它仍然可以在类中定义我们定义的操作,但是类外的代码不能只访问密码中的字符串。他们只能访问班级的公共成员。

答案 5 :(得分:1)

类是您可以想到的一种结构形式,例如int,string等,可以使用面向对象的编程语言来创建实例。就像模板或蓝图一样,该类采用了结构。您可以使用与类的每个关联编写此结构。类中的某些东西将被用作Main()方法中的对象实例,其中发生所有sysync编程步骤。

这就是为什么你看到人们编写像Car car = new Car();这样的代码来从类中抽出一个新对象的原因。我个人不喜欢这种类型的代码,它非常糟糕和循环,并没有解释哪个部分是类语法(排列)。太糟糕了许多程序员使用这种语法,初学者很难理解他们的感知。

将此视为,

CarClass theCar = new CarClass(); //

该类基本上采用无限多种形式。您可以编写描述CarClass的属性,并且生成的每辆汽车都将具有这些属性。从他们获得&#34;获得&#34;什么(读取)和&#34;设置&#34;什么(写入)数据,你只需在Main()中生成的对象实例上使用点运算符,并将描述属性说明为实际名词。这个类是本体(一个像数学和数字这样的词,你不能把它理解为感官,但它的思想就像#1)。不是将每个项目都写为变量,而是使我们能够编写要使用的对象的定义。 能够写出无限多的东西,有很大的责任!喜欢&#34; Hello World!&#34;这个小小的第一个陈述如何说明作为程序员的观众。

所以

CarClass theCar = new CarClass(); //In a way this says this word "car" will be a car
theCar.Color = red; //Given the instance of a car we can add that color detail.

现在这些只是CarClass的实现,而不是如何构建一个。 您一定想知道其他一些术语,字段,构造函数和类级别方法以及我们使用它们和索引的原因。

字段是属性上的另一个修饰符。这些往往是在私有类级别上编写的,因此外部没有任何东西影响它,并且倾向于专注于属性本身的功能。它位于另一个区域,您通常在其前面用下划线声明它。该字段将添加维护数据完整性所必需的约束,这意味着您将阻止人们编写在上下文中无意义的值。 (就像真实的负面测量......这不是真的。) 构造函数 描述构造函数的最简单方法是在放置构造函数范围的对象属性上声明某些默认值。在示例中,汽车具有颜色,最大速度,模型和公司。但是,这些价值应该是什么,应该从CarClass或仅仅少数几个副本中使用?构造函数使人们能够通过建立基本质量来生成副本。这些值是分配给构造函数块中的属性的默认值。设计构造函数块类型ctor [tab] [tab]。在其中简单地引用您在上面写的那些属性并在其上放置指定的值。 颜色=“红色”; 如果你去main()并现在在任何写输出组件(如控制台窗口或文本框)中使用car.Color属性,你应该看到单词“Red”。因此隐含和隐藏细节。您只需参考该书,而不是提供书中的每个字,然后计算机就会获得剩余的信息。这使代码脚本紧凑且易于使用。

类级方法应该解释如何反复执行某些过程。通常是一个字符串或一些写作,您可以格式化类的一些书面信息,并使用占位符对其进行格式化,这些占位符位于要显示的用您的类属性表示的写入中。当你创建一个对象实例然后需要使用该对象以.ToString()形式显示细节时,这是有意义的。在某种意义上,类对象实例还可以包含书籍或盒子之类的信息。当我们在类级别使用ToString覆盖方法编写.ToString()时,它将打印您的自定义ToString方法以及它应如何解释代码。您还可以编写属性.ToString()并读取它。这下面是一个字符串应该读得很好,因为它... Console.Writeline(theCar.Color); 一旦获得了许多对象,就可以将它们放在允许添加或删除它们的列表中。等等......

答案 6 :(得分:0)

这是一个关于类和对象的好页面:

http://ficl.sourceforge.net/oo_in_c.html

答案 7 :(得分:0)

这是我推荐的资源 http://www.cplusplus.com/doc/tutorial/

不确定为什么,但从C ++开始应用OOP可能是自然之前的任何其他语言,上面的链接在我开始时至少帮助了我很多。

答案 8 :(得分:0)

类是程序员在代码上标记其领域的一种方式。
据说它们是编写大型项目所必需的。
Linus和他的团队肯定错过了开发linux内核的备忘录。

但是,我猜他们可以很好地组织和分类代码。 通过对象浏览器,可以更轻松地在visual studio中导航代码。

以下是rosettacode

上31种语言的类的一些用法演示

答案 9 :(得分:0)

首先回到定义:

班级定义:

  • 某事物的抽象定义,用户类型,蓝图;
  • 具有状态/字段/属性(对象知道什么)和方法/行为/成员函数(对象的作用);
  • 定义对象行为和默认值;

对象定义:

  • 类的实例,数据存储库;
  • 具有唯一标识:对象的属性,可将其与其他对象区分开来;
  • 有自己的状态:描述存储在对象中的数据;
  • 展示一些明确定义的行为:遵循班级的描述;

实例化:

  • 是实例化类来创建对象的方式;
  • 使对象处于有效状态;
  • 由构造函数执行;

要使用类,必须通过构造函数实例化类。在PHP中,一个直截了当的例子可能是:

<?php
class SampleClass {
   function __construct() {
       print "In SampleClass constructor\n";
   }
}

// In SampleClass constructor
$obj = new SampleClass ();
?>