meeting -*- Outline -*- needed: course text books tell them to read: the Preface and Chapters 1-7 (esp. Ch. 1-3 and 7) of Larman's book (Applying UML and Patterns) and if they aren't that familiar with OOP, to read: chapters 1-2 of Reil's book, and possibly others mentioned in the course syllabus * The course itself ** What is a analysis and design? ------------------------------------------ ANALYSIS def: *analysis* is investigation of a problem def: *requirements analysis* is investigation of requirements for a system. I.e., what is the right system to build? Requirements can be codified in use cases. Example use case (Larman, p. 8) Play a Dice Game: A player picks up and rolls the two dice. If the dice face value total seven, they win; otherwise they lose. ------------------------------------------ There's nothing OO about this, which isn't bad. So we can distinguish ... ------------------------------------------ OBJECT-ORIENTED (OO) ANALYSIS Describes the domain in terms of objects. Identifies noteworthy: - concepts, - attributes, - associations |----------| |-----------| | Player | 1 Rolls 2 | Die | |----------|-----------|-----------| | name | | faceValue | |----------| |-----------| | | | 1 | | | | Plays | | | | 1 | |------------| | | DiceGame | Includes | |------------|--------------- | | |------------| ------------------------------------------ The above are supposed to describe "real-world" concepts, not software artifacts ------------------------------------------ DESIGN def: A *design* is a conceptual solution (a plan of how to solve the problem) An OO design defines classes of software objects and how they collaborate to fulfill the requirements. Examples: Class diagram for the dice game |------------| |---------------------| | DiceGame | | Die | |------------|1 2|---------------------| | die1 : Die |---->| faceValue : int | | die2 : Die | |---------------------| |------------| | getFaceValue(): int | | play() | | roll() | |------------| |---------------------| ----------------------------------------- These describe classes in the software, not the real world don't explain all the notation, that's not the point, the point is the distinction between analysis and design ** Overview ------------------------------------------ THE COURSE IN A NUTSHELL We learn OO techniques for iterative analysis and design (and development) by analyzing and designing a system in several passes. Main skills: - requirements analysis - responsibility assignment How? - team projects, 3-4 people per team - several iterations of same project The class meeting: - 2 "lectures" per week - 1 team meeting time per week ------------------------------------------ ** objectives In one sentence, the main objective is that you will be able to create and justify object-oriented designs that accomplish their goals and that are robust and evolvable. ------------------------------------------ Com S 362 ESSENTIAL OBJECTIVES You should be able to: 1. Analyze, design, and build object-oriented systems. 2. Explain and justify designs based on design principles, patterns, and heuristics. 3. Evaluate the quality of an analysis or design, and be able to explain how to improve it. 4. Write object-oriented code to correctly implement a design. Reading and writing UML is a necessary skill ------------------------------------------ Why these objectives? - analysis, design, and construction are essential skills in all computing work - knowing reasons for good designs helps make good designs more quickly - need to be able to criticize and improve designs, because that's how we can improve our work and those of others - writing code is necessary feedback - UML is pretty standard nowadays reasons and motivations for OO will be presented next time ** syllabus see the web, has readings and ties to the "meeting outlines" is only a rough plan, as this is the first offering of the course but the time of the final is there, and is final *** prerequisites We intend to enforce the formal prerequisites as best we can, if you don't have these, drop this course. ------------------------------------------ PREREQUISITES C- or better in Com S 228 ------------------------------------------ Q: What did you learn about ADTs in 228? Q: What did you learn about information hiding in 228? Q: Why is information hiding important? Q: Did you learn about and use inheritance in 228? *** texts show them ------------------------------------------ TEXTBOOKS Required: 1. Craig Larman. Applying UML and Patterns: An Introduction to Object-Oriented Analysis and Design and the Unified Process, Second Edition. Prentice Hall PTR, Upper Saddle River, NJ, 2001. ISBN 0130925691. 2. Martin Fowler with Kendall Scott. UML Distilled Second Edition: A Brief Guide to the Standard Object Modeling Language. Addison-Wesley Longman, Inc., Reading, MA, 2000. ISBN 020165783X. 3. Erich Gamma, Richard Helm, Ralph Johnson, and John Vlissides. Design Patterns: Elements of Reusable Object-Oriented Software. Addison-Wesley, Boston, MA, 1995. ISBN 0201633612. 4. Arthur J. Reil. Object-Oriented Design Heuristics. Addison-Wesley, Reading, MA, 1996. ISBN 020163385X. ------------------------------------------ These are also on reserve Definitely buy 1, the others won't be an absolute necessity; you may want to share copes in a team. *** grading ------------------------------------------ GRADING + No curve grading + Your grade is 40% based on exams 60% on homework ------------------------------------------ details in grade_policy web page (part of the handouts) We can discuss this also *** ask for questions/concerns discuss them