如何掌握面向对象编程的四大特性、Lambda 表达式及 I/O 流:全面指南

这里写目录标题

  • OOP语言的四大特性
  • lambda
  • 输入/输出流(I/O流)

OOP语言的四大特性

面向对象编程(OOP)是一种编程范式,它通过使用“对象”来组织代码。OOP 的四大特性是封装、继承、多态和抽象。这些特性帮助程序员更好地管理复杂的代码,使程序更易于理解和维护。

类-》实体的抽象类型
实体(属性,行为) -》 ADT(abstract data type)
属性-》成员变量
行为-》成员方法
类有三种访问限定符:public private protected

类的成员方法一经编译,所有的方法参数,都会加一个this指针

new =》malloc内存开辟 + 构造函数
delete ps; == 析构函数 +free(ps)

对象默认的拷贝构造是做内存的数据拷贝
关键是对象如果占用外部资源,那么浅拷贝就出现问题了。

  1. 封装(Encapsulation)
    封装是指将数据(属性)和操作数据的方法(行为)打包在一起,形成一个“类”。封装有助于将对象的内部状态保护起来,只允许通过定义好的接口进行访问。这种信息隐藏的特性不仅有助于防止外部代码直接修改对象的内部数据,还使得程序的维护和修改变得更加容易。
  • 封装的优势包括:

    控制访问权限:通过定义公共接口和私有数据,程序员可以控制哪些数据可以被外部访问,哪些数据是只对对象内部可见的。这种控制有助于避免不必要的副作用和错误。

    提高代码的可维护性:封装使得类的内部实现与外部使用分离,任何对内部实现的修改不会影响到外部使用者,只要接口保持不变。

    减少复杂性:封装可以将复杂的功能模块化,用户只需了解如何使用接口,而不需要了解内部的实现细节。

  1. 继承(Inheritance)
    继承是面向对象编程中的一种机制,它允许一个类(子类)继承另一个类(父类)的属性和方法。继承使得代码可以重用,同时也可以扩展和修改父类的功能。
  • 继承的优势包括:
    代码重用:通过继承,子类可以重用父类的代码,避免重复编写相同的功能。
    扩展性:子类可以在继承父类的基础上添加新的属性和方法,或者重写父类的方法,以实现更多的功能。
    层次结构:继承允许创建一个层次化的类结构,这使得系统的组织和分类变得更加清晰。
  1. 多态(Polymorphism)
    多态是指一个接口(方法)可以有多种实现方式。具体来说,子类可以重写父类的方法,提供不同的实现,从而使得同一操作在不同对象上表现出不同的行为。
  • 多态的优势包括:
    灵活性:多态允许在运行时决定调用哪个方法实现,这使得程序可以处理不同类型的对象,而无需了解它们的具体类型。
    扩展性:通过多态,可以方便地添加新的子类,而无需修改现有的代码。只需确保新子类遵循父类定义的接口即可。
    简化代码:使用多态可以简化代码的结构,因为它允许通过统一的接口处理不同类型的对象,从而减少了复杂的条件判断。
  1. 抽象(Abstraction)
    抽象是指从对象的具体实现中提取出公共的特性和行为,形成一个抽象的类或接口。抽象类和接口定义了子类应该实现哪些方法,但不提供具体的实现细节。
  • 抽象的优势包括:
    提高可维护性:抽象化使得系统的设计更具整体性,开发人员可以专注于设计公共接口,而不是具体的实现细节。
    增强灵活性:通过定义抽象类或接口,程序员可以在不同的子类中实现不同的功能,而不会影响到抽象类或接口的设计。
    促进模块化设计:抽象化帮助将系统拆分成更小、更可管理的模块,从而提高系统的整体结构性。

lambda

lambda表达式语法:
[捕获外部变量] (形参列表)->返回值{操作代码}

如果lambda表达式的返回值不需要,可以省略
[捕获外部变量]
[] :表示不捕获任何外部所有变量
[=] :以传值的方式捕获外部所有变量
[&] :以传引用的方式捕获外部变量
[this] :捕获外部的this指针
[=,&a] :以传值的方式捕获外部所以变量,但是a变量以传引用的方式捕获
[a,b] :以值传递的方式捕获外部变量a和b
[a,&b] :a以值传递的方式捕获,b以引用的方式捕获

输入/输出流(I/O流)

输入/输出流(I/O流)是计算机编程中用于处理输入和输出的抽象概念。它们提供了一种统一的方式来读取输入数据和将输出数据发送到不同的设备或文件。

