什么是面向对象编程

什么是面向对象编程?(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继承的属性

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/45528.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【Cesium开发实战】飞行漫游功能的实现,可设置漫游路径,漫游高度,暂停,继续,删除路径

Cesium有很多很强大的功能,可以在地球上实现很多炫酷的3D效果。今天给大家分享一个可自定义的漫游飞行功能。 1.话不多说,先展示 漫游 2.设计思路 项目需求,可自定义漫游路径,并且设置高度,暂停,继续&…

如何制作文件的二维码?支持设置文件下载功能

现在为了能够更快的将文件分享给其他人查看,会选择将文件转换二维码的方式,用户可以通过扫描二维码在手机上预览或者下载文件到本地,能够有效的减少文件对内存的占用,在很多场景下都有所应用,那么文件转二维码具体该怎…

TCP/IP模型和OSI模型的区别(面试题)

OSI模型,是国际标准化组织ISO制定的用于计算机或通讯系统间互联的标准化体系,主要分为7个层级: 物理层数据链路层网络层传输层会话层表示层应用层 虽然OSI模型在理论上更全面,但是在实际网络通讯中,TCP/IP模型更加实…

LabVIEW电子水泵性能测试平台

开发了一种车用电子水泵性能测试平台,该平台以工控机为载体,利用LabVIEW开发上位机软件,采用PLC控制阀门和水泵等电气元件,通过RS485进行数据采集并传输到上位机。通过上位机与下位机的协同控制,实现了数据交互处理和性…

LeetCode题练习与总结:寻找旋转排序数组中的最小值Ⅱ--154

一、题目描述 已知一个长度为 n 的数组,预先按照升序排列,经由 1 到 n 次 旋转 后,得到输入数组。例如,原数组 nums [0,1,4,4,5,6,7] 在变化后可能得到: 若旋转 4 次,则可以得到 [4,5,6,7,0,1,4]若旋转 …

基于Java Web的考编论坛网站的设计与实现+lw+源码+讲解+调试+视频演示

第3章 系统分析 用户的需求以及与本系统相似的在市场上存在的其它系统可以作为系统分析中参考的资料,分析人员可以根据这些信息确定出本系统具备的功能,分析出本系统具备的性能等内容。 3.1可行性分析 尽管系统是根据用户的要求进行制作,但…

聚鼎贸易:装饰画生意能不能做起来2024

在2024年,随着人们对家居美学和个性化表达的需求日益增长,装饰画作为一种简单而直接的方式,来提升空间品味及展示个人风格的市场需求也随之扩大。许多人都对涉足这一行业抱有浓厚的兴趣,但究竟这门生意能否成功做大,需…

Unity 资源 之 战斗魔法咒语 - 第二卷(Combat Magic Spells - Volume II)

🎉Unity Asset Store 宝藏免费资源:战斗魔法咒语 - 第二卷 前言资源包内容领取兑换码 前言 各位游戏开发爱好者、Unity 开发者们,今天要给大家带来一个超棒的消息!在 Unity Asset Store 上,全新的免费资源“战斗魔法咒…

Java高级重点知识点-27-Java反射机制

文章目录 Java反射机制概述理解Class类并获取Class的实例Class 类 类的加载与ClassLoader类加载过程类的初始化触发条件类加载器的作用ClassLoader 创建运行时类的对象获取运行时类的完整结构调用运行时类的指定结构反射的应用:动态代理Proxy类AOP(Aspec…

JavaWeb系列二十一: 数据交换和异步请求(JSON, Ajax)

文章目录 官方文档official documents官方文件官方文件official documentsJSON介绍JSON快速入门JSON对象和字符串对象转换应用案例注意事项和细节 JSON在java中使用说明JSON在Java中应用场景应用实例 Ajax基本介绍Ajax是什么Ajax经典应用场景 Ajax原理示意图传统的web应用Ajax原…

Vue3打包发布,刷新出现的空白页面和错误

Vue3打包发布出现的错误:Failed to load module script: Expected a JavaScript module script but the server responded with a MIME type of text/html. Strict MIME type checking is enforced for module scripts per HTML spec. 第一次点击访问到这个路径&…

粉笔推出国内首个职教行业大模型,助力学员高效学习

7月12日,粉笔正式推出其自主研发的首个专注于职教行业的垂域大模型,并将于8月1日上线粉笔AI老师 “粉笔头”,为学员提供个性化、智能化的辅导服务。 在垂域大模型的基础上,粉笔结合10年来的教研积累、独有数据搭建RAG系统&#x…

java上手

java上手 文章目录 java上手0.注释1.简单的输出2.从控制台读取输入3.标识符4.变量5.赋值6.常量7.命名习惯 0.注释 // 单行注释 /*多行注释*/ /**对类和方法进行说明*/1.简单的输出 public class HelloWorld{public static void main(String[] args){System.out.println("…

使用MAVSDK向PX4模拟器发送启飞与降落指令

1.使用docker启动PX4模拟器 docker run --rm -it jonasvautherin/px4-gazebo-headless:1.14.3 开始启动 启动中 PX4启动成功 创建QGC连接 mavlink start -p -u 14556 -t 192.168.1.66 -o 14550 启动QGC连接PX4模拟器 在QGC中执行各种指令

TensorFlow系列:第五讲:移动端部署模型

项目地址:https://github.com/LionJackson/imageClassification Flutter项目地址:https://github.com/LionJackson/flutter_image 一. 模型转换 编写tflite模型工具类: import osimport PIL import tensorflow as tf import keras import …

电子画册制作全攻略,从零开始制作

在这个数字化时代,电子画册作为一种新型的传播媒介,已经越来越受到人们的青睐。它以生动活泼、互动性强、传播速度快等特点,迅速成为了企业宣传、个人展示的优质选择。那么,如何从零开始制作一款引人入胜的电子画册呢?…

pdf文件如何快速英文转中文?

要将 PDF 文件中的英文内容转换为中文,你可以使用以下几种方法: 1、在线翻译工具: 使用网上的免费在线翻译工具,如Google翻译、百度翻译或有道翻译,将整个 PDF 文档粘贴到工具中进行翻译。 2、专业翻译软件&#xf…

数据结构——(双)链表

文章目录 1. 定义 2. 双链表和单链表的区别 3. 代码示例 3.1 双链表节点和结构定义 3.2 初始化双链表 3.3 返回双链表的长度 3.4 在指定位置插入元素 3.5 在末尾插入元素 3.6 删除指定位置的元素并返回被删除的元素 3.7 删除末尾元素 3.8 获取指定位置的元素 3.9 修…

笔记:使用Microsoft.EntityFrameworkCore.Proxies做数据库延迟加载

一、目的: Microsoft.EntityFrameworkCore.Proxies 是一个Entity Framework Core的扩展包,它提供了对延迟加载的支持。延迟加载是一种ORM(对象关系映射)行为,允许在首次访问导航属性时,自动从数据库加载相关…

面向对象进阶基础练习

Java学习笔记(新手纯小白向) 第一章 JAVA基础概念 第二章 JAVA安装和环境配置 第三章 IntelliJ IDEA安装 第四章 运算符 第五章 运算符联系 第六章 判断与循环 第七章 判断与循环练习 第八章 循环高级综合 第九章 数组介绍及其内存图 第十章 数…