编程思想

Posted by fsoooo Blog on April 10, 2018

####面向过程编程 Procedure Oriented Programming(POP) 实现目的:分析出解决问题所需要的步骤,然后用函数把这些步骤一步一步实现,使用的时候一个一个依次调用。 主要概念:方法、过程 代码示例:

public class Test {  
    public static void main(String[] args) {  
        System.out.println("第一个女孩子洗澡");  
        System.out.println("穿衣服");  
        System.out.println("化妆");  
        System.out.println("*****************");  
        System.out.println("周6"+"吃肯德基");  
        System.out.println("*****************");  
        System.out.println("卸妆");  
        System.out.println("洗澡");  
        System.out.println("睡觉");  
          
        System.out.println("第二个女孩子洗澡");  
        System.out.println("穿衣服");  
        System.out.println("化妆");  
        System.out.println("*****************");  
        System.out.println("周6"+"吃肯德基");  
        System.out.println("*****************");  
        System.out.println("卸妆");  
        System.out.println("洗澡");  
        System.out.println("睡觉");  
          
          
        System.out.println("第一个女孩子洗澡");  
        System.out.println("穿衣服");  
        System.out.println("化妆");  
        System.out.println("*****************");  
        System.out.println("周日"+"约会");  
        System.out.println("*****************");  
        System.out.println("卸妆");  
        System.out.println("洗澡");  
        System.out.println("睡觉");  
         
        System.out.println("第二个女孩子洗澡");  
        System.out.println("穿衣服");  
        System.out.println("化妆");  
        System.out.println("*****************");  
        System.out.println("周日"+"约会");  
        System.out.println("*****************");  
        System.out.println("卸妆");  
        System.out.println("洗澡");  
        System.out.println("睡觉");  
    }  
}

####面向对象编程 Object Oriented Programming(OOP) 实现目的:由单个能够起到子程序作用的单元或对象组合而成。为了实现整体运算,每个对象都能够接收信息、处理数据和向其它对象发送信息。 主要概念:对象、类、封装、继承、多态、消息传递、数据抽象、动态绑定 代码示例:

public class Girl1 {  
      
    public void KFC(String datetime){  
        System.out.println("洗澡");  
        System.out.println("穿衣服");  
        System.out.println("化妆");  
        System.out.println("*****************");  
        System.out.println("我是第一个女孩");  
        System.out.println(datetime+"吃肯德基");  
        System.out.println("*****************");  
        System.out.println("卸妆");  
        System.out.println("洗澡");  
        System.out.println("睡觉");  
    }  
      
    public void meet(String datetime){  
        System.out.println("洗澡");  
        System.out.println("穿衣服");  
        System.out.println("化妆");  
        System.out.println("*****************");  
        System.out.println("我是第一个女孩");  
        System.out.println(datetime+"约会");  
        System.out.println("*****************");  
        System.out.println("卸妆");  
        System.out.println("洗澡");  
        System.out.println("睡觉");  
    }  
} 
public class Girl2 {  
      
    public void KFC(String datetime){  
        System.out.println("洗澡");  
        System.out.println("穿衣服");  
        System.out.println("化妆");  
        System.out.println("*****************");  
        System.out.println("我是第二个女孩");  
        System.out.println(datetime+"吃肯德基");  
        System.out.println("*****************");  
        System.out.println("卸妆");  
        System.out.println("洗澡");  
        System.out.println("睡觉");  
    }  
      
    public void meet(String datetime){  
        System.out.println("洗澡");  
        System.out.println("穿衣服");  
        System.out.println("化妆");  
        System.out.println("*****************");  
        System.out.println("我是第二个女孩");  
        System.out.println(datetime+"约会");  
        System.out.println("*****************");  
        System.out.println("卸妆");  
        System.out.println("洗澡");  
        System.out.println("睡觉");  
    }  
  
}  
/*
 * 面向对象,OOP,抽象成2个女孩的类,以及她的属性
 */
