面向对象编程的艺术:构建高效可扩展的软件

在这里插入图片描述

🤍 前端开发工程师(主业)、技术博主(副业)、已过CET6
🍨 阿珊和她的猫_CSDN个人主页
🕠 牛客高级专题作者、在牛客打造高质量专栏《前端面试必备》
🍚 蓝桥云课签约作者、已在蓝桥云课上架的前后端实战课程《Vue.js 和 Egg.js 开发企业级健康管理项目》、《带你从入门到实战全面掌握 uni-app》

文章目录

  • 一、引言
    • 面向对象编程的定义和背景
    • 面向对象编程与其他编程范式的区别
  • 二、面向对象编程的核心概念
    • 对象和类
    • 封装、继承和多态
  • 三、面向对象编程的优势和注意事项
    • 优势
    • 注意事项

一、引言

面向对象编程的定义和背景

面向对象编程(Object-Oriented Programming,OOP)是一种编程范式,它将数据和操作这些数据的代码封装在一起,形成一个对象。对象是一个包含数据和操作这些数据的函数的实体

OOP 的核心概念包括对象、类、封装、继承和多态

  • 对象是一个包含数据和操作这些数据的函数的实体。
  • 类是一个模板,用于创建具有相同属性和方法的对象。
  • 封装是将数据和操作这些数据的函数封装在一起,以保护数据的隐私。
  • 继承是从一个类继承属性和方法,并将其应用于另一个类。
  • 多态是指不同的对象可以对相同的消息做出不同的响应。
    在这里插入图片描述

OOP 起源于 20 世纪 60 年代的计算机科学研究,当时研究人员开始意识到传统的编程方式存在一些问题。传统的编程方式通常将数据和操作这些数据的代码分开,这使得代码难以维护和扩展。OOP 的出现解决了这些问题,因为它将数据和操作这些数据的代码封装在一起,形成一个对象。这种封装使得代码更加模块化,易于维护和扩展。

OOP 已经成为现代编程中的一种主流编程范式,被广泛应用于各种编程语言,如 Java、Python、C++ 等。它的优点包括代码重用性高、易于维护和扩展、代码更加清晰和易于理解等。

面向对象编程与其他编程范式的区别

编程范式面向对象编程(OOP)过程式编程函数式编程
数据和操作的组织方式数据和操作被封装在对象中数据和操作是分开的,通过函数调用进行交互数据和操作通过函数进行处理
数据封装支持不支持支持
继承和多态支持不支持不支持
代码复用通过对象和类实现通过函数和模块实现通过函数和高阶函数实现
代码可维护性较好较好较好

需要注意的是,这些编程范式并不是互斥的,它们可以在同一项目中结合使用。选择哪种编程范式取决于项目的需求和目标。

二、面向对象编程的核心概念

对象和类

对象和类是面向对象编程(Object-Oriented Programming,OOP)中的两个重要概念。

  • 对象是一个包含数据和操作这些数据的函数的实体。它是类的实例,可以被创建、修改和销毁。对象具有属性和方法,属性是对象的数据,方法是对象的操作。例如,在一个学生管理系统中,学生可以被视为一个对象,它具有姓名、年龄、性别等属性,以及注册、选课、查询成绩等方法。
  • 类是一个模板,用于创建具有相同属性和方法的对象。类定义了对象的结构和行为,它包含了对象的属性和方法的声明。类可以被继承和扩展,以创建具有更复杂行为的对象。例如,在学生管理系统中,可以定义一个学生类,它包含了学生的属性和方法的声明。然后,可以通过创建学生类的实例来创建具体的学生对象。

类和对象之间的关系类似于蓝图和实际产品之间的关系。类定义了对象的结构和行为,而对象是类的实例,它具有类中定义的属性和方法。通过创建类的实例,可以创建具有相同结构和行为的多个对象,从而提高代码的复用性和可维护性。

以下是一个简单的 JavaScript 代码示例,展示了如何创建对象和类:

