当前位置: 首页 > news >正文

面向对象编程(OOP)深度解析:思想、原则与应用

🚀 作者 :“码上有前”
🚀 文章简介 :Java
🚀 欢迎小伙伴们 点赞👍、收藏⭐、留言💬
在这里插入图片描述
在这里插入图片描述

面向对象编程(OOP)深度解析:思想、原则与应用


一、面向对象编程的基本思想

1. 定义与起源

面向对象编程(Object-Oriented Programming, OOP)是一种以对象为中心的编程范式,通过将数据(属性)和操作数据的行为(方法)封装到对象中,从而提高代码的模块化、重用性和维护性。

  • 起源:
    20世纪60年代,OOP思想在Simula语言中首次被提出,用于模拟现实世界中的实体。Smalltalk进一步发展了OOP的核心概念。C++和Java等语言将OOP推广到主流开发中,使之成为软件工程的基础范式。

  • 特点与面向过程的比较:

特点面向过程编程面向对象编程
核心单元函数和流程对象和类
模块化方式分解为函数分解为对象
数据与行为关系数据与操作分离数据与行为封装到对象中
扩展性通过修改已有代码扩展功能通过继承和多态扩展功能
代码重用性函数级别的重用类和对象级别的重用

2. 核心思想

OOP的核心思想可以归纳为以下几点:

  1. 将现实世界抽象为对象:
    对象是程序的基本单元,它不仅包含描述状态的数据,还包含操作这些数据的行为。

    示例:

    实体:汽车  
    属性:颜色、品牌、速度  
    行为:启动、刹车、加速  
    
  2. 对象之间的交互:
    对象通过方法调用相互作用,形成系统的整体逻辑。例如,在一个银行系统中,Account对象通过transfer()方法与另一个账户进行交互。

  3. 模块化和分工:
    每个对象独立完成自己的任务,形成“职责单一”的模块。例如:订单管理对象处理订单,用户管理对象负责用户相关操作。


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

OOP的核心概念包括类与对象、封装、继承和多态,具体如下:

概念定义作用示例
类与对象类是对象的模板,对象是类的实例定义属性与行为,实现对象具体化Car类与实例化的myCar对象
封装隐藏对象内部细节,仅暴露必要接口提高安全性与代码独立性使用private保护数据,通过getter访问
继承子类继承父类的属性与行为,并可扩展代码重用,增强扩展性Dog继承Animal,扩展“叫声”行为
多态同一接口的不同实现增强灵活性父类引用调用子类方法
1. 类与对象
  • 定义:
    类是对一类事物的抽象描述,对象是类的具体实例化。

    代码示例:

    class Car {String brand;int speed;void drive() {System.out.println(brand + " is driving at " + speed + " km/h.");}
    }
    Car myCar = new Car();
    myCar.brand = "Toyota";
    myCar.speed = 120;
    myCar.drive(); // 输出:Toyota is driving at 120 km/h.
    
2. 封装
  • 定义:
    封装通过访问修饰符(如private)隐藏类的内部实现,只允许通过公共方法(如gettersetter)访问数据,从而保护数据完整性。

    修饰符的作用:

修饰符访问范围用途
public任何地方可访问暴露必要的公共方法
private仅类内部访问隐藏敏感数据
protected同包和子类可访问子类扩展父类功能

示例:

class Account {private double balance;public double getBalance() {return balance;}public void deposit(double amount) {if (amount > 0) balance += amount;}
}
3. 继承
  • 定义:
    继承允许子类复用父类的属性和方法,并可以新增或重写功能。

    示例:

    class Animal {void eat() {System.out.println("This animal eats food.");}
    }
    class Dog extends Animal {void bark() {System.out.println("This dog barks.");}
    }
    Dog myDog = new Dog();
    myDog.eat(); // 输出:This animal eats food.
    myDog.bark(); // 输出:This dog barks.
    
