pioneer是什么牌子| 嘴发酸是什么原因引起| 泡黄芪水喝有什么好处| 眼底充血是什么原因| 人类免疫缺陷病毒抗体是什么意思| 嗓子疼有痰吃什么药| 我宣你是什么意思| 东方蝾螈吃什么| 孙膑原名叫什么| 什么是性冷淡| 胆固醇高吃什么最好| 老公不交工资意味什么| 类风湿因子高吃什么药| 做不好的梦预示着什么| 什么是创业板股票| l是什么字| 盆腔积液是什么原因| 乌豆和黑豆有什么区别| 牛黄安宫丸什么时候吃最好| 为什么端午节要吃粽子| 甲胎蛋白是检查什么| 有两把刷子是什么意思| 欣字属于五行属什么| 肝肾不足证是什么意思| 味蕾是什么意思| 鸡蛋白过敏指的是什么| 尿素氮肌酐比值偏高是什么原因| 孕妇缺铁吃什么| 规培是什么| 痛风是什么原因引起的| 替身是什么意思| 什么是淋巴| 235是什么意思| 众什么意思| 消防队属于什么编制| 人造奶油是什么做的| 嘴角周围长痘痘是什么原因| 坎什么意思| 摔伤用什么药好得快| 随性是什么意思| 石家庄古代叫什么名字| 两个百字念什么| 卵巢早衰吃什么药调理最好| 大便真菌阳性说明什么| 什么是援交| 马云是什么大学毕业的| 手控是什么意思| 萎缩性胃炎伴糜烂吃什么药| 埋线有什么好处和坏处| nsfw是什么意思| 腊八蒜为什么是绿色的| 儿童吃手指是什么原因| 腹股沟疝气挂什么科| 眼睛无神呆滞什么原因| 肾虚吃什么好| 硬不起来吃什么好| 太学是什么意思| 蚕蛾吃什么| 九月十三是什么星座| 尿白细胞阳性是什么意思| 胃一阵一阵绞痛是什么原因| uma是什么意思| ddp是什么化疗药| 蜈蚣咬了用什么药| 一丘之貉是什么意思| 曹真和曹操什么关系| 手到擒来是什么意思| 嗯呢什么意思| 画眉鸟吃什么| 类风湿阳性是什么意思| 肠道消炎用什么药最好| 什么菜降血压效果最好| 拜忏是什么意思| 肾阳虚喝什么泡水最好| 毕婚族是什么意思| 血氧饱和度是什么意思| 羞涩是什么意思| 45年属什么| 肠胃炎是什么| 7月26日什么星座| 紫癜是什么病| 利字五行属什么| 无锡有什么好玩的| 牛子是什么| 30号来的月经什么时候是排卵期| 高压150低压100吃什么药| 双肾尿盐结晶是什么意思| 为什么会得肿瘤| 腿痛挂什么科| 梦见死猪是什么意思| 经常流鼻血是什么情况| 喉咙疼痛吃什么药效果最好| 什么现象说明奶吸通了| 甲肝抗体阳性代表什么| 用甲硝唑栓有什么反应| 79年属什么的| 礼物送什么| 生化妊娠什么意思| 虾滑可以做什么菜| 头爱出汗是什么原因引起的| 右小指麻木是什么征兆| 急性扁桃体化脓是什么原因引起的| 1999年发生了什么事| mri是什么| 吃南瓜有什么好处和坏处| 疝囊是什么| 特斯拉用的是什么电池| 小腿抽筋是什么原因引起的| 摸摸唱是什么意思| 哈工大全称是什么| 立秋抓秋膘吃什么| 乳腺疼挂什么科| 全身燥热是什么原因引起的| 微笑是什么| 十二指肠溃疡是什么原因引起的| 普洱茶什么牌子好| 3岁小孩说话结巴是什么原因| 燃烧脂肪是什么感觉| 7月20日是什么星座| 干眼症滴什么眼药水好| 酉是什么意思| 甘草不能和什么一起吃| 孩子白细胞高是什么原因| 肠胃不好喝什么奶粉好| 03年属什么| 睡眠不好总做梦是什么原因| 吃雪燕有什么好处| 湿气重吃什么水果好| 水碱是什么| 凤眼果什么时候成熟| 包皮过长有什么危害| 睡觉流口水是什么情况| 尿检阳性是什么意思| 用什么泡脚去湿气寒气| 急性胰腺炎吃什么药| 弱视什么意思| 置之死地而后生是什么意思| 穿什么衣服好看| 辣子鸡属于什么菜系| 什么是便血| 榴莲有什么营养| 66.66红包代表什么意思| 手指僵硬暗示什么疾病| 红曲是什么东西| 行李是什么意思| 宿醉是什么意思| 血压低压低是什么原因| 三分钟热度是什么意思| 什么油锯好| 喝酒后胃疼吃什么药| 刮痧是什么原理| 乳房痛什么原因| 九月十号是什么星座| 空是什么意思| 为什么乳头会变黑| 手工diy是什么意思| 束缚是什么意思| 验孕棒什么时候测比较准| 眉目比喻什么| 咳嗽吐黄痰吃什么药| 原始分是什么意思| 顾影自怜是什么意思| 绝对值是什么| 洗漱是什么意思| dc是什么| 有什么好处| 耕田是什么意思| 易烊千玺是什么星座| 额头有痣代表什么| 小孩肚脐眼周围疼是什么原因| 噫是什么意思| 手经常抽筋是什么原因| 三焦是什么| nag是什么意思| 夏天像什么| 月子里可以吃什么水果| 新五行属什么| 糖醇是什么意思| 走路脚后跟疼是什么原因| 浅绿色是什么颜色| 荨麻疹为什么晚上起| 梦见亲人去世是什么意思| 田共念什么| 小儿积食吃什么药| 感冒不能吃什么水果| 同房肚子痛是什么原因| 情非得已是什么生肖| 朋友生日送什么礼物好| 曼字五行属什么| 四楼五行属什么| 吃什么可以排出霉菌| 台湾海峡属于什么海| 为什么一吃饭就肚子疼| cos是什么| rf医学上是什么意思| 怀孕乳头会有什么变化| 脾胃虚寒吃什么食物| 金蝉什么时候出土| 敏感肌是什么样的| 梗概什么意思| 知天命是什么年纪| 太阳穴长痘是什么原因| b12是什么| 花木兰是什么剧种| kpa什么意思| 柠檬加蜂蜜泡水喝有什么功效| 产后42天复查都检查什么| ricu病房是什么意思| 绿豆汤是什么颜色| 一天当中什么时候最热| gravy是什么意思| 谷氨酸高是什么原因| 1988年属什么| 看乳房挂什么科| 马齿苋治什么病| 知了在树上干什么| 五六天不拉大便是什么原因| 大便次数多吃什么药| 低密度脂蛋白偏高吃什么食物| 左室高电压是什么意思| 脸上长毛什么原因| 属牛的五行属性是什么| 什么叫玄关| 金牛座前面是什么星座| da医学上是什么意思| 大三阳是什么病| 柠檬水喝多了有什么坏处| 什么水果补钾| 支气管扩张是什么原因引起| 80是什么意思| 野生甲鱼吃什么| 取活检是什么意思| 同工同酬是什么意思| 开小灶是什么意思| 喘气费劲是什么原因| 头发竖起来是什么原因| 凌晨五点是什么时辰| copd是什么病| 凉皮用什么做的| 什么食物含锌多| 看破不说破什么意思| 拔罐对身体有什么好处和坏处| 红茶有什么功效| 甲胎蛋白偏低说明什么| 3.23是什么星座| ip是什么意思| 浮生若梦什么意思| 损友是什么意思| 良性反应性改变是什么意思| 门槛费是什么意思| 经常吃豆腐有什么好处和坏处| 晚上老咳嗽是什么原因| 什么情况| 抓阄什么意思| 什么叫石女| 什么可以消肿快的方法| 小孩干呕是什么原因| 什么是适度水解奶粉| 操逼什么意思| 脑瘤早期什么症状| 伤口撒什么药粉好得快| 原生态是什么意思| 文定之喜是什么意思| 疖肿是什么意思| 百度Jump to content

