Presentation is loading. Please wait.

Presentation is loading. Please wait.

Dynamic Object-Oriented Programming with Smalltalk 1. Introduction Prof. O. Nierstrasz Summer Semester 2006.

Similar presentations


Presentation on theme: "Dynamic Object-Oriented Programming with Smalltalk 1. Introduction Prof. O. Nierstrasz Summer Semester 2006."— Presentation transcript:

1 Dynamic Object-Oriented Programming with Smalltalk 1. Introduction Prof. O. Nierstrasz Summer Semester 2006

2 © Oscar Nierstrasz ST — xxx X.2 What you should know!  How does Smalltalk differ from Java or C++?  Where are Smalltalk programs stored?  Where are objects stored?  What was the Dynabook?  Is a class an object?  What is dynamic binding?  What is the difference between a message and a method?

3 © Oscar Nierstrasz ST — xxx X.3 Can you answer these questions?  What ideas did Smalltalk take from Simula? From Lisp?  Is there anything in Smalltalk which is not an object?  What exactly is stored in the changes file?  If objects have private state, then how can an Inspector get at that state?  How do you create a new class?  What is the root of the class hierarchy?  If a class is an object, then what is its class?The class of its class? …  If you don’t know, how would you find out?

4 2. Smalltalk Basics

5 © Oscar Nierstrasz ST — xxx X.5 What you should know!  How can you indicate that a method is “private”?  What is the difference between a comment and a string?  Why does 1+2*3 = 9?  What is a cascade?  How is a block like a lambda expression?  How do you create a new class?  How do you inspect an object?

6 © Oscar Nierstrasz ST — xxx X.6 Can you answer these questions?  Why does Smalltalk support single (and not multiple) inheritance?  Is the cascade strictly necessary?  Why do you need to declare local variables if there are no static types?  How can you discover the class of GUI object?  How does SUnit differ from JUnit?

7 3. Standard Classes

8 © Oscar Nierstrasz ST — xxx X.8 What you should know!  How are abstract classes defined in Smalltalk?  What’s the difference between a String and a Symbol?  Where are class names stored?  What is the difference between self and super?  Why do we need Blocks?  How is a Block like a lambda?  How would you implement Boolean>>and:?  What does inject:into: do?

9 © Oscar Nierstrasz ST — xxx X.9 Can you answer these questions?  How are Numbers represented internally?  Is it an error to instantiate an abstract class in Smalltalk?  Why isn’t the assignment operator considered to be a message?  What happens if you send the message #new to Boolean? To True or False?  Is nil an object? If so, what is its class?  Why does ArrayedCollection>>add: send itself the message shouldNotImplement?

10 4. Smalltalk Coding Idioms

11 © Oscar Nierstrasz ST — xxx X.11 What you should know!  What does yourself return? Why is it needed?  How is a new instance of a class initialized?  When should you implement invariants and preconditions?  What happens when we evaluate an expression with “print it”?  Why should a method never send super a different message?  How is super static and self dynamic?  How do you make your code self-documenting?

12 © Oscar Nierstrasz ST — xxx X.12 Can you answer these questions?  When should you override new?  If instance variables are really private, why can we see them with an inspector?  When does self = super?  When does super = self?  Which classes implement assert: ?  What does self refer to in the method SnakesAndLadders class>>example?

13 5. Seaside Lukas Renggli will give the lecture In 2006 — this version will not be used

14 6. Debugging

15 © Oscar Nierstrasz ST — xxx X.15 What you should know!  When should you explicitly return self?  Why shouldn’t you redefine methods named basic*?  Why are blocks not full closures?  How do you provide access to instance variables that are collections, without breaking encapsulation?  What is one of the most important uses of super?  How does programming with Smalltalk differ from programming in a conventional static language?

16 © Oscar Nierstrasz ST — xxx X.16 Can you answer these questions?  What will happen if you redefine the method class?  When should you define accessors for instance variables?  How can explicit references to class names make your application fragile?  Where is the method halt defined?

17 7. Understanding Classes and Metaclasses

18 © Oscar Nierstrasz ST — xxx X.18 What you should know!  What does is-a mean?  What is the difference between sending a message to an object and to its class?  What are the responsibilities of a metaclass?  What is the superclass of Object class?  Where is new defined?  What is the difference between class variables and class instance variables?

19 © Oscar Nierstrasz ST — xxx X.19 Can you answer these questions?  Why are there no explicit metaclasses?  When should you override new?  Why don’t metaclasses inherit from Class?  Are there any classes that don’t inherit from Object?  Is Metaclass a Class? Why or why not?  Where are the methods class and superclass defined?  When should you define an indexed class?  Are Java static variables just like class variables or class instance variables?  Where is the SystemDictionary Smalltalk defined?

