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

OO设计 - 您是否在内部使用公共属性或私有字段?

在面向对象设计中,我们通常会使用私有字段来存储对象的状态,并通过公共方法来访问和修改这些状态。这种方法可以确保对象的内部状态不会被外部直接访问和修改,从而保护了对象的安全性和一致性。

但是,在某些情况下,我们可能需要在内部使用公共属性或私有字段。例如,当我们需要在不同的类之间共享某些数据时,我们可能需要使用公共属性来实现这一点。在这种情况下,我们需要确保对这些公共属性进行适当的访问控制和数据验证,以确保数据的安全性和一致性。

另外,在某些情况下,我们可能需要在内部使用私有字段来存储一些临时数据或状态。例如,当我们需要在对象的多个方法之间共享某些数据时,我们可能需要使用私有字段来实现这一点。在这种情况下,我们需要确保对这些私有字段进行适当的访问控制和数据验证,以确保数据的安全性和一致性。

总之,在面向对象设计中,我们应该尽量使用私有字段来存储对象的状态,并通过公共方法来访问和修改这些状态。但是,在某些情况下,我们可能需要在内部使用公共属性或私有字段,以实现更灵活的设计和更高效的数据访问。

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

相关·内容

数据结构 API

作为一名 JavaScript 程序员,实际上不需要知道如何将元素添加到数组末尾的实际策略底层实现.push()来使用它。...创建自己的 API 在构建自己的数据结构时,您将实现创建公共 API 的功能。...某些语言的类可以具有公共(可以从任何地方调用)私有(只能从类内调用)的方法字段公共方法是该类的最终用户可以调用的方法,而私有方法仅供该类本身使用。...JavaScript 并不真正支持这个概念,因此不打算公开的属性通常前面有一个下划线_。让我们看一个示例,我们想要使用受限 API 构建数据结构。...当构建自己的类和数据结构时,请务必牢记实现(它在内部需要什么来完成它的工作)和外部 API(它的用户实际上应该如何与之交互?)之间的区别。

13220

Swift基础 访问控制

开放访问仅适用于类和类成员,它与公共访问不同,允许模块外的代码子类和重写,如下文在子类中讨论。将类标记为开放明确表示考虑了使用该类作为超类的其他模块代码的影响,并且相应地设计了类的代码。...然后,这种新型可以在访问级别允许的任何地方使用。例如,如果定义文件私有类,该类只能用作属性的类型,或在定义文件私有类的源文件中用作函数参数返回类型。...常量、变量、属性和下标 常量、变量属性不能比其类型更公开。例如,使用私有类型写入公共财产是无效的。同样,下标不能比其索引类型返回类型更公开。...这使TrackedString能够在内部修改numberOfEdits属性,但当该属性在结构定义之外使用时,将其显示为只读属性。...此行为意味着无论的类型是否私有实体,都可以以同样的方式使用扩展来组织代码。

11600

C#2.0新增功能07 gettersetter 单独可访问性

属性是一种成员,它提供灵活的机制来读取、写入计算私有字段的值。 属性可用作公共数据成员,但它们实际上是称为访问器的特殊方法。 这使得可以轻松访问数据,还有助于提高方法的安全性和灵活性。...属性概述 属性允许类公开获取和设置值的公共方法,而隐藏实现验证代码。 get 属性访问器用于返回属性值,而 set 属性访问器用于分配新值。 这些访问器可以具有不同的访问级别。...只写属性很少出现,常用于限制对敏感数据的访问。 不需要自定义访问器代码的简单属性可以作为表达式主体定义自动实现的属性来实现。...具有支持字段属性 有一个实现属性的基本模式,该模式使用私有支持字段来设置和检索属性值。 get 访问器返回私有字段的值,set 访问器在向私有字段赋值之前可能会执行一些数据验证。...在内部,该类将时间间隔以秒为单位存储在名为 _seconds 的私有字段中。 名为 Hours 的读-写属性允许客户以小时为单位指定时间间隔。

38120

EF Core中避免贫血模型的三种行之有效的方法