http://www.tibetinfor.com/shh/20170322-8598.html

From Wikipedia, the free encyclopedia
(Redirected from Object system)
百度 人社部副部长汤涛出席会议并讲话。

UML notation for a class. This Button class has variables for data, and functions. Through inheritance, a subclass can be created as a subset of the Button class. Objects are instances of a class.

Object-oriented programming (OOP) is a programming paradigm based on the object[1] – a software entity that encapsulates data and function(s). An OOP computer program consists of objects that interact with one another.[2][3] A programming language that provides OOP features is classified as an OOP language but as the set of features that contribute to OOP is contended, classifying a language as OOP and the degree to which it supports or is OOP, are debatable. As paradigms are not mutually exclusive, a language can be multi-paradigm; can be categorized as more than only OOP.

Sometimes, objects represent real-world things and processes in digital form.[4] For example, a graphics program may have objects such as circle, square, and menu. An online shopping system might have objects such as shopping cart, customer, and product. Niklaus Wirth said, "This paradigm [OOP] closely reflects the structure of systems in the real world and is therefore well suited to model complex systems with complex behavior".[5]

However, more often, objects represent abstract entities, like an open file or a unit converter. Not everyone agrees that OOP makes it easy to copy the real world exactly or that doing so is even necessary. Bob Martin suggests that because classes are software, their relationships don't match the real-world relationships they represent.[6] Bertrand Meyer argues that a program is not a model of the world but a model of some part of the world; "Reality is a cousin twice removed".[7] Steve Yegge noted that natural languages lack the OOP approach of naming a thing (object) before an action (method), as opposed to functional programming which does the reverse.[8] This can make an OOP solution more complex than one written via procedural programming.[9]

Notable languages with OOP support include Ada, ActionScript, C++, Common Lisp, C#, Dart, Eiffel, Fortran 2003, Haxe, Java,[10] JavaScript, Kotlin, Logo, MATLAB, Objective-C, Object Pascal, Perl, PHP, Python, R, Raku, Ruby, Scala, SIMSCRIPT, Simula, Smalltalk, Swift, Vala and Visual Basic (.NET).

History

[edit]

The idea of "objects" in programming began with the artificial intelligence group at Massachusetts Institute of Technology (MIT) in the late 1950s and early 1960s. Here, "object" referred to LISP atoms with identified properties (attributes).[11][12] Another early example was Sketchpad created by Ivan Sutherland at MIT in 1960–1961. In the glossary of his technical report, Sutherland defined terms like "object" and "instance" (with the class concept covered by "master" or "definition"), albeit specialized to graphical interaction.[13] Later, in 1968, AED-0, MIT's version of the ALGOL programming language, connected data structures ("plexes") and procedures, prefiguring what were later termed "messages", "methods", and "member functions".[14][15] Topics such as data abstraction and modular programming were common points of discussion at this time.

