Summer 2018 COMP 313/413

Preliminary Schedule 

(Based on Dr. Yacobellis' Spring, 2018, 313 Schedule – Subject to Change)

Previous version (Spring 2018)

Some Key Dates

28 May (week 2 Monday): no class (Memorial Day Holiday)

04 June (week 3 Monday): Project 1 due at 11:55pm

11 June (week 4 Monday): quiz 1

18 June (week 5 Monday): 2-person Project 3 team members due

18 June (week 5 Monday): test 1

21 June (week 5 Thursday): Project 2 due at 11:55pm - updated
03 July (week 7 Tuesday): withdrawal deadline

06 July (week 7 Friday): Project 3 due at 11:55pm

09 July (week 8 Monday): quiz 2
16 July (week 9 Monday): test 2

09 August (week 12 Thursday): test 3, last class; Project 4 due at 11:55pm

Twelve weeks of course: 35 class sessions (minus 5/28, Memorial Day)
First week of course: May 21-24 (Monday through Thursday)

Final week of course: August 6-9 (Monday through Thursday)

Week 1: 21 May

Video Recordings

  • Pre-work: using Zoom, installing required software, filling in pre-course survey
  • Course overview and Course Roadmap
  • Sakai and Piazza

Sessions

  • Classes 1 & 2
  • organizational matters
    • announcements
    • brief introductions: instructor, students
    • Piazza discussion forum (mandatory subscription – link through Sakai)
    • prerequisites and review topics: 271 313 overview
    • software check – Java, Android Studio, Bitbucket, …
    • course software with demo
  • course software with demo
  • motivation, including embedded systems
    • brief overview of batch versus event-based programming
  • requirements
    • functional: y = f(x)
    • nonfunctional: additional properties or characteristics of f, e.g.
      • testability
        • most important nonfunctional requirement
        • allows testing whether functional requirements are met
        • good architecture often happens as a side-effect (APPP pp. 36-38)
      • performance
      • scalability
        • e.g. performance for large data sets: asymptotic order of complexity 
          (big-Oh) in terms of input size n
      • reliability
      • maintainability
      • static versus dynamic NFRs
  • Test-Driven Design (TDD)
  • discussion of projects 1 and 2
  • Class 3 – prerequisite assessment – in-class team/group exercise

Reading/Podcasts - Typically in preparation for the following week

Week 2: 28 May – no class May 28, Memorial Day

Video Recordings – none this week

Data Structure Topics

  • data structures
    • linear vs. nonlinear
    • position-based vs. policy-based (see also here)
    • performance
    • tying data structure choices to requirements
  • data abstraction
    • addressing: pointers, references
    • aggregation (product types): structs, records
      • example: node in a linked list
    • variation (sum types): tagged unions, multiple implementations of an interface
    • example: mutable set abstraction
      • add element
      • remove element
      • check whether an element is present
      • check if empty
      • how many elements
    • several possible implementations
      • reasonable: binary search tree, hash table, bit vector (for small underlying domains)
      • less reasonable: array, linked list
      • see also here

Sessions

  • Class 1 (Tuesday) – COMP 271 (Data Structures) recap; Object-Oriented basics
    • announcements
    • data structures review (see above topics)
    • classes vs. objects
    • UML class diagrams
  • Class 2 (Thursday) – Object-Oriented basics, part 2
    • inheritance
    • Java constructors and access control
    • abstract classes
    • Java polymorphism
    • the Java Object class and toString method
    • Reference vs. Value semantics
    • equality vs. identity

Reading/Podcasts

  • OOPUJ chapters 4, 5
    • Object Roles and Polymorphism; Method Overloading

Week 3: 04 June

Video Recordings – none this week

Sessions

  • Class 1
    • announcements
      • Quiz 1 next week, covering Software Engineering Radio episodes 1 and 2
      • there's a sample set of Quiz 1 questions and answers in Sakai's Week 3 folder
    • project 1 check-up, including using Bitbucket and running Android Studio
    • discussion of project 2 if needed - focus on TODO's and questions to answer
    • some thought problems in Java
    • basics of object-oriented programming up to genericity (Generics)
      • Inheritance and Composition, part 1 (maybe in Class 2)
  • Class 2 – basics of object-oriented programming up to genericity (Generics)
    • Inheritance and Composition, part 2
    • Interfaces
    • more Java thought problems
  • Class 3 – basics of object-oriented programming up to genericity (Generics)
    • Abstract Classes
    • even more Java thought problems
    • More on Test-Driven Development
      • JUnit Annotations, test methods, and examples

Reading/Podcasts

  • OOPUJ chapter 6
    • OO Software Analysis and Design
  • SE Radio episode 2 on dependencies
  • Bob Tarr pdf slide sets on Factory, Strategy, and Visitor Design Patterns (in Sakai Week 3 folder)
  • Agile Principles, Patterns, and Practices in C# (APPP) chapters 1-3 and Design Patterns chapters as above
    • Agile Practices; Extreme Programming Overview; Planning
    • Factory, Strategy, and Visitor Design Patterns

Homework

  • Project 1 due June 4 by 11:55pm

Week 4: 11 June

Video Recordings

  • Supplemental Java topics – Java Collections, data structures, and Object-inherited methods

Session

  • Class 1
    • Quiz 1: short quiz on first 2 SE Radio episodes, patterns and dependencies
    • announcements
      • test 1 next week during the online class session; roadmap on Sakai
    • basics of object-oriented programming - through the rest of the online document
      • Generic types
      • Supplemental material: Java Collections, data structures, and Object-inherited methods (see course slides and video)
      • Optional topic - Coad: modeling with UML and color: overviewbook chapter
    • reverse engineering JUnit tests (test 1 topic)
  • Class 2
    • introduction to Design Patterns
      • Resources
        • tutorialspoint website
        • Bob Tarr pdf slides on Sakai
        • APPP Design Pattern references
          • Factory: Chapter 29
          • Strategy: Chapter 22
          • Visitor: Chapter 35
      • Design Patterns overview
      • Factory method, and Strategy Pattern
  • Class 3
    • Visitor Pattern
    • brief project 3 introduction, team formation

Reading/Podcasts

  • Bob Tarr pdf slide sets on Decorator, Composite, and Visitor Design Patterns
  • APPP chapters 4-6 and Design Patterns chapters as above
    • Testing; Refactoring; A Programming Episode
    • Decorator, Composite, and Visitor Design Patterns

    Week 5: 18 June

    Session

    • Class 1 – test 1
    • Class 2
      • announcements
        • project 3 team formation
      • more Design Patterns
        • Decorator and Composite
        • Visitor revisited
        • Resources
          • tutorialspoint website
          • Bob Tarr pdf slides on Sakai (Week 4)
          • APPP Design Pattern references
            • Decorator: part of Chapter 35
            • Composite: Chapter 31
            • Visitor: Chapter 35
    • Class 3
      • project 3 details, part 1
        • Shapes interface and Visitor<Result> generic interface
          • concrete Shapes: Circle, Rectangle, ...
          • concrete Visitors: Draw, Size, and Bounding Box
        • project 3 TODOs (Android Studio: Tools => View => TODO)
        • project 3 Decorators: Outline, Stroke, Location, ...
        • Android Canvas and Paint classes and online documentation
        • Unit tests using Gradle and Mockito; the Fixtures class

    Reading/Podcasts

    Homework

    • Project 2 due Thursday night June 21 by 11:55pm - updated

    Week 6: 25 June

    Video Recordings

    • Test 1 review (if not covered in Week 5)

    Session

    Reading/Podcasts

      Week 7: 02 July (no missed class due to Independence Day on July 4)

      Video Recordings

      • possibly SOLID follow-up sections

      Session

      • Class 1
      • Class 2
        • Overview of Java 8-10
        • in-class time to work on Project 3
      • Class 3
        • in-class time to work on Project 3

      Reading/Podcasts

      Homework

      • Project 3 due Friday night July 6

      Week 8: 9 July

      Session

      Reading/Podcasts

      • APPP chapters 21, 23, 32, 36
        • Command and Active Object: Versatility
        • Façade and Mediator
        • Observer: Evolving into a Pattern
        • State Design Pattern

      Week 9: 16 July

      Session

      • Class 1
        • test 2
      • Class 2
      • Class 3
        • UML Extended State Machines (with guards)
        • brief Project 4 requirements review
        • in-class group exercise: create a Project 4 dynamic UML extended state machine model
          • capture these to submit as part of each larger group’s Project 4 submission
          • this may be partially or completely deferred to Week 10

      Reading/Podcasts

          Week 10: 23 July

          Session

          • Class 1
            • announcements
              • reminder: you should have listened to SE Radio episode 65 last week on embedded systems!
            • test 2 discussion - as needed
            • in-class group exercise: create a Project 4 dynamic UML extended state machine model
              • capture these to submit as part of each larger group’s Project 4 submission
              • this may have been completed in Week 9 (or at least started then)
          • Class 2
            • detailed discussion of testing in clickcounter and stopwatch examples
            • in-class group exercise: create a comprehensive set of unit tests for Project 4 - possibly in Class 3
              • also capture these to submit as part of each larger group’s Project 4 submission
              • note: you don’t need to create the tests, just create a list of proposed tests
          • Class 3
            • time to work on Project 4 in your larger groups

          Reading/Podcasts

            Week 11: 30 July

            Reading/Podcasts

            • APPP chapter 10-12
              • The Liskov Substitution Principle (LSP); The Dependency-Inversion Principle (DIP); 
                The Interface Segregation Principle (ISP)
            • SE Radio episode 12 on concurrency – will be covered on final exam (test 3)

            Week 12: 06 August

            • Classes 1 & 2
              • announcements
                • test 3 on Thursday - practice test is in Week 13 on Sakai
              • agile design: process, not event: presentation
                • design smells: usually subjective, sometimes objective
                  • rigidity: difficult to change
                  • fragility: easy to break
                  • immobility: difficult to reuse
                  • viscosity (of software, of environment): it is difficult to do the right thing
                  • accidental complexity: e.g., overdesign
                  • needless repetition (DRY)
                  • opacity
                • design perfume
              • refactoring
              • prime number checker - example of cloud-based execution (optional topic)
              • cloud computing - X as a service (XAAS - optional topic)
              • immutability (optional topic)
              • possibly time to work on Project 4 in your teams
            • Class 3 – test 3 (final exam)
              • includes SE Radio episodes embedded systems (65) and concurrency, part 1 (12)

            Other topics

            Homework

            • Project 4 due Thursday night, August 9, by 11:55pm – last day of summer session class

            Reading/Podcasts



             

            Dr. Laüfer’s COMP 313/413 Course Outline 

            (basis for this course – some schedule compression for Summer session)

            Overall Outline of Topics (subject to revision)

            • organization, motivation, introduction (1 week: 1 total)
              • what makes software good?
              • requirements: functional vs. nonfunctional
              • the importance of testing
            • basics of object-oriented programming (2 weeks: 3 total)
              • semantics: reference vs. value, equality vs. identity
              • types and classes: relationships, polymorphism
              • code organization: member access, packages/namespaces
            • agile development process (1 week: 4 total)
              • overview
              • testing
              • refactoring
              • continuous integration and delivery
            • object-oriented design principles (2 weeks: 6 total)
              • overview
              • SOLID
              • designing with interfaces
            • agile object-oriented modeling (2 weeks: 8 total)
              • main UML diagrams: class, state machine, sequence
              • archetypes and colors
            • software design patterns (2 weeks: 10 total)
              • key patterns from APPP and HFDP
            • concurrent programming (3 weeks: 13 total)
              • events
              • threads
              • sharing
            • distributed programming (1 week: 14 total)
              • overview and principles
              • connecting to web services

            Typical structure of a weekly session

            • OOPUJ or APPP or PA topics
            • project discussion and related topics
            • pair/group presentation or other activity

            Typical assignments over a two-to-three-week period

            • reading
            • listening to SE (Software Engineering) Radio episodes
            • programming project
            Subpages (3): Project 1 Project 2 Project 3
            Comments