编程范式|青训营笔记

52 阅读3分钟

面向对象语言代表C++

继承

继承允许我们依据另一个类来定义一个类,这使得创建和维护一个应用程序变得更容易。这样做,也达到了重用代码功能和提高执行效率的效果
一个类可以派生自多个类
一个类可以从多个基类继承数据和函数
继承多个类可以这样写
class Rectangle: public Shape, public PaintCost
权限控制
虚函数
虚函数是在基类中使用关键字 virtual 声明的函数

多态

C++ 多态意味着调用成员函数时,会根据调用函数的对象的类型来执行不同的函数

// 基类  
class Animal {  
    virtual void eat()=0;纯虚函数,不需要实现函数内部
    void sleep(){
    cout<<"Animal need sleep"<<endl;
    }
};  
  
  
//派生类  
class Dog : public Animal {  //继承
   void eat(){//实现继承的方法
   cout<<"Dog can eat"<<endl;
   }
};

class Cat : public Animal {  //继承
   void eat(){//实现继承的方法
   cout<<"Cat can eat"<<endl;
   }
};


void Aeat(&animal){
    animal.eat();
}

int main(){
    Cat cat;
    Aeat(cat);
     Dog Dog;
    Aeat(Dog);
   }
   

以上根据调用函数的对象来调用不同的成员函数 输出为
Cat can eat
Dog can eat
image.png

闭包是什么

闭包(closure)是一个函数以及其捆绑的周边环境状态(lexical environment,词法环境)的引用的组合。换而言之,闭包让开发者可以从内部函数访问外部函数的作用域。在 JavaScript 中,闭包会随着函数的创建而被同时创建。

function init() {

var name = "Mozilla"// name 是一个被 init 创建的局部变量

function displayName() { // displayName() 是内部函数,一个闭包

alert(name); // 使用了父函数中声明的变量

}

displayName();

}

init();

init() 创建了一个局部变量 name 和一个名为 displayName() 的函数。displayName() 是定义在 init() 里的内部函数,并且仅在 init() 函数体内可用。请注意,displayName() 没有自己的局部变量。然而,因为它可以访问到外部函数的变量,所以 displayName() 可以使用父函数 init() 中声明的变量 name

developer.mozilla.org/zh-CN/docs/…

多范式代表 Javascript

基于原型和头等函数的多范式语言

  • 过程式

  • 面向对象

  • 函数式

  • 响应式

程序语言特性

  • 是否允许副作用
  • 操作的执行顺序
  • 代码组织
  • 状态管理
  • 语法和词法

面向过程式编程有什么缺点?

  • 数据与算法关联弱
  • 不利于修改和扩充
  • 不利于代码重用 面向对象的三大特性是"封装、"多态"、"继承”

面向对象编程五大原则

单一职责原则SRP(Single Responsiblity Principle) 一个类应该有且只有一个去改变它的理由,这意味着一个类应该只有一项工作。
开放封闭原则OCP(Open - Close Principle) 对扩展开放,对修改封闭
里式替换原则LSP(the Liskov Substitution Principle LSP)每一个子类或派生类应该可以替换它们基类或父类,在对象 x为类型 T 时q(x) 成立,那么当ST的子类时,对象 y 为类型 Sq(y) 也应成立。(即对父类的调用同样适用于子类)
依赖倒置原则DIP(the Dependency Inversion Principle DIP) 依赖于抽象。具体而言就是高层模块不依赖于底层模块,二者都同依赖于抽象;抽象不依赖于具体,具体依赖于抽象
接口分离原则JSP(the Interface Segregation Principle ISP) 一个类对另外一个类的依赖应该建立在最小的接口上,不要强迫依赖不用的方法,这是一种接口污染。

面向对象编程有什么缺点?

面向对象编程语言的问题在于,它总是附带着所有它需要的隐含环境。你想要- -个香蕉,但得到的却是一个大猩猩拿着香蕉,而且还有整个丛林。 因为继承一个类就会继承那个类的属性和方法,相当于买东西捆绑销售了