<course designator="CSC407H"> <alias>CSCxxxx (grad course # as yet unknown)</alias> <alias>ECE450H</alias> <owner>David A. Penny<e-mail>penny@cs.toronto.edu</e-mail></owner> <subscriber>Steve Easterbrook<e-mail>sme@cs.toronto.edu</e-mail></subscriber> <subscriber>Dave Wortman<e-mail>dw@cs.toronto.edu</e-mail></subscriber> <subscriber>Jim Clarke<e-mail>clarke@cs.toronto.edu</e-mail></subscriber> <subscriber>Marsha Chechik<e-mail>chechik@cs.toronto.edu</e-mail></subscriber> <subscriber>Ric Hehner<e-mail>hehner@cs.toronto.edu</e-mail></subscriber> <subscriber>John Mylopoulos<e-mail>jm@cs.toronto.edu</e-mail></subscriber> <calendar-description> An introduction to the development of system-level architectures and class-level object-oriented designs for software systems. This course places special emphasis on the study of architecture and design patterns: the core of solutions to commonly occurring design problems. Other topics include representations of design/architecture (with emphasis on the use of UML as a class-level design notation), architectural assessment, product lines, architecture extraction, and re-factoring. The course does not have a major project, but does have a series of smaller design and architecture exercises requiring some programming. A knowledge of <b>UML</b> as used for requirements analysis and a working knowledge of both the C++ and Java languages is assumed. </calendar-description> <additional-description> Even once we fully understand the requirements for a software system it is rarely clear how to begin the programming task (except for the most trivial of programs). The steps in-between requirements and coding are first architecture and then design. Architecture involves specifying the construction of the system at the highest level. What are the major modules? What are the major processes? How do the processes communicate with one another? Design involves specifying the construction of a single module or program at the class level. What classes should we have? What are their responsibilities? With what other classes should they collaborate? What methods should they contain? This course teaches students how to come up with and then descirbed system-level architectures and class-leve designs. </additional-description> <prereq> CSC340H <reason>teaches UML for OOA</reason> <reason>Good to understand requirements before design</reason> </prereq> <prereq> CSC378H <reason>teaches ADTs so that students have a solid understading of encapsulation</reason> <reason>to get past this course, students must have gone through Java and C++</reason> <reason>general programming maturity</reason> </prereq> <prereq> CGPA 2.00 <reason>to limit enrollment</reason> </prereq> <topic hours="1"> Introduction to software architecture and design <topic>the place of design and architecture in the software development process</topic> <topic>definition of architecture</topic> <topic>the importance of architecture</topic> <topic>architecture process steps</topic> <topic>architecture process steps</topic> <topic>quality attributes affected by architecture</topic> <topic>the existence of multiple architectural structures in software</topic> </topic> <topic hours="1"> The roots of modularity and information hiding <topic>Parnas paper: KWIC case study</topic> </topic> <topic hours="1"> Introduction to Object-Oriented Design <topic>Coad and Yourdon OOD process steps</topic> </topic> <topic hours="10"> Design patterns <topic hours="1"> Introduction <topic>purpose of design patterns</topic> <topic>how design patterns are described</topic> <topic>a taxonomy of design patterns</topic> <topic>using design patterns</topic> <topic>inheritance, composition, and delegation</topic> </topic> <topic hours="3">LEXI case study</topic> <topic hours="6">Detailed description of selected patterns</topic> </topic> <topic hours="9"> System-Level Architecture <topic hours="1">guest lecturer from industry</topic> <topic hours="2">monolithic systems</topic> <topic hours="1">components (e.g., JavaBeans)</topic> <topic hours="2">client/server systems</topic> <topic hours="1">RDBMS-based systems</topic> <topic hours="1">distributed objects (e.g., CORBA, EJB)</topic> <topic hours="1">n-tiered systems</topic> </topic> <topic type="optional">architecture assessment</topic> <topic type="optional">product lines</topic> <topic type="optional">architecture extraction</topic> <topic type="optional">architecture re-factoring</topic> <topic type="optional">architecture description languages</topic> <text type="required"> <title>Design Patterns: Elements of Reusable Object-Oriented Software</title> <author>Gamma et. al.</author> <publisher>Addison-Wesley (Professional Computing Series)</publisher> <year>1995</year> <edition>1st</edition> <ISBN>0-201-63361-2</ISBN> </text> <text type="reference"> <title>The Unified Modeling Language User Guide</title> <author>Booch et. al.</author> <publisher>Addison-Wesley</publisher> <year>1998</year> <edition>1st</edition> <ISBN>0-201-57168-4</ISBN> </text> <tech>UNIX</tech> <tech>Java</tech> <tech>UML (for design)</tech> <tech type="optional">UML Drawing Tool (e.g., Rational Rose)</tech> <eval type="assgnment" weight="20%"> given a simple problem, come up with a class design in UML using patterns and then code it in Java </eval> <eval type="assignment" weight="20%"> given a more advanced problem, come up with a class design in UML using patterns and then code it in Java </eval> <eval type="assignment" weight="20%"> given the description of a system's requirements, produce a system-level architecture document for it </eval> <eval type="exam" weight="40%"/> <change> <date>March 7, 2001</date> <who>Dave Penny</who> I propose dropping the C++ requirement. They can learn all they need using only Java. <objection> <date>March 10, 2001</date> <who>Steve Easterbrook</who> There are a lot of design patterns that are particular to C++. I feel students should not leave the software engineering program without understanding how to apply them. </objection> <objection> <date>March 11, 2001</date> <who>Dave Wortman</who> I agree with Steve on this. </objection> </change> </course>