js三大特性五大原则

面向对象的概念:这是一种软件开发的一种方式,并不是只要在类中有体现出面向对象的三大特性就是面向对象编程了,还需要满足面向对象中的五大原则.

三大特性

  • 封装
  • 继承
  • 多态

    封装

    封装就是将散乱的东西整合成一个集体,可以拥有私有变量或方法和共有的变量或方法,这样就保护了内部变量不被篡改
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    function Fn(name){
    function a(){
    console.log(test.name);
    }
    var test={
    name:'chenjiaobin',
    this.fn=function(){
    a();
    }
    }
    return test;
    }

继承

继承就是儿子继承父亲的东西,父亲开放的东西我都能调用,继承有实现继承和接口继承两种,接口继承只承认方法签名,是指使用属性和方法的名称。但是子类必须提供实现的能力,而实现继承就是直接使用基类的方法和属性而无需而外编码的能力。由于函数没有签名,所以ECMAScript无法实现接口继承,而实现继承主要是依靠原型链来实现

1
2
3
4
5
6
function parent(){}
function child(){}
function F(){}
F.prototype=parent.prototype;
child.prototype=new F();
var obj=new child()

多态

一个类实例的相同方法在不同情形有不同表现形式。多态机制使具有不同内部结构的对象可以共享相同的外部接口。这意味着,虽然针对不同对象的具体操作不同,但通过一个公共的类,它们(那些操作)可以通过相同的方式予以调用。

1
2
3
4
5
6
7
8
9
10
11
12
//同样的函数,但是传递参数的不同会有不同的表现显示也就是执行不同的算法
function duotai(){
var total=0;
if(arguments.length===0){
return 0;
}else{
for(var i=0,ilen=arguments.length;i<ilen;i++){
total+=arguments[i];
}
return total;
}
}

五大原则

  • 单一职责原则
  • 开放封闭原则
  • 里氏替换原则
  • 依赖倒置原则
  • 接口隔离原则

单一职责原则

是指一个类的功能要单一,不能包罗万象。如同一个人一样,分配的工作不能太多,否则一天到晚虽然忙忙碌碌的,但效率却高不起来。
比如在职员类里,将工程师、销售人员、销售经理这些情况都放在职员类里考虑,其结果将会非常混乱,在这个假设下,职员类里的每个方法都要if else判断是哪种情况,从类结构上来说将会十分臃肿,并且上述三种的职员类型,不论哪一种发生需求变化,都会改变职员类!这个是大家所不愿意看到的!

开发封闭原则

指对源码封闭,对功能扩展开发,比如在项目开发过程中有一个新的需求,那么我们就需要对新的需求做功能的扩展,在不影响原有代码的情况下实现功能

里氏替换原则

指子类可以替换父类在任何地方出现,这样做的好处就是,在根据新要求扩展父类接口的新子类的时候而不影响当前客户端的使用!

依赖倒置原则

传统的结构化编程中父模块需要袭来低级的模块,用这个原则就是来逆转这种做法,让高层模块不依低层模块
具体依赖抽象,上层依赖下层。假设B是较A低的模块,但B需要使用到A的功能,这个时候,B不应当直接使用A中的具体类: 而应当由B定义一抽象接口,并由A来实现这个抽象接口,B只使用这个抽象接口:这样就达到了依赖倒置的目的,B也解除了对A的依赖,反过来是A依赖于B定义的抽象接口。通过上层模块难以避免依赖下层模块,假如B也直接依赖A的实现,那么就可能造成循环依赖。一个常见的问题就是编译A模块时需要直接包含到B模块的cpp文件,而编译B时同样要直接包含到A的cpp文件。

接口隔离原则

原则的意思是:使用多个专门的接口比使用单个接口要好的多!
这个我有体会,在我实际编程中,为了减少接口的定义,将许多类似的方法都放在一个接口中,最后发现,维护和实现接口的时候花了太多精力,而接口所定义的操作相当于对客户端的一种承诺,这种承诺当然是越少越好,越精练越好,过多的承诺带来的就是你的大量精力和时间去维护!

当前网速较慢或者你使用的浏览器不支持博客特定功能,请尝试刷新或换用Chrome、Firefox等现代浏览器