course_outline
Differences
This shows you the differences between two versions of the page.
Both sides previous revisionPrevious revisionNext revision | Previous revision | ||
course_outline [2013/03/24 18:43] – jonathan | course_outline [2013/04/14 02:01] (current) – jonathan | ||
---|---|---|---|
Line 7: | Line 7: | ||
**Learning Outcomes**: | **Learning Outcomes**: | ||
- | Understand | + | Software products are programs developed by one team to be used and maintained by others. The original development team may not be around to maintain the product. Students are thus expected to understand |
- Correct | - Correct | ||
- Efficient | - Efficient | ||
- Maintainable | - Maintainable | ||
- | Software cannot be **correct** without a **specification**. So we need to master skills that allow us to write a specification, | + | Software cannot be **correct** without a **specification**. So we need to master skills that allow us to write a specification, |
For software to be efficient we need to understand the appropriate use of algorithms and data structures. Loop variants and invariants help to ensure that loops terminate, bound their complexity, and ensure that they terminate correctly. | For software to be efficient we need to understand the appropriate use of algorithms and data structures. Loop variants and invariants help to ensure that loops terminate, bound their complexity, and ensure that they terminate correctly. | ||
- | Maintaining code is often the main cost of producing a software product, i.e. a product that will be used over a period of time by our customers. A disorganized essay is not easy to read. Likewise disorganized code will be hard to maintain, especially where the original development team is no longer around. So how do we develop well-designed code? This is where modularity, good ADTs/ | + | Maintaining code is often the main cost of producing a software product, i.e. a product that will be used over a period of time by our customers. A disorganized essay is not easy to read. Likewise disorganized code will be hard to maintain, especially where the original development team is no longer around. So how do we develop well-designed code? This is where modularity, good ADTs/ |
====== Basic concepts ====== | ====== Basic concepts ====== | ||
Line 71: | Line 71: | ||
* Decorator Pattern | * Decorator Pattern | ||
* Visitor Pattern | * Visitor Pattern | ||
- | * Some others | + | * Composite, Adapter, and Facade |
+ | |||
+ | We stress information hiding (as in famous paper by Parnas) and the criteria by which to decompose a system into modules. What are the features? Which features belong together coherently in a module (class)? How are modules related to each other (client supplier and inheritance relationships)? | ||
| | ||
Line 82: | Line 84: | ||
| | ||
- | See slides and OOSC2 | + | See slides and OOSC2. How to make software products robust. |
+ | |||
+ | | ||
+ | See the Osmonde curve and the slides. |
course_outline.1364150627.txt.gz · Last modified: 2013/03/24 18:43 by jonathan