开放封闭原则如何指导面向接口的编程实践?