They are latency, memory access, partial failure, and concurrency. The most obvious difference is latency. The design of the application must take these differences into account. Memory access refers to the use of pointers, which may be valid in a local address space, but not in a remote address space. Either memory accesses must be controlled by the underlying system or the programmer must be aware of the different types of access.
Partial failure requires that programs deal with indeterminacy.
Similarly, concurrency in a distributed system is different from concurrency in a multi-threaded local system. This is because there is no single operating system that can aid in synchronization and in the recovery from failure. For DT the education problem is to learn about and understand all the issues surrounding distribution. It is necessary to learn about one or more of the different infrastructures for distributed object computing. Once some framework for DOT is understood, it is necessary to learn some specific implementation of that framework to employ it to build systems.