4. 多态
  • 定义:
    多态通过方法重载和方法重写实现,同一个接口可以有不同的实现。

    示例:

    class Shape {void draw() {System.out.println("Drawing a shape.");}
    }
    class Circle extends Shape {@Overridevoid draw() {System.out.println("Drawing a circle.");}
    }
    Shape myShape = new Circle();
    myShape.draw(); // 输出:Drawing a circle.
    

三、面向对象编程的设计原则

原则名称定义示例
单一职责原则(SRP)一个类只负责一个任务将用户管理和订单管理分开为独立类
开放封闭原则(OCP)类对扩展开放,对修改封闭使用接口添加新支付方式,而不修改代码
依赖倒置原则(DIP)高层模块不依赖低层模块,依赖抽象通过依赖注入减少组件之间的耦合

四、面向对象编程的实际应用

1. 案例:银行账户管理系统

需求: 创建一个管理储蓄账户和支票账户的银行系统。

类名属性方法
Accountbalancedeposit(), withdraw()
SavingAccountinterestRateaddInterest()
CheckingAccountoverdraftLimitcheckOverdraft()

代码:

class Account {protected double balance;public void deposit(double amount) {balance += amount;}public void withdraw(double amount) {balance -= amount;}
}class SavingAccount extends Account {private double interestRate;public void addInterest() {balance += balance * interestRate;}
}
2. 在框架中的实践

OOP广泛应用于开发框架,如Spring(Java)和Django(Python),其中控制反转(IoC)和依赖注入(DI)极大提高了模块的解耦性。


五、面向对象编程的优劣势与发展趋势

1. 优势
  • 模块化设计提高代码重用性和维护性。
  • 更贴近现实世界的抽象,易于理解和设计复杂系统。
2. 局限性
  • 对初学者学习曲线较陡。
  • 在某些性能敏感场景下开销较大。
3. 发展趋势
  • 函数式编程的融合(如Java的Lambda表达式)。
  • 在大数据和人工智能领域的应用扩展。

总结

通过面向对象编程,开发者能够更清晰地建模现实问题,并构建出灵活、可扩展的软件系统。OOP不仅是一种技术工具,更是一种解决复杂问题的思想方法。

都看到这啦,点个赞再走吧!🚀

相关文章:

面向对象编程(OOP)深度解析:思想、原则与应用

🚀 作者 :“码上有前” 🚀 文章简介 :Java 🚀 欢迎小伙伴们 点赞👍、收藏⭐、留言💬 面向对象编程(OOP)深度解析:思想、原则与应用 一、面向对象编程的基本…...

iPhone 17 Air看点汇总:薄至6mm 刷新苹果轻薄纪录

我们姑且将这款iPhone 17序列的超薄SKU称为“iPhone 17 Air”,Jeff Pu在报告中提到,我同意最近关于 iPhone 17超薄机型采用6 毫米厚度超薄设计的传言。 如果这一测量结果被证明是准确的,那么将有几个值得注意的方面。 首先,iPhone…...

「OpenCV交叉编译」ubuntu to arm64

Ubuntu x86_64 交叉编译OpenCV 为 arm64OpenCV4.5.5、cmake version 3.16.3交叉编译器 gcc-arm-10.2-2020.11-x86_64-aarch64-none-linux-gnu 可在arm或linaro官网下载所需版本,本文的交叉编译器可点击链接跳转下载 Downloads | GNU-A Downloads – Arm Developer L…...

Stable Diffusion的解读(二)

Stable Diffusion的解读(二) 文章目录 Stable Diffusion的解读(二)摘要Abstract一、机器学习部分1. 算法梳理1.1 LDM采样算法1.2 U-Net结构组成 2. Stable Diffusion 官方 GitHub 仓库2.1 安装2.2 主函数2.3 DDIM采样器2.4 Unet 3…...

amd显卡和nVidia显卡哪个好 amd和英伟达的区别介绍

AMD和英伟达是目前市场上最主要的两大显卡品牌,它们各有自己的特点和优势,也有不同的适用场景和用户群体。那么,AMD显卡和英伟达显卡到底哪个好?它们之间有什么区别?我们又该如何选择呢?本文将从以下几个方…...

软件测试—— Selenium 常用函数(一)

