Java 为什么在OOP语言中,大多数代码总是到处声明方法,而不是包含“平面指令”?

Java 为什么在OOP语言中,大多数代码总是到处声明方法,而不是包含“平面指令”?,java,oop,Java,Oop,我很难理解OOP逻辑。例如,我注意到在java或python等OOP语言中,程序总是在线性执行的程序中定义一些方法。我有一点C语言的经验,我不明白这样做的意义 例如,为什么要写: 而不是: 考虑到我不打算在其他地方使用testjv类,而是在这个执行的文件中?基本假设实际上是不正确的。代码不是以线性方式执行的。例如,在JUnit测试中,在每个@test方法之前,使用@Before注释的方法会被重复调用一次,而类似的概念也适用于JUnit的旧版本,即在名称以test开头的方法之前调用名为setUp的

我很难理解OOP逻辑。例如,我注意到在java或python等OOP语言中,程序总是在线性执行的程序中定义一些方法。我有一点C语言的经验,我不明白这样做的意义

例如,为什么要写:

而不是:


考虑到我不打算在其他地方使用testjv类,而是在这个执行的文件中?

基本假设实际上是不正确的。代码不是以线性方式执行的。例如,在JUnit测试中,在每个@test方法之前,使用@Before注释的方法会被重复调用一次,而类似的概念也适用于JUnit的旧版本,即在名称以test开头的方法之前调用名为setUp的方法。对于不同的测试运行程序,可以更改调用的测试顺序。例如,测试运行程序的专有实现并行执行测试,以确认测试中的代码实际上是线程安全的

但是,比这一具体案例更普遍的是,有几个原因可以这样做:

可重用性-将代码块分解为更小的命名单元,允许在多个不同的上下文中调用这些子单元或子例程,而无需调用整个程序

可调试性—代码的命名子区域允许堆栈跟踪识别发生特定错误的特定代码区域。这是一种比简单地查看行号并在以前的版本中查找行号更容易理解代码的方法

隔离-代码的每个逻辑部分可能不需要访问程序中使用的所有不同变量或数据。声明函数及其输入会限制访问范围,因此实现只能访问与其相关的变量

可能还有更多的好处/原因,但这些是首先想到的

Given that I don't intend to use testjv class elsewhere but in this executed file ?
如果你不想把对数据变量的操作放在一个方法中,那么你可以把它们放在构造函数中,也可以把它们放在初始化块中,两者都以相同的方式结束 例如,对于初始化块:-

{
    driver = new FirefoxDriver(profile);
    baseUrl = "http://www.google.com";
    driver.manage().timeouts().implicitlyWait(30, TimeUnit.SECONDS);
}

现在,OOP语言不允许在方法之外对数据变量进行操作的原因是,假设在一个场景中,当您构造此类的对象时,您不希望上面的代码行像上面的情况那样自动运行。你将如何防止这种情况?因此,如果这些代码行在方法中,那么您可以控制在类中对数据变量执行的操作。您甚至可以覆盖这些操作并定义自己的操作。您甚至可以通过声明方法private(即封装)来限制其他类调用您的数据修改操作

这就是语言的定义。@Maroun Maroun:你是说我的第二个示例甚至无法编译吗?如果你有5000行代码?将它分解成块方法,而不是将其全部集中在一起,不是更好吗?不会的,试试看。指令应该写在方法内部。因为您可能希望从程序的其他部分多次调用setUp方法。您是否应该再次编写相同的代码?顺便说一句,这与OOP无关
Given that I don't intend to use testjv class elsewhere but in this executed file ?
{
    driver = new FirefoxDriver(profile);
    baseUrl = "http://www.google.com";
    driver.manage().timeouts().implicitlyWait(30, TimeUnit.SECONDS);
}