Movatterモバイル変換


[0]ホーム

URL:


Jump to content
WikipediaThe Free Encyclopedia
Search

Object-oriented programming

From Wikipedia, the free encyclopedia
(Redirected fromObject-oriented programming languages)
Programming paradigm based on the concept of objects
"Object-oriented" redirects here. For other meanings of object-oriented, seeObject-orientation.

UML notation for a class. This Button class hasvariables for data, andfunctions. 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 aprogramming paradigm based on the concept ofobjects.[1] Objects can containdata (calledfields,attributes orproperties) and have actions they can perform (calledprocedures ormethods and implemented incode). In OOP,computer programs are designed by making them out of objects that interact with one another.[2][3]

Many of the most widely used programming languages (such asC++,Java,[4] andPython) support object-oriented programming to a greater or lesser degree, typically as part ofmultiple paradigms in combination with others such asimperative programming anddeclarative programming.

Significant object-oriented languages includeAda,ActionScript,C++,Common Lisp,C#,Dart,Eiffel,Fortran 2003,Haxe,Java,[4]JavaScript,Kotlin,Logo,MATLAB,Objective-C,Object Pascal,Perl,PHP,Python,R,Raku,Ruby,Scala,SIMSCRIPT,Simula,Smalltalk,Swift,Vala andVisual Basic.NET.

History

[edit]

The idea of "objects" in programming started with theartificial intelligence group atMIT in the late 1950s and early 1960s. Here, "object" referred toLISP atoms with identified properties (attributes).[5][6]Another early example wasSketchpad created byIvan 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.[7] Later, in 1968, AED-0, MIT's version of theALGOL programming language, connected data structures ("plexes") and procedures, prefiguring what were later termed "messages", "methods", and "member functions".[8][9]Topics such asdata abstraction andmodular programming were common points of discussion at this time.

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

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 createSmalltalk, an influential object-oriented programming language. By 1967, Kay was already using the term "object-oriented programming" in conversation.[1] Although sometimes called the "father" of object-oriented programming,[12] Kay has said his ideas differ from how object-oriented programming is commonly understood, and has implied that the computer science establishment did not adopt his notion.[1]A 1976 MIT memo co-authored byBarbara Liskov listsSimula 67,CLU, andAlphard as object-oriented languages, but does not mention Smalltalk.[13]

In the 1970s, the first version of theSmalltalk programming language was developed atXerox PARC byAlan Kay,Dan Ingalls andAdele Goldberg. Smalltalk-72 was notable for use of objects at the language level and its graphical development environment.[14] Smalltalk was a fully dynamic system, allowing users to create and modify classes as they worked.[15] Much of the theory of OOP was developed in the context of Smalltalk, for example multiple inheritance.[16]

In the late 1970s and 1980s, object-oriented programming rose to prominence. TheFlavors object-oriented Lisp was developed starting 1979, introducingmultiple inheritance andmixins.[17] In August 1981,Byte Magazine highlighted Smalltalk and OOP, introducing these ideas to a wide audience.[18] LOOPS, the object system forInterlisp-D, was influenced by Smalltalk and Flavors, and a paper about it was published in 1982.[19] In 1986, the firstConference on Object-Oriented Programming, Systems, Languages, and Applications (OOPSLA) was attended by 1,000 people. This conference marked the beginning of efforts to consolidate Lisp object systems, eventually resulting in theCommon Lisp Object System. In the 1980s, there were a few attempts to designprocessor architectures that includedhardware support for objects inmemory, but these were not successful. Examples include theIntel iAPX 432 and theLinn SmartRekursiv.

In the mid-1980s, new object-oriented languages likeObjective-C,C++, andEiffel emerged. Objective-C was developed byBrad Cox, who had used Smalltalk atITT Inc.Bjarne Stroustrup createdC++ based on his experience using Simula for his PhD thesis.[14]Bertrand Meyer produced the first design of theEiffel language in 1985, which focused on software quality using adesign by contract approach.[20]

