Lecture 14 introduction to classes and objects
This presentation is the property of its rightful owner.
Sponsored Links
1 / 36

Lecture 14: Introduction to Classes and Objects PowerPoint PPT Presentation


  • 99 Views
  • Uploaded on
  • Presentation posted in: General

Lecture 14: Introduction to Classes and Objects. CS201. Abstraction. Some definitions of Abstract (adjective): Considered apart from any application to a particular object; removed from; apart from; separate ; abstracted .  

Download Presentation

Lecture 14: Introduction to Classes and Objects

An Image/Link below is provided (as is) to download presentation

Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author.While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server.


- - - - - - - - - - - - - - - - - - - - - - - - - - E N D - - - - - - - - - - - - - - - - - - - - - - - - - -

Presentation Transcript


Lecture 14 introduction to classes and objects

Lecture 14:Introduction to Classes and Objects

CS201


Abstraction

Abstraction

Some definitions of

Abstract (adjective):

  • Considered apart from any application to a particular object; removed from; apart from; separate; abstracted.  

  • Apart from practice or reality; not concrete; ideal; vague; theoretical; impersonal.

  • (art) Free from representational qualities.

  • (logic) General (as opposed to particular).  

  • Synonyms

    • (not applied or practical): conceptual, theoretical

    • (insufficiently factual): formal

      - Source: Wiktionary


Abstraction1

Abstraction

  • Abstraction can be multi-layered

    • A manhole cover is a round thing that covers a manhole to prevent people from falling in

    • A round thing is a physical object that has the quality of being round

    • Round means “in the shape of a circle”

    • A circle is a geometric shape defined by a set of points which are equidistant from the center

    • Why are manhole covers round?


Abstraction2

Abstraction

Abstraction is a key concept in programming

Programmers sometimes use the word “abstract” as a transitive verb meaning “to create an abstraction of,” as well as the more common English usage of “abstract” as an adjective


Object oriented programming

Object Oriented Programming

The coding we have done so far is procedural programming

OOP is built on the foundation of procedural programming

Object Oriented Programming is the current state of the art in creating modular code

CS202 will focus on OOP


Objects

Objects

  • Objects contain both data and methods that are designed to work on the object’s data

  • In Java, objects are instances of classes

  • Classes are more abstract than objects

    • A class defines the data types and methods for objects

    • An object contains data


Account class

Account Class

public class Account {

protected double balance;

protected Customer customer;

public Account( Customer customerIn, double amount ) {

customer = customerIn;

balance = amount;

}

public void deposit( double amount ) {

balance += amount;

}

public double withdraw( double amount ) {

if (balance >= amount) {

balance -= amount;

return amount;

}

else return 0.0;

}

public double getbalance() {

return balance;

}

}


Classes

Classes

  • We create an object by instantiating a class

  • You have already done this with code like this:

    • Classname objectname = new Classname()

    • For example,

      • Scanner sc = new Scanner();


Static vs nonstatic methods

Static vsNonStatic Methods

  • Static methods like main() can be run using the class code without instantiating an object

  • All other methods can be run only as methods of objects instantiated from the class:

    • sc.nextDouble();


Classes1

Classes

public class Archimedes{

public static void main(String[] args){

Archimedes arch = new Archimedes();

arch.sayHi();

}

private void sayHi(){

System.out.println("HI!");

}

}


Constructors

Constructors

  • Constructors are methods that populate data fields or does other work when an object is created

  • Every class has a default constructor that takes no parameters and doesn’t do anything

  • You can also write your own constructors

  • Method header looks like this:

    public ClassName(parameters){}

  • A class may have more than one constructor (“constructor overloading”)

  • By convention, constructors are the first methods listed in a class.


Constructors1

Constructors

public class Archimedes{

private String message;

public Archimedes(String messageIn){

message = messageIn;

}

public static void main(String[] args){

Archimedes arch = new Archimedes("Hi!");

arch.say();

}

private void say(){

System.out.println(message);

}

}


Why don t we just use static methods for everything

Why don’t we just use static methods for everything?

public class Clone{

private String name;

public Clone(String nameIn){

name = nameIn;

}

public static void main(String[] args){

Clone bob = new Clone("Bob");

Clone joe = new Clone("Joe");

Clone mary = new Clone("Mary");

bob.greet();

joe.greet();

mary.greet();

}

private void greet(){

System.out.println("Hi, my name is " + name);

}

}


