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

从OOP的角度来看,拥有具有固定状态的对象有多糟糕?

从OOP的角度来看,拥有具有固定状态的对象是一种不理想的设计。以下是详细的解释:

  1. 概念:具有固定状态的对象指的是其属性和状态在对象创建后不能被修改的对象。
  2. 分类:这种对象通常被称为不可变对象或者值对象。
  3. 优势:不可变对象具有以下优点:
    • 线程安全:由于对象状态不可更改,多个线程可以同时访问对象而无需额外的同步措施。
    • 可靠性:对象状态一旦确定,就不会被意外修改,从而避免了由于状态变化导致的错误。
    • 可缓存性:由于对象的状态不变,可以安全地将对象缓存起来,以便提高性能。
  • 应用场景:不可变对象适用于以下场景:
    • 字符串处理:由于字符串是不可变对象,可以确保字符串的内容不会被修改,提高处理效率和安全性。
    • 缓存管理:由于不可变对象的特性,可以安全地将对象缓存起来,以减少计算开销。
    • 多线程环境:不可变对象可以在多个线程之间共享而无需进行同步。
  • 腾讯云相关产品:
    • 产品名称:云函数SCF 产品介绍链接地址:https://cloud.tencent.com/product/scf
    • 产品名称:对象存储COS 产品介绍链接地址:https://cloud.tencent.com/product/cos
    • 产品名称:数据库TDSQL 产品介绍链接地址:https://cloud.tencent.com/product/tdsql
    • 产品名称:容器服务TKE 产品介绍链接地址:https://cloud.tencent.com/product/tke

请注意,以上提供的腾讯云产品仅作为示例,没有提及其他云计算品牌商。

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

相关·内容

类和函数傻傻分不清楚?三个例子讲明白

关于这个问题,算是困惑了许多刚接触python同学,那么本文就尝试多个角度来解读这个问题。首先还是先来看看官方给出类与函数解释。 类提供了一种组合数据和功能方法。...创建一个新类意味着创建一个新对象类型,从而允许创建一个该类型新实例 。 每个类实例可以拥有保存自己状态属性。 一个类实例也可以改变自己状态(定义在类中)方法。...然后,我们还可以创建另一个类FlyingEnemy,Enemy该类该类继承所有内容,但又具有一个fly方法,因此具有其他功能。 第二个例子 我们再来看一个例子。假设我们需要编写一个音乐播放器。...无需外部检查对象是否具有某些字段并决定如何处理这些内部字段,而是调用play对象提供方法,并在每个类内部定义该类型对象应如何实现此功能。...至于到底在何时使用类,我们来看看其他程序员理解 当我们拥有一堆共享状态函数,或者将相同参数传递给每个函数时,我们可以重新考虑代码使用类。

1.1K20

基于 CSP 设计思想和 OOP 设计思想异同

Go语言推崇CSP编程模型和设计思想,并没有引起很多Go开发者包括Go标准库作者重视。标准库很多设计保留了很浓OOP味道。本篇Blog想比较下设计角度看,CSP和OOP到底什么区别。...下面,我们来看一个例子,如果我们一个项目,需要做一个TCP连接中继器(请原谅我用词)。我们先按照OOP来设计下: 系统结构:需要有一个客户端和一个服务器端。分两个进程分别跑在不同机器上。...更重要,每个协程,本质上就是在调度发生时,自动把 上下文 保存起来回调函数。这大大简化了状态维护工作。在遇到具有共性时候,CSP是多用装饰器和桥接器,把系统中共性用函数参数表达出来。...OOP装配工作量比CSP要大。每个接口每个方法都可以看成是一个螺丝,只有你紧固了每一个螺丝,OOP设计软件才可以运行。...CSP虽然会要求设计上改变即有思路,耗费较多脑力,但其设计方案简单容易扩展,具有巨大优势。

