From Wikipedia, the free encyclopedia
La programació orientada a objectes o POO (OOP segons les seves sigles en anglès) és un paradigma de programació que intenta proporcionar un model de programació basat en objectes que contenen dades i procediments associats coneguts com a mètodes. Aquests objectes, que solen ser instàncies de classes, són un tipus abstracte de dades que encapsulen (amaguen) tant les dades com les funcions per a accedir-hi.
Els objectes s'utilitzen per a interactuar amb d'altres en el disseny d'aplicacions i programes informàtics. Actualment existeixen una gran varietat de llenguatges de programació que suporten l'orientació a objectes. C++, Objective-C, Smalltalk, Delphi, Java, Javascript, C#, Perl, Python, Ruby i PHP en són uns exemples.
Els objectes són entitats que tenen un determinat estat, comportament (mètode) i identitat. En la creació i el disseny dels objectes s'utilitza la jerarquia de classes. Aquestes classes i subclasses corresponent a conjunts i subconjunts en lògica matemàtica. En aquest cas en comptes d'utilitzar taules de base de dades i programació de subrutines, els desenvolupadors utilitzen els objectes.
Els mètodes (comportament) i atributs (estat) estan relacionats, de tal manera que una classe requereix mètodes per a poder interactuar amb els atributs de l'objecte. Un concepte clau en la POO és l'encapsulació i ocultació d'informació.
L'encapsulació és un mecanisme que consisteix a organitzar dades i mètodes en una mateixa estructura. Així, un usuari d'una classe determinada no necessita saber com estan estructurades les dades d'aquell objecte ni la implementació d'aquest. Per garantir la integritat de les dades es provoca que l'usuari no pugui modificar directament els atributs. L'encapsulació defineix els nivells d'accés pels elements d'aquest objecte. Existeixen 3 nivells d'accés: públic protegit i privat.
La terminologia que invoca "objectes" en el sentit modern de la programació orientada a objectes va fer la seva primera aparició al MIT a finals dels anys 50 i principis dels 60. En l'entorn del grup de l'intel·ligència artificial, ja l'any 1960, "objecte" podia referir-se a elements identificats (àtoms LISP) amb propietats (atributs);[1][2] Alan Kay més tard va citar una comprensió detallada dels aspectes interns de LISP com una forta influència en el seu pensament l'any 1966, i que va utilitzar el terme "programació orientada a objectes" a la conversa des de 1967.[3] Encara que de vegades es diu "el pare de la programació orientada a objectes",[4] Alan Kay ha diferenciat la seva noció d'OO de la noció d'objectes de tipus de dades abstractes més convencional, i ha donat a entendre que l'establishment informàtic no va adoptar la seva noció.[3] Una nota del MIT de 1976, coautora per Barbara Liskov enumera Simula 67, CLU i Alphard com a llenguatges orientats a objectes, però no esmenta Smalltalk.[5]
« | Vaig pensar que els objectes eren com cèl·lules biològiques i/o ordinadors individuals en una xarxa, només capaços de comunicar-se amb missatges (així que la missatgeria va arribar al principi; va trigar una estona a veure com fer missatges en un llenguatge de programació de manera prou eficient per ser útil). | » |
— Alan Kay, [3] |
Un altre dels primers exemples del MIT va ser el Sketchpad creat per Ivan Sutherland el 1960–1961; en el glossari de l'informe tècnic de 1963 basat en la seva dissertació sobre Sketchpad, Sutherland va definir les nocions d'"objecte" i "instància" (amb el concepte de classe cobert per "mestre" o "definició"), encara que especialitzat en la interacció gràfica.[6] A més, una versió del MIT ALGOL, AED-0, va establir un enllaç directe entre estructures de dades ("plexes", en aquest dialecte) i procediments, prefigurant el que més tard es van anomenar "missatges", "mètodes" i "funcions de membre".[7][8]
Simula va introduir conceptes importants que avui són una part essencial de la programació orientada a objectes, com ara classe i objecte, herència i enllaç dinàmic.[9] El llenguatge de programació Simula orientat a objectes va ser utilitzat principalment per investigadors implicats en la modelació física, com ara models per estudiar i millorar el moviment de vaixells i el seu contingut a través dels ports de càrrega.[9]
A la dècada de 1970, la primera versió del llenguatge de programació Smalltalk va ser desenvolupada a Xerox PARC per Alan Kay, Dan Ingalls i Adele Goldberg. Smalltalk-72 va incloure un entorn de programació i va ser tipada dinàmicament, i al principi va ser interpretat, no compilat. Smalltalk es va destacar per la seva aplicació de l'orientació a objectes a nivell de llenguatge i el seu entorn de desenvolupament gràfic. Smalltalk va passar per diverses versions i l'interès pel llenguatge va créixer.[10] Tot i que Smalltalk es va veure influenciat per les idees introduïdes a Simula 67, va ser dissenyat per ser un sistema totalment dinàmic en el qual les classes es poguessin crear i modificar dinàmicament.[11]
A la dècada de 1970, Smalltalk va influir en la comunitat Lisp per incorporar tècniques basades en objectes que es van introduir als desenvolupadors mitjançant la màquina Lisp. L'experimentació amb diverses extensions de Lisp (com ara LOOPS i Flavors que introdueixen herència múltiple i mixins) finalment van conduir al Common Lisp Object System, que integra programació funcional i programació orientada a objectes i permet l'extensió mitjançant un protocol de meta-objecte. A la dècada de 1980, hi va haver alguns intents de dissenyar arquitectures de processadors que incloïen suport de maquinari per a objectes a la memòria, però no van tenir èxit. Alguns exemples inclouen l'Intel iAPX 432 i els Linn Smart Rekursiv.
El 1981, Goldberg va editar el número d'agost de Byte Magazine, introduint Smalltalk i la programació orientada a objectes a un públic més ampli. El 1986, l'Association for Computing Machinery va organitzar la primera Conference on Object-Oriented Programming, Systems, Languages, and Applications (OOPSLA), a la qual van assistir inesperadament 1.000 persones. A mitjans de la dècada de 1980, Brad Cox va desenvolupar l'Objective-C, que havia utilitzat Smalltalk a ITT Inc., i Bjarne Stroustrup, que havia utilitzat Simula per la seva tesi doctoral, finalment va crear el C++ orientat a objectes.[10] El 1985, Bertrand Meyer també va produir el primer disseny del llenguatge Eiffel. Centrat en la qualitat del programari, Eiffel és un llenguatge de programació purament orientat a objectes i una notació que admet tot el cicle de vida del programari. Meyer va descriure el mètode de desenvolupament de programari Eiffel, basat en un petit nombre d'idees clau de l'enginyeria del programari i la informàtica, al llibre Object-Oriented Software Construction. Essencial per a l'enfocament de qualitat d'Eiffel és el mecanisme de fiabilitat de Meyer, disseny per contracte, que és una part integral tant del mètode com del llenguatge.
A principis i mitjans de la dècada de 1990, la programació orientada a objectes es va desenvolupar com el paradigma de programació dominant quan els llenguatges de programació que suportaven les tècniques es van fer àmpliament disponibles. Aquests inclouen Visual FoxPro 3.0,[12][13][14] C++,[15] i Delphi. El seu domini es va reforçar encara més per la creixent popularitat de les interfícies gràfices d'usuari, que depenen molt de les tècniques de programació orientada a objectes. Es pot trobar un exemple d'una biblioteca GUI dinàmica estretament relacionada i d'un llenguatge OOP als marcs Cocoa a Mac OS X, escrit en Objective-C, un objecte- extensió de missatgeria dinàmica orientada a C basada en Smalltalk. Les eines de POO també van millorar la popularitat de la programació basada en esdeveniments (tot i que aquest concepte no es limita a la POO).
A l'ETH Zürich, Niklaus Wirth i els seus col·legues també havien estat investigant temes com l'abstracció de dades i la programació modular (tot i que això havia estat d'ús comú). des de la dècada de 1960 o abans, Wirth ha afegit la verificació de tipus a través dels límits del mòdul). Modula-2 (1978) va incloure tots dos, i el seu disseny posterior, Oberon, va incloure un enfocament distintiu a l'orientació d'objectes, classes, etc. L'herència no és òbvia en el disseny de Wirth, ja que la seva nomenclatura mira en la direcció oposada: s'anomena extensió de tipus i el punt de vista és des del pare fins a l'hereu.
S'han afegit funcions orientades a objectes a molts llenguatges existents anteriorment, com ara Ada, BASIC, Fortran, Pascal, i COBOL. L'addició d'aquestes característiques a idiomes que inicialment no hi estaven dissenyats sovint provocava problemes de compatibilitat i manteniment del codi.
Més recentment, han sorgit una sèrie de llenguatges que estan principalment orientats a objectes, però que també són compatibles amb la metodologia procedimental. Dos d'aquests llenguatges són Python i Ruby. Probablement els llenguatges recents orientats a objectes més importants comercialment són Java, desenvolupat per Sun Microsystems, així com C# i Visual Basic.NET (VB.NET), tots dos dissenyats per a la plataforma .NET de Microsoft. Cadascun d'aquests dos marcs mostra, a la seva manera, el benefici d'utilitzar POO mitjançant la creació d'una abstracció de la implementació. VB.NET i C# admeten l'herència entre llengües, permetent classes definides en un idioma a classes de subclasses definides en l'altre idioma.
Simula (1967) és considerat el primer llenguatge que conté les característiques principals d'un llenguatge orientat a objectes. Va ser creat per a fer programes de simulació, on els objectes són la representació de la informació més important. Smalltalk (1972 a 1980) és possiblement l'exemple canònic, i amb el qual la major part de la teoria de la programació orientada a objectes s'ha desenvolupat.
Entre els llenguatges orientats a objectes destaquen els següents:
Molts d'aquests llenguatges de programació no són purament orientat a objectes, sinó que són híbrids i combinen la POO amb altres paradigmes de programació.
Igual que C++, altres llenguatges, com el OOCOBOL, OOLISP, OOPROLOG y Object REXX, han estat creats afegint extensions orientades a objectes a un llenguatge de programació clàssic.
Un nou pas en l'abstracció de paradigmes de programació, és la programació orientada a aspectes (POA). Tot i que encara és una metodologia en estat de maduració, cada cop atrau més als investigadors i fins i tot projectes comercials de tot el món.