使用100%面向过程的思惟方式来写java程序

一、java是强制写class关键字的语言,不能有独立的函数游离在类外出如今文件中,这和python c++ 都不一样,后面的均可以单独在类外写函数,因此java被称为是纯面向对象的语言,py和c++都不是强制向对象的写法。java

 

二、尽管如此,有的笨瓜,仍是打死也写不出类来,并且强烈的反对写类,认为面向过程已经能搞定一切了,发明c++这种语言的人就是闲的没事,c++对于c来讲是彻底的多余不必。python

可是当被公司要求写java时候,就会蒙蔽,以为没有面向对象经验,很难转变,此篇演示彻底的面向过程的思惟来写java。让从不用面向对象的py人员能够不用面向对象来写java。c++

 

三、首先是两个缩写。面向对象编程 oop, 面向过程编程pop编程

 

四、先来一个面向对象的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,主要是展现人的属性,而后用一些方法来改变人的属性,而后再展现人的属性oop

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();
    }
}

 

五、下面来展现的是用彻底面向过程的思惟来写人类this

PersonPOP.javaspa

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);
    }
}

六、用面向过程来写人类,主要写法方式就是不使用任何的成员变量/实例属性,类中全部方法所有都用static修饰。

七、调用面向过程的人类时候,须要在类外设置不少变量来保存属性。调用面向对象的时候是把属性绑定到对象上,因此不须要更多的类外数据,假设人类有100个属性,须要操做10我的,面向过程须要在类外设置1000个变量,使用面向对象在类外只须要设置10我的类实例变量就能够了

八、并且面向对象是属性一次绑定就完了,若是使用面向过程,n个方法中都要重复传参,因为面向过程没有new一个对象,就没有对象的属性来保存中间状态,须要在更多的方法中反复地return结果供类外的变量来保存它。

九、就算有人说面向对象太复杂了,不必用面向对象,但那是写起来复杂,一旦作为基础类被调用起来,那是比调用面向过程的类爽多了。并且在写人类的时候,面向对象也只是多了成员变量声明和初始化设置,并无比面向过程的写法难不少,只是思惟不同。

 

十、若是是在任何状况场景下打死也不肯意使用oop的人,那么能够用此篇的面向过程思惟来写java,面向对象最最基本的一点是封装(继承和多态是可选的,封装是必须的),oop是数据和方法的封装,PersonPOP类彻底没有对人的属性有任何封装,因此不算是面向对象。没有什么是只有面向对象能搞定,面向过程搞不定了的任务。

 

十一、不论是python java 就算代码中写了class关键字,不能百分之百的保证是使用了面向对象思惟。反之同样,在python中使用闭包函数同样能够模拟面向对象的封装的特色,但那样作有什么必要,除了更难懂之外,尚未缺乏不少类特有的魔法属性,尤为是闭包模拟对象缺乏了继承的用法。

相关文章
相关标签/搜索