Speech and Music Retrieval LBSC 796/INFM 718R Session 11, April 20, 2011 Douglas W. Oard.
Data Structures Session 9 LBSC 790 / INFM 718B Building the Human-Computer Interface.
-
date post
19-Dec-2015 -
Category
Documents
-
view
218 -
download
2
Transcript of Data Structures Session 9 LBSC 790 / INFM 718B Building the Human-Computer Interface.
![Page 1: Data Structures Session 9 LBSC 790 / INFM 718B Building the Human-Computer Interface.](https://reader036.fdocuments.net/reader036/viewer/2022062516/56649d395503460f94a134db/html5/thumbnails/1.jpg)
Data Structures
Session 9LBSC 790 / INFM 718B
Building the Human-Computer Interface
![Page 2: Data Structures Session 9 LBSC 790 / INFM 718B Building the Human-Computer Interface.](https://reader036.fdocuments.net/reader036/viewer/2022062516/56649d395503460f94a134db/html5/thumbnails/2.jpg)
Agenda
• Questions
• Some useful data structures
• Project discussion
• Wrap-up
![Page 3: Data Structures Session 9 LBSC 790 / INFM 718B Building the Human-Computer Interface.](https://reader036.fdocuments.net/reader036/viewer/2022062516/56649d395503460f94a134db/html5/thumbnails/3.jpg)
What’s Wrong With Arrays?
• Must specify maximum size when declared– And the maximum possible size is always
used
• Can only index with integers– For efficiency they must be densely
packed
• Adding new elements is costly– If the elements are stored in order
• Every element must be the same type
![Page 4: Data Structures Session 9 LBSC 790 / INFM 718B Building the Human-Computer Interface.](https://reader036.fdocuments.net/reader036/viewer/2022062516/56649d395503460f94a134db/html5/thumbnails/4.jpg)
What’s Good About Arrays?
• Can get any element quickly– If you know what position it is in
• Natural data structure to use with a loop– Do the same thing to different data
• Efficiently uses memory– If the array is densely packed
• Naturally encodes an order among elements
![Page 5: Data Structures Session 9 LBSC 790 / INFM 718B Building the Human-Computer Interface.](https://reader036.fdocuments.net/reader036/viewer/2022062516/56649d395503460f94a134db/html5/thumbnails/5.jpg)
Linked Lists
• A way of making variable length arrays– In which insertions and deletions are
easy
• Very easy to do in Java• But nothing comes for free
– Finding an element can be slow– Extra space is needed for the links– There is more complexity to keep track
of
![Page 6: Data Structures Session 9 LBSC 790 / INFM 718B Building the Human-Computer Interface.](https://reader036.fdocuments.net/reader036/viewer/2022062516/56649d395503460f94a134db/html5/thumbnails/6.jpg)
Making a Linked List• In Java, all objects are accessed by
reference– Object variables store the location of the object
• New instances must be explicitly constructed
• Add reference to next element in each object– Handy to also have a reference to the prior one
• Keep a reference to the first object– And then walk down the list using a loop
![Page 7: Data Structures Session 9 LBSC 790 / INFM 718B Building the Human-Computer Interface.](https://reader036.fdocuments.net/reader036/viewer/2022062516/56649d395503460f94a134db/html5/thumbnails/7.jpg)
Linked List Example
Jill Joe Tom
first
Public static main (String[] argv) {Student first;
…}
Public class Student {int String name;public Student next;
}
![Page 8: Data Structures Session 9 LBSC 790 / INFM 718B Building the Human-Computer Interface.](https://reader036.fdocuments.net/reader036/viewer/2022062516/56649d395503460f94a134db/html5/thumbnails/8.jpg)
Linked List Operations
• Add an element– Easy to put it in sorted order
• Examine every element– Just as fast as using an array
• Find just one element– May be as slow as examining every
element
• Delete an element after you find it– Fast if you keep both next and prior
links
![Page 9: Data Structures Session 9 LBSC 790 / INFM 718B Building the Human-Computer Interface.](https://reader036.fdocuments.net/reader036/viewer/2022062516/56649d395503460f94a134db/html5/thumbnails/9.jpg)
Linked List Insertion
Jill Joe Tom
first
public void insert(String newName) {Student temp = first;boolean done = false;while (!done) {
if ((temp.next==null) || (temp.next.name.follows(newName))){
Student new = new Student(name, temp.next);
temp.next=new;done = true;
}temp = temp.next;
}}
![Page 10: Data Structures Session 9 LBSC 790 / INFM 718B Building the Human-Computer Interface.](https://reader036.fdocuments.net/reader036/viewer/2022062516/56649d395503460f94a134db/html5/thumbnails/10.jpg)
Trees
• Linked list with multiple next elements– Just as easy to create as linked lists– Binary trees are useful for relationships
like “<“
• Insertions and deletions are easy• Useful for fast searching of large
collections– But only if the tree is balanced
• Efficiently balancing trees is complex, but possible
![Page 11: Data Structures Session 9 LBSC 790 / INFM 718B Building the Human-Computer Interface.](https://reader036.fdocuments.net/reader036/viewer/2022062516/56649d395503460f94a134db/html5/thumbnails/11.jpg)
Binary Tree Example
Jill
Joe
Tom
root Public class Student {int String name;public Student left;public Student right;
}
![Page 12: Data Structures Session 9 LBSC 790 / INFM 718B Building the Human-Computer Interface.](https://reader036.fdocuments.net/reader036/viewer/2022062516/56649d395503460f94a134db/html5/thumbnails/12.jpg)
Data Structures in Java• Resizable array [O(n) insertion, O(1) access]:
– ArrayList
• Linked list [O(1) insertion, O(n) access, sorted]: – LinkedList
• Hash table [object index, unsorted, O(1)]: – HashSet (key only)– HashMap (key+value)
• Balanced Tree [object index, sorted, O(log n)]:– TreeSet (key only)– TreeMap (key+value)
![Page 13: Data Structures Session 9 LBSC 790 / INFM 718B Building the Human-Computer Interface.](https://reader036.fdocuments.net/reader036/viewer/2022062516/56649d395503460f94a134db/html5/thumbnails/13.jpg)
Hashtables
• Find an element nearly as fast as in an array– With easy insertion and deletion– But without the ability to keep things in
order
• Fairly complex to implement– But Java defines a class to make it simple
• Helpful to understand how it works– “One size fits all” approaches are
inefficient
![Page 14: Data Structures Session 9 LBSC 790 / INFM 718B Building the Human-Computer Interface.](https://reader036.fdocuments.net/reader036/viewer/2022062516/56649d395503460f94a134db/html5/thumbnails/14.jpg)
How Hashtables Work• Create an array with enough room
– It helps a lot to guess the right size first
• Choose a variable in each object as the key– But it doesn’t need to be an integer
• Choose a spot in the array for each key value– Using a fast mathematical function– Best if things are scattered around well
• Choose how to handle multiple keys at one spot
![Page 15: Data Structures Session 9 LBSC 790 / INFM 718B Building the Human-Computer Interface.](https://reader036.fdocuments.net/reader036/viewer/2022062516/56649d395503460f94a134db/html5/thumbnails/15.jpg)
Java HashMap Class
• Hashtables are objects like any other– import java.util.*– Must be declared and instantiated
• The constructor optionally takes a size parameter
• put(key, value) adds an element• containsKey(key) checks for an element• get(key) returns the “value” object for
that key
![Page 16: Data Structures Session 9 LBSC 790 / INFM 718B Building the Human-Computer Interface.](https://reader036.fdocuments.net/reader036/viewer/2022062516/56649d395503460f94a134db/html5/thumbnails/16.jpg)
Stacks• Maintain an implicit order
– Last In-First Out (LIFO)
• Easy additions and deletions– push and pop operations
• Maps naturally to certain problems– Interrupt a task to compute an intermediate
value
• Implemented as a Java class– import java.util.*
![Page 17: Data Structures Session 9 LBSC 790 / INFM 718B Building the Human-Computer Interface.](https://reader036.fdocuments.net/reader036/viewer/2022062516/56649d395503460f94a134db/html5/thumbnails/17.jpg)
Choosing a Data Structure
• What operations do you need to perform?– Reading every element is typically easy– Other things depend on the representation
• Hashing finds single elements quickly– But cannot preserve order
• Stacks and linked lists preserve order easily– But they can only read one element at any time
• Balanced trees are best when you need both
• Which operations dominate the processing?
![Page 18: Data Structures Session 9 LBSC 790 / INFM 718B Building the Human-Computer Interface.](https://reader036.fdocuments.net/reader036/viewer/2022062516/56649d395503460f94a134db/html5/thumbnails/18.jpg)
![Page 19: Data Structures Session 9 LBSC 790 / INFM 718B Building the Human-Computer Interface.](https://reader036.fdocuments.net/reader036/viewer/2022062516/56649d395503460f94a134db/html5/thumbnails/19.jpg)
Rapid prototyping process
Evaluate
RefineDesign
Specification
Identify needs/ establish
requirements
BuildPrototype
Final specification
Exemplifies a user-centered design approach
Start
![Page 20: Data Structures Session 9 LBSC 790 / INFM 718B Building the Human-Computer Interface.](https://reader036.fdocuments.net/reader036/viewer/2022062516/56649d395503460f94a134db/html5/thumbnails/20.jpg)
Rapid Prototyping + Waterfall
UpdateRequirements
ChooseFunctionality
BuildPrototype
InitialRequirements
WriteSpecification
CreateSoftware
WriteTest Plan
Project
![Page 21: Data Structures Session 9 LBSC 790 / INFM 718B Building the Human-Computer Interface.](https://reader036.fdocuments.net/reader036/viewer/2022062516/56649d395503460f94a134db/html5/thumbnails/21.jpg)
A Disciplined Process
• Agree on a project plan– To establish shared expectations
• Start with a requirements document– That specifies only bedrock requirements
• Build a prototype and try it out– Informal, focused on users -- not developers
• Document the new requirements• Repeat, expanding functionality in small
steps
![Page 22: Data Structures Session 9 LBSC 790 / INFM 718B Building the Human-Computer Interface.](https://reader036.fdocuments.net/reader036/viewer/2022062516/56649d395503460f94a134db/html5/thumbnails/22.jpg)
Characteristics of Good Prototypes
• Easily built (“about a week’s work”)– Intentionally incomplete
• Insightful– Basis for gaining experience– Well-chosen focus (DON’T built it all
at once!)
• Easily modified– Facilitates incremental exploration
![Page 23: Data Structures Session 9 LBSC 790 / INFM 718B Building the Human-Computer Interface.](https://reader036.fdocuments.net/reader036/viewer/2022062516/56649d395503460f94a134db/html5/thumbnails/23.jpg)
Prototype Demonstration
• Choose a scenario based on the task• Develop a one-hour script
– Focus on newly implemented requirements
• See if it behaves as desired– The user’s view of correctness
• Solicit suggestions for additional capabilities– And capabilities that should be removed
![Page 24: Data Structures Session 9 LBSC 790 / INFM 718B Building the Human-Computer Interface.](https://reader036.fdocuments.net/reader036/viewer/2022062516/56649d395503460f94a134db/html5/thumbnails/24.jpg)
Requirements Approval• Plan on between 12 and 50 iterations
– For the class project, you’ll do only the first 3– Adding about 10 new objects per iteration
• Use the project plan to enforce a deadline– New requirements shrink, but never disappear
• Schedule a formal approval demonstration– Allow one more iteration to fix any problems
![Page 25: Data Structures Session 9 LBSC 790 / INFM 718B Building the Human-Computer Interface.](https://reader036.fdocuments.net/reader036/viewer/2022062516/56649d395503460f94a134db/html5/thumbnails/25.jpg)
Project Check-in
• What use cases have you identified?
• Can you prototype all of them in a week?– Leave a week for bug fixes, client
review
• Any new requirements?• What challenges, risks do you
face?
![Page 26: Data Structures Session 9 LBSC 790 / INFM 718B Building the Human-Computer Interface.](https://reader036.fdocuments.net/reader036/viewer/2022062516/56649d395503460f94a134db/html5/thumbnails/26.jpg)
![Page 27: Data Structures Session 9 LBSC 790 / INFM 718B Building the Human-Computer Interface.](https://reader036.fdocuments.net/reader036/viewer/2022062516/56649d395503460f94a134db/html5/thumbnails/27.jpg)
Discussion: Pair Programming
![Page 28: Data Structures Session 9 LBSC 790 / INFM 718B Building the Human-Computer Interface.](https://reader036.fdocuments.net/reader036/viewer/2022062516/56649d395503460f94a134db/html5/thumbnails/28.jpg)
Coming up
• Homework - No more!• Project spec 1
– due tomorrow at 6:00 pm
• Proto 1 / Spec 2– due Nov 9
• Next week:– Testing & debugging– Swing Data Models
![Page 29: Data Structures Session 9 LBSC 790 / INFM 718B Building the Human-Computer Interface.](https://reader036.fdocuments.net/reader036/viewer/2022062516/56649d395503460f94a134db/html5/thumbnails/29.jpg)
![Page 30: Data Structures Session 9 LBSC 790 / INFM 718B Building the Human-Computer Interface.](https://reader036.fdocuments.net/reader036/viewer/2022062516/56649d395503460f94a134db/html5/thumbnails/30.jpg)
Muddiest Point
On a blank sheet of paper, write asingle sentence that will conveyto me what you found to be themost confusing thing that wasdiscussed during today’s class.
![Page 31: Data Structures Session 9 LBSC 790 / INFM 718B Building the Human-Computer Interface.](https://reader036.fdocuments.net/reader036/viewer/2022062516/56649d395503460f94a134db/html5/thumbnails/31.jpg)
![Page 32: Data Structures Session 9 LBSC 790 / INFM 718B Building the Human-Computer Interface.](https://reader036.fdocuments.net/reader036/viewer/2022062516/56649d395503460f94a134db/html5/thumbnails/32.jpg)
Java Containers• Displayable windows
– JFrame
• Subordinate windows (“dialogs”)– JOptionPane, JColorChooser, JFileChooser
• Grouping for layout management– JPanel
• Specialized containers– JScrollPane– JTabbedPane– JSplitPane
Examples
![Page 33: Data Structures Session 9 LBSC 790 / INFM 718B Building the Human-Computer Interface.](https://reader036.fdocuments.net/reader036/viewer/2022062516/56649d395503460f94a134db/html5/thumbnails/33.jpg)
Some Layout Managers• BorderLayout: top, bottom, sides, center (default for JFrame)
• FlowLayout: rows, with “component wrap” (default for JPanel)
• GridLayout: graph paper, identical shapes
• BoxLayout: one column (or row)
• GridBagLayout: graph paper w/different shapes
Examples
![Page 34: Data Structures Session 9 LBSC 790 / INFM 718B Building the Human-Computer Interface.](https://reader036.fdocuments.net/reader036/viewer/2022062516/56649d395503460f94a134db/html5/thumbnails/34.jpg)
Exercise
File Menu Help
Book List Book Details
Request RecallCheck out
![Page 35: Data Structures Session 9 LBSC 790 / INFM 718B Building the Human-Computer Interface.](https://reader036.fdocuments.net/reader036/viewer/2022062516/56649d395503460f94a134db/html5/thumbnails/35.jpg)
Swing Controls• JButton• JToggleButton• JRadioButton• JCheckBox• JList• JMenuBar, JMenu, JMenuItem• JComboBox (pop up menu)• JTree• JSlider• JTextField, JTextArea
![Page 36: Data Structures Session 9 LBSC 790 / INFM 718B Building the Human-Computer Interface.](https://reader036.fdocuments.net/reader036/viewer/2022062516/56649d395503460f94a134db/html5/thumbnails/36.jpg)
Display Elements
• JLabel
• Icon
• JProgressBar
• setToolTipText()
![Page 37: Data Structures Session 9 LBSC 790 / INFM 718B Building the Human-Computer Interface.](https://reader036.fdocuments.net/reader036/viewer/2022062516/56649d395503460f94a134db/html5/thumbnails/37.jpg)
![Page 38: Data Structures Session 9 LBSC 790 / INFM 718B Building the Human-Computer Interface.](https://reader036.fdocuments.net/reader036/viewer/2022062516/56649d395503460f94a134db/html5/thumbnails/38.jpg)