要解决这个问题,我们有两个选择: 将验证逻辑添加到属性设置器 防止直接修改属性,改为使用与用户操作相对应的方法 向属性设置器添加验证是完全可以接受的,但意味着我们不能再使用自动属性并且必须引入一个后台字段...用户不是孤立地更新单个属性,而是倾向于执行一组已知操作(由UIAPI接口确定)。这些操作可能会导致一个多个属性被更新,但通常情况下更多。...值对象的经典示例包括货​​币,地址和坐标,但也可以使用值类型替换单个属性,而不是使用字符串整型。...请注意,参数化的构造函数和私有属性设置器的使用方式与我们在建模领域对象时所使用的完全相同。实体框架也需要一个私有无参数构造函数。 在(RDBMS)数据持久性的上下文中,值类型不存在于单独的数据库表中。...在的领域对象上创建一个方法来执行验证,然后更新多个属性无疑是件好事。但从领域对象发送电子邮件保存到数据库并不是您可能想要做的事情。

1.3K40

本地数据中心和云数据中心,哪一个更好?

数据中心基础设施的物理组件 数据中心基础设施的物理组件是指可触摸的物理的部分,也是设计数据中心网络的最重要的组件。...本地 本地数据中心本地是指公司在自己的设施中安装并自行维护的私有数据中心。 简而言之,公司的软件在其自己的计算机服务器上本地安装和控制。 请注意,本地数据中心不等于私有云。...因为后者可以在本地托管在第三方数据中心,这意味着本地基础设施可用于运行私有云,其中计算资源的虚拟化方式与公共云的虚拟化方式大致相同,但私有云也可以在第三方云提供商上运行。...云计算 当人们谈到云计算时,通常他们指的是传统公共云,一种第三方服务提供商为公司托管计算资源的模型。...部署 将软件部署到云本地数据中心是相对相同的,但对于基于硬件的资源却截然不同。对于本地环境,部署是使用公司的基础设施在内部完成的。

45420

Python OOP-1

面向对象概述(ObjectOriented, OO) OOP思想 接触到任意一个任务,首先想到的是任务这个世界的构成,是由模型构成的 几个名词 OO:面向对象 OOA:面向对象的分析 OOD:面向对象的设计...叫做属性(变量) 表明事物功能动作,称为成员方法(函数) 2....,其他不允许使用 成员属性定义可以直接使用变量赋值,如果没有值,允许使用None 案例 01.py 实例化类 变量 = 类名() # 实例化了一个对象 访问对象成员 使用点操作符...,protected不是关键字 判别对象的位置 对象内部 对象外部 子类中 python中下划线的使用 私有 私有成员是最高级别的封装,只能在当前类对象中访问 在成员前面添加两个下划线即可...__age = 18 - Python的私有不是真私有,是一种成为name mangling的改名策略 可以使用对象.

643107

什么是面向对象编程?OOP 深入解释

您将如何设计简单、可重复使用的软件来为狗建模? 如果有数百只狗,为每只狗编写唯一的条目将是低效的,因为会编写大量冗余代码。下面我们看看对象rufus和可能是什么样子fluffy。...封装需要将一些字段定义为私有的,一些定义为公共的。 私有/内部接口: 可从同一类的其他方法访问的方法和属性公共/外部接口: 可从类外部访问的方法和属性。 我们用汽车来比喻封装。...属性和方法可以设置为私有的,这样就不能在类外访问。为了获取有关对象中数据的信息,公共方法和属性用于访问更新数据。...注意:  JavaScript 具有私有和受保护的属性和方法。_受保护的字段以;为前缀 私有字段以 . 为前缀#。受保护的字段是继承的。私人的不是。...当编程与外部公司共享信息时,您不希望公开类的模板私有数据,因为的公司拥有该知识产权。 相反,开发人员创建允许其他开发人员调用对象方法的公共方法。

32110

构建开源私有DBaaS

