目标:理解JAVA“基于契约”编程的思想
项目:定义一个类,能够完成两个功能:
1、加法:1+2+5+7
2、减法:10-3-2-1-5
package counter;
class MyAdd implements IAdd{
@Override
public int add(int num1, int num2) {
return num1 + num2;
}
}
class MySub implements ISub{
@Override
public int sub(int num1, int num2) {
return num1 - num2;
}
}
public class Start {
public static void main(String[] args) {
//方法一
int add = MyMath1.add(1,2,3,4,5);
int sub = MyMath1.sub(10,5,4,1);
System.out.println("add="+add);
System.out.println("sub="+sub);
System.out.println("--------------------");
//方法二
MyMath2 myMath2 = new MyMath2(4,6);
System.out.println("加法"+myMath2.add());
System.out.println("减法"+myMath2.sub());
System.out.println("--------------------");
//方法三
MyMath3 myMath3 = new MyMath3();
int sum1 = myMath3.add(1,2);
int sum2 = myMath3.sub(2,1);
System.out.println("接口实现加法="+sum1);
System.out.println("接口实现减法="+sum2);
System.out.println("--------------------");
//方法四
MyAdd myAdd = new MyAdd();
MySub mySub = new MySub();
MyMath4 myMath4 = new MyMath4(myAdd,mySub);
System.out.println("组合编程加法1="+myMath4.add(5,5));
System.out.println("组合编程减法1="+myMath4.sub(5,5));
System.out.println("--------------------");
//方法五
MyMath5 myMath5 = new MyMath5(myAdd,mySub);
System.out.println("组合编程加法2="+myMath5.add(5,5));
System.out.println("组合编程减法2="+myMath5.sub(5,5));
System.out.println("--------------------");
}
}
版本1、用函数库开发算法 :
操作:
*、定义MyMath1类
*、定义静态加法:int add(int,int...)
*、定义静态减法:int sub(int,int...)
*、main方法中调用
package counter;
public class MyMath1 {
public MyMath1(){}
public static int add(int...data){
int sum = 0;
for (int i=0;i<data.length;i++){
sum += data[i];
}
return sum;
}
public static int sub(int...data){
int sum =data[0];
for (int i=1;i< data.length;i++){
sum -= data[i];
}
return sum;
}
}
版本2、用定义类的方法
*、定义MyMath2类
*、定义两个私有成员:int num1,int[]num2。
*、定义非空构造函数对num1和num2赋值。
*、定义方法:int add();int sub()。注意此时方法没有参数。
*、main方法中调用。
package counter;
public class MyMath2 {
private int num1,num2;
public MyMath2(){}
public MyMath2(int num1,int num2){
this.num1 = num1;
this.num2 = num2;
}
public int add(){
int sum;
sum = num1 + num2;
return sum;
}
public int sub(){
int sum;
sum = num1 - num2;
return sum;
}
}
版本3、用定义接口的方法
*、定义加法IAdd接口,方法:int add(int,int...)
*、定义减法ISub接口,方法:int sub(int,int...)
*、定义MyMath3类,同时实现加法和减少接口。
*、main方法中调用。
package counter;
public class MyMath3 implements IAdd, ISub {
public MyMath3(){}
@Override
public int add(int num1,int num2) {
return num1 + num2;
}
@Override
public int sub(int num1,int num2) {
return num1 - num2;
}
}
interface IAdd {
int add(int num1,int num2);
}
interface ISub {
int sub(int num1,int num2);
}
版本5、用定义接口的方法-组合编程2
*、定义加法IAdd接口,方法:int add(int,int...)
*、定义减法ISub接口,方法:int sub(int,int...)
*、定义加法实现类MyAdd,实现加法接口
*、定义减法实现类MySub,实现减法接口
*、定义MyMath5类,注意也要实现加法和减法接口。
*、定义成员:
IAdd addMember;
ISub subMember;
*、定构造方法,对两个成员进行赋值。
*、实现加法接口:调用addMember完成加法。
*、实现减法接口:调用subMember完成减法。
*、main方法中调用。
package counter;
public class MyMath4 implements IAdd,ISub {
private IAdd addMember;
private ISub subMember;
public MyMath4(){}
public MyMath4(IAdd addMember,ISub subMember){
this.addMember = addMember;
this.subMember = subMember;
}
@Override
public int add(int num1, int num2) {
return this.addMember.add(num1, num2);
}
@Override
public int sub(int num1, int num2) {
return this.subMember.sub(num1, num2);
}
}
版本4、用定义接口的方法-组合编程1
*、定义加法IAdd接口,方法:int add(int,int...)
*、定义减法ISub接口,方法:int sub(int,int...)
*、定义加法实现类MyAdd,实现加法接口
*、定义减法实现类MySub,实现减法接口
*、定义MyMath4类,定义成员:
IAdd addMember;
ISub subMember;
*、定构造方法,对两个成员进行赋值。
*、main方法中调用。
package counter;
public class MyMath5 {
private IAdd addMember;
private ISub subMember;
public MyMath5(){}
public MyMath5(IAdd addMember,ISub subMember){
this.addMember = addMember;
this.subMember = subMember;
}
public int add(int num1,int num2){
return num1 + num2;
}
public int sub(int num1,int num2){
return num1 - num2;
}
}