In the 1990s, object-oriented programming became the main way of programming, especially as more languages supported it. These includedVisual FoxPro 3.0,[21][22]C++,[23] andDelphi[citation needed]. OOP became even more popular with the rise ofgraphical user interfaces, which used objects for buttons, menus and other elements. One well-known example is Apple'sCocoa framework, used onMac OS X and written inObjective-C. OOP toolkits also enhanced the popularity ofevent-driven programming.[citation needed]

AtETH Zürich,Niklaus Wirth and his colleagues created new approaches to OOP.Modula-2 (1978) andOberon (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 existed before OOP have added object-oriented features, includingAda,BASIC,Fortran,Pascal, andCOBOL. This sometimes caused compatibility and maintainability issues, as these languages were not originally designed with OOP in mind.

In the new millenium, new languages likePython andRuby have emerged that combine object-oriented and procedural styles. The most commercially important "pure" object-oriented languages continue to beJava, developed bySun Microsystems, as well asC# andVisual Basic.NET (VB.NET), both designed for Microsoft's.NET platform. These languages show the benefits of OOP by creating abstractions from implementation. The .NET platform supports cross-language inheritance, allowing programs to use objects from multiple languages together.

Features

[edit]
See also:Comparison of programming languages (object-oriented programming) andList of object-oriented programming terms

Object-oriented programming focuses on working with objects, but not all OOP languages have every feature linked to OOP. Below are some common features of languages that are considered strong in OOP or support it along with other programming styles. Important exceptions are also noted.[24][25][26][27]Christopher J. Date pointed out that comparing OOP with other styles, likerelational programming, is difficult because there isn't a clear, agreed-upon definition of OOP.[28]

Imperative programming

[edit]
Further information:Imperative programming andStructured programming

Features from imperative and structured programming are present in OOP languages and are also found in non-OOP languages.

Support formodular programming lets programmers organize related procedures into files and modules. This makes programs easier to manage. Each module has its ownnamespace, so items in one module will not conflict with items in another.

Object-oriented programming (OOP) was created to make code easier toreuse andmaintain.[29] 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 multiplethreads, it became more important to understand and control how instructions flow. This is difficult to do with OOP.[30][31][32][33]

Objects

[edit]
Main article:Object (computer science)

An object is a type ofdata structure that has two main parts:fields andmethods. Fields may also be known as members, attributes, or properties, and hold information in the form of statevariables. Methods are actions,subroutines, or procedures, defining the object's behavior in code. Objects are usually stored inmemory, and in many programming languages, they work likepointers that link directly to a contiguous block containing the object instances's data.

Objects can contain other objects. This is calledobject composition. For example, an Employee object might have an Address object inside it, along with other information like "first_name" and "position". This type of structures shows "has-a" relationships, like "an employee has an address".

Some believe that OOP places too much focus on using objects rather than onalgorithms anddata structures.[34][35] For example, programmerRob Pike pointed out that OOP can make programmers think more about type hierarchy than composition.[36] He has called object-oriented programming "theRoman numerals of computing".[37]Rich Hickey, creator ofClojure, described OOP as overly simplistic, especially when it comes to representing real-world things that change over time.[35]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 ingeneric programming. Stepanov also said that calling everything an "object" doesn't add much understanding.[34]

Real-world modeling and relationships

[edit]

Sometimes, objects represent real-world things and processes in digital form.[38] 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".[39]

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.[40]Bertrand Meyer argues inObject-Oriented Software Construction, 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".[41]Steve Yegge noted that natural languages lack the OOP approach of strictly prioritizingthings (objects/nouns) beforeactions (methods/verbs), as opposed tofunctional programming which does the reverse.[42] This can sometimes make OOP solutions more complicated than those written in procedural programming.[43]

Inheritance

[edit]

Most OOP languages allowreusing andextending code through "inheritance". This inheritance can use either "classes" or "prototypes", which have some differences but use similar terms for ideas like "object" and "instance".

Class-based

[edit]

Inclass-based programming, the most common type of OOP, every object is aninstance of a specificclass. The class defines the data format, like variables (e.g., name, age) and methods (actions the object can take). Every instance of the class has the same set of variables and methods. Objects are created using a special method in the class known as aconstructor.

Here are a few key terms in class-based OOP:

  • Class variables – belong to theclass itself, so all objects in the class share one copy.
  • Instance variables – belong to individualobjects; every object has its own version of these variables.
  • Member variables – refers to both the class and instance variables that are defined by a particular class.
  • Class methods – linked to theclass itself and can only use class variables.
  • Instance methods – belong toindividual objects, and can use both instance and class variables

Classes may inherit from other classes, creating a hierarchy of "subclasses". For example, an "Employee" class might inherit from a "Person" class. This means the Employee object will have all the variables from Person (like name variables) plus any new variables (like job position and salary). Similarly, the subclass may expand the interface with new methods. Most languages also allow the subclass tooverride the methods defined by superclasses. Some languages supportmultiple inheritance, where a class can inherit from more than one class, and other languages similarly supportmixins ortraits. For example, a mixin called UnicodeConversionMixin might add a method unicode_to_ascii() to both a FileReader and a WebPageScraper class.

Some classes areabstract, meaning they cannot be directly instantiated into objects; they're only meant to be inherited into other classes. Other classes areutility classes which contain only class variables and methods and are not meant to be instantiated or subclassed.[44]

Prototype-based

[edit]

Inprototype-based programming, there aren't any classes. Instead, each object is linked to another object, called itsprototype orparent. In Self, an object may have multiple or no parents,[45] but in the most popular prototype-based language, Javascript, every object has exactly oneprototype link, up to the base Object type whose prototype is null.

The prototype acts as a model for new objects. For example, if you have an objectfruit, you can make two objectsapple andorange, based on it. There is nofruit class, but they share traits from thefruit prototype. Prototype-based languages also allow objects to have their own unique properties, so theapple object might have an attributesugar_content, while theorange orfruit objects do not.

No inheritance

[edit]

Some languages, likeGo, don't use inheritance at all.[46] 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.[47]Rob Pike has criticized inheritance for creating complicated hierarchies instead of simpler solutions.[48]

Inheritance and behavioral subtyping

[edit]
See also:Object-oriented design

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 theprogram semantics are that objects from the subclass can always replace objects from the original class without problems. This concept is known asbehavioral subtyping, more specifically theLiskov substitution principle.

However, this is often not true, especially in programming languages that allowmutable objects, objects that change after they are created. In fact,subtype polymorphism as enforced by thetype checker in OOP languages cannot guarantee behavioral subtyping in most if not all contexts. For example, thecircle-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]

