Programació orientada a objectes

De Viquipèdia
(S'ha redirigit des de: Orientació a objectes)
Dreceres ràpides: navegació, cerca

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 accedir-hi.

Els objectes s'utilitzen per 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.

Introducció[modifica | modifica el codi]

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 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 en 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 provoquem 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.


Origen[modifica | modifica el codi]

El concepte de programació formal d'objectes es va introduir a la dècada dels 60 amb Simula 67, un llenguatge de programació dissenyat per a la simulació d'esdeveniments discrets, creat per Ole-Johan Dahl i Kristen Nygaard del Centre de Computació de Noruega a Oslo. El llenguatge també utilitzava l’automàtic garbage collection (recollida automàtica d'escombraries) que havia estat inventat abans pel llenguatge de programació funcional LISP.

Simula va ser utilitzat per al modelatge físic com a models per a estudiar i millorar el moviment de vaixells i el seu contingut a través dels ports de càrrega. A més va introduir la noció de classes i instàncies o objectes (així com subclasses o mètodes virtuals) com a part d'un paradigma de programació explícit. Les idees de Simula 67 van influenciar a altres llenguatges de programació posteriors, incloent Smalltalk, Object Pascal, C++, Ada i BASIC entre d’altres.

A mitjans dels anys 80 la programació orientada a objectes va anar agafant importància, convertint-se en l’estil de programació dominant degut en gran part a la influència de C++, una extensió del llenguatge de programació C. Finalment el seu ús es va popularitzar a principis de la dècada dels anys 90, on una de les causes més importants del seu domini van ser les interfícies gràfiques d’usuari, les quals estan ben adaptades a la programació orientada a objectes.


Conceptes[modifica | modifica el codi]

Una classe defineix les característiques abstractes d'una cosa (objecte), incloent-hi les seves característiques (atributs,camps o propietats) i els seus comportaments (allò que pot fer, mètodes, operacions o funcionalitats). Es podria dir que una classe és el model que descriu la natura d'alguna cosa. Per exemple, la classe gos podria consistir en els trets diferencials compartits per tots els gossos, com la raça i el color de la pell (característiques), i les capacitats de bordar i seure (comportaments). Les classes proveeixen modularitat i estructura en un programa informàtic orientat a objectes. Una classe pot ser entesa per una persona no-programadora, però familiaritzada amb el problema general, cosa que vol dir que les característiques d'una classe han de tenir sentit al seu context. També, que el codi d'una classe ha d'estar relativament contingut dins d'ella mateixa (generalment utilitzant l'encapsulació). Col·lectivament, les propietats i els mètodes definits en una classe són anomenats membres.
És el conjunt de dades modulars d’elements d’informació, proveït de propietats o atributs (dades) i de comportament o funcionalitat (mètodes). És la instància d’una classe.
És un algoritme associat a un objecte (o a una classe d’objectes) l’execució del qual es desencadena després de la recepció d’un missatge. Aquest pot produir un canvi en les propietats de l’objecte o l’execució d’una nova operació amb un nou missatge per a un altre objecte.
És la invocació directa d’un mètode a través del seu nom que provoca la seva execució. Aquesta comunicació pot tenir definits certs paràmetres associats a l’event que el genera.
L’herència és especifica de la POO, on una nova classe es crea a partir d’una existent. L’herència prové del fet que una subclasse conté els atributs i mètodes de la classe primària. D’aquesta manera ens permet crear una estructura jeràrquica de classes cada cop més especialitzada i així no haver de començar de nou al especialitzar-ne una de ja existent.
La classe oculta els detalls de la implementació l'objecte que en fa ús
Centrar-se en uns detalls d'un problema, deixant de banda la resta. Al programar, permet definir objectes que representen actors abstractes que poden realitzar una tasca, informar del seu estat o modificar-lo, a la vegada que es comuniquen amb altres objectes del sistema.
És la provisió d’una interfície única per a entitats diferents. Per exemple, en Java totes les classes hereten de Object. Per tant, es pot crear una variable de tipus Object i assignar-li una instància de qualsevol classe.

Llenguatges orientats a objectes[modifica | modifica el codi]

Simula (1967) és acceptat com el primer llenguatge que conté les característiques principals d'un llenguatge orientat a objectes. Va ser creat per fer programes de simulació, on els objectes son 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, sino que són híbrids i combinen la POO amb altres paradigmes de programació.

Al igual que C++, altres llenguatges, com el OOCOBOL, OOLISP, OOPROLOG y Object REXX, han sigut creat 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.

Referències[modifica | modifica el codi]

  1. Kindler, E.; Krivy, I. (2011). "Object-Oriented Simulation of systems with sophisticated control". International Journal of General Systems. pp. 313–343.
  2. Lewis, John; Loftus, William (2008). Java Software Solutions Foundations of Programming Design 6th ed. Pearson Education Inc. ISBN 0-321-53205-8., section 1.6 "Object-Oriented Programming"
  3. Booch, Grady (1986). Software Engineering with Ada. Addison Wesley. p. 220. ISBN 978-0805306088. "Perhaps the greatest strength of an object-oriented approach to development is that it offers a mechanism that captures a model of the real world."
  4. Jacobsen, Ivar; Magnus Christerson; Patrik Jonsson; Gunnar Overgaard (1992). Object Oriented Software Engineering. Addison-Wesley ACM Press. pp. 43–69. ISBN 0-201-54435-0.
  5. Brooks, Fred P. (April 1987). "No Silver Bullet — Essence and Accidents of Software Engineering". IEEE Computer 20 (4): 10–19.

Vegeu també[modifica | modifica el codi]