我能正确理解课程是什么吗?

时间:2010-03-21 00:44:20

标签: oop class object

我很难找到一个明确,简洁的外行定义。通常,他们提供一般性的想法,而不是特别拼写出来,我想知道我是否正确理解这一点。据我了解,类是控制对象的代码集。例如,在具有“是”按钮和“否”按钮的应用程序以及用于输出的文本框中,告诉计算机当用户使用“是”按钮时要执行的操作的代码是一个类,用于命中No的代码是另一个类,对象是两个按钮以及它们共同影响输出框的内容。我是对的,还是我在这里混淆了条款?

由于

9 个答案:

答案 0 :(得分:16)

类是的东西,对象是实际的东西。所以,在现实世界中,“人”是一个类,你和我是该类的对象(或实例)。 “汽车”是一个类,我的1996年打浆机沃尔沃旅行车是一个对象。

由于它们所属的类,对象在形式和功能上都有一定的相似性。当我说我的旅行车是一辆“汽车”时,你会非常清楚它的外观,它的用途以及它能做些什么。但是一个类的对象也可以彼此不同。只是因为某辆车没有告诉你完全它是什么形状或它有多少座位或它是什么颜色。

在你给出的例子中,yes和no按钮可能都是类“按钮”(或类似名称)的对象,并且它们的行为差异是由于程序员在没有他或者她为创造一个新课而烦恼。但是,程序员可能决定使每种类型的按钮成为原始类“按钮”的子类。

什么是子类?好吧,如果你把“汽车”看作一个类,很明显在“汽车”和“拉里的1996年打浆机沃尔沃旅行车”之间有几种中间“种类”的东西。这些可能是“旅行车”和“沃尔沃旅行车”。所以我的车将成为“沃尔沃旅行车”的一个实例,它本身就是“旅行车”的子类,它将成为“汽车”的子类。从“汽车”部分,我们对我的目标非常了解,从我们学到更多的“旅行车”部分,以及更多的“沃尔沃旅行车”。

类和子类的排列方式是程序员做出的决定。在上面的例子中,另一个程序员可能已经制作了“汽车”,“沃尔沃”,“福特前”和“货车”等课程。这取决于你试图解决的问题。

答案 1 :(得分:2)

在面向对象的编程中,类是对象的类型。对象是一组数据以及可以在该数据的上下文中操作的功能;对象在第一次创建时的定义和确定由其类确定。

与数据类型类似,对象的类指定该类的所有实例共有的内容。然后,作为对象本身的实例将覆盖该公共基线(否则没有多少点具有不同的实例)。在许多OO系统中,实例可能有也可能没有不属于类定义的新成员。

特定的面向对象语言的上下文中,这意味着语言与语言的不同。但是如果你把类视为类型,并以此为基础,那么你就不会出错。

答案 2 :(得分:2)

这将是一个非常简化的解释。类是一组函数和变量,用于创建对象。我认为使用真实的例子而不是狗/树皮/谈话等是很好的。

  • 课程电子邮件
    • 主题(字符串)
    • 消息(字符串)
    • ToAddress(字符串)
    • FromAddress(string)
    • 发送(功能)

当你调用'new Email()'时,它会创建一个包含这些变量和函数的新对象。然后你可以填充变量并发送它。

答案 3 :(得分:1)

一个类基本上是一种组织代码的方法。

它允许您将所有与一个抽象相关的代码(想想“概念”或“想法”)放在一个地方。

作为示例 - 在您的应用示例中,带有两个按钮的窗口,一个文本框和一些用于处理用户输入信息时发生的事情的代码可以组织成一个类:类似“ PromptWindow”。这个类将由内部的多个类组成(两个按钮,一个文本框等)。这可能会被一些单独的类使用,这将创建一个PromptWindow类的实例,调用一个方法要显示窗口的类,然后使用结果。

答案 4 :(得分:1)

在此基础上,有程序代码:

var a = 4
var b = 5;
print a + b;
… and so on, statements following statements…

为了使这些代码可以重复使用,你可以用它们创建一个函数:

function a_plus_b() {
    var a = 4
    var b = 5;
    print a + b;
}

现在您可以根据需要随时使用该代码,但只需编写一次。

通常,应用程序依赖于某些代码和变量必须协同工作的方式。此数据需要由该函数处理,但不能由其他函数处理。

function foo(data) {
    …do something…
    return data;
}

function bar(data) {
    …do something else…
    return data;
}

a = "some data";
b = 123456;

a = foo(a);
b = bar(b);
c = bar(a); // ERROR, WRONG DATA FOR FUNCTION

为了帮助将这些相关部分组合在一起,有一些课程。

class A {
    var data = 'some data';
    function foo() {
        …do something…
        return data;
    }
}

函数foo现在有一个变量data,它与同一类中的“捆绑”。它可以对该变量进行操作,而不必担心它可能是错误的数据类型。此外,data无法意外地在函数bar中结束,这是另一个类的一部分。

