目标:理解JAVA“基于契约”编程的思想项目:定义一个类,能够完成两个功能:1、加法:1+2+5+72、减法:10-3-2-1-5
版本1、用函数库开发算法 :
操作:
*、定义MyMath1类
*、定义静态加法:int add(int,int...)
*、定义静态减法:int sub(int,int...)
*、main方法中调用。
版本2、用定义类的方法
*、定义MyMath2类
*、定义两个私有成员:int num1,int[]num2。
*、定义非空构造函数对num1和num2赋值。
*、定义方法:int add();int sub()。注意此时方法没有参数。
*、main方法中调用。
版本3、用定义接口的方法
*、定义加法IAdd接口,方法:int add(int,int...)
*、定义减法ISub接口,方法:int sub(int,int...)
*、定义MyMath3类,同时实现加法和减少接口。
*、main方法中调用。
版本4、用定义接口的方法-组合编程1
*、定义加法IAdd接口,方法:int add(int,int...)
*、定义减法ISub接口,方法:int sub(int,int...)
*、定义加法实现类MyAdd,实现加法接口
*、定义减法实现类MySub,实现减法接口
*、定义MyMath4类,定义成员:
IAdd addMember;
ISub subMember;
*、定构造方法,对两个成员进行赋值。
*、main方法中调用。
版本5、用定义接口的方法-组合编程2
*、定义加法IAdd接口,方法:int add(int,int...)
*、定义减法ISub接口,方法:int sub(int,int...)
*、定义加法实现类MyAdd,实现加法接口
*、定义减法实现类MySub,实现减法接口
*、定义MyMath5类,注意也要实现加法和减法接口。
*、定义成员:
IAdd addMember;
ISub subMember;
*、定构造方法,对两个成员进行赋值。
*、实现加法接口:调用addMember完成加法。
*、实现减法接口:调用subMember完成减法。
*、main方法中调用。
要求:
*、反复练习上面几种不同的开发方式。
*、反复思考上面不同的开发方式各种的优缺点。
package day08.number.calculate;
interface IAdd{
int add(int a,int b, int...c);
}
interface ISub{
int sub(int a,int b,int...c);
}
package day08.number.calculate;
class MyAdd implements IAdd{
@Override
public int add(int a, int b, int... c) {
int result = a + b;
for (int i = 0; i < c.length;i++) {
result+= c[i];
}
return result;
}
}
package day08.number.calculate;
class MySub implements ISub {
@Override
public int sub(int a, int b, int... c) {
int result = a - b;
for (int i = 0; i < c.length; i++) {
result -= c[i];
}
return result;
}
}
package day08.number.calculate;
public class MyMath1 {
public static int add(int a,int b,int...c) {
int result = a + b;
for (int i = 0; i < c.length;i++) {
result+= c[i];
}
return result;
}
public static int sub(int a,int b,int...c){
int result =a-b;
for(int i=0;i<c.length;i++){
result-=c[i];
}
return result;
}
}
package day08.number.calculate;
public class MyMath2 {
private int num1;
private int[]num2;
public int add(){
int i =0;
int result = num1 +num2[i];
for (; i < num2.length-1;i++) {
result+= num2[i+1];
}
return result;
}
public int sub() {
int i = 0;
int result = num1 - num2[i];
for (i = 0; i < num2.length-1; i++) {
result -= num2[i+1];
}
return result;
}
public MyMath2(int a,int ...b){
// num1=a;
// for (int i=0;i<b.length;i++){
// num2[i]=b[i];
this.num1=a;
this.num2=b;
}
}
package day08.number.calculate;
public class MyMath3 implements IAdd,ISub{
@Override
public int add(int a, int b, int... c) {
int result = a + b;
for (int i = 0; i < c.length;i++) {
result+= c[i];
}
return result;
}
@Override
public int sub(int a, int b, int... c) {
int result =a-b;
for(int i=0;i<c.length;i++){
result-=c[i];
}
return result;
}
}
package day08.number.calculate;
public class MyMath4 {
public IAdd addMember;
public ISub subMember;
public MyMath4(){}
public MyMath4(IAdd addMember,ISub subMember){
this.addMember =addMember;
this.subMember=subMember;
}
public MyMath4(MyAdd add, MySub sub) {
}
public int add(int a, int b, int... c) {
System.out.println("加法");
// System.out.println("add="+this.addMember.add(1,2,3));
return this.addMember.add(a,b,c);
}
public int sub(int a, int b, int... c) {
this.subMember.sub(1,2,3);
System.out.println("减法");
// System.out.println("add="+this.subMember.sub(1,2,3));
return this.subMember.sub(a,b,c);
}
}
package day08.number.calculate;
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 a,int b,int...c){
return this.addMember.add(a,b,c) ;
}
public int sub(int a,int b,int...c){
return this.subMember.sub(a,b,c);
}
}