Some Key Dates
19 Jan (Week 1 Monday): no
class (MLK Holiday)
03 Feb (Week 3): project 1 due Wednesday
night
15 Feb (Week 5): quiz 1
19 Feb (Week 5): project 2 due Friday
night
22 Feb (Week 6): test 1
08 Mar (Week 8): no
classes (Spring Break 2) 22 Mar (Week 10): quiz 2
26 Mar (Week 10): project 3 due Friday night
29 Mar (Week 11): test 2
Preliminary Schedule (Based on Dr. Yacobellis' Spring, 2020, COMP 413 Schedule – Subject to Change) Previous version (Spring 2019)
Week 1: 18 January - No class, Martin Luther King Holiday
Week 2: 25 January Sessions - organizational matters
- introduction: instructor; no TA for Spring 2019
- course objectives
- course texts
- course roadmap (see the last page of this document)
- Piazza discussion forum (mandatory subscription – link through Sakai)
- how to get help
- prerequisites and review topics: 271 313 overview
- motivation, including embedded systems
- brief overview of batch versus event-based programming
- requirements
- functional: y = f(x)
- nonfunctional: additional properties 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
- discussion of projects 1 and 2
- course software with demo
- prerequisite assessment
Reading/Podcasts
Week 3: 1 FebruarySessions - announcements
- 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
- group activity: problem 4 on prerequisite assessment
Reading/Podcasts - OOPUJ chapters 4, 5
- Object Roles and Polymorphism; Method Overloading
Homework - Project 1 due Wednesday night, February 3
Week 4: 8 February Sessions - announcements
- project 1/software installation check-up
- Quiz 1 next week
- discussion of project 2
- basics of object-oriented programming up to genericity (Generics)
- Inheritance and Composition
- Interfaces
- Abstract Classes
- More on Test-Driven Development
- JUnit Annotations, test methods, and examples
Reading/Podcasts Week 5: 15 February Sessions - Quiz 1: short quiz on first 2 SE Radio episodes, patterns and dependencies
- announcements
- 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)
- Optional topic - Coad: modeling with UML and color: overview, book chapter
- reverse engineering JUnit tests (test 1 topic)
- introduction to Design Patterns
- Overview
- Factory method, Strategy, Visitor
- Resources
- tutorialspoint website
- Bob Tarr pdf slides on Sakai
- APPP Design Pattern references
- Factory: Chapter 29
- Strategy: Chapter 22
- Visitor: Chapter 35
- project 3 introduction (only if time)
Reading/Podcasts - Bob Tarr pdf slide sets on Factory, Strategy, and Visitor Design Patterns
- 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 2 due Friday, February 19
Week 6: 22 February Sessions - test 1
- announcements
- more Design Patterns
- Decorator and Composite
- Visitor revisited
- Resources
- tutorialspoint website
- Bob Tarr pdf slides on Sakai
- APPP Design Pattern references
- Decorator: part of Chapter 35
- Composite: Chapter 31
- Visitor: Chapter 35
- project 3
- 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 - 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
- SE Radio episode 167 on unit testing
Week 7: 1 March
Sessions - announcements
- team members posted on Sakai and Piazza
- team repositories: cs413sp18teamNp3
- discussion of test 1
- continued project 3 detailed discussion
- more classes, including Fixtures
- Mokito "white box" unit tests (esp. for the Bounding Box Visitor)
- how to run the unit tests
- expressions and vexpressions Java examples - using a Visitor<Result> interface to visit arithmetic expressions
- coding guidelines
- UML diagrams and 30-minute in-class group activity
- create a UML class diagram for project 3 (hand-drawn is best)
- Submit (a picture of) the diagram plus a brief write up about how you did it on Sakai - one per group
- Agile development (if time)
Reading/Podcasts
Week 8: 8 March - No class, Spring Break 2
Week 9: 15 March Sessions - announcements
- any remaining questions about project 3
- reminders: Quiz 2 next week (2 SE Radio podcasts), test 2 the following week
- principles of object-oriented programming: SOLID
- S - Single Responsibility Principle (SRP)
- O - Open Closed Principle (OCP)
- L - Liskov Substitution Principle (LSP)
- I - Interface Segregation Principle (ISP)
- D - Dependency Inversion Principle (DIP)
- References
- SOLID and other basic object-oriented design principles ("SOLID + 2"): presentation
- Android example programs
Reading/Podcasts |