Meanwhile, in Norway, Simula was developed during the years 1961–1967.[14] Simula introduced essential object-oriented ideas, such as classes, inheritance, and dynamic binding.[16] Simula was used mainly by researchers involved with physical modelling, like the movement of ships and their content through cargo ports.[16] Simula is generally accepted as being the first language with the primary features and framework of an object-oriented language.[17]

I thought of objects being like biological cells and/or individual computers on a network, only able to communicate with messages (so messaging came at the very beginning – it took a while to see how to do messaging in a programming language efficiently enough to be useful).

Alan Kay, [1]

Influenced by both MIT and Simula, Alan Kay began developing his own ideas in November 1966. He would go on to create Smalltalk, an influential OOP language. By 1967, Kay was already using the term "object-oriented programming" in conversation.[1] Although sometimes called the "father" of OOP,[18] Kay has said his ideas differ from how OOP is commonly understood, and has implied that the computer science establishment did not adopt his notion.[1] A 1976 MIT memo co-authored by Barbara Liskov lists Simula 67, CLU, and Alphard as object-oriented languages, but does not mention Smalltalk.[19]

In the 1970s, the first version of the Smalltalk programming language was developed at Xerox PARC by Alan Kay, Dan Ingalls and Adele Goldberg. Smalltalk-72 was notable for use of objects at the language level and its graphical development environment.[20] Smalltalk was a fully dynamic system, allowing users to create and modify classes as they worked.[21] Much of the theory of OOP was developed in the context of Smalltalk, for example multiple inheritance.[22]

In the late 1970s and 1980s, OOP rose to prominence. The Flavors object-oriented Lisp was developed starting 1979, introducing multiple inheritance and mixins.[23] In August 1981, Byte Magazine highlighted Smalltalk and OOP, introducing these ideas to a wide audience.[24] LOOPS, the object system for Interlisp-D, was influenced by Smalltalk and Flavors, and a paper about it was published in 1982.[25] In 1986, the first Conference on Object-Oriented Programming, Systems, Languages, and Applications (OOPSLA) was attended by 1,000 people. This conference marked the start of efforts to consolidate Lisp object systems, eventually resulting in the Common Lisp Object System. In the 1980s, there were a few attempts to design processor architectures that included hardware support for objects in memory, but these were not successful. Examples include the Intel iAPX 432 and the Linn Smart Rekursiv.

In the mid-1980s, new object-oriented languages like Objective-C, C++, and Eiffel emerged. Objective-C was developed by Brad Cox, who had used Smalltalk at ITT Inc. Bjarne Stroustrup created C++ based on his experience using Simula for his PhD thesis.[20] Bertrand Meyer produced the first design of the Eiffel language in 1985, which focused on software quality using a design by contract approach.[26]

In the 1990s, OOP became the main way of programming, especially as more languages supported it. These included Visual FoxPro 3.0,[27][28] C++,[29] and Delphi[citation needed]. OOP became even more popular with the rise of graphical user interfaces, which used objects for buttons, menus and other elements. One well-known example is Apple's Cocoa framework, used on macOS and written in Objective-C. OOP toolkits also enhanced the popularity of event-driven programming.[citation needed]

At ETH Zürich, Niklaus Wirth and his colleagues created new approaches to OOP. Modula-2 (1978) and Oberon (1987), included a distinctive approach to object orientation, classes, and type checking across module boundaries. Inheritance is not obvious in Wirth's design since his nomenclature looks in the opposite direction: It is called type extension and the viewpoint is from the parent down to the inheritor.

Many programming languages that were initially developed before OOP was popular have been augmented with object-oriented features, including Ada, BASIC, Fortran, Pascal, and COBOL.

Features

[edit]

The OOP features provided by languages varies. Below are some common features of OOP languages.[30][31][32][33] Comparing OOP with other styles, like relational programming, is difficult because there isn't a clear, agreed-upon definition of OOP.[34]

Encapsulation

[edit]

An object encapsulates fields and methods. A field (a.k.a. attribute or property) contains information (a.k.a. state) as a variable. A method (a.k.a. function or action) defines behavior via logic code. Encapsulation is about keeping related, code together.

Information hiding

[edit]

Information hiding is organizing code so that it is accessible only to the code that needs it; not to the rest of the codebase. The internal details of an object are hidden from the outside code, allowing for changing how an object works without affecting its interface and therefore other code. Hiding information helps prevent problems when changing the code.[35] Objects act as a barrier between their internal workings and external, consuming code. Consuming code can only interact with an object via its public members.

Some programming languages, like Java, provide information hiding via visibility key words (private and public).[36] Some languages don't provide a visibility feature, but developers might follow a convention such as starting a private member name with an underscore. Intermediate levels of access also exist, such as Java's protected keyword, (which allows access from the same class and its subclasses, but not objects of a different class), and the internal keyword in C#, Swift, and Kotlin, which restricts access to files within the same module.[37]

Supporters of information hiding and data abstraction say it makes code easier to reuse and intuitively represents real-world situations.[38] [39] However, others argue that OOP does not enhance readability or modularity.[40][41] Eric S. Raymond has written that OOP languages tend to encourage thickly layered programs that destroy transparency.[42] Raymond compares this unfavourably to the approach taken with Unix and the C language.[42]

