使用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中使用闭包函数一样可以模拟面向对象的封装的特点,但那样做有什么必要,除了更难懂以外,还没有缺少很多类特有的魔法属性,尤其是闭包模拟对象缺少了继承的用法。
使用100%面向过程的思维方式来写java程序的更多相关文章
- 【转】介绍Jython,第一部分:轻轻松松写JAVA程序
本文转自:http://www.ibm.com/developerworks/cn/education/java/j-jython1/index.html 关于本教程 本教程介绍哪些内容? 这个两部分 ...
- 记事本写JAVA程序
编写程序源码: 1.新建记事本程序,修改文件名称为HelloWorld.java 打开编辑以下内容,保存. public class HelloWorld { public static void m ...
- oracle顺序控制语句goto、null和分页过程中输入输出存储、java程序的调用过程
顺序控制语句1 goto建议不要使用 declare i number:=; begin loop dbms_output.put_line(i); then goto end_loop; end i ...
- 写Java程序的三十个基本规则【新手必读】
(1) 类名首字母应该大写.字段.方法以及对象(句柄)的首字母应小写.对于所有标识符,其中包含的所有单词都应紧靠在一起,而且大写中间单词的首字母.例如: ThisIsAClassName this ...
- 写Java程序让Jvm崩溃
package jvm; public class HeapCrash { public static void main(String[] args) { //Object[] o = {“abc” ...
- 写Java程序要体现面向对象
对于之前写的一篇文章现在想想存在不足之处,之前写的测试ArrayList和LinkedList的各项操作性能比较的程序没有体现面向对象的封装特性,所以,今天把代码重新写了一遍,其实改动的地 ...
- 笔记:写Java程序,并输出
建一个文件名为 demo.java的文件 //写框架文件 public class Demo{ //写入口文件 public static void main(String[] args){ Syst ...
- 代写java程序qq:928900200
学校为全面提升学校教学质量,提高管理水平,决定开发一套小型成绩管理系统,实现以下功能.1) 系统用户分为管理员.教师和学生三种角色,每种角色都可以包含若干个用户.其中管理员登录后可以进行教师.学生 ...
- 关于pythoh面向过程开发人员三步转面向对象的补充,再加一步,四步走战略。转面向对象也可以有固定公式。
前言: oop非常非常非常重要.搞不懂oop,就玩不了python,就算能写也一定是写代码时候喜欢靠猜瞎猫碰死老鼠写得心很虚.为什么这么说呢,我也是从面向过程编程到死走过来的,一路def到死,一看到有 ...
随机推荐
- java第十三周测试记录
今天课上遇到了问题,在我的上一篇随笔,这个阻碍了我很长时间,而且上一次也是这个问题,真的吃一堑不长一智,这次我应该就记住了,嗯. 设计思路: 俩个库: 1.一个库存商品,商品的基本属性和商品的数量(数 ...
- 将两个DataTable合并成一个DataTable
转载自 http://blog.csdn.net/wangxiaojia42121/article/details/53330464 谢谢 //两个结构一样的DT合并DataTable DataTab ...
- Java 服务端监控方案(四. Java 篇)
http://jerrypeng.me/2014/08/08/server-side-java-monitoring-java/ 这个漫长的系列文章今天要迎来最后一篇了,也是真正与 Java 有关的部 ...
- 【状压dp】Trie 树 @中山纪念中学20170304
目录 Trie 树 PROBLEM 题目描述 输入 输出 样例输入 样例输出 SOLUTION CODE Trie 树 PROBLEM 题目描述 字母(Trie)树是一个表示一个字符串集合中所有字符串 ...
- poj3617 Best Cow Line(贪心,字典序问题)
https://vjudge.net/problem/POJ-3617 这类字符串处理字典序问题经常用到贪心, 每决定输出一个字符之前,都要前后i++,j--逐个比大小,直至比出为止. #includ ...
- Caffe-SSD相关源码说明和调试记录
1 对Blob的理解及其操作: Blob是一个四维的数组.维度从高到低分别是: (num_,channels_,height_,width_) 对于图像数据来说就是:图片个数,彩色通道个数, ...
- SharePoint 2016 - 安装QuickFlow2013
本文记录在SharePoint 2016上安装QuickFlow的步骤. QuickFlow尚未推出针对SP16版本的安装包,不过,for SP13版本的wsp是可以直接用于SP16的 1)添加wsp ...
- php : 文件及文件夹操作(创建、删除、移动、复制)
Talk is cheap, show you the code : <?php /** * 操纵文件类 * */ class FileUtil { /** * 建立文件夹 * * @param ...
- Pinterest凭什么拥有那么多用户:机器学习是答案
目前,Pinterest月平均活跃用户量达到1亿,这家以图片为主的公司是如何留住用户并盈利的呢?Pinterest的主要目标是向用户推荐相关的图片或内容,推荐的内容足够精确才能提高用户黏性.近期,&l ...
- Linux 搭建git 自己拉取本地 git pull,其他地方的git仓库拉取代码
Linux 下建立 Git 与 GitHub 的连接 Git 是一款开源的分布式版本控制系统,而 GitHub 是依托 Git 的代码托管平台. GitHub 利用 Git 极其强大的克隆和分支功能, ...