These days, everyone knows the foundations of object oriented programming - Encapsulation, Polymorphism, and Inheritance. Nobody (well, almost nobody) seems to argue that these concepts aren't important. But why is it that they are important? How do they help software development?
Consider encapsulation. It hides the implementation of an object behind a set of methods and only accesses the implementation through the methods. This means that we can change the implementation of a class without changing all the users of the class. So? So, it's easier to make changes to our system.
How about polymorphism? Why is polymorphism important? With polymorphism, we can treat different classes of objects in the same way. So? Well, the caller doesn't have to worry about what specific kind of object it's talking to. So? So it's easier to write the calling code.
How about inheritance? Inheritance allows you to implement a new class without having to re-implement a lot of code. So? So, it's easier to write the new class.
Do you see a pattern here? The key is ease of development. Encapsulation, polymorphism and inheritance all make it easier to write code. Software development is hard. OO techniques try to make it easier.
Now, let's look at some other programming concepts. How about static typing? The purpose of static typing is to try to prevent the programmer from making mistakes. To do so, most statically typed programming languages require the programmer to explicitly state the types of all variables. These types then act as a restriction on what the programmer is allowed to do. At times, the programmer must explicitly cast the types in order to make the system work properly. Does this make it any easier to develop software?
How about the "final" class declarations. The purpose of final is to prevent programmers from subclassing another class. The intent is to try to prevent misuse. Does it make it easier to develop software? I don't think so. In most cases, it makes it harder.
How about checked exceptions. Does that make it easier to develop software? In most cases, it's a pain declaring the throws through each method that the exception passes through. It might help ensure that the exception is handled somewhere, but does it simplify things? I don't think so.
That's why I like Smalltalk. Smalltalk lets developers to their work without throwing roadblocks in their way. It makes it easier to develop software. It doesn't try to restrict what the programmer can do to protect him from himselt. As I said, software development is hard. Why should your development tools make it harder?