使用100%面向過程的思維方式來寫java程序


1、java是強制寫class關鍵字的語言,不能有獨立的函數游離在類外出現在文件中,這和python c++ 都不同,后面的都可以單獨在類外寫函數,所以java被稱為是純面向對象的語言,py和c++都不是強制向對象的寫法。

 

2、盡管如此,有的笨瓜,還是打死也寫不出類來,而且強烈的反對寫類,認為面向過程已經能搞定一切了,發明c++這種語言的人就是閑的沒事,c++對於c來說是完全的多余沒必要。

但是當被公司要求寫java時候,就會蒙蔽,覺得沒有面向對象經驗,很難轉變,此篇演示完全的面向過程的思維來寫java。讓從不用面向對象的py人員可以不用面向對象來寫java。

 

3、首先是兩個縮寫。面向對象編程 oop, 面向過程編程pop

 

4、先來一個面向對象的java常規寫法,再來一個完全的反對面向對象的寫法。

PersonOOP.java文件。

 

import java.util.logging.*;

/**
 * 一個使用面向對象寫的人類
 * @author bfzs
 */
public class PersonOOP {
    private String name;
    private int age;
    private final String eyeColor;
    private float weight;
    public float height;
    private static Logger logger = Logger.getLogger(PersonOOP.class.toString());

    public PersonOOP(String personName, int age, String eyeColor, float weight, float height) {
        name = personName;
        this.age = age;
        this.eyeColor = eyeColor;
        this.weight = weight;
        this.height = height;
    }

    /**
     * 年齡增長
     * @param growingAge 要增加的年齡
     */
    public void growAge(int growingAge) {
        age = age + growingAge;
    }

    /**
     * 展示年齡的方法
     */
    public void showAge() {
        logger.info(name + " 的年齡是 " + age);
    }

    /**
     * 體重增長
     *
     * @param growingWeight 要增加的體重
     */
    public void growWeight(float growingWeight) {
        weight = weight + growingWeight;
    }

    public void showWeight() {
        logger.info(name + " 的體重是 " + weight);
    }

    /**
     * 身高增長
     *
     * @param growingHeight 要增加的身高
     */
    public void growHeight(float growingHeight) {
        height = height + growingHeight;
    }

    public void showHeight() {
        System.out.println(name + " 的身高是 " + height);
    }

    public void showEyeColor() {
        logger.info(name + " 的眼睛顏色是 " + eyeColor);
    }

    public void walk() {
        logger.info(name + " 在走路");
    }
}

 

下面是調用PersonOOP類的方式:

TestOOP.java,主要是展示人的屬性,然后用一些方法來改變人的屬性,然后再展示人的屬性

public class TestOOP {
    public static void main(String[] args) {
        //xiaohong
        PersonOOP xiaohong = new PersonOOP("xiaohong", 16, "black", 40.0f, 153.1f);

        xiaohong.showAge();
        System.out.println(xiaohong.height);
        xiaohong.showWeight();
        xiaohong.showEyeColor();
        xiaohong.walk();

        xiaohong.growAge(2);
        xiaohong.growWeight(10.0f);
        xiaohong.growHeight(5.0f);

        xiaohong.showAge();
        System.out.println(xiaohong.height);
        xiaohong.showWeight();


        // *******************************************************************************************
        //xiaomin
        PersonOOP xiaomin = new PersonOOP("xiaomin", 18, "blue", 50.0f, 163.1f);

        xiaomin.showAge();
        System.out.println(xiaomin.height);
        xiaomin.showWeight();
        xiaomin.showEyeColor();
        xiaomin.walk();

        xiaomin.growAge(3);
        xiaomin.growWeight(10.0f);
        xiaomin.growHeight(5.0f);

        xiaomin.showAge();
        System.out.println(xiaohong.height);
        xiaohong.showWeight();
    }
}

 

5、下面來展示的是用完全面向過程的思維來寫人類

PersonPOP.java

import java.util.logging.*;

/**
 * 一個使用100%純面向過程寫的人類
 * @author bfzs
 */
public class PersonPOP {
    private static Logger logger = Logger.getLogger(PersonOOP.class.toString());

    /**
     * 設置為私有方法,禁止此類調用構造函數進行實例化,僅能由類名調用方法不能用實例調用方法,當作工具類使用
     */
    private PersonPOP() {
    }

    public static int growAge(int age, int growingAge) {
        age = age + growingAge;
        return age;
    }

    public static void showAge(String name, int age) {
        logger.info(name + " 的年齡是 " + age);
    }

    public static float growWeight(float weight, float growingWeight) {
        weight = weight + growingWeight;
        return weight;
    }