More on static methods and data

More on Static Methods and Data

Static data fields are controlled by the class, not the object.

Static fields will be the same for all instances of a class at any point during runtime


More on static methods and data1

More on Static Methods and Data

public class Borg{

private String name;

private static int borgCount;

public Borg(String nameIn){

name = nameIn;

borgCount += 1;

}

public void stateName(){

System.out.println(name + " of " + borgCount);

}

public static void main(String[] args){

int max = 9;

borgCount = 0;

Borg[] borgs = new Borg[max];

for(int counter = 0; counter < max; counter++){

String name = String.valueOf(counter);

borgs[counter] = new Borg(name);

}

for(int counter = 0; counter < max; counter++){

borgs[counter].stateName();

}

}

}


Tostring

toString()

Every class has a built in method called toString()

If you call a print method on a class without further specification, you will see the return value of toString()

The default method is often not very useful


Default tostring

Default toString()

public class Clone{

private String name;

public Clone(String nameIn){

name = nameIn;

}

public static void main(String[] args){

Clone bob = new Clone("Bob");

Clone joe = new Clone("Joe");

Clone mary = new Clone("Mary");

System.out.println(bob);

System.out.println(joe);

System.out.println(mary);

}

}


Custom tostring

Custom toString()

You can write your own toString() methods to provide more useful information:

public class Clone{

private String name;

public Clone(String nameIn){

name = nameIn;

}

public static void main(String[] args){

Clone bob = new Clone("Bob");

Clone joe = new Clone("Joe");

Clone mary = new Clone("Mary");

System.out.println(bob);

System.out.println(joe);

System.out.println(mary);

}

public String toString(){

return name + " is here!";

}

}


Multi class apps

Multi-Class Apps

Real Object-oriented apps usually combine many classes

Classes can be related in various ways


Multi class apps1

Multi-Class Apps

Composition = a relationship in which an object or class contains other objects or classes

This is often explained as a “Has A” relationship

You have already seen this in the case of classes that contain Strings

A Family class might contain references to instances of the Child class


Multi class apps2

Multi-Class Apps

public class Child{

private String name;

public Child(String nameIn){

name = nameIn;

}

public void doTask(inttaskNum){

switch(taskNum){

case 0:

playLoudMusic();

break;

case 1:

crashCar();

break;

case 2:

makeMomGrouchy();

break;

}

}

public void playLoudMusic(){

System.out.println(name + "'s stereo goes boom bam thump bubaa");

}

public void crashCar(){

System.out.println(name + " wrecked the car");

}

public void makeMomGrouchy(){

System.out.println("Mom had a fight with " + name + ". Now she has a headache");

}

public String toString(){

return name;

}

}


Multi class apps3

Multi-Class Apps

public class Family{

private String name;

private Child[] kids;

public Family(String nameIn, String[] kidsNames){

name = nameIn;

kids = new Child[kidsNames.length];

for(int counter = 0; counter < kidsNames.length; counter++)

kids[counter] = new Child(kidsNames[counter]);

}

public static void main(String[] args){

String[] kidsNames = {"Sue", "Bill", "Carla", "Dan"};

Family family = new Family("the Smiths", kidsNames);

family.live(365);

}

public void live(int days){

inttaskNum = 0;

for(int counter = 0; counter < days; counter++){

System.out.println("\nDay " + counter);

intchildNum = counter % kids.length;

kids[childNum].doTask(taskNum%3);

taskNum++;

}

}

public String toString(){

return "Welcome to the " + name + "' house";

}

}


Multi class apps4

Multi-Class Apps

Note that, when you compile the first class in an app from the command line, it will compile all classes it can find in a chain of references

If class a refers to class b, but b does not have a reference to a, it is easier for you to compile a first.


Private and public

Private and Public

  • The private and public keywords are called visibility modifiers

  • Public data may be accessed directly by any object that has a reference to the current object

    • This means that any other object can change your data in any way that seems appropriate to whoever wrote it

      • This leads to unpredictable behavior, because programmers are almost as crazy as users

  • In OOP, data is hardly ever public. Instead we use private or protected data and manipulate it with public methods. This lets the author of the class control what can be done to the class data

  • This is the first form you have encountered of encapsulation, which is a key concept in OOP


Private and public1

