La idea de la programació orientada a objectes és la combinació l'estat i el comportament -- dades i operacions sobre dades -- en una unitat d'alt nivell, un objecte, i donar-li suport de llenguatge. Un objecte és un grup de funcions i estructura de dades relacionades que serveixen a aquestes funciona. Les funcions són conegudes com els mètodes d'objecte, i els camps d'aquesta estructura de dades són les seves variables d'instància. Els mètodes estan al voltant de les variables d'instància i les amaguen de la resta del progrma, com il·lustra la Figura 1-2:
Figura 1-2 Un Objecte

Provablement, si has tingut alguna de les dificultats al programar un problema, el teu disseny ha inclòs grups de funcions que treballen en un conjunt particular de dades -- implicitament "objectes" sense el suport del llenguatge. La programació orientada a objectes fa que aquestes funcions s'agrupin explícitament i et permeten pensar en termes de grup, en vés dels seus components. L'única forma d'accés a una dada d'objecte, és a través dels seus mètodes.
Combinant l'estat i el comportament en una única unitat, un objecte serà quelcom més que sense combinar-los; el conjunt és millor que la suma de les parts. Un objecte és un conjunt auto-suficient "subprograma" amb jurisdicció sobre una area funcional específica. Aquest pot jugar un rol completament modular dins un disseny d'un programa més gran.
| Terminologia: La terminologia orientada a objectes varia d'un llenguatge a un altre. Per exemple, a C++, els mètodes s'anomenen "funcions membre" i les variables d'instància es coneixen com "membres de dada". Aquest document utilitza la terminologia de l'Objective-C, els quals estan basats en l'Smalltalk. |
Per exemple, si estàs escribint un programa que modela l'ús domèstic de l'aigua, pots crear objectes per representar els diferents components del sistema de repartiment de l'aigua. Un podria ser un objecte "Aixeta" que podria tenir mètodes per engegar i aturar el fluxe de l'aigua, indicar el cabal, retornar la quantitat d'aigua consumida en un període donat, i així succesivament. Per fer aquesta feina, un objecte Aixeta necessitaria unes variables d'instància per mantindre l'estat de si l'aixeta està oberta o tancada, quanta aigua s'ha consumit, i d'on vé l'aigua.
Clarament, una Aixeta programada pot ser més elegant que una de real (aquesta és anàloga a una aixeta mecànica amb un munt de medidors i instruments adherits). Píªrò fins hi tot una aixeta real, com qualsevol component d'un sistema, exibeix tant l'estat com els comportaments. Per modelar eficientment un sistema, necesites programar unitats, com objectes, que també combinin l'estat i els comportaments.
Un programa consisteix en una xarxa d'objectes interconectats que es criden entre ells per solucionar una part del trenca-closques. Cada objecte té un rol específic que participa en el disseny global del programa i pot comunicar-se amb altres objectes. Els objectes es comuniquen a través de missatges, requeriments per execució els mètodes.
Figura 1-3 Xarxa d'Objectes

Els objectes d'una xarxa no poden ser tots iguals. Per exemple, a més de les Aixetes, el programa que modela l'ús de l'aigua també ha de tenir objectes de Canonades per poder dur aigua a les Aixetes i objectes Vàlvules per regular el fluxe a través de les Canonades. Hi podria haver un objecte Edifici per coordinar el conjunt de Canonades, Vàlvules i Aixetes, alguns objectes Aparells -- corresponenets a dutxes, labavos, i maquines de rentar -- que poden obrir i tancar Vàlvules, i potser alguns Usuaris que utilitzin els aparells i les Aixetes. Quan un objecte Edifici se li pregunta quanta aigua ha utilitzat, aquest pot preguntar a cada Aixeeta i Vàlvula que li diguin els seu estat actual. Quan un Usuari engega un Aparell, l'Aparell necessitarà obrir la Vàlvula i obtindre'n l'aigua que necessita.
Comentaris
Ara descobreixo que C++ no permet l'enllaçat dinàmic.
Acabat de traduir i he vist que el C++ no permet crida dinàmica de funcions.
Ara entenc perqué quan treballava amb Visual C++ vaig haver de comprovar en el codi el tipus de classe que cridava la funció per decidir a posteriori quina funció havia de cridar.
Si ho arribo a saber, no perdo temps amb la Orientació a Objectes del C++. L'Objective-C té més coherència i a més s'assembla molt al Java.
Salut,
Carles