AP Computer Science A Syllabus Course Overview AP® Computer Science A is both a course for potential computer science majors and a foundation course for students planning to study in other technical fields such as engineering, physics, chemistry, and geology. The course emphasizes programming methodology, procedural abstraction, and in-depth study of algorithms, data structures, and data abstractions, as well as a structured lab component comprised of a minimum of 20 hours of hands-on lab experiences integrated throughout the course. [CR6] Instruction includes preparation for the AP Computer Science A Exam. In teaching this course, my reward comes when students can apply the programming tools they have learned to real-life examples on their own. Computer science is more than just programming. Students should leave my class with a clear understanding of Java and the ability to adapt to any new programming language that they are taught in college. I want them to have the confidence to tackle any problem-solving obstacles they encounter. Lab Students will participate each day in a computer lab setting, plus they will have time before and after the school day to come in and work on projects. Lab work will consist of a series of smaller programs to learn concepts, and larger projects to apply what they have learned. The computers all have the Sun Java SDK and Eclipse interactive development environments on them. All of the software is available for students to mirror their school environment at home. Text & Supplementary Resources Java Software Solutions for AP Computer Science A, third edition, John Lewis, William Loftus, Cara Cocking, 2011 Be Prepared for the AP Computer Science Exam in Java. Maria Litvin. Skylight Publishing, 2014. Blue Pelican Java, Virtual Book Worm, 2005-2013 Software Resources Java JDK – java.oracle.com Codingbat code practice – http://codingbat.com/java. Light-Bot – www.kongregate.com/games/Coolio_Niato/light-bot Object Oriented Programming Web–http://www.oopweb.com/Java/Files/Java.html Course Planner Unit 1 – Intro to Computer Science, Ethical Computing, & Computer Systems Concepts Computer Systems Numerical representations; limitations of finite representations; number bases and conversion; hardware (primary and secondary memory); programming languages; and language interpreters and compilers. Curricular Requirements [1] JSS Textbook Chapter 1 Resources Light-bot Java Software Solutions (JSS) Cisco Binary Game Blue Pelican Java (BPJ) 2 weeks 2 – “Objects and Primitive Data” Curricular Requirements [1, 5] Intro to Eclipse IDE Students learn to setup IDE for assignments and projects AP Computer Science Quick Reference Guide (QRG) Discuss the importance of documentation/comments Define the difference between primitive data and objects. Define and use Strings BPJ Declare and use variables. Define and use enumerated variable types Perform mathematical computations. Create objects and use them (begin abstraction and encapsulation discussion) Introduce Input (Scanner class) JSS Textbook Chapter 2 3 weeks JSS 3 – “Program Statements” Curricular Requirements [1, 3, 4] Discuss basic program development steps. Define the flow of control through a program. Learn to use if statements. Define expressions that let us make complex decisions. Learn to use while and for statements. JSS Textbook Chapter 3 JSS BPJ QRG Codingbat (CB) 3 weeks 4 – “Writing Classes “ Curricular Requirements [1, 4] 3 weeks Define classes that act like blueprints for new objects, made of variables and methods. Explain constructors, encapsulation and Java modifiers. Explore the details of method declarations. o Review method invocation and parameter passing. o Explain and use method overloading. o Learn to divide complicated methods into simpler, supporting methods. Describe relationships between objects. JSS BPJ QRG CB 5 – “Enhancing Classes” Curricular Requirements [1, 5] Define reference aliases. Explore passing object references as parameters. Learn to use the static modifier. Define formal interfaces and their class implementations. Define nested classes and inner classes Learn about basic graphical user interfaces. JSS BPJ QRG JJS Textbook Chapter 5 4 weeks 6 –Arrays, ArrayLists, Searching, and Sorting Curricular Requirements [ 1, 2, 3, 4, 5] Define and Use Arrays Describe how arrays and array elements are passed as parameters. Explore how arrays and other objects can be combined to manage complex information. Explore searching within an array – sequential and binary search Explore sorting within an arrays Selection, insertion, and mergesort Learn to use multidimensional arrays. Examine the ArrayList class. Discuss when to use arrays vs. ArrayList JSS QRG BPJ Practice AP Exams from AP Central (APE) JJS Textbook Chapter 6 3 weeks 7 – “Inheritance” Curricular Requirements [4, 5] Derive new classes from existing ones. Explain how inheritance supports software reuse. Add and modify methods in child classes. JSS QRG BPJ GW APE Discuss how to design class hierarchies. Define polymorphism and how it can be done. Discuss the use of inheritance in Java GUI framework. Examine and use the GUI component class hierarchy JJS Textbook Chapter 7 4 weeks 8 – “Recursion” Curricular Requirements [1, 2, 3] Explain the underlying ideas of recursion. Examine recursive methods and processing steps. Define infinite recursion and discuss ways to avoid it. Explain when recursion should and should not be used. Demonstrate the use of recursion to solve problems. Examine the use of recursion in sorting. JSS QRG BPJ APE JJS Textbook Chapter 8 3 weeks 9 – Review, AP, 3 weeks Final Exam, Ethical and Social Implications of Computer Use Review/Project Presentations Curricular Requirements [7] 5 weeks Ethical and Social Implications of Computer Use; AP Examination Responsible use of computer systems (system reliability, privacy, intellectual property, legal issues, and social and ethical ramifications of computer use). Be Prepared JSS QRG BPJ GW APE 10 – Group and other Projects In groups, students will design games (such as Checkers, Connect 4, etc...) using GridWorld) JSS GW 2 weeks Curricular Requirements CR1 The course teaches students to design and implement computer based solutions to problems. CR2a The course teaches students to use and implement commonly used algorithms. CR2b The course teaches students to use commonly used data structures. CR3 The course teaches students to select appropriate algorithms and data structures to solve problems. CR4 The course teaches students to code fluently in an object-oriented paradigm using the programming language Java. CR5 The course teaches students to use elements of the standard Java library from the AP Java subset in Appendix A of the AP Computer Science A Course Description. CR6 The course includes a structured lab component comprised of a minimum of 20 hours of hands-on lab experiences. CR7 The course teaches students to recognize the ethical and social implications of computer use. Lesson - Semester Correlation to the AP Topic Outline (When topic is addressed) L-S 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). 1-1, 4-1 2-1,5-1, 1-2 5-1,1-2 4. Understand and implement a given class hierarchy. 5. Identify reusable components from existing code using classes and class libraries 1-2 2-1, 1-2 B. Class design 1. Design and implement a class. 5-1,7-1 2. Choose appropriate data representation and algorithms. 4-1,7-1 3. Apply functional decomposition. 4. Extend a given class using inheritance. 5-1 1-2 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 Object Comparable Integer Double String Math Random 2-1 4-1 5-1 5-1 2-1 2-1 2-1 5-1 7-1 5-1 5-1 2-1 5-2 4-1 4-1 4-1 2-2 1-2 7-1 2-1 2-1 2-1 2-1 2-1 ArrayList 8-1 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. B. 1. 2. 3. Perform integration testing. Debugging Categorize errors: compile-time, run-time, logic. Identify and correct errors. Employ techniques such as using a debugger, adding extra output statements, or hand-tracing code. 7-1 7-1 7-1 1-1 1-1, 7-1 1-1, 7-1 Entire Year C. Understand and modify existing code 1-2 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 representation 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) 7-1 5-1 5-1 8-1 8-1 1-1 2-1, 4-1 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) 2-1 B. Classes 2-1, 5-1 C. Lists 8-1, 4-2 D. Arrays 8-1 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 8-1 8-1 3. Deletions B. Searching 1. Sequential 2. Binary C. Sorting 1. Selection 2. Insertion 3. Mergesort 8-1 8-1 8-1 8-1 8-1 2-2 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 2-1 B. Privacy 2-1 C. Legal issues and intellectual property 2-1 D. Social and ethical ramifications of computer use 2-1