首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

清洁代码:对象应该具有公共属性吗?

清洁代码是指易于阅读、理解和维护的高质量代码。在清洁代码的编写过程中,对象是否应该具有公共属性取决于具体情况。

在面向对象编程中,对象的属性可以是公共的(public)、私有的(private)或受保护的(protected)。公共属性可以被外部访问和修改,私有属性只能在对象内部访问和修改,受保护属性可以在对象内部和子类中访问和修改。

根据面向对象编程的封装原则,应该尽量将对象的属性设置为私有或受保护,以隐藏对象的内部实现细节,避免外部直接访问和修改对象的属性。这样可以提高代码的安全性和可维护性,减少意外的错误和依赖关系。

然而,在某些情况下,对象的公共属性也是有用的。例如,当需要在不同对象之间共享数据或状态时,可以将这些数据或状态设置为公共属性。公共属性还可以用于简化代码的访问和修改操作,提高代码的可读性和易用性。

总结来说,对象是否应该具有公共属性取决于具体情况和设计需求。在编写清洁代码时,应根据封装原则和设计需求来决定属性的可见性。如果需要使用公共属性,可以考虑使用访问器(getter和setter)来控制对属性的访问和修改。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

整洁架构、DDD 和 CQRS 简介

应用程序层是它自己的动物,如果需要,您应该始终能够将其与表示逻辑分离。 ◆ 用户界面 用户界面是该架构中绝对最高的概念层。这是用户直接与之交互的代码。...◆ 公共公共层是一个库或一组库,用于横切关注点,例如日志记录、文本操作、日期/时间算法、配置等,它们对整个系统都是全局的....公共层包含组件和功能的实现细节,这些细节足够通用,可以在应用程序的任何地方使用。在这一点上,这里绝对不应该有任何业务逻辑或与域有关的任何事情。 努力防止这一层膨胀失控。...这与 .NET 团队在过去引入任务并行库 (TPL) 时所做的没有什么不同:他们采用了在应用程序中开发异步控制流的繁重过程,并将所有这些抽象为一流的对象,可以独立于依赖它们的代码进行处理。...重申一下,高级架构基于清洁架构原则,在系统的同心层之间具有明确的概念分离。 系统的最内层,核心的中心,是Domain层,它是使用DDD原则构建的。应用层围绕着领域层,是核心的一部分。

4K20

「译」代码整洁之道的 7 个方法

如果他们不清楚,他们应该代码审查 code review 时来问我。 当然,我们不要忘记注释的代码块。如果我们忘记了,这里只有一个解决方案:删除代码。...通过解构赋值,可以将值从数组、属性对象中取出,赋值给其他变量。...最好的例子是从 API 获取数据并接收具有 data 属性的响应对象。...organizer 对象有一个名字,你可以解构它。这样做没什么问题。 这段代码可以正常运行。但是为什么属性名还是 name? 那将是整个范围中唯一的 name 属性属性名又来自哪个对象?...而且代码库将会有很多清洁工作要做,但是如果每个人都承担起自己的责任并遵守童子军法则,很多问题将会得到解决。 代码风格 同样重要的还有确定团队中的代码风格。

