CS201: Software Development Methods - PowerPoint PPT Presentation

1 / 24
About This Presentation
Title:

CS201: Software Development Methods

Description:

Sometimes Java's design encourages us to create some thing that might be used just once ... Using these in Java for Collections, Lists (methods, cursor, etc. ... – PowerPoint PPT presentation

Number of Views:46
Avg rating:3.0/5.0
Slides: 25
Provided by: tomho8
Category:

less

Transcript and Presenter's Notes

Title: CS201: Software Development Methods


1
CS201 Software Development Methods
OO Design and the JavaCollections Framework Part
2
  • Topics
  • Comparable and Comparator interfaces in JCF
  • Function objects
  • Textbook readings
  • More from MSD, Chapter 9
  • Pages 641-647
  • Pages 650-651 up to 9.4.1Pages 666-671.

2
Overview
  • In Part 1 of this Unit, we learned
  • About the Collections framework
  • Collection and List interfaces
  • Iterator, ListIterator
  • Also should now study static methods from the
    book or class notes
  • Here in Part 2 of this Unit, we will see
  • Defining order for sort(), max(), etc.
  • Using an interface and a function-object

3
Back to Java Comparable and Comparator
  • In computing, we often want to order a set of
    items
  • Find the max/best or min/worst
  • Sort them in order
  • Note how this is different than what is needed
    for search (where we just need equals)
  • Need a way to compare two items
  • Want to flexible way to compare using different
    criteria
  • In Java, lets us use Collection(s) methods to
    meet our own special needs. (Powerful!)

4
Check out the Collections class
  • Class Collections
  • utility methods for doing operations on
    Collections, Lists (that almost always contain
    homogenous elements)
  • Note very similar Arrays class
  • See MSD textbook, Section 9.5, pp. 666f
  • Methods (static, mostly for Lists)
  • search a list for an item binarySearch()
  • sort(), max(), min() -- uses compareTo() or
    Comparator object
  • reverse(), fill(), shuffle(), copy(),
    replaceAll()
  • List list2 Collections.unmodifiableList(list1)
    // p. 668

5
Comparable Interface
  • First solution Can we ask an object how it
    compares to a second object?
  • Sure string1.compareTo(string2)
  • Programming convention Return value as follows
  • zero if the same
  • negative value if first item strictly less than
    second
  • positive value if first item strictly greater
    than second
  • Java provides a Comparable interface int
    compareTo(Object o)
  • Note the parameter is an object
  • Like equals() and for the same reason

6
Writing compareTo for Your Classes
  • If you ever want to put your own objects in
    Collections, and use sort(), max(), min(),
  • Make your class implement Comparable
  • Implement the compareTo() method in your class
  • How to write compareTo()?
  • Think about state-variables that determine
    natural order
  • Compare them and return proper-value
  • Note For number values, you can subtract.
  • For object values, call compareTo() on them.

7
Example Writing compareTo()
  • Imagine something like an entry in a phonebook
  • Order by last name, first name, then number
  • int compareTo( Object o ) PhoneBookEntry item2
    (PhoneBookEntry ) oint retVal
    last.compareTo(item2.last)if ( retVal ! 0 )
    return retValretVal first.compareTo(item2.firs
    t)if ( retVal ! 0 ) return retValretVal
    phNum - item2.phNumreturn retVal

8
Under the Hood for Sorting
  • How might a sort() or any other method use this?
    Imagine
  • Perhaps items stored as a list of Objects
    List theList
  • Inside a loop, code might look like this
    Comparable item1 (Comparable) theList.get(i)
    Comparable item2 (Comparable) theList.get(j)
    int cmpResult item1.compareTo(item2)
  • Such code will work when the list stores any
    class that implements Comparable!
  • But, what happens if list-elements are of
    different classes (still Comparable, but
    different)? compareTo() fails!

9
Flexible Design using Comparators
  • Solution 1 Make classes Comparable
  • Disadvantage just one way to compare is
    possible, because theres just one compareTo
    method per class
  • Possible solutions
  • Separate functions sortByName(), sortByNum(),
  • We cant predict in advance how youll want to
    sort!
  • Pass a parameter to indicate control
    sort(theList, byName) or sort(theList,
    byNum)
  • Ugh. Same problem as before
  • And the internals of sort() will grow to become
    very ugly

10
Function Objects
  • We need to somehow pass how to execute
    information as a parameter to sort()
  • We pass objects as parameters
  • Can we pass a method/operation as an object?
  • Many languages support this, but in different
    ways
  • C and C pointers to functions
  • C delegates
  • Java function objects that
  • implement a specified interface, and
  • the one method in that interface does the needed
    work

11
Function Objects in Java
  • Idea encapsulate a function inside a class
  • Note not our usual idea of a class
  • State? (None.)
  • Identity? (Just need one instance.)
  • Represents an entity? (Nope! Just a place to
    stash a function so it can be passed as a
    parameter.)
  • Warning / caveat!
  • This idea is contrary to many OO principles, but
  • Useful if done in limited circumstances
  • Use it when the libraries make it available
  • Not often part of your own class-design
  • But use it in libraries when its part of the
    framework

