After this long introduction to manipulation of controls, let's review all of them step by step. You can refer to the following diagram for a quick overview of the class hierarchy:

As you can see, all ol.control.* classes inherit from ol.control.Control.
So, first let's see this ol.control.Control.
The ol.control.Control is the parent class of all the available controls. It inherits from ol.Object, an abstract class that also inherits from ol.Observable, a convenient class to provide and manage listeners.
This object is responsible for the common options that all controls contain. All controls inherit from ol.control.Control, and it's exactly the same for the options. To understand its properties, just review how a control can be described.
"A control is a DOM element related to the map and that can be attached to an existing DOM element."
If you refer to the following table. The DOM element is the element property, the place that contains the look for the control. The target property is the place where you add the element into the DOM.
Never forget that it is useful to know ol.control.Control to understand its subclasses, but you never directly use it. You reuse this class only if you need to create your own control but it's not the time for this. First, we need to study controls provided by the Openlayers 3 library, which will be explained in the following sections.
The ol.control.Attribution control is not very new. We are already using it implicitly since we used the ol.layer.OSM class in Chapter 1, Getting Started with OpenLayers.
These are the options concerning the ol.control.Attribution control.
You can see all properties you can set for the control. You should be aware that those properties are considered as experimental in the OpenLayers 3 release.
We will discover the way to customize it in the following section.