03 1
play

03-1 Specialization "is a" Drawing Names and Objects A - PDF document

Composition: "has a" Classes and objects can be related in several ways One way: composition , aggregation , or reference Dog has-a owner, dog has legs, dog has collar, etc. CSE 143 Java In java: one object refers to


  1. Composition: "has a" • Classes and objects can be related in several ways • One way: composition , aggregation , or reference • Dog has-a owner, dog has legs, dog has collar, etc. CSE 143 Java • In java: one object refers to another object • via an instance variable public class Dog { Inheritance private String name; / // this dog's name private int age; //this dog's age private Person owner; // this dog's owner private Dog mother, father; // this dog’s parents Reading: Ch. 9, 14 private Color coatColor; //etc, etc. } • One can think of the dog as "composed" of various objects: "composition" 1/29/2003 (c) University of Washington 03-1 1/29/2003 (c) University of Washington 03-2 Picturing the Relationships Drawing Names and Objects • Names and objects • Dog Fido; //might be 6 years old, brown, owned by Marge, etc. • Very different things! • In general, names are applied to objects • Dog Apollo; //might be 2 years old, missing a leg, etc. • Objects can refer to other objects using instance variable names • In Java, it is a mistake to think of the parts of an object as being "inside" the whole. 6 Fido an object of Fido (a name) type Dog another object of type Dog age (instance legs refers to name var. name) mother (instance owner color var. name) 1/29/2003 (c) University of Washington 03-3 1/29/2003 (c) University of Washington 03-4 03-1

  2. Specialization – "is a" Drawing Names and Objects • A name might not refer to any object • Specialization relations can form classification hierarchies • One object might have more than one name • cats and dogs are special kinds of mammals; anonymous object of type mammals and birds are special kinds of animals; • i.e., might be more than one reference to it Dog animals and plants are special kinds of living things • An object might not have any name • lines and triangles are special kinds of polygons; • “anonymous” rectangles, ovals, and polygons are special kinds of shapes • Keep in mind: Specialization is not the same as composition 6 an object of • A cat "is-an" animal vs. a cat "has-a" tail Fido type Dog another object of type Dog refers to age MyDoggie mother Fifi 1/29/2003 (c) University of Washington 03-5 1/29/2003 (c) University of Washington 03-6 "is-a" in Programming Inheritance • Classes &/or interfaces can be related via specialization • Java provides direct support for “is-a” relations • one class/interface is a special kind of another class/interface • likewise C++, C#, and other object-oriented languages • Rectangle class is a kind of Shape • Class inheritance • So far, we have seen one Java technique to capture this • one class can inherit from another class, idea: interfaces meaning that it's is a special kind of the other • Terminology • Java interfaces are one special case of a more general design approach: Inheritance • Original class is called the base class or superclass • Specializing class is called the derived class or subclass 1/29/2003 (c) University of Washington 03-7 1/29/2003 (c) University of Washington 03-8 03-2

  3. Inheritance: The Main Programming Facts B extends A • Subclass inherits all instance variables and methods of the inherited class A A's stuff • All instance variables and methods of the superclass are automatically part of the subclass • Constructors are a special case (later) • Subclass can add additional methods and instance variables • Subclass can provide different versions of inherited A's stuff is B methods automatically A's stuff part of B B's stuff B's stuff 1/29/2003 (c) University of Washington 03-9 1/29/2003 (c) University of Washington 03-10 Example: Representing Animals Interfaces vs. Class Inheritance • Generic Animal • An interface is a simple form of inheritance public class Animal { • If B implements interface A, then B inherits the stuff in A private int numLegs ; (which is nothing but the method signatures of B) /** Return the number of legs */ • If B extends class A, then B inherits the stuff in A (which can public int getNumLegs ( ) { include method code and instance variables) return this.numLegs; } • To distinguish the two, people sometimes say “interface inheritance” vs. “class inheritance”. /** Return the noise this animal makes */ public String noise ( ) { • What if you heard the phrase “code inheritance”? return "?"; } } 1/29/2003 (c) University of Washington 03-11 1/29/2003 (c) University of Washington 03-12 03-3

  4. Specific Animals Cat extends Animal / Dog extends Animal • Cats • Dogs public class Cat extends Animal { public class Dog extends Animal { Animal Animal's stuff // inherit numLegs and getNumLegs () // inherit numLegs and getNumLegs () // additional inst. vars and methods // additional inst. vars and methods …. …. /** Return the noise a cat makes */ /** Return the noise a dog makes */ Animal's public String noise ( ) { public String noise ( ) { Animals's stuff return “meow"; return “WOOF!!"; Cat stuff Dog } } Cat's stuff } } Dog's stuff 1/29/2003 (c) University of Washington 03-13 1/29/2003 (c) University of Washington 03-14 More Java Never to be Forgotten If class D extends B /inherits from B... If class D extends/inherits from B... • Class D inherits all methods and fields from class B • But... "all" is too strong Every object of type D is also • constructors are not inherited an object of type B • same is true of static methods and static fields although these static members are still available in the subclass • Class D may contain additional (new) methods and fields • But has no way to delete any • a D can do anything that a B can do (because of inheritance) • a D can be used in any context where a B is appropriate 1/29/2003 (c) University of Washington 03-15 1/29/2003 (c) University of Washington 03-16 03-4

  5. Method Overriding Polymorphism • If class D extends B, class D may provide an alternative , • Polymorphic : "having many forms" replacement implementation of any method it would • A variable that can refer to objects of different types is said otherwise inherit from B to be polymorphic • The definition in D is said to override the definition in B • Methods with polymorphic arguments are also said to be polymorphic public void speak(Animal a) { • An overriding method cannot change the number of System.out.println(a.noise( )); arguments or their types, or the type of the result [why?] } • can only provide a different body • Polymorphic methods can be reused for many types • Can you override an instance variable? • Not exactly... ask me in person if you're really curious 1/29/2003 (c) University of Washington 03-17 1/29/2003 (c) University of Washington 03-18 Static and Dynamic Types Dynamic Dispatch • With polymorphism, we can distinguish between • "Dispatch" refers to the act of actually placing a method in • Static type: the declared type of the variable (fixed during execution) execution at run-time • Dynamic type: the run-time class of the object the variable currently refers to (can change as program executes) • When types are static, the compiler knows exactly what method must execute. public String noise() { // this has static type Animal ... • When types are dynamic... the compiler knows the name of } the method – but there could be ambiguity about which Cat foofoo = new Cat( ); version of the method will actually be needed at run-time. foofoo.noise (foofoo); //inside noise(), this has dynamic type Cat • In this case, the decision is deferred until run-time, and we refer to it as dynamic dispatch Dog fido = new Dog( ); foofoo.noise (fido); // inside noise(), this has dynamic type Dog 1/29/2003 (c) University of Washington 03-19 1/29/2003 (c) University of Washington 03-20 03-5

  6. Summary Method Lookup: How Dynamic Dispatch Works • When a message is sent to an object, the right method to invoke is the • Object-oriented programming is hugely important one in the most specific class that the object is an instance of • Lots of new concepts and terms • Makes sure that method overriding always has an effect • Lots of new programming and modeling power • Method lookup (a.k.a. dynamic dispatch ) algorithm: • Used more and more widely • Start with the run-time class of the receiver object (not the static type!) • Ideas (so far!) • Search that class for a matching method • If one is found, invoke it • Composition ("has a") vs. specialization ("is a") • Otherwise, go to the superclass, and continue searching • Inheritance • Example: • Method overriding Animal a = new Cat( ); • Polymorphism, static vs. dynamic types System.out.println(a.noise( )); • Method lookup, dynamic dispatch a = new Dog( ); System.out.println(a.getNumLegs( )); 1/29/2003 (c) University of Washington 03-21 1/29/2003 (c) University of Washington 03-22 03-6

Download Presentation
Download Policy: The content available on the website is offered to you 'AS IS' for your personal information and use only. It cannot be commercialized, licensed, or distributed on other websites without prior consent from the author. To download a presentation, simply click this link. If you encounter any difficulties during the download process, it's possible that the publisher has removed the file from their server.

Recommend


More recommend