object objectoriented redirects here for other meanings of objectoriented see objectorientation objectoriented programming language redirects here for a list of objectoriented programming languages see list of objectoriented programming languages programming paradigms action agentoriented arrayoriented automatabased concurrent computing relativistic programming datadriven declarative contrast imperative functional functional logic purely functional logic abductive logic answer set concurrent logic functional logic inductive logic constraint constraint logic concurrent constraint logic dataflow flowbased reactive dynamicscripting eventdriven functionlevel contrast valuelevel pointfree style concatenative generic imperative contrast declarative procedural objectoriented literate languageoriented naturallanguage programming disciplinespecific domainspecific grammaroriented intentional metaprogramming automatic inductive programming reflective attributeoriented macro template nonstructured contrast structured array nondeterministic parallel computing processoriented probabilistic stackbased structured contrast nonstructured blockstructured objectoriented actorbased classbased concurrent prototypebased by separation of concerns aspectoriented roleoriented subjectoriented recursive symbolic valuelevel contrast functionlevel quantum programming vte objectoriented programming oop is a programming paradigm based on the concept of objects which may contain data in the form of fields often known as attributes and code in the form of procedures often known as methods a feature of objects is that an objects procedures can access and often modify the data fields of the object with which they are associated objects have a notion of this or self in oop computer programs are designed by making them out of objects that interact with one another there is significant diversity of oop languages but the most popular ones are classbased meaning that objects are instances of classes which typically also determine their type many of the most widely used programming languages such as c object pascal java python etc are multiparadigm programming languages that support objectoriented programming to a greater or lesser degree typically in combination with imperative procedural programming significant objectoriented languages include java c c python php javascript ruby perl object pascal objectivec dart swift scala common lisp and smalltalk features objectoriented programming uses objects but not all of the associated techniques and structures are supported directly in languages that claim to support oop the features listed below are however common among languages considered strongly class and objectoriented or multiparadigm with oop support with notable exceptions mentioned see also comparison of programming languages objectoriented programming and list of objectoriented programming terms shared with nonoop predecessor languages variables that can store information formatted in a small number of builtin data types like integers and alphanumeric characters this may include data structures like strings lists and hash tables that are either builtin or result from combining variables using memory pointers procedures also known as functions methods routines or subroutines that take input generate output and manipulate data modern languages include structured programming constructs like loops and conditionals modular programming support provides the ability to group procedures into files and modules for organizational purposes modules are namespaced so identifiers in one module will not be accidentally confused with a procedure or variable sharing the same name in another file or module objects and classes languages that support objectoriented programming typically use inheritance for code reuse and extensibility in the form of either classes or prototypes those that use classes support two main concepts classes the definitions for the data format and available procedures for a given type or class of object may also contain data and procedures known as class methods themselves ie classes contain the data members and member functions objects instances of classes objects sometimes correspond to things found in the real world for example a graphics program may have objects such as circle square menu an online shopping system might have objects such as shopping cart customer and product sometimes objects represent more abstract entities like an object that represents an open file or an object that provides the service of translating measurements from us customary to metric objectoriented programming is more than just classes and objects its a whole programming paradigm based around objects data structures that contain data fields and methods it is essential to understand this using classes to organize a bunch of unrelated methods together is not object orientation junade ali mastering php design patterns each object is said to be an instance of a particular class for example an object with its name field set to mary might be an instance of class employee procedures in objectoriented programming are known as methods variables are also known as fields members attributes or properties this leads to the following terms class variables belong to the class as a whole there is only one copy of each one instance variables or attributes data that belongs to individual objects every object has its own copy of each one member variables refers to both the class and instance variables that are defined by a particular class class methods belong to the class as a whole and have access only to class variables and inputs from the procedure call instance methods belong to individual objects and have access to instance variables for the specific object they are called on inputs and class variables objects are accessed somewhat like variables with complex internal structure and in many languages are effectively pointers serving as actual references to a single instance of said object in memory within a heap or stack they provide a layer of abstraction which can be used to separate internal from external code external code can use an object by calling a specific instance method with a certain set of input parameters read an instance variable or write to an instance variable objects are created by calling a special type of method in the class known as a constructor a program may create many instances of the same class as it runs which operate independently this is an easy way for the same procedures to be used on different sets of data objectoriented programming that uses classes is sometimes called classbased programming while prototypebased programming does not typically use classes as a result a significantly different yet analogous terminology is used to define the concepts of object and instance in some languages classes and objects can be composed using other concepts like traits and mixins classbased vs prototypebased in classbased languages the classes are defined beforehand and the objects are instantiated based on the classes if two objects apple and orange are instantiated from the class fruit they are inherently fruits and it is guaranteed that you may handle them in the same way eg a programmer can expect the existence of the same attributes such as color or sugar content or is ripe in prototypebased languages the objects are the primary entities no classes even exist the prototype of an object is just another object to which the object is linked every object has one prototype link and only one new objects can be created based on already existing objects chosen as their prototype you may call two different objects apple and orange a fruit if the object fruit exists and both apple and orange have fruit as their prototype the idea of the fruit class doesnt exist explicitly but as the equivalence class of the objects sharing the same prototype the attributes and methods of the prototype are delegated to all the objects of the equivalence class defined by this prototype the attributes and methods owned individually by the object may not be shared by other objects of the same equivalence class eg the attributes sugar content may be unexpectedly not present in apple only single inheritance can be implemented through the prototype dynamic dispatchmessage passing it is the responsibility of the object not any external code to select the procedural code to execute in response to a method call typically by looking up the method at run time in a table associated with the object this feature is known as dynamic dispatch and distinguishes an object from an abstract data type or module which has a fixed static implementation of the operations for all instances if the call variability relies on more than the single type of the object on which it is called ie at least one other parameter object is involved in the method choice one speaks of multiple dispatch a method call is also known as message passing it is conceptualized as a message the name of the method and its input parameters being passed to the object for dispatch encapsulation encapsulation is an objectoriented programming concept that binds together the data and functions that manipulate the data and that keeps both safe from outside interference and misuse data encapsulation led to the important oop concept of data hiding if a class does not allow calling code to access internal object data and permits access through methods only this is a strong form of abstraction or information hiding known as encapsulation some languages java for example let classes enforce access restrictions explicitly for example denoting internal data with the private keyword and designating methods intended for use by code outside the class with the public keyword methods may also be designed public private or intermediate levels such as protected which allows access from the same class and its subclasses but not objects of a different class in other languages like python this is enforced only by convention for example private methods may have names that start with an underscore encapsulation prevents external code from being concerned with the internal workings of an object this facilitates code refactoring for example allowing the author of the class to change how objects of that class represent their data internally without changing any external code as long as public method calls work the same way it also encourages programmers to put all the code that is concerned with a certain set of data in the same class which organizes it for easy comprehension by other programmers encapsulation is a technique that encourages decoupling composition inheritance and delegation objects can contain other objects in their instance variables this is known as object composition for example an object in the employee class might contain either directly or through a pointer an object in the address class in addition to its own instance variables like firstname and position object composition is used to represent hasa relationships every employee has an address so every employee object has access to a place to store an address object either directly embedded within itself or at a separate location addressed via a pointer languages that support classes almost always support inheritance this allows classes to be arranged in a hierarchy that represents isatypeof relationships for example class employee might inherit from class person all the data and methods available to the parent class also appear in the child class with the same names for example class person might define variables firstname and lastname with method makefullname these will also be available in class employee which might add the variables position and salary this technique allows easy reuse of the same procedures and data definitions in addition to potentially mirroring realworld relationships in an intuitive way rather than utilizing database tables and programming subroutines the developer utilizes objects the user may be more familiar with objects from their application domain subclasses can override the methods defined by superclasses multiple inheritance is allowed in some languages though this can make resolving overrides complicated some languages have special support for mixins though in any language with multiple inheritance a mixin is simply a class that does not represent an isatypeof relationship mixins are typically used to add the same methods to multiple classes for example class unicodeconversionmixin might provide a method unicodetoascii when included in class filereader and class webpagescraper which dont share a common parent abstract classes cannot be instantiated into objects they exist only for the purpose of inheritance into other concrete classes which can be instantiated in java the final keyword can be used to prevent a class from being subclassed the doctrine of composition over inheritance advocates implementing hasa relationships using composition instead of inheritance for example instead of inheriting from class person class employee could give each employee object an internal person object which it then has the opportunity to hide from external code even if class person has many public attributes or methods some languages like go do not support inheritance at all the openclosed principle advocates that classes and functions should be open for extension but closed for modification delegation is another language feature that can be used as an alternative to inheritance polymorphism subtyping a form of polymorphism is when calling code can be agnostic as to whether an object belongs to a parent class or one of its descendants meanwhile the same operation name among objects in an inheritance hierarchy may behave differently for example objects of type circle and square are derived from a common class called shape the draw function for each type of shape implements what is necessary to draw itself while calling code can remain indifferent to the particular type of shape is being drawn this is another type of abstraction which simplifies code external to the class hierarchy and enables strong separation of concerns open recursion in languages that support open recursion object methods can call other methods on the same object including themselves typically using a special variable or keyword called this or self this variable is latebound it allows a method defined in one class to invoke another method that is defined later in some subclass thereof history uml notation for a class this button class has variables for data and functions through inheritance a subclass can be created as subset of the button class objects are instances of a class terminology invoking objects and oriented in the modern sense of objectoriented programming made its first appearance at mit in the late 1950s and early 1960s in the environment of the artificial intelligence group as early as 1960 object could refer to identified items lisp atoms with properties attributes alan kay was later to cite a detailed understanding of lisp internals as a strong influence on his thinking in 1966 i thought of objects being like biological cells andor 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 another early mit example was sketchpad created by ivan sutherland in 196061 in the glossary of the 1963 technical report based on his dissertation about sketchpad sutherland defined notions of object and instance with the class concept covered by master or definition albeit specialized to graphical interaction also an mit algol version aed0 established a direct link between data structures plexes in that dialect and procedures prefiguring what were later termed messages methods and member functions in the 1960s objectorientated programming was put into practice with the simula language which introduced important concepts that are today an essential part of objectorientated programming such as class and object inheritance and dynamic binding in 1962 kristen nygaard initiated a project for a simulation language at the norwegian computing center based on his previous use of the monte carlo simulation and his work to conceptualise realworld systems olejohan dahl formally joined the project and the simula programming language was designed to run on the universal automatic computer univac 1107 in the early stages simula was supposed to be a procedure package for the programming language algol 60 dissatisfied with the restrictions imposed by algol the researchers decided to develop simula into a fullyfledged programming language which used the univac algol 60 compiler simula launched in 1964 and was promoted by dahl and nygaard throughout 1965 and 1966 leading to increasing use of the programming language in sweden germany and the soviet union in 1968 the language became widely available through the burroughs b5500 computers and was later also implemented on the ural16 computer in 1966 dahl and nygaard wrote a simula compiler they became preoccupied with putting into practice tony hoares record class concept which had been implemented in the freeform englishlike generalpurpose simulation language simscript they settled for a generalised process concept with record class properties and a second layer of prefixes through prefixing a process could reference its predecessor and have additional properties simula thus introduced the class and subclass hierarchy and the possibility of generating objects from these classes the simula 1 compiler and a new version of the programming language simula 67 was introduced to the wider world through the research paper class and subclass declarations at a 1967 conference a simula 67 compiler was launched for the system360 and system370 ibm mainframe computers in 1972 in the same year a simula 67 compiler was launched free of charge for the french cii 10070 and cii iris 80 mainframe computers by 1974 the association of simula users had members in 23 different countries early 1975 a simula 67 compiler was released free of charge for the decsystem10 mainframe family by august the same year the decsystem simula 67 compiler had been installed at 28 sites 22 of them in north america the objectorientated simula programming language was used mainly by researchers involved with physical modelling such as models to study and improve the movement of ships and their content through cargo ports in the 1970s the first version of the smalltalk programming language was developed at xerox parc by alan kay dan ingalls and adele goldberg smaltalk72 included a programming environment and was dynamically typed and at first was interpreted not compiled smalltalk got noted for its application of object orientation at the language level and its graphical development environment smalltalk went through various versions and interest in the language grew in the 1970s smalltalk influenced the lisp community to incorporate objectbased techniques that were introduced to developers via the lisp machine experimentation with various extensions to lisp such as loops and flavors introducing multiple inheritance and mixins eventually led to the common lisp object system which integrates functional programming and objectoriented programming and allows extension via a metaobject protocol 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 1981 goldberg edited the august 1981 issue of byte magazine introducing smalltalk and objectorientated programming to a wider audience in 1986 the association for computing machinery organised the first conference on objectoriented programming systems languages and applications oopsla which was unexpectedly attended by 1000 people in the mid1980s objectivec was developed by brad cox who had used smalltalk at itt inc and bjarne stroustrup who had used simula for his phd thesis eventually went to create the objectorientated c in 1985 bertrand meyer also produced the first design of the eiffel language focused on software quality eiffel is a purely objectoriented programming language and a notation supporting the entire software lifecycle meyer described the eiffel software development method based on a small number of key ideas from software engineering and computer science in objectoriented software construction essential to the quality focus of eiffel is meyers reliability mechanism design by contract which is an integral part of both the method and language the tiobe programming language popularity index graph from 2002 to 2018 in the 2000s the objectorientated java blue and the procedural c black competed for the top position in the early and mid1990s objectoriented programming developed as the dominant programming paradigm when programming languages supporting the techniques became widely available these included visual foxpro 30 its dominance was further enhanced by the rising popularity of graphical user interfaces which rely heavily upon objectoriented programming techniques an example of a closely related dynamic gui library and oop language can be found in the cocoa frameworks on mac os x written in objectivec an objectoriented dynamic messaging extension to c based on smalltalk oop toolkits also enhanced the popularity of eventdriven programming although this concept is not limited to oop at eth zrich niklaus wirth and his colleagues had also been investigating such topics as data abstraction and modular programming although this had been in common use in the 1960s or earlier modula2 1978 included both and their succeeding design oberon included a distinctive approach to object orientation classes and such objectoriented features have been added to many previously existing languages including ada basic fortran pascal and cobol adding these features to languages that were not initially designed for them often led to problems with compatibility and maintainability of code more recently a number of languages have emerged that are primarily objectoriented but that are also compatible with procedural methodology two such languages are python and ruby probably the most commercially important recent objectoriented languages are java developed by sun microsystems as well as c and visual basicnet vbnet both designed for microsofts net platform each of these two frameworks shows in its own way the benefit of using oop by creating an abstraction from implementation vbnet and c support crosslanguage inheritance allowing classes defined in one language to subclass classes defined in the other language oop languages see also list of objectoriented programming languages simula 1967 is generally accepted as being the first language with the primary features of an objectoriented language it was created for making simulation programs in which what came to be called objects were the most important information representation smalltalk 1972 to 1980 is another early example and the one with which much of the theory of oop was developed concerning the degree of object orientation the following distinctions can be made languages called pure oo languages because everything in them is treated consistently as an object from primitives such as characters and punctuation all the way up to whole classes prototypes blocks modules etc they were designed specifically to facilitate even enforce oo methods examples python ruby scala smalltalk eiffel emerald jade self languages designed mainly for oo programming but with some procedural elements examples java c c delphiobject pascal vbnet languages that are historically procedural languages but have been extended with some oo features examples php perl visual basic derived from basic matlab cobol 2002 fortran 2003 abap ada 95 pascal languages with most of the features of objects classes methods inheritance but in a distinctly original form examples oberon oberon1 or oberon2 languages with abstract data type support which may be used to resemble oo programming but without all features of objectorientation this includes objectbased and prototypebased languages examples javascript lua modula2 clu chameleon languages that support multiple paradigms including oo tcl stands out among these for tcloo a hybrid object system that supports both prototypebased programming and classbased oo oop in dynamic languages in recent years objectoriented programming has become especially popular in dynamic programming languages python powershell ruby and groovy are dynamic languages built on oop principles while perl and php have been adding objectoriented features since perl 5 and php 4 and coldfusion since version 6 the document object model of html xhtml and xml documents on the internet has bindings to the popular javascriptecmascript language javascript is perhaps the best known prototypebased programming language which employs cloning from prototypes rather than inheriting from a class contrast to classbased programming another scripting language that takes this approach is lua oop in a network protocol the messages that flow between computers to request services in a clientserver environment can be designed as the linearizations of objects defined by class objects known to both the client and the server for example a simple linearized object would consist of a length field a code point identifying the class and a data value a more complex example would be a command consisting of the length and code point of the command and values consisting of linearized objects representing the commands parameters each such command must be directed by the server to an object whose class or superclass recognizes the command and is able to provide the requested service clients and servers are best modeled as complex objectoriented structures distributed data management architecture ddm took this approach and used class objects to define objects at four levels of a formal hierarchy fields defining the data values that form messages such as their length code point and data values objects and collections of objects similar to what would be found in a smalltalk program for messages and parameters managers similar to as400 objects such as a directory to files and files consisting of metadata and records managers conceptually provide memory and processing resources for their contained objects a client or server consisting of all the managers necessary to implement a full processing environment supporting such aspects as directory services security and concurrency control the initial version of ddm defined distributed file services it was later extended to be the foundation of distributed relational database architecture drda design patterns challenges of objectoriented design are addressed by several approaches most common is known as the design patterns codified by gamma et al more broadly the term design patterns can be used to refer to any general repeatable solution pattern to a commonly occurring problem in software design some of these commonly occurring problems have implications and solutions particular to objectoriented development inheritance and behavioral subtyping see also objectoriented design it is intuitive to assume that inheritance creates a semantic is a relationship and thus to infer that objects instantiated from subclasses can always be safely used instead of those instantiated from the superclass this intuition is unfortunately false in most oop languages in particular in all those that allow mutable objects subtype polymorphism as enforced by the type checker in oop languages with mutable objects cannot guarantee behavioral subtyping in any context behavioral subtyping is undecidable in general so it cannot be implemented by a program compiler class or object hierarchies must be carefully designed considering possible incorrect uses that cannot be detected syntactically this issue is known as the liskov substitution principle gang of four design patterns design pattern computer science design patterns elements of reusable objectoriented software is an influential book published in 1995 by erich gamma richard helm ralph johnson and john vlissides often referred to humorously as the gang of four along with exploring the capabilities and pitfalls of objectoriented programming it describes 23 common programming problems and patterns for solving them as of april 2007 the book was in its 36th printing the book describes the following patterns creational patterns 5 factory method pattern abstract factory pattern singleton pattern builder pattern prototype pattern structural patterns 7 adapter pattern bridge pattern composite pattern decorator pattern facade pattern flyweight pattern proxy pattern behavioral patterns 11 chainofresponsibility pattern command pattern interpreter pattern iterator pattern mediator pattern memento pattern observer pattern state pattern strategy pattern template method pattern visitor pattern objectorientation and databases objectrelational impedance mismatch objectrelational mapping and object database both objectoriented programming and relational database management systems rdbmss are extremely common in software today one of the most common approaches is objectrelational mapping as found in ide languages such as visual foxpro and libraries such as java data objects and ruby on rails activerecord there are also object databases that can be used to replace rdbmss but these have not been as technically and commercially successful as rdbmss realworld modeling and relationships oop can be used to associate realworld objects and processes with digital counterparts however not everyone agrees that oop facilitates direct realworld mapping see criticism section or that realworld mapping is even a worthy goal bertrand meyer argues in objectoriented software construction for example the circleellipse problem is difficult to handle using oops concept of inheritance however niklaus wirth who popularized the adage now known as wirths law software is getting slower more rapidly than hardware becomes faster said of oop in his paper good ideas through the looking glass this paradigm closely reflects the structure of systems in the real world and it is therefore well suited to model complex systems with complex behaviours contrast kiss principle steve yegge and others noted that natural languages lack the oop approach of strictly prioritizing things objectsnouns before actions methodsverbs oop and control flow oop was developed to increase the reusability and maintainability of source code responsibility vs datadriven design responsibilitydriven design defines classes in terms of a contract that is a class should be defined around a responsibility and the information that it shares this is contrasted by wirfsbrock and wilkerson with datadriven design where classes are defined around the datastructures that must be held the authors hold that responsibilitydriven design is preferable solid and grasp guidelines solid is a mnemonic invented by michael feathers that stands for and advocates five programming practices single responsibility principle openclosed principle liskov substitution principle interface segregation principle dependency inversion principle grasp general responsibility assignment software patterns is another set of guidelines advocated by craig larman criticism the oop paradigm has been criticised for a number of reasons including not meeting its stated goals of reusability and modularity luca cardelli has claimed that oop code is intrinsically less efficient than procedural code that oop can take longer to compile and that oop languages have extremely poor modularity properties with respect to class extension and modification and tend to be extremely complex the problem with objectoriented languages is theyve 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 a study by potok et al has shown no significant difference in productivity between oop and procedural approaches christopher j date stated that critical comparison of oop to other technologies relational in particular is difficult because of lack of an agreedupon and rigorous definition of oop in an article lawrence krubner claimed that compared to other languages lisp dialects functional languages etc oop languages have no unique strengths and inflict a heavy burden of unneeded complexity alexander stepanov compares object orientation unfavourably to generic programming i find oop technically unsound it attempts to decompose the world in terms of interfaces that vary on a single type to deal with the real problems you need multisorted algebras families of interfaces that span multiple types i find oop philosophically unsound it claims that everything is an object even if it is true it is not very interesting saying that everything is an object is saying nothing at all paul graham has suggested that oops popularity within large companies is due to large and frequently changing groups of mediocre programmers according to graham the discipline imposed by oop prevents any one programmer from doing too much damage leo brodie has suggested a connection between the standalone nature of objects and a tendency to duplicate code of software development steve yegge noted that as opposed to functional programming object oriented programming puts the nouns first and foremost why would you go to such lengths to put one part of speech on a pedestal why should one kind of concept take precedence over another its not as if oop has suddenly made verbs less important in the way we actually think its a strangely skewed perspective rich hickey creator of clojure described object systems as overly simplistic models of the real world he emphasized the inability of oop to model time properly which is getting increasingly problematic as software systems become more concurrent eric s raymond a unix programmer and opensource software advocate has been critical of claims that present objectoriented programming as the one true solution and has written that objectoriented programming languages tend to encourage thickly layered programs that destroy transparency rob pike a programmer involved in the creation of utf8 and go has called objectoriented programming the roman numerals of computing formal semantics see also formal semantics of programming languages objects are the runtime entities in an objectoriented system they may represent a person a place a bank account a table of data or any item that the program has to handle there have been several attempts at formalizing the concepts used in objectoriented programming the following concepts and constructs have been used as interpretations of oop concepts co algebraic data types abstract data types which have existential types allow the definition of modules but these do not support dynamic dispatch recursive types encapsulated state inheritance records are basis for understanding objects if function literals can be stored in fields like in functionalprogramming languages but the actual calculi need be considerably more complex to incorporate essential features of oop several extensions of system f that deal with mutable objects have been studied these allow both subtype polymorphism and parametric polymorphism generics attempts to find a consensus definition or theory behind objects have not proven very successful however see abadi cardelli a theory of objects for formal definitions of many oop concepts and constructs and often diverge widely for example some definitions focus on mental activities and some on program structuring one of the simpler definitions is that oop is the act of using map data structures or arrays that can contain functions and pointers to other maps all with some syntactic and scoping sugar on top inheritance can be performed by cloning the maps sometimes called prototyping computer programming portal comparison of programming languages objectoriented programming comparison of programming paradigms componentbased software engineering design by contract object association object database object modeling language objectoriented analysis and design objectrelational impedance mismatch and the third manifesto objectrelational mapping systems cades common object request broker architecture corba distributed component object model distributed data management architecture jeroo modeling languages idef4 interface description language lepus3 uml abadi martin luca cardelli 1998 a theory of objects springer verlag isbn9780387947754 abelson harold gerald jay sussman 1997 structure and interpretation of computer programs mit press isbn9780262011532 armstrong deborah j february 2006 the quarks of objectoriented development communications of the acm 49 2 123128 bibcode1985cacm2822s doi10114511130341113040 issn00010782 retrieved 8 august 2006 booch grady 1997 objectoriented analysis and design with applications addisonwesley isbn9780805353402 eeles peter oliver sims 1998 building business objects john wiley sons isbn9780471191766 gamma erich richard helm ralph johnson john vlissides 1995 design patterns elements of reusable object oriented software addisonwesley isbn9780201633610 harmon paul william morrissey 1996 the object technology casebook lessons from awardwinning business applications john wiley sons isbn9780471147176 jacobson ivar 1992 objectoriented software engineering a use casedriven approach addisonwesley isbn9780201544350 kay alan the early history of smalltalk archived from the original on 4 april 2005 retrieved 18 april 2005 meyer bertrand 1997 objectoriented software construction prentice hall isbn9780136291558 pecinovsky rudolf 2013 oop learn object oriented thinking programming bruckner publishing isbn9788090466180 rumbaugh james michael blaha william premerlani frederick eddy william lorensen 1991 objectoriented modeling and design prentice hall isbn9780136298410 schach stephen 2006 objectoriented and classical software engineering seventh edition mcgrawhill isbn9780073191263 schreiner axeltobias 1993 object oriented programming with ansic hanser hdl18508544 isbn9783446174269 taylor david a 1992 objectoriented information systems planning and implementation john wiley sons isbn9780471543640 weisfeld matt 2009 the objectoriented thought process third edition addisonwesley isbn9780672330162 west david 2004 object thinking developer reference microsoft press isbn9780735619654 wikiquote has quotations related to objectorientation wikiversity has learning resources about objectoriented programming at topicobjectoriented programming wikibooks has a book on the topic of object oriented programming objectoriented programming at curlie introduction to object oriented programming concepts oop and more by lwc nirosh discussion about the flaws of ood oop concepts java tutorials science or snake oil empirical software engineering thoughts on software and systems engineering by ian sommerville 2011829 vtetypes of programming languages actorbased array aspectoriented classbased concatenative concurrent dataflow declarative domainspecific dynamic esoteric eventdriven extensible functional imperative logic macro metaprogramming multiparadigm objectbased objectoriented pipeline procedural prototypebased reflective rulebased scripting stack based synchronous templating assembly compiled interpreted machine lowlevel highlevel very highlevel first generation second generation third generation fourth generation fifth generation nonenglishbased visual vtesoftware engineeringfields computer programming requirements engineering software deployment software design software maintenance software testing systems analysis formal methods concepts data modeling enterprise architecture functional specification modeling language orthogonality programming paradigm software software archaeology software architecture software configuration management software development methodology software development process software quality software quality assurance software verification and validation structured analysis orientations agile aspectoriented object orientation ontology service orientation sdlc modelsdevelopmental agile eup executable uml incremental model iterative model prototype model rad up scrum spiral model vmodel waterfall model xp other spice cmmi data model er model function model information model metamodeling object model systems model view model languages idef uml usl sysml softwareengineers victor basili kent beck grady booch fred brooks barry boehm peter chen danese cooper ward cunningham tom demarco edsger w dijkstra delores m etter martin fowler adele goldstine margaret hamilton c a r hoare lois haibt mary jean harrold grace hopper watts humphrey michael a jackson ivar jacobson alan kay nancy leveson stephen j mellor bertrand meyer david parnas trygve reenskaug winston w royce james rumbaugh mary shaw peri tarr elaine weyuker niklaus wirth edward yourdon related fields computer science computer engineering project management risk management systems engineering category commons authority control bne xx537453 bnf cb12115131k data gnd 42339479 lccn sh87007503 ndl 00937980 