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

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

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

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

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

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

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

相关·内容

Python 中的 “私有”(实现)类

Python 的私有类的概念通常是通过以下几种方式来实现:1、问题背景我正在编码一个由两部分组成的小型 Python 模块:定义公共接口的一些函数,上述函数使用的实现类,但在模块外部没有意义。...起初,我决定通过在使用它的函数中定义实现类来“隐藏”它,但这阻碍了可读性,并且如果多个函数重用同一个类,则无法使用。因此,除了注释和文档字符串之外,是否有一种机制可以将类标记为“私有”或“内部”?...答案 5:惯例是在内部类、函数和变量前加上“_”。答案 6:为了解决设计约定问题,正如 chroder 所说,Python 中实际上没有“私有”的概念。...如果您担心自己弄乱 help(MyClass) 输出(当人们搜索如何使用类时,每个人都会看到它),那里不包括下划线属性/类,因此您最终只会有描述的“公共”接口。...因此,只要您知道混淆的名称,您就可以使用“私有”实体。请参阅此处。当然,如果您愿意,可以选择手动导入“内部”类)。

11010

JAVA反射机制及其原理实现

OO(面向对象),private私有的,不能访问。这种动态获取信息以及动态调用对象方法的功能称为java语言的反射机制。...9.2 作用 在日常的第三方应用开发过程中,经常会遇到某个类的某个成员变量、方法或是属性是私有的或是只对系统应用开放,这时候就可以利用Java的反射机制通过反射来获取所需的私有成员或是方法。...反射是框架设计的灵魂 ​(使用的前提条件:必须先得到代表的字节码的Class,Class类用于表示.class文件(字节码))​ 9.2.1 反编译:.class-->.java 9.2.2通过反射机制访问...InstantiationException { Class clz=Class.forName("com.aaa.chapter07.User"); //2.获取所有公共字段...):获取某个"公有的"字段; 2).public Field getDeclaredField(String fieldName):获取某个字段(可以是私有的) 设置字段的值: Field --> public

8210
  • 数据结构 API

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

    15820

    Swift基础 访问控制

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

    15900

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

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

    41120

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

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

    1.4K40

    Python OOP-1

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

    672107

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

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

    55120

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

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

    1.2K10

    单例模式的运用

    单例设计模式分类两种:饿汉式:类加载就会导致该单实例对象被创建。懒汉式:类加载不会导致该单实例对象被创建,而是首次使用该对象时才会创建。...,并用私有化无法访问,使用静态关键字static来修饰 private static Singleton instance = new Singleton(); // 提供一个公共的访问方式...类型的变量,并用私有化无法访问,使用静态关键字static来修饰 private static Singleton instance;//null // 提供一个公共的访问方式,由于外界无法创建...类型的变量,并用私有化无法访问,使用静态关键字static来修饰 private static Singleton instance;//null // 提供一个公共的访问方式,由于外界无法创建...class SingletonHolder { //在内部类中声明Singleton类型的变量并初始化外部类的对象,并用私有化无法访问,使用静态关键字static和final来修饰

    8210

    构建开源私有DBaaS

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

    19810

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

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

    78221

    Effective Java tips

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

    29220

    领域建模与数据库建模

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

    68330

    安卓应用安全指南 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会有索引效果吗?

    95240

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

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

    94860

    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

    1K10

    如何在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

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

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

    1.5K30
    领券