CMSC 202 Syllabus
Computer Science II
Prerequisites
CMSC 201 or CMSC 201H with a grade of ‘C’ or better. MATH 150, MATH 151, MATH 151H, MATH 152, or MATH 152H with a grade of ‘C’ or better or score of 5 on the Math Placement Test or concurrent enrollment in MATH 151.
Description
This course continues the student’s development of programming and problem-solving skills by providing an introduction to object-oriented design and programming (OOP). The primary focus is on OOP principles and techniques, including encapsulation, aggregation, inheritance, and polymorphism. Other OOP topics such as exception handling and templates are also covered. This is the second course for students interested in pursuing further study in computer science.
Course Outcomes
- Understand the fundamental concepts of object-oriented programming (OOP) and how they apply to C++ programming, including the concepts of classes and objects.
- Learn to design and implement classes and objects in C++, using proper encapsulation, data abstraction, and information hiding techniques.
- Master the use of pointers in C++ to effectively manipulate memory and dynamically allocate and deallocate objects.
- Develop proficiency in creating and manipulating linked lists, including operations such as insertion, deletion, traversal, and searching.
- Explore the concept of inheritance and its role in creating hierarchical relationships between classes, enabling code reuse and extensibility.
- Gain proficiency in implementing inheritance and understanding the various types of inheritance in C++, such as single inheritance and multilevel inheritance.
- Understand and apply the concept of polymorphism in C++, including function overloading and virtual functions, to write flexible and extensible code that can handle different object types efficiently.
- Learn to utilize C++ templates to write generic code that can work with multiple data types, improving code reusability and reducing redundancy.
- Develop skills in writing effective unit tests for C++ programs, using testing frameworks and techniques to ensure code correctness, reliability, and maintainability.
Student Outcomes
Level Of Emphasis | |||
ABET Outcome | Low | Medium | High |
Analyze a complex computing problem and to apply principles of computing and other relevant disciplines to identify solutions. | X | ||
Design, implement, and evaluate a computing-based solution to meet a given set of computing requirements in the context of the program’s discipline. | X | ||
Communicate effectively in a variety of professional contexts. | X | ||
Recognize professional responsibilities and make informed judgments in computing practice based on legal and ethical principles. | X | ||
Function effectively as a member or leader of a team engaged in activities appropriate to the program’s discipline. | X | ||
Apply computer science theory and software development fundamentals to produce computing-based solutions. | X |
Text
Savitch, W. and Mock, K. (2016). Absolute C++, Sixth Edition. Pearson.
Topics
- Object-oriented design concepts
- Classes and objects
- Encapsulation and data hiding
- Aggregation
- Inheritance
- Polymorphism
- C++ programming language syntax and semantics
- Basic C/C++ syntax
- Functions in C/C++
- Pointers in C/C++
- Linked Lists in C/C++
- Object-oriented programming features and concepts
- Application of Object-oriented design concepts in C++
- Constructors and Destructors
- Operator overloading
- Copy constructors
- Templates and the Standard Template Library
- Exceptions
- Program construction techniques
- Debugging
- Unit testing
Topics (Optional)
- Multithreading
- Type Inference
- Smart Pointers
- Lambdas
Grading
Grades will be based on a combination of exams, projects, and labs. The number and weight of each type of graded assessment are subject to the following guidelines:
Exams | |
2 Midterm Exams | 30% |
Cumulative Final Exam | 18% |
Projects | |
5 Programming Projects | 40% |
Labs | |
Best 10 of 12 or 13 Lab Assignments | 10% |
Surveys | |
Surveys | 2% |