封装的魅力

WTL实践经验总结(不断更新) 学习WTL快半年了,但是实际工作中根本用不到。一是因为公司不允许,二是有效的资源还比较少。通常情况下,自娱自乐的时候我还是选择WTL来做界面。在这里,我把平时学习实践过程中的东西(思想)保留下来,供大家参考,也可以互相进步。 这篇文章可能会很长很长,但是划分了4个模块: 一.WTL的使用 二.WTL的结构 三.WTL的剖析 四.WTL的资源 五.WTL的项 阅读详情

简介

以前创建一个model,全都设置为private 属性,然后都是无脑的getter和setter来获取和设置值,自从看了一篇文章后对封装有了新的了解

封装的意义是什么

1.信息隐藏

2.类通过保留有限的访问接口,外部访问仅能通过类提供的方式(或函数)来访问内部信息或者数据

通过访问权限控制,隐藏内部数据,外部仅能通过类提供的有限的接口访问、修改内部数据

反例

public class Wallet {
    private String id;
    private long createTime;
    private BigDecimal balance;
    private long balanceLastModifiedTime;

    /**
     * shit code :
     *
     * @param id
     * @param createTime
     * @param balance
     * @param balanceLastModifiedTime
     */
    public Wallet(String id, long createTime, BigDecimal balance, long balanceLastModifiedTime) {
        this.id = id;
        this.createTime = createTime;
        this.balance = balance;
        this.balanceLastModifiedTime = balanceLastModifiedTime;
    }

    public String getId() {
        return id;
    }

    public void setId(String id) {
        this.id = id;
    }

    public long getCreateTime() {
        return createTime;
    }

    public void setCreateTime(long createTime) {
        this.createTime = createTime;
    }

    public BigDecimal getBalance() {
        return balance;
    }

    public void setBalance(BigDecimal balance) {
        this.balance = balance;
    }

    public long getBalanceLastModifiedTime() {
        return balanceLastModifiedTime;
    }

    public void setBalanceLastModifiedTime(long balanceLastModifiedTime) {
        this.balanceLastModifiedTime = balanceLastModifiedTime;
    }
}

以上代码有一下缺点:

id可以在类内部生成

createTime:不应该暴露set方法,在对象构造的时候才会被赋值

balanceLastModifiedTime:不应该暴露 set方法,在改变balance才会被赋值

balance:默认初始化为0,只有加,减两种情况,不应该暴露set方法

如果我们将属性封装起来,暴露少许的几个必要的方法给调用者使用,调用者就不需要了解太多背后的业务细节,用错的概率就减少很多

就比如你买电视给你一个遥控板,你直接使用遥控板操作电视就行了~,而不是把电视的内部原理图给你,然后让你输出高低电平来控制电视

优美的代码

package p2.code.obj.lab_05_01_nice;

import java.math.BigDecimal;
import java.util.UUID;

public class Wallet {
    private String id;
    private long createTime;
    private BigDecimal balance;
    private long balanceLastModifiedTime;

    public Wallet() {
        this.id = UUID.randomUUID().toString();
        this.createTime = System.currentTimeMillis();
        this.balance = BigDecimal.ZERO;
        this.balanceLastModifiedTime = System.currentTimeMillis();
    }

    public String getId() {
        return this.id;
    }

    public long getCreateTime() {
        return this.createTime;
    }

    public BigDecimal getBalance() {
        return this.balance;
    }

    public long getBalanceLastModifiedTime() {
        return this.balanceLastModifiedTime;
    }

    public void increaseBalance(BigDecimal increasedAmount) throws InvalidAmountException {
        if (increasedAmount.compareTo(BigDecimal.ZERO) < 0) {
            throw new InvalidAmountException("无效的数量");
        }
        this.balance.add(increasedAmount);
        this.balanceLastModifiedTime = System.currentTimeMillis();
    }

