Creating the Contact ADT

In this lab, you will develop a Contact List database application like the one on your phone.

On this page, you will develop an abstract data type to store and access contact data (name, address, phone number, etc.).

An abstract data type (ADT) is a custom data type that's meaningful to your program. You learned about data types and ADTs on Unit 2 Lab 2 Page 2: Planning a Quiz App.

Setting Up the Contact List

  1. Click here to load a starter project. Then save it.
  2. Create a global contact list variable.
  3. Initialize contact list as an empty list.

Why a global variable?

Multiple scripts across the project will use this variable, so it shouldn't be attached to just one script like a local, script variable.

Creating the ADT

Jasmine and Omar are planning to build a Contact List in Snap!.
Jasmine: We need a way to add a contact to our contact list.
Omar: Each contact will be a list that with the a person's name, phone number, address, email, or whatever we write.
Jasmine: In Unit 2, we created a quiz item abstract data type to store the questions and answers in a list of quiz items. Here, we can make a contact abstract data type to store the data for each contact in our list of contacts.
Omar: Yeah. In this project, we'll need a contact constructor and then selectors to access the name, address, and phone number for any given contact.

Preserve Privacy

Snap! projects are not secure. Do not use your or your classmates' personal information.

  1. Shortcut: You could paste the following text into the "Make a block" window to build the block more quickly.

    contact with name: %name address: %address phone: %phone

    The percent (%) signs make those words become input variables.
    Create a contact constructor that accepts three pieces of data as input: the contact's name, phone number, and address.
    contact with name: () address: () phone: ()
    It should report one whole contact (a list of the three items):
    contact with name: (Betsy) address: (123 Main St. #4, New York, NY 10001) phone: (212-555-1234) reporting {Betsy Anderson; 123 Main St. #4, New York, NY 10001; 212-555-1234}
  2. Write the selector blocks to retrieve the name from contact, address from contact, or phone from contact. contact name (contact block with inputs) reporting
    contact address (contact block with inputs) reporting
    contact phone (contact block with inputs) reporting
    You learned about input types and output types (domain and range) on Unit 2 Lab 3 Page 1: What's a Predicate?.

    It's important to make sure that your inputs to a function match the expected input type. For example, the input type of address from contact matches the output type of contact; they are both of type "contact."

    If you call address from contact with an input that doesn't match, such as a list of contacts (for example, the contact list variable or the result of running keep and having a subset of that list), it's not going to work. That may sound obvious, but in fact, beginning programmers make mistakes like that all the time; you have to teach yourself to think about the input and output types of your functions every time you write or use one.

    That's also true about the inputs to the contact constructor; you can't put something that isn't a name in the name input for contact.

    It's somewhat artificial to use the constructor as the input to a selector; these images are just examples to show what the selectors should be able to do when given a contact as input. In your program, the selectors will take an item from the contact list as input and output the correct piece of that contact, like this:
    address from contact (item (1) of (contact list)) reporting '123 Main St. #4, New York, NY 10001'

  3. Declare input types for each selector to make it obvious that they expect a list (one whole contact) as input.
    name from contact: () address from contact: () phone from contact: ()
    You learned about Specifying an Input Type on Unit 2 Lab 2 Page 2: Planning a Quiz App.
  4. Test your blocks together, and debug any problems.
    1. First, put the constructor (with input values) inside each selector (as shown above) to test that they each report the correct piece of data.
    2. Then, use the contact constructor to add a few contacts to your contact list.
      You can use these examples or make up your own:
      name address phone
      Jasmine Anderson 123 Main St. #4, New York, NY 10001 212-555-1234
      Morgan Preston 149 E. 16th Ave., Sunnyvale, CA 94089 408-555-6789
      Omar Hernandez 369 Center St., Boston, MA 02130 617-555-1098
    3. Notice how your contacts appear in the list.
    4. If you don't remember about table view and list view, revisit page 2.2.2.
    5. Try selecting the name, address, or phone from a contact in your list
      name from contact: (item (random) of (contact list)) reporting Morgan Preston
    6. Save Your Work
    7. Debug any problems.
  5. AAP-1.D part b
  6. Write Out Your Thoughts Write down how the use of an abstract data type helps manage complexity in your program.