Engineering Software Design

(3-0-3-4)

CMPE Degree: This course is Required for the CMPE degree.

EE Degree: This course is Elective for the EE degree.

Lab Hours: 0 supervised lab hours and 3 unsupervised lab hours.

Course Coordinator: Jeffrey A Davis

Prerequisites: ECE 2020/2030 [min C] and ECE 2025/2026* [ min C]

Corequisites: None.

Catalog Description

Object-oriented software methods for engineering applications. Numerical analysis methods; simulations and graphical presentation of simulation results; analysis of numerical precision. Programming projects.

Course Outcomes

  1. Write a syntactically and semantically correct program using the object-oriented programming language chosen, such as C++.
  2. Define and develop a computer program to implement specific tasks associated with a well-defined engineering application.
  3. Choose the appropriate data structures to maintain the system state, and explain why the selected one is appropriate.
  4. Choose appropriate algorithms to maintain the progression of the system state, and explain why the selected algorithm is appropriate.
  5. Implement those data structures and algorithms using an object-oriented programming language such as C++.
  6. Use the developed program to analyze performance and behavior of the engineering application being studied.
  7. Create a class hierarchy of software objects with public inheritance and virtual functions to enable the use of polymorphism.
  8. Create class templates and function templates to be used in a generic programming style.
  9. Analyze the numerical error in floating-point calculations of linear equations of at least one multiplication and one addition.
  10. Use commonly available tools for software development, source code maintenance, and debugging.
  11. Implement their program using multiple threads in a shared memory, multiprocessor environment when appropriate.
  12. Recognize when and how an algorithm will benefit from parallelization.

Student Outcomes

In the parentheses for each Student Outcome:
"P" for primary indicates the outcome is a major focus of the entire course.
“M” for moderate indicates the outcome is the focus of at least one component of the course, but not majority of course material.
“LN” for “little to none” indicates that the course does not contribute significantly to this outcome.

1. ( P ) An ability to identify, formulate, and solve complex engineering problems by applying principles of engineering, science, and mathematics

2. ( M ) An ability to apply engineering design to produce solutions that meet specified needs with consideration of public health, safety, and welfare, as well as global, cultural, social, environmental, and economic factors

3. ( LN ) An ability to communicate effectively with a range of audiences

4. ( LN ) An ability to recognize ethical and professional responsibilities in engineering situations and make informed judgments, which must consider the impact of engineering solutions in global, economic, environmental, and societal contexts

5. ( LN ) An ability to function effectively on a team whose members together provide leadership, create a collaborative and inclusive environment, establish goals, plan tasks, and meet objectives

6. ( P ) An ability to develop and conduct appropriate experimentation, analyze and interpret data, and use engineering judgment to draw conclusions

7. ( M ) An ability to acquire and apply new knowledge as needed, using appropriate learning strategies.

Strategic Performance Indicators (SPIs)

Not Applicable

Course Objectives

  1. Identify, formulate, and solve complex engineering problems by applying principles of eng/sci/math. (primary focus)
  2. Apply eng design to produce solutions to needs with public health/safety/welfare, global/cultural/economic factors. ( moderate focus)
  3. Acquire and apply new knowledge as needed, using appropriate learning strategies. (moderate focus)

Topical Outline

Required Topics:
1.Review of C basic syntax, compilation, linking, libraries, etc.
2.Defining and implementing classes, constructors, destructors etc.
3.Member functions, virtual functions, pure virtual functions
4.Argument passing variations (by value, by pointer, by reference)
5.Managing dynamic memory (new, delete)
6.Inheritance and subclassing
7.Using common tools, gdb, make, gprof, valgrind, emacs etc.
8.Floating Point precision and numerical analysis
9.Introduction to Templates, including data structures and algorithms in the Standard Template Library
10.Parallel processing and concurrency
Optional Topics:
11.Exceptions
12.Smart Pointers

Typical Programming Projects:
1.One dimensional and two dimensional Fast Fourier Transforms, using the Cooley-Tukey algorithm
2.Matrix multiplication using dynamic memory allocation for arbitrary sized matrices, and efficient representation for sparse matrices.
3.Single variable numerical methods to solve first-order differential equations, using forward Euler, backward Euler, and Crank-Nicolson methods
4.Embedded programming projects using sensor feedback, interrupt driven I/O, PWM control of external devices, and graphical output
5. Optimal (and non-optimal) search for solving problems with multiple solutions, including heuristic algorithms for approaching NP-complete problems