20 8. Best Practice Patterns

21 © Oscar Nierstrasz ST — xxx X.21 What you should know!  How should you name instance variables?  Why should you be suspicious of comments?  How does Simple Delegation differ from Self Delegation?  When would you use Double Dispatch?  Why should you avoid introducing a Converter Method for an object supporting a different protocol?  How do you sort a Collection?  When should you use Lazy Initialization?

22 © Oscar Nierstrasz ST — xxx X.22 Can you answer these questions?  Which patterns would you use to implement a transactional interface?  How can Method Object help you to decompose long methods?  Why is it a bad idea to query an object for its class?  Why are you less likely to see Double Dispatch in a statically-typed language?  How can you avoid Modifying Super?  How can you avoid writing case statements?  What pattern does Object>>-> illustrate?

23 9. Refactoring and Design Patterns

24 © Oscar Nierstrasz ST — xxx X.24 What you should know!  How does the Open-Closed Principle apply to OOP?  What are signs that an object has clearly-defined responsibilities?  How can you recognize misplaced methods?  How should you refactor long methods?  How can you eliminate duplicated code between unrelated classes?  Why are type tests a code smell?  When do design patterns themselves turn into code smells?  Why is it a bad idea to use global variables to store Singleton instances?

25 © Oscar Nierstrasz ST — xxx X.25 Can you answer these questions?  How do the Common Closure and Common Reuse Principles alter the usual notion of cohesion?  How does refactoring differ from reengineering?  Can refactoring be fully automated?  In what situations does the Law of Demeter not apply?  How do design patterns make use of delegation?  Why are Long Parameter Lists a code smell?  Are isNil tests a code smell? What design pattern could help you eliminate them?  Is the Smalltalk SystemDictionary a good example of a Singleton?

26 10. Reflection

27 © Oscar Nierstrasz ST — xxx X.27 What you should know!  What is the difference between introspection and intercession?  What is the difference between structural and behavioural reflection?  What is an object? What is a class?  What is the difference between performing a message send and simply evaluating a method looked up in a MethodDictionary?  In what way does thisContext represent the run-time stack?  What different techniques can you use to intercept and control message sends?

28 © Oscar Nierstrasz ST — xxx X.28 Can you answer these questions?  What form of “reflection” is supported by Java?  What can you do with a metacircular architecture?  Why are Behaviour and Class different classes?  What is the class ProtoObject good for?  Why is it not possible to become: a SmallInteger?  What happens to the stack returned by thisContext if you proceed from the self halt?  What is the metaclass of an anonymous class?

29 11. Working with Bytecode

30 © Oscar Nierstrasz ST — xxx X.30 What you should know!  What are the problems of the old compiler?  How is the new Squeak compiler organized?  What does the Squeak semantic analyzer add to the parser-generated AST?  What is the format of the intermediate representation?  What kind of virtual machine does the Squeak bytecode address?  How can you inspect the bytecode of a particular method?

31 © Oscar Nierstrasz ST — xxx X.31 Can you answer these questions?  What different groups of bytecode are supported?  Why is the SmaCC grammar only BNF-“like”?  How can you find out what all the bytecodes are?  What is the purpose of IRBuilder?  Why do we not generate bytecode directly?  What is the responsibility of class InstructionStream?  How would you implement a statement coverage analyzer?

32 12. Traits and Classboxes

33 © Oscar Nierstrasz ST — xxx X.33 What you should know!  Why does single inheritance lead to duplicated code?  How does the composing class retain control of trait composition?  What do “glue” methods do for traits?  What is the “flattening property” and why is it important for traits?  Why is there “inappropriate inheritance” in the Smalltalk Collections hierarchy?  What is a “class extension”?  In what way to classboxes ensure locality of changes?  What problems are solved by combined traits and classboxes?

34 © Oscar Nierstrasz ST — xxx X.34 Can you answer these questions?  Why do multiple inheritance and mixins leads to “fragile class hierarchies”?  C++, Eiffel and Python all offer multiple inheritance – are they broken?  Why don’t traits specify any state?  How much code is duplicated in the standard Java libraries?  What problems occur in Java due to the lack of class extensions?  Can classboxes be “flattened” in the same way that traits can? Why or why not?


Download ppt "Dynamic Object-Oriented Programming with Smalltalk 1. Introduction Prof. O. Nierstrasz Summer Semester 2006."

Similar presentations


Ads by Google