Proposed new courses: COMP2??? OO Development COMP3??? OO Programming Models COMP4??? Advanced Topics in OO Software Development Proposed removal: COMP3141 COMP4001 Given Ken's proposal for SE changes I would like to flag what I have in mind. This is a rather belated follow-on from my "OO sub-committee from years back ca 2000", and may have some bearing on what Ken has in mind, particularly wrt UML and informal design, and the desire to connect 3141 with the SENG workshop 3010. In brief my proposal is to introduce a Software Development strand with a focus on lightweight OO techniques (call it OO Software Devpt if you prefer). I think this could involve refactoring COMP3141 (Systems Design & Impl) and COMP4001 (OO Software Devpt) into 3 courses, which for want of better labels I will call COMP2???, COMP3??? and COMP4??? Currently COMP4001 is covering OO design, design patterns, brief mention of design by contract, and C++ implementation (with some focus on STL). The major assignment is a full design and implementation of a loosely spec'ed application, with GUI. This assignment appears to be popular. Daniel Woo has set 4001 has a pre-req for COMP4511 (UI Design and Construction) largely because of the coverage of design patterns (I guess?). Amir can tell us better what's in COMP3141 now but it appears to be a mix of Python, Java and C++ development, together with a raft of interesting, largely advanced (at least, cutting edge) topics in OO. These include refactoring and aspects. Over the years there has been varying degrees of overlap between 3141 and 4001, and my proposal should help to maintain the separation. Here's a first cut of a possible breakdown of the 3 courses. ======================= COMP2??? OO Development ======================= Aim: to give students the experience of designing *and* implementing a complete application, while learning principles and techniques of good design and coding Implementation platform: Java Format: 2 hour lect + 2 hour lab per week Prereq: COMP2011 or equiv (for introduction to Java programming and familiarity with Java Collections Framework) Topics: ------- Agile Development: unit testing use of JUnit pair programming OO Design: Informal: CRC Cards Semi-formal: UML subset class diagrams object diagrams and sequence diagrams Design by Contract: class invariants pre and post-conditions run-time assertions Design Patterns: coverage of the GOF patterns integrated into other parts of the course Frameworks: design considerations GUI framework case studies: AWT, Swing, SWT (ex IBM) identification of design patterns in existing frameworks Designing for Reuse: practice in designing a small framework refactoring code ============================== COMP3??? OO Programming Models ============================== Aim: to become familiar with a variety of OO Programming Languages to gain programming experience with at least 2 new OO languages Prereq: COMP2011 (probably don't need COMP2??? as prereq) Topics: topics will be exposed through practical programming exercises comparative study of Java, C++, Python, Eiffel survey of others e.g. Smalltalk, Ruby, C# to understand the organisation of OO runtimes JVM C++ object layout Python model .net Common Language Runtime inheritance models multiple inheritance in Eiffel and C++ dynamic binding single vs multiple dispatch multi-methods in CLOS and Cecil loss of data encapsulation parametric classes (Java, Eiffel) contravariance vs covariance vs nonvariance c.f. C++ templates functions as objects closures C# delegates Eiffel agents C++ function pointers STL Functors =================================================== COMP4??? Advanced Topics in OO Software Development =================================================== Aim: to expose students to the cutting edge of OOSD to introduce students to active research areas in OO Prereq: COMP2??? and COMP3??? Topics will be decided on a year by year basis. Current topics could include a selection from: Aspect-oriented programming Refactoring techniques Concurrency and objects design principles and patterns Ownership types containment and encapsulation Component-based models Distributed object models Security and objects OCL and Precise UML Formal OO methods OO type systems Object calculus and variants ========================================================== Further comments ========================================================== Frequency of offering is up to TC. Commencing 05s1? If it was legally feasible I could dry-run COMP2??? in 04s2 Current staffing possibilities: COMP2???: JMP (for starters) COMP3???: GuyT or JP for C++, Amir for Python COMP4???: ideally should be taught in modules by a team of 3 or so JMP, JP, GuyT, Amir, Ian Gorton ... Issues: 1. Some overlap with SENG workshops, but I see the development style being more oriented towards the organisational approach, with extra formality, and documentation of requirements etc. 2. To avoid too much duplicated material, I think that students with any of COMP3141 and COMP4001 should be banned from COMP2??? and COMP3??? but that will depend on the final shape of the courses.