前一篇文章:软件测试 —— 自动化基础-CSDN博客 目录 前言 一、窗口 1.屏幕截图 2.切换窗口 3.窗口设置大小 4.关闭窗口 二、等待 1.等待意义 2.强制等待 3.隐式等待 4.显式等待 总结 前言 在前一篇文章中,我们介绍了自动化的一些基础知识&a…...

为什么verilog中递归函数需要定义为automatic?

直接上代码 module automatic_tb;reg [7:0] value;initial begin #0 value < 8d5;#10 $display("result of automatic: %0d", factor_automatic(value));$display("result of static: %0d", factor_static(value));#50 $stop; endfunction reg[7:0] fa…...

23种设计模式-状态(State)设计模式

文章目录 一.什么是状态模式&#xff1f;二.状态模式的结构三.状态模式的应用场景四.状态模式的优缺点五.状态模式的C实现六.状态模式的JAVA实现七.代码解释八.总结 类图&#xff1a; 状态设计模式类图 一.什么是状态模式&#xff1f; 状态模式&#xff08;State Pattern&…...

EventListener与EventBus

EventListener JDK JDK1.1开始就提供EventListener&#xff0c;一个标记接口&#xff0c;源码如下&#xff1a; /*** A tagging interface that all event listener interfaces must extend.*/ public interface EventListener { }JDK提供的java.util.EventObject&#xff1…...

Facebook为什么注册失败了?该怎么解决?

有时候用户在尝试注册Facebook账号时可能会遇到各种问题&#xff0c;导致注册失败或遇到困难。小编会为大家分析Facebook注册失败的可能原因&#xff0c;并提供解决方法&#xff0c;帮助大家顺利完成注册流程。 一、Facebook注册失败的可能原因 1. 账号信息问题&#xff1a; …...

前端数据可视化思路及实现案例

目录 一、前端数据可视化思路 &#xff08;一&#xff09;明确数据与目标 &#xff08;二&#xff09;选择合适的可视化图表类型 &#xff08;三&#xff09;数据与图表的绑定及交互设计 &#xff08;四&#xff09;页面布局与样式设计 二、具体案例&#xff1a;使用 Ech…...

【DVWA】Brute Force暴力破解实战

问尔辈 何等样人 自摸心头 再来求我&#xff1b;若汝能 克存忠孝 持身正直 不拜何妨 1.Brute Force(Low) 相关的代码分析 if( isset( $_GET[ Login ] ) ) {// Get username$user $_GET[ username ];// Check the database$query "SELECT * FROM users WHERE user $…...

23种设计模式速记法

前言 在软件开发的过程中&#xff0c;设计模式作为解决常见问题的通用模板&#xff0c;一直是开发者的重要工具。尤其是在面临复杂系统架构和需求变化时&#xff0c;设计模式不仅能够提升代码的可复用性和扩展性&#xff0c;还能大大提高团队之间的协作效率。然而&#xff0c;…...

第7章硬件测试-7.3 功能测试

7.3 功能测试 7.3.1 整机规格测试7.3.2 整机试装测试7.3.3 DFX测试 功能测试包括整机规格、整机试装和整机功能测试&#xff0c;是整机结构和业务相关的测试。 7.3.1 整机规格测试 整机规格测试包括尺寸、重量、温度、功耗等数据。这些测试数据与设计规格进行比对和校验&…...

动态规划子数组系列一>等差数列划分

题目&#xff1a; 解析&#xff1a; 代码&#xff1a; public int numberOfArithmeticSlices(int[] nums) {int n nums.length;int[] dp new int[n];int ret 0;for(int i 2; i < n; i){dp[i] nums[i] - nums[i-1] nums[i-1] - nums[i-2] ? dp[i-1]1 : 0;ret dp[i…...

《Python浪漫的烟花表白特效》

一、背景介绍 烟花象征着浪漫与激情&#xff0c;将它与表白结合在一起&#xff0c;会创造出别具一格的惊喜效果。使用Python的turtle模块&#xff0c;我们可以轻松绘制出动态的烟花特效&#xff0c;再配合文字表白&#xff0c;打造一段专属的浪漫体验。 接下来&#xff0c;让…...