相比之下,使用开源技术构建私有DBaaS可以提供无与伦比的定制化和控制能力。在本博文中,我们将探讨创建自己的私有DBaaS的可行性,以及它相对于公共服务提供的优势。 为什么公司会接受DBaaS?...公共DBaaS的挑战 定制化有限: 公共DBaaS解决方案旨在照顾广泛的受众,这有时意味着需要牺牲专门的配置设置。...在公共私有DBaaS解决方案之间进行选择,最终取决于组织的独特需求和优先事项。虽然RDSAtlas等公共产品提供简单方便的使用,但私有DBaaS解决方案提供无与伦比的定制化和控制能力。...这是一个宏伟的项目,旨在提供开源的私有DBaaS,无论是内部还是在选择的公共云上。 Percona Everest旨在提供无缝且完全开源的私有DBaaS体验,大大减轻了设置和维护的负担。...告诉我们好的方面、不好的方面奇怪的方面。 组织的数据托管方式和位置至关重要。如果决定探索DBaaS方法,请考虑单一提供商的解决方案长期是否合适。

8510

Effective Java tips

通常静态工厂更可取,因此避免在没有考虑静态工厂的情况下,直接选择使用提供公共构造方法。...当设计类的构造方法静态工厂的参数超过几个时,Builder 模式是一个不错的选择,特别是许多参数是可选的相同类型的。...比较 compareTo 方法的实现中的字段值时,请避免使用「」运算符。相反,使用包装类中的静态 compare 方法 Comparator 接口中的构建方法。...谨慎的重写clone方法 通常,复制功能最好由构造方法工厂提供。这个规则的一个明显的例外是数组,它最好用 clone 方法复制 公共类不应该暴露可变属性。...公共类暴露不可变属性的危害虽然仍然存在问题,但其危害较小。然而,有时需要包级私有私有内部类来暴露属性,无论此类是否是可变的 最小化可变性,不可变类比可变类更易于设计,实现和使用

26320

Python中的高阶概念属性:五个你应该搞明白的知识点

如果您有任何OOP语言的编程经验,应该知道所有对象都有其内部特征数据,称为字段属性属性。在Python中,这些对象绑定的特征数据通常称为属性。...在这种情况下,当检索实例的这个属性时,将不会检索class属性。换句话说,当使用一个实例对象来检索class属性时,Python将首先检查实例本身是否有一个用相同名称设置的属性。...毕竟,我前面提到过,所有Python属性在默认情况下都是公共的。下面将向展示Python如何实现“私有属性。 >>> dog....具体来说,manglingname mangling是使用_ClassName作为私有属性的前缀,这样我们就人为地创建了对这些“私有属性的访问限制。...我们仍然可以将这些受保护的属性作为其他“公共属性来访问,但是一些idePython编辑器不会为这些非公共属性提供提示(例如,自动完成提示)。

74921

安卓应用安全指南 4.1.2 创建使用活动 规则书

另一方面,私有活动永远不会直接从其他应用收到任何意图,但目标应用中的公共活动可能会将恶意Intent转发给私有活动,因此您不应该认为私有活动不会收到任何恶意输入。...由于在AndroidManifest.xml文件中定义权限声明权限请求不能提供足够的安全性,请务必参考“5.2.1.2 如何使用内部定义的签名权限,在内部应用之间进行通信”。...当公共活动用于返回数据时,目标可能会成为恶意软件,在这种情况下,可能会以恶意方式使用该信息。 对于私有和内部活动,不需要过多担心返回的数据被恶意使用,因为它们被返回到控制的应用。...公共活动必须接受来自不受信任来源的返回意图,因此在访问公共活动时,返回的意图实际上可能是由恶意软件发送的。 人们往往错误地认为,私有活动返回的所有内容都是安全的,因为它们来源于同一个应用。...将敏感信息发送到活动时,需要考虑信息泄露的风险。 必须假设,发送到公共活动的Intent中的所有数据都可以由恶意第三方获取。

1.3K20

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

如果你使用public修饰符声明顶级类接口,那么它是公开的;否则,它是包级私有的。如果一个顶层类接口可以被做为包级私有,那么它应该是。...如果一个包级私有顶级类接口只被一个类使用,那么可以考虑这个类作为使用它的唯一类的私有静态嵌套类(条目 24)。这将它的可访问性从包级的所有类减少到使用它的一个类。...在仔细设计你的类的公共API之后,你的反应应该是让所有其他成员设计私有的。 只有当同一个包中的其他类真的需要访问成员时,需要删除私有修饰符,从而使成员包成为包级私有的。...在仔细设计一个最小化的公共API之后,你应该防止任何散乱的类,接口成员成为API的一部分。 除了作为常量的公共静态final属性之外,公共类不应该有公共属性。...确保public static final属性引用的对象是不可变的。 ---- 那么今天小程序更新的题库是: 1.当数据表中A、B字段做了组合索引,那么单独使用A单独使用B会有索引效果吗?

