Great designs come from great designers. Software construction is a creative process. — F.P. Brooks, The Mythical Man Month, 1975
  1. Software Design

    1. Software design — Focus on the “Overview” and “Design Concepts” sections.

      1. Design is a modern buzz word. Why is it such an important concept/practice for the 21st century?
      2. Identify and explain Booch’s four basic principles of (object-oriented software) design.
    2. Refactoring — Be able to explain the purpose of refactoring a software system.

    3. Software design patterns — Focus on the introduction, the “History” and the individual patterns listed below.

      1. What is a design pattern?
      2. From whose work did the original idea for software design patterns come and who made the connection to software design?
    4. No Silver Bullet — This entire paper is work reading, but focus on the questions below.

      1. Compare and contrast essential and accidental issues.
      2. How would you summarize Brook’s thesis in one or two sentences? Do you agree with him?
  2. Design Modeling

    1. UML Class Diagrams

      1. What are the basic building blocks of a class diagram, that is, what do the nodes and arcs represent?
      2. How does a class diagram represent the inter-class relationships commonly referred to as is-a and has-a?
      3. How do you represent multiplicity on association links?
  3. Technology Stack

    1. Managing State — Read the intro section on the nature of state in React apps, and then study the following (sub-set of the) issues discussed in this chapter. Be able to do the following, using the hyperlinks embedded in the chapter for more information as needed.

      1. Reacting to input with state
        • Compare and contrast imperative vs. declarative programming for UIs.
        • Explain how the useState hook is used for declarative programming in React.
      2. Choosing the state structure
        • Be familiar with the basic principles of structuring state.
      3. Sharing state between components
        • Explain the concept of lifting state up in an hierarchical component structure.
        • Explain the concept of a single source of truth for each element of the state.
      4. Passing data deeply with context
        • Explain how Context can be used to address the problems caused by prop-drilling.
        • Be ready to implement the three “steps” of using Context in the lab.
    2. Expo Router — Read through the following (sub-set of the) sections on routing (aka navigating) between application screens in Expo, and be able to do the following.

      1. Introduction to Expo Router
        • Explain what the Expo Router does.
        • Explain file-based routing.
      2. Core concepts of file-based routing
        • Verify that the rules of Expo Router match up with the StickerSmash code you built in Lab 4.
      3. Navigation layouts in Expo Router
        • Compare and contrast stack, tab, vs. slot navigation.
      4. Navigating between pages
        • Be clear on how to navigate between pages using app URLs.
        • Explain the nature of URL route parameters.
    3. What should be in params — One common issue with application state in Expo/ReactNavigation is sharing state between screens. Study this discussion of best practices and be able to:

      1. Explain what should and should not be passed between screens using parameters.

      This article suggests using React Query to manage global state. Instead, we’ll be using the useContext hook as discussed in the managing state tutorial (see above). Your project app could warrant the additional complexity of other solutions (e.g.: Mobx; Redux), which we’ve skipped here; you can consider those later, as needed.