SOLID includes the open/closed principle, which says that classes and functions should be "open for extension, but closed for modification". Luca Cardelli has stated that OOP languages have "extremely poor modularity properties with respect to class extension and modification", and tend to be extremely complex.[40] The latter point is reiterated by Joe Armstrong, the principal inventor of Erlang, who is quoted as saying:[41]

The problem with object-oriented languages is they've got all this implicit environment that they carry around with them. You wanted a banana but what you got was a gorilla holding the banana and the entire jungle.

Leo Brodie says that information hiding can lead to duplicate code,[43] which goes against the don't repeat yourself rule of software development.[44]

Composition

[edit]

Via object composition, an object can contain other objects. For example, an Employee object might contain an Address object, along with other information like name and position. Composition is a "has-a" relationships, like "an employee has an address".

Inheritance

[edit]

Inheritance be supported via the class or the prototype, which have differences but use similar terms like object and instance.

Class-based

[edit]

In class-based programming, the most common type of OOP, an object is an instance of a class. The class defines the data (variables) and methods (logic). An object is created via the constructor. Elements of class may include:

  • Class variable – belongs to the class itself; all objects of the class share one copy
  • Instance variable – belongs to an object; every object has its own version of these variables
  • Member variable – refers to both the class and instance variables of a class
  • Class method – can only use class variables
  • Instance method – belongs to an objects; can use both instance and class variables

Classes may inherit from other classes, creating a hierarchy of classes: a case of a subclass inheriting from a super-class. For example, an Employee class might inherit from a Person class which endows the Employee object with the variables from Person. The subclass may add variables and methods that do not affect the super-class. Most languages also allow the subclass to override super-class methods. Some languages support multiple inheritance, where a class can inherit from more than one class, and other languages similarly support mixins or traits. For example, a mixin called UnicodeConversionMixin might add a method unicode_to_ascii() to both a FileReader and a WebPageScraper class.

An abstract class cannot be directly instantiated as an object. It is only used as a super-class.

Other classes are utility classes which contain only class variables and methods and are not meant to be instantiated or subclassed.[45]

Prototype-based

[edit]

Instead of providing a class concept, in prototype-based programming, an object is linked to another object, called its prototype or parent. In Self, an object may have multiple or no parents,[46] but in the most popular prototype-based language, JavaScript, an object has exactly one prototype link, up to the base object whose prototype is null.

A prototype acts as a model for new objects. For example, if you have an object fruit, you can make two objects apple and orange that share traits of the fruit prototype. Prototype-based languages also allow objects to have their own unique properties, so the apple object might have an attribute sugar_content, while the orange or fruit objects do not.

No inheritance

[edit]

Some languages, like Go, don't support inheritance.[47] Instead, they encourage "composition over inheritance", where objects are built using smaller parts instead of parent-child relationships. For example, instead of inheriting from class Person, the Employee class could simply contain a Person object. This lets the Employee class control how much of Person it exposes to other parts of the program. Delegation is another language feature that can be used as an alternative to inheritance.

Programmers have different opinions on inheritance. Bjarne Stroustrup, author of C++, has stated that it is possible to do OOP without inheritance.[48] Rob Pike has criticized inheritance for creating complex hierarchies instead of simpler solutions.[49]

Inheritance and behavioral subtyping

[edit]

People often think that if one class inherits from another, it means the subclass "is a" more specific version of the original class. This presumes the program semantics are that objects from the subclass can always replace objects from the original class without problems. This concept is known as behavioral subtyping, more specifically the Liskov substitution principle.

However, this is often not true, especially in programming languages that allow mutable objects, objects that change after they are created. In fact, subtype polymorphism as enforced by the type checker in OOP languages cannot guarantee behavioral subtyping in most if not all contexts. For example, the circle-ellipse problem is notoriously difficult to handle using OOP's concept of inheritance. Behavioral subtyping is undecidable in general, so it cannot be easily implemented by a compiler. Because of this, programmers must carefully design class hierarchies to avoid mistakes that the programming language itself cannot catch.

Dynamic dispatch

[edit]

A method my be invoked via dynamic dispatch such that the method is selected at runtime instead of compile time. If the method choice depends on more than one type of object (such as other objects passed as parameters), it's called multiple dispatch.

Dynamic dispatch works together with inheritance: if an object doesn't have the requested method, it looks up to its parent class (delegation), and continues up the chain to find a matching method.

Message passing

[edit]

Message passing is when the method name and its inputs are sent like a message to the object for it to act on.

Polymorphism

[edit]

Polymorphism refers to subtyping or subtype polymorphism, where a function can work with a specific interface and thus manipulate entities of different classes in a uniform manner.[50]

For example, imagine a program has two shapes: a circle and a square. Both come from a common class called "Shape." Each shape has its own way of drawing itself. With subtype polymorphism, the program doesn't need to know the type of each shape, and can simply call the "Draw" method for each shape. The programming language runtime will ensure the correct version of the "Draw" method runs for each shape. Because the details of each shape are handled inside their own classes, this makes the code simpler and more organized, enabling strong separation of concerns.

Open recursion

[edit]

An object's methods can access the object's data. Many programming languages use a special word, like this or self, to refer to the current object. In languages that support open recursion, a method in an object can call other methods in the same object, including itself, using this special word. This allows a method in one class to call another method defined later in a subclass, a feature known as late binding.

Design patterns

[edit]

