In particular, layers have which of the following characteristics?

layers are by definition highly cohesive, thus satisfying the principle of cohesion
layers doesn't support information hiding
layers are constrained to use only above layers
all of the mentioned

The correct answer is D.

Layers are a way of organizing software into modules that interact with each other in a well-defined way. Each layer is responsible for a specific set of tasks, and only interacts with the layers above and below it. This makes it easy to understand and maintain the software, and to add new features without affecting existing code.

Layers are by definition highly cohesive, which means that each layer has a single, well-defined purpose. This makes it easy to understand how the layers interact with each other, and to identify potential problems.

Layers also support information hiding, which means that each layer only has access to the information that it needs to do its job. This makes it more difficult for errors to propagate through the system, and makes it easier to test and debug the software.

Finally, layers are constrained to use only the layers above and below them. This prevents them from accessing or modifying data that they should not have access to, and helps to ensure that the system is robust and reliable.

In conclusion, layers are a powerful tool for organizing software. They make it easy to understand, maintain, and extend software. They also help to improve the quality of the software by making it more cohesive, supporting information hiding, and constraining the layers to use only the layers above and below them.