COMP 2012H Honors Object-Oriented Programming and Data Structures

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 programming
2. Fundamentals of C++: data types, variables, operators
3. Flow controls
4. Arrays
5. Functions, scope, and recursion
6. File I/O
7. Pointers
8. lvalue references
9. Structures
10. Class, object construction, initialization, and destruction
11. Separate compilation and makefile
12. Inheritance and polymorphism
13. Generic programming
14. Standard Template Library (STL)
15. Namespace
16. Static data members and member functions
17. rvalue references and move semantics
18. Linked lists
19. Stack and queue
20. Binary search tree
21. AVL tree
22. 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.

发表评论

电子邮件地址不会被公开。 必填项已用*标注