Design patterns are common solutions to problems in software design. Some design patterns are especially useful for OOP, and design patterns are typically introduced in an OOP context.

Object patterns

[edit]

The following are notable software design patterns for OOP objects.[51]

A common anti-pattern is the God object, an object that knows or does too much.

Gang of Four design patterns

[edit]

Design Patterns: Elements of Reusable Object-Oriented Software is a famous book published in 1994 by four authors: Erich Gamma, Richard Helm, Ralph Johnson, and John Vlissides. People often call them the "Gang of Four". The book talks about the strengths and weaknesses of OOP and explains 23 common ways to solve programming problems.

These solutions, called "design patterns," are grouped into three types:

Object-orientation and databases

[edit]

Both OOP and relational database management systems (RDBMSs) are widely used in software today. However, relational databases don't store objects directly, which creates a challenge when using them together. This issue is called object-relational impedance mismatch.

To solve this problem, developers use different methods, but none of them are perfect.[52] One of the most common solutions is object-relational mapping (ORM), which helps connect object-oriented programs to relational databases. Examples of ORM tools include Visual FoxPro, Java Data Objects, and Ruby on Rails ActiveRecord.

Some databases, called object databases, are designed to work with OOP. However, they have not been as popular or successful as relational databases.

Date and Darwen have proposed a theoretical foundation that uses OOP as a kind of customizable type system to support RDBMSs, but it forbids objects containing pointers to other objects.[53]

Responsibility- vs. data-driven design

[edit]

In responsibility-driven design, classes are built around what they need to do and the information they share, in the form of a contract. This is different from data-driven design, where classes are built based on the data they need to store. According to Wirfs-Brock and Wilkerson, the originators of responsibility-driven design, responsibility-driven design is the better approach.[54]

SOLID and GRASP guidelines

[edit]

SOLID is a set of five rules for designing good software, created by Michael Feathers:

GRASP (General Responsibility Assignment Software Patterns) is another set of software design rules, created by Craig Larman, that helps developers assign responsibilities to different parts of a program:[55]

  • Creator Principle: allows classes create objects they closely use.
  • Information Expert Principle: assigns tasks to classes with the needed information.
  • Low Coupling Principle: reduces class dependencies to improve flexibility and maintainability.
  • High Cohesion Principle: designing classes with a single, focused responsibility.
  • Controller Principle: assigns system operations to separate classes that manage flow and interactions.
  • Polymorphism: allows different classes to be used through a common interface, promoting flexibility and reuse.
  • Pure Fabrication Principle: create helper classes to improve design, boost cohesion, and reduce coupling.

Formal semantics

[edit]

Researchers have tried to formally define the semantics of OOP. inheritance presents difficulties, particularly with the interactions between open recursion and encapsulated state. Researchers have used recursive types and co-algebraic data types to incorporate essential features of OOP.[56] Abadi and Cardelli defined several extensions of System F<: that deal with mutable objects, allowing both subtype polymorphism and parametric polymorphism (generics), and were able to formally model many OOP concepts and constructs.[57] Although far from trivial, static analysis of object-oriented programming languages such as Java is a mature field,[58] with several commercial tools.[59]

Criticism

[edit]

Some believe that OOP places too much focus on using objects rather than on algorithms and data structures.[60][61] For example, programmer Rob Pike pointed out that OOP can make programmers think more about type hierarchy than composition.[62] He has called OOP "the Roman numerals of computing".[63] Rich Hickey, creator of Clojure, described OOP as overly simplistic, especially when it comes to representing real-world things that change over time.[61] Alexander Stepanov said that OOP tries to fit everything into a single type, which can be limiting. He argued that sometimes we need multisorted algebras: families of interfaces that span multiple types, such as in generic programming. Stepanov also said that calling everything an "object" doesn't add much understanding.[60]

OOP was created to make code easier to reuse and maintain.[64] However, it was not designed to clearly show the flow of a program's instructions. That was left to the compiler. As computers began using more parallel processing and multiple threads, it became more important to understand and control how instructions flow. This is difficult to do with OOP.[65][66][67][68]

Many popular programming languages, like C++, Java, and Python, use OOP. In the past, OOP was widely accepted,[69] but recently, some programmers have criticized it and prefer functional programming instead.[70] A study by Potok et al. found no major difference in productivity between OOP and other methods.[71]

Paul Graham, a well-known computer scientist, believes big companies like OOP because it helps manage large teams of average programmers. He argues that OOP adds structure, making it harder for one person to make serious mistakes, but at the same time restrains smart programmers.[72] Eric S. Raymond, a Unix programmer and open-source software advocate, argues that OOP is not the best way to write programs.[42]

Richard Feldman says that, while OOP features helped some languages stay organized, their popularity comes from other reasons.[73] Lawrence Krubner argues that OOP doesn't offer special advantages compared to other styles, like functional programming, and can complicate coding.[74] Luca Cardelli says that OOP is slower and takes longer to compile than procedural programming.[40]

See also

[edit]

References

