|1. Description - |
|Systematic introduction to fundamental concepts of computer science through the study of the C++ programming language. Coding topics include C++ control structures, objects, global-scope functions, class methods, arrays and elementary data structures. Concept topics include algorithms, recursion, data abstraction, problem solving strategies, code style, documentation, debugging techniques and testing.|
|Advisory: Satisfactory score on the mathematics placement test or MATH 105 or 108.|
|2. Course Objectives - |
|The student will be able to: |
- Describe the basic components of the C++ software development environment.
- Describe the C++ software development life cycle from concept design through documentation, testing and maintenance.
- Produce clearly written code in an industry standard style appropriate for C++.
- Define both primitive and compound data types and give examples in C++ of each type.
- Use C++ variable expressions in a program to compute numeric and string results.
- Incorporate well-formatted output and user-interaction in a console program.
- Define, analyze and code the basic C++ conditional and iterative control structures and explain how they can be nested.
- Design, implement, test, and debug functions and methods that can be used in programs, and demonstrate the way value and reference parameters are passed in such functions and methods.
- Apply the techniques of structured (functional) decomposition to separate a C++ program into computational and interactive modules.
- Write C++ programs using object-oriented design, and contrast the difference between object-oriented and procedural code.
- Discuss the special syntax needed to utilize the "this" pointer and static member methods in C++.
- Create analytical algorithms that use arrays for solving simple problems.
- Explain how errors can be reported to the calling function.
- Explain what an algorithm is and give examples of how algorithms are implemented in a C++ program.
- Design, implement, test, and debug a C++ program that uses each of the following fundamental programming constructs: string processing, numeric computation, simple I/O, arrays and the C++ API.
- Solve problems that have origins in a variety of disciplines including math, science, the Internet and business.
- Explain the difference between syntax and semantics in the context of C++, and place C++ in its historical context among high-level languages.
|3. Special Facilities and/or Equipment - |
- Access to a computer laboratory with C++ compilers.
- Website or course management system with an assignment posting component (through which all lab assignments are to be submitted) and a forum component (where students can discuss course material and receive help from the instructor). This applies to all sections, including on-campus (i.e., face-to-face) offerings.
- When taught via Foothill Global Access on the Internet, the college will provide a fully functional and maintained course management system through which the instructor and students can interact.
- When taught via Foothill Global Access on the Internet, students must have currently existing e-mail accounts and ongoing access to computers with internet capabilities.
|4. Course Content (Body of knowledge) - |
- The Software Development Environment
- The C++ run-time environment
- Integrated development environments (IDEs)
- Compiled vs. interpreted languages
- Survey of major languages
- Obtaining and installing a C++ IDE
- The Software Development Life-Cycle
- Overview of design
- Overview of development
- Overview of documentation
- Overview of testing
- Overview of maintenance
- Compiler errors vs. run-time errors
- Debugging strategies
- Coding Standards, Conventions and Styles
- Acceptable indentation options
- Naming conventions for variables and methods
- Data Types
- Primitive vs. compound types
- Numeric types
- Range and Precision
- Char types
- C++ strings vs. old-style C char arrays
- Logical types
- Array types
- Type compatibility
- the const modifier
- C++-defined classes as compound types
- Variable Expressions
- Numeric operators and expressions
- String operators and expressions
- Logical operators and expressions
- Operator precedence
- Basic Input-Output Strategies
- Console I/O
- Use of cin and cout
- Use of getline()
- Formatting values for clean output
- Control Structures
- Selective and conditional statements
- Loop statements
- Nesting levels in control statements
- Methods and Functional Programming
- Parameter passing
- Pass-by-value vs. Pass-by-reference
- Functional returns
- Variable scope, binding, lifetime and visibility
- Default parameters
- Function overloading
- Structured Programming Elements
- Separation of computation and I/O
- Object-Oriented Programming Using Classes and Methods
- Encapsulation of member data
- Encapsulation of member methods
- Constructors and destructors
- Instance vs. static members and methods
- Initialization of static members
- Data abstraction as realized through correct selection of member data and methods
- Data privacy as supported by mutator and accessor methods
- Object composition (the "has a" relationship)
- Correct interpretation of assignment between C++ objects
- Procedural languages vs. Object-oriented languages
- Special C++ Considerations: "this" and static usage
- Static member initialization syntax
- Client access of static methods through the scoping operator
- Use of the "this" pointer and how pointers differ from standard (i.e., non-pointer) variables
- Arrays inside classes
- Arrays of objects
- Error Reporting
- Functional returns
- Reference parameters
- Avoiding end-use output to report errors in functions or methods
- Role of algorithms in the problem-solving process
- Simple uses of recursion for divide-and-conquer strategies
- Simple Sorting via a representative sort algorithm
- Linear searches
- Essential examples and Assignment Areas
- String/text processing
- Numeric computation
- User interaction
- Using C++-defined API methods
- Creating and using a programmer-defined class.
- Applications used throughout course in selected areas
- Business and finance
- History and Syntax
- C++ in compared with prior languages
- Current language alternatives to C++
- Examples of how different languages use differing syntax to implement a single semantic construct.
|5. Repeatability - Moved to header area.|
|6. Methods of Evaluation - |
- Tests and quizzes
- Written laboratory assignments which include source code, sample runs and documentation.
- Final examination
|7. Representative Text(s) - |
|Savitch, Walter. Absolute C++. 3rd Edition, Addison Wesley, 2008. |
|8. Disciplines - |
|Computer Science |
|9. Method of Instruction - |
- Lectures which include motivation for syntax and use of the C++ language and OOP concepts, example programs, and analysis of these programs.
- On-line labs (for all sections, including those meeting face-to-face/on campus) consisting of
- A programming assignment web-page located on a college-hosted course management system or other department-approved Internet environment. Here, the students will review the specification of each programming assignment and submit their completed lab work.
- A discussion web-page located on a college hosted course management system or other department-approved Internet environment. Here, students can request assistance from the instructor and interact publically with other class members.
- Detailed review of programming assignments which includes model solutions and specific comments on the student submissions.
- In person or on-line discussion which engages students and instructor in an ongoing dialog pertaining to all aspects of designing, implementing and analyzing programs.
- When course is taught fully on-line:
- Instructor-authored lecture materials, handouts, syllabus, assignments, tests, and other relevant course material will be delivered through a college hosted course management system or other department-approved Internet environment.
- Additional instructional guidelines for this course are listed in the attached addendum of CS department on-line practices.
|10. Lab Content - |
- Familiarization with the beginning-level online lab environment
- Modify and customize the settings of an Integrated Development Environment (IDE).
- Use the IDE to create a new programming project.
- Organize projects within an IDE to make submitting labs and switching project environments an orderly process .
- Gain experience with the steps needed to edit a simple program.
- Modify IDE settings to produce an industry standard code style.
- Finding and fixing errors in simple programs
- Demonstrate the complete edit-compile-run cycle of a simple program using IDE or command-line environment.
- Distinguish between compiler/syntax errors and logic errors.
- Develop strategies for dealing with each type of error.
- Debug code to produce a working program.
- Exploring the different data types using the compiler/IDE
- Gain experience in effectively using the IDE to create code with primitive numeric types.
- Gain experience in effectively using the IDE to create code with primitive character types.
- Use the IDE to assist in defining and using compound data types.
- Solve syntax and logic problems that arise from typical incorrect formulation of data types.
- Demonstrating user interaction (I/O) through the IDE's console or GUI capabilities
- Play the role of user and programmer, alternately, to establish a user-interaction plan for a program.
- Evaluate and comment on other students' user-interaction plan.
- Change modes from source code design (editing mode) to end-user interaction (run mode) in your IDE in order to perform Q/A on the program.
- Fix poor interaction behavior by adjusting source code and rerunning program until a satisfactory result is achieved.
- Designing, implementing and testinga program that demonstrates “intelligence” though a combination of control statements
- Become familiar with selection, loop and nesting to imbue a program with correct logic behavior.
- Use structured programming to make control structures maintainable.
- Run the program multiple times to verify that its control statements produce the correct behavior or output under any scenario.
- Fix incorrect logic behavior by adjusting control structures and rerunning program until a satisfactory result is achieved.
- Incorporating functions and class methods in programming projects
- Gain experience in designing, implementing and testing a function/method that demonstrates how binding, visibility and variable lifetime work in an OOP language.
- Use a previously written function or method in a client program.
- Refine methods/functions by adding or changing their definitions and locally bound variables, and observe the result.
- Deduce the impact of a function's or method's design on the programs that invoke it.
- Building a program around object-oriented techniques
- Use previously written classes to instantiate objects in program.
- Use the IDE to assist in the creation of a programmer-defined class.
- Demonstrate the correct choice of class members and methods for each class used.
- Use the IDEs outline view to navigate from one class to another within a program.
- Exploring Arrays
- Understand the proper use of an Arrays.
- Incorporate an array into a program to facilitate the solution of an assigned problem.
- Investigate use of variable indices and loops to shorten and clarify the logic in programs.
- Use debugging techniques to solve problems that arise during the testing of a program.
- Designing, implementing and testing and algorithms
- Write a program that uses a combination of techniques such as looping, arrays, logic and user I/O, all encapsulated in a coherent algorithm.
- Test the algorithm by running the program multiple times giving it different initial values or inputs.
- Implement a sorting or simple searching algorithm using arrays.
- Transcribe an abstract algorithm into a concrete program that is written and tested using the IDE and submitted online for evaluation.
|11. Honors Description - No longer used. Integrated into main description section.|
|12. Types and/or Examples of Required Reading, Writing and Outside of Class Assignments - |
- Textbook assigned reading averaging 30 pages per week.
- Reading the supplied handouts and modules averaging 10 pages per week.
- Reading on-line resources as directed by instructor though links pertinent to programming.
- Reading library and reference material directed by instructor through course handouts.
- Writing technical prose documentation that supports and describes the programs that are submitted for grades.
|13. Need/Justification - |
|This course is a required core course for the AS degree in Computer Science. |