| Credit Hours: | 4 |
| Course Coordinator: | Karla Fant |
| Course Description: | Students will become familiar with the language and operating system environment used in most upper division courses in the Computer Science major curriculum. Use of the file system, operating-system calls, and shell-level programming; low-level debugging of high-level programs. Programming exercises will include applications from data structures (e.g. B-trees) and memory management techniques.Prerequisites: CS 163. |
| Prerequisites: | CS 163. |
| Goals: | The primary goal in CS202 is to prepare students for programming in the
upper division 3xx and 4xx level classes. To achieve this goal, CS202
focuses on three areas: object oriented programming, advanced C++, and an
overview of how Java relates to what we have learned in C++.
The majority of the term will be spent introducing students to object-oriented programming while learning advanced C++ syntax. Students will understand the difference between procedural abstraction and object oriented solutions. Students will spend the term designing and programming with inheritance hierarchies, with the goal of solving problems efficiently: producing high quality, robust, maintainable as well as efficient object oriented solutions. This will provide students with the chance to experience object oriented design and programming. Programming assignments will focus on advanced data structures while at the same time accomplishing these other goals. Students will learn about C++'s function overloading, operator overloading, copy constructors, and be introduced to inheritance. Java skills developed include writing two programs using advanced data structures in Java with strict requirements to follow OOP guidelines - all data members private, no friendly access, and complete implementation of functions required to handle issues of deep versus shallow copies and compares. Students learn the relationship between the two languages and the similarity of Java's references to pointers. Then, the rest of the term compares Java to C++, where we will work through example projects in both languages. |
| Textbooks: | Thinking in Java, 4th ed Eckel
C++ Primer Plus, 5th ed Stephen Prata. |
| References: | Optional: Object Oriented Programming using C++, Pohl.
Optional: Weekly Lecture Notes and Course Slides. On Reserve at the Library: Information on C++, UNIX, and Tools. |
| Major Topics: |
|
| Laboratory Exercises: | Programs/Individual Projects:
Term Paper
On-line Discussions
|
| CAC Category Credits | Core | Advanced |
| Data Structures | ||
| Algorithms | ||
| Software Design | 1.0 | |
| Computer Architecture | ||
| Programming Languages | 3.0 |
| Oral and Written Communications: | Every student is required to submit at least __6__ written reports (not including exams, tests, quizzes, or commented programs) of typically _2 pages with each program (5 programs), and 4-7 pages for a term paper. Material is graded for grammar, spelling, style, and so forth, as well as for technical content, completeness, and accuracy.
20% of each program's grade is based on a written discussion of the UNIX debuggers used, and major design consideration encountered when solving the specified problem. These must be one page each, and must be submitted with each programming assignment. They are graded for grammar, spelling, style, as well as technical. Each assignment must have an accompanying debugger write-up. These writeups must discuss the benefits and tradeoffs when selecting a particular tool. In addition, each student will be required to submit a 4-7 page, typed, term paper on Object Oriented Programming, due at the final. All tables, code, and examples must be placed as an attachment to this report (and not be included in the 4-7 page count). The paper should introduce the reader to these tools, discuss their usefulness, and discuss features, benefits, and drawbacks.
|
| Social and Ethical Issues: | None. |
| Theoretical Content: | None. |
| Problem Analysis: | See Solution Design Statement. |
| Solution Design: | CS202 focuses on issues that students will encounter in real world programming projects. Advanced concepts not encountered before are emphasized, such as alignment issues, deep copying, garbage collection, and implicit operations. In class discussions focus on concepts that are not typically covered by textbooks at this level.
Students are required to take open-ended specifications and apply their C++ knowledge to design new data types, as completely as possible. This requires that students make their own judgements on the type of functionality required to fully transform an abstraction into a data type that performs in the same manner as the fundamental data types. This requires significant analysis and design: students are faced with questions such as, can the client create instances of this type that are constant, will they be able to use the standard operators in expected ways, will all dynamic memory be allocated, copied, deallocated consistently with the object's lifetime, etc. |