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

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

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

55320

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

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

1.2K40
您找到你想要的搜索结果了吗?
是的
没有找到

Agent 与对象辨析

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

54620

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

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

98020

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

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

91330

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

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

56420

面向对象先导课感想

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

75340

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

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

19820

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

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

1.6K30

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

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

40630

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

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

49840

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

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

60030

建模,没必要

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

37110

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

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

69320

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

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

35020

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

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

49620

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

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

73030

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

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

36720

Akka 指南 之「为什么现代系统需要新编程模型?」

因此,构建高需求(demanding requirements)分布式系统会遇到传统面向对象编程(OOP)模型无法完全解决挑战,但这可以 Actor 模型中获益。...为了突出 Actor 模型所能解决问题,本主题讨论了传统编程假设与现代多线程、 CPU 架构现实之间不匹配问题: 封装挑战 共享内存在现代计算机架构中错觉 调用栈假象 封装挑战 OOP...封装意味着不能直接外部访问对象内部数据;只能通过调用一组协调方法来修改它。对象负责暴露保护其封装数据不变性安全操作。 例如,对有序二叉树实现操作不允许违反树顺序不变量。...我们通常将系统设想为一个对象实例网络,这些对象实例对方法调用作出反应,修改其内部状态,然后通过方法调用相互通信,从而推动整个应用程序状态前进: ?...---- 名词解析:缓存线, cache line,数据以固定大小块在内存和缓存之间传输,称为缓存线或缓存块。当缓存线内存复制到缓存中时,会创建一个缓存项。

72720

理论何用?不问“何用”,先问“用否”!

昨天准备写点东西,把原来同事代码拿过来看看,这位同事有数年大型国企、数年知名外企工作经验,而且“案头”常放一部厚案头“设计模式”方面的书,但我之前从未和他一起写过程序,在看之前我一直在想他写程序应该非常不错吧...想起同事以前偶尔说OOP(面向对象编程),想起他案头上那本厚厚设计模式,再看看他写代码,我都不相信这是他写。OO啥用?OOP啥用?设计模式啥用?归根结底,“理论何用”?     ...两个世纪以来世界科学技术发展印证了这一理论和实践关系,“理论物理学”便是物理学发展最高境界!     回过头来说说我们OO(面向对象)理论,为什么需要OO?...自从OO理论提出以来,近20年软件取得了飞速发展,各种具有OO特点高级语言层出不穷,比如 C++,Java,C#等等,但并不是我们了这些OO工具和语言,就等于我们开发软件就是符合OOP,如果我们拥有...所以,请先不要说“理论何用”,先问问自己你“用理论”了吗?

60870
领券