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

在这里插入图片描述

🤍 前端开发工程师(主业)、技术博主(副业)、已过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.hqwc.cn/news/238455.html

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

相关文章

有道翻译取消划词搜索及AI图标

安装了有道翻译后,只要选中内容就会弹出搜索框,让人十分烦躁,分享一下如何关闭此功能。 1)关闭划词功能 打开有道翻译软件,取消划词,取词的勾选即可 2)关闭ai图标 1:打开设置 2:点击AIBox 3:关…

Asp.Net Core Web Api内存泄漏问题

背景 使用Asp.Net Core Web Api框架开发网站中使用到了tcp socket通信,网站作为服务端开始tcp server,其他的客户端不断高速给它传输信息时,tcp server中读取信息每次申请的byte[]没有得到及时的释放,导致内存浪费越来越多&#…

反序列化漏洞详解(一)

目录 一、php面向对象 二、类 2.1 类的定义 2.2 类的修饰符介绍 三、序列化 3.1 序列化的作用 3.2 序列化之后的表达方式/格式 ① 简单序列化 ② 数组序列化 ③ 对象序列化 ④ 私有修饰符序列化 ⑤ 保护修饰符序列化 ⑥ 成员属性调用对象 序列化 四、反序列化 …

CentOS系统环境搭建(二十二)——Git进阶

centos系统环境搭建专栏🔗点击跳转 文章目录 Git进阶1.更新代码2.只拉取Git仓库的部分目录内容2.1初始化空白仓库2.2配置git仓库2.3开启稀疏检出属性2.4设置指定拉取的目录2.5 更新代码 Git进阶 1.更新代码 基于上一篇文章CentOS系统环境搭建(二十一&…

Pytest做性能测试?

Pytest其实也是可以做性能测试或者基准测试的。是非常方便的。 可以考虑使用Pytest-benchmark类库进行。 安装pytest-benchmark 首先,确保已经安装了pytest和pytest-benchmark插件。可以使用以下命令安装插件: pip install pytest pytest-benchmark …

如何快速选出一支好股票?

俗话说得好:股票选得好,收益少不了!不用多说,相信大伙儿都知道选一支好股票究竟有多重要。 但是选股可不像咱们去菜市场买菜一样,看着顺眼就成。选股,其实是一个专业性特别强的技术活儿。 目前最常用的选股…

常见电子元器件封装形式

1.TO(晶体管外形封装) 2.DIP(双列封装) 3.SOT(小型晶体管) 4.SOP(小型封装) 5.SOIC(小型IC) 6.SIP(单列直插封装) 7.LCC(带…

Maven的安装和使用

Maven是一个基于项目对象模型(POM),可以管理项目构建、依赖管理、项目报告等的工具,使构建Java项目更容易。可以说Maven是一个项目管理和构建工具,它可以从管理项目的角度出发,将开发过程中的需求纳入进来&…

Quirks(怪癖)模式是什么?它和 Standards(标准)模式有什么区别?

前言: "Quirks模式"和"Standards模式"是与HTML文档渲染模式相关的两种模式。它们影响着浏览器如何解释和渲染HTML和CSS。理解它们之间的区别对于前端开发者和网页设计师来说是至关重要的。本文将深入讨论Quirks模式和Standards模式的区别,以及它…

​iOS Class Guard github用法、工作原理和安装详解及使用经验总结

iOS Class Guard是一个用于OC类、协议、属性和方法名混淆的命令行工具。它是class-dump的扩展。这个工具会生成一个symbol table,这个table在编译期间会包含进工程中。iOS-Class-Guard能有效的隐藏绝大多数的类、协议、方法、属性和 实例变量 名。 iOS-Class-Guard不…

.Net core 6.0 升8.0

1 Update Visual Studio 2 3 用Nutget 更新不同套件版本 更新后结果如下:

苹果 macOS 14.1.2 正式发布 更新了哪些内容?

苹果今日向 Mac 电脑用户推送了 macOS 14.1.2 更新(内部版本号:23B92 | 23B2091),本次更新距离上次发布隔了 28 天。 需要注意的是,因苹果各区域节点服务器配置缓存问题,可能有些地方探测到升级更新的时间略…