Jonathan Chaffer, long time Drupal core developer, has written up a long description about Drupal Programming from an Object-Oriented Perspective. It is a highly technical but excellent overview of many of the core concepts of Drupal programming.
Drupal often gets criticized by newcomers who believe that object-oriented programming (OOP) is always the best way to design software architecture, and since they do not see the word "class" in the Drupal code, it must be inferior to other solutions. In fact, it is true that Drupal does not use many of the OOP features of PHP, but it is a mistake to think that the use of classes is synonymous with object-oriented design. This article will cover several of the features of Drupal from an object-oriented perspective, so programmers comfortable with that paradigm can begin to feel at home in the Drupal code base, and hopefully be able to choose the right tool for the job.
The file is over on the developer's documentation site, which doesn't have commenting turned on, so feel free to use this thread to discuss it.