Private and Public

  • Control the ways your data can be accessed or changed by using public methods.

    public class TeamScore{

    private int score = 0;

    public void fieldGoal(){

    score += 3;

    }

    public void touchdown(){

    score += 6;

    }

    public void extraPoint(){

    score += 1;

    }

    public void safety(){

    score += 2;

    }

    public intgetScore(){

    return score;

    }

    public String toString(){

    return Integer.valueOf(score).toString();

    }

    }

  • Score is private, but we can change it with public methods.

  • We can control the possible changes because they can only be executed using methods we wrote, not by any logic in any other class.


Private and public2

Private and Public

  • Private methods and data may be used only by the object itself

    public class VanGogh{

    private void chop(){

    Ears -= 1;

    }

    }


Packages

Packages

Java classes are often organized into packages


Packages1

Packages

Java classes are often organized into packages


Package private

Package Private

The default visibility is package private

Package private data and methods are visible to any object of a class defined in the package


Getters and setters

Getters and Setters

Getters and Setters provide public access to private variables

Setters are also called mutators by fancy people

It is conventional in Java to use private data even if you are going to provide full access through public getters and setters

Getter method names start with get and use camel case, eg getScore(), even though the variable names themselves are conventionally not capitalized


Getters and setters1

Getters and Setters

  • The keyword this is a reference to the current object. It has many uses; the first one is in setters when the parameter is given the same name as the field in the class. You need to understand this usage, but if you find it confusing, jJust use a different name for the parameter in the method signature.

    private String lastName;

    private int heightInCm;

    public String getLastName(){

    return lastName;

    }

    public void setHeightInCm(int heightInCmIn){

    if(heightInCmIn <= 229 && heightInCmIn > 45) heightInCm = heightInCmIn;

    Else….

    }


Reference

Reference

You have already seen how objects are passed to methods; by passing a reference variable

If data changes in an object, you will see the changes from anywhere where you have a reference to the object


Reference1

Reference

public class Child{

private String name;

public StringBuilder permanentRecord;

public Child(String nameIn){

name = nameIn;

permanentRecord = new StringBuilder();

}

public void doTask(int taskNum){

switch(taskNum){

case 0:

playLoudMusic();

break;

case 1:

crashCar();

break;

case 2:

makeMomGrouchy();

break;

}

}

public void playLoudMusic(){

System.out.println(name + "'s stereo goes boom bam thump bubaa");

}

public void crashCar(){

System.out.println(name + " wrecked the car");

}

public void makeMomGrouchy(){

System.out.println(name + " gave Mom a headache.");

}

public String toString(){

return name;

}

public void putDownInPermanentRecord(String offense){

permanentRecord.append("\n" + offense);

}

public String getPermanentRecord(){

return permanentRecord.toString();

}

public String getName(){return name;}

}


Reference2

Reference

public class Family{

private String name;

private Child[] kids;

public Family(String nameIn, String[] kidsNames){

name = nameIn;

kids = new Child[kidsNames.length];

for(int counter = 0; counter < kidsNames.length; counter++)

kids[counter] = new Child(kidsNames[counter]);

}

public void callSchool(){

AssistantPrincipal norm = new AssistantPrincipal(kids);

readPermanentRecords();

}

public String toString(){

return "Welcome to the " + name + "s' house";

}

public void readPermanentRecords(){

System.out.println("================= Permanent Records ====================");

for(Child child: kids) System.out.println(child.getName() + "'s permanent Record: " + child.getPermanentRecord());

}

public static void main(String[] args){

String[] kidsNames = {"Sue", "Bill", "Carla", "Dan"};

Family family = new Family("the Smiths", kidsNames);

family.callSchool();

}

}


Reference3

Reference

public class AssistantPrincipal{

public AssistantPrincipal(Child[] school){

if(school.length > 0)

school[0].putDownInPermanentRecord (“runs with bad crowd");

if(school.length > 1)

school[1].putDownInPermanentRecord("aggravated malice");

if(school.length > 2)

school[2].putDownInPermanentRecord("gambling during class");

if(school.length > 3)

school[3].putDownInPermanentRecord("general disorderliness");

if(school.length > 3)

school[3].putDownInPermanentRecord(“bad attitude)”;

}

public void putDownInPermanentRecord(Child child, String offense){

child.putDownInPermanentRecord(offense);

}

}


Definition state

Definition: State

  • State is the configuration of data at one point in time

  • An object’s state is the set of values of its data fields at one instant


  • Login