对没有使用过它们的人定义“类”和“对象”这两个词的最佳方法是什么?
我的邻居正在参加“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的人,他们真的非常喜欢它。