在Java中破译面向对象编程概念

在Java中破译面向对象编程概念,java,Java,我一直在读面向对象的概念,我真的迷路了。 从概念上讲,我所理解的只是一个方法“做”了一些事情,一个类是一个“蓝图”。我已经阅读了所有的类比,但到目前为止,唯一对我有意义的是: 循环、if-then、变量赋值、基本数据类型和基本语法 对我来说,一个程序就是一个程序就是一个程序。你输入指令,计算机就会执行。我想我看不到大局 从空中看,OOP的最大部分是组织和代码重用。您希望组织完成特定任务的“对象”,并希望能够将其重新用于其他应用程序。这个想法只会使您更容易维护您正在做的事情、信息的位置以及它们如何

我一直在读面向对象的概念,我真的迷路了。 从概念上讲,我所理解的只是一个方法“做”了一些事情,一个类是一个“蓝图”。我已经阅读了所有的类比,但到目前为止,唯一对我有意义的是: 循环、if-then、变量赋值、基本数据类型和基本语法


对我来说,一个程序就是一个程序就是一个程序。你输入指令,计算机就会执行。我想我看不到大局

从空中看,OOP的最大部分是组织和代码重用。您希望组织完成特定任务的“对象”,并希望能够将其重新用于其他应用程序。这个想法只会使您更容易维护您正在做的事情、信息的位置以及它们如何协同工作。这是非常广泛的,所以让我知道什么是你真正不理解的

将代码捆绑到单个软件对象中提供了许多好处,包括:

Modularity: The source code for an object can be written and maintained independently of the source code for other objects. Once created, an object can be easily passed around inside the system.
Information-hiding: By interacting only with an object's methods, the details of its internal implementation remain hidden from the outside world.
Code re-use: If an object already exists (perhaps written by another software developer), you can use that object in your program. This allows specialists to implement/test/debug complex, task-specific objects, which you can then trust to run in your own code.
Pluggability and debugging ease: If a particular object turns out to be problematic, you can simply remove it from your application and plug in a different object as its replacement. This is analogous to fixing mechanical problems in the real world. If a bolt breaks, you replace it, not the entire machine.

除非您想理解OO语言中的编程,否则我认为您不需要理解“OO概念”。对于运行程序、提供输入和查看输出等的人来说,根本不需要理解它们。几年前,美国汽车主要由化油器转向燃油喷射;一般来说,汽车驾驶员不需要了解其中任何一个,也不需要了解他们的新车有一个而不是另一个。这是相似的。现在,如果你想了解如何用这种语言编程,那是不同的,但在这种情况下,你应该问我们一个更具体的问题

--

根据您的评论,您确实想了解编程,我将对此进行详细介绍

我所看到的区别是,像Java这样的OO语言通过编程构造来表示问题中的事物(或“项”或“对象”),从而促进了程序的组织。虽然你可以用更古老的语言来表示事物,但是你必须创建自己的构造(C++是如何开始的)。 因此,如果我要创建一个交通控制系统,我可以为“车辆”创建一个类,为不同类型的车辆创建子类,具有不同的特性和/或行为。类定义和继承是内置的,可以简化此操作

我可以定义一个Vehicle类,并将其扩展为PassengerCar、PanelTruck、SemiRig和其他在我的问题域中有意义的东西。所有车辆的特性和代码符合超类逻辑;特定于每个特定类型的特性和代码与其子类一起使用

我可以在C、FORTRAN或汇编语言中做类似的事情,通过创建数据结构并将代码与之关联,将它们组织成组来表示不同类型的车辆,但这些语言没有内置的结构,因此很容易实现


另一个相关的基本区别是该语言在一个单元中对数据和代码的定义。同样,我可以用其他语言来做,但是OO语言作为Langague的一部分具有关联性,这样我就不用自己创建命名约定或其他任何事情了。

需要经验!我理解你,但不用担心。。你的问题是什么?在你编程之前很难看到全局。我建议暂时忘记OOP,直到你“了解”命令式编程的基本概念。然后它就会变得更有意义了。@MouseEvent-3个月??我想最多3年。@MouseEvent——没错,用Java.code重用从头开始学习的负面因素之一。。。但是你不能用任何语言来表达吗?只是定义一个自定义函数,然后稍后调用它?我想我很难理解为什么一个简单的print命令不能像python中的print“hi”那样。而不是System.out.printf(“hi”)。它看起来比它需要的更复杂,除非我遗漏了使用超级详细语法的好处。据我所知,“System.out.print(“Hi”)”列出了方法.print或.printf的依赖项。这真是太愚蠢了。语言的一些基本需求似乎需要更多的东西。但是在更大的层次上(尤其是企业级),您将使用数千个类。因此,在这个级别上需要一些组织和易用性。检查:我确实想了解OO语言中的编程。特别是Java。我已经用Java编程,并且理解语法。但是当人们开始使用像“物体”这样的词时,我会感到困惑。我只是想,“如果我输入这个代码,我会得到这个输出”。我想我不确定OO编程的主要范式与运行一组指令有多大的不同,我觉得我总是被喜欢躲在术语后面而不是给我一个直接答案的人所左右。