// 创建一个学生对象
var student = {name: "John",age: 18,gender: "Male"
};// 打印学生对象的信息
console.log(student.name + " is " + student.age + " years old and is " + student.gender);// 创建一个学生类
function Student(name, age, gender) {this.name = name;this.age = age;this.gender = gender;
}// 创建一个学生类的实例
var student1 = new Student("Alice", 16, "Female");// 打印学生类实例的信息
console.log(student1.name + " is " + student1.age + " years old and is " + student1.gender);

在上面的示例中,我们首先创建了一个名为 student 的对象,其中包含了学生的姓名、年龄和性别信息。然后,我们使用 console.log 函数打印了学生对象的信息。

接下来,我们创建了一个名为 Student 的类,该类包含了三个属性:nameagegender。我们使用 new 关键字创建了一个 Student 类的实例 student1,并为其属性赋值。最后,我们使用 console.log 函数打印了学生类实例的信息。

封装、继承和多态

封装、继承和多态是面向对象编程(OOP)的三个重要特性,它们可以帮助我们构建更加灵活、可扩展和可维护的代码。

  • 封装(Encapsulation)是指将对象的属性和方法封装在一起,形成一个独立的单元。对象的内部细节对外部世界是隐藏的,只能通过对象的公共接口(属性和方法)来访问对象的内部状态。封装可以保护对象的内部状态不受外部干扰,提高代码的安全性和可靠性。
  • 继承(Inheritance)是指一个类可以从另一个类或多个类中继承属性和方法。继承可以提高代码的复用性,减少代码的重复编写。子类可以继承父类的属性和方法,并可以根据需要进行扩展和修改。
  • 多态(Polymorphism)是指不同的对象可以对同一消息做出不同的响应。多态可以提高代码的灵活性和可扩展性。在面向对象编程中,多态通常通过继承和方法重载来实现。

下面是一个简单的 JavaScript 代码示例,展示了封装、继承和多态的使用:

// 创建一个父类 Person
function Person(name, age) {this.name = name;this.age = age;
}// 创建一个子类 Student,继承自 Person
function Student(name, age, major) {Person.call(this, name, age);this.major = major;
}// 继承 Person 的属性和方法
Student.prototype = Object.create(Person.prototype);
Student.prototype.constructor = Student;// 重写 Person 的方法
Student.prototype.introduce = function() {return "我是" + this.name + ",今年" + this.age + "岁,我的专业是" + this.major;
};// 创建两个子类的实例
var student1 = new Student("Alice", 18, "计算机科学");
var student2 = new Student("Bob", 20, "物理学");// 打印子类实例的信息
console.log(student1.introduce()); // 输出:我是Alice,今年18岁,我的专业是计算机科学
console.log(student2.introduce()); // 输出:我是Bob,今年20岁,我的专业是物理学

在上面的示例中,我们创建了一个名为 Person 的父类和一个名为 Student 的子类。子类 Student 继承了父类 Person 的属性和方法,并通过 Person.call 方法将父类的构造函数应用于子类的实例。然后,我们使用 Object.create 方法创建了一个新的 Student 原型对象,并将其赋值给 Student.prototype,以实现继承。

接下来,我们重写了父类的 introduce 方法,使其能够根据子类的实例属性返回不同的介绍信息。最后,我们创建了两个子类的实例 student1student2,并调用它们的 introduce 方法来打印介绍信息。

通过这个示例,我们可以看到封装、继承和多态的使用。封装通过将对象的属性和方法封装在一起,保护了对象的内部状态。继承通过子类继承父类的属性和方法,实现了代码的复用。多态通过不同的对象对同一消息做出不同的响应,提高了代码的灵活性和可扩展性。

三、面向对象编程的优势和注意事项

优势

  • 代码复用
  • 可维护性
  • 扩展性
    在这里插入图片描述

注意事项

  • 对象设计的复杂性
  • 性能考虑
  • 代码可读性

在这里插入图片描述

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

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

相关文章

zabbix6.4.0配置邮件及企微机器人群聊告警

一、邮件告警 根据公司邮箱自行配置,电子邮件、用户账号密码填自己的邮箱账号密码 动作本次使用的默认的,如果为了更加美观可自行修改。 二、企业微信机器人告警 首先在企微上创建群聊,之后添加群聊机器人 将地址复制,后面用 …

