Ryan Knowles wrote the first version of this website. Thanks, Ryan.

 

Specfication of Software Systems


I took this class from Charlie Crowley at UNM. He spent a lot of time going through the patterns in the Gang of Four book, and occasionally going off in other directions synthesizing his own wide experience. I learned some very interesting general rules from Charlie.

I like writing about things as I learn about them. I sent these notes out to a bunch of friends as I was taking the class, trying to both share my knowledge, and to implant it more firmly in my mind.

1. Introduction. Why do we need design patterns?

     Troxel Ballou's comments

          My Response

2. Composite (163)

3. Decorator and Strategy.

4. Abstract Factory

5. Factory

6. Bridge

     Steve Bates' comments.

          My response

               Steve's rebuttal

               And an amplification

7. Adapter

8. Template

9. Indirection, hooks, caching, and hinting. From Charlie Crowley's draft book.

10. Observer.

     Steve's comments about a related problem.

11. Model / View / Controller (From "A System of Patterns")

     Steve on MVC implementation

12. Flyweight

     Steve on implications of Unicode instead of ASCII on use of Flyweight

13. Interpreter

14. Singleton

15. Proxy

16. Iterator

Asides. These are interesting points, but didn't relate to a specific design pattern. So, I put them in separate threads.

 

1. Operating systems take physical things and virtualizes them.

     Steve Bates' response.

          I always have the last word. My rebuttal.

2. CRC cards. (Class, Responsibility, Collaborators)

     Steve: Paper? You're advocating using PAPER???

          Pat: Sure am!

               Steve: I should have added a :-)

3. Forces. "Forces shape the solution", Christopher Alexander.

     Steve: Are the forces in software as influential as those in architecture?

          Pat: Dunno, but here are some thoughts.

4. Return Values for setting functions.

     Steve's rebuttal.

5. Text editors, and interesting ideas on how to implement them.