290 likes | 307 Views
Learn about objects, classes, and primitive types in Java programming, including syntax and semantics, state and behavior of objects, and the principles of code re-use and defining interfaces.
E N D
IAT 800 Lecture 5 Objects, Classes IAT 800
Today • Primitive types • byte, short, int, long • Object-oriented programming • objects • classes • sets (mutators) and gets (accessors) • object methods IAT 800
Primitive types • Primitive types are determined by machine architecture byte: 8bits reference: (JVM Dependent) short: 16bits int: 32bits long: 64bits float: 32bits double: 64bits IAT 800
Reference • Like a remote control • a reference is a primitive thing that points at objects • the new keyword causes the reference to point at a new instance of the object IAT 800
Arrays • int[] nums = new int[7] ; IAT 800
Array of objects • Dog[] pets = new Dog[7]; • It starts as an array of null references IAT 800
Array of objects Dog[] pets = new Dog[7] ; pets[0] = new Dog(); pets[1] = new Dog(); IAT 800
Objects IAT 800
Real Objects • Real-world objects have • State • Behavior • Bicycle • State • selected gear, current pedal cadence, speed • Behavior • Change Gear, Set Cadence, Apply Brakes IAT 800
Software Object • State int gear ; float speed ; float cadence ; • Behavior ChangeGears(int g); Brake( float level ); ChangeCadence( float c ); int GetGear(); float GetSpeed(); … IAT 800
Java directly supports Objects • Java has direct syntactic and semantic support for Objects Syntax: class Bicycle { private int cadence = 0; private int speed = 0; private int gear = 1; void changeCadence(int newValue) { cadence = newValue; } void changeGear(int newValue) { gear = newValue; } } IAT 800
Java directly supports Objects • Java has direct syntactic and semantic support for Objects Semantics: class Bicycle { private int cadence = 0; private int speed = 0; private int gear = 1; void changeCadence(int newValue) { cadence = newValue; } void changeGear(int newValue) { gear = newValue; } } Only these methods can read or write Bicycle private data IAT 800
Java Semantic support • Programming usually takes place with objects: ClockClass clock = new ClockClass(); clock.setSecond( 12 ); clock.setMinute( 18 ); clock.setHour( 3 ); IAT 800
Even Arrays are objects int[] bob = new int[10] ; bob[4] = 123 ; println( bob.size() ); Bicycle[] bikes = new Bicycle[10] ; bikes[0] = new Bicycle(); IAT 800
Sets and Gets • what can you do with private data? • to set it: setVarName( varType newValue) • to get it: varType getVarName() • Why? IAT 800
temperature object class temp { private float kelvin ; void setCelsius( float C ) { if( C < -273.15 ) return ; // perhaps an error message would be in order else kelvin = C + 273.15 ; } float getCelsius() { return( kelvin - 273.15 ); } void setKelvin( float k ) { if( k < 0 ) return ; else kelvin = k ; } } IAT 800
temperature object • Controls access • Ensures correctness • can only run a setXYZ() to change temp • can only do getXYZ() to get the value in the desired scale • Who cares? IAT 800
Who cares? • When you want to: • Solve the problem once and forget it • Reuse the solution elsewhere • Establish rules for use and change of data • The principle: • Information hiding • By interacting only with an object's methods, the details of its internal implementation remain hidden from the outside world. IAT 800
Principle: Code re-use • If an object already exists, you can use that object in your program. • Specialists build, you use IAT 800
Principle: Define the Interface • Define the interface: • The list of methods with Defined Operation • The interface is the thing that other people use • If you have the same interface with the same meaning • You can plug in a better implementation! IAT 800
Define the Interface • If you have the same interface with the same meaning • You can plug in a better implementation! • You can plug in a More Interesting implementation! IAT 800
Summary of principles • Hide unnecessary details • Clearly define the interface • Allow and support code re-use • Build on the work of others IAT 800
How do we build on other work? • Divide and conquer • Cut the problem into smaller pieces • Solve those smaller problems • Aggregate the smaller solutions • Two approaches: • Top-down • Bottom-up IAT 800
Top Down • Take the big problem • Cut it into parts • Analyze each part • Design a top-level solution that presumes you have a solution to each part • then… • Cut each part into sub-parts IAT 800
Bottom-up • Cut the problem into parts, then sub-parts, then sub-sub parts… • build a solution to each sub-sub-part • aggregate sub-sub solutions into a sub-solution IAT 800
How do we build on other work? • Recognize the problem as another problem in disguise • It’s a sorting problem! • It’s a search problem! • It’s a translation problem! • It’s an optimization problem! IAT 800
The challenge • Software design is typically done top-down • Software implementation is typically done bottom-up IAT 800