90640

领域建模与数据库建模

编程阶段我们通常使用Java/.NET这样面向对象语言工具,可以带来很多设计上的好处,但是也存在一个奇怪的现象:很多程序员虽然在使用OO语言,但是却在code非OO的代码,最终导致系统性能降低失败,这个现象在...继承也是类建模中经常用到的关系,继承可以将一些数据属性抽象到父类中,避免重复,如入库单和出库单有 很多属性是差不多的,唯一不动的就是入库和出库的行为,那么我们可以抽象一个库单为父类,使用继承关系分别 表达入库单和出库单...数据表关系 数据表的关系主要是通过外健专门关联表来表达的,这种关系虽然可以反映1:11:N这样关系,但是无法 表达关系的性质,是紧密组成关系式的关联,还是无关紧要的普通关系,正因为如此,使用数据表分析设计时...没有面向对象的分析设计,哪里面向对象的构件组件?过去经验不是证明:我们使用大量的构件组件,却在编制面向过程的体系?   ...领域建模属于与具体.NETJava技术无关的设计思想,有人总是说:.NET比Java简单,其实这又是一个大误区,如果都达到同样设计水准,无论使用.NETJava,都需要付出同样的努力;那为什么有人觉得

59230

的组织机构选择正确的企业云解决方案

企业云解决方案有望将的静态数据中心转换为灵活的计算能力,这种计算能力通过内部预置的私有备用的外部云服务来实现进一步的无缝集成。...为什么不直接使用公共云服务? 企业云解决方案在防火墙后(指私有云)和公共云网域中提供了的灵活,响应迅速的计算能力。...虽然公共云服务为那些特定类型的,尤其是负载不可预估的计算机提供了独特的解决机会,但在内部私有云上进行部署仍有很多优势,当必要时也可以连接使用外部云服务。...数据寿命 - 将数据长时间保存在公共云中的代价可能是高昂的。当数据寿命是系统关键需求的前提下,将带有本地存储功能的私有云组件作为云服务解决方案的一部分是十分经济的。...具体问题要问: 是否支持联合身份验证与外部的公有和私有云服务? 访问外部计算容量时可以使用哪种级别的控制? 外部云的接口是否是透明的?即它和用于访问本地资源的相同接口吗?

86660

「技能分享」有效处理空值的10个技巧,学不会算我输

4.验证公共API参数 和您的团队可能会使用不成功传递null的原理,但是当公开公共API时,无法控制其用户以及将其传递给函数的内容。因此,请务必检查传递给公共API的参数的正确性。...类字段是一种诱人的案例,它不是为设计设计的,而且肯定不是必需的。通过封装,应该完全控制字段的值,包括null。...另一方面,将字段设置为显式可选可能会给带来奇怪的问题,例如: 应该如何为此类字段编写构造函数设置方法? 即使在确定值存在的情况下,您也必须处理Optional。 自动映射器应如何处理这些字段?...因此,对字段使用直接引用,并仔细分析字段在任何给定点是否可以为空。如果的班级得到了很好的封装,那么这应该很容易。 8.对空使用异常 您可能会看到人们使用null的一种奇怪情况是例外情况。...10.仔细检查 每当假设某个引用不能为空时,请仔细检查您是否正确。在处理庞大的旧数据库外部提供程序时,这一点尤其重要。

1.5K30

如何在Ubuntu 18.04上使用PostgreSQL 10设置逻辑复制

如果希望定位特定的数据子集(例如,卸载报告,修补升级),则逻辑复制可以提供速度和灵活性。...专用网络允许的服务器之间进行通信,而不会产生与将数据库暴露给公共互联网相关的安全风险。...使用\connectmeta-command连接到您在每个主机上创建的数据库: \c example \c example 在两台主机上创建一个名为widgets 的新表,该字段具有任意字段: CREATE...必须将REPLICATION属性分配给用于复制的任何角色。我们将我们的用户命名为sammy,但您可以使用自己的用户名替换它。...再次记得使用db-master的私有IP地址,并替换my_password为自己的密码: CREATE SUBSCRIPTION my_subscription CONNECTION 'host=db_master_private_ip_address