12
Example Comparator objects
  • We want to pass a function-object to a method
  • Collections.sort(someList, function-object-goes-he
    re)
  • But what type should this object be?
  • Use an Interface
  • Interface name can be used as a type in the
    parameter list
  • Interface defines the method name itself!
  • Javas Comparator interface int compare(
    Object o1, Object o2)
  • Notes not compareTo()! Takes two parameters!
  • Define a class for each kind of comparison you
    want. E.g. Classes CmpStudentByGpa,
    CmpStudentByGpaDesc Classes CmpDogByName,
    CmpDogByBreed

13
Writing a Comparator Class
  • Example on following slides like one from MSD
    text, p. 646-647
  • We have a Dog class with name, breed and gender
  • But see simpler example in Java on website
  • list of Student objects
  • sort by name, gpa
  • Also sort in descending order too
  • Look at testSorting1() in TestDriver class
  • Look at compareTo() in Student
  • Look at use of comparator classes

14
Writing a Comparator Class
  • Example like one from MSD text, p. 647
  • We have a Dog class with name, breed and gender
  • Compare two doggies by breed and then
    namepublic class CmpDogByBreedAndName
    implementsComparator
  • public int compare(Object o1, Object o2)
  • Dog d1 (Dog) o1 Dog d2 (Dog) o2
  • int retVal d1.getBreed().compareTo(d2.getBre
    ed())
  • if ( retVal ! 0 ) return retVal
  • return d1.getName().compareTo( d2.getName()
    )

15
Use of Comparator methods
  • How to use with Collections.sort()
  • ArrayList dogList
  • Collections.sort( dogList, new CmpDogByName()
    )Collections.sort( dogList, new CmpDogByBreed()
    )
  • (Do you understand what new does here?)
  • Inside sort(), code looks something like this
  • sort ( List theList, Comparator cmpObj )
  • // in some loop Object item1
    list.get(i) Object item2 list.get(j)
    cmpResult cmpObj.compare(item1,item2)

16
End of Comparable/Comparator topics
  • Make sure you see slides on Abstraction
  • They relate to this material and what follows

17
(No Transcript)
18
Java Aside Anonymous Classes
  • Theres a Java technique called anonymous classes
  • One of several types of nested class definition
  • Youll very often see it in GUI programming
    (Swing) and with threads
  • Situation
  • Sometimes Javas design encourages us to create
    some thing that might be used just once
  • That thing needs to be wrapped up in a class, say
    because we need a function object
  • What couldnt we just declare it at the same
    place we use it? Why create a separate file?

19
Creating and Using an Anonymous Class
  • Example sort a list of Strings by their length
  • Collections.sort ( stringList, new Comparator()
    public int compare( Object o1, Object o2 )
    return ((String) o1).length() - ((String)
    o2).length()
  • )
  • Weve created a new Comparator on the fly
  • new creates a new instance, but what kind?
  • Some object that implements Comparator
  • Object not named, and its true class not named!
  • What must a Comparator have? compare()
  • We defined it right here, where its used!

20
Anonymous Classes Comments
  • Anonymous classes are unlike other classes
  • They have no name
  • Typically only implement methods in their
    interface or superclass. No new methods!
  • Since they have no name, can only define and use
    them at one point in your code!
  • Hard to understand at first? Sure!
  • Naming an abstraction is important for human
    understanding!
  • Sorting, a Collection, Comparing
  • Advice
  • Keep them very short (and simple)!
  • Be ready to understand them when you see them in
    Swing and with threads

21
Note on following slides
  • The summary or Big Picture slides that follow
    may not make complete sense until you know
    material on these slides and
  • Slides on abstraction
  • Slides on Sets and Maps
  • They are repeated at the end of those slide sets,
    too, but weve left them here just in case

22
Big Picture on Java Collections Unit
  • Java Collections Framework
  • A large collections of interfaces and classes
  • Includes things we can use as is (concrete
    classes) and building blocks for new things
    (abstract classes)
  • Classes that exist to contain static methods,
    e.g. Collections class (see also Arrays class)
  • Power of inheritance, interfaces, polymorphism
  • See how type Collection and List are used in
    parameter lists and in Collections class methods
    (e.g. sort)
  • Be aware of and start to use Java 5.0 generics
    with your collections

23
Big Picture on Java Collections Unit (2)
  • Iterators both concepts and the practice
  • Example of procedural abstraction (use, methods)
    anddata abstraction (whats really in a iterator
    object?)
  • Using these in Java for Collections, Lists
    (methods, cursor, etc.)
  • Procedural abstraction the concepts, examples
  • Function-objects and procedural abstraction
  • Encapsulating functionality or control in an
    object
  • Comparator objects (contrast to implementing
    Comparable interface)
  • Java trick anonymous classes

24
Big Picture on Java Collections Unit (3)
  • Java skills Concrete collection classes and
    methods for you to use
  • ArrayList and ListIterator
  • HashSet
  • Must over-ride hashCode()
  • Collections static methods
  • See JavaDoc or p 587 in MSD textbook
  • E.g. sort, reverse, binarySearch, fill, shuffle,
    min, max,
  • Implement Comparable for your collection items
  • Define Comparator classes for more powerful,
    flexible use
Write a Comment
User Comments (0)
About PowerShow.com