什么是RESTful API,有什么特点

RESTful API 概述 什么是 RESTful API&#xff1f; RESTful API 是基于 Representational State Transfer&#xff08;表现层状态转移&#xff09;架构风格的 Web 服务接口。REST 是一种设计风格&#xff0c;而不是具体的协议或标准。它定义了一组约束和最佳实践&#xff0c;…...

友思特新闻 | 友思特荣获广州科技创新创业大赛智能装备行业赛初创组优胜企业!

2024年11月19日&#xff0c;第十三届中国创新创业大赛&#xff08;广东广州赛区&#xff09;暨2024年广州科技创新创业大赛智能装备行业赛颁奖典礼隆重举行。 赛事奖项介绍&#xff1a;广州科技创新创业大赛智能装备行业赛 第十三届“中国创新创业大赛&#xff08;广东广州赛区…...

CSS中calc语法不生效

问题起因 在使用calc时发现无法生效&#xff0c;写法是&#xff1a; height:calc(100vh-100px);页面无效果&#xff0c;加空格后就发现有效果了&#xff1a; height:calc(100vh - 100px);这是为什么&#xff1f; calc是什么&#xff1f; css3 的计算属性&#xff0c;用于动态…...

国标GB28181视频平台EasyCVR视频融合平台H.265/H.264转码业务流程

在当今数字化、网络化的视频监控领域&#xff0c;大中型项目对于视频监控管理平台的需求日益增长&#xff0c;特别是在跨区域、多设备、高并发的复杂环境中。EasyCVR视频监控汇聚管理平台正是为了满足这些需求而设计的&#xff0c;它不仅提供了全面的管理功能&#xff0c;还支持…...

ES6 模板字符串详解

ES6 模板字符串详解 ES6&#xff08;ECMAScript 6&#xff09;引入了模板字符串&#xff08;Template Literals&#xff09;&#xff0c;这是一种新的字符串字面量语法&#xff0c;使用反引号&#xff08;&#xff09;来定义字符串。模板字符串不仅支持多行字符串&#xff0c;…...

浏览器插件启动本地程序

浏览器插件支持启动本地程序&#xff0c;且支持win、mac、linux多个平台&#xff0c;使用的是nativeMessaging。nativeMessaging官方api说明。nativeMessaging支持启动本地程序且进行通信。 我们直接拿官方提供的例子进行说明&#xff0c;github地址。 以win为例 1、添加注册…...

Ubuntu ESP32开发环境搭建

文章目录 ESP32开发环境搭建安装ESP-IDF搭建一个最小工程现象 ESP32开发环境搭建 最近有个小项目需要用到能够联网的mcu驱动&#xff0c;准备玩玩esp的芯片&#xff0c;记录下ESP32开发环境搭建的过程。 ESP-IDF 是乐鑫科技为其 ESP32 系列芯片提供的官方开发框架。这个框架主…...

【gitlab】部署

直接RPM安装 部署的方式是&#xff1a;使用外部的nginx作为代理&#xff0c;使用https方式。 1、下载安装文件 gitlab-ce-17.0.3-ce.0.el7.x86_64.rpm 2、安装 yum install gitlab-ce-17.0.3-ce.0.el7.x86_64.rpm 或者安装yum源在线安装: 添加镜像源&#xff1a;新建 /et…...

vue中路由缓存

vue中路由缓存 问题描述及截图解决思路关键代码及打印信息截图 问题描述及截图 在使用某一平台时发现当列表页码切换后点击某一卡片进入详情页后&#xff0c;再返回列表页时页面刷新了。这样用户每次看完详情回到列表页都得再重新输入自己的查询条件&#xff0c;或者切换分页到…...

Github 2024-11-18 开源项目周报 Top15

根据Github Trendings的统计,本周(2024-11-18统计)共有15个项目上榜。根据开发语言中项目的数量,汇总情况如下: 开发语言项目数量Python项目8TypeScript项目4Jupyter Notebook项目2Go项目2Shell项目1OpenHands: 人工智能驱动的软件开发代理平台 创建周期:195 天开发语言:P…...

