The book provides an introduction to software engineeringfor distributed systems. Concepts which are essential forthe development of distributed programs are described indetail. It is shown how methods of software engineering forboth non distributed and distributed programs can becombined in order to use the advantages of all thesemethods. The result is called "subject orientedprogramming". It combines asynchronous parallel processes,i.e. threads and object oriented concepts. This hybridapproach makes it easier to design and implement distributedsoftware systems and therefore increases the efficiency ofthe software engineering process. The reuse of existingsoftware in order to protect software investment is alsoconsidered in "subject orientedprogramming".