对没有使用过它们的人定义“类”和“对象”这两个词的最佳方法是什么?

我的邻居正在参加“Java简介”,并请我帮助解释一些第一天的概念。 我意识到,因为我每天都这样做,所以我没有初学者的想法,而且从头开始很难将这些东西联系起来。

对我来说,实际上并非无足轻重的解释是“什么是一个阶级?”

我到目前为止最好的:

  • 变量包含某种数据; 一个变量可能是名字,另一个变量可能是你的体重(磅)。

  • 方法是一个函数,它做的东西,并且可以用这些变量做事。 一种方法可能会在屏幕上显示您的名字,或者告诉您,为了获得良好的BMI比率,您应该减掉多少体重。

  • 对象包含变量和方法; 一个对象可能代表你,第二个对象可能代表我。

  • 是描述每个对象中的方法和变量的蓝图或模板。 对象是实例化的(一个实例)类; 一个对象就是某种东西,而这个类只是制作这个东西的计划。

继续这个例子,我们有一个Person对象,它被实例化以保存Alice的数据,另一个Person对象被实例化以保存Bob的数据,另一个用于Carol,依此类推。

我如何调整这个例子以使其更有意义,和/或什么是更好的方法? “实例化”这个词在这一点上感觉太重了。

(我认为这是一个有用的问题,但显然是主观的;标记为社区维基。)

一个类和一些类实例:

由维基百科提供

( 维基百科主办的公共领域图片 )

类:对象::蓝图:构建

“汽车”是一类。 我的车坐在我的车道上,是一个实例(物体)。

对象是一件事 。 一类是一东西。

“人”是一个阶级; 你是一个对象,是Person类的一个实例。 此外,“你”这个词可以被认为是一个变量,因为它指的是一个人,但并不总是同一个人。

我在java课程中使用的一个例子是Human

读这篇文章的每个人都是Human (我最不希望如此!),我们都有相似之处,但最后我们都是Human (毕竟)。

每个Human (称为实例对象 )都具有特定的特征,例如眼睛颜色或语音,这些是字段 (您称之为变量 ,但正确的名称是字段 )。 但是这些值与Human 实例不同。

还有与人类共享的共同知识,像“毕达哥拉斯定理”这样的原则。 这种知识很常见,它可以被解释为静态领域 (我知道这是夸大其词),这意味着这种知识不仅包含在一个人类中,而且包含在人类中。

每个Human都可以做一些事情,比如走路,说话等。这被称为方法 ,步行对每个人来说都是一样的,但是当我走路时,不是每个人都走路。 行走的行为只会影响执行此操作的Human 实例 ,但它仍然由Human 定义


如果您想深入了解OOP,请向非程序员教授OOP

课程描述就像是房子的蓝图。 从该蓝图建造的所有房屋都是该类别的对象。 给定的房子是一个实例。 租户可以是房子里变化的变量。 方法的一个示例是邮局通过其邮箱向房屋发送和接收消息(邮件)的过程。

面向对象的编程是关于使用构建块创建程序,现实世界中存在的“事物”,这些现实世界的事物被称为对象,因此面向对象

例如,如果您正在创建通讯簿程序,则可以定义以下对象:

 person, address, phone 

在许多人中,有很多人。 那些将是现实生活中的对象,您可以根据这些抽象来描述您的程序。

考虑到这一点,您可以开始描述一些概念。

用于定义对象将具有的特征。 类仅用作模板或蓝图。 例如,对于地址簿中的所有人,您可能会说他们都会:

 Person: - name - last name - phone number - address 

等等。

地址可能包含:

  Address: - street - number - city - zip code - country 

等等。 正如您所注意到的,我可以根据其他类来定义类,例如,在此上下文中,一个人有一个地址。

Object是给定类的特定实例。 在地址簿中添加条目时,可以创建对象并填写属性。

  onePerson ofType Person is ( - name = "Oscar" - last name = "Reyes" - phone number = "56 58 11 11" - address = anAddress ofType Address ( - street = "Tecolotes" - number = 32 - city = "DF" - zip code = 23423 - country = "Mexico" ) ) 

因此,该对象是一个用数据实例化的类。 地址簿中的其他条目是具有不同数据的其他对象。

这显示了它们之间的差异。

OOP中还有其他相关概念值得列出,并与对象和类的概念相互关联:

抽象您无需列出人员的所有属性,即可使用它。 例如,在这种情况下,你不关心这个人是单身还是已婚,即使在现实生活中,这些人要么单身,要么已婚。

封装来自人的属性被隐藏到其他对象并通过方法访问,这可以防止数据损坏。

多态性不同类型可能对同一消息或方法的响应不同。

inheritance类可以具有inheritance超类特征的子类和属性以及行为。

class == cookie cutter,object == cookie。

class ::男人或女人

对象::我,你……