I/O流以流的形式传输数据。流可以被看作是数据在程序和外部资源(如键盘、屏幕、文件等)之间的通道。数据可以从流中读取(输入)或写入到流中(输出),这样就实现了程序和外部资源之间的数据交换。

I/O流通常分为输入流和输出流两种类型:

输入流(Input Stream):用于从外部资源(如键盘、文件等)读取数据到程序中。程序可以逐个读取流中的数据,直到达到所需的数据或流结束。

输出流(Output Stream):用于将程序中的数据写入到外部资源(如屏幕、文件等)。程序可以将数据按照需要写入流中,然后流会将数据传输到指定的外部资源。
I/O流的基本概念:

输入流:用于读取数据。常见的输入流有从文件读取、从网络接收数据、从用户输入接收数据等。

输出流:用于写入数据。常见的输出流有向文件写入、向网络发送数据、向用户输出数据等。

流的分类:

字节流:处理基本的输入和输出操作,适用于所有类型的I/O操作。常见的字节流类有 InputStream 和 OutputStream。

java
InputStream inputStream = new FileInputStream("input.txt");
OutputStream outputStream = new FileOutputStream("output.txt");

字符流:处理字符数据,提供了对字符的编码和解码支持。常见的字符流类有 Reader 和 Writer。

java
Reader reader = new FileReader("input.txt");
Writer writer = new FileWriter("output.txt");

I/O流在不同的编程语言和操作系统中有不同的实现方式和API。例如,在C++中,常见的I/O流类包括 std::cin 和 std::cout 用于控制台输入和输出,以及 std::ifstream 和 std::ofstream 用于文件的输入和输出。而在Java中,常见的I/O流类包括 System.in 和 System.out 用于标准输入和输出,以及 FileInputStream 和 FileOutputStream 用于文件的输入和输出。

I/O流提供了一种通用的、抽象的方式来处理输入和输出,使得程序可以与不同的外部资源进行交互,并实现数据的读取和写入

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

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

相关文章

SQL语句中in条件超过1000怎么办?

博客主页: 南来_北往 系列专栏:Spring Boot实战 引言 当遇到SQL语句中IN条件超过1000个的情况时,可以采取以下几种策略来有效处理这一问题: 使用临时表:将IN列表中的值存储在临时表中,并将该临时表与查询表进行J…

初识redis(String,Hash,List,Set,SortedSet)

认识NoSql sql关系型数据库 nosql非关系型数据库 nosql具有非结构化,Key/Value,Document,Draph 无关联的,非sql,BASE(原子性,持久性,一致性,隔离性) 认识r…

数组与贪心算法——179、56、57、228(2简2中)

179. 最大数(简单) 给定一组非负整数 nums,重新排列每个数的顺序(每个数不可拆分)使之组成一个最大的整数。 注意:输出结果可能非常大,所以你需要返回一个字符串而不是整数。 解法一、自定义比较…

Linux-RPM与YUM

目录 前言: rpm包的管理 rpm包的简单查询指令 ​编辑 rpm包名的基本格式 rpm包名基本格式 ​编辑 卸载rpm包 细节问题 安装rpm包 yum yum的基本指令 安装指定的yum包 yum报错 问题描述: 解决方法: 前言: Linux操…

模型压缩之剪枝

(1)通道选择 这里要先解释一下: (1)通道剪枝 那我们实际做法不是上面直接对所有层都添加L1正则项,而是仅仅对BN层权重添加L1正则项。通道剪枝具体步骤如下: 1.BN层权重添加L1正则项&#xf…

还不懂BIO,NIO,AIO吗

BIO(Blocking I/O)、NIO(Non-blocking I/O)和 AIO(Asynchronous I/O)是 Java 中三种不同的 I/O 模型,主要用于处理输入 / 输出操作。 一、BIO(Blocking I/O) 定义与工作原…

ANSA联合ABAQS基于梁单元的螺栓预紧力分析实例

1、在螺栓孔之间创建一个模拟螺栓 ABAQUS界面→AUXILIARIES→bolt→分鳖选择上下两圈节点,这样在螺栓孔中间就会生成一个梁单元。 中键确定,因为螺杆使用的是变形体,所以接下来需要为其创建一个属性: 单击ok,完成虚拟螺栓的创建,该螺栓两端是刚性MPC,中间是弹性的梁单元…

美畅物联丨科技赋能校车安全:智慧监控管理系统的创新应用

1、背景 1.1应用需求 孩子,作为国家未来的希望之星和民族发展的潜力所在,其安全与健康向来都是社会瞩目的核心要点。校车,作为孩子们日常出行的关键交通载体,其安全性更是时刻牵动着每一个家庭的敏感神经。然而,不可…