65720
  • BubbleRob tutorial 遇到的问题

    模型的定义步骤如下: 将逻辑上属于模型的所有对象附加到一个基对象,这样基对象就是模型树的基。 检查对象公共属性中的模型基项。...对于模型中的所有对象,除了基本对象之外,请检查对象公共属性中的 select base of model instead。...考虑模型的角色:能够将它附加到其他对象?(例如,你的模型是一个可以连接到机械臂手腕的夹具)。或者你能给它加上别的模型?(例如,您的模型是一个可以接受夹持器模型的机械手)。...你也可以双击场景层次结构中的对象图标来打开对话框,或者单击它的工具栏按钮: ? 在“场景对象属性”对话框中,单击“公共”按钮以显示“对象公共属性”对话框。对话框显示最后选择对象的设置和参数。...一个标记为base of model的对象具有特殊的属性(例如,保存或复制该对象也会自动保存/复制它的所有子对象和子对象的子对象,等等)。

    1.7K10

    拿来吧你!关于到底什么是面向接口编程?的分析论文

    对象中包含具体的属性和行为,真正执行时再让每个对象去执行自己的某些方法,从而解决问题。...使用面向对象编程方式解决这个问题的大概流程如下:   1、根据问题涉及到的实体,抽象出“人”对象、”马桶“对象、”纸巾“对象   2、针对“人”对象添加一些属性和方法,属性如:xx 28cm、黑长直...方法:寻找纸巾方法、坐上马桶方法、清除排泄物方法、清洁xx工具方法   3、针对“马桶”对象添加一些属性和方法,属性如:白色、长15m、椭圆形。...方法:冲马桶方法   4、针对“纸巾”对象添加一些属性和方法,属性如:白/黑/金色   5、执行:     人对象.寻找纸巾方法     人对象.坐上马桶方法     人对象.清除排泄物方法...    马桶.冲马桶方法(是的,马桶是自感应的,有钱你也可以这样玩,有钱人的生活就是舒服)     人对象.清洁xx工具方法(清洁哪里不用我说你也懂吧!

    45420

    Effective Java(第三版)——条目十五:使类和成员的可访问性最小化

    为了便于测试你的代码,你可能会想要让一个类,接口或者成员更容易被访问。 这没问题。 为了测试将公共类的私有成员指定为包级私有是可以接受的,但是提高到更高的访问级别却是不可接受的。...公共类的实例属性很少公开(条目 16)。如果一个实例属性是非final的,或者是对可变对象的引用,那么通过将其公开,你就放弃了限制可以存储在属性中的值的能力。...很重要的一点是,这些属性包含基本类型的值或对不可变对象的引用(条目 17)。 包含对可变对象的引用的属性具有非final属性的所有缺点。...虽然引用不能被修改,但引用的对象可以被修改,并会带来灾难性的结果。 请注意,非零长度的数组总是可变的,所以类具有公共静态final数组属性,或返回这样一个属性的访问器是错误的。...除了作为常量的公共静态final属性之外,公共类不应该公共属性。 确保public static final属性引用的对象是不可变的。

    93240

    Unity基础教程系列(五)——生成区域(Level Variety)

    当我们的游戏实例唤醒时,它应该将自己分配给Instance属性对象可以通过this关键字获得对自身的引用。 ? 我们不应该强制只存在一个单例实例? 一般来说,这是个好主意。...由于我们现在依靠其他代码来访问Game,因此正确隐藏其配置字段是一个好主意。与其使用公共字段,不如使用序列化的私有字段,就像我们已经对factory和spawn区域所做的那样。 ?...将具有此组件的游戏对象添加到关卡场景并将其连接到生成区域。 ? ?...(对象引用,虚线只存在于运行时) 这是设计依赖项的最佳方法? 没有通用的最佳设计方法。...它的SpawnPoint属性从zones数组中选择一个随机索引,然后使用该区域的属性获取生成点。 ? 我们不应该检查数组是否为空? 你可以那样做。

    1.9K20

    面试官又问什么是面向接口编程!送分题!

    对象中包含具体的属性和行为,真正执行时再让每个对象去执行自己的某些方法,从而解决问题。...使用面向对象编程方式解决这个问题的大概流程如下:   1、根据问题涉及到的实体,抽象出“人”对象、”马桶“对象、”纸巾“对象   2、针对“人”对象添加一些属性和方法,属性如:xx 28cm、黑长直...方法:寻找纸巾方法、坐上马桶方法、清除排泄物方法、清洁xx工具方法   3、针对“马桶”对象添加一些属性和方法,属性如:白色、长15m、椭圆形。...方法:冲马桶方法   4、针对“纸巾”对象添加一些属性和方法,属性如:白/黑/金色   5、执行:     人对象.寻找纸巾方法     人对象.坐上马桶方法     人对象.清除排泄物方法...    马桶.冲马桶方法(是的,马桶是自感应的,有钱你也可以这样玩,有钱人的生活就是舒服)     人对象.清洁xx工具方法(清洁哪里不用我说你也懂吧!

    20320

    Getter & Setter:使用还是废弃

    我们可以修改这个类,而不用改变任何包外的代码。而且,对于私有嵌套类,改动的范围进一步的被缩小到被嵌套类里。 使用公共属性的另一个例子是JavaSpace 请求对象。...私有属性 + 公共存取方法 == 封装? 考虑下面的例子 我们通常都认为以上是糟糕的代码风格,因为它破坏了封装性。替代方法是: 有人认为这样封装了属性。这真的实现了封装?...客户端代码需要从Map里获得一个对象并把它转换为合适的类型。 相同逻辑的替代实现方法是: 这样隐藏了Map实例和交互接口(Map)。...这些完全无意义的getter/setter代码有时会比类的逻辑代码本身还要长,你会多次阅读这些代码,虽然你并不想这么做。 所有的属性应该保持私有,但对不可改变的属性仅仅增加setter方法。...而且这也要根据具体的情况来定,有些时候你仅仅希望有一个单纯的数据对象而已。应该为真正需要的属性添加存取方法。

    1.3K60

    C#开发人员应该知道的13件事情

    开发者认为成员访问是一个微不足道的操作,所以他们经常忘记在代码审查期间考虑带来的副作用。 对象初始化 你可以在创建表达式时,对新创建的对象设置属性。...如果你没有达到目标,则应该花费时间来优化程序。 始终采用最合适的工具,在具有可重复性和尽可能接近用户所经历的实际条件的情况下,对性能进行经验性测量。...使用这些方法通常使你的代码清洁,你不需要担心如TOCTTOU or TOCTOU场景等数据竞争的情况。...不要锁定“this”,字符串或其他常见的公共对象 当实现在多线程上下文中使用的类时,要非常小心使用锁。锁定此字符串或其他公共对象,会阻止封装锁定状态,并可能导致死锁。...不应该去捕获NullReferenceException,而应该尝试在使用它们之前测试对象是否为null。这也使得代码更容易被最小化try / catch块读取。

    2.3K90

    优思学院|5S管理在办公室能够推行吗?

    想象一下在一个杂乱无章的办公室中工作,你能高效率地完成工作?你的工作场所的安全和你的服务或产品的品质能得到保障?很明显,答案是否定的。...5S管理的作用5S管理在日本、台湾等国家和地区广受推崇,其包括整理、整顿、清扫、清洁、素养这五项内容,以S为首字母,因此被称为5S管理。...(4) 公共区域:公布栏、记事栏,定期更换擦拭。(四) 清洁SEIKETSU就是对工作的场所、个人服装仪容等,时时保持洁净、卫生的状态,是一种精神教育亦是作业要求。...(3) 公共区域:地面、门窗、墙壁、天花板等,保持清洁;墙壁、地毯、门窗或材等,表面破损剥落时,应尽速报请负责单位修复;窗台边、楼梯间、走道、茶水间、影印机室等,公用区域不随意堆放物品。...(4) 使用各项公用设施、办公用品、会议室设施等,均应该确实归位保持整齐清洁。响应节能措施,随手关灯、关水、空调。

    26910

    《C#图解教程》读书笔记之一:C#和.NET框架

    其他的程序员开始转向了COM(Component Object Model,对象组件模型),COM相对前两者概念简单,但它的实际代码复杂,并且需要很多丑陋的、不雅的底层基础代码。   ....NET框架的第一个版本,.NET框架是一种比MFC和COM编程技术更一致并面向对象的环境。   ...NET框架中使用的一个大的类库,也可以在程序中使用;   2.2 大大改进的编程环境   面向的对象的开发环境、自动垃圾收集、互操作性、不需要COM等; 三、全新的编译过程   3.1 编译成CIL(公共中间语言...四、核心组件—CLR:一个不辞辛劳的清洁工   毫无疑问,.NET框架的核心组件是CLR(公共语言运行时),它在操作系统的顶层,负责管理程序的执行。 ?...CTS(公共类型系统)定义了那些在托管代码中一定会使用的类型的特征,而CLS(公共语言规范)详细说明了一个.NET兼容语言的规则、属性和行为。

    72630

    提了这么多年的面向对象,你真的懂它的含义

    想想我们在现实生活中,理发、打扫卫生、搬家,真的会这么麻烦? 理发,我们会去找理发师(托尼);然后打扫卫生,可以亲力亲为,但也可以直接找清洁公司;搬家,就直接找搬家公司。...而清洁公司、搬家公司也是一样的。于是我们的代码,就可以非常好的进行复用。 这就是面向对象的编程方式,它是现实世界的数字化抽象,更符合认知习惯。...而张三就是类“理发师”的一个对象,也称为一个实例。张三成为理发师后,拥有自己的数据,姓名=“张三”,从业7年,经验丰富,使用高级理发工具,同时拥有理发师都应该拥有的技能:洗、剪、吹、宣传。...然后使用它们的具体对象清洁员小李、搬家员小王,来为我们完成服务。 这种编程方式,很明显很接近现实世界的交互方式,所以福布斯说,它是一种更高层次的交互。...而使用面向对象实现的代码,更容易复用,因为我们在写代码时,目的就是更好的封装,高内聚低耦合。 当然,这两种编程方式没有优劣之分。

    48410

    Python类中的属性

    Python有私有属性和方法? 我们在Python类的方法和属性的上下文中使用这两个术语,公共和私有。 当属性是私有的时,你不应该使用它;当方法是私有的时,你不应该调用它。...你可能已经注意到我用了“应该”这个词。这是因为,正如我已经提到的,Python中的情况有所不同:当某事是公共的时,你可以访问和使用它;当它是私有的时,你不应该这样做——但这并不意味着你不能。...指示隐私 你可以指示一个特定的属性是私有的。要做到这一点,只需在属性名前面加上一个下划线。这样做,你表明,建议或推荐该方法/属性应该被视为私有的,意味着它不应该在类的外部使用。...它具有以下属性: .name,一个公共属性 → 你的名字肯定是公开的。 .smile,一个公共属性 → 你的微笑可以被外界看到,所以它肯定是公开的。 ...._thoughts,一个私有属性 → 你的想法肯定是私有的,对? 正如你所见,这两个公共属性的名称没有前导下划线,而唯一的私有属性的名称有。

    17530

    Java基础知识三问—百度真题

    对于java,大家应该熟悉的不能再熟悉了。每天都在用,每天都在写,那么你是否对java基础有足够的了解呢?有的人说能写出代码,完成功能就够了,还了解那些基础知识干嘛呢?都是所谓的纸上谈兵。...今天就来一起来回顾下java的基础知识: java有什么特性,继承有什么用处,多态有什么用处 反射是什么,在哪里用到,怎么利用反射创建一个对象 静态方法,静态属性可以被继承 java有什么特性,继承有什么用处...其中,继承的目的是实现代码的复用,可以通用公共父类的方法。介绍:当两个类具有相同的特征(属性)和行为(方法)时,可以将相同的部分抽取出来放到一个类中作为父类,其它两个类继承这个父类。...反射是什么,在哪里用到,怎么利用反射创建一个对象 反射介绍:JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法和属性;这种动态获取的信息以及动态调用对象的方法的功能称为...反射创建对象 Class c = User.class; User u = c.newInstance(); 静态方法,静态属性可以被继承 首先,父类的静态属性和方法是可以被子类继承的,

    62630

    Python - 面向对象编程 - 公共属性、保护属性、私有属性

    公共属性 在 Python 的类里面,所有属性和方法默认都是公共的 class PoloBlog: # 公共属性 sum = 0 # 构造方法 def __init__...私有方法:就是对象不希望公开访问的方法 定义方式,类图 在属性、方法名前加两个下划线就是私有属性、私有方法了 代码 # 私有属性、方法 class Person: # 构造方法 def...、私有方法,不允许在对象外部被使用 通过公共方法访问私有属性 person = Person("小菠萝", 24) person.printMsg() # 输出结果 name: 小菠萝 age:...外部真的不能访问?..._类名__名称 来调用私有属性、方法,这算是一种间接调用 受保护类型的属性、方法 受保护类型一般会称为:protect 属性,学过 Java 的应该都了解 在属性和方法前加一个下划线就是 protect

    2.1K20

    整理了一些基础的Python知识点,分享给大家

    类型与对象 一点基础理论: 对象代表现实世界中像轿车、狗、自行车这些事物。对象具有数据和行为两个主要特征。 在面向对象编程中,我们把数据当作属性,把行为当作方法。...即: 数据 → 属性 和 行为 → 方法 类型是创造单个对象实例的蓝本。在现实世界中,我们经常发现很多对象实例拥有相同的类型,比如轿车。他们都具有相同的构造和模型(具有发动机,轮子,门等等)。...每辆车都是根据同一张设计图制作的,并且具有相同的组成部分。 Python 的面向对象编程模式:ON Python,作为一门面向对象编程的语言,具有类和对象的概念。 类是蓝图,对象是模型。...很简单,不是对象是一个类的实例,我们用命名类来创建一个实例。...但是,大多数Python代码遵循一个惯例:一个名字前有一道下划线的对象应该被认为是API中非公共的部分,例如_spam,无论它是一个函数、方法或是数据成员。”

    89720

    Python中真的有私有化操作

    这将是有争议的一篇文章 Python中真的有私有化操作? 这篇文章,我们将会从这样几个方面进行讲解 面向对象,总会遇到封装的概念,封装就会涉及到私有化的概念,Python中真的有私有化操作?...面向对象,也有继承的概念,继承就会涉及到私有化数据是否能被继承的问题,Python中能继承"私有属性/私有方法"? 当然,秉持以往的习惯,我们依然通过代码和原理跟大家一起分析。 1....约定的私有化 项目中我们开发公共模块的过程中,为了和其他语言一样,能给某些特定的属性添加合法的数据,或者在处理过程中将某些业务的实现隐藏在内部,通过公开方法完成合法访问,出现了私有化的概念,这里的私有化是一种约定的私有化操作...模块中的约定私有变量,仅限当前模块中使用,(约定)不允许其他模块使用" class Example: def __init__(self, param1, param2): # 公共属性...,出现问题的几率就非常大,参与过中大型项目开发的同胞们应该深有体会,尤其是那一个个赶需求的日日夜夜,等时过境迁再看曾经写的代码,都是为了追求赶需求周期而写的惨不忍睹的代码

    1.1K30

    Unity基础教程系列(七)——可配置形状(Variety of Randomness)

    添加一个公共ConfigureSpawn方法到生成区,附带一个形状参数。从Game中复制代码。创建实例并将其添加到列表,第一行和最后一行除外。...使用公共最小和最大浮点字段创建一个名为FloatRange的结构类型。本质上,它是一个Vector2,具有适当命名的字段,并且没有与矢量相关的功能。...SpawnConfiguration不应该是一个类? 关键点是将数据分组在一起,同时将其保留在SpawnZone对象中,这正是结构类型所做的事情。...位置不应该命名为area,rect或类似名称? 那会更有意义,因为它实际上描述的是矩形UI区域,而不仅仅是位置。但是Unity一直使用Position,因此我也会这样做。 ? ?...该属性只是最小和最大两个属性的容器。它们应该公共可读的,但仅由属性本身设置即可。 ? 添加具有最小值和最大值作为参数的构造方法,以初始化属性。为了使范围合理,请强制最大值不能小于最小值。 ?

    2.7K30

    2023 年 30 个 OOP 面试问题和答案

    OOP的主要优势是更易于管理的代码具有以下特点: 增加了对软件整体理解,使开发人员与用户之间的语言差距缩小。 面向对象通过封装简化了维护工作。可以通过保持方法不变轻松地改变底层表示。...类 是面向对象程序中的构建块。它是一个用户定义的数据类型,包含操作数据成员和成员函数。它类似于具有共同属性和方法的对象蓝图或模板。 4. 什么是对象对象 是类的实例。...“多态性”一词意味着具有许多形式。它是某些代码根据不同的上下文而表现出不同行为的属性。例如,在C++语言中,我们可以定义具有相同名称但根据上下文而有不同工作方式的多个函数。...程序员应该具备良好的技能,并且在面向对象方面有出色的思维,因为在面向对象编程中一切都被视为对象代码更容易维护和更新。 适当的规划是必要的,因为面向对象编程有点棘手。...在这种情况下,该方法以动态方式工作,根据代码的需要进行调用一段时间。 修改和更新代码更容易。 修改代码相对于面向对象编程来说是困难的。 数据在面向对象编程中更加重要。 代码被赋予更多的重要性。

    29730
    领券