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

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

尽管如此,有的笨瓜,还是打死也写不出类来,而且强烈的反对写类,认为面向过程已经能搞定一切了,发明c++这种语言的人就是闲的没事,c++对于c来说是完全的多余没必要。

但是当被公司要求写java时候,就会蒙蔽,觉得没有面向对象经验,很难转变,此篇演示完全的面向过程的思维来写java。让从不用面向对象的py人员可以不用面向对象来写java。

首先是两个缩写。面向对象编程 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,主要是展示人的属性,然后用一些方法来改变人的属性,然后再展示人的属性

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

下面来展示的是用完全面向过程的思维来写人类

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

用面向过程来写人类,主要写法方式就是不使用任何的成员变量/实例属性,类中所有方法全部都用static修饰。调用面向过程的人类时候,需要在类外设置很多变量来保存属性。调用面向对象的时候是把属性绑定到对象上,所以不需要更多的类外数据,假设人类有100个属性,需要操作10个人,面向过程需要在类外设置1000个变量,使用面向对象在类外只需要设置10个人类实例变量就可以了。就算有人说面向对象太复杂了,没必要用面向对象,但那是写起来复杂,一旦做为基础类被调用起来,那是比调用面向过程的类爽多了。而且在写人类的时候,面向对象也只是多了成员变量声明和初始化设置,并没有比面向过程的写法难很多,只是思维不一样。

如果是打死也不愿意使用oop的人,那么可以用此篇的面向过程思维来写java,面向对象最最基本的一点是封装(继承和多态是可选的,封装是必须的),oop是数据和方法的封装,PersonPOP类完全没有对人的属性有任何封装,所以不算是面向对象。没有什么是只有面向对象能搞定,面向过程搞不定了的任务。

原文地址:https://www.cnblogs.com/ydf0509/p/9130185.html

时间: 2024-11-04 14:19:41

使用100%面向过程的方式来写java程序的相关文章

写Java程序让Jvm崩溃

package jvm; public class HeapCrash { public static void main(String[] args) { //Object[] o = {“abc”};初始值赋值,不会有影响. Object[] o = null; while (true) { o = new Object[] { o }; //输出的话,jvm就不会崩溃. //System.out.println(o); } } } 输出: Exception in thread "main

代写java程序qq:928900200

学校为全面提升学校教学质量,提高管理水平,决定开发一套小型成绩管理系统,实现以下功能.1)   系统用户分为管理员.教师和学生三种角色,每种角色都可以包含若干个用户.其中管理员登录后可以进行教师.学生和课程管理.2)   系统能够管理教师,进行增加,删除,编辑,查询.教师包含教师号.姓名.学院.职称.年龄等信息.3)   系统能够管理学生,进行增加,删除,编辑,查询.学生包含学号.姓名.学院.专业.班级等信息.4)   系统能够管理课程,进行增加,删除,编辑,查询.课程包含课程号.名称.任课教师

对于eclipse写java程序时,想查看一下java源代码,出现Source not found 的原因与解决办法

对于eclipse写java程序时,想查看一下java源代码,出现Source not found 如下图: 原因Eclipse默认设定的自带的JDK是没有源src的,需要引入,点击attach Source...添加jdk的src.zip就可以了

原生js,面向过程的方法,写个选项卡练练手

1 <!DOCTYPE html> 2 <html> 3 <head> 4 <meta charset="UTF-8"> 5 <title>js制作一个选项卡</title> 6 <style type="text/css"> 7 .tab_title span.active { 8 background:#000; 9 color: #FFF; 10 } 11 .tab_conte

怎样简单的运用记事本写java程序

1.新建一个记事本,后缀名是 .java :然后在里面写一段java的代码2.把写好的java文件丢进D盘,就是第一步给出的那个class文件: 3.打开dos界面 开始-〉运行-〉cmd-〉 这个是命令行模式,选择D盘4.选择D盘之后,在命令提示符中输入"javac 文件名.java",我的文件名为java,所以输入javac java.java然后回车,等待编译.这时候你就会发现它提示说javac不是内部文件.接下来就是java环境变量设置的问题了: 5.下载一个jdk执行默认安装

eclipse写java程序实现连接redis数据库教程

第一步,在windows下载安装配置好redis数据库.这里我就不再概述了.下载jedis-2.4.2.jar,当然最好是下载最新版本的jar包.这个在百度搜索下就出来的.下载后,放在一个文件夹下面,一会会需要到. 第二步.打开eclipse,新建一个java工程.如下图所示: 第三步:在Test这个java工程里面,我们新建一个folder,命名lib,把刚才下载的jedis-2.4.2.jar包放在我们新建的lib的包下面,如下图所示: 第四步,在eclipse中,选中jar包,build

.NET 高级架构师0002 架构师之路(1)---面向过程和面向对象

1.引言     机算机科学是一门应用科学,它的知识体系是典型的倒三角结构,所用的基础知识并不多,只是随着应用领域和方向的不同,产生了很多的分支,所以说编程并不是一件很困难的事情,一个高中生经过特定的训练就可以做得到.但是,会编程和编好程绝对是两码事,同样的程序员,有的人几年之后成为了架构师,有的人却还在不停地coding,只不过ctrl-c.ctrl-v用得更加纯熟了.在中国,编程人员最终的归途无外乎两条:一是转向技术管理,它的终点是CTO:二是继续深入,它的终点是首席架构师,成为CEO的人毕

如何从普通程序员晋升为架构师 面向过程编程OP和面向编程OO

引言 计算机科学是一门应用科学,它的知识体系是典型的倒三角结构,所用的基础知识并不多,只是随着应用领域和方向的不同,产生了很多的分支,所以说编程并不是一件很困难的事情,一个高中生经过特定的训练就可以做得到.但是,会编程和编好程绝对是两码事,同样的程序员,有的人几年之后成为了架构师,有的人却还在不停地coding,只不过ctrl-c.ctrl-v用得更加纯熟了.在中国,编程人员最终的归途无外乎两条:一是转向技术管理,它的终点是CTO:二是继续深入,它的终点是首席架构师,成为CEO的人毕竟是少数.如

面向过程 VS 面向对象

面向过程 VS 面向对象 编程范式 编程是 程序 员 用特定的语法+数据结构+算法组成的代码来告诉计算机如何执行任务的过程 , 一个程序是程序员为了得到一个任务结果而编写的一组指令的集合,正所谓条条大路通罗马,实现一个任务的方式有很多种不同的方式, 对这些不同的编程方式的特点进行归纳总结得出来的编程方式类别,即为编程范式. 不同的编程范式本质上代表对各种类型的任务采取的不同的解决问题的思路, 大多数语言只支持一种编程范式,当然也有些语言可以同时支持多种编程范式. 两种最重要的编程范式分别是面向过