45
Dynamic Object-Oriented Programming with Smalltalk 1. Introduction Prof. O. Nierstrasz

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

Embed Size (px)

Citation preview

Page 1: Dynamic Object-Oriented Programming with Smalltalk 1. Introduction Prof. O. Nierstrasz

Dynamic Object-Oriented Programming with Smalltalk

1. Introduction

Prof. O. Nierstrasz

Page 2: Dynamic Object-Oriented Programming with Smalltalk 1. Introduction Prof. O. Nierstrasz

Birds-eye view

© Oscar Nierstrasz

ST — Introduction

1.2

Smalltalk is still today one of the few fully reflective, fully dynamic, object-oriented development environments.

Smalltalk is still today one of the few fully reflective, fully dynamic, object-oriented development environments.

We will see how a simple, uniform object model enables live, dynamic, interactive software development.

We will see how a simple, uniform object model enables live, dynamic, interactive software development.

Page 3: Dynamic Object-Oriented Programming with Smalltalk 1. Introduction Prof. O. Nierstrasz

© Oscar Nierstrasz

ST — xxx

X.3

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?

Page 4: Dynamic Object-Oriented Programming with Smalltalk 1. Introduction Prof. O. Nierstrasz

© Oscar Nierstrasz

ST — xxx

X.4

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?

Page 5: Dynamic Object-Oriented Programming with Smalltalk 1. Introduction Prof. O. Nierstrasz

2. Smalltalk Basics

Page 6: Dynamic Object-Oriented Programming with Smalltalk 1. Introduction Prof. O. Nierstrasz

Birds-eye view

© Oscar Nierstrasz

ST — Introduction

1.6

Less is More — simple syntax and semantics uniformly applied can lead to an expressive and flexible system, not an impoverished one.

Less is More — simple syntax and semantics uniformly applied can lead to an expressive and flexible system, not an impoverished one.

Page 7: Dynamic Object-Oriented Programming with Smalltalk 1. Introduction Prof. O. Nierstrasz

© Oscar Nierstrasz

ST — xxx

X.7

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?

Page 8: Dynamic Object-Oriented Programming with Smalltalk 1. Introduction Prof. O. Nierstrasz

© Oscar Nierstrasz

ST — xxx

X.8

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?

Page 9: Dynamic Object-Oriented Programming with Smalltalk 1. Introduction Prof. O. Nierstrasz

3. Standard Classes

Page 10: Dynamic Object-Oriented Programming with Smalltalk 1. Introduction Prof. O. Nierstrasz

Birds-eye view

© Oscar Nierstrasz

ST — Introduction

1.10

Reify everything — by reifying its entire implementation model, Smalltalk succeeds in being open, and extensible.New features can be added without changing the syntax!

Reify everything — by reifying its entire implementation model, Smalltalk succeeds in being open, and extensible.New features can be added without changing the syntax!

Page 11: Dynamic Object-Oriented Programming with Smalltalk 1. Introduction Prof. O. Nierstrasz

© Oscar Nierstrasz

ST — xxx

X.11

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?

Page 12: Dynamic Object-Oriented Programming with Smalltalk 1. Introduction Prof. O. Nierstrasz

© Oscar Nierstrasz

ST — xxx

X.12

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?

Page 13: Dynamic Object-Oriented Programming with Smalltalk 1. Introduction Prof. O. Nierstrasz

4. Smalltalk Coding Idioms

Page 14: Dynamic Object-Oriented Programming with Smalltalk 1. Introduction Prof. O. Nierstrasz

Birds-eye view

© Oscar Nierstrasz

ST — Introduction

1.14

Distribute responsibility — in a well-designed object-oriented system you will typically find many, small, carefully named methods.This promotes fluent interfaces, reuse, and maintainability.

Distribute responsibility — in a well-designed object-oriented system you will typically find many, small, carefully named methods.This promotes fluent interfaces, reuse, and maintainability.

Page 15: Dynamic Object-Oriented Programming with Smalltalk 1. Introduction Prof. O. Nierstrasz

© Oscar Nierstrasz

ST — xxx

X.15

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?

Page 16: Dynamic Object-Oriented Programming with Smalltalk 1. Introduction Prof. O. Nierstrasz

© Oscar Nierstrasz

ST — xxx

X.16

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?

Page 17: Dynamic Object-Oriented Programming with Smalltalk 1. Introduction Prof. O. Nierstrasz

5. Seaside

Page 18: Dynamic Object-Oriented Programming with Smalltalk 1. Introduction Prof. O. Nierstrasz

Birds-eye view

© Oscar Nierstrasz

ST — Introduction

1.18

Model your domain with objects — model domain components as objects. Compose objects, not text. Strive for fluent interfaces. Build applications by scripting components.

Model your domain with objects — model domain components as objects. Compose objects, not text. Strive for fluent interfaces. Build applications by scripting components.

Page 19: Dynamic Object-Oriented Programming with Smalltalk 1. Introduction Prof. O. Nierstrasz

6. Debugging

Page 20: Dynamic Object-Oriented Programming with Smalltalk 1. Introduction Prof. O. Nierstrasz

Birds-eye view

© Oscar Nierstrasz

ST — Introduction

1.20

It can be easier to talk to objects than to read classes — The system is alive. Talk to it. The debugger can be your best friend. Don’t be afraid of it.

It can be easier to talk to objects than to read classes — The system is alive. Talk to it. The debugger can be your best friend. Don’t be afraid of it.

Page 21: Dynamic Object-Oriented Programming with Smalltalk 1. Introduction Prof. O. Nierstrasz

