COMP 1003: Foundations of Computing Systems
This course is required for all computer science MAJ majors and MIN minors.
This course is a follow up to a course in computer programming and would be of interest to students who want to pursue a degree in computer science or to those who are interested in learning foundational ideas in the science of computing.
| Lab | In addition to classes, this course has one structured laboratory session per week. |
Prerequisites: COMP 1001, and COMP 1002 or Mathematics 2320
Availability: This course is usually offered on-campus in Fall and Winter semesters.
Course Objectives
The objective of this course is to provide an in-depth introduction to object-oriented programming in Python followed by an introduction to formal languages, automata, computability and intractability.
Representative Workload
- Assignments 10%
- Lab Quizzes 15%
- Midterm Exam 30%
- Final Exam 45%
Representative Course Outline
- Objects and Classes (15 hours)
- Introduction to objects and classes
- Designing an implementing classes
- Using objects
- Testing and Assertions
- Operator Overloading
- Inheritance and Polymorphism
- Operator overloading
- Sets and Dictionaries
- Theory of Computation (15 hours)
- Formal languages:
- Alphabets
- Strings
- Languages as a sets of strings or sequences
- Regular Expressions
- Automata
- Deterministic Finite Automata and Non-deterministic Finite Automata
- Converting regular expressions to NFA, subset construction of NFA to DFA
- Context Free Grammars and Pushdown Automata
- Turing Machines and Context Sensitive Grammars
- Computability
- Halting Problem, Universal Turing Machine
- Reductions and diagonlization
- Intractability
- NP hardness, NP completeness, and languages outside NP
Notes
- This course requires programming in Python.