唯一的问题是,这里只有一个变量data。该函数是可重用的,但它只能对一组数据进行操作。要解决此问题,您可以从类中创建对象(也称为实例):

instance1 = new A();
instance2 = new A();

instance1instance2的行为与class A完全相同,他们都知道如何执行函数foo(现在称为实例方法)它们都包含变量data(现在称为实例变量属性),但该变量data可以为两个实例保存不同的数据

这是类和对象的基础知识。如何实现您的特定“确定”,“取消”对话框是一个不同的故事。两个按钮都可以链接到不同类的不同方法,或者只链接到同一个类的不同方法,甚至链接到同一个类的相同方法。类只是逻辑分组代码和数据的一种方式,如何使用它取决于你。

答案 5 :(得分:0)

在语言不可知的情况下,我会将一个类描述为包含相关信息的对象。

一个人类会有像Talk(),Walk(),Eat()等方法;以及高度,颜色,语言等属性

一个类就像你可以实例化的事物的蓝图,以及彼此相关的程序

如果您有一个Database类,那么您可能有许多与数据库相关的方法,这些方法使用数据库执行各种voodoo。

答案 6 :(得分:0)

类是一组代码,用于在应用程序中定义实体。可能存在许多这样的实体,但是每个实体的行为是相同的,如类所定义的。该类通常将定义字段,其内容对于该类的实例(或对象)是本地的。正是这些字段为对象提供了状态,并使它们可以相互区分。

要使用您的示例,可能会有一个Button类来定义应用程序中的按钮。然后将该类实例化两次以提供两个对象:一个用于“否”按钮而另一个用于“是”按钮。 Button类可以有一个Text字段/属性来定义它包含的文本 - 可以在相应的Button实例上将其设置为“否”和“是”,以便为它们提供不同的外表。

对于按钮的点击行为,这通常是通过observer pattern来实现的,其中主题类(在这种情况下为Button)维护一个单独的“观察者”对象的列表,它会在某些事件发生时(即单击按钮时)通知。

答案 7 :(得分:0)

来自维基百科的Class定义:

  

在面向对象的编程中,a   class是一个用作的结构   要创建的蓝图(或模板)   该类的对象。这个蓝图   描述了那种状态和行为   所有类的对象都共享。一个   给定类的对象称为   班级的实例。那个班   包含(并用于创建)   实例可以被视为类型   该对象,例如,一个东西   “水果”课程的实例将是   “水果”类型。

     

一个类通常代表名词,   例如一个人,一个地方或(可能   事情 - 这是一个模型   在计算机内的概念   程序。从根本上说,它   封装了状态和行为   它所代表的概念。它   通过数据封装状态   占位符称为属性(或   成员变量或实例   变量);它封装了行为   通过可重复使用的代码段   叫方法。

您对班级的理解并非完全不正确,但为了清楚起见,请考虑以下内容......

Yes和No按钮以及TextBox在类中指定通常,例如使用C#(Microsoft .NET Framework)编写的代码。我们将这个类命名为MyClass。

按钮引起的操作由所谓的处理程序(方法)处理。您可以编写代码,以便在单击“是”按钮时,会在TextBox中写入内容。

要实例化MyClass,您需要执行以下操作:

MyClass myClass = new MyClass();

myClass.ButtonYes += new EventHandler(YourMethodForYes);
myClass.ButtonNo += new EventHandler(YourMethodForNo);

myClass.TextBox.Text = "Yes button was clicked";

希望你明白这一点。

我上面写的通常因为您描述的这个中心可以通过多种方式实现。 OOP为您提供了完成相同任务的大量方法。

除了Class I的定义,我认为阅读Object Oriented Programming (OOP)可以帮助你更多地理解它。看看Fundamental Concepts

答案 8 :(得分:0)

您应该用您选择的语言查看一些示例代码。只是阅读课程的概念不会回答很多问题。

例如,我可以告诉你一个类是一个对象的“蓝图”。使用此类,您可以实例化多个此类对象,每个对象(可能)具有唯一属性。

但是你不明白一件事,现在,你呢?您使用按钮的示例非常有限。类与用户界面或操作或其他任何内容无关。它们定义了一种编程方式,就像函数/方法/你想要调用它们一样。

所以,举一个具体的例子,这是一个定义球的类,用Python编写:

class Ball:
    color = ''
    def __init__(self, color):
        self.color = color
    def bounce(self):
        print "%s ball bounces" % self.color

blueBall = Ball("blue")
redBall = Ball("red")

blueBall.bounce()
redBall.bounce()

运行它会产生预期的输出:

blue ball bounces
red ball bounces

然而,课程比我在这里描述的要多得多。一旦你理解了一个类是什么,你就会继续学习构造函数,析构函数,继承和许多其他好东西。断腿:))