    public void decreaseBalance(BigDecimal decreasedAmount) throws InvalidAmountException, InsufficientAmountException {
        if (decreasedAmount.compareTo(BigDecimal.ZERO) < 0) {
            throw new InvalidAmountException("无效的金额");
        }
        if (decreasedAmount.compareTo(this.balance) > 0) {
            throw new InsufficientAmountException("...");
        }
        this.balance.subtract(decreasedAmount);
        this.balanceLastModifiedTime = System.currentTimeMillis();
    }
}

封装的好处

1.保护数据:

防止外部随意修改 setBalance是可以修改为任意值(-1,-100)等,
但是实际业务角度来说钱包余额,只会有两种修改方式:增或减,缩小数据修改范围,让数据更安全,

2.易用性

时刻保持最小暴露,反而能提高易用性
如果暴露的是setBalance和setBalanceLastModifiedTime,外部调用者要熟悉业务,更改setBalance时要setBalanceLastModifiedTime

“探究C++编程语言的魅力与奥妙“——从入门到进阶 总的来说,C++是一门非常强大而灵活的编程语言,它在计算机领域中拥有广泛的应用。除了C语言的基本语法之外,C++还增加了很多有用的特性,如类、模板、异常处理等。其中,类是C++最重要的特性之一,它可以将数据和方法封装在一起,并提供了强大的面向对象编程能力。C++语言是从C语言扩展而来的,它吸收了C语言的许多优点,并增加了一些新的特性,如封装、继承、多态等。其中,STL是C++标准库中的一个重要组成部分,它提供了容器、算法、迭代器等方便的工具,大大提高了程序员的开发效率。 阅读详情

相关推荐

KVM环境下Tesla T4/v100 vGPU性能调优手册:显存分配策略与帧率限制解除

本文深入探讨了在KVM虚拟化环境中,针对NVIDIA Tesla T4和V100 GPU进行vGPU性能调优的实战策略。核心内容包括如何根据AI训练、科学计算等不同负载,精细规划显存分配策略,并详细介绍了通过修改sysfs参数解除帧率限制器(FRL)以释放硬件潜力的方法,旨在帮助用户实现虚拟化GPU资源的最大化利用。

cuda7parallel的博客 619

JDBC方法封装:各种封装,带你体验封装的魅力

我们知道,JDBC就是java后台连接数据库的纽带,当这个纽带连接上后,我们可以使用java语句去操控数据库信息,这个系统化的连接方式我们经常会使用,如果每次都要重写一遍那么多行代码,未免太麻烦了,因此,可以写一个方法,方法体就是获得一个Collection实例,而不仅仅是获取连接可以封装,任何经常写的代码都可以封装。在需要使用他的时候只需要调用某个方法就能快速得到我们想要的数据简化代码,提高代码复用性。

m0_73402102的博客 2642

workbench谐响应

定义材料 打开Engineering Data定义材料,在分析时不同部分选择不同材料 建模 打开Geometry建模,我举的例子很简单就一根光秃秃的轴 因为要加轴承,在轴上创建imprint face 因为要用point mass代替轴上原来的盘,在轴上盘的位置新建一个Plane,用Slice方法将轴从XYPlane3分成两段 施加边界条件以及谐响应分析 打开Model 1.在两段轴的交界面处,创建Point Mass,输入质量与转动惯量,位置在轴线上 2.mass point promote to.

my blogs include programming, math, physics.回首过去,放眼未来。 leslielee.blog.youkuaiyun.com 5882

4.方法的魅力与封装

本章详细介绍了Java中方法的基本概念、定义、参数传递机制、重载与递归,以及类的封装特性。方法是程序的基本单元,通过接收参数、执行操作并返回结果,提高代码的复用性和可维护性。参数传递采用值传递方式,基本数据类型传递值副本,引用数据类型传递引用副本。方法重载允许在同一类中定义同名但参数列表不同的方法,递归则是方法调用自身的技术,需注意终止条件和性能开销。封装是面向对象编程的核心,通过访问修饰符将数据和方法绑定,隐藏内部细节,确保数据的安全性和完整性。本章还总结了核心知识点,并提供了基础与进阶练习题,帮助读者巩

weixin_40593051的博客 546

