• Course Introduction

        This course is a continuation of CS101: Introduction to Computer Science I. It will introduce you to a number of more advanced Computer Science topics, laying a strong foundation for future academic study in the discipline. We will begin with a comparison between Java, the programming language used in the previous course, and C++, another popular, industry-standard programming language. We will then discuss the fundamental building blocks of Object-Oriented Programming, reviewing what we have already learned and familiarizing ourselves with some more advanced programming concepts. The remaining course units will be devoted to various advanced topics, including the Standard Template Library, Exceptions, Recursion, Searching and Sorting, and Template Classes. By the end of the class, you will have a solid understanding of Java and C++ programming, as well as a familiarity with the major issues that programmers routinely address in a professional setting.

      • Unit 1: C++ and Java

        Having completed CS101: Introduction to Computer Science I, you should have a strong grasp of Java and its uses and a basic understanding of Object-Oriented Programming. This course will employ both Java and C++, another industry-standard programming language. In this unit, we will outline the similarities and differences between these two languages, noting how each is used in the industry. We will also take an in-depth look at the history, importance, and functionality of C++ and compare the basic building blocks of each language in order to draw a distinction between the two and further acquaint you with both languages.

        Completing this unit should take you approximately 18 hours.

        • 1.1: History of C++

            • 1.1.1: Development of C

            • 1.1.2: Branching C to C++

            • 1.1.3: History of Object-Oriented Programming (OOP)

        • Unit 2: The Building Blocks of Object-Oriented Programming

          Now that you are familiar with both C++ and Java, you are ready to explore more advanced topics in Object-Oriented (OO) Programming. We will begin by discussing the motivation behind programming with objects, learning the essential characteristics of OO Programming languages and identifying the advantages and disadvantages of various major programming frameworks. The unit will also provide a general history of OO Programming and, finally, review major characteristics of OO Programming. By the end of this unit, you will be able to discuss different programming paradigms and identify the main properties of OO Programming.

          Completing this unit should take you approximately 15 hours.

        • Unit 3: C++ Standard Template Library

          Nearly every C++ programmer uses the C++ Standard Template Library (STL), a powerful and highly useful library of generic-typed data structures and algorithms. In this unit, we will learn how and why the STL was originally developed. The unit will also introduce you to the history and basics of templates and generic programming before presenting the structures (Containers, Iterators, and Functors) and algorithms that the Standard Template Library contains. By the end of this unit, you will be familiar with the STL, its uses, and its structures and algorithms.

          Completing this unit should take you approximately 18 hours.

        • Unit 4: Exceptions

          A programmer must ensure the safe execution of his or her code. In other words, if an error occurs, the program should present the user with relevant information and then quit gracefully. The built-in C++ structures used to accomplish this goal are known as "Exceptions." This unit will introduce you to the concept of throwing and catching Exceptions when something goes wrong with your software, explain how they are used in both C++ and Java, and teach you how to handle them. By the end of this unit, you will be able to write safe programs designed to perform gracefully when/if errors occur.

          Completing this unit should take you approximately 12 hours.

        • Unit 5: Recursion

          Often considered one of the more conceptually difficult concepts within the field of Computer Science, recursion - the act of a function invoking itself - is a powerful and relevant tool for any Computer Scientist. In this unit, we will take an in-depth look at recursion, learning the recursive steps, the role that recursion plays in common data structures, and what happens inside the computer when a recursion function is invoked. By the end of this unit, you will recognize situations that require recursion and be able to apply it appropriately.

          Note: Recursion can be a difficult concept for some students new to the field of Computer Science. This anxiety is best resolved through the use of an example. For this module, we will employ the use of recursion to write a program to express the "factorial" function. This straight-forward example will give the student an overview of all the major components of recursion.

          Completing this unit should take you approximately 14 hours.

        • Unit 6: Searching and Sorting

          As a computer programmer, you will need to know how to search and sort data. This will require you to leverage what you have learned in a number of different Computer Science areas, drawing from your introduction to data structures and algorithms in particular. In this unit, we will identify the importance of searching and sorting, learn a number of popular searching and sorting algorithms, and determine how to analyze and appropriately apply them. By the end of this unit, you will recognize instances in which you need a searching or sorting algorithm and be able to apply one efficiently.

          Completing this unit should take you approximately 14 hours.

        • Unit 7: Template Programming

          In Unit 3, we discussed the C++ Standard Template Library and introduced the concept of template programming. In this unit, we will further explore both templates and generic programming, cultivating a broader understanding of the topic. We will begin with a review of the STL and a discussion of the motivation behind template development. We will then discuss templates in a more generic fashion, referring back to the STL where necessary, and take a look at how templates are utilized within Java, comparing and contrasting with the C++ STL. By the end of this unit, you will recognize the importance of templates, be able to identify when they are needed, and know how to apply them efficiently.

          Completing this unit should take you approximately 16 hours.

        • Study Guides and Review Exercises

          These study guides are intended to help reinforce key concepts in each unit in preparation for the final exam. Each unit study guide aligns with course outcomes and provides a summary of the core competencies and a list of vocabulary terms. The study guides are not meant to replace the readings and videos that make up the course.

          The vocabulary lists include some terms that might help you answer some of the review items, and some terms you should be familiar with to be successful in completing the final exam for the course.