Difference between revisions of "CR: COMP 2404 Learning Objectives"

From Soma-notes
Jump to navigation Jump to search
 
(11 intermediate revisions by one other user not shown)
Line 37: Line 37:
** stream and file I/O
** stream and file I/O
** signal handling
** signal handling
** multiprocess
** multiprocess programming
** inter-process communications (sockets, RPC)
** inter-process communications (sockets, RPC)


Line 44: Line 44:
=Learning Objectives=
=Learning Objectives=


Objectives for the whole course
* Gain experience in design techniques for small to medium size object-oriented programming assignments


* Gain proficiency with basic and intermediate-level C++ programming
* Identify standard design patterns and programming idioms in existing code.


=Topics=
=Topics=


==Topic 1==
== Software Design Techniques ==
* Able to identify the required objects
* Able to apply concepts of encapsulation to organize the required objects
* Able to identify opportunities for code reuse and implement them
 
== Basics of C/C++ ==
* Understand fundamental programming constructs (review):
** variables (scope, storage class)
** program memory organization (call stack, heap)
** memory management (pointers, memory allocation)
* Able to use references, and understand difference between references and pointers
 
== C++ Basic Classes and Objects ==
* Understand and be able to construct basic class definitions, using the following:
** data members, member functions
** encapsulation using access specifiers, constant members
** constructors, destructors
** friend functions, friend classes
 
* Understand and be able to use dynamic memory management


Learning objectives for topic 1
* Inheritance
** able to setup appropriate inheritance hierarchy
** understand how to use:
*** types of inheritance
*** multiple inheritance


==Topic 2==
* Able to organize code with multiple classes
** separating class definition and interface from implementation


Learning objectives for topic 2
== C++ Advanced Features ==
* Overloading
** understand how to overload functions and operators
** able to overload different types of operators
*** stream insertion/extraction
*** unary, binary
*** increment/decrement, prefix/postfix
** understand how to cascade function calls and recognize when it is appropriate
* Templates
** understand reason for generic programming
** able to define function templates, class templates
* Polymorphism
** understand use of virtual, pure virtual functions
** understand difference between static and dynamic binding, and how to implement each one
** know how to use RTTI functionality, especially dynamic casting
* STL
** understand the basics of containers, iterators, algorithms, and how to use them
* Files and streams
** understand basic operations
** recognize basic overloaded operators on streams
* Exception handling
** understand when and how to use exception handling
** know how to define multiple catch blocks
** understand how to gracefully unwind the function call stack when an exception is thrown

Latest revision as of 11:56, 13 April 2011

Calendar Description

In-depth study of the language C++ from a software engineering perspective, with emphasis on features supporting the development of large efficient and reusable systems. Topics include: encapsulation, templates, references, constructors and destructors, overloading, memory management, exception handling, and the standard template library.

Assumed Background

  • Able to understand an assignment description and identify the objects that are required
  • Understand and apply basic programming conventions:
    • proper variable names
    • appropriate commenting
    • indentation using established style
  • Understand and apply basic programming constructs:
    • Variables
      • primitive data types
      • scope
      • storage class
    • Functions
      • pass-by-value
      • pass-by-reference
    • Program memory organization
      • function call stack, contents of stack frame
      • heap
      • data segment
      • code segment
    • Memory management
      • static vs. dynamic memory allocation
      • pointers, double pointers
      • garbage collection
  • Familiarity with shell environment
  • Able to build programs across multiple header and source files
  • Able to program with system calls:
    • stream and file I/O
    • signal handling
    • multiprocess programming
    • inter-process communications (sockets, RPC)
  • Able to research and understand standard library function and system call documentation

Learning Objectives

  • Gain experience in design techniques for small to medium size object-oriented programming assignments
  • Gain proficiency with basic and intermediate-level C++ programming
  • Identify standard design patterns and programming idioms in existing code.

Topics

Software Design Techniques

  • Able to identify the required objects
  • Able to apply concepts of encapsulation to organize the required objects
  • Able to identify opportunities for code reuse and implement them

Basics of C/C++

  • Understand fundamental programming constructs (review):
    • variables (scope, storage class)
    • program memory organization (call stack, heap)
    • memory management (pointers, memory allocation)
  • Able to use references, and understand difference between references and pointers

C++ Basic Classes and Objects

  • Understand and be able to construct basic class definitions, using the following:
    • data members, member functions
    • encapsulation using access specifiers, constant members
    • constructors, destructors
    • friend functions, friend classes
  • Understand and be able to use dynamic memory management
  • Inheritance
    • able to setup appropriate inheritance hierarchy
    • understand how to use:
      • types of inheritance
      • multiple inheritance
  • Able to organize code with multiple classes
    • separating class definition and interface from implementation

C++ Advanced Features

  • Overloading
    • understand how to overload functions and operators
    • able to overload different types of operators
      • stream insertion/extraction
      • unary, binary
      • increment/decrement, prefix/postfix
    • understand how to cascade function calls and recognize when it is appropriate
  • Templates
    • understand reason for generic programming
    • able to define function templates, class templates
  • Polymorphism
    • understand use of virtual, pure virtual functions
    • understand difference between static and dynamic binding, and how to implement each one
    • know how to use RTTI functionality, especially dynamic casting
  • STL
    • understand the basics of containers, iterators, algorithms, and how to use them
  • Files and streams
    • understand basic operations
    • recognize basic overloaded operators on streams
  • Exception handling
    • understand when and how to use exception handling
    • know how to define multiple catch blocks
    • understand how to gracefully unwind the function call stack when an exception is thrown