EECS 231 - Advanced Programming for Computer Engineers
CATALOG DESCRIPTION: Object-oriented programming, classes and data hiding, dynamic object construction and destruction, derived classes and inheritance, virtual functions; file processing; introduction to UNIX; testing and test generation.
- H. M. Deitel and P. J. Deitel, C++: How to Program , Prentice Hall, 5 th edition, 2005;
- Robbins, Linux—Programming by Example: The Fundamentals , Prentice Hall, 2004
COURSE COORDINATOR: Larry Henschen
COURSE GOALS: To teach object-oriented programming with applications to computer engineering. To teach the concepts of classes, inheritance, and libraries. To teach issues related to good programming, reuse, testing/test generation, and problem solving in general. To introduce UNIX systems and developing/debugging C/C++ programs on UNIX systems.
PREREQUISITES: EECS 110 or knowledge of any programming language
PREREQUISITES BY TOPIC:
Week 1 : Introduction to software engineering. Basic data types, variables, computer arithmetic, expressions, parentheses. Basic I/O – cout, cin. Flow of control – sequential, test-and-branch, iteration. Boolean expressions. Software engineering revisited - testing and correctness, comments, assert().
Lab demonstrations: Logging into Wilkinson lab, make files, the GCC/C++
Compiler and separate compilation
Week 2 : Arrays, pointers, and strings. Functions: call by value and call by reference, references vs. pointers. Function overloading
Lab demonstrations: The GDB debugger (including –Wall, -Werror, etc.),
the Emacs editor
Week 3 : Introduction to classes. Structures and classes, data hiding and encapsulation. Public and private members, constructors, unions. Interface vs. implementation.
Lab demonstrations: Unix shell, Unix file system and directories
Week 4 : Classes and Abstract Data Types (ADTs), interface and implementation files.
Lab demonstrations: More Unix directories, security models (users, groups, permissions)
Week 5 : Class destructors and copy constructors, the = operator, deep versus shallow copies, C++ operator overloading.
Lab demonstrations: Good programming practice--assert and use of utility functions (perror)
Week 6 : C++ operator overloading (cin, cout and arithmetic operators). Inheritance and derived classes, is-a hierarchies and composition of classes. Virtual functions and polymorphism.
Week 7 : Virtual functions and polymorphism. Linked list processing: stacks and queues, trees and recursion..
Week 8 : Template functions and classes. Standard Template Library: iterators and containers, strings revisited. Exception-handling basics
Week 9 : Advanced Topics: C versus C++: exception-handling basics, static and dynamic type casting, C-style I/O. UNIX style programming – argv/argc. The Unix file system
Week 10 : Unix : file redirection and piping, process management
LABORATORY: Programming assignments will be done on UNIX systems.
Programming and Written Homework Assignments - 30%
Midterm - 35%
Final - 35%
COURSE OBJECTIVES: When a student completes this course, s/he should be able to:
- Formulate a solution, in a systematic way, to an open ended problem in engineering and science
- Design efficient algorithms for solving a problem.
- Translate the solution into a program (e.g., C++), making use of concepts in object-oriented programming to facilitate the translation process.
- Effectively test and evaluate the program and interpret the final result. Effectively modify the final result if necessary.
- Use the UNIX system and UNIX tools.
ABET CONTENT CATEGORY: 100% Engineering (Design component).