2.9K50

Java基础题

https://www.iteye.com/blog/java-min-1416727 19、请结合OO设计理念,谈谈访问修饰符public、private、protected、default在应用设计中的作用...public:Java语言中访问限制最宽的修饰符,一般称之为“公共的”。被其修饰的类、属性以及方法不仅可以跨类访问,而且允许跨包(package)访问。...private: Java语言中对访问权限限制的最窄的修饰符,一般称之为“私有的”。被其修饰的类、属性以及方法只能被该类的对象访问,其子类不能访问,更不能允许跨包访问。...泛型的核心意义在于:类在进行定义的时候可以使用一个标记,此标记就表示类中属性或者方法以及参数的类型,标记在使用的时候,才会去动态的设置类型。 26、Java中的HashSet内部是如何工作的。...可序列化类可以通过声明名为 “serialVersionUID” 的字段(该字段必须是静态 (static)、最终 (final) 的 long 型字段)显式声明其自己的 serialVersionUID

97110

ja类主体和方法定义

= 25; 现场申报 公共私有字段声明是JavaScript标准委员会TC39提出的实验性功能(第3阶段)。...如上所示,可以使用默认值使用默认值来声明字段。 有关更多信息,请参见公共字段。 私人领域声明 使用私有字段,可以按以下方式细化定义。...#width = width; } } 从类外部引用私有字段是错误的。它们只能在类主体中读取写入。通过定义在类外部不可见的内容,可以确保类的用户不会依赖于内部,这可能会导致版本之间的差异。...私有字段只能在字段声明中预先声明。 以后无法通过分配普通属性的方式来分配专用字段来创建专用字段。 有关更多信息,请参见私有字段。...种类模式可让覆盖默认构造函数。 例如,当使用诸如这样的方法map()返回默认构造函数时,希望这些方法返回父Array对象而不是MyArray对象。

45120

Groovy 面向对象编程-类成员中字段属性学习-第三篇

字段-Fields 字段是指存储数据的类、接口特征的成员。Groovy源文件中定义的字段具有: 强制访问修饰符(公共public、受保护protected私有private)。...作为记录类设计的一种方式,它也很重要。 在某些情况下,如脚本编写如果您想依赖动态类型,则省略类型可能很有用。 总而言之,省略数据类型的字段定义,在Groovy中是支持的。...3.4 使用显式字段拆分属性定义 当我们的类设计遵循与Java实践一致的某些约定时,Groovy的属性语法是一种方便的速记。...对于拆分定义,我们可以编写具有相同名称和类型的字段属性。只有一个字段属性可以具有初始值。 对于拆分属性字段上的注释保留在属性的背景字段上。...后面使用中渐渐熟悉吧。 3.5 显示访问方法 如果类中存在gettersetter的显式定义,则不会自动生成get和set方法。这允许根据需要修改此类gettersetter的正常行为。

67110

matinal:SAP ABAP 从创建类开始学习面向对象编程

对于ABAP OO开发新手而言, 要创建一个ABAP类,请转到ABAP工作台SE80,选择“类”,点击鼠标右键后点击“创建”,在输入字段中输入名称YCL_CUSTOMER并按回车。...POSTCODE CITY:类型 CITY COUNTRY:类型 S_COUNTRY TELEPHONE:类型 S_PHONENO EMAIL:类型 S_EMAIL 所有属性都应该是公共实例属性...点击“方法”将带回到之前的视图,双击CONSTRUCTOR方法将打开ABAP编辑器。 在构造函数中,首先检查是否提供了客户ID,因为它被声明为可选参数。...创建一个新的方法SAVE作为公共实例方法。双击SAVE,将打开编辑器。代码如下: * declaration of structure DATA: s_customer TYPE scustom...以上内容为ABAP OO 新手提供了创建第一个ABAP对象的详细步骤,包括如何定义类、属性、构造函数和方法,以及如何在ABAP工作台中测试这些对象。

11110
领券