Oop 除了方法之外的面向对象编程?

Oop 除了方法之外的面向对象编程?,oop,Oop,我对OOP的理解非常有限 我已经在.Net中编程一年左右了,但是我完全是自学成才的,所以我对OOP的一些精妙之处已经失去了兴趣 封装、继承、抽象等等。我知道它们的意思(表面上),但它们有什么用途 我只使用OOP将可重用代码放入方法中,但我知道我错过了很多功能 甚至上课——我只上过两三次课。相反,我通常只在main表单中包含我的所有方法。您可以尝试这样做:它可能会帮助您了解如何设计对象。OOP可用于对应用程序处理的真实世界中的事物进行建模。例如,一款视频游戏可能会为玩家、坏蛋、NPC、武器、弹药等

我对OOP的理解非常有限

我已经在.Net中编程一年左右了,但是我完全是自学成才的,所以我对OOP的一些精妙之处已经失去了兴趣

封装、继承、抽象等等。我知道它们的意思(表面上),但它们有什么用途

我只使用OOP将可重用代码放入方法中,但我知道我错过了很多功能


甚至上课——我只上过两三次课。相反,我通常只在main表单中包含我的所有方法。

您可以尝试这样做:它可能会帮助您了解如何设计对象。

OOP可用于对应用程序处理的真实世界中的事物进行建模。例如,一款视频游戏可能会为玩家、坏蛋、NPC、武器、弹药等开设课程。。。系统希望作为独立实体处理的任何内容

我刚刚发现的一些链接是OOD的介绍:


非常简短:不要在一堆不同的地方对数据进行操作,而是让对象做它自己的事情,而不管它是如何做的

多态性:不同的对象可以做不同的事情,但给它们相同的名称,因此您可以通过要求任何类型的对象执行命名操作来要求任何对象(特定超类型的对象)做它自己的事情。

您必须这样做


我也有过同样的经历,我也是一个自学成才的人。我遵循这些步骤,现在我开始了解OOP的实现。我以一种更模块化的方式使我的代码更好地结构化。

OOP太过复杂,无法在StackOverflow答案中解释,但主要要点如下:

过程编程是关于编写对数据执行操作的代码。面向对象编程是关于创建对自身执行操作的数据。

在过程编程中,有函数也有数据。数据是结构化的,但是被动的,您编写的函数可以对数据和资源执行操作

在面向对象编程中,数据和资源由具有属性和方法的对象表示。在这里,数据不再是被动的:方法是一种指示数据或资源对自身执行某些操作的方法

这种区别之所以重要,是因为在过程编程中,程序的任何部分都可以以任意方式检查或修改任何数据。您必须注意接触相同数据的不同函数之间的意外交互,如果您选择更改数据的存储或组织方式,则必须修改大量代码

但在面向对象编程中,当正确使用封装时,除了对象内部的代码外,没有其他代码需要知道(因此不会依赖于)数据对象如何存储其属性或如何改变自身。这大大有助于模块化您的代码,因为每个对象现在都有一个定义良好的接口,只要它继续支持该接口和其他对象,并且自由函数通过该接口使用它,就可以修改内部工作,而没有风险


此外,对象的概念以及继承和组合的使用允许您在代码中对数据进行结构化建模。如果需要具有表示员工的数据,可以创建一个
employee
类。如果需要使用打印机资源,可以创建一个
printer
类。如果需要在对话框上绘制按钮,可以创建一个
按钮
类。这样,您不仅可以实现更大的模块化,而且您的模块还反映了一个有用的模型,该模型反映了您的程序应该处理的任何现实世界的事物。

我使用Turbo Pascal学习了OOP,并在尝试对物理对象建模时发现它立即很有用。典型示例包括
对象,该对象具有用于位置和半径的字段,以及用于绘制、检查点是在内部还是在外部以及其他操作的方法。我猜,你开始把类看作对象,把方法看作动词和动作。程序编程就像编写脚本。它通常是线性的,并且一步一步地遵循需要做的事情。在OOP世界中,您可以构建一个可用的重复动作和任务(如乐高积木),并使用它们来做您想做的事情

继承用于公共代码,该代码应/可用于多个对象。你可以很容易地走另一条路,为你需要的东西创建太多的类。如果我在处理形状,我真的需要两个不同的矩形和正方形类,还是可以使用一个具有不同值(字段)的公共类

精通来自经验和实践。一旦你开始琢磨如何解决特定的问题(特别是在将来使代码再次可用时),慢慢地你就会有信心开始在代码中包含越来越多的OOP特性


祝你好运。

根据你的描述,你实际上没有做过任何OOP。当所有内容都在同一个对象(MainForm)中时,将可重用代码放入方法只是常规过程编程。@Tyler McHenry:“只是常规过程编程”以类装饰开始。这些其他问题可能会帮助您入门:相关线程:,@John。标准正在注释,您答对了;-)嘿,史蒂夫,我刚注意到那是你的书不过看起来不错。与面向对象编程相反的面向对象设计。我认为编程的设计方面缺乏很好的处理,可能是因为它是不确定的——没有可证明的正确设计。@Jon B:购买!?!?!该死的。[Face palm!]我已经错过了将其转化为垃圾邮件的收入来源。好吧,你可能仍然应该提到这一点