Java后端开发实战:手把手教你用e签宝API搞定电子合同签署(附完整代码)

本文详细解析了Java后端开发中如何通过e签宝API实现电子合同签署的全流程,包括环境配置、核心架构设计、Token管理、签署流程实现及回调处理等关键环节。通过完整的代码示例和最佳实践,帮助开发者高效集成电子签名服务,提升企业数字化转型效率。

weixin_42662293的博客 530

vue支付项目-APP支付宝支付功能

如果用户已安装支付宝客户端,商家 App 唤起支付宝完成支付,支付完后跳回到商家 App 内,最后展示支付结果。如果用户没有安装支付宝客户端,商家 App 内会调起支付宝网页支付收银台,用户登录支付宝账号,支付完后展示支付结果。1.点击按钮开通或者续费,会验证是否选择会员商品以及对协议是否查看选中(这里根据项目需要自行验证,可忽略),验证通过打开选择支付方式弹窗页面,选择微信支付或者支付宝支付;4.可取消支付,放弃支付会返回会员页面,页面提示支付取消;1.判断支付方式,如果是2,则是支付宝支付方式。

总结前端开发中遇到的问题,分享前端知识 1万+

指针的魅力——手动封装string.h内的字符串相关函数

学习指针前唯唯诺诺,学习指针后重拳出击!

weixin_46012253的博客 192

【专栏必读】王道考研408计算机组成原理万字笔记使用说明及章节导航

本文是为准备408王道计算机组成原理考试的学生精心整理的万字笔记,涵盖了从计算机系统概述、数据表示和运算到存储系统、指令系统等多个章节的重点内容。本文强调了学习笔记的重要性,并分享了学习建议,如按视频课逻辑记录,建立学科框架。笔记详细记录了每章的关键知识点,包括存储器、CPU、I/O系统的工作原理,还附带了习题和思维导图,旨在帮助考生高效复习。

快乐江湖的博客 9万+

Go的魅力, 函数式(柯里化, 闭包, 高阶函数), Python@装饰器, 封装

Go朴实无华的代码风格是函数式的无尽魅力.函数式有3个别名, 高大上的"柯里化", 编程语言的"闭包", 数学气息的"高阶函数".Python没有Go的func匿名函数, 但是具有可爱的语法糖(@装饰器).编程语言都是相通的, 层层封装造就了灵活的风格.理解了Go的"函数式", 再理解内嵌/接口/重写(设计模式), 剩下的是各个领域的工具了, 就可以写出服务于业务的代码.感悟于函数式h...

angsu1392的博客 228

R语言缺失值填补|插值法、均值法、邻近法

本文主要介绍如何利用R语言进行数值型缺失值的填补。主要使用zoo包中的na.aggregate() 、na.approx()、na.locf() 函数进行缺失值的均值填补、线性插值填补以及邻近值填补。

Mrrunsen的博客 3841

RK3576 PCIE接口调试:基于RTL8111HS的网卡驱动移植

检查项方法电源电压复位时序检查设备树 reset-gpios链路速率设备识别lspci -vvv驱动加载。

小灰灰的博客 731

深入理解Java三大特性:封装、继承和多态

通过本文的深入探讨,我们详细了解了Java面向对象编程的三大核心特性:封装、继承和多态。它们是Java语言强大功能和灵活性的基石,也是编写高质量、可维护、可扩展代码的关键。封装:强调信息隐藏和数据保护,通过private属性和public的方法,确保数据的安全性和完整性,同时降低了模块间的耦合度,提高了代码的可维护性和重用性。继承:实现了代码的复用和扩展,通过extends关键字,子类可以继承父类的非私有特性,并在其基础上进行功能扩展或行为重写。

weixin_56018532的博客 959

PCL 使用点云创建数字高程模型DEM【2025最新版】

使用点云创建数字高程模型DEM,并将结果保存为高程图像。博客长期更新,本文最近更新时间为:2025年9月15日。

点云侠的博客 2294

JAVA--继承封装练习+应用 [象棋比赛呈现]

