概述:程序是程序员对现实生活的抽象,“抽象”本身又具有抽象性。不同的角度或者说粒度,抽象出的层级也不一样,特征,属性等都有区别。高内聚低耦合的程序和代码设计,应当是程序员自我修养中必有的目标之一。
1.面向接口编程和面向对象编程的关系
面向接口编程是面向对象编程的精髓思想之一,言简意赅。
2.接口的本质
表面来看,接口就是一堆没有主体的方法定义组合的集合体,可以被其他类或者接口继承。C#与C++的区别之一就是在于对于多继承的使用,C++对于多继承无限制,C#则是单个类只能被一个子类继承,在c#中要实现多继承的话,只能通过接口来实现。
接口的代码形式:
public interface plusUI
{
void Eat();
void Sleep();
Control GetUI();
string Title
{ get;
}
}
本质:
1)从本质上来看,接口主要为我们定义了rules(规则),单就机器视觉行业而言,不同的图像处理算子应该满足的基本规则,不同的相机品牌的相机应该满足的基本规则,不同的运动控制卡应该满足的基本规则。无论哪家运动控制卡,都会满足初始化,io信号读取,回原点,位置读写等操作。
2)粒度或者说角度,维度等。这里可以借用刘慈欣的《三体》中的一些观点,同一时间,我们会在不同的平行轨道中继续生活下去,每一个选择都会决定未来不同的走向。框架,类,方法,自设计之初就代表了编写者的一种思想或者说一种角度。
在动物学家的眼里,人类和鲨鱼都是哺乳动物,在遗传学家的眼里,人类和草木都具有遗传性。单单就动物学家眼里的哺乳和遗传学家眼里的遗传性,都是因为满足了某一规则或者说要求,最终被划分为同一类。
程序来源于生活,最终要回到生活中去,我们能否对当下所编写的程序不断地从更好的角度去抽象,去提炼,这是需要不断努力的路线。
3)接口和抽象类的区别:
使用抽象类是为了代码的复用,而使用接口的动机是为了实现多态性。如何选择,可以根据具体的情况来做判断。
abstract class ShapesClass
{
abstract public int Area();
}
class Square : ShapesClass
{
int x, y;
// Not providing an Area method results
// in a compile-time error.
public override int Area()
{
return x * y;
}
}
抽象类必须被其派生类实现。
总结:在大话设计模式中,经典的23种设计模式有:工程模式、建造者模式、抽象模式、原型模式、单例模式、适配器模式、桥接模式、合成模式、装饰模式、门面模式、享元模式、代理模式、责任链模式、命令模式、解释器模式、迭代模式、调停者模式、备忘录模式、观察者模式、状态模式、策略模式、模板模式、访问者模式。这些模式各有优缺点,不必盲从,更多的时候学百家之长,为我们所用,加油。