When a method is called on an object, the object itself—not outside code—decides which specific code to run. This process, calleddynamic dispatch, usually happens at run time by checking a table linked to the object to find the correct method. In this context, a method call is also known asmessage passing, meaning the method name and its inputs are like a message sent to the object for it to act on. If the method choice depends on more than one type of object (such as other objects passed as parameters), it's calledmultiple 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 until it finds the method or reaches the top.

Data abstraction and encapsulation

[edit]

Dataabstraction is a way of organizing code so that only certain parts of the data are visible to related functions (data hiding). This helps prevent mistakes and makes the program easier to manage. Because data abstraction works well, many programming styles, like object-oriented programming and functional programming, use it as a key principle.Encapsulation is another important idea in programming. It means keeping the internal details of an object hidden from the outside code. This makes it easier to change how an object works on the inside without affecting other parts of the program, such as incode refactoring. Encapsulation also helps keep related code together (decoupling), making it easier for programmers to understand.

In object-oriented programming, objects act as a barrier between their internal workings and external code. Outside code can only interact with an object by calling specificpublic methods or variables. If a class only allows access to its data through methods and not directly, this is calledinformation hiding. When designing a program, it's often recommended to keep data as hidden as possible. This means using local variables inside functions when possible, then private variables (which only the object can use), and finally public variables (which can be accessed by any part of the program) if necessary. Keeping data hidden helps prevent problems when changing the code later.[49] Some programming languages, like Java, control information hiding by marking variables asprivate (hidden) orpublic (accessible).[50] Other languages, like Python, rely on naming conventions, such as starting a private method's name with an underscore. Intermediate levels of access also exist, such as Java'sprotected keyword, (which allows access from the same class and its subclasses, but not objects of a different class), and theinternal keyword in C#, Swift, and Kotlin, which restricts access to files within the same module.[51]

Abstraction and information hiding are important concepts in programming, especially in object-oriented languages.[52] Programs often create many copies of objects, and each one works independently. Supporters of this approach say it makes code easier to reuse and intuitively represents real-world situations.[53] However, others argue that object-oriented programming does not enhance readability or modularity.[54][55]Eric S. Raymond has written that object-oriented programming languages tend to encourage thickly layered programs that destroy transparency.[56] Raymond compares this unfavourably to the approach taken with Unix and theC programming language.[56]

One programming principle, called the "open/closed principle", 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.[54] The latter point is reiterated byJoe Armstrong, the principal inventor ofErlang, who is quoted as saying:[55]

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 copying the same code in multiple places (duplicating code),[57] which goes against thedon't repeat yourself rule of software development.[58]

Polymorphism

[edit]

Polymorphism is the use of one symbol to represent multiple different types.[59] In object-oriented programming, polymorphism more specifically refers tosubtyping or subtype polymorphism, where a function can work with a specificinterface and thus manipulate entities of different classes in a uniform manner.[60]

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 strongseparation of concerns.

Open recursion

[edit]

In object-oriented programming, objects have methods that can change or use the object's data. Many programming languages use a special word, likethis orself, to refer to the current object. In languages that supportopen 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 aslate binding.

OOP languages

[edit]
This sectiondoes notcite anysources. Please helpimprove this section byadding citations to reliable sources. Unsourced material may be challenged andremoved.(August 2009) (Learn how and when to remove this message)
See also:List of object-oriented programming languages

OOP languages can be grouped into different types based on how they support and use objects:

  • Pure OOP languages: In these languages, everything is treated as an object, even basic things like numbers and characters. They are designed to fully support and enforce OOP. Examples:Ruby,Scala,Smalltalk,Eiffel,Emerald,[61]JADE,Self,Raku.
  • Mostly OOP languages: These languages focus on OOP but also include some procedural programming features. Examples:Java,Python,C++,C#,Delphi/Object Pascal,VB.NET.
  • Retrofitted OOP languages: These were originally designed for other types of programming but later added some OOP features. Examples:PHP,JavaScript,Perl,Visual Basic (derived from BASIC),MATLAB,COBOL 2002,Fortran 2003,ABAP,Ada 95,Pascal.
  • Unique OOP languages: These languages have OOP features like classes and inheritance but use them in their own way. Examples:Oberon,BETA.
  • Object-based languages: These support some OOP ideas but avoid traditional class-based inheritance in favor of direct manipulation of objects. Examples:JavaScript,Lua,Modula-2,CLU,Go.
  • Multi-paradigm languages: These support both OOP and other programming styles, but OOP is not the predominant style in the language. Examples includeTcl, where TclOO allows both prototype-based and class-based OOP, andCommon Lisp, with itsCommon Lisp Object System.

Popularity and reception

[edit]
TheTIOBE programming language popularity index graph from 2002 to 2023. In the 2000s the object-orientedJava (orange) and theproceduralC (dark blue) competed for the top position.

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

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.[65]Eric S. Raymond, aUnix programmer andopen-source software advocate, argues that OOP is not the best way to write programs.[56]

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

OOP in dynamic languages

[edit]

In recent years, object-oriented programming (OOP) has become very popular indynamic programming languages. Some languages, likePython,PowerShell,Ruby andGroovy, were designed with OOP in mind. Others, likePerl,PHP, andColdFusion, started as non-OOP languages but added OOP features later (starting with Perl 5, PHP 4, and ColdFusion version 6).

On the web,HTML,XHTML, andXML documents use theDocument Object Model (DOM), which works with theJavaScript language. JavaScript is a well-known example of aprototype-based language. Instead of using classes like other OOP languages, JavaScript creates new objects by copying (or "cloning") existing ones. Another language that uses this method isLua.

OOP in a network protocol

[edit]

When computers communicate in a client-server system, they send messages to request services. For example, a simple message might include a length field (showing how big the message is), a code that identifies the type of message, and a data value. These messages can be designed as structured objects that both the client and server understand, so that each type of message corresponds to a class of objects in the client and server code. More complex messages might include structured objects as additional details. The client and server need to know how to serialize and deserialize these messages so they can be transmitted over the network, and map them to the appropriate object types. Both clients and servers can be thought of as complex object-oriented systems.

TheDistributed Data Management Architecture (DDM) uses this idea by organizing objects into four levels:

  1. Basic message details - Information like message length, type, and data.
  2. Objects and collections - Similar to how objects work inSmalltalk, storing messages and their details.
  3. Managers - Like file directories, these organize and store data, as well as provide memory and processing power. They are similar toIBM i Objects.
  4. Clients and servers - These are full systems that include managers and handle security, directory services, and multitasking.

The first version of DDM defined distributed file services. Later, it was expanded to support databases through theDistributed Relational Database Architecture (DRDA).

Design patterns

[edit]

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

Object patterns

[edit]

The following are notablesoftware design patterns for OOP objects.[68]

A commonanti-pattern is theGod object, an object that knows or does too much.

Gang of Four design patterns

[edit]
Main article:Design pattern (computer science)

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

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

Object-orientation and databases

[edit]
Main articles:Object-relational impedance mismatch,Object-relational mapping, andObject database

Both object-oriented programming andrelational 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 calledobject-relational impedance mismatch.

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

Some databases, calledobject databases, are designed to work with object-oriented programming. 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 customizabletype system to support RDBMSs, but it forbids objects containing pointers to other objects.[70]

Responsibility- vs. data-driven design

[edit]

Inresponsibility-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 fromdata-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.[71]

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 byCraig Larman, that helps developers assign responsibilities to different parts of a program:[72]

  • 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]
See also:Formal semantics of programming languages

In object-oriented programming, objects are things that exist while a program is running. An object can represent anything, like a person, a place, a bank account, or a table of data. Many researchers have tried to formally define how OOP works.Records are the basis for understanding objects. They can represent fields, and also methods, iffunction literals can be stored. However,inheritance presents difficulties, particularly with the interactions between open recursion and encapsulated state. Researchers have usedrecursive types andco-algebraic data types to incorporate essential features of OOP.[73] Abadi and Cardelli defined several extensions ofSystem F<: that deal with mutable objects, allowing bothsubtype polymorphism andparametric polymorphism (generics), and were able to formally model many OOP concepts and constructs.[74] Although far from trivial, static analysis of object-oriented programming languages such as Java is a mature field,[75] with several commercial tools.[76]

See also

[edit]

Systems

[edit]

Modeling languages

[edit]

References

[edit]
  1. ^abcd"Dr. Alan Kay on the Meaning of "Object-Oriented Programming"". 2003. Retrieved11 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).Java Software Solutions Foundations of Programming Design 6th ed. Pearson Education Inc.ISBN 978-0-321-53205-3., section 1.6 "Object-Oriented Programming"
  4. ^abBloch 2018, pp. xi–xii, Foreword.
  5. ^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 fromthe 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".
  6. ^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)
  7. ^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.
  8. ^abKristen Nygaard;Ole-Johan Dahl (1 August 1978)."The development of the SIMULA languages".ACM SIGPLAN Notices.13 (8):245–272.doi:10.1145/960118.808391.
  9. ^Ross, Doug."The first software engineering language".LCS/AI Lab Timeline. MIT Computer Science and Artificial Intelligence Laboratory. Retrieved13 May 2010.
  10. ^abHolmevik, 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 fromthe original(PDF) on 30 August 2017. Retrieved3 March 2018.
  11. ^Madsen, Ole Lehrman."Kristen Nygaard".A.M. Turing Award Laureates. Retrieved4 February 2025.
  12. ^Butcher, Paul (30 June 2014).Seven Concurrency Models in Seven Weeks: When Threads Unravel. Pragmatic Bookshelf. p. 204.ISBN 978-1-68050-466-8.
  13. ^Jones, Anita K.; Liskov, Barbara H. (April 1976).An Access Control Facility for Programming Languages(PDF) (Technical report). MIT. CSG Memo 137.
  14. ^abBertrand 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.
  15. ^Alan C. Kay (March 1993)."The early history of Smalltalk".ACM SIGPLAN Notices.28 (3):69–95.doi:10.1145/155360.155364.
  16. ^Borning, Alan Hamilton (1979).Thinglab--a constraint-oriented simulation laboratory(PDF) (Report). Stanford University.
  17. ^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. Retrieved17 March 2022.
  18. ^"Introducing the Smalltalk Zoo".CHM. 17 December 2020.
  19. ^Bobrow, D. G.; Stefik, M. J (1982).LOOPS: data and object oriented Programming for Interlisp(PDF). European AI Conference.
  20. ^Meyer 1997.
  21. ^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
  22. ^1995 Reviewers Guide to Visual FoxPro 3.0:DFpug.de
  23. ^Khurana, Rohit (1 November 2009).Object Oriented Programming with C++, 1E. Vikas Publishing House Pvt Limited.ISBN 978-81-259-2532-3.
  24. ^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.
  25. ^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.
  26. ^Michael Lee Scott,Programming language pragmatics, Edition 2, Morgan Kaufmann, 2006,ISBN 0-12-633951-1, p. 470. Lists encapsulation, inheritance, and dynamic dispatch.
  27. ^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")
  28. ^C. J. Date, Introduction to Database Systems, 6th-ed., Page 650
  29. ^Ambler, Scott (1 January 1998)."A Realistic Look at Object-Oriented Reuse". drdobbs.com. Retrieved4 July 2010.
  30. ^Shelly, Asaf (22 August 2008)."Flaws of Object Oriented Modeling". Intel Software Network. Retrieved4 July 2010.
  31. ^James, Justin (1 October 2007)."Multithreading is a verb not a noun". techrepublic.com. Archived fromthe original on 10 October 2007. Retrieved4 July 2010.
  32. ^Shelly, Asaf (22 August 2008)."HOW TO: Multicore Programming (Multiprocessing) Visual C++ Class Design Guidelines, Member Functions". support.microsoft.com. Retrieved4 July 2010.
  33. ^Robert Harper (17 April 2011)."Some thoughts on teaching FP". Existential Type Blog. Retrieved5 December 2011.
  34. ^abStepanov, Alexander."STLport: An Interview with A. Stepanov". Retrieved21 April 2010.
  35. ^abRich Hickey, JVM Languages Summit 2009 keynote,Are We There Yet? November 2009.
  36. ^Pike, Rob (25 June 2012)."Less is exponentially more". Retrieved1 October 2016.
  37. ^Pike, Rob (2 March 2004)."[9fans] Re: Threads: Sewing badges of honor onto a Kernel".comp.os.plan9 (Mailing list). Retrieved17 November 2016.
  38. ^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.
  39. ^Niklaus Wirth (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 fromthe original(PDF) on 12 October 2016.
  40. ^"Uncle Bob SOLID principles".YouTube. 2 August 2018.
  41. ^Meyer 1997, p. 230.
  42. ^Yegge, Steve (30 March 2006)."Execution in the Kingdom of Nouns". steve-yegge.blogspot.com. Retrieved3 July 2010.
  43. ^Boronczyk, Timothy (11 June 2009)."What's Wrong with OOP". zaemis.blogspot.com. Retrieved3 July 2010.
  44. ^Bloch 2018, p. 19, Chapter §2 Item 4 Enforce noninstantiability with a private constructor.
  45. ^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.
  46. ^"Is Go an object-oriented language?". Retrieved13 April 2019.Although Go has types and methods and allows an object-oriented style of programming, there is no type hierarchy.
  47. ^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.
  48. ^Pike, Rob (14 November 2012)."A few years ago I saw this page". Archived fromthe original on 14 August 2018. Retrieved1 October 2016.
  49. ^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 – viaO'Reilly.
  50. ^Bloch 2018, pp. 73–77, Chapter §4 Item15 Minimize the accessibility of classes and members.
  51. ^"What is Object Oriented Programming (OOP) In Simple Words? – Software Geek Bytes". 5 January 2023. Retrieved17 January 2023.
  52. ^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.
  53. ^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.
  54. ^abcCardelli, 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. Retrieved21 April 2010.
  55. ^abArmstrong, Joe. InCoders at Work: Reflections on the Craft of Programming. Peter Seibel, ed.Codersatwork.comArchived 5 March 2010 at theWayback Machine, Accessed 13 November 2009.
  56. ^abcEric S. Raymond (2003)."The Art of Unix Programming: Unix and Object-Oriented Languages". Retrieved6 August 2014.
  57. ^Brodie, Leo (1984).Thinking Forth(PDF). pp. 92–93. Retrieved4 May 2018.
  58. ^Hunt, Andrew."Don't Repeat Yourself".Category Extreme Programming. Retrieved4 May 2018.
  59. ^Cardelli, Luca;Wegner, Peter (December 1985)."On understanding types, data abstraction, and polymorphism"(PDF).ACM Computing Surveys.17 (4):471–523.CiteSeerX 10.1.1.117.695.doi:10.1145/6041.6042.S2CID 2921816.: "Polymorphic types are types whose operations are applicable to values of more than one type."
  60. ^Stroustrup, Bjarne (19 February 2007)."Bjarne Stroustrup's C++ Glossary".polymorphism – providing a single interface to entities of different types.
  61. ^"The Emerald Programming Language". 26 February 2011.
  62. ^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
  63. ^Cassel, David (21 August 2019)."Why Are So Many Developers Hating on Object-Oriented Programming?".The New Stack.
  64. ^Potok, Thomas; Mladen Vouk; Andy Rindos (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. Retrieved21 April 2010.
  65. ^Graham, Paul."Why ARC isn't especially Object-Oriented". PaulGraham.com. Retrieved13 November 2009.
  66. ^Feldman, Richard (30 September 2019)."Why Isn't Functional Programming the Norm?".YouTube.
  67. ^Krubner, Lawrence."Object Oriented Programming is an expensive disaster which must end". smashcompany.com. Archived fromthe original on 14 October 2014. Retrieved14 October 2014.
  68. ^Martin, Robert C."Design Principles and Design Patterns"(PDF). Archived fromthe original(PDF) on 6 September 2015. Retrieved28 April 2017.
  69. ^Neward, Ted (26 June 2006)."The Vietnam of Computer Science". Interoperability Happens. Archived fromthe original on 4 July 2006. Retrieved2 June 2010.
  70. ^C. J. Date, Hugh Darwen.Foundation for Future Database Systems: The Third Manifesto (2nd Edition)
  71. ^Wirfs-Brock, Rebecca; Wilkerson, Brian (1989)."Object-Oriented Design: A Responsibility-Driven Approach".ACM SIGPLAN Notices.24 (10): 74.doi:10.1145/74878.74885.
  72. ^Karsh, Patrick (19 July 2023)."GRASP Principles: Object-Oriented Design Patterns".Medium. Retrieved30 March 2025.
  73. ^Poll, Erik."Subtyping and Inheritance for Categorical Datatypes"(PDF). Retrieved5 June 2011.
  74. ^Abadi, Martin; Cardelli, Luca (1996).A Theory of Objects. Springer-Verlag New York, Inc.ISBN 978-0-387-94775-4. Retrieved21 April 2010.
  75. ^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.
  76. ^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.

Further reading

[edit]

External links

[edit]
Wikiquote has quotations related toObject-orientation.
Wikiversity has learning resources aboutObject-oriented programming at
Wikibooks has a book on the topic of:Object Oriented Programming
Imperative
Structured
Object-oriented
(comparison,list)
Declarative
Functional
(comparison)
Dataflow
Logic
DSL
Concurrent,
distributed,
parallel
Metaprogramming
Separation
of concerns
Level
Generation
Fields
Concepts
Orientations
Models
Developmental
Other
Languages
Systems design
Requirements
Capacity
Interface
High-level design
Integration
Architectures
Database
Principles
Scalability
Availability
Latency
Storage
Observability
Related fields
International
National
Retrieved from "https://en.wikipedia.org/w/index.php?title=Object-oriented_programming&oldid=1296582786"
Categories:
Hidden categories:

[8]ページ先頭

©2009-2025 Movatter.jp