簡體   English   中英

什么時候應該創建類以避免巨大的main方法?

[英]When should I create classes in order to avoid huge main method?

這只是菜鳥提出的一個問題:如何避免使用大型main (對於JavaFX,請使用start )? 我傾向於創建一類項目,但是我知道這是不正確的。 基本上我不知道何時為特定任務創建專用類。

我希望這個問題不是那么愚蠢。

這不是一個愚蠢的問題。 根據您所說的,您可能不需要其他課程。 您可能只需要方法。 讓我們看一個簡單的例子:

public class MyClass {
    public static void main(String[] args) {
        int i = 4 + 2;
        System.out.println(4 + 2);
    }
}

容易吧? 但是現在,如果情況變得更加艱難。

public class MyClass {
    public static void main(String[] args) {
        for (int i = 0; i < 10; i++) {
            int k = i + (7 / 2) * 3 / 14;
            System.out.println(i + " " + k);
        }
    }
}

現在顯然,這實際上並不困難。 但是,請注意有一種模式嗎? 我們取每個數字0-9,然后加上(7 / 2) * 3 / 14 7/2 (7 / 2) * 3 / 14 可以將其移至方法中:

 int getNumber(int i) {
     return i + (7 / 2) * 3 / 14);
 }

現在,我們的代碼看起來更加簡潔,因為我們不必處理任何加法,除法或乘法

public class MyClass {
    public static void main(String[] args) {
        for (int i = 0; i < 10; i++) {
            int k = getNumber(i);
            System.out.println(i + " " + k);
        }
    }
}

該示例可能看起來很愚蠢,因為它涉及一個非常簡單的數學問題,但要點是: 如果您重復執行某些操作,請將其放入方法中。

注意:方法也可用於拆分大型功能。 如有疑問,請分而治之!
看到這個:

void run() {
    getInput();
    tick();
    render();
}

比這樣的東西干凈得多:

 void run() {
     Scanner reader = new Scanner(System.in);
     System.out.println("Enter a number: ");
     String string = reader.nextString();
     MyObject obj = new MyObject();
     obj.doSomething(string);
     obj.render();
 }

如果查看該代碼,您將不知道它在做什么! 但是第一個示例是您要的,因為它分為清楚地標識它們所執行操作的方法。


無論如何,關於課程:
Google OOP! 有大量的寶貴資源。 對於大多數類,您可以將它們視為容器。 您可以創建一個類Wallet ,其中將包含Coin並對其進行操作(請考慮spendremoveadd )。

沒有愚蠢的問題:)

您詢問有關面向對象編程的概念。

在Java,C ++或Php Object中,目的是將代碼存儲到邏輯區域。 像生活一樣想象代碼。 想象一切都像一個對象。

例如,您的程序正在模擬汽車。

在您的代碼中,您將有一個Car類,一個Engine類,然后是一個繼承自Car和Car且包含Engine實例的BMW類。

在互聯網(使用Google)中,您會找到有關OOP工作原理的大量解釋。 所有這些將比我更好地解釋這一點。

如有任何疑問,歡迎您:)

我認為這是我在學習編程的過程中發展起來的。 雖然我的背景是使用perl腳本編寫的,而不是oop

將演示文稿與數據/邏輯分開。

意思是,一切都應該在類(或函數)中,並且從主線程中,您僅傳遞對象(或函數)數據,並且您以相同的方式獲取數據。

如果它執行一組特定的任務,請從中創建一個類。

如果可以將其用於其他目的,請對其進行分類。

如果執行特定操作,請從中執行功能。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM