The oldest known paintings are at the Grotte Chauvet in France, which some historians believe are about 32,000 years old. They are engraved and painted using red ochre and black pigment, and they show horses, rhinoceros, lions, buffalo, mammoth, abstract designs and what are possibly partial human figures. However, the earliest evidence of the act of painting has been discovered in two rock-shelters in Arnhem Land, in northern Australia. In the lowest layer of material at these sites, there are used pieces of ochre estimated to be 60,000 years old. Archaeologists have also found a fragment of rock painting preserved in a limestone rock-shelter in the Kimberley region of North-Western Australia, that is dated 40,000 years old.[7] There are examples of cave paintings all over the world—in Italy, France, Spain, Portugal, China, Australia, Mexico,[8] etc. In Western cultures, oil painting and watercolor painting have rich and complex traditions in style and subject matter. In the East, ink and color ink historically predominated the choice of media, with equally rich and complex traditions.
In Spanish art, a bodegón is a still life painting depicting pantry items, such as victuals, game, and drink, often arranged on a simple stone slab, and also a painting with one or more figures, but significant still life elements, typically set in a kitchen or tavern. Starting in the Baroque period, such paintings became popular in Spain in the second quarter of the 17th century. The tradition of still life painting appears to have started and was far more popular in the contemporary Low Countries, today Belgium and Netherlands (then Flemish and Dutch artists), than it ever was in southern Europe. Northern still lifes had many subgenres: the breakfast piece was augmented by the trompe-l'œil, the flower bouquet, and the vanitas. In Spain there were much fewer patrons for this sort of thing, but a type of breakfast piece did become popular, featuring a few objects of food and tableware laid on a table.

In this snippet we have a class hierarchy with a SimpleMessage at the top. The SimpleMessage class has a constructor that accepts a content string as well as two methods: GetMessage; and, PrintMessage. Down the hierarchy we have three subclasses: ExcitedMessage; QuizzicalMessage; and, ExcitedAndQuizzicalMessage. The only difference in the subclasses is that they override the SimpleMessage constructor to change the content string and append various exclamations. When we instantiate various message objects, using the same content string, and iterate over them, each has their own unique output.
In a previous article, we discussed how to use the strategy pattern to dynamically change an object’s behavior at runtime. Classically, polymorphism in object-oriented design is static and achieved through inheritance; however, with the strategy pattern you can accomplish the same goal dynamically. Indeed, this is an excellent way to handle situations when you need an object to exhibit different behavior at different times. However, it’s worth noting that the strategy pattern requires mutation of the object you’re working with. By using the strategy pattern, you are necessarily changing the algorithm that an object uses for a given behavior. In some situations, it may be preferable not to mutate a given object. Or more likely, you won’t even have the option of mutating an object because it may come from a codebase over which you have no control (such as an external library). Such cases are relatively common; however, it’s still possible to enhance an immutable object’s behavior. One effective means to do so is with the decorator pattern.
When we instantiate a SimpleMessage and then pass it to the various decorators, we now get new behavior. Moreover, since both the concrete component and the concrete decorators all implement / descend from IMessage, they are interchangeable as far as the program is concerned, meaning that we can loop over them together. Further, rather than having to create a new ExcitedAndQuizzicalMessageDecorator class, we were able to achieve the same effect by double wrapping a SimpleMessage object (first in an ExcitedMessageDecorator and then in a QuizzicalMessageDecorator). Finally, note that despite having been passed into various decorators, our simpleMsg object remains unchanged at the end of the program.
There is general agreement that syntactic support is desirable to the current state of affairs. Guido mentioned syntactic support for decorators [2] in his DevDay keynote presentation at the 10th Python Conference [3], though he later said [5] it was only one of several extensions he proposed there "semi-jokingly". Michael Hudson raised the topic [4] on python-dev shortly after the conference, attributing the initial bracketed syntax to an earlier proposal on comp.lang.python by Gareth McCaughan [6].

Now, assume one also desires the ability to add borders to windows. Again, the original Window class has no support. The ScrollingWindow subclass now poses a problem, because it has effectively created a new kind of window. If one wishes to add border support to many but not all windows, one must create subclasses WindowWithBorder and ScrollingWindowWithBorder etc. This problem gets worse with every new feature or window subtype to be added. For the decorator solution, we simply create a new BorderedWindowDecorator—at runtime, we can decorate existing windows with the ScrollingWindowDecorator or the BorderedWindowDecorator or both, as we see fit. Notice that if the functionality needs to be added to all Windows, you could modify the base class and that will do. On the other hand, sometimes (e.g., using external frameworks) it is not possible, legal, or convenient to modify the base class.
This difference becomes most important when there are several independent ways of extending functionality. In some object-oriented programming languages, classes cannot be created at runtime, and it is typically not possible to predict, at design time, what combinations of extensions will be needed. This would mean that a new class would have to be made for every possible combination. By contrast, decorators are objects, created at runtime, and can be combined on a per-use basis. The I/O Streams implementations of both Java and the .NET Framework incorporate the decorator pattern.

John Mansell Smith has been a self-employed painter & decorator for four years. He explains what it’s like to run your own business. “I became a self-employed painter & decorator when I took early retirement from my professional job in London, where I was employed as a Principal Building Surveyor. When I retired, I needed some additional income to supplement my pension, and having been in the building industry I was fully aware of the standard and quality which would be required to produce work to a professional standard. For a typical day at work, I usually arrive at the job at 8.30 am, and then depending on the sort of work I am doing it will vary a great deal. I could be undertaking external decorations or internal decorations, but in each case it would require covering and protecting the client's furniture, preparation of surfaces, washing down the walls, painting, wallpapering, cleaning up, etc. I try to leave at about 4.30 pm, but this may vary depending on the stage that I have reached with the job. In terms of likes and dislikes, I don’t enjoy working outside in poor weather, although I try to plan my workload to avoid this. However, I do like the freedom of being my own boss and getting complimented on a good job. If you wanted to be a painter and decorator, you would have to decide whether you wish to work for a company with the benefits such as holiday pay, but with the constraints of not being your own boss, or working for yourself with the freedom this gives but also the uncertainty of workload. As a self-employed person I can charge about £15 per hour for work that I do on an hourly rate, or I base any calculations on this rate when I am producing an estimate for a client. In attempting to find work, I would try the job centre, trade journals, large decorating companies, the internet and building training boards. To do the job you need to be a clean, neat worker with an eye for detail. The job you produce is the final result that the client will see, so it is vital that you can produce a finished job that you would be happy to have in your own home.
Moreover, the use of language is only an abstraction for a color equivalent. The word "red", for example, can cover a wide range of variations from the pure red of the visible spectrum of light. There is not a formalized register of different colors in the way that there is agreement on different notes in music, such as F or C♯. For a painter, color is not simply divided into basic (primary) and derived (complementary or mixed) colors (like red, blue, green, brown, etc.).
×