1.3K40
  • Agent 与对象辨析

    对象OOP 对象具有明确边界和意义事物.也是某些问题概念抽象,是一个封装了数据和方法实体,一个对象实质是一组数据和与它相关方法及操作。它特征由属性表示.属性数据值表示对象状态。...Agent 是一个具有多重含义概念,根据场景和视角不同有着极大差别。 精神状态角度来看,“如果一个实体可以用信念、承诺、义务、意图等精神状态进行描述.那么该实体可视为一个Agent”。...如果建立单个Agent目的是想模拟人行为,而精神状态角度对人行为分析是比较自然,这也正是Agent作为人工智能基础理论重要原因之一。一般第,这一定义被称之为Agent强定义。...设计者角度来看,Agent 是一种抽象工具,通过它能使我们用更方便更熟悉拟人化方式来描述、解 释、预测一个复杂系统行为。...,可包含通知、请求、提供、承诺、拒绝等,agent通信专用语言,如KQML;通常agent在面向agent方法中被实现为有意图系统.而OOP对象作为类实例。

    60420

    再谈编程范式(3):理解面向过程面向对象函数式编程精髓

    :形成了一个新函数,而这个函数就是一条 bfn -> afn 流水线 下面再来看看如何实现一个函数组合: const compose = (...fns)=>val=>fns.reverse()...一个对象必须有。 一个身份一个唯一名字;拥有一个唯一ID可以使对象与其他对象进行交互。 一个状态一个对象状态反映了一个对象属性或特性。...行为一个对象方法,以及对象将如何响应并与其他对象互动。 例如,让我们想象一下,我们 "运动员1 "这个对象,在这个对象中,我们通过属性拥有关于这个对象所有数据。...同样重要是要记住,许多提到语言不是100%函数式编程或面向对象。例如,Python是最流行语言之一,它确实是一种范式语言。因此,它可以根据开发者偏好,采用更多函数式或OOP方法。...纯函数只产生与输入相同输出。因此,函数式编程具有极强操作性、实用性,而且正如其名称所示,是功能性OOP不像函数式编程那样具有操作性。

    1.3K20

    软件架构编年史:编程语言演化

    覃宇,Android开发者/ThoughtWorks技术教练//译者,热衷于探究软件开发方方面面,端到云,工具到实践。...然而,现在这种编程范式使用方法却是在20世纪80年代形成拥有可见性级别、方法(消息)、对象、类以及包面向对象编程。同时封装和模块化**也被越来越多地提及。...; 方法:功能性角度来看代表了过程和函数,而在概念性交付来看则应该被看作是可以发给指定类型对象消息(或者更好名字,命令)。...对应到编程范式中,这意味着对象属性和行为会根据是谁给它发消息(谁触发了对象方法)而不同。 面向方面编程试图通过在“编译”期注入额外代码来将横切面的关注点真正业务逻辑中分离出来。...也有一些编程范式尝试,比如面向主观编程(根据发起行为主观对象具有不同行为)或者面向方面编程(编译期代码注入),但实质上编程语言范式并没有发生变化,大多数情况下我们仍然使用OOP

    96730

    面向协议编程与 Cocoa 邂逅 (上)

    这其实就是 OOP 核心思想 - 使用封装和继承,将一系列相关内容放到一起。 我们前辈们为了能够对真实世界对象进行建模,发展出了面向对象编程概念,但是这套理念一些缺陷。...面向对象是一种不错抽象方式,但是肯定不是最好方式。它无法描述两个不同事物具有某个相同特性这一点。在这里,特性组合要比继承更贴切事物本质。...继承 当然,Swift 是不支持继承。不过如果有继承的话,我们确实可以多个父类进行继承,并将 myMethod 添加到合适地方。...一些语言选择了支持继承 (比如 C++),但是它会带来 OOP 中另一个著名问题:菱形缺陷。...其次,横切关注点让我们难以对对象进行完美的建模,代码重用也会更加糟糕。 3. 协议扩展和面向协议编程 3.1 使用协议解决 OOP 困境 协议并不是什么新东西,也不是 Swift 发明。

    60120

    面向对象先导课感想

    关于课程本身,我想说就是如何平衡一下Java语言教学和真正面向对象知识教学,让无java基础的人不至于完全掉队,也让一定基础的人不被太多拖慢进度。...关于互测 由于有些东西可能真的还是难以全面采用黑盒测试,所以不得已只能采用互测方式。就目前来看,当前互测方式明显不公平不合理之处。...同时也是由于上面一点,被hack者角度而言,也存在极大漏网空间,很大程度上也取决于运气。...相反,这样措施一旦限制稍有失误,便可能导致严重恶性竞争(甚至是一些不正当线下交易)。 学生未来发展来看,这样措施会导致很多该纠正bug和系统设计错误无法被及时纠正。...也就是说实际上即便你直接hack的人只有一个或者几个,但实际上作用到的人是所有人(很多时候,很多错误,都是非常具有共性,一个hack点常常可以卡掉非常程序)。

    79040

    《Think in Java》第一章:对象导论之抽象

    只要符合飞(这只是其中一个特征,涉及到力度)就是鸟类,鸟类就是抽象类型。 质量:抽象力度。如果只从一个飞角度就定义其是鸟类,那么这个鸟类就不够抽象。...OOP通过提供更好表达问题空间元素而更进了一步 上面这句话意思是说问题空间中元素可以被称之为对象,而这也是OOP思想:程序可以通过添加新类型(class)对象使自身适用于某个特定问题 OOP...使得可以构建复杂程序 每个对象拥有其类型 比如字符串是String类型用来表示字符串可以接受有关字符串行为调用,类型不同其所负责功能也就不同 某一特定类型所有对象都可以接受同样消息 这个涉及到多态了...也就是可替代性 更简洁表述方式就是:对象具有状态 行为和标识。...状态可以理解为其所持有的数据(属性) 行为就是可以接受什么样消息(方法) 标识是代表这个对象唯一性,并后续可以找到(涉及到hashcode了后续将)

    22220

    「首席架构看领域驱动设计」领域驱动设计和开发最佳实践

    标识并记录上一步中标识服务使用对象状态和行为。 重要是保持模型在高层次上,首先关注业务领域核心元素。 项目管理角度来看,一个实际DDD实施项目与任何其他软件开发项目包含相同阶段。...应该利用继承、封装和多态性等OOP概念,使用普通Java类和接口设计域对象。大多数域元素都是同时具有状态(属性)和行为(作用于状态方法或操作)对象。...设计 设计角度来看,域层应该有一个定义良好边界,以避免非核心域层破坏,比如特定于供应商转换、数据过滤、转换等。应该设计域元素来正确地保存域状态和行为。...在分布式应用程序中,将数据从一个或多个域对象映射到一个DTO将成为一个必要麻烦,因为性能和安全角度来看,通过网络发送域对象可能并不实际。...DDD角度来看,DTO还有助于维护服务层和UI层之间分离,其中DO用于域,服务层用于表示层,DTO用于表示层。 Dozer框架用于将一个或多个域对象组装到一个DTO对象中。

    1.6K30

    36个助你成为专家需要掌握JavaScript概念

    14、类和工厂 JavaScript不是面向对象语言。但是,为了模拟OOP属性,使用了构造函数。...具有OOP背景程序员应该熟悉这个新关键字。 要正确识别对象类型,我们使用instanceOf操作符。简单地说,它检查一个对象是否是另一个对象实例。 这将帮助你理解对象如何相互继承。...简单地说,原型就是JavaScript对象其继承方法和属性对象。 通过更好地理解原型,你可以构建高效、快速应用程序。...这将允许重用现有对象属性和函数,有点像OOP继承概念。 当你使用Object.assign方法,则可以将可枚举自有属性从一个或多个源对象复制到目标对象。...30、算法 这是你将在计算机科学课程中首先学到东西之一。简而言之,算法就是一个逐步实现目标的过程。程序员应该能够算法角度来看待任何问题。 他们应该能够逐步构建问题和解决方案。

    71220

    「MoreThanJava」Day 4:面向对象基础

    人类大脑会对象角度认识世界 (例如鸟类、鱼类),我们思想和记忆也被组织成物体和它们之间关系 (例如,鸟吃虫)。...事实上,这些特征它们都有名字: 对象具有 标识 identity;(每个对象都是独立个体) 对象具有 状态 state;(它具有各种可能会改变属性) 对象具有 行为 behavior;(它可以做事情...部分影响来自于更清晰表达复杂系统方式; 也许最重要原因 (也是操作系统体系结构派生而来) 是,当您给某人一个结构时,您很少希望他们拥有无限特权。仅仅进行类型匹配甚至还不能满足需求。...构造器开始 这个与类名相同且权限为 public 方法 Dog() 我们把它称为 构造器,让我们来看看它: public Dog(String name, Integer age) { this.name...那么就会拥有 Animal 这个父类所描述属性和方法 (子类当然可以自己实现,这一点我们在后续章节中详细描述)。

    42230

    “备孕期”Java程序员一定要学会抽象 | 《Java编程思想拆书》

    (程序员节)进入一家“青苗科技工作室”(我组织一个接私活小团队;Web全栈、安卓等方面的项目可以私聊我哦),正式开始编写为自己带来第一桶金Java代码……距今,我已经8年Java编程经验了…...OOP强大之处就在于,它使我们不必依照计算机限制来模拟现实中物;我们可以基于现实中要解决问题来构建对象,使这个对象具有现实中物所具有的特征(对应Java中属性)和行为(对应Java中方法)。...物不同,对象具有的属性和方法就会不同。 还拿Dota中英雄来说吧。...在我看来,OOP概念提出,是编程界一个重要里程碑。它给我们以下重要启示: 万物皆对象。 程序是对象相互协作一个过程,他们通过发送消息来告知彼此要做事情。...尽管每个对象都是唯一(在内存中拥有一个唯一地址),但具有相同状态(属性、变量)和类似行为(方法)对象可以归属为一个类。 每个对象都提供了某种服务。

    51840

    建模,没必要

    要想弄清楚这两个问题,首先我们需要拿个示例来仔细比对一下 OOP小示例 在《面向对象是什么》[2]一文中提到游戏小示例 个游戏,基本规则就是玩家装备武器去攻击怪物 •玩家(Player)可以是战士(...,还有装备武器也会有各种规则 比如,战士只能装备剑,法师只能装备法杖,但他们都可以装备匕首 再比如,当我们不同对象,但又有相同或类似的行为时,OOP会不可避免导致代码重复 在这个例子里,如果我们去增加一个...要知道Java(以及绝大部分语言)是不支持父类继承,所以只能通过重复代码来实现 原生OOP力不从心 OO角度看待,逻辑简单,代码也算过得去,也基本符合充血模型需要数据与行为结合性要求 但如果业务比较复杂...一个Policy是一个无状态单例对象,通常需要至少2个方法:canApply 和 一个业务方法。...难道达到了原生面向对象能力极限? 如果你想法,欢迎留言交流。

    39210

    面向对象编程是否走向了消亡?

    而论 OOP 在各个领域中应用时,其是否真的想象中那么糟糕?接下来,本文将带领大家一读 OOP 兴衰成长史。 ?...“鸭嘴兽”效应 现实世界并不总是能被整洁地划分为具有明确属性定义类(class)。例如,假设你创建了一个代表动物王国类层次结构。现在,爬行动物——冷血,有鳞片,卵生等等。...它具有设置状态方法,即使特定子类是无状态; 它有添加和删除子元素方法,即使对control来说子元素没有意义。...内部逻辑与外部逻辑 严格OOP风格一个原则是,永远不可能从外部改变对象内部状态。任何改变对象状态业务或应用程序逻辑都必须作为对象本身方法实现。...在过去,我倾向于按照推荐OOP样式为每个操作中每个对象设置一些逻辑。这带来不好后果,当我添加更多步骤时,对象变得越来越复杂。 更糟糕是,这使得给这些对象写单元测试异常困难。

    67830

    【Python】 面向对象编程(OOP)之封装艺术

    如 Python 支持继承。而 Java 语言只支持单根继承…… 1.1 OOP 特点 要了解 OOP 特点,可从 2 个角度进行阐述。...广义角度:让程序像人类解决问题一样去解决问题,让程序具有思维模式。 人类解决问题时,先是要了解问题域中会涉及到哪些对象,然后再深入了解每一个对象特性或功能,最后再做出相应决策。...了解群体中匹配一个符合班长标准学生便可。 面向对象编程中对象一词,便是借鉴了现实世界中对象概念。...类是蓝图,具有抽象性特征 对象是根据蓝图创建出来个体,具有具体性、实用性特征 2....OOP 封装性 封装性可以 2 个角度上展开讨论: 3.1 广义角度:无处不封装 类就是一个封装体:它把数据以及对数据相关操作方法封装在了一起。 方法也是一个封装体:封装了代码逻辑。

    38220

    Java编程思想第五版(On Java8)(一)-什么是对象

    然而,它仍然与计算机联系,每个对象都类似一台小计算机:它们自己状态并且可以进行特定操作。这与现实世界对象”或者“物体”相似:它们都有自己特征和行为。...Grady Booch 提供了对对象更简洁描述:一个对象具有自己状态,行为和标识。这意味着对象自己内部数据(提供状态)、方法 (产生行为),并彼此区分(每个对象在内存中都有唯一地址)。... BirdController 角度来看,这是很方便,因为它不需要编写特别的代码来确定 Bird 对象的确切类型或行为。...相反,对于 C++ 所使用继承方案则是不保证所有的对象都属于同一个基类。向后兼容角度看,继承方案更符合 C 模型,而且受限较少。...设计角度来看,我们真正想要是一个能够解决某个问题集合。如果一种集合就满足所有需求,那么我们就不需要剩下了。之所以选择集合以下两个原因: 集合可以提供不同类型接口和外部行为。

    76530

    速读原著-HotSpot虚拟机对象探秘

    在上面工作都完成之后,在虚拟机视角来看,一个新对象已经产生了。但是在 Java 程序视角看来,对象创建才刚刚开始——方法还没有执行,所有的字段都为零呢。...对象需要存储运行时数据很多,其实已经超出了 32、 64 位Bitmap 结构所能记录限度,但是对象头信息是与对象自身定义数据无关额外存储成本,考虑到虚拟机空间效率,Mark Word 被设计成一个非固定数据结构以便在极小空间内存储尽量信息...,它会根据对象状态复用自己存储空间。...,2Bits 用于存储锁标志位,1Bit 固定为 0,在其他状态(轻量级锁定、重量级锁定、GC 标记、可偏向)下对象存储内容如下表所示。...使用直接指针来访问最大好处就是速度更快,它节省了一次指针定位时间开销,由于对象访问在 Java 中非常频繁,因此这类开销积小成也是一项非常可观执行成本。

    40320

    重构:改善饿了么交易系统设计思路

    这套系统驮着业务百万级订单跑到了千万级订单,压测表现来看,它可以再支撑业务翻几倍量,也就是说如果没有啥变化,它可以继续稳定运行着,但如果发生点变化呢,答案可能就不这么肯定了。...那么 Python 呢,任何事物都有双刃剑,虽然 Python 具有强表达力,但是灵活性也把很多人惯坏了,代码写糙,动态语言写太多坑也,容易出错,在大项目上工程管理和维护上有一定劣势,所以 rails...我们好像完全遗忘了 OOP ,这项古老技艺被淡化了,我这里不是说一定要 OOP 就是完美的,准确来说我是“面向问题”范式拥趸者,比如, Java骨子里就是要 OOP ,但是业务流程不一定需要 OOP...回到前面提到评价域模型,后来在和产品多次沟通后意识到,产品没有希望评价这么多种类,对它来说商品也好、骑手也好,都属于被评价对象领域模型来看,之前设计更多是面对场景,而不是面对行为,所以合理域模型应该是...拿用户系统举例:一个 User Object ,如果是用户自身视角来看,就可以登陆、登出,修改昵称;如果是其他普通用户来看,就只能看看昵称之类;如果后台管理员来看,就可以注销或者踢出登陆。

    69820

    Java编程思想之每天两小时(一)

    “我们之所以将自然界分解,组织成各种概念,并按其含有分类,主要是因为我们是整个口语交流社会共同遵守协定参与者,这个协定以语言形式固定下来。。。...:程序可以通过添加新类型对象使自身适用于某个特定问题,OOP允许根据问题来描述问题,而不是根据运行解决方案计算机来描述问题。...OOP和计算机联系体现在:每个对象看起来都有点像一台微型计算机,他状态,还具有操作,用户可以要求对象执行这些操作。...就是可以通过创建包含现有对象方式来创建新类型对象,因此,可以在程序中构建复杂体系,同时将其复杂性隐藏在对象简单性背后。 4) 每个对象拥有其类型。...Booch 对对象提出了一个更加简洁描述:**对象具有状态,行为,标识。**每个对象在内存中都有唯一地址。

    52020

    略懂Java编程(一):Java世界里对象

    但是,回到虚拟世界,我们可以随时new出我们想要任何对象,这么对象,简直妃子三千,佳丽无数,我们真的懂它们吗?...1、初识OOP OOP,既Object-oriented Programming,面向对象程序设计。就这一句话,给Java赋予了生命,其实她和我们真实世界离奇相似。...每个对象看起来都有点像一台微型计算机——它具有状态,还具有操作,用户可以要求对象执行这些操作。 还记得你第一次在数学课上学加减法老师是怎么讲吗?比如1+4=?怎么计算。...但是这么做的话就会存在一个问题,容器中ClassA实例都向上转型为Object类型对象,那么当前状态下仅仅拥有Object功能,如果要获得自己本身功能,还需要向下转型变成自身原来对象。...13.并发 古时候神话里一种分身术,可以几个化身同时做几件事情。其实这个科学理论上来讲,如果你移动速度足够快,不同场景下切换足够灵活,是可以达到这种效果

    64020
    领券