Download presentation
Presentation is loading. Please wait.
Published byRhoda Miller Modified over 9 years ago
1
95-712 Lecture 2: Object Oriented Programming 1 95-712 Object Oriented Programming Java Lecture 2: Object Oriented Programming
2
95-712 Lecture 2: Object Oriented Programming 2 Alan Kay’s Summary of OOP Everything is an object A program is a bunch of objects telling each other what to do by sending messages. Each object has its own memory made up of other objects. Every object has a type. All objects of a particular type can receive the same messages.
3
95-712 Lecture 2: Object Oriented Programming 3 Grady Booch Says Every object has state, behavior and identity. Consider the Light class that follows. Identify the state, behavior and identity.
4
4 public class Light { private int brightness; public Light() { brightness = 0; } public void on() { brightness = 10; } public void off() { brightness = 0; } public void brighten() { brightness = brightness + 5; } public void dim() { brightness = brightness - 5; if(brightness < 0) brightness = 0; } public int getBrightness() { return brightness; } The class has a name. Instances of the class will have private data. When an object is created the object’s constructor will run. Other objects will be able to send five messages to objects of this class. Private data is only available to members of the class. A class may have invariants - statements about internal object state that must always be true. So, how do we create an object? Save in file Light.java.
5
5 public class TestLight { public static void main(String params[]) { Light lt = new Light(); lt.on(); Light outside = new Light(); outside.on(); for(int k = 1; k <= 5; k++) { outside.brighten(); } A class that only has a main routine. Save it in TestLight.java. Create a Light object. Its constructor will run. Create a second Light object and run its constructor. “Please turn both lights on and brighten the outside light.” If Light.java and TestLight.java are both in the same directory then javac TestLight.java and java TestLight will do it all.
6
6 The Light Class has high cohesion. The class does one thing well but does not try to do too much. has access control. The private data is not directly accessible to users. may be used as a base class for inheritance or composition. Inheritance example: A ColoredLight is-a- kind-of Light… Inheritance Example: A LowPowerLight is-a Light… Composition example: A TrafficLight has three ColoredLights…
7
7 public class ColoredLight extends Light{ private int color; public static final int RED = 2; public static final int YELLOW = 1; public static final int GREEN = 0; public ColoredLight(int c) { color = c; } public int getColor() { return color; } public String display() { if(color == RED) return "RED"; if(color == YELLOW) return "YELLOW"; if(color == GREEN) return "GREEN"; return "Error"; } ColoredLight inherits all the features of Light. Save this in ColoredLight.java. Every ColoredLight object will have a brightness and a color. Before this constructor runs the base class constructor is run. There is no way to change the color after it has been set. A ColoredLight is-a-kind-of Light
8
95-712 Lecture 2: Object Oriented Programming 8 A LowPowerLight is-a Light public class LowPowerLight extends Light { public LowPowerLight() { } public void brighten() { brightness = brightness + 5; if(brightness > 20) brightness = 20; } “Is-a” means the exact same interface. For Eckel,” is-a-kind-of” means the derived class has additional methods. As is, this won’t work. The variable brightness, in the Light class, must be marked protected rather than private.
9
95-712 Lecture 2: Object Oriented Programming 9 public class TrafficLight { private ColoredLight bank[]; private int state; String direction; private static final int TOP = 2; private static final int MIDDLE = 1; private static final int BOTTOM = 0; The TrafficLight class uses composition to include three ColoredLights. Each TrafficLight object has a current state (describing which of three lights is on) and faces a direction. The values TOP, MIDDLE and BOTTOM are constants associated with this class.
10
95-712 Lecture 2: Object Oriented Programming 10 public TrafficLight(String direction) { this.direction = direction; bank = new ColoredLight[3]; bank[BOTTOM] = new ColoredLight(ColoredLight.GREEN); bank[BOTTOM].off(); bank[MIDDLE] = new ColoredLight(ColoredLight.YELLOW); bank[MIDDLE].off(); bank[TOP] = new ColoredLight(ColoredLight.RED); bank[TOP].off(); state = TOP; bank[TOP].on(); } Initially, only the top light is on. And the Traffic light is RED. This constructor allows the user to choose the direction of the traffic light. The constructor establishes an array of three lights. Each light is assigned a color and a location on the traffic light.
11
95-712 Lecture 2: Object Oriented Programming 11 public void change() { bank[state].off(); state = (state + 1) % 3; bank[state].on(); } public void display() { System.out.print(direction + " light "); System.out.print("["); for(int j = TOP; j >= BOTTOM; j--) { System.out.print("(" + bank[j].display() + ":" + bank[j].getBrightness() + ")"); } System.out.println("]"); } A call on the change method will cycle the light from RED to YELLOW to GREEN. The display method displays TrafficLight status.
12
95-712 Lecture 2: Object Oriented Programming 12 public class TrafficLightSimulator { public static void main(String cmdLineArgs[]) throws Exception { TrafficLight northSouth; TrafficLight eastWest; northSouth = new TrafficLight("North South"); eastWest = new TrafficLight("East West"); This class only has a static method. Control two lights.
13
95-712 Lecture 2: Object Oriented Programming 13 // allow north south traffic northSouth.change(); while(true) { // display light status eastWest.display(); northSouth.display(); Thread.sleep(10000); // halt north south and allow eastWest northSouth.change(); eastWest.change();
14
95-712 Lecture 2: Object Oriented Programming 14 // display light status eastWest.display(); northSouth.display(); Thread.sleep(10000); // halt east west and allow north south eastWest.change(); northSouth.change(); }
15
95-712 Lecture 2: Object Oriented Programming 15 GUI Example import java.awt.*; class MyFrame extends Frame { static int x = 0, y = 120; static int i = 0; static int horizScroll = 1; static int mess = 0; Font fb = new Font("TimesRoman", Font.BOLD, 36); String msg[] = { "Java", "Portable", "Secure", "Easy" }; Color color[] = { Color.blue, Color.yellow, Color.green, Color.red };
16
95-712 Lecture 2: Object Oriented Programming 16 public void paint(Graphics g) { g.setFont(fb); g.setColor( color[i]) ; g.drawString(msg[i],x, y); }
17
95-712 Lecture 2: Object Oriented Programming 17 static public void main(String s[]) throws Exception { MyFrame mf = new MyFrame(); mf.setSize(200,200); int pixelsPerLine = 200, totalLines = 4; mf.setVisible(true); for(int j = 0; j < pixelsPerLine * totalLines; j++) { Thread.sleep(25); mf.repaint(); if( horizScroll == 1) { if(( x += 3) < 200) continue; i = ++i % 4; x = 50; y = 0; horizScroll = 0; }
18
95-712 Lecture 2: Object Oriented Programming 18 else { if(( y += 3) < 200) continue; i = ++i % 4; x = 0; y = 120; horizScroll = 1; } System.exit(0); }
19
95-712 Lecture 2: Object Oriented Programming 19 Text moves left to right and then top to bottom.
20
95-712 Lecture 2: Object Oriented Programming 20 MyFrame.java Two Steps: javac MyFrame.java java MyFrame
21
21 Another Example - Using Java’s BigInteger Class import java.math.*; public class TestBigInts { public static void main(String args[] ) { BigInteger x = new BigInteger("1234567890123" + "45678901234567890"); BigInteger y = new BigInteger("93939393929292" + "9191919191919192"); BigInteger z = x.multiply(y); System.out.println(z); }
22
95-712 Lecture 2: Object Oriented Programming 22 Summary - Object-Oriented Programming Abstraction The focus is on “what” not “how”. Encapsulation Information hiding is used to promote modularity and the use of abstractions. Polymorphism We may want to treat an object not as an instance of its specific type but as an instance of its base type. Inheritance OOP promotes code reuse via the “is-a” relationship. Composition OOP promotes code reuse via the “has-a” relationship.
Similar presentations
© 2025 SlidePlayer.com. Inc.
All rights reserved.