Hello, if you have any need, please feel free to consult us, this is my wechat: wx91due
COMP 2012H Honors Object-Oriented Programming and Data Structures
Course Description
This course is an accelerated and intensive course on concepts and techniques behind object-oriented programming (OOP) and data structures using an OOP language. It covers the major materials of COMP2011 and COMP2012, and its curriculum is designed for students with excellent programming background or substantial programming experience. Topics include: functions; pointers; abstract data types and their class implementation; static and dynamic construction and destruction of objects; data member and member functions; public interface and encapsulation; class hierarchies; polymorphism; inheritance and dynamic binding; standard template library; generic programming using templates; object-oriented view of data structures: linked lists, queues, stacks, trees, and their algorithms such as searching, sorting and hashing. Prerequisite(s): Grade A or above in COMP 1021 / COMP 1022P / COMP 1022Q (prior to 2020-21) / ISOM 3230 Exclusion(s): COMP 2011, COMP 2012
List of Topics
1. Introduction to computer programming2. Fundamentals of C++: data types, variables, operators3. Flow controls4. Arrays5. Functions, scope, and recursion6. File I/O7. Pointers8. lvalue references9. Structures10. Class, object construction, initialization, and destruction11. Separate compilation and makefile12. Inheritance and polymorphism13. Generic programming14. Standard Template Library (STL)15. Namespace16. Static data members and member functions17. rvalue references and move semantics18. Linked lists19. Stack and queue20. Binary search tree21. AVL tree22. Hashing
Textbooks and Reference books
Paul Deitel, Deitel & Associates (2017). C++ How to Program.
M.A. Weiss (2014). Data Structures and Algorithm Analysis in C++.
Data Structures and Algorithm Analysis Ed. 3.2 (C++ Version).
Cay S. Horstmann, Wiley (2012). C++ For Everyone.
B. Eckel (2000). Thinking in C++.
L. Nyhoff (2005). ADTs, Data Structures and Problem Solving with C++.
Stanley Lippman (2013). C++ Primer.
Scott Meyers (2005). Effective C++: 55 Specific Ways to Improve Your Programs and Designs.
Grading Scheme
11 Programming assignments |
6% each |
Final examination |
34% |
Total |
100% |
Course Intended Learning Outcomes
1. Use common software tools to develop and debug a program written in an OOP language.2. Demonstrate that recursive and non-recursive functions are abstractions of subproblems in a task.3. Describe the concept and the use of pointers in indirect addressing and dynamic memory allocation.4. Write object-oriented programs in C++ with object creation, destruction, member variables and functions, inheritance, polymorphisms, and templates.5. Analyze a program and provide simple solutions with OOP.6. Write basic algorithms associated with data structures such as stacks, queues, lists, trees, and hashes.7. Define binary tree and search tree and describe how they are used to solve problems.8. Develop a large program using separate compilation, good OOP design, and code reuse.
Assessment Rubrics
Course Learning Outcome |
Exemplary |
Competent |
Needs Work |
Unsatisfactory |
1. Use common software tools to develop and debug a program written in an OOP language. |
Use an IDE such as VS Code proficiently to write, compile, run, and debug a C++ program consisting of one or many source files. |
Use an IDE such as VS Code effectively to write, compile, run, and debug a C++ program consisting of one or many source files. |
Use an IDE such as VS Code to write, compile, and run a C++ program consisting of one source file. Have difficulty in dealing with programs consisting of more than one source file as well as debugging. |
Have difficulty in using an IDE such as VS Code to write, compile, run, and debug a C++ program consisting of one source file without guidance. |
2. Demonstrate that recursive and nonrecursive functions are abstractions of sub-problems in a task. |
Demonstrate thorough understanding of how recursion works. Be able to develop a recursivesolution to a written problem on one's own, and sometimes contrast it with the corresponding non-recursive solution. |
Demonstrate sufficient understanding of how recursion works. Be able to develop a recursive solution to a written problem if given the recursive algorithm, and sometimes contrast it with the correspondingnon-recursive solution. |
Demonstrate insufficient understanding of how recursion works. Be able to develop recursive solutions only to some simple problems, and only if the recursive algorithm is given. Canno contrast the recursive solution with the corresponding non-recursive solution. |
Is unable to understand how recursion works. Is unable to develop recursive solutions to problems even if the recursive algorithm is given. |
3. Describe the concept and the use of pointers in indirect addressing and dynamic memory allocation. |
Demonstrate strong understanding of the concept of pointers. Is able to use pointers effectively in indirect addressing and dynamic memory allocation in a great variety of scenarios. |
Demonstrate sufficient understanding of the concept of pointers. Is able use pointers effectively in indirect addressing and dynamic memory allocation in standard scenarios. |
Demonstrate marginal understanding of the concept of pointers. Is able to use pointers in indirect addressing and dynamic memory allocation only in simple scenarios. |
Demonstrate little understanding of the concept of pointers. Have great difficulty in using pointers in indirect addressing and dynamic memory allocation even in simple scenarios. |
4. Write objectoriented programs in C++ with object creation,destruction, member variables and functions, inheritance, polymorphism, and templates. |
Demonstrates a comprehensive grasp of objectoriented concepts and fully demonstrates how to write object-oriented programs in C++. |
Demonstrates a thorough grasp of objectoriented concepts and mostly demonstrates how to write object-oriented programs in C++. |
Demonstrates a basic grasp of object-oriented concepts and barely able to demonstrate how to write objectoriented programs in C++. |
Demonstrates a lack of grasp of objectoriented concepts and fail to demonstrate how to write objectoriented programs in C++. |
5. Analyze a program and provide simple solutions with OOP. |
Demonstrates an exemplary ability to analyze programs written in OOP. |
Demonstrates a proficient ability to analyze programs written in OOP. |
Demonstrates a developing abilityto analyze programs written in OOP. |
Demonstrates deficiencies in their ability to analyze programs written in OOP. |
6. Write basic algorithms associated with data structures such as stacks, queues, lists, trees, and hashes. |
Demonstrates ability to fully implement algorithms with common data structures. |
Demonstrates sufficient ability to implement algorithms with common data structures. |
Demonstrates preliminary understanding of how to write algorithms with common data structures. |
Demonstrates a lack of understanding of how to write algorithms with common data structures. |
7. Define binary tree and search tree and describe how they are used to solve problems. |
Demonstrates complete understanding of binary tree / binary search tree and is able to accurately describe how they are used to solve problems. |
Demonstrates sufficient understanding of binary tree / binary search tree and successfully describe how they are used to solve problems. |
Demonstrates preliminary understanding of binary tree / binary search tree and barely able to describe how they are used to solve problems. |
Demonstrates deficient understanding of binary tree / binary search tree and unable to describe how they are used tosolve problems. |
8. Develop a large program using separate compilation, good OOP design, and code reuse. |
Demonstrates complete comprehension of OOP concepts and techniques for the development of large programs. |
Demonstrates basic comprehension of OOP concepts and techniques for the development of large programs. |
Demonstrates minimal comprehension of OOP concepts and techniques for the development of large programs. |
Demonstrates no comprehension of OOP concepts and techniques for the development of large programs. |