是用于创建对象的蓝图/模板。 对象是类的实例。

在此处输入图像描述

当且仅当他熟悉柏拉图的forms理论时,你可以比喻类似柏拉图的forms,物体就像柏拉图的真实世界物体。

有关完整说明,请参阅此post 。

类:女孩

对象:那个女孩,这个女孩,我的女孩……嗯也许不是。

是的,所有女孩都应该拥有女孩的属性(在这种情况下是一类)。

我总是将它们定义为蓝图和产品。

蓝图描述了每个细节的完整产品,产品是从机器中产生的结果。

如果你的邻居是古典哲学,那么课程就是柏拉图的forms,对象就是我们每天看到的基于forms的东西。

类可以定义为蓝色打印或模板,它定义实体的属性,动作,状态,对象将是实体的实现。

java类是对象的结构或蓝图,对象是类的实例(内存创建)。

示例:Car是一个对象(真实世界实体)。 首先,制作汽车的结构或设计它的类和汽车的设计,转换现实世界汽车它是一个对象。 Car(对象)现在正在代表汽车(类)的设计。

pandasDNA是一类。 pandas跑来跑去,吃东西并进行pandas般的活动是一个目标。

如果他们正在学习编程OO让他们使用BlueJ 。 他们应该在完成第一个教程后得到差异。

您定义了类,当您实例化它们时,它们实际上出现在GUI的底部,此时您可以调用它们上的方法。

与你想要尝试的任何类比相比,它确实有助于更好地理解这一点。 即使你指出了类比,它也没有转化为尚未学习OO的人的代码(尽管我们所有人看起来都很自然,所有这些描述都很有意义。)

OOP只是在程序中表示抽象数据结构的另一种方式。 在面向对象的术语中,类型称为类,具有该类型的变量称为对象。 更多关于类型< - >类,变量< - >对象的对应关系。

你可能会发现Guy L. Steele有趣的话: http : //video.google.com/videoplay?docid=-8860158196198824415#

Object是类的实例Variable是类型的实例

给定,类可以是类似“类固醇类型”:它可以具有:来自任何类型的变量或来自另一个类方法的对象,它们可以以与不同类型具有其方法相同的方式对类变量进行操作(例如+(bool,bool) )可以访问类变量,它们都由你自己定义!

您可以使用这些类以最佳方式对问题建模。 但有时候有其他方法可以做到这一点;)(不仅仅是OOP)

class:自定义变量类型

object:一个变量,其类型是自定义的(如果你不计算内置的那个)

我们也可以理解类和对象的概念:因为类是一个模板,所以让我们有两个例子:例1:蛋糕的配方是一个模板,所以它的一个类和按照配方制作的蛋糕是对象。 示例2:砖制造商是一个类,砖是对象

您的问题详细信息对所有术语都有很好的定义。 这是我发现非常有用的类比 – 我用一种自上而下的方法列出了它:

class级 员工 。 正如您所说,这是一种“蓝图”或“模板”,其中包含有关组织中所有类型员工的一般详细信息 – 让我们考虑一下导演项目经理开发人员承包商或其成员。 家政人员。 他们都是员工:因此,他们都是class级或对象的所有实例

所有对象都有一些共同的属性 – 它们都被分配,例如, 员工ID 。 他们都拿薪水 。 他们都有名称 。 可以将这些成员变量称为所有对象,但它们的值根据它们所属的对象明显不同。

最后,需要为所有员工执行一些function – 比如onBoarding()calculateSalary()

 Class: Human being Object : Man, Woman Class : Fruit Object : Apple, Banana, Mango ... Class : Mobile Phone Object : Apple , Samsung , LG ... Class : Food Object : Pizza, Rice .... 

对象是一组相关的数据和function。 数组和function组成的内容在类中定义。 类是对象的设计或规范。

类教会对象如何表现。 类是对象的蓝图。 它告诉虚拟机如何创建该特定类型的对象。 从该类生成的每个对象都可以拥有该类的实例变量的值。 示例:您可以使用Button类生成许多不同的按钮,每个按钮可能具有自己的颜色,大小,形状和function。

我可以举一个例子:动物,人类,汽车等。这里动物,人类,汽车被认为是阶级,现在考虑狗:这里狗被视为对象,谁在动物类下。 如果我们考虑一只狗,那么它的状态是 – 名称,品种,颜色和行为 – 吠叫,吃,跑,睡觉。 现在我们可以说,A类是Animal类的蓝图,从中创建单个对象。 这里的barking(),running(),eating(),Sleeping()等是特定Dog对象的方法。 我认为理解Class和object之间的区别会更容易一些。

我强烈建议他/她购买Matt Weisfeld的一本名为“面向对象的思维过程”的书。 这是对OO的一个非常好的概念性介绍。 我把我的副本借给了一些刚刚进入OO的人,他们真的非常喜欢它。