[edit]
  1. ^ a b c d "Dr. Alan Kay on the Meaning of "Object-Oriented Programming"". 2003. Retrieved 11 February 2010.
  2. ^ Kindler, E.; Krivy, I. (2011). "Object-Oriented Simulation of systems with sophisticated control". International Journal of General Systems. 40 (3): 313–343. doi:10.1080/03081079.2010.539975.
  3. ^ Lewis, John; Loftus, William (2008). "1.6: Object-Oriented Programming". Java Software Solutions. Foundations of Programming Design (6th ed.). Pearson Education Inc. ISBN 978-0-321-53205-3.
  4. ^ Booch, Grady (1986). Software Engineering with Ada. Addison Wesley. p. 220. ISBN 978-0-8053-0608-8. Perhaps the greatest strength of an object-oriented approach to development is that it offers a mechanism that captures a model of the real world.
  5. ^ Wirth, Niklaus (23 January 2006). "Good ideas, through the looking glass" (PDF). IEEE Computer. Cover Feature. 39 (1): 28–39. doi:10.1109/MC.2006.20. S2CID 6582369. Archived from the original (PDF) on 12 October 2016.
  6. ^ "Uncle Bob SOLID principles". YouTube. 2 August 2018.
  7. ^ Meyer 1997, p. 230.
  8. ^ Yegge, Steve (30 March 2006). "Execution in the Kingdom of Nouns". steve-yegge.blogspot.com. Retrieved 3 July 2010.
  9. ^ Boronczyk, Timothy (11 June 2009). "What's Wrong with OOP". zaemis.blogspot.com. Retrieved 3 July 2010.
  10. ^ Bloch 2018, pp. xi–xii, Foreword.
  11. ^ McCarthy, J.; Brayton, R.; Edwards, D.; Fox, P.; Hodes, L.; Luckham, D.; Maling, K.; Park, D.; Russell, S. (March 1969). "LISP I Programmers Manual" (PDF). Computation Center and Research Laboratory of Electronics. Boston, Massachusetts: Artificial Intelligence Group, M.I.T. Computation Center and Research Laboratory: 88f. Archived from the original (PDF) on 17 July 2010. In the local M.I.T. patois, association lists [of atomic symbols] are also referred to as "property lists", and atomic symbols are sometimes called "objects".
  12. ^ McCarthy, John; Abrahams, Paul W.; Edwards, Daniel J.; Hart, Swapnil D.; Levin, Michael I. (1962). LISP 1.5 Programmer's Manual. MIT Press. p. 105. ISBN 978-0-262-13011-0. Object – a synonym for atomic symbol {{cite book}}: ISBN / Date incompatibility (help)
  13. ^ Ivan E. Sutherland (May 1963). Sketchpad: a man-machine graphical communication system. AFIPS '63 (Spring): Proceedings of the May 21–23, 1963 Spring Joint Computer Conference. AFIPS Press. pp. 329–346. doi:10.1145/1461551.1461591.
  14. ^ a b Nygaard, Kristen; Dahl, Ole-Johan (1 August 1978). "The development of the SIMULA languages". ACM SIGPLAN Notices. 13 (8): 245–272. doi:10.1145/960118.808391.
  15. ^ Ross, Doug. "The first software engineering language". LCS/AI Lab Timeline. MIT Computer Science and Artificial Intelligence Laboratory. Retrieved 13 May 2010.
  16. ^ a b Holmevik, Jan Rune (Winter 1994). "Compiling Simula: A historical study of technological genesis" (PDF). IEEE Annals of the History of Computing. 16 (4): 25–37. doi:10.1109/85.329756. S2CID 18148999. Archived from the original (PDF) on 30 August 2017. Retrieved 3 March 2018.
  17. ^ Madsen, Ole Lehrman. "Kristen Nygaard". A.M. Turing Award Laureates. Retrieved 4 February 2025.
  18. ^ Butcher, Paul (30 June 2014). Seven Concurrency Models in Seven Weeks: When Threads Unravel. Pragmatic Bookshelf. p. 204. ISBN 978-1-68050-466-8.
  19. ^ Jones, Anita K.; Liskov, Barbara H. (April 1976). An Access Control Facility for Programming Languages (PDF) (Technical report). MIT. CSG Memo 137.
  20. ^ a b Bertrand Meyer (2009). Touch of Class: Learning to Program Well with Objects and Contracts. Springer Science & Business Media. p. 329. Bibcode:2009tclp.book.....M. ISBN 978-3-540-92144-8.
  21. ^ Alan C. Kay (March 1993). "The early history of Smalltalk". ACM SIGPLAN Notices. 28 (3): 69–95. doi:10.1145/155360.155364.
  22. ^ Borning, Alan Hamilton (1979). Thinglab: a constraint-oriented simulation laboratory (PDF) (Report). Stanford University.
  23. ^ Moon, David A. (June 1986). "Object-Oriented Programming with Flavors" (PDF). Conference proceedings on Object-oriented Programming Systems Languages and Applications. OOPSLA '86. pp. 1–8. doi:10.1145/28697.28698. ISBN 978-0-89791-204-4. S2CID 17150741. Retrieved 17 March 2022.
  24. ^ "Introducing the Smalltalk Zoo". CHM. 17 December 2020.
  25. ^ Bobrow, D. G.; Stefik, M. J (1982). LOOPS: data and object oriented Programming for Interlisp (PDF). European AI Conference.
  26. ^ Meyer 1997.
  27. ^ 1995 (June) Visual FoxPro 3.0, FoxPro evolves from a procedural language to an object-oriented language. Visual FoxPro 3.0 introduces a database container, seamless client/server capabilities, support for ActiveX technologies, and OLE Automation and null support. Summary of Fox releases
  28. ^ 1995 Reviewers Guide to Visual FoxPro 3.0: DFpug.de
  29. ^ Khurana, Rohit (1 November 2009). Object Oriented Programming with C++, 1E. Vikas Publishing House Pvt Limited. ISBN 978-81-259-2532-3.
  30. ^ Deborah J. Armstrong. The Quarks of Object-Oriented Development. A survey of nearly 40 years of computing literature identified several fundamental concepts found in the large majority of definitions of OOP, in descending order of popularity: Inheritance, Object, Class, Encapsulation, Method, Message Passing, Polymorphism, and Abstraction.
  31. ^ John C. Mitchell, Concepts in programming languages, Cambridge University Press, 2003, ISBN 0-521-78098-5, p.278. Lists: Dynamic dispatch, abstraction, subtype polymorphism, and inheritance.
  32. ^ Michael Lee Scott, Programming language pragmatics, Edition 2, Morgan Kaufmann, 2006, ISBN 0-12-633951-1, p. 470. Lists encapsulation, inheritance, and dynamic dispatch.
  33. ^ Pierce, Benjamin (2002). Types and Programming Languages. MIT Press. ISBN 978-0-262-16209-8., section 18.1 "What is Object-Oriented Programming?" Lists: Dynamic dispatch, encapsulation or multi-methods (multiple dispatch), subtype polymorphism, inheritance or delegation, open recursion ("this"/"self")
  34. ^ C. J. Date, Introduction to Database Systems, 6th-ed., Page 650
  35. ^ McDonough, James E. (2017). "Encapsulation". Object-Oriented Design with ABAP: A Practical Approach. Apress. doi:10.1007/978-1-4842-2838-8. ISBN 978-1-4842-2837-1 – via O'Reilly.
  36. ^ Bloch 2018, pp. 73–77, Chapter §4 Item15 Minimize the accessibility of classes and members.
  37. ^ "What is Object Oriented Programming (OOP) In Simple Words? – Software Geek Bytes". 5 January 2023. Retrieved 17 January 2023.[permanent dead link]
  38. ^ Cardelli, Luca; Wegner, Peter (10 December 1985). "On understanding types, data abstraction, and polymorphism". ACM Computing Surveys. 17 (4): 471–523. doi:10.1145/6041.6042. ISSN 0360-0300.
  39. ^ Jacobsen, Ivar; Magnus Christerson; Patrik Jonsson; Gunnar Overgaard (1992). Object Oriented Software Engineering. Addison-Wesley ACM Press. pp. 43–69. ISBN 978-0-201-54435-0.
  40. ^ a b c Cardelli, Luca (1996). "Bad Engineering Properties of Object-Oriented Languages". ACM Comput. Surv. 28 (4es): 150–es. doi:10.1145/242224.242415. ISSN 0360-0300. S2CID 12105785. Retrieved 21 April 2010.
  41. ^ a b Armstrong, Joe. Seibel, Peter (ed.). Coders at Work: Reflections on the Craft of Programming. Codersatwork.com. Archived from the original on 5 March 2010. Retrieved 13 November 2009.
  42. ^ a b c Raymond, Eric S. (2003). "The Art of Unix Programming: Unix and Object-Oriented Languages". Retrieved 6 August 2014.
  43. ^ Brodie, Leo (1984). Thinking Forth (PDF). pp. 92–93. Retrieved 4 May 2018.
  44. ^ Hunt, Andrew. "Don't Repeat Yourself". Category Extreme Programming. Retrieved 4 May 2018.
  45. ^ Bloch 2018, p. 19, Chapter §2 Item 4 Enforce noninstantiability with a private constructor.
  46. ^ Dony, C; Malenfant, J; Bardon, D (1999). "Classifying prototype-based programming languages" (PDF). Prototype-based programming: concepts, languages and applications. Singapore Berlin Heidelberg: Springer. ISBN 9789814021258.
  47. ^ "Is Go an object-oriented language?". Retrieved 13 April 2019. Although Go has types and methods and allows an object-oriented style of programming, there is no type hierarchy.
  48. ^ Stroustrup, Bjarne (2015). Object-Oriented Programming without Inheritance (Invited Talk). 29th European Conference on Object-Oriented Programming (ECOOP 2015). 1:34. doi:10.4230/LIPIcs.ECOOP.2015.1.
  49. ^ Pike, Rob (14 November 2012). "A few years ago I saw this page". Archived from the original on 14 August 2018. Retrieved 1 October 2016.
  50. ^ Stroustrup, Bjarne (19 February 2007). "Bjarne Stroustrup's C++ Glossary". polymorphism – providing a single interface to entities of different types.
  51. ^ Martin, Robert C. "Design Principles and Design Patterns" (PDF). Archived from the original (PDF) on 6 September 2015. Retrieved 28 April 2017.
  52. ^ Neward, Ted (26 June 2006). "The Vietnam of Computer Science". Interoperability Happens. Archived from the original on 4 July 2006. Retrieved 2 June 2010.
  53. ^ C. J. Date, Hugh Darwen. Foundation for Future Database Systems: The Third Manifesto (2nd Edition)
  54. ^ Wirfs-Brock, Rebecca; Wilkerson, Brian (1989). "Object-Oriented Design: A Responsibility-Driven Approach". ACM SIGPLAN Notices. 24 (10): 74. doi:10.1145/74878.74885.
  55. ^ Karsh, Patrick (19 July 2023). "GRASP Principles: Object-Oriented Design Patterns". Medium. Retrieved 30 March 2025.
  56. ^ Poll, Erik. "Subtyping and Inheritance for Categorical Datatypes" (PDF). Retrieved 5 June 2011.
  57. ^ Abadi, Martin; Cardelli, Luca (1996). A Theory of Objects. Springer-Verlag New York, Inc. ISBN 978-0-387-94775-4. Retrieved 21 April 2010.
  58. ^ Tan, Tian; Li, Yue (12 July 2023). Tai-e: A Developer-Friendly Static Analysis Framework for Java by Harnessing the Good Designs of Classics. ISSTA 2023. pp. 1093–1105. doi:10.1145/3597926.3598120.
  59. ^ Bhutani, Vikram; Toosi, Farshad Ghassemi; Buckley, Jim (1 June 2024). "Analysing the Analysers: An Investigation of Source Code Analysis Tools". Applied Computer Systems. 29 (1): 98–111. doi:10.2478/acss-2024-0013.
  60. ^ a b Stepanov, Alexander (2001–2008). "STLport: An Interview with A. Stepanov". Retrieved 21 April 2010.
  61. ^ a b Hickey, Rich (November 2009). Are We There Yet? (keynote). JVM Languages Summit.
  62. ^ Pike, Rob (25 June 2012). "Less is exponentially more". Retrieved 1 October 2016.
  63. ^ Pike, Rob (2 March 2004). "[9fans] Re: Threads: Sewing badges of honor onto a Kernel". comp.os.plan9 (Mailing list). Retrieved 17 November 2016.
  64. ^ Ambler, Scott (1 January 1998). "A Realistic Look at Object-Oriented Reuse". drdobbs.com. Retrieved 5 August 2025.
  65. ^ Shelly, Asaf (22 August 2008). "Flaws of Object Oriented Modeling". Intel Software Network. Retrieved 4 July 2010.
  66. ^ James, Justin (1 October 2007). "Multithreading is a verb not a noun". techrepublic.com. Archived from the original on 10 October 2007. Retrieved 4 July 2010.
  67. ^ Shelly, Asaf (22 August 2008). "HOW TO: Multicore Programming (Multiprocessing) Visual C++ Class Design Guidelines, Member Functions". support.microsoft.com. Retrieved 4 July 2010.
  68. ^ Robert Harper (17 April 2011). "Some thoughts on teaching FP". Existential Type Blog. Retrieved 5 December 2011.
  69. ^ Brucker, Achim D.; Wolff, Burkhart (2008). "Extensible Universes for Object-Oriented Data Models". ECOOP 2008 – Object-Oriented Programming. Lecture Notes in Computer Science. Vol. 5142. pp. 438–462. doi:10.1007/978-3-540-70592-5_19. ISBN 978-3-540-70591-8. object-oriented programming is a widely accepted programming paradigm
  70. ^ Cassel, David (21 August 2019). "Why Are So Many Developers Hating on Object-Oriented Programming?". The New Stack.
  71. ^ Potok, Thomas; Vouk, Mladen; Rindos, Andy (1999). "Productivity Analysis of Object-Oriented Software Developed in a Commercial Environment" (PDF). Software: Practice and Experience. 29 (10): 833–847. doi:10.1002/(SICI)1097-024X(199908)29:10<833::AID-SPE258>3.0.CO;2-P. S2CID 57865731. Retrieved 21 April 2010.
  72. ^ Graham, Paul. "Why ARC isn't especially Object-Oriented". PaulGraham.com. Retrieved 13 November 2009.
  73. ^ Feldman, Richard (30 September 2019). "Why Isn't Functional Programming the Norm?". YouTube.
  74. ^ Krubner, Lawrence. "Object Oriented Programming is an expensive disaster which must end". smashcompany.com. Archived from the original on 14 October 2014. Retrieved 14 October 2014.

