Page 1: Creating the Contact ADT
Unit 3, Lab 2, Page 1
This page is for reference.
Review the steps on this page and page two. This has already been completed for you at the start of Page 3.
On this page, you will develop an Abstract Data Type to store and access contact data (name, address, phone number, etc.).
Preserve Privacy
Snap! projects are not secure. Do not use your or your classmates’ personal information.
Setting Up the Contact List
Why global?
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
Betsy and Gamal are planning to build a Contact List in Snap!.
Betsy: We need a way to add a contact to our contact list.
Gamal: Each contact will be a list that with the a person’s name, phone number, address, email, or whatever we write.
Betsy: 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.
Gamal: 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.
-
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.
It should report one whole contact (a list of the three items):
-
Write the selector blocks to retrieve the
name from contact
,address from contact
, orphone from contact
.
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 ofcontact
; 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 runningkeep
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 forcontact
.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:
-
Declare input types for each selector to make it obvious that they expect a list (one whole contact) as input.
You learned about Specifying an Input Type on Unit 2 Lab 2 Page 2: Planning a Quiz App.
-
Test your blocks together, and debug any problems.
- First, put the constructor (with input values) inside each selector (as shown above) to test that they each report the correct piece of data.
-
Then, use the
contact
constructor toadd
a few contacts to your contact list.You can use these examples or make up your own:
name address phone Betsy Anderson 123 Main St. #4, New York, NY 10001 212-555-1234 Alphie Preston 149 E. 16th Ave., Sunnyvale, CA 94089 408-555-6789 Gamal Abdel 369 Center St., Boston, MA 02130 617-555-1098 - Notice how your contacts appear in the list.
-
Try selecting the
name
,address
, orphone
from a contact in your list
- Debug any problems.
If you don’t remember about table view and list view, revisit page 2.2.2.
- Write down how the use of an abstract data type helps manage complexity in your program.
AAP-1.D part b