cs425 lecture 8 jan m. allbeck. announcements next few classes in robinson 203b no == (floating...

26
CS425 Lecture 8 Jan M. Allbeck

Upload: arlene-wade

Post on 29-Dec-2015

220 views

Category:

Documents


4 download

TRANSCRIPT

Page 1: CS425 Lecture 8 Jan M. Allbeck. Announcements  Next few classes in Robinson 203B  No == (floating point comparison)  EA Information session, tomorrow

CS425 Lecture 8

Jan M. Allbeck

Page 2: CS425 Lecture 8 Jan M. Allbeck. Announcements  Next few classes in Robinson 203B  No == (floating point comparison)  EA Information session, tomorrow

Announcements Next few classes in Robinson 203B No == (floating point comparison) EA Information session, tomorrow at 1:30, Center

for Arts, Grand Tier III Got Game?

Game design competition Mason athletics Flash More to come

Game Design?

Page 3: CS425 Lecture 8 Jan M. Allbeck. Announcements  Next few classes in Robinson 203B  No == (floating point comparison)  EA Information session, tomorrow

Polymorphism Extend a superclass to modify or extend

behavior Write an algorithm for a generic class

and have it apply to all subclasses Make a data structure for a generic

class

Page 4: CS425 Lecture 8 Jan M. Allbeck. Announcements  Next few classes in Robinson 203B  No == (floating point comparison)  EA Information session, tomorrow

Inheritance In Java

Every class had exactly one superclass Abstract classes and abstract methods Implementing multiple interfaces

In C++ No interfaces Multiple inheritance of classes

Page 5: CS425 Lecture 8 Jan M. Allbeck. Announcements  Next few classes in Robinson 203B  No == (floating point comparison)  EA Information session, tomorrow

Inheritance Java:

public class A extends B {…} public class A implements C, D {…}

C++: class A : public B {…}; class A : public C, public D {…};

Page 6: CS425 Lecture 8 Jan M. Allbeck. Announcements  Next few classes in Robinson 203B  No == (floating point comparison)  EA Information session, tomorrow

Overriding Methodsclass A{public:void bla() {std::cout << “bla” << std::endl;}

};

class B : public A{public:void bla(){std::cout << “quack” << std::endl;}

};

int main(int argc, char** argv){A* a = new B;a->bla();

}

We might expect it to output “quack” but …

Page 7: CS425 Lecture 8 Jan M. Allbeck. Announcements  Next few classes in Robinson 203B  No == (floating point comparison)  EA Information session, tomorrow

Dynamic vs. Static Binding Methods are not inherently dynamically bound

in C++ What method to run is based on the

static/compile time type (A) We might want it to deal with the

runtime/dynamic type (B)

Page 8: CS425 Lecture 8 Jan M. Allbeck. Announcements  Next few classes in Robinson 203B  No == (floating point comparison)  EA Information session, tomorrow

Virtual methodsclass A{

public:virtual void bla() {std::cout << “bla” << std::endl;}

};

Make a method virtual and C++ knows to determine what method to execute based on the dynamic type.

Page 9: CS425 Lecture 8 Jan M. Allbeck. Announcements  Next few classes in Robinson 203B  No == (floating point comparison)  EA Information session, tomorrow

How? The vtable The vtable stores pointers to a class’s

virtual methods, resolved at runtime So why is this not the default? Drawback: requires an extra

dereference and some overhead

Flexibility is worth it

Page 10: CS425 Lecture 8 Jan M. Allbeck. Announcements  Next few classes in Robinson 203B  No == (floating point comparison)  EA Information session, tomorrow

Pure Virtual Methods No formal abstract class in C++ Implicitly created when you have a pure

virtual method Declare an “abstract” method:

virtual void bla = 0; Implementation is required in subclasses that

you want to instantiate.

Page 11: CS425 Lecture 8 Jan M. Allbeck. Announcements  Next few classes in Robinson 203B  No == (floating point comparison)  EA Information session, tomorrow

Pure virtual methodsclass A{

public:

virtual void bla() = 0;

};

class B : public A{

public:

void bla(){std::cout<<"quack"<<std::endl;}

};

A is abstract and cannot be instantiated, but B can be.

Page 12: CS425 Lecture 8 Jan M. Allbeck. Announcements  Next few classes in Robinson 203B  No == (floating point comparison)  EA Information session, tomorrow

Virtual DestructorsA* a = new B();

delete a;

It’s generally a good idea to have a virtual destructor; even if it does nothing.

~A() What happens

none no destructor is called (even if B has one)

non-virtual only A’s destructor will be called

virtual both destructors get called

Page 13: CS425 Lecture 8 Jan M. Allbeck. Announcements  Next few classes in Robinson 203B  No == (floating point comparison)  EA Information session, tomorrow

A Common Supertype In Java, everything was an Object

You could always say… Object o = new Anything();

In C++, there’s no equivalent hierarchy void * can point to anything however

Page 14: CS425 Lecture 8 Jan M. Allbeck. Announcements  Next few classes in Robinson 203B  No == (floating point comparison)  EA Information session, tomorrow

Why public A? By sub-classing A via “class B: public A{…}”,

we allow all of A’s public members to be public in B.

We can restrict this via private and protected to prevent public members from being called.

Page 15: CS425 Lecture 8 Jan M. Allbeck. Announcements  Next few classes in Robinson 203B  No == (floating point comparison)  EA Information session, tomorrow

Parent’s Constructor In Java

super(); super(parameters);

In C++ A::A():parent(){…} A::A(int i):parent(i){…}

We can also initialize instance variables using this syntax in C++.

Page 16: CS425 Lecture 8 Jan M. Allbeck. Announcements  Next few classes in Robinson 203B  No == (floating point comparison)  EA Information session, tomorrow

Multiple Inheritance No interfaces because C++ supports multiple

inheritance class A: public B, public C {…}; Useful, but potentially problematic

Page 17: CS425 Lecture 8 Jan M. Allbeck. Announcements  Next few classes in Robinson 203B  No == (floating point comparison)  EA Information session, tomorrow

Diamond Problem

class Person{…};

class Terminator:public Person{…};

class Governor:public Person{…};

class Governator: public Terminator, public Governor {…};

Page 18: CS425 Lecture 8 Jan M. Allbeck. Announcements  Next few classes in Robinson 203B  No == (floating point comparison)  EA Information session, tomorrow

Which Method?

In a situation like this, if both Terminator and Governor have overridden a method in Person, there will be some ambiguity in a Governator’s behavior.

Page 19: CS425 Lecture 8 Jan M. Allbeck. Announcements  Next few classes in Robinson 203B  No == (floating point comparison)  EA Information session, tomorrow

Slicing ProblemA a = B()

Space for A Space for inherited A members

Extra B members

Page 20: CS425 Lecture 8 Jan M. Allbeck. Announcements  Next few classes in Robinson 203B  No == (floating point comparison)  EA Information session, tomorrow

Teams of 3 Email me by Friday, Nov. 6th or I’ll assign the

groups. Break up tasks Document who is responsible for each task Make an integration plan

Subversion Plan to demo your individual components Document choices If there are problems, try to work them out,

but also let me know.

Page 21: CS425 Lecture 8 Jan M. Allbeck. Announcements  Next few classes in Robinson 203B  No == (floating point comparison)  EA Information session, tomorrow

Randy Pausch’s Tips for Working Successfully in a Group Meet people properly.

It all starts with the introduction. Then, exchange contact information, and make sure you know how to pronounce everyone’s names. Exchange phone #s, [email addresses] and find out what hours are acceptable to call during.

Find things you have in common. You can almost always find something in common with

another person, and starting from that baseline, it’s much easier to then address issues where you have differences. This is why cities like professional sports teams, which are socially galvanizing forces that cut across boundaries of race and wealth. If nothing else, you probably have in common things like the weather.

Page 22: CS425 Lecture 8 Jan M. Allbeck. Announcements  Next few classes in Robinson 203B  No == (floating point comparison)  EA Information session, tomorrow

Make meeting conditions good. Have a large surface to write on, make sure the room is

quiet and warm enough, and that there aren’t lots of distractions. Make sure no one is hungry, cold, or tired. Meet over a meal if you can; food softens a meeting. That’s why they "do lunch" in Hollywood.

Let everyone talk. Even if you think what they’re saying is stupid. Cutting

someone off is rude, and not worth whatever small time gain you might make. Don’t finish someone’s sentences for him or her; they can do it for themselves. And remember: talking louder or faster doesn’t make your idea any better.

Check your egos at the door. When you discuss ideas, immediately label them and

write them down. The labels should be descriptive of the idea, not the originator: "the troll bridge story," not "Jane’s story."

Page 23: CS425 Lecture 8 Jan M. Allbeck. Announcements  Next few classes in Robinson 203B  No == (floating point comparison)  EA Information session, tomorrow

Praise each other. Find something nice to say, even if it’s a stretch. Even

the worst of ideas has a silver lining inside it, if you just look hard enough. Focus on the good, praise it, and then raise any objections or concerns you have about the rest of it.

Put it in writing. Always write down who is responsible for what, by

when. Be concrete. Arrange meetings by email, and establish accountability. Never assume that someone’s roommate will deliver a phone message. Also, remember that "politics is when you have more than 2 people" – with that in mind, always CC (carbon copy) any piece of email within the group, or to me, to all members of the group. This rule should never be violated; don’t try to guess what your group mates might or might not want to hear about.

Page 24: CS425 Lecture 8 Jan M. Allbeck. Announcements  Next few classes in Robinson 203B  No == (floating point comparison)  EA Information session, tomorrow

Be open and honest. Talk with your group members if there’s a problem, and talk with

me if you think you need help. The whole point of this course is that it’s tough to work across cultures. If we all go into it knowing that’s an issue, we should be comfortable discussing problems when they arise -- after all, that’s what this course is really about. Be forgiving when people make mistakes, but don’t be afraid to raise the issues when they come up,

Avoid conflict at all costs. When stress occurs and tempers flare, take a short break. Clear

your heads, apologize, and take another stab at it. Apologize for upsetting your peers, even if you think someone else was primarily at fault; the goal is to work together, not start a legal battle over whose transgressions were worse. It takes two to have an argument, so be the peacemaker.

Phrase alternatives as questions. Instead of "I think we should do A, not B," try "What if we did A,

instead of B?" That allows people to offer comments, rather than defend one choice.

Page 25: CS425 Lecture 8 Jan M. Allbeck. Announcements  Next few classes in Robinson 203B  No == (floating point comparison)  EA Information session, tomorrow

Some of what I’ll be looking for… DOCUMENTATION Navigation Different NPCs

Robots Hostages Hostiles

Different actions Walk, pick up, detonate, freeze, etc

Different AIs Player interface Object oriented design Interesting environment: layout and objects Integration/group work Impression of work put in (ask for help if you just stuck) Playable, fun Extras/polish

Page 26: CS425 Lecture 8 Jan M. Allbeck. Announcements  Next few classes in Robinson 203B  No == (floating point comparison)  EA Information session, tomorrow

Calendar11/10 Player interfaces or Physics

Group meeting

11/17 Physics or something else

Group meeting

11/24 Class debugging

Group meeting

12/1 Demos I

12/8 Demos II

Review for final

12/15 Final