CSE115: Introduction to Computer Science I Dr. Carl Alphonce 219 Bell Hall Office hours: M-F 11:00-11:
Announcements Exam 3 on Wednesday 11/11 –covers material from last exam up to and including Friday 11/06 Review on Monday 11/09 Exercises: FA09-CSE115-Exercises project in LectureCode repository Review session? Interest level?
Conference Trip OOPSLA –Object Oriented Programs, Systems, Languages and Applications Ran workshop Interesting tutorials –Real-time Java deadlines, real-time threads, garbage collection strategies runs in standard Java Virtual Machine –Erlang OTP/Design Patterns distributed and concurrent programs runs in its own Virtual Machine
Interesting people Barbara Liskov (Turing Award Winner) Bjarne Stroustrupparasol.tamu.edu/people/bs/ Guy Steeleresearch.sun.com/people/mybio.php?uid=25706 Rebecca Mercuriwww.notablesoftware.com James Grenningwww.renaissancesoftware.net Take-home message: be a student volunteer if possible attend a conference before graduating attend conferences regularly after graduating (continuing education)
State systems State-based system: –system’s behavior based on its current state Many systems are state-based: –Cable/Satellite TV box –Wrist-watch –Cell phone interface
State Diagram OFFON push button
State Pattern example
Polymorphism Behavior determined by method of object, because… it’s the object that responds: –the type of the object determines response –the type of the reference to object doesn’t
Polymorphism declared type of variable a supertype of actual type of object
Proxy Pattern Polymorphism
Polymorphism (in proxy pattern) context delegates method call to concrete tool
State Pattern delegation
Delegation in State code public class DeskLamp { private IState _state; public DeskLamp() { _state = new Off(); } public void pushButton() { _state.pushButton(this); } public void setState(IState s) { _state = s; }
Proxy Pattern delegation
Delegation in Proxy code public class Proxy implements ISomething { private ISomthing _target; public Proxy(ISomething t) { _target = t; } public void methodA(X x, Y y, Z z) { _target.methodA(x, y, z); } public void methodB(R r, S s) { _target.methodB(r, s); } // and so on }