Further reading

[edit]
[edit]
男人喜欢什么 房颤是什么原因引起的 哺乳期乳腺炎吃什么药 南京市徽为什么是貔貅 什么药补肾
碘是什么 梦见酒是什么意思 三个手念什么 下半夜咳嗽是什么原因 夏天适合用什么护肤品
七月七是什么节日 21三体综合征是指什么 血管痉挛是什么症状 八股是什么意思 破是什么生肖
龟头流脓小便刺痛吃什么药 肾寒吃什么中成药 右佐匹克隆是什么药 吃高血压药有什么副作用 什么是肠镜检查
省略号的作用是什么hcv8jop5ns0r.cn 吃什么预防脑梗hcv9jop2ns8r.cn 房产证改名字需要什么手续youbangsi.com 五步蛇长什么样96micro.com 神经性头痛吃什么药好hcv7jop6ns5r.cn
男占258女占369什么意思hcv8jop7ns2r.cn 胎神是什么意思hcv9jop2ns5r.cn 看肾挂什么科hcv7jop9ns6r.cn 无氧运动是什么意思hcv7jop9ns9r.cn 三点水的字大多与什么有关hcv9jop0ns7r.cn
治疗白头发挂什么科hcv7jop9ns2r.cn 周中是什么意思hcv8jop9ns5r.cn o型血容易得什么病hcv9jop3ns5r.cn 什么是针灸hcv8jop0ns2r.cn 什么球不能拍hcv8jop1ns0r.cn
憧憬未来是什么意思hcv8jop7ns6r.cn 公粮是什么意思hcv9jop5ns5r.cn 八卦中代表雷的卦象叫什么hcv9jop8ns1r.cn 心脏房颤是什么症状hcv8jop9ns2r.cn 宫颈机能不全是什么原因造成的adwl56.com
百度