© Oscar Nierstrasz

ST — xxx

X.21

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?

Page 22: Dynamic Object-Oriented Programming with Smalltalk 1. Introduction Prof. O. Nierstrasz

© Oscar Nierstrasz

ST — xxx

X.22

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?

Page 23: Dynamic Object-Oriented Programming with Smalltalk 1. Introduction Prof. O. Nierstrasz

7. Best Practice Patterns

Page 24: Dynamic Object-Oriented Programming with Smalltalk 1. Introduction Prof. O. Nierstrasz

Birds-eye view

© Oscar Nierstrasz

ST — Introduction

1.24

Let your code talk — Names matter. Let the code say what it means.Introduce a method for everything that needs to be done. Don’t be afraid to delegate, even to yourself.

Let your code talk — Names matter. Let the code say what it means.Introduce a method for everything that needs to be done. Don’t be afraid to delegate, even to yourself.

Page 25: Dynamic Object-Oriented Programming with Smalltalk 1. Introduction Prof. O. Nierstrasz

© Oscar Nierstrasz

ST — xxx

X.25

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?

Page 26: Dynamic Object-Oriented Programming with Smalltalk 1. Introduction Prof. O. Nierstrasz

© Oscar Nierstrasz

ST — xxx

X.26

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?

Page 27: Dynamic Object-Oriented Programming with Smalltalk 1. Introduction Prof. O. Nierstrasz

8. Refactoring and Design Patterns

Page 28: Dynamic Object-Oriented Programming with Smalltalk 1. Introduction Prof. O. Nierstrasz

Birds-eye view

© Oscar Nierstrasz

ST — Introduction

1.28

Beware of misplaced responsibilities — cluttered code impacts extensibility. Beware of misplaced responsibilities — cluttered code impacts extensibility.

Page 29: Dynamic Object-Oriented Programming with Smalltalk 1. Introduction Prof. O. Nierstrasz

© Oscar Nierstrasz

ST — xxx

X.29

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?

Page 30: Dynamic Object-Oriented Programming with Smalltalk 1. Introduction Prof. O. Nierstrasz

© Oscar Nierstrasz

ST — xxx

X.30

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?

Page 31: Dynamic Object-Oriented Programming with Smalltalk 1. Introduction Prof. O. Nierstrasz

9. Understanding Classes and Metaclasses

Page 32: Dynamic Object-Oriented Programming with Smalltalk 1. Introduction Prof. O. Nierstrasz

Birds-eye view

© Oscar Nierstrasz

ST — Introduction

1.32

Reify your metamodel — A fully reflective system models its own metamodel.Reify your metamodel — A fully reflective system models its own metamodel.

Page 33: Dynamic Object-Oriented Programming with Smalltalk 1. Introduction Prof. O. Nierstrasz

© Oscar Nierstrasz

ST — xxx

X.33

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?

Page 34: Dynamic Object-Oriented Programming with Smalltalk 1. Introduction Prof. O. Nierstrasz

© Oscar Nierstrasz

ST — xxx

X.34

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?

Page 35: Dynamic Object-Oriented Programming with Smalltalk 1. Introduction Prof. O. Nierstrasz

10. Reflection

Page 36: Dynamic Object-Oriented Programming with Smalltalk 1. Introduction Prof. O. Nierstrasz

© Oscar Nierstrasz

ST — xxx

X.36

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?

Page 37: Dynamic Object-Oriented Programming with Smalltalk 1. Introduction Prof. O. Nierstrasz

© Oscar Nierstrasz

ST — xxx

X.37

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?

Page 38: Dynamic Object-Oriented Programming with Smalltalk 1. Introduction Prof. O. Nierstrasz

11. Working with Bytecode

Page 39: Dynamic Object-Oriented Programming with Smalltalk 1. Introduction Prof. O. Nierstrasz

© Oscar Nierstrasz

ST — xxx

X.39

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?

Page 40: Dynamic Object-Oriented Programming with Smalltalk 1. Introduction Prof. O. Nierstrasz

© Oscar Nierstrasz

ST — xxx

X.40

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?

Page 41: Dynamic Object-Oriented Programming with Smalltalk 1. Introduction Prof. O. Nierstrasz

12. Virtual Machines

Page 42: Dynamic Object-Oriented Programming with Smalltalk 1. Introduction Prof. O. Nierstrasz

13. Traits and Classboxes

Page 43: Dynamic Object-Oriented Programming with Smalltalk 1. Introduction Prof. O. Nierstrasz

© Oscar Nierstrasz

ST — xxx

X.43

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?

Page 44: Dynamic Object-Oriented Programming with Smalltalk 1. Introduction Prof. O. Nierstrasz

© Oscar Nierstrasz

ST — xxx

X.44

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?

Page 45: Dynamic Object-Oriented Programming with Smalltalk 1. Introduction Prof. O. Nierstrasz

© Oscar Nierstrasz

ST — Introduction

1.45

Attribution-ShareAlike 3.0 UnportedYou are free:

to Share — to copy, distribute and transmit the workto Remix — to adapt the work

Under the following conditions:Attribution. You must attribute the work in the manner specified by the author or licensor (but not in any way that suggests that they endorse you or your use of the work).Share Alike. If you alter, transform, or build upon this work, you may distribute the resulting work only under the same, similar or a compatible license.

For any reuse or distribution, you must make clear to others the license terms of this work. The best way to do this is with a link to this web page.

Any of the above conditions can be waived if you get permission from the copyright holder.Nothing in this license impairs or restricts the author's moral rights.

License

http://creativecommons.org/licenses/by-sa/3.0/