JAVA–继承封装练习+应用 [象棋比赛呈现] 算是课后作业,上节课讲了封装继承,老师让我们试着呈现一场足球比赛或者篮球比赛或者其他你能想到的用上学到知识的有意思的事情, 这是老师的原话 哐哐哐(*********) 10:36:10 @全体成员 下周二我们不是检查作业,而是大家上台表现作业。本周末各个小组可以设计自己的场景,做面向对象作业练习。如果没有更好的场景和想法,就用我们的足球场景为例也可...

陈杉菜 840

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

Java语言的魅力:深入解析其核心特点

Java是一门完全面向对象的编程语言,它将现实世界中的各种事物抽象成对象,通过封装、继承和多态三大特性,构建出层次清晰、结构合理的软件系统。垃圾回收器会自动检测不再使用的对象,并回收其所占用的内存空间,开发者无需手动进行内存管理,这大大降低了因内存管理不当导致程序崩溃的风险。同时,Java的异常处理机制能够有效地捕获和处理程序运行过程中出现的错误和异常情况,使程序在遇到问题时能够进行适当的处理,而不至于直接崩溃,从而保证了程序的稳定性和可靠性。类加载器会验证字节码的合法性,防止恶意代码的注入;

YJL_lll的博客 334

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

【转】java方法 、 封装

转自:https://blog.youkuaiyun.com/sky274548769/article/details/80518896 java的面向对象指的是将我们的现实当中的事物抽象成一段java代码来描述,那现实当中的实体对象具有哪些方面是需要用代码的描述? 任何一个类需要从两方面描述 1、特征、属性 —-一定时间范围内不会变化 2、行为、功能、方...

weixin_43712330的博客 202

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

java基础05--包、访问修饰符、封装、继承、super关键字、方法重写和覆盖、多态

包、访问修饰符、封装、继承、super关键字、方法重写和覆盖、多态

weixin_43903745的博客 921

Objective - c随笔

类的拓展的三种方法 : category 给系统的类添加方法(只能是方法不能是属性,属性在OC中貌似是不可以更改的) 其实 就还是体现OC的核心价值观 封装,系统允许你添加方法,以使你简化主函数中的代码,简洁. 私以为,OC给我最大震撼的地方就是方法的封装,不仅仅是自己写的方法封装,去看系统的各个类的方法,增删改查,特殊功 能的实现,让它有种特殊的魅力,想让学习者揭开它的面纱

chuckerW的博客 497

Java 面向对象 面试题

1、封装具有的特性? 答:(1)在类的定义中设置访问对象属性(数据成员)及方法(成员方法)的权限,限制本类对象及其他类的对象使用的范围。 (2)提供一个接口来描述其他对象的使用方法 (3)其他对象不能直接修改本对象所拥有的属性和方法 (4)封装反映了事物的相对独立性  (5)封装在编程上的作用是使对象以外的部分不能随意存取对象的内部数据(属性),从而有效地避免了外部错误对它的“交叉感染”

pink1253157935的专栏 5887

Python与面向对象编程的七大核心概念:解析与示例

面向对象编程呢,就像是一个神奇的魔法,它能把这些现实世界里的实体变成代码中的一个个“小世界”,也就是对象啦。每个类可以包含多个方法(函数),其中最特别的是__init__方法,它是一个特殊的方法,被称为类的构造器。今天咱们探讨面向对象编程(Object-Oriented Programming,简称OOP)的七大核心概念,看看在Python这个强大的编程语言里,它们是如何被精彩呈现的,还有超多有趣的示例代码哦,保证让你轻松理解,一起来吧!这个方法哦,类就像汽车的图纸,对象是按图纸生产的实体车。

zhulangfly的专栏 2073

【Python学习打卡-Day29】复盘日:类的终极封装术与我的29天思维进化史

