The Advanced Placement Program offers a course and exam in introductory computer science. The course emphasizes object-oriented programming methodology with a concentration on problem solving and algorithm development, and is meant to be the equivalent of a first-semester college-level course in computer science. It also includes the study of data structures, design, and abstraction. For a listing of the topics addressed, see the AP Computer Science A topic outline on pages 8–10.

The nature of the AP course is suggested by the words “computer science” in the title. Their presence indicates a disciplined approach to a more broadly conceived subject than would a descriptor such as “computer programming.” There are no computing prerequisites for the AP course. It is designed to serve as a first course in computer science for students with no prior computing experience.

Because of the diversity of introductory computer science courses currently offered by colleges and universities, the outline of topics described here may not match any course exactly. The Association for Computing Machinery (ACM) and the Institute of Electrical and Electronics Engineers (IEEE) Computer Society have published standards for the content of a college-level program in computer science that include recommendations for topics to be taught in the first two years of college. The AP Computer Science A course is compatible with those topics that are taught in a typical CS1 course as described in the example curricula in the ACM/IEEE guidelines. Some colleges and universities may organize their curricula in alternative ways so that the topics of the AP Computer Science A course are spread over the first one or two college courses, with other topics from computer science interspersed.

The AP Computer Science A course can be offered by any secondary school that has faculty who possess the necessary expertise and have access to appropriate computing facilities. The course represents college- level achievement for which most colleges and universities can be expected to grant advanced placement and credit. Placement and credit are granted by institutions in accordance with their own policies, not by the College Board or the AP Program.

I. Object-Oriented Program Design

The overall goal for designing a piece of software (a computer program) is to correctly solve the given problem. At the same time, this goal should encompass specifying and designing a program that is understandable, can be adapted to changing circumstances, and has the potential to be reused in whole or in part. The design process needs to be based on a thorough understanding of the problem to be solved.

A. Program design

1. Read and understand a problem description, purpose, and goals.

2. Apply data abstraction and encapsulation.

3. Read and understand class specifications and relationships among the classes (“is-a,” “has-a” relationships).

4. Understand and implement a given class hierarchy.

5. Identify reusable components from existing code using classes and class libraries.

B. Class design

    1. Design and implement a class.

    2. Choose appropriate data representation and algorithms.

    3. Apply functional decomposition.

    4. Extend a given class using inheritance.

II. Program Implementation

The overall goals of program implementation parallel those of program design. Classes that fill common needs should be built so that they can be reused easily in other programs. Object-oriented design is an important part of program implementation.

A. Implementation techniques

1. Methodology

a. Object-oriented development

b. Top-down development

c. Encapsulation and information hiding

d. Procedural abstraction

B. Programming constructs

1. Primitive types vs. objects

2. Declaration

a. Constant declarations

b. Variable declarations

c. Class declarations

d. Interface declarations

e. Method declarations

f. Parameter declarations

3. Console output (System.out.print/println)

4. Control

a. Methods

b. Sequential

c. Conditional

d. Iteration

e. Understand and evaluate recursive methods

C. Java library classes (included in the AP Java subset)

III. Program Analysis

The analysis of programs includes examining and testing programs to determine whether they correctly meet their specifications. It also includes the analysis of programs or algorithms in order to understand their time and space requirements when applied to different data sets.

A. Testing

1. Test classes and libraries in isolation.

2. Identify boundary cases and generate appropriate test data.

3. Perform integration testing.

B. Debugging

1. Categorize errors: compile-time, run-time, logic.

2. Identify and correct errors.

3. Employ techniques such as using a debugger, adding extra output statements, or hand-tracing code.

C. Understand and modify existing code

D. Extend existing code using inheritance

E. Understand error handling

1. Understand runtime exceptions.

F. Reason about programs

1. Pre- and post-conditions

2. Assertions

G. Analysis of algorithms

1. Informal comparisons of running times

2. Exact calculation of statement execution counts

H. Numerical representations and limits

1. Representations of numbers in different bases

2. Limitations of finite representations (e.g., integer bounds, imprecision of floating-point representations, and round-off error)

IV. Standard Data Structures

Data structures are used to represent information within a program. Abstraction is an important theme in the development and application of data structures.

A. Simple data types (int, boolean, double)

B. Classes

C. Lists

D. Arrays

V. Standard Algorithms

Standard algorithms serve as examples of good solutions to standard problems. Many are intertwined with standard data structures. These algorithms provide examples for analysis of program efficiency.

A. Operations on data structures previously listed

1. Traversals

2. Insertions

3. Deletions

B. Searching

1. Sequential

2. Binary

C. Sorting

1. Selection

2. Insertion

3. Mergesort

VI. Computing in Context

An awareness of the ethical and social implications of computing systems is necessary for the study of computer science. These topics need not be addressed in detail but should be considered throughout the course.

A. System reliability

B. Privacy

C. Legal issues and intellectual property

D. Social and ethical ramifications of computer use