编程语言中的Class、Object、Property、attribute、field、Method、Event【修订】
"对象"(Object)就像我们在日常生活中所看到的各种物体,例如汽车、手机等等,而对象可能又是由许多对象组成,例如汽车是一种对象,而汽车又由发动机、车体、车轮等构成。在面向对象(Object Oriented)的软件中,对象(Object)是某一个类(Class)的实例(Instance),类是对象的抽象。类就相当于一个模板,在类中把属性和方法定义好,当创建类的对象(object)时,这个对象就自动具有该类的属性和方法,不需要再去手动声明。
Property、attribute、field、Method:
Description | OOA/OOD | C++ | Java/C# | python | JavaScript | PHP |
Feature(特征) 【刻画或描述Object的特征 / Class中的变量、常量】 | Attribute | Member Variable /data member | Field | data attribute /variable | Property / field | Property |
Operation(操作) 【Object提供的服务或操作 / Class中的函数】 | Method | Member Function | Method | Method | Method | Method |
OOA/OOD:object oriented analysis / object oriented design,面向对象分析和设计。
attribute 和Property有时不加区别,有时有些区别。属性(attribute)经常也被称为成员(members)或特性(property) 。有些作者(包括英文作者)认为这些术语拥有不同的含义;也有些作者将这两个词——attribute和property——视为同义词(可以互换使用),attribute和property都是类成员。具体到某种编程语言,需要在语境中识别其语法用途含义,如在java、C#、python中Property有另外的含义。
在Java中(C#中情况类似),Property是特殊的field,其用途体是,在同一个类内访问 private私有变量(外部类无权访问它),但是,如果我们提供公共get和set方法,就可以访问它们,Getter和Setter是用于保护数据安全且灵活的方法。关于getter和setter可参见 https://www.w3schools.cn/java/java_encapsulation.asp
Python property 可参见 https://docs.python.org/3/library/functions.html#property
在Web文档资料中(包括权威的https://developer.mozilla.org/zh-CN/docs/Web 支持多语言包括中英文切换),一般而言,在HTML部分将的attribute译为属性,在CSS部分将Property译为属性,在JavaScript部分将Property译为属性、attribute译为特性。
编程语言中的Property和attribute常见翻译小结
在面向对象编程语言中,通常可以将 attribute 翻译为“属性”,而将 property 翻译为“属性”或者“特性”,具体取决于上下文和语境。在 Web 开发中,attribute 通常指 HTML 元素的属性,而 property 则更多指 DOM 元素的属性。在 JavaScript 中,将 Property 译为属性、attribute 译为特性是比较常见的做法。
参见:
OOP Terminology: class, attribute, property, field, data member OOP Terminology: class, attribute, property, field, data member - Stack Overflow
(1) C++ Class declaration https://en.cppreference.com/w/cpp/language/class
(2) ORACLE Java Classes https://docs.oracle.com/javase/tutorial/java/javaOO/classes.html
(3) Java中field和variable 区别及相关术语解释图灵社区
(4) 类和结构(C# 编程指南)C# 中的类、结构和记录 | Microsoft Docs
(5) JavaScript之Property
属性(JavaScript)https://developer.mozilla.org/zh-CN/docs/Glossary/Property/JavaScript 【支持多语言包括中英文及多版本切换】
Working with objects(使用对象)使用对象 - JavaScript | MDN
JavaScript>Using classes 之field https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Using_Classes
DOM中 property 和 attribute 详解 https://cloud.tencent.com/developer/article/1326919
(6) PHP class PHP: The Basics - Manual
(7) python的Classes https://docs.python.org/3/tutorial/classes.html 【支持多语言包括中英文及多版本切换】
Python的property 可见 https://blog.csdn.net/YiJie__ShuSheng/article/details/84933648
https://zhuanlan.zhihu.com/p/366156798
奇葩的是,大体而言,在Python中,Attribute和Property分别与JavaScript中的Property和Attribute相对应。
特别提示:是否感觉些术语比较乱腾?而一些讲解资料用词太随意,翻译对容易混淆的用语处理不严谨且不附带原词,更加剧了此现象。为满足不断发展变化现实需求,编程语言也需要不断发展变化,因此这种情况可以减轻但难以消除。学习者需要结合语境,通过例子实验,逐步了解技术思想和含义,而不必拘泥于术语的名字。