public class Test {  
    public static void main(String[] args) {  
        Girl1 g1 = new Girl1();  
        Girl2 g2 = new Girl2();  
        g1.KFC("周六");  
        g1.meet("周日");  
        g2.KFC("周六");  
        g2.meet("周日");  
    }   
}

####面向切面编程 Aspect Oriented Programming(AOP) 实现目的:针对业务处理过程中的切面进行提取,它所面对的是处理过程中的某个步骤或阶段,以获得逻辑过程中各部分之间低耦合性的隔离效果。 使用范围:切面、连接点、处理逻辑、切点、引进、目标类、代理类、插入 代码示例:

public class GirlProxy implements Girl {  
    private Girl g;  
      
    public GirlProxy(String name){  
        if ("girl1".equals(name)){  
            g = new Girl1();  
        }else if ("girl2".equals(name)){  
            g = new Girl2();  
        }  
    }  
    @Override  
    public void KFC(String datetime) {  
        g.KFC(datetime);  
    }  
    @Override  
    public void meet(String datetime) {  
        g.meet(datetime);  
    }  
}
/* 
 * 增加一个代理类,
 * 把核心的业务逻辑的代码 和 非核心的 分离 
 * 把非核心的代码交给proxy去管理,
 */  
public class Test {  
  
    public static void main(String[] args) {  
        Girl g1 = new GirlProxy("girl1");  
        Girl g2 = new GirlProxy("girl2");  
          
        g1.KFC("周六");  
        g1.meet("周日");  
  
        g2.KFC("周六");  
        g2.meet("周日");  
    }   
}

####面向接口编程 Interface Oriented Programming(IOP基于OOP) 推荐 实现目的:为了需求变更,接口层dll不用重新编译,只要编译实现层dll即可。调用接口的人会感到很舒服,接口依旧功能更新。适用于较不固定需求的项目。 主要概念:低耦合,便于扩展 代码示例:

/*
 * 2个女孩的方法如上(Gril1,Gril2)没有变动
 */
public interface Girl {
	public void KFC(String datetime);
	public void meet(String datetime);
}
/*
 * 面向接口
 * 本例的缺点:
 * 1.非业务逻辑的代码,跟核心的业务逻辑代码,耦合一起
 * 2.一旦非业务逻辑的代码发生改变,全部实现类都要去改
 */
public class Test {
 
	public static void main(String[] args) {
		Girl g1 = new Girl1();
		Girl g2 = new Girl2();
		
		g1.KFC("周六");
		g1.meet("周日");
 
		g2.KFC("周六");
		g2.meet("周日");
	}
}

####面向实现编程 Realize Oriented Programming(ROP基于OOP) 实现目的:当我们要控制某个类的对象,那么我们会直接在当前程序(自身类)中,实例化该类,然后通过该类调用相应的方法。这是一种最基本的面向对象编程模式。 主要概念:高耦合,不支持多态 代码示例:

/*
 * 面向现实
 * 假设有两种品牌的轮胎,普利司通(Bridgestone)和米其林(Michelin)
 * 而轮胎的共同特性都是会转(roll)。那么我们可以得到两个类:
 */

class Bridgestone {
    public void roll() {
        System.out.print("Bridgestone is rolling.");
    }
}
class Michelin {
    public void roll() {
        System.out.print("Michelin is rolling");
    }
}
//对于一辆装了普利司通轮胎的汽车(Car),汽车的转动(roll)就是轮胎的转动:
class Car {
    public void roll(Bridgestone tire) {
        tire.roll();
    }
}
//如果我装了米其林的轮胎
Car car = new Car();
Michelin tire = new Mechilin();
car.roll(tire);
这就是面向实现编程,变量是指向特定类的实例的。 
这种强烈的依赖关系将会大大地抑制编程的灵活性和可复用性。

####参考文档:https://blog.csdn.net/ssh159/article/details/52516986