Permanently under construction...please stay tuned!Overall Outline (subject to revision) - agile development (2 weeks)
- overview
- testing
- refactoring
- object-oriented design principles (4 weeks)
- overview
- SOLID
- designing with interfaces
- agile object-oriented modeling (2 weeks)
- process
- UML notation
- archetypes and colors
- software design patterns (2 weeks)
- key patterns from APPP and HFDP
- concurrent programming (3 weeks)
- distributed programming (2 weeks)
- overview and principles
- connecting to web services
Typical structure of a weekly lecture - APPP topic
- concurrent/distributed programming topic
- project discussion
- pair/group presentation or other activity
Typical assignments over a two-to-three-week period - reading
- listening to SE Radio episode
- programming project
Week 1Lecture- organizational matters
- introduction: instructor, TA
- course objectives
- course texts
- discussion forum (mandatory subscription)
- how to get help
- prerequisites and review topics: 170/271 313 overview
- initial projects
- motivation, including embedded systems
- course software with demo
- agile development principles and process/practices
Reading/Podcasts- APPP chapters 1 through 6
- Programming Android chapters 1 and 2
- SE Radio episodes 46 and 55 on refactoring
- SE Radio episode 167 on automated testing
Labor Day: no class
Lecture- 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
- requirements
- functional
- nonfunctional, 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
Reading/PodcastsLecture- refactoring
- introduction: code smells and refactoring
- real-world significance
- most projects legacy/evolve over time
- new members join existing teams
- smells arise
- economy of scope (requirements) versus economy of scale (standardization)
- agile design: process, not event
- 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
- opacity
- SOLID design principles
- brief design/architecture glossary
- language construct
- library
- framework
- design idiom
- design pattern
- design principle
- domain-specific language
- software architecture
- separation of concerns
- software execution models/interactivity
- batch/transformational
- event-driven
- Android framework overview: overview, more detailed intro
- Intent
- Service and BroadcastReceiver
- Activity
- lifecycle
- user interaction
- ContentProvider
- examples
Reading/Podcasts- APPP chapters 7, 8, and 12
- Programming Android chapters 3 through 5
- Android app fundamentals
- SE Radio episode 2 on dependencies
- SE Radio episode 150 on software craftspersonship
Lecture- Android framework overview: overview, more detailed intro, chapter in Android text
- Intent
- Service and BroadcastReceiver
- Activity
- lifecycle
- user interaction
- ContentProvider
- declarative versus programmatic configuration
- automated testing of Android apps
- examples
- event-driven programming
- events - sources - listeners
- callback paradigm/Observer pattern
- event queue and dispatch thread
- scheduled tasks/Command pattern
- project discussion
- project 1a
- project 1b
- quick update on team development process
- create, share, and use repository early!
Reading/PodcastsTest 1 (last hour of class)Lecture- event-driven programming
- events - sources - listeners
- callback paradigm/Observer pattern
- event queue and dispatch thread
- scheduled tasks/Command pattern
- model-view-controller versus model-view-adapter
Reading/Podcasts- APPP chapters 21, 22, and 23
- Programming Android chapters 6 and 7
Week 7
Fall Break: NO CLASS
Week 8Lecture- announcements: devices, grading/projects, ITA, Intel, ChiWIC, etc.
- test 1 discussion (in detail)
- modeling
- project 1b discussion
Reading/Podcasts- Programming Android chapter 6 section on concurrency
- APPP chapters 13, 14, 15, 19
- SE Radio episode 12 on concurrency
- SE Radio episode 65 on embedded systems
Week 9Reading/Podcasts- APPP chapters 9, 10, 11, 19
- SE Radio episode 51 on design by contract
Test 2 (last hour of class)Lecture- announcements: Android set-top boxes
- Android
- polymorphism
- project 2b discussion
- SOLID and other basic object-oriented design principles
- dependency inversion principle/design with interfaces (Tarr p33-, Coad)
- open-closed principle (Tarr p40-)
- Liskov substitution principle (Tarr p51-)
Reading/Podcasts- same as week 10
- APPP chapters 23 and 31
- SE Radio episode 1 on design patterns
Week 12Lecture- design patterns recap
- separation of concerns in an object model
- structure
- creation -> decoupling client from concrete structure
- behavior
- enhancements -> Decorator, role objects
- traversal -> Iterator
- processing -> Visitor
- examples
- modeling dynamic, event-driven behavior
- concurrency: system runs in parallel with its environment
- overview
- physical versus logical concurrency
- I/O-bound versus CPU-bound activities
- conflicting goals: safety and liveness
- run-to-completion versus coordination
- fairness, starvation, deadlock
Reading/PodcastsTest 3 (last hour of class)Lecture- announcements
- TCE reminder
- please provide detailed and candid feedback either on TCE form or by email
- book(s)
- choice and order of topics
- projects
- etc.
- project 2d optional (to appear shortly)
- project 2c discussion
- concurrency: system runs in parallel with its environment
- overview
- physical versus logical concurrency/nondeterminism
- I/O-bound versus CPU-bound activities
- race conditions
- conflicting goals: safety and liveness
- run-to-completion/share-nothing (easier) versus coordination/shared resources (harder)
- implementation: processes, threads, reactor pattern
- Android AsyncTask (see prime number checker example below)
- progress reporting
- action upon completion
- cancelation
- can choose size of thread pool
- distributed computing (mostly from a mobile + cloud perspective)
- overview
- performance: throughput, latency, jitter
- cloud
- almost unlimited computational resource (see paper linked below)
- introduces latency and other performance concerns
- usually need local caching for usability (e.g., Google Maps)
- example
Reading/Podcasts- announcements: ACM presentation, test 3 grading, team effort questionnaire, presentation/app questionnaire
- brief project 2d discussion
- concurrent and distributed computing wrap-up and references
- principles: fairness, starvation, deadlock
- performance: throughput, latency, jitter
- project presentations (max 5-6 minutes per team)
- overall app architecture
- terrain architecture
- support for traversal by actor
- support for 2d presentation
- brief demo
- need VGA port or adapter
- emulator running on your laptop
- or device connected to your or my laptop via AirDroid app
- reflection
- journey
- main insights
- main challenges
- app download
- please use your Box account to share your apk file with the class, ideally before the demo session
|