80 likes | 228 Views
What is EECS 280 ?. An Introduction to Programming and Introductory Data Structures at the University of Michigan. EECS 280 Manifesto. Mathematics , especially as used by physics, is the formalism we use to describe “what is” The physical world is modeled by equations.
E N D
What is EECS 280? An Introduction to Programming and Introductory Data Structures at the University of Michigan
EECS280 Manifesto • Mathematics, especially as used by physics, is the formalismwe use to describe “what is” • The physical world is modeled by equations. • Solutions to these equations give us insight into the world. • Classical mathematics, however, does not say anything about how these processes unfold. For that, we need something else… • Computer Science is the formalism we use to describe “how to” • The computer science world uses algorithms to do this. • Algorithm: An abstract sequence of actions composed to solve a problem. • Program: A concrete set of program statements which implement some algorithm.
What EECS280 is about… • Procedural Abstraction: specification, invariants (dynamic) • Data Abstraction: specification, invariants (static) • Dynamic Resource Management • All this will be applied to programs that a single programmer might be expected to understand.
Why EECS 280 is interesting… • Complexity is all around us, and resources are always limited. • Specification, invariants, abstraction, and dynamic resource management turn out to be surprisingly useful! • Programs are composed of pure “thought-stuff” that result in real, tangible products – it’s magic!
Why EECS 280 isn’t about programming… • This course is more about computer science than computer programming in C++. • There are many dark corners of the language we will not even touch. However, we need some concrete platform in which to realize these ideas. • (Analogy) Designing/Implementing a program compared to building a house: • Given the right tools, anyone can build something simple. • However, you won’t be able to build anything complex unless you understand the core principles behind larger projects.
Class Projects • Five projects covering the areas: • Basic selection/iteration • Recursion • Aggregate Types • Abstract Data Types, Interfaces, and Inheritance • Templated Container Classes
Course Goals • Take a problem and consider various possible approaches for solving it • Select an approach—or algorithm—that provides for a simple, clean, well-structured solution • Convert an algorithm into C++ code, using good design and style • Test and debug a program using rigorous techniques
Course Goals • Understand the concepts of top-down design, data encapsulation, information hiding, and procedural/data abstraction • Design, implement and use complete classes, including constructors, destructors, and operator overloading • Implement dynamic data structures for stacks, queues and lists • Be able to quickly design, implement, test and debug a large scale project independently (1000+ lines of code).