利用TCP编程实现FTP功能

模拟FTP核心原理:客户端连接服务器后,向服务器发送一个文件。文件名可以通过参数指定,服务器端接收客户端传来的文件(文件名随意),如果文件不存在自动创建文件,如果文件存在,那么清空…

828华为云征文|使用sysbench对Mysql应用加速测评

文章目录 ❀前言❀测试环境准备❀测试工具选择❀测试工具安装❀mysql配置❀未开启Mysql加速测试❀开启Mysql加速测试❀总结 ❀前言 大家好,我是早九晚十二。 昨天有梳理一篇关于华为云最新推出的云服务器产品Flexus云服务器X。当时有说过,这次的华为云F…

【科研小白系列】使用screen创建虚拟终端,实现本地关机后服务器仍然跑模型

博主简介:努力学习的22级计算机科学与技术本科生一枚🌸博主主页: 是瑶瑶子啦往期回顾: 【科研小白系列】模型训练已经停止(强行中断)了,可GPU不释放显存,如何解决? 每日一言🌼: “生…

k8s网络

pod 网络 在K8S集群里,多个节点上的Pod相互通信,要通过网络插件来完成,比如Calico网络插件。 使用kubeadm初始化K8S集群时,有指定一个参数–pod-network-cidr10.18.0.0/16 它用来定义Pod的网段。 而我们在配置Calico的时候&#…

Trm理论 2(Word2Vec)

神经网络模型(NNLM)和Word2Vec NNLM模型是上次说过的模型,其目的是为了预测下一个词。 softmax(w2tanh(w1x b1)b2) 会得到一个副产品词向量 而Word2Vue就是专门求词向量的模型 softmax(w2*(w1*x b1)b2) Word2Vec softmax(w2*(w1*x b1)b…

jmeter性能测试HTML测试报告生成详解

作用:jmeter支持生成HTML测试报告,方便查看测试计划中获得图表和统计信息 命令: jmeter -n -t [jmx file] -l [result file] -e -o [html report folder] 示例:jmeter -n -t login.jmx -l result.jtl -e -o ./report jmx文件&a…

Gmsh:一个开源的三维有限元网格生成工具

Gmsh 是一个开源的三维有限元网格生成工具,主要用于在计算流体力学(CFD)和有限元分析(FEA)中生成复杂几何体的网格。它具有强大的几何建模、网格生成、求解器接口和后处理功能。Gmsh 适用于多种物理领域的模拟,包括流体力学、结构分析、电磁学等。 下载地址:https://gm…

【HarmonyOS】- 内存优化

文章目录 知识回顾前言源码分析1. onMemoryLevel2. 使用LRUCache优化ArkTS内存原理介绍3. 使用生命周期管理优化ArkTS内存4. 使用purgeable优化C++内存拓展知识1. Purgeable Memory总结知识回顾 前言 当应用程序占用过多内存时,系统可能会频繁进行内存回收和重新分配,导致应…

Java中Date类型上的注解

在日常开发中,涉及到日期时间类型Date和常用的注解DateTimeFormat和JsonFormat java.util.Date; org.springframework.format.annotation.DateTimeFormat; com.fasterxml.jackson.annotation.JsonFormat; 一 Date类型字段不使用注解 Data AllArgsConstructor N…

开源还是封闭?人工智能的两难选择

这篇文章于 2024 年 7 月 29 日首次出现在 The New Stack 上。人工智能正处于软件行业的完美风暴中,现在马克扎克伯格 (Mark Zuckerberg) 正在呼吁开源 AI。 关于如何控制 AI 的三个强大观点正在发生碰撞: 1 . 所有 AI 都应该是开…

MiniGPT-3D, 首个高效的3D点云大语言模型,仅需一张RTX3090显卡,训练一天时间,已开源

项目主页:https://tangyuan96.github.io/minigpt_3d_project_page/ 代码:https://github.com/TangYuan96/MiniGPT-3D 论文:https://arxiv.org/pdf/2405.01413 MiniGPT-3D在多个任务上取得了SoTA,被ACM MM2024接收,只拥…

【软件设计师真题】下午题第一大题---数据流图设计

解答数据流图的题目关键在于细心。 考试时一定要仔细阅读题目说明和给出的流程图。另外,解题时要懂得将说明和流程图进行对照,将父图和子图进行对照,切忌按照常识来猜测。同时应按照一定顺序考虑问题,以防遗漏,比如可以…