340 likes | 351 Views
This course provides an introduction to Smalltalk programming, exploring the differences between Smalltalk, Java, and C++. Topics covered include Smalltalk basics, standard classes, coding idioms, debugging, understanding classes and metaclasses, and best practice patterns.
E N D
Dynamic Object-Oriented Programming with Smalltalk 1. Introduction Prof. O. Nierstrasz Summer Semester 2006
ST — xxx 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?
ST — xxx 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?
ST — xxx 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?
ST — xxx 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?
ST — xxx 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?
ST — xxx 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?
ST — xxx 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?
ST — xxx 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?
5. Seaside Lukas Renggli will give the lecture In 2006 — this version will not be used
ST — xxx 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?
ST — xxx 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?
ST — xxx 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?
ST — xxx 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?
ST — xxx 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?
ST — xxx 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?
ST — xxx 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?
ST — xxx 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?
ST — xxx 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?
ST — xxx 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?
ST — xxx 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?
ST — xxx 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?
ST — xxx 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?
ST — xxx 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?