This book explains the concepts underlying programming languages, and demonstrates how these concepts are synthesized in the major paradigms: imperative, OO, concurrent, functional, logic and scripting. It gives greatest prominence to the OO paradigm, and uses Java as the main exemplar language.It includes numerous examples, case studies