各位坚持打卡的伙伴们,大家好!今天是我们学习之旅的第 29 天,一个非常值得纪念的复盘日。训练营的进度已近一半,我们即将完成 Python 基础与数据分析的“上篇”,准备开启深度学习的“下篇”。今天,我们将学习一个高级技巧——类装饰器,它是对“封装”思想的终极诠释。但更重要的是,我们将借此机会,停下来,回顾我们走过的路,写下这 29 天的学习心得。这不仅是对知识的梳理,更是对我们编程思维成长的一次深刻反思。29 天,弹指一挥间。从对 Python 的懵懂,到如今能欣赏其设计之美,每一步都离不开实践和思考。

2301_76812716的博客 621

焊接BGA过程

我们能够享受现代电子设备小巧玲珑但又功能强大的优点,得益于芯片的小型封装的优势,其中一个最为优秀的封装形式就是锡球阵列封装(BGA)。这种封装形式芯片的管脚是分布于芯片底部的一系列点阵排列的焊盘,通过均匀的锡球与PCB板连接在一起。 比起通过传统芯片两边或者四周引线管脚封装,它极大提高了芯片引脚的数量,同时缩短了引脚与电路板之间的距离。密集的锡球连接也大大改善了芯片的散热能力。 手机内部多层电路板...

TSINGHUAJOKING 8403

Node.js使用IPFS实现文件上传和下载

文章目录前言一、项目准备二、项目实现1.安装IPFS所需依赖2.封装ipfs接口3.开启ipfs4.使用node调用ipfs 前言 提示:本文使用Node.js结合IPFS实现文件的上传和下载,IPFS可以简单的理解为一个分布式存储系统,在这上面上传或下载文件的速度十分快,亲测下载速度达35M/s,可以说是非常快的了。如果对IPFS的安装不熟悉的可以去看我的另一篇文章《IPFS的安装》。 一、项目准备 首先安装好Node.js和IPFS,安装Node.js可以参考另一篇文章Node.js的安装与使用。安装

xiaoning9299的博客 1万+

我与PHP面向对象编程的邂逅

那时的我,只会简单地写一些基本的HTML和CSS,对于PHP,也只是停留在一些简单的函数和过程化编程上。前所未有地,随着项目的逐渐复杂,我逐渐意识到,单纯的过程化编程已经无法满足我的需求。封装让我能够隐藏对象的内部细节,只暴露必要的接口给外界使用,这大大增加了代码的安全性和可维护性。它更让我深刻地认识到,编程不仅仅是一种技能,更是一种态度,一种对待工作和生活的态度。但是,正是这些困难和挫折,让我更加坚定地走在OOP的道路上。我发现,当我真正理解并掌握了OOP的精髓时,我的编程能力也得到了极大的提升。

2401_86114092的博客 212

汉语是世界上唯一一种面向对象的高级语言(转)

声明:除了汉语之外,我只会一点英语和日语。因此说是“唯一”略显夸张,有吸引眼球的嫌疑,请大家原谅。严谨地说,标题应该是“汉语是一种面向对象的高级语言”。  在网上看到过很多有关汉语和英语比较的文章,他们写的都很不错,并且列举了大量的事例来证明汉语或者英语是优秀的。不过,我想用计算机软件设计的观点,来理性地分析汉语和英语的优缺点。经过分析,我可以断言:汉语是世界上唯一一种面向对象的高级语言。而以英

akjsdhg的专栏 1445

PHP面向对象试题:我的一次难忘经历

可以这么认为我定义了一个“动物”类,并给它添加了一个“发声”方法。然后,我创建了“狗”类,让它继承自“动物”类。在“狗”类中,我重写了“发声”方法,使其输出“汪汪”。我相信,只要我不断学习和实践,我一定能够成为一名优秀的PHP开发者。试题里有一道题让我印象深刻,它要求我们设计一个“动物”类,并实现一个“发声”的方法。这个类还需要有一个子类“狗”,而“狗”类需要重写“发声”方法,使其发出“汪汪”的声音。当看到屏幕上显示出“汪汪”两个字时,我松了一口气,同时也感到一种难以言表的喜悦。

A150922923282的博客 343
上一篇: git -- Question:fatal: refusing to merge unrelated histories
下一篇: 什么是抽象?
code222vip
博客等级 码龄12年 33粉丝 30原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值