I think they show the two most interesting approaches to object oriented languages. Personally I think static typing can never capture the richness of behavior object orientation is designed to create. Message passing is great when you have to communicate between different threads, tasks, or computers. And blocks are great, but it might be even better with true anonymous functions. So Self has the leg up in my book.

And blocks are great, but it might be even better with true anonymous functions.

[Blocks are anonymous functions, so what do you mean by that statement? Can you elaborate?]

Dylan's type system is only optionally static. Just as in CommonLisp, you may choose to put type annotations in your code, or you may choose not to. MessagePassing is a subset of MultipleDispatch; calls that dispatch only on the invoked object can be viewed as message passings. Thus, Dylan has MessagePassing.