Differences between revisions 1 and 86 (spanning 85 versions)
Revision 1 as of 2005-01-23 12:46:15
Size: 54
Editor: t-indiv10-134
Comment:
Revision 86 as of 2005-03-08 21:20:21
Size: 12884
Editor: t-indiv10-220
Comment:
Deletions are marked like this. Additions are marked like this.
Line 1: Line 1:
在这里详述"ObjectOrientationAndDesignPatterns". #acl All:read,write

/!\ ''It was found that many of the students had not done Java B. This will result in difficulties in understanding the basic concepts of object orientation that form the bases of this assignment. However this assignment is to help you to get a better understanding and hopefully to use object-oriented thinking elsewhere in your design, so lets lower our ambitions a bit, and focus only on the essence of object-orientated analysis and design. Also due to the limited time, [#dp the sencond half] of this assignment, that is, design patterns, will be only an introduction. The individual task has been adjusted accordingly.''

[[TableOfContents]]

'' (!) Owning a hammer doesn't make one an architect.''

= Introduction =
So you have done Java A and even B. Congratulations. Have you also found that Java offers something that is more than a programming language? With this assignment, we will try to wrap up your knowledge about Java, or any other object-oriented programming language you know (C++, Object Pascal, Python, Ruby ...), to get the essence of object orientation, to turn yourself from a craftsman back to a designer: Use object orientation as a tool to slice the complex into the simple, and put them back again in a structured way.

= Schedule =

{{{#!Gantt view-begin=2005-02-21,view-end=2005/04/08,timestep=7,
<project xmlns:pg="http://www.logilab.org/namespaces/pygantt_docbook" id="monprojet">
<label>Object Orientation and Design Patterns</label>
<task id="uml">
  <label>Introduction to UML</label>
  <task id="lecture1">
    <label>Lecture: Introduction to UML</label>
    <duration>1</duration>
    <constraint type="begin-after-date">2005/02/21</constraint>
  </task>
  <task id="task1">
    <label>Task 1: Practice UML diagrams</label>
    <duration>10</duration>
    <constraint type="begin-after-date">2005/02/21</constraint>
  </task>
</task>
<task id="ooad">
  <label>OOA and OOD</label>
  <task id="lecture2">
    <label>Lecture: Object Reloaded</label>
    <duration>1</duration>
    <constraint type="begin-after-date">2005/03/07</constraint>
  </task>
  <task id="task2">
    <label>Task 2: Modeling your product</label>
    <duration>10</duration>
    <constraint type="begin-after-date">2005/03/07</constraint>
  </task>
  <task id="presentation1">
    <label>Presentation: result of Task2</label>
    <duration>1</duration>
    <constraint type="begin-after-date">2005/03/21</constraint>
  </task>
</task>
<task id="dp">
  <label>Design Patterns</label>
  <task id="lecture3">
    <label>Lecture: Design Patterns I</label>
    <duration>1</duration>
    <constraint type="begin-after-date">2005/03/14</constraint>
  </task>
  <task id="lecture4">
    <label>Lecture: Design Patterns II</label>
    <duration>1</duration>
    <constraint type="begin-after-date">2005/04/04</constraint>
  </task>
  <task id="task3">
    <label>Task 3: Redesign your software</label>
    <duration>10</duration>
    <constraint type="begin-after-date">2005/03/21</constraint>
  </task>
</task>
<task id="deadline">
  <label>Final deliverable: Deadline</label>
  <duration>1</duration>
  <constraint type="begin-after-date">2005/04/06</constraint>
</task>
</project>
}}}

 Week 1 ::
 * Lecture: An introduction to UML (21-02 15.45-17.30 HG 2.80)
  * [attachment:UMLintro_presentation.pdf Slides], for viewing on screen
  * [attachment:UMLintro_handouts.pdf Handouts], for printing, with additional details
 * Reading:
  * Read online: [http://odl-skopje.etf.ukim.edu.mk/uml-help/ UML Tutorial in 7 days] by Slobodan Kalajdziski; You may also download a [attachment:UMLTutorialIn7Days.zip zipped copy] from here for reading offline.
  * Read in the train: [http://www3.software.ibm.com/ibmdl/pub/software/rational/web/whitepapers/2003/intro_rdn.pdf Introduction to the Unified Modeling Language] (PDF) by Terry Quatrani; Also a local copy [attachment:intro_rdn.pdf here].
  * Refreshing your Java Objects: [http://www.mindview.net/Books/TIJ/ Thinking in Java]. Local copies: [attachment:TIJ3.ZIP Zipped HTML], [attachment:TIJ3.PDF PDF]
   * Chapter 1: introduction to Objects (skip "Java and the Internet", "Why Java succeeds" and "Java vs C++")
   * Chapter 16: Analysis and Design
  * Start thinking about how to model a product you designed, using UML diagrams.
 * <!> Task 1, to be finished in 2 weeks:
  * Practice UML diagrams using [http://w3.tue.nl/en/services/dienst_ict/organisatie/groepen/wins/campus_software/ms_visio/ Microsoft Visio 2003] (available as a campus software package). You may also want UML 2.0 stencils from [http://www.phruby.com/stencildownload.html Pavel Hruby]

 Week 2 ::
 * No lectures.
 * <!> Continue Task 1.

 Week 3 ::
 * Lecture: Object oriented analysis and design (OOA & OOD) (07-03 15.45-17.30 HG 2.80)
  * [attachment:OO_presentation.pdf Slides], for viewing on screen
  * [attachment:OO_handouts.pdf Handouts], for printing
 * Reading:
   * [http://www.objectcentral.com/oobook/oobook.htm Essense of Object Oriented Programming] Several chapters of this book by Wampler are available online. Chapter 2 is a very good overview of object-orientation.
   * Again: [http://odl-skopje.etf.ukim.edu.mk/uml-help/ UML Tutorial in 7 days] by Slobodan Kalajdziski. This time you should focus more on the analysis and design. Read [http://odl-skopje.etf.ukim.edu.mk/uml-help/html/01day3.html RAD (Rapid Application Development)] (Day 1), Day 5 and Day 6.
   * [http://www.csc.calpoly.edu/~dbutler/tutorials/winter96/crc_b/ Object-Oriented Analysis and Design using CRC Cards] CRC (Control, Responsibilities, and Collaborators) cards are an important tool for identifying and defining the classes you need for your program. They are an excellent low-tech method requiring only index cards.
 * <!> Task 2, to be finished in 2 weeks:
  * Modeling ( /!\ not programming) a product designed by yourself, using use case diagrams, class diagrams, sequence diagrams and activity diagrams.


[[Anchor(dp)]]
 Week 4 ::
 * Lecture: Design Patters I: Observer, Iterator, Singleton, Factory ... (14-03 15.45-17.30 HG 2.80)
 * Reading: [http://www.patterndepot.com/put/8/JavaPatterns.htm The Design Patterns java Companion]
  * You may also refer to the following famous books (if you are lucky, you may grab a copy from the university library):
   * GoF: [#Gamma+HelmETAL-DesiPattElemReus:95 Design Patterns -- Elements of Reusable Object-oriented Software]
   * POSA 1: [#BUSCHMANN:1996 Pattern-Oriented Software Architecture, Volume 1: A System of Patterns]
   * POSA 2: [#Schmidt+StalETAL-PattSoftArchVolu:00 Pattern-Oriented Software Architecture, Volume 2: Patterns for Concurrent and Networked Objects]
 * <!> Continue Task 2.

 Week 5 ::
 * No lectures.
 * Presentation: Everybody gets 5 minutes to present the results of Task 2. (21-03 15.45-17.30 HG 2.80)
 * <!> Task 3, to be finished in 2 weeks
  * Find a program '''''you wrote before''''', for example, the program you wrote for Java A '''or''' Java B, '''or''' any other programs in any language
  * Read your program again.
  * Now, how would you like to impprove your design using a object-oriented approach?
   * Show me your original code,
   * identify the problems if there is any,
   * redesign it using object-oriented approach,
   * apply design patterns in your desgin,
   * try to communicate your object-oriented new desgin with me using UML diagrams.

   '' /!\ Implementation of your new design is appreciated, but not obligatory.''



 Week 6 ::
 * No Lectures
 * <!> Continue Task 3

 Week 7 ::
 * Lecture: Design Patterns II: Interface architectures (MVC, PAC) (03-04 15.45-17.30 HG 2.80)
 * Feedback, Q&A

= Final deliverables =
 * Report of Task 2 and 3.
 * In your report, include a section to convince me that an object-oriented approach can also be useful for you as a ''intelligent product and service'' designer (not as a software designer or a programmer), or a section to convice me that the object-oriented approach is useless at all in design. Explain why, and if it can be useful, tell me how.
 * '''''Deadline: Aprial 6, 9:00AM Sharp.'''''


= Online Resources =

 * [http://www.uml.org/ Official OMG UML site], but do not try to read the entire UML specification.
 * [http://bdn.borland.com/article/0,1410,31863,00.html Borland's UML Tutorial]
 * [http://odl-skopje.etf.ukim.edu.mk/uml-help/ UML Totorial in 7 days] by Slobodan Kalajdziski;
 * [http://www.holub.com/goodies/uml/ Allen Holub's UML Quick Reference]
 * [http://www.phruby.com/stencildownload.html UML 2.0 stencils for Visio 2003]
 * [http://www.objectcentral.com/oobook/oobook.htm Essense of Object Oriented Programming]
 * [http://www.csc.calpoly.edu/~dbutler/tutorials/winter96/crc_b/ Object-Oriented Analysis and Design using CRC Cards]


= References =
{{{#!html
<table>

<tr valign="top">
<td align="right">
<a name="Buschmann+MeunierETAL-PattSoftArchVolu:96"></a>[1]
</td>
<td>
F.&nbsp;Buschmann, R.&nbsp;Meunier, H.&nbsp;Rohnert, P.&nbsp;Sommerlad, and M.&nbsp;Stal.
  <i>Pattern-Oriented Software Architecture, Volume 1: A System of
  Patterns</i>.
  John Wiley & Sons, Inc., 1996.<br />

</td>
</tr>


<tr valign="top">
<td align="right">
<a name="Cooper-DesiPattjavaComp:98"></a>[2]
</td>
<td>
J.W. Cooper.
  <i>The Design Patterns java Companion</i>.
  Addision-Wesley Design Patterns Series, 1998.
  Free electronic copy available from
  <A HREF="http://www.patterndepot.com/put/8/JavaPatterns.htm">http://www.patterndepot.com/put/8/JavaPatterns.htm</A>.<br />

</td>
</tr>


<tr valign="top">
<td align="right">
<a name="Eckel-ThinJava:02"></a>[3]
</td>
<td>
B.&nbsp;Eckel.
  <i>Thinking in Java</i>.
  Prentice Hall, 3rd edition, 2002.
  Free electronic copy available from
  <A HREF="http://www.mindview.net/Books/TIJ/">http://www.mindview.net/Books/TIJ/</A>.<br />

</td>
</tr>


<tr valign="top">
<td align="right">
<a name="Gamma+HelmETAL-DesiPattElemReus:95"></a>[4]
</td>
<td>
e.&nbsp;Gamma, R.&nbsp;Helm, R.&nbsp;Johnson, and J.&nbsp;Vlissides.
  <i>Design Patterns - Elements of Reusable Object-oriented
  Software</i>.
  Addison-Wesley, 1995.<br />

</td>
</tr>


<tr valign="top">
<td align="right">
<a name="BUSCHMANN:1996"></a>[5]
</td>
<td>
F.&nbsp;Buschmann, R.&nbsp;Meunier, H.&nbsp;Rohnert, P.&nbsp;Sommerlad, and M.&nbsp;Stal.
  <i>Pattern-Oriented Software Architecture, Volume 1: A System of
  Patterns</i>.
  John Wiley & Sons, Inc., 1996.<br />

</td>
</tr>


<tr valign="top">
<td align="right">
<a name="Schmidt+StalETAL-PattSoftArchVolu:00"></a>[6]
</td>
<td>
D.C. Schmidt, M.&nbsp;Stal, H.&nbsp;Rohnert, and F.&nbsp;Buschmann.
  <i>Pattern-Oriented Software Architecture, Volume 2: Patterns for
  Concurrent and Networked Objects</i>.
  John Wiley & Sons, 1st edition, 2000.<br />

</td>
</tr>
</table>
}}}


{{{#!bibtex abstract=off usekeys=off keywords=off style=alpha

@BOOK{Buschmann+MeunierETAL-PattSoftArchVolu:96,
  author = {Buschmann, F. and Meunier, R. and Rohnert, H. and Sommerlad, P. and Stal, M.},
  title = {Pattern-Oriented Software Architecture, Volume 1: A System of Patterns},
  publisher = {John Wiley & Sons, Inc.},
  year = 1996,
}
@BOOK{Cooper-DesiPattjavaComp:98,
  author = {Cooper, J.W.},
  title = {The Design Patterns java Companion},
  publisher = {Addision-Wesley Design Patterns Series},
  year = 1998,
  note = {Free electronic copy available from \url{http://www.patterndepot.com/put/8/JavaPatterns.htm}},
}

@BOOK{Eckel-ThinJava:02,
  author = {Eckel, B.},
  title = {Thinking in Java},
  publisher = {Prentice Hall},
  year = 2002,
  edition = {3rd},
  note = {Free electronic copy available from \url{http://www.mindview.net/Books/TIJ/}},
}

@BOOK{Gamma+HelmETAL-DesiPattElemReus:95,
  author = {Gamma, e. and Helm, R. and Johnson, R. and Vlissides, J.},
  title = {Design Patterns -- Elements of Reusable Object-oriented Software},
  publisher = {Addison-Wesley},
  year = 1995,
}

@book{BUSCHMANN:1996,
  author="Buschmann, F. and Meunier, R. and Rohnert, H. and Sommerlad, P. and Stal, M.",
  title="Pattern-Oriented Software Architecture, Volume 1: A System of Patterns",
  publisher="John Wiley & Sons, Inc.",
  year=1996,
}

@BOOK{Schmidt+StalETAL-PattSoftArchVolu:00,
  author = {Schmidt, D.C. and Stal, M. and Rohnert, H. and Buschmann, F.},
  title = {Pattern-Oriented Software Architecture, Volume 2: Patterns for Concurrent and Networked Objects},
  publisher = {John Wiley & Sons},
  year = 2000,
  edition = {1st},
}

}}}

/!\ It was found that many of the students had not done Java B. This will result in difficulties in understanding the basic concepts of object orientation that form the bases of this assignment. However this assignment is to help you to get a better understanding and hopefully to use object-oriented thinking elsewhere in your design, so lets lower our ambitions a bit, and focus only on the essence of object-orientated analysis and design. Also due to the limited time, [#dp the sencond half] of this assignment, that is, design patterns, will be only an introduction. The individual task has been adjusted accordingly.

TableOfContents

(!) Owning a hammer doesn't make one an architect.

Introduction

So you have done Java A and even B. Congratulations. Have you also found that Java offers something that is more than a programming language? With this assignment, we will try to wrap up your knowledge about Java, or any other object-oriented programming language you know (C++, Object Pascal, Python, Ruby ...), to get the essence of object orientation, to turn yourself from a craftsman back to a designer: Use object orientation as a tool to slice the complex into the simple, and put them back again in a structured way.

Schedule

<project xmlns:pg="http://www.logilab.org/namespaces/pygantt_docbook" id="monprojet">
<label>Object Orientation and Design Patterns</label>
<task id="uml">
  <label>Introduction to UML</label>
  <task id="lecture1">
    <label>Lecture: Introduction to UML</label>
    <duration>1</duration>
    <constraint type="begin-after-date">2005/02/21</constraint>
  </task> 
  <task id="task1">
    <label>Task 1: Practice UML diagrams</label>
    <duration>10</duration>
    <constraint type="begin-after-date">2005/02/21</constraint>
  </task>
</task>
<task id="ooad">
  <label>OOA and OOD</label> 
  <task id="lecture2">
    <label>Lecture: Object Reloaded</label>
    <duration>1</duration>
    <constraint type="begin-after-date">2005/03/07</constraint>
  </task>
  <task id="task2">
    <label>Task 2: Modeling your product</label>
    <duration>10</duration>
    <constraint type="begin-after-date">2005/03/07</constraint>
  </task>
  <task id="presentation1">
    <label>Presentation: result of Task2</label>
    <duration>1</duration>
    <constraint type="begin-after-date">2005/03/21</constraint>
  </task>
</task>
<task id="dp">
  <label>Design Patterns</label>
  <task id="lecture3">
    <label>Lecture: Design Patterns I</label>
    <duration>1</duration>
    <constraint type="begin-after-date">2005/03/14</constraint>
  </task>
  <task id="lecture4">
    <label>Lecture: Design Patterns II</label>
    <duration>1</duration>
    <constraint type="begin-after-date">2005/04/04</constraint>
  </task>
  <task id="task3">
    <label>Task 3: Redesign your software</label>
    <duration>10</duration>
    <constraint type="begin-after-date">2005/03/21</constraint>
  </task>
</task>
<task id="deadline">
  <label>Final deliverable: Deadline</label> 
  <duration>1</duration>
  <constraint type="begin-after-date">2005/04/06</constraint>
</task>
</project>
Week 1
  • Lecture: An introduction to UML (21-02 15.45-17.30 HG 2.80)
    • [attachment:UMLintro_presentation.pdf Slides], for viewing on screen
    • [attachment:UMLintro_handouts.pdf Handouts], for printing, with additional details
  • Reading:
  • <!> Task 1, to be finished in 2 weeks:

    Week 2
  • No lectures.
  • <!> Continue Task 1.

  • Week 3
  • Lecture: Object oriented analysis and design (OOA & OOD) (07-03 15.45-17.30 HG 2.80)

    • [attachment:OO_presentation.pdf Slides], for viewing on screen
    • [attachment:OO_handouts.pdf Handouts], for printing
  • Reading:
  • <!> Task 2, to be finished in 2 weeks:

    • Modeling ( /!\ not programming) a product designed by yourself, using use case diagrams, class diagrams, sequence diagrams and activity diagrams.

  • Anchor(dp)

    Week 4
  • Lecture: Design Patters I: Observer, Iterator, Singleton, Factory ... (14-03 15.45-17.30 HG 2.80)
  • Reading: [http://www.patterndepot.com/put/8/JavaPatterns.htm The Design Patterns java Companion]

    • You may also refer to the following famous books (if you are lucky, you may grab a copy from the university library):
      • GoF: [#Gamma+HelmETAL-DesiPattElemReus:95 Design Patterns -- Elements of Reusable Object-oriented Software]

      • POSA 1: [#BUSCHMANN:1996 Pattern-Oriented Software Architecture, Volume 1: A System of Patterns]

      • POSA 2: [#Schmidt+StalETAL-PattSoftArchVolu:00 Pattern-Oriented Software Architecture, Volume 2: Patterns for Concurrent and Networked Objects]

  • <!> Continue Task 2.

  • Week 5
  • No lectures.
  • Presentation: Everybody gets 5 minutes to present the results of Task 2. (21-03 15.45-17.30 HG 2.80)
  • <!> Task 3, to be finished in 2 weeks

    • Find a program you wrote before, for example, the program you wrote for Java A or Java B, or any other programs in any language

    • Read your program again.
    • Now, how would you like to impprove your design using a object-oriented approach?
      • Show me your original code,
      • identify the problems if there is any,
      • redesign it using object-oriented approach,
      • apply design patterns in your desgin,
      • try to communicate your object-oriented new desgin with me using UML diagrams.

        /!\ Implementation of your new design is appreciated, but not obligatory.

    Week 6
  • No Lectures
  • <!> Continue Task 3

  • Week 7
  • Lecture: Design Patterns II: Interface architectures (MVC, PAC) (03-04 15.45-17.30 HG 2.80)
  • Feedback, Q&A

  • Final deliverables

    • Report of Task 2 and 3.
    • In your report, include a section to convince me that an object-oriented approach can also be useful for you as a intelligent product and service designer (not as a software designer or a programmer), or a section to convice me that the object-oriented approach is useless at all in design. Explain why, and if it can be useful, tell me how.

    • Deadline: Aprial 6, 9:00AM Sharp.

    Online Resources

    References

    [1] F. Buschmann, R. Meunier, H. Rohnert, P. Sommerlad, and M. Stal. Pattern-Oriented Software Architecture, Volume 1: A System of Patterns. John Wiley & Sons, Inc., 1996.
    [2] J.W. Cooper. The Design Patterns java Companion. Addision-Wesley Design Patterns Series, 1998. Free electronic copy available from http://www.patterndepot.com/put/8/JavaPatterns.htm.
    [3] B. Eckel. Thinking in Java. Prentice Hall, 3rd edition, 2002. Free electronic copy available from http://www.mindview.net/Books/TIJ/.
    [4] e. Gamma, R. Helm, R. Johnson, and J. Vlissides. Design Patterns - Elements of Reusable Object-oriented Software. Addison-Wesley, 1995.
    [5] F. Buschmann, R. Meunier, H. Rohnert, P. Sommerlad, and M. Stal. Pattern-Oriented Software Architecture, Volume 1: A System of Patterns. John Wiley & Sons, Inc., 1996.
    [6] D.C. Schmidt, M. Stal, H. Rohnert, and F. Buschmann. Pattern-Oriented Software Architecture, Volume 2: Patterns for Concurrent and Networked Objects. John Wiley & Sons, 1st edition, 2000.

    JunHu: ObjectOrientedAnimals/200503 (last edited 2008-10-03 20:18:42 by localhost)