GRCNN使用onnxruntime和tensorrt推理

下载GRCNN项目&#xff1a;https://github.com/skumra/robotic-grasping.git 导出onnx模型&#xff1a; import torchnet torch.load("trained-models/jacquard-rgbd-grconvnet3-drop0-ch32/epoch_42_iou_0.93") x torch.rand(1, 4, 300, 300).cuda() torch.onnx.…...

java中的this关键字

&#x1f389;&#x1f389;&#x1f389;欢迎来到我的博客,我是一名自学了2年半前端的大一学生,熟悉的技术是JavaScript与Vue.目前正在往全栈方向前进, 如果我的博客给您带来了帮助欢迎您关注我,我将会持续不断的更新文章!!!&#x1f64f;&#x1f64f;&#x1f64f; 文章目录…...

Easyexcel(3-文件导出)

相关文章链接 Easyexcel&#xff08;1-注解使用&#xff09;Easyexcel&#xff08;2-文件读取&#xff09;Easyexcel&#xff08;3-文件导出&#xff09; 响应头设置 通过设置文件导出的响应头&#xff0c;可以自定义文件导出的名字信息等 //编码格式为UTF-8 response.setC…...

iOS应用网络安全之HTTPS

移动互联网开发中iOS应用的网络安全问题往往被大部分开发者忽略, iOS9和OS X 10.11开始Apple也默认提高了安全配置和要求. 本文以iOS平台App开发中对后台数据接口的安全通信进行解析和加固方法的分析. 1. HTTPS/SSL的基本原理 安全套接字层 (Secure Socket Layer, SSL) 是用来…...

怎样做网站推广啊/关键词优化哪家强

概念 算法&#xff1a;任何一个良定义的计算过程&#xff0c;该过程取某个值或者值的集合作为输入并产生某个值或值的集合作为输出。这是比较概念化的定义&#xff0c;我们来分析一下&#xff0c;算法到底是什么&#xff0c;比如有一个问题&#xff1a;计算1到10所有整数的和&…...

wordpress主题手机主题/百度文库个人登录

为什么 redis 单线程却能支撑高并发? 纯内存操作 核心是基于非阻塞的 IO 多路复用机制 单线程反而避免了多线程的频繁上下文切换问题 一、Redis的高并发和快速原因 1.redis是基于内存的&#xff0c;内存的读写速度非常快(纯内存); 数据存在内存中&#xff0c;数据结构用H…...

网站指定关键词优化/运营和营销是一回事吗

web2.0学习平台作为一种新兴的网络学习系统,它与传统网络学习系统相比有许多新兴特点,概括下来,有以下几个方面: 从系统设计的角度看&#xff0c;传统的在线学习系统是一数据为核心的系统&#xff0c;培训机构将所有与在线课程相关的资料放在网上&#xff0c;学员在上…...

网站建设需/网络营销的四大要素

一、功能实现核心&#xff1a;FileSystemObject 对象 其实&#xff0c;要在Javascript中实现文件操作功能&#xff0c;主要就是依靠FileSystemobject对象。在详细介绍FileSystemobject对象的各个属性和方法的使用细节前&#xff0c;先来看看这个对象包括哪些相关对象和集合&…...

wordpress获取点赞数/品牌策略包括哪些内容

t的内省机制剖析&#xff08;转&#xff09;所谓内省是指面向对象语言的一种在运行期间查询对象信息的能力&#xff0c; 比如如果该语句有运行期间检查对象型别的能力&#xff0c;那么我们称它是型别内省&#xff08;type intropection&#xff09;的&#xff0c;型别内省可以用…...

影视网站怎么做原创/百度网页

2019独角兽企业重金招聘Python工程师标准>>> 泛形的基本术语&#xff0c;以ArrayList<E>为例&#xff1a;<>念着typeofArrayList<E>中的E称为类型参数变量ArrayList<Integer>中的Integer称为实际类型参数整个称为ArrayList<E>泛型类型…...