使用NVM管理多个版本的node.js

1、nvm介绍: nvm全英文也叫node.js version management,是一个nodejs的版本管理工具。nvm是node.js版本管理工具,为了解决node.js各种版本存在不兼容现象可以通过它可以安装和切换不同版本的node.js 2、下载nvm地址: https://d…

测试用例设计方法六脉神剑——第一剑:入门试招,等价边界初探 | 京东物流技术团队

1 背景及问题 G.J.Myers在<软件测试技巧>中提出&#xff1a;测试是为了寻找错误而运行程序的过程&#xff0c;一个好的测试用例是指很可能找到迄今为止尚未发现的错误的测试&#xff0c; 一个成功的测试是揭示了迄今为止尚未发现的错误的测试。 对于新手来说&#xff0…

ChatGPT成为“帮凶”:生成虚假数据集支持未知科学假设

ChatGPT 自发布以来&#xff0c;就成为了大家的好帮手&#xff0c;学生党和打工人更是每天都离不开。 然而这次好帮手 ChatGPT 却帮过头了&#xff0c;莫名奇妙的成为了“帮凶”&#xff0c;一位研究人员利用 ChatGPT 创建了虚假的数据集&#xff0c;用来支持未知的科学假设。…

Flutter加固原理及加密处理

​ 引言 为了保护Flutter应用免受潜在的漏洞和攻击威胁&#xff0c;加固是必不可少的措施之一。Flutter加固原理主要包括代码混淆、数据加密、安全存储、反调试与反分析、动态加载和安全通信等多个方面。通过综合运用这些措施&#xff0c;可以提高Flutter应用的安全性&#xf…

从订阅式需求发展,透视凌雄科技DaaS模式增长潜力

订阅制&#xff0c;C端消费者早已耳熟能详&#xff0c;如今也凭借灵活、服务更新稳定的特点&#xff0c;逐渐成为B端企业服务的新热点。 比如对中小企业而言&#xff0c;办公IT设备等配套支出都必不可少&#xff0c;但收入本身并不稳定&#xff0c;购置大堆固定资产&#xff0…

利用 NRF24L01 无线收发模块实现传感器数据的无线传输

NRF24L01 是一款常用的无线收发模块&#xff0c;适用于远程控制和数据传输应用。本文将介绍如何利用 NRF24L01 模块实现传感器数据的无线传输&#xff0c;包括硬件的连接和配置&#xff0c;以及相应的代码示例。 一、引言 NRF24L01 是一款基于 2.4GHz 射频通信的低功耗无线收发…

Python实现FA萤火虫优化算法优化BP神经网络分类模型(BP神经网络分类算法)项目实战

说明&#xff1a;这是一个机器学习实战项目&#xff08;附带数据代码文档视频讲解&#xff09;&#xff0c;如需数据代码文档视频讲解可以直接到文章最后获取。 1.项目背景 萤火虫算法&#xff08;Fire-fly algorithm&#xff0c;FA&#xff09;由剑桥大学Yang于2009年提出 , …

RPG项目01_场景及人物动画管理器

基于“RPG项目01_UI登录”&#xff0c;新建一个文件夹名为Model&#xff08;模型&#xff09; 将资源场景拖拽至Model中 找到相应场景双击进入 红色报错部分Clear清掉即可&#xff0c;我们可以重做 接下来另存场景 起名为Game 点击保存 场景就保存至Scene中了 在文件夹下新创建…

Git修改远程仓库名称

1、先直接在远程点仓库名&#xff0c;然后左侧菜单栏找settings-general&#xff0c;然后直接修改工程名&#xff0c;保存即可。 2、还是在settings-general下&#xff0c;下拉找到Advanced点击Expand展开&#xff0c;然后下拉到最底部 在Change path里填入新的项目名称&#x…

Docker 环境中 Spring Boot 应用的 Arthas 故障排查与性能优化实战

