|
Computer History Museum visit on Saturday, May 12, at 12:30 PM. Experience the restored and fully operational IBM 1401 computer system, the life-size working model of the Babbage Difference Engine, and the Revolution exhibits. Meet in the main lobby of the museum. |
Student internship positions currently open for the System F6 Program at the NASA Ames Research Center.
| # | Date | Due | Assignment |
|---|---|---|---|
| 1 | Feb 6 | Feb 15 |
Functional Specification
Use case form |
| 2 | Feb 15 | Feb 24 | Design Specification |
| 3 | Feb 27 | Mar 9 | First version of Rock-Paper-Scissors game |
| 4 | Mar 9 | Apr 2 | Smart computer throw calculator |
| 5 | Apr 2 | Apr 20 | Graphical User Interface |
| 6 | Apr 30 | May 14 | UML Class Diagram and Design Pattern Uses |
| Date | Content |
|---|---|
| Jan 25 | Slides: Introduction; grading; object-oriented analysis and design; journey to good design; iterative process; Rick's Guitars example; encapsulation; refactoring |
| Jan 30 | Slides: More instruments; abstract classes; design that doesn't scale well; revisiting a design |
| Feb 1 | Slides: Analysis; requirements: sources and types, stated and implied; automatic dog door example; use cases; functional specification |
| Feb 6 |
Slides:
Waterfall model; agile software development; eliciting
requirements; use cases; UML use case diagram; use case
description; Assignment #1; where do classes come from;
categories of classes; class responsibilities; class
relationships: dependency, aggregation, inheritance
Use case description template which you can use for Assignment #1 |
| Feb 8 | Slides: (Thanks to Ahmad Yazdankhah) Recap: analysis, design, implementation; CRC technique; UML diagrams: class, sequence, state; javadoc utility; UML diagramming tools |
| Feb 13 | Slides: Teams; examples: textual analysis example, CRC cards, sequence diagram, package and class diagrams, voice mail system |
| Feb 15 | Slides: Updated teams; Assignment #2; voice mail system case study |
| Feb 20 | Slides: Improvements to the example voice mail system; Java Date and Calendar classes; designing a Day class; coding to the interface; factory design pattern; accessors and mutators; immutable classes; sharing references to mutable objects; final fields |
| Feb 22 | Slides: Review Assignment #1; Accessors and mutators; side effects; good interfaces: cohesion, completeness, clarity, consistency |
| Feb 27 | Slides: Assignment #3; programming by contract; preconditions; queue as a circular array; assertions; postconditions; class invariants; interface invariants and implementation invariants |
| Feb 29 | Slides: Unit tests; JUnit; version control systems: local, centralized, distributed; Git; GitHub |
| Mar 5 | Slides: Review Assignment #2; design patterns; factory method design pattern; code to the interface; class hierarchy puzzle; "is a" with subclasses and interfaces; instanceof operator; Icon interface type; interface methods and variables; objects and interfaces |
| Mar 7 | Slides: Feed our pets; marker interfaces; polymorphism; comparable interface; comparator interface; anonymous classes |
| Mar 12 | Slides: Assignment #4; Java Foundation Classes (JFC, Swing); JFrame; JButton; JTextField; FlowLayout; ActionListener interface; Inversion of Control; Timer; timer actions; graphics context; Shape interface; drawing methods; Java interface as a contract |
| Mar 14 | Slides: Assignment #4 again; class and interface design for animation |
| Mar 19 | Slides: Review for the midterm |
| Apr 2 | Slides: Midterm solution; Assignment #5; NetBeans and Swing |
| Apr 4 | Slides: Layout managers; Strategy Design Pattern; Model-View-Controller; Observer Design Pattern; compound objects; Composite Design Pattern; Swing component class hierarchy; team UML class diagram exercise |
| Apr 9 | Slides: Iterator design pattern (linked lists); decorator design pattern (scrollbars, I/O stream); design patterns usage example |
| Apr 11 | Slides: Original "Gang of Four" design patterns; mouse events; mouse adapter |
| Apr 16 | Slides: Computer History Museum; inheritance; superclasses and subclasses; class hierarchies; Liskov Substitution Principle; invoking superclass methods and contructors; invoking a class's own constructor; superclass method preconditions and postconditions; favor composition over inheritance |
| Apr 18 | Slides: Cooking; creativity; composition over inheritance; superclasses and interfaces; abstract class; template method design pattern; refactoring; multiple inheritance; geometric shapes class hierarchy; exceptions class hierarchy; catching exceptions |
| Apr 23 | Slides: (Thanks to Ahmad Yazdankhah) What is a type; types Java supports; what is a subtype; array type; type inquiry; Object class: toString(), equals(), clone(), serialization |
| Apr 25 | Slides: (Thanks to Ahmad Yazdankhah) Generic types; generic type definition; generic methods; type erasure; type bounds and wildcards; reflection; invoking methods |
| Apr 30 | Slides: JUnit magic; reflection; metadata descriptor classes: Class, Field, Constructor, Array; method descriptor; invoking a method; inspecting an object; frameworks; application framework; applet framework; Applet; Assignment #6 |
| May 2 | Slides: Java collections framework; Collections class; Collection interface; AbstractCollection class; Iterator and Iterable interfaces; adding a new collection class; Set, List, and ListIterator interfaces; lists and binary searches; RandomAccess interface; views |
| May 7 | Slides: Multithreaded programming: advantages, disadvantages, multicore, GUI; creating threads; Runnable interface; thread states; activating and terminating threads; thread synchronization; race condition; locks; lock conditions; thread-safe adding to and removing from a bounded queue; multithreaded programming is hard! |
| May 9 | Slides: Race condition defined; thread-safe defined; thread-safe collections; object locks; the synchronized keyword; animation of merge sort |
| May 14 | Slides: Postmortem report; review for the final examination |
First goal: You'll learn to develop well-designed software applications that do what they're supposed to do, use proven object-oriented techniques, and that are flexible, reliable, and maintainable. You'll become better programmers .
Good designs don't just happen. Each one is a destination, one that always requires a journey to reach. Every programmer, whether beginner or experienced, must take this trip for each and every project. An inexperienced programmer may meander, take the wrong paths, and maybe even backtrack before reaching that destination. But with practice and knowledge of design patterns and good object-oriented tools and techniques, subsequent journeys will become shorter.
Second goal: You'll learn critical job skills that employers look for in new college hires. You'll work together in small project teams and gain experience on how to cooperate and coordinate your joint efforts to design, develop, and test applications that each consists of over a dozen Java classes. You'll employ modern industry-standard software engineering practices. Each team will take its separate journey to Good Design.
|
Department policy is to enforce all course prerequisites strictly. |
|
Object-Oriented Design & Patterns, 2nd ed. Cay Horstmann Wiley Publishing, Inc., 2006 ISBN: 978-0471744870 |
|
The Object-Oriented Thought Process, 3rd ed. Matt Weisfeld Addison-Wesley Professional, 2008 ISBN: 978-0672330162 |
|
Head First Object-Oriented Analysis & Design Brett D. McLaughlin, et al. O'Reilly Media, 2006 ISBN: 978-0596008673 |
As a Senior Computer Scientist at the NASA Ames Research Center, I am designing, developing, and leading a software lab for the System F6 (Future, Fast, Flexible, Fractionated, Free-Flying) program that will demonstrate the feasibility of distributing functionality over a cluster of satellites, as opposed to using traditional monolithic multi-function satellites. On an earlier mission, I designed and led the development of the middleware for a key information management system for NASA's Mars Exploration Rover (MER) mission. As a Research Staff Member at the IBM Almaden Research Center in San Jose, I implemented a software platform that integrates multiple heterogeneous simulation models in order to help solve the nation's obesity problem. I was the Enterprise Software Strategist at the Lawrence Livermore National Laboratory for a major laser-based fusion energy project, the National Ignition Facility (NIF), where I helped design and develop a scientific workflow system to manage the data generated by the laser firings.
I have degrees in the mathematical sciences and in computer science from Stanford University. I've written books on compiler writing, software engineering, and numerical computation, and I contributed a chapter to the book Beautiful Code which won the Jolt Award. I find designing and developing software such as compilers and enterprise systems to be fun and challenging. So I'm the kind of geek nobody wants to talk to at parties. My one redeeming feature is that I have two cute cats.
| Past courses I've taught at SJSU |
|---|
|
CS 153-01/SE 153: Concepts of
Compiler Design
CS 160: Software Engineering CS 185C-01/CS 286-03: The History of Computing Speaker series: The History of Computing |