Matlab面向对象编程

xiaoxiao2021-02-28  25

名称:简单计算器程序

面向对象思想的由来:面向对象编程思想的由来是从面向过程演变而来,所以我们用一个简单的计算器程序用面向过程的方式去实现。

以下是面向过程方式实现计算器程序:

public class Main { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); System.out.println("input 1 figure..."); double figure1 = Double.parseDouble(scanner.nextLine()); System.out.println("input operator..."); String operator = scanner.nextLine(); System.out.println("input 2 figure..."); double figure2 = Double.parseDouble(scanner.nextLine()); double resultOperator = 0.0; if ("+".equals(operator)) { resultOperator = figure1 + figure2; } else if ("-".equals(operator)) { resultOperator = figure1 - figure2; } else if ("*".equals(operator)) { resultOperator = figure1 * figure2; } else if ("/".equals(operator)) { resultOperator = figure1 / figure2; } System.out.println("result:" + resultOperator); } } 123456789101112131415161718192021222324252627282930

运行效果: 


这实现起来确实很快,代码运行起来也没有异常,但是并不是代码无错就是优,我们要多方面考虑就知道问题的所在了,例如:以后要在平板电脑上计算,以后要在javaWeb程序上计算,能到这个计算过程都要在去写一遍?,这肯定没有体现出复用性 所以我们要考虑如何复用? 业务封装:

package com.dahua.demo1.b; import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); System.out.println("input 1 figure..."); double figure1 = Double.parseDouble(scanner.nextLine()); System.out.println("input operator..."); String operator = scanner.nextLine(); System.out.println("input 2 figure..."); double figure2 = Double.parseDouble(scanner.nextLine()); double operatorResult = Operator.getOperatorResult(figure1, figure2, operator); System.out.println("result:" + operatorResult); } } 12345678910111213141516171819202122232425 package com.dahua.demo1.b; public class Operator { /** * 此方法的用于计算两个数的值 * @param figure1 第一个数值 * @param figure2 第二个数值 * @param operator 传入运算符 * @return */ public static double getOperatorResult(double figure1, double figure2, String operator) { double resultOperator = 0.0; if ("+".equals(operator)) { resultOperator = figure1 + figure2; } else if ("-".equals(operator)) { resultOperator = figure1 - figure2; } else if ("*".equals(operator)) { resultOperator = figure1 * figure2; } else if ("/".equals(operator)) { resultOperator = figure1 / figure2; } return resultOperator; } } 12345678910111213141516171819202122232425262728

所以我们定义一个计算类(Operator),里面有一个计算的方法,以后不管是平板电脑程序需要计算,还是JavaWeb程序需要计算 等等,都可以使用这个Operator类的计算方法了,从而实现了复用,面向对象特征之一封装

我们在以面向对象编程思想里考虑,这样写耦合度太高,扩展性也不好,因为如果现在要增加一个平方根运算呢,难道要去修改代码吗?

所以我们以面向对象的思想来考虑的话,抽取共用相同的行为,无论(加 减 乘 除)他们都用算法的行为,所以我们定义一个父类,用子类来实现:

public abstract class Counter { private double figure1; private double figure2; public double getFigure1() { return figure1; } public void setFigure1(double figure1) { this.figure1 = figure1; } public double getFigure2() { return figure2; } public void setFigure2(double figure2) { this.figure2 = figure2; } /** * 抽象方法 * 计算两个数值 * @return 返回计算结果 */ public abstract double counterResult(); } // 加法类 public class CounterAdd extends Counter{ public double counterResult() { return Operator.getOperatorResult(getFigure1(), getFigure2(), "+"); } } // 减法类 public class CounterMinus extends Counter { public double counterResult() { return Operator.getOperatorResult(getFigure1(), getFigure2(), "-"); } } // 乘法类 public class CounterRide extends Counter { public double counterResult() { return Operator.getOperatorResult(getFigure1(), getFigure2(), "*"); } } // 除法类 public class CounterRemove extends Counter { public double counterResult() { return Operator.getOperatorResult(getFigure1(), getFigure2(), "/"); } } // 计算类 public class Operator { /** * 此方法的用于计算两个数的值 * @param figure1 第一个数值 * @param figure2 第二个数值 * @param operator 传入运算符 * @return */ public static double getOperatorResult(double figure1, double figure2, String operator) { double resultOperator = 0.0; if ("+".equals(operator)) { resultOperator = figure1 + figure2; } else if ("-".equals(operator)) { resultOperator = figure1 - figure2; } else if ("*".equals(operator)) { resultOperator = figure1 * figure2; } else if ("/".equals(operator)) { resultOperator = figure1 / figure2; } return resultOperator; } } 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586

客户端程序调用:

public class Main { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); System.out.println("input 1 figure..."); double figure1 = Double.parseDouble(scanner.nextLine()); System.out.println("input operator..."); String operator = scanner.nextLine(); System.out.println("input 2 figure..."); double figure2 = Double.parseDouble(scanner.nextLine()); Counter counter = CounterFactory.getInstance().getOperator(operator); counter.setFigure1(figure1); counter.setFigure2(figure2); double counterResult = counter.counterResult(); System.out.println("result:" + counterResult); } } 1234567891011121314151617181920212223

执行结果: 

以上说这些:完全是模拟从一个简单的计算器程序,用常规面向过程思想实现,慢慢的演化到面向对象思想中来体现,以上还有很多不足,没有去完善,主要是体现出面向对象程序设计一种方式。

 转自 http://blog.csdn.net/u011967006

转载请注明原文地址: https://www.6miu.com/read-1600175.html

最新回复(0)