&#x1f680; 作者主页&#xff1a; 有来技术 &#x1f525; 开源项目&#xff1a; youlai-mall &#x1f343; vue3-element-admin &#x1f343; youlai-boot &#x1f33a; 仓库主页&#xff1a; Gitee &#x1f4ab; Github &#x1f4ab; GitCode &#x1f496; 欢迎点赞…

LeetCode刷题---汉诺塔问题

个人主页&#xff1a;元清加油_【C】,【C语言】,【数据结构与算法】-CSDN博客 前言&#xff1a;这个专栏主要讲述递归递归、搜索与回溯算法&#xff0c;所以下面题目主要也是这些算法做的 我讲述题目会把讲解部分分为3个部分&#xff1a; 1、题目解析 2、算法原理思路讲解 …

TiDB 在咪咕云原生场景下的实践

导读 咪咕是中国移动旗下的视频科技公司&#xff0c;门户系统是其核心业务之一。 为满足用户的多样化需求&#xff0c;咪咕计划对其数据库进行升级。 经过对中国主流国产数据库的测试评估后&#xff0c;咪咕选择了 TiDB&#xff0c;并成功将其落地于门户系统云化项目。 TiDB 为…

HarmonyOS脚手架:UI组件之文本和图片

主要实现UI组件文本和图片的常见效果查看&#xff0c;本身功能特别的简单&#xff0c;其目的也是很明确&#xff0c;方便大家根据效果查看相关代码实现&#xff0c;可以很方便的进行复制使用&#xff0c;当然了&#xff0c;这些所谓的小功能都是开胃小菜&#xff0c;脚手架的最…

如何通过内网穿透实现远程访问Linux SVN服务

文章目录 前言1. Ubuntu安装SVN服务2. 修改配置文件2.1 修改svnserve.conf文件2.2 修改passwd文件2.3 修改authz文件 3. 启动svn服务4. 内网穿透4.1 安装cpolar内网穿透4.2 创建隧道映射本地端口 5. 测试公网访问6. 配置固定公网TCP端口地址6.1 保留一个固定的公网TCP端口地址6…

Python之Appium 2自动化测试(Android篇)

一、环境搭建及准备工作 1、Appium 2 环境搭建 请参考另一篇文章: Windows系统搭建Appium 2 和 Appium Inspector 环境 2、安装 Appium-Python-Client&#xff0c;版本要求3.0及以上 pip install Appium-Python-ClientVersion: 3.1.03、手机连接电脑&#xff0c;并在dos窗口…

人机协同

人机协同是指人和机器之间进行合作和协同工作的方式&#xff0c;人机协同是人工智能技术发展的一个重要方向&#xff0c;通过人机协同的方式&#xff0c;可以充分利用机器的智能和人的智慧&#xff0c;共同实现更高效、更智能的工作和生活方式。人机协同可以应用于各种领域和场…

第0篇红队笔记-APT-HTB

nmap 80 port-web尝试 searchploit-无结果 资源隐写查看-无结果 135 port rpcclient rpcinfo.py rpcdump.py rpcmap.py rpcmap.py爆破UUID 查看该UUID的表代表的服务能搜到UUID的漏洞 IOXIDResolver提取IPv6地址 IPV6-nmap smb smb探测目录 文件下载 测试其他目录 zip文件…

Grammarly premium语法检测工具使用方法,及删除检测记录

科研写作神器&#xff1a;Grammarly—语法&#xff0c;标点&#xff0c;单词拼写错误修改。 一、背景 在写英文论文时&#xff0c;作为母语不是英语的我们&#xff0c;不可避免的存在语法错误或笔误&#xff0c;这时就需要Grammarly语法修改软件帮助我们进行修正&#xff0c…

【参数估计】---点估计之矩估计

点估计之矩估计 &#x1f47b;什么是参数估计&#x1f47b;引例---理解参数估计&#x1f41f;点估计&#x1f36d;引例&#x1f36d;点估计问题 &#x1f41f;矩估计&#x1f36d;预备知识&#x1f36d;矩估计的求解步骤&#x1f36d;矩估计例题 &#x1f47b;什么是参数估计 在…