CMPT 135-3 Introduction to Computer Programming II
A second course in systems-oriented programming and computing science that builds upon the foundation set in CMPT 130 using a systems-oriented language such as C or C++. Topics: a review of the basic elements of programming; introduction to object-oriented programming (OOP); techniques for designing and testing programs; use and implementation of elementary data structures and algorithms; introduction to embedded systems programming. Prerequisite: REQ-CMPT 130 Students with credit for CMPT 125, 126, or 128 may not take this course for further credit.
CMPT 213-3 Object Oriented Design in Java
An introduction to object oriented design using Java. The Java programming language is introduced, with an emphasis on its advanced features. The course covers the building blocks of object oriented design including inheritance, polymorphism, interfaces and abstract classes. A number of object oriented design patterns are presented, such as observer, iterator, and singleton. The course also teaches best-practices in code construction. It includes a basic introduction to programming event driven graphical user interfaces. Prerequisite: CMPT 225: Data Structures and Programming. Students with credit for CMPT 212 cannot take this course for further credit.
CMPT 225-3 Data Structures and Programming
Introduction to a variety of practical and important data structures and methods for implementation and for experimental and analytical evaluation. Topics include: stacks, queues and lists; search trees; hash tables and algorithms; efficient sorting; object-oriented programming; time and space efficiency analysis; and experimental evaluation. Prerequisite: MACM 101 and one of CMPT 125, 126 or 128; or CMPT 128 and approval as a Biomedical Engineering Major. Quantitative.
CMPT 276-3 Introduction to Software Engineering
An overview of various techniques used for software development and software project management. Major tasks and phases in modern software development, including requirements, analysis, documentation, design, implementation, testing, installation, support, and maintenance. Project management issues are also introduced. Prerequisite: One W course, CMPT 225, MACM 101, MATH 151 (or MATH 150). MATH 154/157 with at least B+ may substitute for MATH 151 (or MATH 150). Cannot receive credit for both CMPT 275 and CMPT 276.
CMPT 373-3 Software Development Methods
Survey of modern software development methodology. Several software development process models will be examined, as will the general principles behind such models. Provides experience with different programming paradigms and their advantages and disadvantages during software development. Prerequisite: CMPT 276 or 275.
CMPT 379-3 Principles of Compiler Design
This course covers the key components of a compiler for a high level programming language. Topics include lexical analysis, parsing, type checking, code generation and optimization. Students will work in teams to design and implement an actual compiler making use of tools such as lex and yacc. Prerequisite: MACM 201, CMPT 150 and 225.
CMPT 473-3 Software Quality Assurance
Factors in software quality include functionality, reliability, usability, efficiency, maintainability, and portability. Techniques for assessing the quality of software with respect to such factors, and methods for improving the quality of both software products and software development processes. Prerequisite: CMPT 373.
Elective Courses - Choose One:
CMPT 375-3 Mathematical Foundations of Software Technology
Abstraction principles and formalization techniques for modeling software systems in early design phases. Design is a creative activity calling for abstract models that facilitate reasoning about the key system attributes to ensure that these attributes are properly established prior to actually building a system. The focus is on specification and validation techniques rather than on formal verification. Prerequisite: MACM 101, 201. Recommended: CMPT 275.
CMPT 383-3 Comparative Programming Languages
Various concepts and principles underlying the design and use of modern programming languages are considered in the context of procedural, object-oriented, functional and logic programming languages. Topics include data and control structuring constructs, facilities for modularity and data abstraction, polymorphism, syntax, and formal semantics. Prerequisite: CMPT 225, MACM 101.
CMPT 384-3 Symbolic Computing
This course considers modelling and programming techniques appropriate for symbolic data domains such as mathematical expressions, logical formulas, grammars and programming languages. Topics include recursive and functional programming style, grammar-based data abstraction, simplification and reduction transformations, conversions to canonical form, environment data structures and interpreters, metaprogramming, pattern matching and theorem proving. Prerequisite: CMPT 225; MACM 101.
CMPT 474-3 Web Systems Architecture
Web service based systems are fundamentally different from traditional software systems. The conceptual and methodological differences between a standard software development process and the development of a web service based information system. The technology involved during the construction of their own web service based application in an extensive project. Prerequisite: CMPT 371.
CMPT 477-3 Introduction to Formal Verification
Introduces, at an accessible level, a formal framework for symbolic model checking, one of the most important verification methods. The techniques are illustrated with examples of verification of reactive systems and communication protocols. Students learn to work with a model checking tool. Prerequisite: CMPT 275 or 276.