Title: CS%20112%20Introduction%20to%20Programming
1CS 112 Introduction to Programming
- Design Good Classes Encapsulation and OOP
Analysis - Yang (Richard) Yang
- Computer Science Department
- Yale University
- 308A Watson, Phone 432-6400
- Email yry_at_cs.yale.edu
2Admin
3Recap Encapsulating Data
Client can see only the external API
Methods
Client
Data/state
Client should not see the internal state or
behaviors
4Recap Encapsulating Data
- Benefit
- Consistency so that it is impossible for others
to "reach in" and directly alter another object's
state - Flexibility so that you can change the state
representation later without worrying about
breaking others code
5Ask, Don't Touch
- Encapsulated data types.
- Don't touch data and do whatever you want.
- Instead, ask object to manipulate its data.
- Lesson. Limiting scope makes programs easier to
maintain and understand.
"Ask, don't touch."
Adele GoldbergFormer president of
ACMCo-developed Smalltalk
"principle of least privilege"
6Recap Encapsulation/How
- access modifiers enforce encapsulation
- public members (data and methods can be accessed
from anywhere - private members can be accessed from a method
defined in the same class - Members without an access modifier default
private accessibility, i.e., accessible in the
same package otherwise, not accessible.
7Examples Set the Access Modifiers
- Coin
- Ball
- BankAccount
- Point
8Class Diagram
class name
attributes
methods
Above is a class diagram representing the Coin
class. - indicates private data or method
indicates public data or method
9Outline
- Admin and recap
- Defining classes
- Motivation and basic syntax
- Examples
- The encapsulation principle
- An OOP example geomap visualization
10Data Visualization
If I can't picture it, I can't understand it.
Albert Einstein
Edward Tufte. Create charts with high data
density that tell the truth.
11Visualization based on Geography
Classes?
12Major Classes and Relationship
GeoMap
Region
Color
A composition relationship
An association relationship
Polygon
Point
13Major Classes and Relationship
GeoMap
Region
Region
String
Polygon
Color
Color
Point
Point
14Major Classes and Relationship
GeoMap
Region
Color
A composition relationship
An association relationship
Polygon
Design question - Immutable objects?
Point
15Major Classes and Relationship
GeoMap
Region
Color
A composition relationship
An association relationship
Polygon
Design question - What is the basic controller
(of GeoMap) structure?
Point
16Coloring Controller Structure
- Retrieve region
- Batch retrieve list of all regions
- Specific retrieve one specific region
- Coloring
- Map properties of a region to a color
17Major Classes and Relationship
GeoMap
Region
Color
A composition relationship
An association relationship
Polygon
- Discussion
- Public methods (API) of Point
Point
18Major Classes and Relationship
GeoMap
Region
Color
A composition relationship
An association relationship
Polygon
- Discussion
- Public methods (API) of Polygon
Point
19Polygon
public class Polygon private final int N
// number of boundary points private
final Point points // the points // read
from input stream public Polygon(Scanner
input) N input.nextInt()
points new PointN1 for (int i 0 i
lt N i) pointsi new Point (
input ) pointsN
points0 public void draw()
public void fill() public boolean
contains(Point p) public Point
centroid()
20Major Classes and Relationship
GeoMap
Region
Color
A composition relationship
An association relationship
Polygon
- Discussion
- Public methods (API) of Region
Point
21Region
Q Should Region have a method that returns its
internal Polygon?
public class Region private final String
regionName // name of region private final
String mapName private final Polygon poly
// polygonal boundary private Color
fillColor, drawColor public Region(String
mName, String rName, Polygon poly)
regionName rName mapName mName
this.poly poly setDefaultColor()
public void setDrawColor (Color c) drawColor
c public void draw() setDrawColor()
poly.draw () public void fill()
public boolean contains(Point p) return
poly.contains(p) public Point centroid()
return poly.centroid()
22Example Controllers
- GeoMap.java
- RandomColorMap.java
- ClickColorMap.java
- RedBlueMap.java
23Purple America (PurpleMap.java)
- Idea. Robert J. Vanderbei Assign color based
on number of votes. - a1 Rep. votes.
- a2 Other votes.
- a3 Dem. votes.
100 Rep
55 Dem, 45 Rep
100 Dem
100 Other
public Color getColor() int dem
tally.dem(), rep tally.rep(), ind
tally.ind() int tot tally.dem tally.rep
tally.ind return new Color((float) rep/tot,
(float) ind/tot, (float) dem/tot)
24Cartograms
- Cartogram. Area of state proportional to number
of electoral votes.
Michael Gastner, Cosma Shalizi, and Mark
Newman www-personal.umich.edu/mejn/election
25Cartograms
- Cartogram. Area of country proportional to
population.
26Summary
- Encapsulation is a key problem solving technique
for large, complex problems - A good way to learn more is to read about designs
of large-scale systems