- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
尝试了解类型是否暗示面向对象,反之亦然。
问题:
究竟什么是类型?
ruby 中的类可以称为“类型”吗?
在 javascript 中,原生函数/对象,如 Array、String、Function ... 它们是类型吗?
C 结构是类型吗?
即使一种语言不支持 OO,它又如何能被打字?例如 haskell 。这种语言中的类型是否是 OOPL 中的对象/类中没有行为(方法)的“数据”类型?有类型但没有 OO 的语言和支持 OO 的语言在类型上有什么显着差异。
如果类/对象是类型,OO 不就意味着类型吗?
你能拥有一个没有 OO 语言中典型层次结构的类型系统吗?
既然clojure 支持类型提示,那么在某种意义上它可以被称为类型化吗?它不是静态类型的。
“非类型化”和“动态类型化”这两个词的意思相同吗?
最佳答案
静态类型是程序(通常是表达式)的一部分的属性,类型检查器将在不执行程序的情况下尝试证明或反驳,可能同时推断该属性。 (实际上,这有点离谱,依赖类型和分阶段编译使事实比这更模糊)。从广义上看,动态类型语言具有一种静态类型 - 语法上有效的表达式类型。
动态类型是运行时将在程序执行期间自动检查的“对象”(不一定是 OO 对象)的属性。每个主流静态类型语言都有一些动态类型......例如divide 函数静态定义为接受两个数字并返回一个数字,但动态定义为第二个数字不能为零。有静态类型的语言,其中“非零数”可以是静态证明的类型。在许多静态类型语言(例如 Java)中,非空是一种动态类型,而在 Haskell 中它是一种静态类型。等等
这两者有些相关(它们都是防止未定义行为的方法),但也完全不同,以至于“类型”这个词被用来表示两者,这很容易混淆。
静态和动态类型系统都早于 OO,并且都有出色的非 OO 语言来表示它们(例如 Scheme 和 SML)。事实上,它们早于我们所知道的计算机编程。查看可追溯到 1930 年代和 40 年代的非类型化和简单类型化 lambda 演算。
有关差异的更深入讨论,请参阅:http://web.archive.org/web/20080822101209/http://www.pphsg.org/cdsmith/types.html
查看静态和动态类型的某些属性的一种方法,请参阅:http://james-iry.blogspot.com/2010/05/types-la-chart.html
动态类型化和非类型化是同一回事吗?好吧……无类型来自无类型的 lambda 演算。与其他 lambda 演算(如具有静态类型的简单类型 lambda 演算)相比,它被称为无类型。因此,从这个意义上讲,动态类型语言当然是无类型的。但是……
与“真正的”编程语言不同,无类型的 lambda 演算具有这样的特性,即任何语法上有效的表达式都可以“取得进展”,而无需测试任何可能导致未定义行为的特性。除以零、取消引用 null 或将消息发送到无法处理它的对象是没有等价物的。因此,即使无类型的 LC 是无类型的,也可以提出这样的论点,即无类型的 LC 没有动态类型系统。
关于javascript - 类型和 OO 耦合了吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3921650/
Law of Demeter表示你应该只与你直接了解的对象交谈。也就是说,不要执行方法链接来与其他对象通信。当您这样做时,您正在与中间对象不恰本地建立不正确的链接coupling您的代码到其他代码。
我已经实现了一个 CodeService,它将从代码表中检索国家/地区列表。 在我的 ShippingService 中,我想检查订单是否运送到某个国家/地区。 在这种情况下,我应该使用 CodeSe
虽然这个论坛上有很多包含耦合和内聚示例的好示例,但我正在努力将其完全应用到我的代码中。我可以识别代码中可能需要更改的部分。是否有任何 Java 专家能够查看我的代码并向我解释哪些方面是好的和坏的。我根
我有一个创建新对象 Student 并将其添加到数组列表 studentRegister 的方法: public void addStudent(String name, String age) {
在高耦合环境中,更改一个模块会影响另一个模块。好的,但我看不出这怎么可能(除了更改方法签名或返回类型)? 好吧,如果我改变一个类,那么它只能在以下情况下破坏其他类中的代码: 如果我突然改变了一个方法的
问题描述: 我正在一个项目中,以采用现有的JavaScript脚本并对其进行修改以支持异步加载。如果您不了解异步或延迟加载脚本,但想了解更多信息read this。 main.js脚本要做的第一件事之
我正在编写一个模拟,需要一些关于设计的提示。基本思想是生成给定随机过程的数据,然后将其用于各种计算。例如对于 1 次迭代: 进程 1 -> 为源 1 生成数据:x1 进程 2 -> 为源 1 生成数据
给定两个字符串,S1 和 S2。给定的计分方案包括空位罚分、不匹配分数和匹配分数。 找到与 S2 最匹配的 S1。 我的想法是列出所有可能的S1,然后与S2一一匹配。使用暴力列出所有可能的 S1。然后
我尝试使用 ctypes.CDLL 类 (Linux) 在 Python 中加载 C 共享库 .so。这是 link告诉我我做了什么。正如我看到的文档,它说 CDLL 类假定函数返回 int 类型。我
目录 什么是耦合性 什么是程序间的耦合 如何解耦 工厂模式解耦 案例 原因就是: 解决思路:
我尝试使用 Matlab 函数 Pdepe ( https://www.mathworks.com/help/matlab/ref/pdepe.html ) 求解平流扩散 react 问题的一维耦合偏
如何处理高级 C++ 应用程序中的耦合? 我们可以使用(例如)Witty 编写的 web 应用程序的完成代码,并用它制作控制台应用程序吗? ...或者将其更改为使用 Qt 制作的带有 GUI 的桌面应
假设我们有类: class Post def save # implementation end def self.find(id) #implementation e
简介 我正在尝试使用接口(interface)、抽象类和泛型在 Java 中创建一个相当复杂的结构。由于没有使用泛型的经验,在创建良好的 OOP 设计方面只有一般经验,这开始证明是一个相当大的挑战。
考虑 Windows 资源管理器(或 regedit 或类似工具)。左侧是 TreeView ,右侧是 ListView 。在我所知道的所有情况下,右 View 的内容都反射(reflect)了左 P
我有一个耦合代码(fortran 和 c++),我现在在 python 中调用。 main.exe 工作正常,但是当我在 python 中调用耦合版本时,出现段错误(核心转储)错误。我确定了出现问题的
我正在尝试编写 CMakeLists.txt 以耦合一个简单的 FORTRAN 程序,该程序使用 iso_c_binding 调用 C++ 函数。当我使用 gfortran 作为 FORTRAN 编译
我们将 NHibernate 用于 ORM,在程序的初始化阶段,我们需要从数据库中加载某个类 T 的许多实例。 在我们的应用程序中,提取所有这些实例的以下代码需要很长时间: public IList
我是一名优秀的程序员,十分优秀!