当前位置:  开发笔记 > 编程语言 > 正文

为新程序员定义OOP

如何解决《为新程序员定义OOP》经验,为你挑选了6个好方法。

在向没有编程背景的人教授第一语言的时候,我很难定义OOP,尽管我更喜欢OOP,我怎样才能为那些编程经验很少(或为零)的人定义OOP?



1> VirtuosiMedi..:

您可能会尝试类似以下方法的内容,我稍后在一个论坛上稍微修改了一下我刚才做的一个帖子:

OOP最基本的词汇集是类,方法和参数.

类是一组共同完成任务的函数.类的实例被视为对象.

方法只是指一个包含在类中的函数.

参数是一个传递给函数的变量,该函数指示它如何操作或给它处理信息.

如果你进行一些挖掘,你会发现有关设计模式的大量信息.其中一些可能对我们来说很有用,虽然我一开始会小心进入它们,因为它们可能会让人不知所措.当你试图让自己陷入OOP心态时,你可能会记住两个有用的(有些过度使用的)首字母缩略词:DRY和KISS.

DRY代表不要重复自己,这意味着就是这样.如果您编写一些代码,则不必再次重复该特定代码.实际上,它意味着更抽象地思考,并在一开始就做得更好.我稍后会举一个例子.

KISS代表Keep It Simple,Stupid,意味着您应该尝试编写以最简单的方式实现其目标的代码.更简单意味着错误的可能性更小,维护更容易.在OOP的上下文中,这通常意味着确保每个方法或函数只有一个任务.如果您发现方法不止一件事,那么通常意味着它可以重构为几个较小的方法,每个方法都专用于特定的任务.

现在举一个简单的例子(有人可能会想出一个更好的例子,但现在跟我一起去):

假设你需要编写两种不同的形式,一种是处理汽车信息,另一种是卡车.

对于汽车,我们将要记录以下信息:

颜色

引擎尺寸

传输类型

门数

对于卡车,我们需要:

颜色

引擎尺寸

传输类型

驾驶室尺寸

牵引能力

在程序编程中,您将首先编写代码来处理汽车表单,然后编写卡车表单的代码.

使用面向对象的编程,您可以编写一个名为vehicle的基类,它将记录卡车和汽车所需的共同特征.在这种情况下,车辆类将记录:

颜色

引擎尺寸

传输类型

我们将这些特征中的每一个都变成一个单独的方法.例如,颜色方法可以将车辆的颜色作为参数并对其执行某些操作,例如将其存储在数据库中.

接下来,我们将创建另外两个类:卡车和汽车,两者都将继承车辆类的所有方法,并使用它们独有的方法扩展它.

汽车类将有一个名为numberOfDoors的方法,卡车类将使用方法cabSize和towingCapacity.

好的,我们假设我们有程序和OO编程的工作示例.现在,让我们来看看几个场景.

场景1:假设我们突然需要添加一个总线表单,它记录以下信息:

颜色

引擎尺寸

传输类型

乘客人数

程序:我们需要重新创建整个表单,重复颜色,引擎大小和传输类型的代码.

OOP:我们只需使用总线类扩展车辆类,然后添加方法numberOfPassengers.

场景2:由于某些奇怪的原因,我们的客户希望通过电子邮件向他发送颜色,而不是像我们之前那样在数据库中存储颜色.

程序:我们改变了三种不同的形式:汽车,卡车和公共汽车,将颜色通过电子邮件发送给客户,而不是将其存储在数据库中.

OOP:我们改变车辆类别中的颜色方法,并且因为汽车,卡车和公共汽车类都扩展(或继承,换句话说)车辆类,它们会自动更新.

场景3:我们希望从通用汽车转向特定品牌,例如:日产和马自达.

程序:我们为每个品牌创建一个新表格,重复所有通用汽车信息的代码,并添加特定于每个品牌的代码.

OOP:我们使用日产类和马自达类扩展汽车类,并为该汽车制造商添加每组独特信息的方法.

场景4:我们在表单的传输类型区域中发现了一个错误,需要修复它.

程序:我们打开并更新每个表格.

OOP:我们在车辆类中修复了transmissionType方法,并且更改在从其继承的每个类中都会持续存在.

从上面的场景中可以看出,采用OOP样式比程序编程具有明显的优势,特别是随着您的规模增加.如果我们还需要为船只,摩托车,飞机,卡丁车,全地形车,雪地摩托车等添加表格,请考虑我们在重复代码,灵活性和维护方面从OOP中获得的节省.

通过使用单元测试来测试结果,对象和方法也比程序编程容易测试.

这是否意味着你永远不应该使用程序编程?不必要.如果您正在进行模型或概念验证应用程序,您可能没有时间使所有内容都面向对象,因此我认为对原型使用过程编程可能会更好,但它最好以OO方式制作生产产品.


DRY和KISS不以任何方式耦合到面向对象的编程.它们是通用编程概念.

2> Chetan Sastr..:

我使用'弹跳球'示例.想象一下,你有一个盒子里面有一个弹跳球.

您可以通过两种方式对其进行编程:

一种方法是运行循环,跟踪球的当前位置,计算下一个位置,检查碰撞,从当前位置擦除,将其绘制在新位置.重复.

另一种方法是让球跟踪自己的位置和方向,并教它计算下一个位置以及如何移动到那里以及如何处理碰撞.然后,运行循环并告诉球继续更新.

现在想象你有100个球.然后是重球和轻球以及爆炸球.这些是具有附加特征的基本球.你还会使用方法1吗?



3> BobbyShaftoe..:

那么,你应该使用例子.大多数人理解的一个例子是参考视频游戏.所以,你有怪物和怪物有一些属性,如颜色,大小,形状,武器数量等等.然后一些怪物有不同的"能力",如呼吸火,射击枪,等等.这些都是愚蠢的例子,但很容易理解.我认为向新手解释比"广场","圈子"等所有这些业务更容易.



4> S.Lott..:

不要浪费时间"定义"OOP.

只需对所有示例使用OOP语言.

对象非常明显.现实世界充满了物体.

不要"定义"对象.只是展示编程实例,'对象'将是显而易见的.

没有编程背景的人没有基于程序编程的愚蠢期望.

学习COBOL或Basic的人会遇到问题.


部分内容取决于语言.有些语言会使OOP变得困难.

例如,在C++中,"类"只是定义的.它在运行时不作为离散对象存在.

在Java和C++中,有些东西是对象,但是一些"原始"类型不是对象.

有些语言使OOP更容易.

Python和Smalltalk一切都是对象.没有原始类型可以使水变得混乱.当你用像Python这样的语言学习OO时,对象性是清晰而明显的,因为它遍及一切.就像现实世界一样,物体无处不在.



5> Matthew Olen..:

我会将其解释为一种模拟现实世界信息的方式.有一个常见的类比,使用汽车和车辆来显示类型层次结构.如果你能正确解释的话,我觉得这对大多数人来说很容易理解.

也许你应该首先解释原始类型,然后讨论像结构一样的复合类型,然后展示如何使用继承将这些类型作为类关联起来.

编辑:在考虑之后,动物的例子要好得多.请参阅解释OOP而不提及类和此SO线程有关同一主题.



6> joel.neely..:

一支运动队.在任何时候场地/球场的球员可以根据他们所扮演的位置来指定.但是整个团队可能有多个可以扮演特定职位的成员.

每个职位都像OO中的一个班级; 它规定了一组责任.团队成员是这些类的实例.

戏剧中的戏剧是模式.每一个都指定如何通过(实例)位置(类)的交互来实现特定结果.

推荐阅读
郑小蒜9299_941611_G
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有