    public static void showWeight(String name, float weight) {
        logger.info(name + " 的體重是 " + weight);
    }

    public static float growHeight(float height, float growingHeight) {
        height = height + growingHeight;
        return height;
    }

    public static void showHeight(String name, float height) {
        System.out.println(name + " 的身高是 " + height);
    }

    public static void showEyeColor(String name, String eyeColor) {
        logger.info(name + " 的眼睛顏色是 " + eyeColor);
    }

    public static void walk(String name) {
        logger.info(name + " 在走路");
    }
}

 

下面是TestPOP.java文件,主要是調用PersonPOP,來展示人的屬性和改變人的屬性。

public class TestPOP {
    public static void main(String[] args) {
        //xiaohong
        String xiaohongName = "xiaohong";
        int xiaohongAge = 16;
        String xiaohongEyeColor = "black";
        float xiaohongWeight = 40.0f;
        float xiaohongHeight = 153.1f;

        PersonPOP.showAge(xiaohongName, xiaohongAge);
        System.out.println(xiaohongHeight);
        PersonPOP.showWeight(xiaohongName, xiaohongWeight);
        PersonPOP.showEyeColor(xiaohongName, xiaohongEyeColor);
        PersonPOP.walk(xiaohongName);

        xiaohongAge = PersonPOP.growAge(xiaohongAge, 2);
        xiaohongWeight = PersonPOP.growWeight(xiaohongWeight, 10.0f);
        xiaohongHeight = PersonPOP.growHeight(xiaohongHeight, 5.0f);

        PersonPOP.showAge(xiaohongName, xiaohongAge);
        System.out.println(xiaohongHeight);
        PersonPOP.showWeight(xiaohongName, xiaohongWeight);


        // *******************************************************************************************
        //xiaomin
        String xiaominName = "xiaomin";
        int xiaominAge = 18;
        String xiaominEyeColor = "blue";
        float xiaominWeight = 50.0f;
        float xiaominHeight = 163.1f;

        PersonPOP.showAge(xiaominName, xiaominAge);
        System.out.println(xiaominHeight);
        PersonPOP.showWeight(xiaominName, xiaominWeight);
        PersonPOP.showEyeColor(xiaominName, xiaominEyeColor);
        PersonPOP.walk(xiaominName);

        xiaominAge = PersonPOP.growAge(xiaominAge, 3);
        xiaominWeight = PersonPOP.growWeight(xiaominWeight, 10.0f);
        xiaominHeight = PersonPOP.growHeight(xiaominHeight, 5.0f);

        PersonPOP.showAge(xiaominName, xiaominAge);
        System.out.println(xiaominHeight);
        PersonPOP.showWeight(xiaominName, xiaominWeight);
    }
}

6、用面向過程來寫人類,主要寫法方式就是不使用任何的成員變量/實例屬性,類中所有方法全部都用static修飾。

7、調用面向過程的人類時候,需要在類外設置很多變量來保存屬性。調用面向對象的時候是把屬性綁定到對象上,所以不需要更多的類外數據,假設人類有100個屬性,需要操作10個人,面向過程需要在類外設置1000個變量,使用面向對象在類外只需要設置10個人類實例變量就可以了

8、而且面向對象是屬性一次綁定就完了,如果使用面向過程,n個方法中都要重復傳參,由於面向過程沒有new一個對象,就沒有對象的屬性來保存中間狀態,需要在更多的方法中反復地return結果供類外的變量來保存它。

9、就算有人說面向對象太復雜了,沒必要用面向對象,但那是寫起來復雜,一旦做為基礎類被調用起來,那是比調用面向過程的類爽多了。而且在寫人類的時候,面向對象也只是多了成員變量聲明和初始化設置,並沒有比面向過程的寫法難很多,只是思維不一樣。

 

10、如果是在任何情況場景下打死也不願意使用oop的人,那么可以用此篇的面向過程思維來寫java,面向對象最最基本的一點是封裝(繼承和多態是可選的,封裝是必須的),oop是數據和方法的封裝,PersonPOP類完全沒有對人的屬性有任何封裝,所以不算是面向對象。沒有什么是只有面向對象能搞定,面向過程搞不定了的任務。

 

11、不管是python java 就算代碼中寫了class關鍵字,不能百分之百的保證是使用了面向對象思維。反之一樣,在python中使用閉包函數一樣可以模擬面向對象的封裝的特點,但那樣做有什么必要,除了更難懂以外,還沒有缺少很多類特有的魔法屬性,尤其是閉包模擬對象缺少了繼承的用法。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM