我的代码习惯---高封装性

之前维护公司ERP的时候,感觉有很多代码,感觉很多的地方写的很乱.

当时只是觉得很乱,现在想来,它很多的乱都可以归结为代码封装性太低.

封装性的本质

封装性的本质是,一个类自己管理自己的【数据】,和与之相关的【方法】.

其他类和对象,不能随意修改我的数据和数据结构,不能随意修改我的方法.

你想要我的数据我给你,你想要我的方法,我来执行.

下面是一些会破坏封装性的做法.

什么是不好程序

跳来跳去的程序是不好的程序.

编程的历史告诉我们了.

1.滥用继承

继承破坏封装性的论述网上有很多.

实际编码过程中,如果父类是别人写的,我去写子类的时候,就不那么自由了.

很有可能我写了一个方法,但是运行结果不是我想要的,那我就要去父类里面找了,哪个方法修改了我子类中的变量?

这就好像是不成器的儿子,这个事情我管不了,你去问我爸吧.

对于这种问题,网上给出的解决方案都是用接口代替继承.

但是当我面对一个已经存在的管的太多的基类的时候,我有一个折中方案------写一个接口,也保留原来的基类.

继承用到最核心的思想就是分类,滥用继承就像是化学一样,化学总是很多奇怪的有个性的分类,几乎所有的金属都会XXX,但是有一种金属Z就不会这样.

我不想准确的想明白,A/B到底哪里相同,哪里不同.....这很难......

但是想明白A/B相同的一两个点,提取出接口来......却很简单明了.......

-------------------------------------------------------------------------------------------

要牢记的是,面向对象的继承,并没有解决编程的核心问题.

他关心的是怎样的语法符合人的思维,怎样能简化思考,提高编码效率.

所以说,当理解类和类之间的继承关系,会耗费我们太多脑力的时候,就该放弃这种方法了.

-------------------------------------------------------------------------------------------

当学习面向对象的时候,继承和多态是最精彩的地方.

似乎有了他,我们就可以既少写代码,又有高度的灵活性.

但是坏的设计比好的多,一旦设计坏了,后面还要花更多时间修改.

那我为什么不用个简单粗暴易上手的方法呢?

------------------------------------------------------------------------------------------------------------------------

2.把自己当变量传递

我不知道这是一种什么神奇的手法.

当我A类想要该我的成员变量V1的值,所以我调用了B类的某个方法.

B类可不是一个静态类,他的那个方法可不是给变量加个负号那么简单,它还要针对A中其他变量的状态做出不同的行为.

也是就是说有些业务逻辑又写到B里去了.

-----------------------------------------------------------------------------------------------------------------------

这不就是干涉别国内政吗????

我要改我自己V1,那我应该光传参数V1啊,我自己整个还要过去????

--------------------------------------------------------------------------------------------------------------

这样不好,正确的做法是我自己的业务我自己处理.

和其他类有数据交互,专门写方法.

单纯的算法让静态帮助类完成

原文地址:https://www.cnblogs.com/fabao/p/10925043.html

时间: 2024-07-31 14:41:55

我的代码习惯---高封装性的相关文章

JAVASE(七)面向对象:封装性(特性之一)、构造器、属性、关键字

一.封装性 1.为什么要使用封装性? 创建对象以后,可以通过对象.属性名的方法进行赋值.只能限制数据的类型,和数值的范围.但是往往我们需要更多的其它条件的限制.在属性的声明处无法限制.所以我们采用如下的方式. 使用权限修饰符对属性进行修饰,在其它的类中就无法直接对属性进行调用和赋值. 提供公共的方法,通过方法给属性进行赋值,或者通过方法获取值.在方法的内部我们可以对属性的赋值的进行条件的限制. 2.封装性思想具体的代码体现: 封装性的体现(狭义上) 1.私有化属性 2.提供公共的set/get方

javascript中提高代码的封装性

我出的面试题中,有一条是问如何避免页面引用JS,出现函数.变量重复.冲突的. 从大的方面讲,应该引入javascript的模块化开发,符合AMD规范之类: 从小的方面说,大概就是限定变量和函数的作用域了,这也涉及到一点大家如雷贯耳的闭包概念. 众所周知,javascript没有类,只有函数.其实它的函数也跟类差不多了,函数里面可以定义函数.而对于.net来说,直到近期出现的C#7,才支持这一点. 所以,我们可以将函数和变量,都定义在一个函数里面,这样即与外部隔绝矣: <html> <he

探索 ConcurrentHashMap 高并发性的实现机制

简介 ConcurrentHashMap 是 util.concurrent 包的重要成员.本文将结合 Java 内存模型,分析 JDK 源代码,探索 ConcurrentHashMap 高并发的具体实现机制. 由于 ConcurrentHashMap 的源代码实现依赖于 Java 内存模型,所以阅读本文需要读者了解 Java 内存模型.同时,ConcurrentHashMap 的源代码会涉及到散列算法和链表数据结构,所以,读者需要对散列算法和基于链表的数据结构有所了解. Java 内存模型 由

JAVA- 面向对象的三大特征(封装性、继承性、多态性)

程序的发展经历了两个主要阶段:面向过程.面向对象.面向对象是当前软件开发的主流. 面向过程就是分析出解决所需要的步骤,然后用函数将这些步骤一步一步实现,使用的时候一个一个一次调用. 面向对象是把构成问题的事务分解成各个对象.建立对象的目的不是为了完成一个步骤而是为了描述某个事物在整个解决问题步骤中的行为. 面向对象是为了专注在程序中采用封装.继承.多态等设计方法.面向对象的设计是一种提供符号设计系统的面向对象的实现过程,它用非常接近实际领域术语的方法吧系统构造成"现实世界"的对象. 面

如何养成良好的书写代码习惯

我们在写代码时应该有良好的书写习惯,保持良好的格式及规则! 1.代码的应该有必要的缩进 2.不是必要的情况下保持引号的一致,即单双不要混用 3.一行不要写多个选择器,一个分号后应该换行 4.有上下关系的选择器尽量写在一起,增强可读性 5.class类等的命名应有一定规则 6.代码整洁,重用性 7.选择器的嵌套层次不要太深,太深此阅读困难 8.嵌套的代码也不要太长,如果大于了一个页面也会使阅读变得困难 9.嵌套本来是为了方便和增强层次高,如果反而显得更乱了,那还是别嵌套了 整洁的代码的好处是显而易

多态性(polymorphism),封装性(encapsulation),内聚(cohesion)以及耦合(coupling)的基本概念

Java的三大特性:多态.封装.继承. Java程序设计尊崇的思想:高内聚.低耦合. 多态性:Java官方给出的定义: The dictionary definition of polymorphism refers to a principle in biology in which an organism or species can have many different forms or stages. This principle can also be applied to obje

多线程——探索 ConcurrentHashMap 高并发性的实现机制

ConcurrentHashMap 的结构分析 为了更好的理解 ConcurrentHashMap 高并发的具体实现,让我们先探索它的结构模型. ConcurrentHashMap 类中包含两个静态内部类 HashEntry 和 Segment.HashEntry 用来封装映射表的键 / 值对:Segment 用来充当锁的角色,每个 Segment 对象守护整个散列映射表的若干个桶.每个桶是由若干个 HashEntry 对象链接起来的链表.一个 ConcurrentHashMap 实例中包含由若

[C++]关于接口的设计与声明--对封装性的理解

设计与声明 所谓软件设计,是"令软件做出你希望它做的事情"的步骤和方法,通常以颇为一般性的构想开始,最终十足的细节,以允许特殊接口(interface)的开发.这些接口而后必须转换为C++声明式.本文讨论对良好C++接口的设计和声明. 1. 让接口容易被正确使用,不易被误用 C++拥有许多的接口,function接口,class接口,template接口-.每一种接口实施客户与你的代码互动的手段.理想情况下,客户总是会准确的使用你的接口并获得理想的结果,而如果客户错误的使用了接口,代码

【PHP面向对象(OOP)编程入门教程】9.封装性(var与public,protected,private的关系)

封装性是面象对象编程中的三大特性之一,封装性就是把对象的属性和服务结合成一个独立的相同单位,并尽可能隐蔽对象的内部细节,包含两个含义: 1. 把对象的全部属性和全部服务结合在一起,形成一个不可分割的独立单位(即对象). 2. 信息隐蔽,即尽可能隐蔽对象的内部细节,对外形成一个边界[或者说形成一道屏障],只保留有限的对外接口使之与外部发生联系. 封装的原则在软件上的反映是:要求使对象以外的部分不能随意存取对象的内部数据(属性),从而有效的避免了外部错误对它的"交叉感染",使软件错误能够局