Advanced Placement ( AP ) Computer Science A (also known as AP CompSci , AP CompSci A , APCSA , AP Computer Science Applications , or AP Java ) is an AP Computer Science course and examination offered by the College Board to high school students as an opportunity to earn college credit for a college -level computer science course. AP Computer Science A is meant to be the equivalent of a first-semester course in computer science. The AP exam currently tests students on their knowledge of Java .
102-684: AP Computer Science AB, which was equal to a full year, was discontinued following the May 2009 exam administration. AP Computer Science emphasizes object-oriented programming methodology with an emphasis on problem solving and algorithm development. It also includes the study of data structures and abstraction, but these topics were not covered to the extent that they were covered in AP Computer Science AB. The Microsoft -sponsored program Technology Education and Literacy in Schools (TEALS) aims to increase
204-782: A distinctive approach to object orientation, classes, and such. 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. Object-oriented 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, some languages have emerged that are primarily object-oriented, but that are also compatible with procedural methodology. Two such languages are Python and Ruby . Probably
306-430: A form of polymorphism – is when calling code can be independent of which class in the supported hierarchy it is operating on – the 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 the type Circle and Square are derived from a common class called Shape. The Draw function for each type of Shape implements what
408-482: A fruit if the object fruit exists, and both apple and orange have fruit as their prototype. The idea of the fruit class does not exist explicitly, but can be modeled as the equivalence class of the objects sharing the same prototype, or as the set of objects satisfying a certain interface ( duck typing ). Unlike class-based programming, it is typically possible in prototype-based languages to define attributes and methods not shared with other objects; for example,
510-402: A given type or class of object. Objects are created by calling a special type of method in the class known as a constructor . Classes may inherit from other classes, so they are arranged in a hierarchy that represents "is-a-type-of" 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
612-449: A gradual decline in use of Java in recent years with other languages using JVM gaining popularity. Java was originally developed by James Gosling at Sun Microsystems . It was released in May 1995 as a core component of Sun's Java platform . The original and reference implementation Java compilers , virtual machines, and class libraries were originally released by Sun under proprietary licenses . As of May 2007, in compliance with
714-706: A lawsuit against Google shortly after that for using Java inside the Android SDK (see the Android section). On April 2, 2010, James Gosling resigned from Oracle . In January 2016, Oracle announced that Java run-time environments based on JDK 9 will discontinue the browser plugin. Java software runs on everything from laptops to data centers , game consoles to scientific supercomputers . Oracle (and others) highly recommend uninstalling outdated and unsupported versions of Java, due to unresolved security issues in older versions. There were five primary goals in creating
816-485: A mixin is simply a class that does not represent an is-a-type-of relationship. Mixins are typically used to add the same methods to multiple classes. For example, class UnicodeConversionMixin might provide a method unicode_to_ascii() when included in class FileReader and class WebPageScraper, which do not share a common parent. Abstract classes cannot be instantiated into objects; they exist only for inheritance into other "concrete" classes that can be instantiated. In Java,
918-566: 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, Influenced by the work at MIT and the Simula language, in November 1966 Alan Kay began working on ideas that would eventually be incorporated into the Smalltalk programming language. Kay used
1020-478: A number of other standard servlet classes available, for example for WebSocket communication. The Java servlet API has to some extent been superseded (but still used under the hood) by two standard Java technologies for web services: Typical implementations of these APIs on Application Servers or Servlet Containers use a standard servlet for handling all interactions with the HTTP requests and responses that delegate to
1122-457: A separate location addressed via a pointer). Date and Darwen have proposed a theoretical foundation that uses OOP as a kind of customizable type system to support RDBMS , but it forbids object pointers. The OOP paradigm has been criticized for overemphasizing the use of objects for software design and modeling at the expense of other important aspects (computation/algorithms). For example, Rob Pike has said that OOP languages frequently shift
SECTION 10
#17328982472511224-440: A small portion of code to which Sun did not hold the copyright. Sun's vice-president Rich Green said that Sun's ideal role with regard to Java was as an evangelist . Following Oracle Corporation 's acquisition of Sun Microsystems in 2009–10, Oracle has described itself as the steward of Java technology with a relentless commitment to fostering a community of participation and transparency. This did not prevent Oracle from filing
1326-421: A special name such as this or self used to refer to the current object. In languages that support open recursion , object methods can call other methods on the same object (including themselves) using this name. This variable is late-bound ; it allows a method defined in one class to invoke another method that is defined later, in some subclass thereof. Simula (1967) is generally accepted as being
1428-437: 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. Alexander Stepanov compares object orientation unfavourably to generic programming : I find OOP technically unsound. It attempts to decompose
1530-448: Is delegated to its parent object or class, and so on, going up the chain of inheritance. Data abstraction is a design pattern in which data are visible only to semantically related functions, to prevent misuse. The success of data abstraction leads to frequent incorporation of data hiding as a design principle in object-oriented and pure functional programming. Similarly, encapsulation prevents external code from being concerned with
1632-399: Is a general-purpose programming language intended to let programmers write once, run anywhere ( WORA ), meaning that compiled Java code can run on all platforms that support Java without the need to recompile. Java applications are typically compiled to bytecode that can run on any Java virtual machine (JVM) regardless of the underlying computer architecture . The syntax of Java
1734-493: Is a technique that encourages decoupling . In object oriented programming, objects provide a layer which can be used to separate internal from external code and implement abstraction and encapsulation. External code can only use an object by calling a specific instance method with a certain set of input parameters, reading an instance variable, or writing to an instance variable. A program may create many instances of objects as it runs, which operate independently. This technique, it
1836-666: Is actually two compilers in one; and with GraalVM (included in e.g. Java 11, but removed as of Java 16) allowing tiered compilation . Java itself is platform-independent and is adapted to the particular platform it is to run on by a Java virtual machine (JVM), which translates the Java bytecode into the platform's machine language. Programs written in Java have a reputation for being slower and requiring more memory than those written in C++ . However, Java programs' execution speed improved significantly with
1938-403: Is also a form of information hiding. 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
2040-405: Is called (i.e. 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. Dispatch interacts with inheritance; if a method is not present in a given object or class, the dispatch
2142-513: Is claimed, allows easy re-use of the same procedures and data definitions for different sets of data, in addition to potentially mirroring real-world relationships intuitively. Rather than utilizing database tables and programming subroutines, the developer utilizes objects the user may be more familiar with: objects from their application domain. These claims that the OOP paradigm enhances reusability and modularity have been criticized. The initial design
SECTION 20
#17328982472512244-520: Is difficult because of lack of an agreed-upon and rigorous definition of OOP. 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 conflict with a procedure or variable sharing the same name in another file or module. An object is a data structure or abstract data type containing fields (state variables containing data) and methods ( subroutines or procedures defining
2346-429: Is encouraged to use the most restrictive visibility possible, in order of local (or method) variables, private variables (in object oriented programming), and global (or public) variables, and only be expanded when and as much as necessary. This prevents changes to visibility from invalidating existing code. If a class does not allow calling code to access internal object data and permits access through methods only, this
2448-409: Is implicitly allocated on the stack or explicitly allocated and deallocated from the heap . In the latter case, the responsibility of managing memory resides with the programmer. If the program does not deallocate an object, a memory leak occurs. If the program attempts to access or deallocate memory that has already been deallocated, the result is undefined and difficult to predict, and the program
2550-623: Is insufficient free memory on the heap to allocate a new object; this can cause a program to stall momentarily. Explicit memory management is not possible in Java. Java does not support C/C++ style pointer arithmetic , where object addresses can be arithmetically manipulated (e.g. by adding or subtracting an offset). This allows the garbage collector to relocate referenced objects and ensures type safety and security. As in C++ and some other object-oriented languages, variables of Java's primitive data types are either stored directly in fields (for objects) or on
2652-554: 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 "first_name" and "position". Object composition is used to represent "has-a" 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
2754-399: Is likely to become unstable or crash. This can be partially remedied by the use of smart pointers , but these add overhead and complexity. Garbage collection does not prevent logical memory leaks, i.e. those where the memory is still referenced but never used. Garbage collection may happen at any time. Ideally, it will occur when a program is idle. It is guaranteed to be triggered if there
2856-408: Is necessary to draw itself while calling code can remain indifferent to the particular type of Shape being drawn. This is another type of abstraction that simplifies code external to the class hierarchy and enables strong separation of concerns . A common feature of objects is that methods are attached to them and can access and modify the object's data fields. In this brand of OOP, there is usually
2958-420: Is no longer needed, typically when objects that are no longer needed are stored in containers that are still in use. If methods for a non-existent object are called, a null pointer exception is thrown. One of the ideas behind Java's automatic memory management model is that programmers can be spared the burden of having to perform manual memory management. In some languages, memory for the creation of objects
3060-450: Is quoted as saying: 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 has suggested a connection between the standalone nature of objects and a tendency to duplicate code in violation of the don't repeat yourself principle of software development. Subtyping –
3162-500: Is similar to C and C++ , but has fewer low-level facilities than either of them. The Java runtime provides dynamic capabilities (such as reflection and runtime code modification) that are typically not available in traditional compiled languages. Java gained popularity shortly after its release, and has been a very popular programming language since then. Java was the third most popular programming language in 2022 according to GitHub . Although still widely popular, there has been
AP Computer Science A - Misplaced Pages Continue
3264-528: Is supported for interfaces . Java uses comments similar to those of C++. There are three different styles of comments: a single line style marked with two slashes ( // ), a multiple line style opened with /* and closed with */ , and the Javadoc commenting style opened with /** and closed with */ . The Javadoc style of commenting allows the user to run the Javadoc executable to create documentation for
3366-447: Is the latest version (Java 22, and 20 are no longer maintained). Java 8, 11, 17, and 21 are previous LTS versions still officially supported. James Gosling , Mike Sheridan, and Patrick Naughton initiated the Java language project in June 1991. Java was originally designed for interactive television, but it was too advanced for the digital cable television industry at the time. The language
3468-431: Is written inside classes, and every data item is an object, with the exception of the primitive data types, (i.e. integers, floating-point numbers, boolean values , and characters), which are not objects for performance reasons. Java reuses some popular aspects of C++ (such as the printf method). Unlike C++, Java does not support operator overloading or multiple inheritance for classes, though multiple inheritance
3570-635: The final keyword can be used to prevent a class from being subclassed. In contrast, in prototype-based programming , objects are the primary entities. Generally, the concept of a "class" does not even exist. Rather, the prototype or parent of an object is just another object to which the object is linked. In Self, an object may have multiple or no parents, but in the most popular prototype-based language, Javascript, 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
3672-427: The C programming language . The " open/closed principle " advocates that classes and functions "should be open for extension, but closed for modification". Luca Cardelli has claimed that OOP languages have "extremely poor modularity properties with respect to class extension and modification", and tend to be extremely complex. The latter point is reiterated by Joe Armstrong , the principal inventor of Erlang , who
3774-573: The Cocoa frameworks on Mac OS X , written in Objective-C , an object-oriented, dynamic messaging extension to C based on Smalltalk. OOP toolkits also enhanced the popularity of event-driven programming (although this concept is not limited to OOP). At ETH Zürich , Niklaus Wirth and his colleagues investigated the concept of type checking across module boundaries. Modula-2 (1978) included this concept, and their succeeding design, Oberon (1987), included
3876-491: The College Board to quickly test a student's knowledge of object oriented programming ideas such as inheritance and encapsulation while requiring students to understand how objects such as "the environment", "the fish", and the simulation's control module interact with each other without having to develop the entire environment independently, which would be quite time-consuming. The case study also gives all students taking
3978-586: The ConcurrentMaps and other multi-core collections, and it was improved further with Java 1.6. Some platforms offer direct hardware support for Java; there are micro controllers that can run Java bytecode in hardware instead of a software Java virtual machine, and some ARM -based processors could have hardware support for executing Java bytecode through their Jazelle option, though support has mostly been dropped in current implementations of ARM. Java uses an automatic garbage collector to manage memory in
4080-528: The Linn Smart Rekursiv . In the mid-1980s Objective-C was developed by Brad Cox , who had used Smalltalk at ITT Inc. . Bjarne Stroustrup , who had used Simula for his PhD thesis, created the object-oriented C++ . In 1985, Bertrand Meyer also produced the first design of the Eiffel language . Focused on software quality, Eiffel is a purely object-oriented programming language and a notation supporting
4182-418: The object lifecycle . The programmer determines when objects are created, and the Java runtime is responsible for recovering the memory once objects are no longer in use. Once no references to an object remain, the unreachable memory becomes eligible to be freed automatically by the garbage collector. Something similar to a memory leak may still occur if a programmer's code holds a reference to an object that
AP Computer Science A - Misplaced Pages Continue
4284-503: The stack (for methods) rather than on the heap, as is commonly true for non-primitive data types (but see escape analysis ). This was a conscious decision by Java's designers for performance reasons. Java contains multiple types of garbage collectors. Since Java 9, HotSpot uses the Garbage First Garbage Collector (G1GC) as the default. However, there are also several other garbage collectors that can be used to manage
4386-460: 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 included a programming environment and was dynamically typed , and at first was interpreted , not compiled . Smalltalk became noted for its application of object orientation at the language-level and its graphical development environment. Smalltalk went through various versions and interest in
4488-403: The AP Computer Science AB exam, it was discontinued after the 2008–2009 year. The AP Computer Science AB Examination was discontinued as of May 2009. The grade distributions from 2003 to 2009 are shown below: Object-oriented programming Object-oriented programming ( OOP ) is a programming paradigm based on the concept of objects , which can contain data and code : data in
4590-576: The AP Computer Science exam has tested students on their knowledge of computer science through Java . Prior to 2015, the exam was composed of two sections, consisting of the following times: As of 2015, however, the Multiple Choice section was extended by 15 minutes while the Free-Response section was reduced by 15 minutes for the following: In the 2023 administration, 94,438 students took
4692-427: The AP Computer Science exams with a common experience from which to draw additional test questions. On each of the exams, at least one free-response question was derived from the case study. There were also five multiple-choice questions that are derived from the case study. This case study was discontinued from 2007, and was replaced by GridWorld . GridWorld is a computer program case study written in Java that
4794-512: The August issue of Byte Magazine , introducing Smalltalk and object-oriented programming to a wide audience. LOOPS, the object system for Interlisp -D, was influenced by Smalltalk and Flavors, and a paper about it was published in 1982. In 1986, the Association for Computing Machinery organized the first Conference on Object-Oriented Programming, Systems, Languages, and Applications (OOPSLA), which
4896-834: The Java language, as part of J2SE 5.0. Prior to the introduction of generics, each variable declaration had to be of a specific type. For container classes, for example, this is a problem because there is no easy way to create a container that accepts only specific types of objects. Either the container operates on all subtypes of a class or interface, usually Object , or a different container class has to be created for each contained class. Generics allow compile-time type checking without having to create many container classes, each containing almost identical code. In addition to enabling more efficient code, certain runtime exceptions are prevented from occurring, by issuing compile-time errors. If Java prevented all runtime type errors ( ClassCastException s) from occurring, it would be type safe . In 2016,
4998-940: The Java language: As of November 2024 , Java 8, 11, 17, and 21 are supported as long-term support (LTS) versions, with Java 25, releasing in September 2025, as the next scheduled LTS version. Oracle released the last zero-cost public update for the legacy version Java 8 LTS in January 2019 for commercial use, although it will otherwise still support Java 8 with public updates for personal use indefinitely. Other vendors such as Adoptium continue to offer free builds of OpenJDK's long-term support (LTS) versions. These builds may include additional security patches and bug fixes. Major release versions of Java, along with their release dates: Sun has defined and supports four editions of Java targeting different application environments and segmented many of its APIs so that they belong to one of
5100-440: The Java platform must run similarly on any combination of hardware and operating system with adequate run time support. This is achieved by compiling the Java language code to an intermediate representation called Java bytecode , instead of directly to architecture-specific machine code . Java bytecode instructions are analogous to machine code, but they are intended to be executed by a virtual machine (VM) written specifically for
5202-630: The ability to run Java applets within web pages, and Java quickly became popular. The Java 1.0 compiler was re-written in Java by Arthur van Hoff to comply strictly with the Java 1.0 language specification. With the advent of Java 2 (released initially as J2SE 1.2 in December 1998 – 1999), new versions had multiple configurations built for different types of platforms. J2EE included technologies and APIs for enterprise applications typically run in server environments, while J2ME featured APIs optimized for mobile applications. The desktop version
SECTION 50
#17328982472515304-553: The attribute sugar_content may be defined in apple but not orange . Some languages like Go do not support inheritance at all. Go states that it is object-oriented, and Bjarne Stroustrup, author of C++, has stated that it is possible to do OOP without inheritance. The doctrine of composition over inheritance advocates implementing has-a 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
5406-487: The class concept covered by "master" or "definition"), albeit specialized to graphical interaction. Also, in 1968, an MIT ALGOL version, AED-0, established a direct link between data structures ("plexes", in that dialect) and procedures, prefiguring what were later termed "messages", "methods", and "member functions". Topics such as data abstraction and modular programming were common points of discussion at this time. Independently of later MIT work such as AED, Simula
5508-432: The class or the instance; this leads to the following terms: Depending on the definition of the language, subclasses may or may not be able to 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 other concepts like traits and mixins , though, in any language with multiple inheritance,
5610-468: The discipline imposed by OOP prevents any one programmer from "doing too much damage". Eric S. Raymond , a Unix programmer and open-source software advocate, has been critical of claims that present object-oriented programming as the "One True Solution". Java (programming language) Java is a high-level , class-based , object-oriented programming language that is designed to have as few implementation dependencies as possible. It
5712-415: The dominant programming paradigm when programming languages supporting the techniques became widely available. These included Visual FoxPro 3.0, C++ , and Delphi . Its dominance was further enhanced by the rising popularity of graphical user interfaces , which rely heavily upon object-oriented programming techniques. An example of a closely related dynamic GUI library and OOP language can be found in
5814-424: The emphasis on abstraction is vital. Object-oriented languages extend the notion of type to incorporate data abstraction, highlighting the significance of restricting access to internal data through methods. Eric S. Raymond has written that object-oriented programming languages tend to encourage thickly layered programs that destroy transparency. Raymond compares this unfavourably to the approach taken with Unix and
5916-570: 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 Object-Oriented Software Construction . Essential to the quality focus of Eiffel is Meyer's reliability mechanism, design by contract , which is an integral part of both the method and language. In the early and mid-1990s object-oriented programming developed as
6018-584: The exam. The mean score was a 3.21 with a standard deviation of 1.50. The grade distributions since 2003 were: The discontinued AP Computer Science AB course included all the topics of AP Computer Science A, as well as a more formal and a more in-depth study of algorithms , data structures , and data abstraction . For example, binary trees were studied in AP Computer Science AB but not in AP Computer Science A. The use of recursive data structures and dynamically allocated structures were fundamental to AP Computer Science AB. Due to low numbers of students taking
6120-507: The exam. There are no questions on the specific content of the labs on the AP exam, but there are questions that test the concepts developed in the labs. The three labs are: The AP exam in Computer Science was first offered in 1984. Before 1999, the AP exam tested students on their knowledge of Pascal . From 1999 to 2003, the exam tested students on their knowledge of C++ instead. Since 2003,
6222-525: The first language with the primary features of an object-oriented 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: Many widely used languages, such as C++, Java, and Python, provide object-oriented features. Although in
SECTION 60
#17328982472516324-422: The focus from data structures and algorithms to types . 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? It's not as if OOP has suddenly made verbs less important in the way we actually think. It's
6426-923: The form of fields (often known as attributes or properties ), and code in the form of procedures (often known as methods ). In OOP, computer programs are designed by making them out of objects that interact with one another. Many of the most widely used programming languages (such as C++ , Java , and Python ) are multi-paradigm and support object-oriented programming to a greater or lesser degree, typically in combination with imperative programming , procedural programming and functional programming . Significant object-oriented languages include Ada , ActionScript , C++ , Common Lisp , C# , Dart , Eiffel , Fortran 2003 , Haxe , Java , JavaScript , Kotlin , Logo , MATLAB , Objective-C , Object Pascal , Perl , PHP , Python , R , Raku , Ruby , Scala , SIMSCRIPT , Simula , Smalltalk , Swift , Vala and Visual Basic.NET . Terminology invoking "objects" in
6528-465: The form of either classes or prototypes . These forms of inheritance are significantly different, but analogous terminology is used to define the concepts of object and instance . In class-based programming , the most popular style, each object is required to be an instance of a particular class . The class defines the data format or type (including member variables and their types) and available procedures (class methods or member functions) for
6630-581: The generated servlet creates the response. Swing is a graphical user interface library for the Java SE platform. It is possible to specify a different look and feel through the pluggable look and feel system of Swing. Clones of Windows , GTK+ , and Motif are supplied by Sun. Apple also provides an Aqua look and feel for macOS . Where prior implementations of these looks and feels may have been considered lacking, Swing in Java SE 6 addresses this problem by using more native GUI widget drawing routines of
6732-575: The heap, such as the Z Garbage Collector (ZGC) introduced in Java 11, and Shenandoah GC, introduced in Java 12 but unavailable in Oracle-produced OpenJDK builds. Shenandoah is instead available in third-party builds of OpenJDK, such as Eclipse Temurin . For most applications in Java, G1GC is sufficient. In prior versions of Java, such as Java 8, the Parallel Garbage Collector was used as the default garbage collector. Having solved
6834-658: The host hardware. End-users commonly use a Java Runtime Environment (JRE) installed on their device for standalone Java applications or a web browser for Java applets . Standard libraries provide a generic way to access host-specific features such as graphics, threading , and networking . The use of universal bytecode makes porting simple. However, the overhead of interpreting bytecode into machine instructions made interpreted programs almost always run more slowly than native executables . Just-in-time (JIT) compilers that compile byte-codes to machine code during runtime were introduced from an early stage. Java's Hotspot compiler
6936-547: The implementation of floating-point arithmetic, and a history of security vulnerabilities in the primary Java VM implementation HotSpot . Developers have criticized the complexity and verbosity of the Java Persistence API (JPA), a standard part of Java EE. This has led to increased adoption of higher-level abstractions like Spring Data JPA, which aims to simplify database operations and reduce boilerplate code. The growing popularity of such frameworks suggests limitations in
7038-467: 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
7140-530: The introduction of just-in-time compilation in 1997/1998 for Java 1.1 , the addition of language features supporting better code analysis (such as inner classes, the StringBuilder class, optional assertions, etc.), and optimizations in the Java virtual machine, such as HotSpot becoming Sun's default JVM in 2000. With Java 1.5, the performance was improved with the addition of the java.util.concurrent package, including lock-free implementations of
7242-418: The language grew. While Smalltalk was influenced by the ideas introduced in Simula 67 it was designed to be a fully dynamic system in which classes could be created and modified dynamically. During the late 1970s and 1980s, object-oriented programming rose to prominence. The Flavors object-oriented Lisp was developed starting 1979, introducing multiple inheritance and mixins . In 1981, Goldberg edited
7344-455: The memory management problem does not relieve the programmer of the burden of handling properly other kinds of resources, like network or database connections, file handles, etc., especially in the presence of exceptions. The syntax of Java is largely influenced by C++ and C . Unlike C++, which combines the syntax for structured, generic, and object-oriented programming, Java was built almost exclusively as an object-oriented language. All code
7446-466: The modern sense of object-oriented programming made its first appearance at the artificial intelligence group at MIT in the late 1950s and early 1960s. "Object" referred to LISP atoms with identified properties (attributes). Another early MIT example was Sketchpad created by Ivan Sutherland in 1960–1961; in the glossary of the 1963 technical report based on his dissertation about Sketchpad, Sutherland defined notions of "object" and "instance" (with
7548-448: The most commercially important recent object-oriented languages are Java , developed by Sun Microsystems , as well as C# and Visual Basic.NET (VB.NET), both designed for Microsoft's .NET platform. Each of these two frameworks shows, in its way, the benefit of using OOP by creating an abstraction from implementation. VB.NET and C# support cross-language inheritance, allowing classes defined in one language to subclass classes defined in
7650-555: The number of students taking AP Computer Science classes. The units of the exam are as follows: Historically, the AP exam used several programs in its free-response section to test students' knowledge of object-oriented programs without requiring them to develop an entire environment. These programs were called Case Studies. This practice was discontinued as of the 2014–15 school year and replaced with optional labs that teach concepts. Case studies were used in AP Computer Science curriculum starting in 1994. The Large Integer case study
7752-437: The object's behavior in code). Fields may also be known as members, attributes, or properties. Objects are typically stored as contiguous regions of memory . Objects are accessed somewhat like variables with complex internal structures, 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. Objects sometimes correspond to things found in
7854-606: The opportunity to hide from external code even if class Person has many public attributes or methods. Delegation is another language feature that can be used as an alternative to inheritance. Rob Pike has criticized the OO mindset for preferring a multilevel type hierarchy with layered abstractions to a three-line lookup table . He has called object-oriented programming "the Roman numerals of computing". Bob Martin states that because they are software, related classes do not necessarily share
7956-477: The other language. Object-oriented 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 common among languages considered to be strongly class- and object-oriented (or multi-paradigm with OOP support), with notable exceptions mentioned. Christopher J. Date stated that critical comparison of OOP to other technologies, relational in particular,
8058-439: The past object-oriented programming was widely accepted, more recently essays criticizing object-oriented programming and recommending the avoidance of these features (generally in favor of functional programming ) have been very popular in the developer community. Paul Graham has suggested that OOP's popularity within large companies is due to "large (and frequently changing) groups of mediocre programmers". According to Graham,
8160-491: The platforms. The platforms are: The classes in the Java APIs are organized into separate groups called packages . Each package contains a set of related interfaces , classes, subpackages and exceptions . Sun also provided an edition called Personal Java that has been superseded by later, standards-based Java ME configuration-profile pairings. One design goal of Java is portability , which means that programs written for
8262-448: The program and can be read by some integrated development environments (IDEs) such as Eclipse to allow developers to access documentation within the IDE. The following is a simple example of a "Hello, World!" program that writes a message to the standard output : Java applets are programs embedded in other applications, mainly in web pages displayed in web browsers. The Java applet API
8364-467: The real world. 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". 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 U.S. customary to metric. Objects can contain other objects in their instance variables; this
8466-401: The relationships of the things they represent. 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 . If the call variability relies on more than the single type of the object on which it
8568-448: 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 ). In C#, Swift & Kotlin languages, internal keyword permits access only to files present in the same assembly, package, or module as that of the class. In programming languages, particularly object-oriented ones,
8670-403: The same names. For example, class Person might define variables "first_name" and "last_name" with method "make_full_name()". These will also be available in class Employee, which might add the variables "position" and "salary". It is guaranteed that all instances of class Employee will have the same variables, such as the name, position, and salary. Procedures and variables can be specific to either
8772-513: The selling of licenses for specialized products such as the Java Enterprise System. On November 13, 2006, Sun released much of its Java virtual machine (JVM) as free and open-source software (FOSS), under the terms of the GPL-2.0-only license. On May 8, 2007, Sun finished the process, making all of its JVM's core code available under free software /open-source distribution terms, aside from
8874-539: The specifications of the Java Community Process , Sun had relicensed most of its Java technologies under the GPL-2.0-only license. Oracle offers its own HotSpot Java Virtual Machine, however the official reference implementation is the OpenJDK JVM which is free open-source software and used by most developers and is the default JVM for almost all Linux distributions. As of September 2024 , Java 23
8976-464: The standard JPA implementation's ease-of-use for modern Java development. The Java Class Library is the standard library , developed to support application development in Java. It is controlled by Oracle in cooperation with others through the Java Community Process program. Companies or individuals participating in this process can influence the design and development of the APIs. This process has been
9078-495: The term "object-oriented programming" in conversation as early as 1967. Although sometimes called "the father of object-oriented programming", Alan Kay has differentiated his notion of OO from the more conventional abstract data type notion of object, and has implied that the computer science establishment did not adopt his notion. A 1976 MIT memo co-authored by Barbara Liskov lists Simula 67 , CLU , and Alphard as object-oriented languages, but does not mention Smalltalk. In
9180-409: The type system of Java was proven unsound in that it is possible to use generics to construct classes and methods that allow assignment of an instance one class to a variable of another unrelated class. Such code is accepted by the compiler, but fails at run time with a class cast exception. Criticisms directed at Java include the implementation of generics, speed, the handling of unsigned numbers,
9282-571: The underlying platforms. JavaFX is a software platform for creating and delivering desktop applications , as well as rich web applications that can run across a wide variety of devices. JavaFX is intended to replace Swing as the standard GUI library for Java SE , but since JDK 11 JavaFX has not been in the core JDK and instead in a separate module. JavaFX has support for desktop computers and web browsers on Microsoft Windows , Linux , and macOS . JavaFX does not have support for native OS look and feels. In 2004, generics were added to
9384-417: The web service methods for the actual business logic. JavaServer Pages ( JSP ) are server-side Java EE components that generate responses, typically HTML pages, to HTTP requests from clients . JSPs embed Java code in an HTML page by using the special delimiters <% and %> . A JSP is compiled to a Java servlet , a Java application in its own right, the first time it is accessed. After that,
9486-480: 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. OOP languages are diverse, but typically OOP languages allow inheritance for code reuse and extensibility in
9588-528: Was attended by 1,000 people. Among other developments was the Common Lisp Object System , which integrates functional programming and object-oriented programming and allows extension via a Meta-object 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
9690-440: Was deprecated with the release of Java 9 in 2017. Java servlet technology provides Web developers with a simple, consistent mechanism for extending the functionality of a Web server and for accessing existing business systems. Servlets are server-side Java EE components that generate responses to requests from clients . Most of the time, this means generating HTML pages in response to HTTP requests, although there are
9792-506: Was developed during the years 1961–1967. Simula introduced important concepts that are today an essential part of object-oriented programming, such as class and object , inheritance, and dynamic binding . The object-oriented 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. I thought of objects being like biological cells and/or individual computers on
9894-461: Was in use prior to 2000. It was replaced by the Marine Biology case study. The Marine Biology Case Study (MBCS) was a program written in C++ until 2003, then in Java , for use with the A and AB examinations. It served as an example of object-oriented programming (OOP) embedded in a more complicated design project than most students had worked with before. The case study was designed to allow
9996-665: Was initially called Oak after an oak tree that stood outside Gosling's office. Later the project went by the name Green and was finally renamed Java , from Java coffee , a type of coffee from Indonesia . Gosling designed Java with a C / C++ -style syntax that system and application programmers would find familiar. Sun Microsystems released the first public implementation as Java 1.0 in 1996. It promised write once, run anywhere (WORA) functionality, providing no-cost run-times on popular platforms . Fairly secure and featuring configurable security, it allowed network- and file-access restrictions. Major web browsers soon incorporated
10098-721: Was only tested on the AB exam. Roughly five multiple-choice questions in Section I were devoted to the GridWorld Case Study, and it was the topic of one free response question in Section II. GridWorld has been discontinued and replaced with a set of labs for the 2014–2015 school year. Instead of the discontinued case studies, the College Board created three new labs that instructors are invited to use, but they are optional and are not tested on
10200-675: Was renamed J2SE. In 2006, for marketing purposes, Sun renamed new J2 versions as Java EE , Java ME , and Java SE , respectively. In 1997, Sun Microsystems approached the ISO/IEC JTC 1 standards body and later the Ecma International to formalize Java, but it soon withdrew from the process. Java remains a de facto standard , controlled through the Java Community Process . At one time, Sun made most of its Java implementations available without charge, despite their proprietary software status. Sun generated revenue from Java through
10302-407: Was used as a substitute for writing a single large program as a culminating project. Due to obvious time restraints during the exam, the GridWorld Case Study was provided by the College Board to students prior to the exam. Students were expected to be familiar with the classes and interfaces (and how they interact) before taking the exam. The case study was divided into five sections, the last of which
10404-685: Was used with the AP Computer Science program from 2008 to 2014. It serves as an example of object-oriented programming (OOP). GridWorld succeeded the Marine Biology Simulation Case Study , which was used from 2000–2007. The GridWorld framework was designed and implemented by Cay Horstmann, based on the Marine Biology Simulation Case Study. The narrative was produced by Chris Nevison and Barbara Cloud Wells, Colgate University . The GridWorld Case Study
#250749