什么是面向对象编程

什么是面向对象编程?(OOP)

● 面向对象编程是一种基于对象概念的编程范式;(所谓的编程范式,就是代码风格,我们“如何”编写和组织代码);
● 我们使用对象来模拟(描述)现实世界(例如用户或者待办事项列表项)或抽象特征(例如 HTML 组件或数据结构);
● 对象可包含数据(属性)和代码(方法)。通过使用对象,我们可以将数据和相应的行为打包成一个块;例如下方:
在这里插入图片描述

● 在面向对象编程 中,对象是自成一体的代码块;
● 对象是应用程序的构件,并可相互影响;
● 交互通过公共接口(API)进行:对象外部的代码可以访问并使用这些方法与对象进行通信;
● 开发面对对象编程的目的是组织代码,使其更灵活、更易于维护(避免 “意大利面条代码”)。

类和实例(传统 OPP)

class(就像一个蓝图,我们可以根据它创建新的对象)
在这里插入图片描述

注:只是一个表示,而不是实际的JavaScript语法!
JavaScript不支持这里所表示的真正的类

● 然后我们可以根据上面的class来生成很多的实例,例如

const user = {
    user: 'IT知识一享',
    password: 'ItShare2024',
    email: 'admin@example.com',
    login(password) {
        // 登录逻辑
    },

    sendMessage(str) {
        //发送逻辑
    }
}

注:从类创建的新对象。就像一个真实的房子从一个抽象的蓝图

面向对象的4个基本原则

我们实际上是如何设计类的,我们如何将真实世界的数据建模成类?

面向对象程序设计的4个基本原则
● 抽象
● 封装
● 继承
● 多态

抽象

概念:忽略或隐藏无关紧要的细节,让我们能够从全局的角度来看待我们正在实现的事情,而不是去纠结那些对我们的实现并不重要的细节

例如我们现在需要制作一部手机,手机作为一个对象,可能含有很多细节,例如,充电、体积、电压、温度、屏幕、绝对电压、绝对温度、振动、声音、前摄像头、后摄像头等等;但是对于用户而已他并不需要关心这些内容,可能用户关心的仅仅一个细节抽象过的手机,例如主页、体积、屏幕;

其实我们无时不刻不使用这抽象,例如之前我们学习的监听事件,我们也仅仅去使用它而已,而不需要去关心其背后的实现细节!

封装

概念:将属性和方法保留在类内部,使类外部无法访问,某些方法可以作为公共接口(API)公开
例如:

在这里插入图片描述

为什么需要这么做?
● 防止外部代码意外的操作内部属性/状态
● 允许在不破坏外部代码的情况下更改内部实现

继承

概念:让子类可以使用某个类的所有属性和方法,形成类与类之间的层次关系。这样,我们就可以重复使用通用逻辑,并对现实世界中的关系进行建模

父类
在这里插入图片描述

子类
在这里插入图片描述

如上图,子类中user\password\email以及登录和发送消息的方法都可以从父类继承,并不用书写重复的代码

多态

概念:子类可以覆盖它从父类继承的方法 [虽然更复杂,但对我们来说已经足够]
在这里插入图片描述

注:例如,作者和管理员除了从user中继承的属性,如果自己有特殊的属性,可以书写逻辑代码来覆盖从user继承的属性

相关推荐

  1. 什么面向对象

    2024-07-13 20:02:04       36 阅读
  2. 什么面向对象

    2024-07-13 20:02:04       20 阅读
  3. OOP什么->面向对象编程的核心概念

    2024-07-13 20:02:04       31 阅读
  4. Python面向对象编程

    2024-07-13 20:02:04       60 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-07-13 20:02:04       66 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-07-13 20:02:04       70 阅读
  3. 在Django里面运行非项目文件

    2024-07-13 20:02:04       57 阅读
  4. Python语言-面向对象

    2024-07-13 20:02:04       68 阅读

热门阅读

  1. Linux学习笔记(二)

    2024-07-13 20:02:04       19 阅读
  2. 2024 暑假友谊赛 1

    2024-07-13 20:02:04       22 阅读
  3. python合并列表的方法

    2024-07-13 20:02:04       23 阅读
  4. 中药学--更新中

    2024-07-13 20:02:04       16 阅读
  5. Mybatis-plus自动填充的使用以及常见问题

    2024-07-13 20:02:04       22 阅读
  6. swiper结合gsap进行切换

    2024-07-13 20:02:04       19 阅读
  7. 昇思训练营打卡第二十四天(LSTM+CRF序列标注)

    2024-07-13 20:02:04       16 阅读
  8. Nginx 日志统计分析命令

    2024-07-13 20:02:04       21 阅读
  9. 天童美语:放假给孩子看什么地理纪录片

    2024-07-13 20:02:04       17 阅读
  10. Perl 语言开发(十三):网络编程

    2024-07-13 20:02:04       21 阅读
  11. 块设备驱动实现--模拟一个块设备

    2024-07-13 20:02:04       16 阅读
  12. Docker

    2024-07-13 20:02:04       15 阅读