260 likes | 395 Views
CS 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@cs.yale.edu. Admin. Updated class schedule. Recap: Encapsulating Data.
E N D
CS 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@cs.yale.edu
Admin • Updated class schedule
Recap: Encapsulating Data Client can see only the external API Methods Client Data/state Client should not see the internal state or behaviors
Recap: 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
Ask, 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"
Recap: 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.
Examples: Set the Access Modifiers • Coin • Ball • BankAccount • Point
Coin - face : int + flip() : void + isHeads() : boolean + toString() : String Class Diagram class name attributes methods Above is a class diagram representing the Coin class. “-” indicates private data or method “+” indicates public data or method
Outline • Admin and recap • Defining classes • Motivation and basic syntax • Examples • The encapsulation principle • An OOP example: geomap visualization
Data 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.
Visualization based on Geography Classes?
Major Classes and Relationship m 1 m 2 1 1 1 m GeoMap Region Color A composition relationship An associationrelationship Polygon Point
Major Classes and Relationship GeoMap Region … Region String Polygon Color Color Point … Point
Major Classes and Relationship m 1 m 2 1 1 m 1 GeoMap Region Color A composition relationship An associationrelationship Polygon Design question: - Immutable objects? Point
Major Classes and Relationship m 1 m 2 1 1 m 1 GeoMap Region Color A composition relationship An associationrelationship Polygon Design question: - What is the basic controller (of GeoMap) structure? Point
Coloring Controller Structure • Retrieve region • Batch: retrieve list of all regions • Specific: retrieve one specific region • Coloring • Map properties of a region to a color
Major Classes and Relationship m 1 m 2 1 1 m 1 GeoMap Region Color A composition relationship An associationrelationship Polygon • Discussion: • Public methods (API) of Point Point
Major Classes and Relationship m 1 m 2 1 1 m 1 GeoMap Region Color A composition relationship An associationrelationship Polygon • Discussion: • Public methods (API) of Polygon Point
Polygon public class Polygon { private final int N; // number of boundary points private final Point[] points; // the points // read from input stream public Polygon(Scannerinput) { N = input.nextInt(); points = new Point[N+1]; for (int i = 0; i < N; i++) { points[i] = new Point ( input ); } points[N] = points[0]; } … public void draw() { … } public void fill() { … } public boolean contains(Point p) { … } public Point centroid() { … } … }
Major Classes and Relationship m 1 m 2 1 1 m 1 GeoMap Region Color A composition relationship An associationrelationship Polygon • Discussion: • Public methods (API) of Region Point
Q: Should Region have a method that returns its internal Polygon? Region 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() } … } Even though most complexity is in Polygon, Polygon is not exposed. Region delegates tasks internally to Polygon.
Example Controllers • GeoMap.java • RandomColorMap.java • ClickColorMap.java • RedBlueMap.java
Purple 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); }
Cartograms • Cartogram. Area of state proportional to number of electoral votes. Michael Gastner, Cosma Shalizi, and Mark Newman www-personal.umich.edu/~mejn/election
Cartograms • Cartogram. Area of country proportional to population.
Summary • 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