The law that governs the speedup of using parallel computing resources on a given problem.
The law indicates that an algorithm that can be parallelized typically by splitting it up into two parts, a part that can be parallelized, and a part that cannot.
Details can be found:
Principles in Object Oriented Design (OO) of software:
- Single-responsibility principle: A class should have one and only one reason to change, meaning that a class should have only one job. The fewer number of interfaces implemented the better.
- Open-closed principle: Objects or entities should be open for extension but closed for modification. The class should be extensible without modifying the parent class.
- Liskov-substitution principle: Let q(x) be a property provable about objects of x of type T. Then q(y) should be provable for objects y of type S where S is a subtype of T. Each subclass or derived class should be substitutable for its base or parent class.
- Interface-segregation principle: A client should never be forced to implement an interface that it doesn’t use, or clients shouldn’t be forced to depend on methods they do not use.
- Dendency-inversion principle: Entities must depend on abstractions, not on concretions. It states that the high-level module must not depend on the low-level module, but they should depend on abstractions. You should inject interfaces/abstractions into objects and not concrete implementations.
In the software engineering world this is one of the canonical books on OO design patterns. You should read it through at least once. I tend to go back to it from time-to-time when working on new projects as a reference to that design patterns that might be most applicable for what I am trying to build.
A favorite Joel on Software article about character encoding.