La diversificació dels camps d'aplicació de la programació, va donar origen a variats tipus de llenguatges. En aquest article descobrirem què és la programació orientada a objectes i quins són els tipus de llenguatges de programació orientada a objectes que existeixen. Atreveix-te a ampliar el teu coneixement!
Programació orientada a objectes
En general, la programació requereix de el coneixement d'un llenguatge encarregat de transmetre les ordres a l'ordinador, i un algoritme convertit a programa, però què és la programació?
La programació és un conjunt d'accions que comporten a l'escriptura d'un codi, capaç de complir amb l'objectiu per al qual va ser creat. Per part seva, un codi font és la representació interna d'un programa o programari, i un programa és un grup d'ordres que regeixen el funcionament de les computadores.
Bàsicament, un programa passa per tres etapes: l'edició d'el programa en un llenguatge adequat, la transformació de el codi font en instruccions per a la màquina, i el enllaçat entre els codis objectes i les llibreries de funcions, donant lloc, finalment, al que es coneix com un codi executable.
Un programa ha d'estar escrit en un llenguatge de programació que sigui comprensible per a l'usuari. Perquè això succeeixi, el programador ha d'adoptar un dels tants paradigmes de programació existents, els quals determinen la visió i, per tant, l'escogencia dels mètodes a seguir en la construcció d'aquest.
Paradigmes de programació
Els avenços de la programació i la tecnologia, han donat origen a diverses metodologies o paradigmes de programació. Aquests al seu torn, han comportat a diversos estils de programació i diferents formes de resolució de problemes. A continuació, els paradigmes existents:
paradigma imperatiu
Estableix que els programes són una seqüència estricta d'instruccions de dalt a baix, la qual només es veu interrompuda per la inclusió d'un subprograma en algun lloc de la mateixa.
paradigma estructurat
Imposa estructures de codis agrupades per blocs de procediments i funcions. El codi es reprodueix en forma de cicle, dominat per una raó lògica.
paradigma declaratiu
No estableix l'ordre a seguir en la realització de les accions necessàries per resoldre un problema. Dins d'ell es distingeixen dos tipus: el paradigma funcional, on el problema i la solució es descriuen com a funcions, i el paradigma lògic, basat en un predicat lògic.
Paradigma de programació per esdeveniments
Es basa en la iteració infinita per detectar el problema i establir la forma de resoldre'l.
Paradigmes paral·lel, distribuït i concurrent
La realització d'el programa requereix diverses unitats de càlcul. Les rutines s'executen de forma independent sobre altres unitats de còmput.
Paradigma orientat a objectes
Aquest tipus de programació es basa en tres principis bàsics: l'encapsulament de les dades, l'abstracció de l'objecte i la comprovació de l'tipus segons la jerarquia de les classes.
És important destacar que un llenguatge de programació sol no respondre únicament a un paradigma, sinó que pot ser el resultat de la combinació de diversos tipus d'ells. No obstant això, a continuació ens dedicarem a detall únicament a definir què és la programació orientada a objectes i quins són els diferents llenguatges de programació orientada a objectes que existeixen.
qualitats
És el paradigma més estès en l'actualitat, a causa que permet un millor maneig de la complexitat a un cost raonable. Mitjançant ell es planteja la possibilitat de construir per parts, és a dir, dividir el treball en base a components, la qual cosa dóna com a resultat aplicacions robustes, portables i reutilitzables, amb beneficis a llarg termini.
A diferència d'altres tipus de programació, la programació orientada a objectes busca les parts en les entitats que sorgeixen de l'domini de el problema, i no dins de la mateixa solució de el problema. El requisit primordial és que cada component es comporti d'una manera esperada, tal que el nostre desenvolupament no es vegi afectat per la forma en què aquest estigui implementat, i que puguem conèixer a priori les condicions que ofereix cada component, així com la forma de connectar-nos amb ell.
Des d'un altre punt de vista, podem esmentar que la programació orientada a objectes està relacionada amb la teoria de el coneixement, la qual afirma que l'home emmagatzema la informació d'acord amb esquemes predeterminats, producte de les seves experiències com a persona. D'aquesta manera, aquest tipus de programació permet representar el coneixement de forma heurística o de manera teòrica, a través dels esquemes mentals de l'individu, fent ús dels coneixements previs emmagatzemats en unitats d'informació.
Origen
https://youtu.be/aESIbDclIzw?t=5
La programació orientada a objectes és una tècnica, estil o metodologia desenvolupada en la dècada de 1960, com a resultat de la crisi generada per la impossibilitat de canviar o modificar programes complexos. Situació que s'agreujava cada vegada més per la manca de personal especialitzat, disposat a donar-li manteniment als programes.
La solució momentània a aquesta crisi va estar en mans de la programació estructurada, la qual va consistir en descompondre els programes en procediments individuals, que realitzaran tasques específiques per separat. Això va portar amb si altres inconvenients, generats principalment per la dificultat que era aconseguir la coordinació entre els tants desenvolupadors que es trobaven involucrats en un projecte, ja que a major quantitat de tasques involucrades, major quantitat de programadors.
Sens dubte, la principal desavantatge d'aquest tipus de programació era la necessitat de separar conceptualment les dades dels codis. Situació que empitjorava directament amb la mida i la complexitat de el programa.
Així doncs, amb la finalitat de reduir la complexitat dels programes, va néixer la programació orientada a objectes. El seu principal avantatge és que fa possible la construcció de programes complexos mitjançant objectes més simples. Aquests objectes conformen les entitats dels programari orientats sota aquesta metodologia. La possibilitat d'heretar, tant dades com codis de les existents, millora la productivitat de programador. De la mateixa manera, facilita l'extensió i la reutilització de classes en altres aplicacions, sense haver de modificar en gran mesura el codi original.
Característiques
La programació orientada a objectes presenta múltiples qualitats, a continuació les principals:
- La base de la programació orientada a objectes són les classes, i no els algoritmes. Aquests conformen blocs lògics de construcció.
- Cada objecte és una instància d'una classe.
- Un programa és percebut com un mitjà per enviar i rebre missatges, a través d'un conjunt d'objectes que reaccionen entre si.
- Cada objecte ha de procurar la millor manera de respondre a cada missatge rebut.
- És possible que cada objecte respongui als missatges de maneres diferents.
- Facilita el canvi de programari a causa que els components són intercanviables.
- Els canvis parcials i interns no afecten el comportament de la resta de sistema.
- Si se segueixen els principis bàsics de la programació orientada a objectes, el cost de la construcció de el sistema serà menor que en casos en els quals les parts són interdependents.
- És possible que les classes derivades d'altres, heretin el coneixement i les habilitats de les seves antecessores. Per mitjà de l'herència, les classes es relacionen unes amb les altres, i s'aprofita la forma de treballar sense necessitat de reescriure el codi.
- Els mètodes d'una classe poden fer coses diferents, tot i que mantinguin el mateix nom. És a dir, a través del polimorfisme, el programador pot implementar diverses formes d'un mateix mètode, depenent de la classe sobre la qual es realitzi la implementació. El que significa que es pot accedir a diversos mètodes mitjançant el mateix nom o mitjà d'accés.
Diferències: programació estructurada vs. programació orientada a objectes
Com ja hem esmentat, la programació orientada a objectes representa l'evolució de la programació estructurada, la qual cosa no vol dir que sigui millor que ella, ja que cadascuna té la seva utilitat depenent de el tipus de sistema que es desenvoluparà. A continuació s'estableixen les diferències bàsiques que hi ha entre ambdues:
La programació estructurada resol problemes de tipus algorítmic, partint de la introducció d'unes dades, es genera una sortida. La programació orientada a objectes es basa en el modelatge d'objectes, de gran utilitat en el desenvolupament d'aplicacions web.
La primera se centra en una estructura de dades, mentre que la segona es basa en objectes, amb estat i comportament propis.
La informació dins de la programació estructurada flueix mitjançant estructures i cridats a funcions, en la programació orientada a objectes és el resultat de la interacció entre ells, mitjançant l'enviament i la recepció de missatges.
principis bàsics
Com a conseqüència de l'concepte de programació orientada a objectes, sorgeixen tres principis bàsics d'aquest paradigma. Aquests són:
Encapsulament de les dades
Com ja hem esmentat, s'espera que els objectes sàpiguen respondre als missatges que rep, mostrant un comportament específic. No obstant això, el que no volem és que qui envia el missatge conegui com ho fa. L'assoliment d'aquest objectiu és el que es coneix com encapsulament de les dades. És a dir, el que es vol és que cada part de el programa sàpiga només el que li interessa, evitant així els efectes col·laterals relacionats amb altres objectes.
En definitiva, amb l'encapsulament de les dades s'impossibilita l'accés als components dels objectes, és a dir, aquests es protegeixen dins d'un sola unitat de programació ben definida, ja que cada un d'ells posseeixen especificacions de disseny que els fa independents els uns dels altres.
La raó principal per la qual podem desitjar que l'objecte client desconegui la forma d'implementació és que, generalment, poden haver-hi diverses alternatives per a una mateixa operació. A més, en el futur, nosaltres poguéssim decidir canviar d'una alternativa a una altra, sense que el client ho sàpiga o vegi afectada la prestació de servei.
Abstracció de l'objecte
Una característica essencial de la programació orientada a objectes és que aquesta busca atacar el problema per parts. D'aquesta manera, el primer que fa és trobar els objectes, per després determinar com han d'interactuar i, finalment, implementar el comportament dels mateixos. En conseqüència, tenim que els objectes que trobem són els que ens ajudaran a resoldre el problema.
L'abstracció comporta dos tipus de coneixements, les dades o variables, que constitueixen l'esquema mental, i els mètodes, funcions o procediments, que relacionen aquest esquema amb altres esquemes predeterminats. És a dir, gràcies a l'abstracció de dades, es pot definir el domini i l'estructura de les dades, així com també es poden establir els mètodes per accedir-hi. Finalment, l'abstracció es converteix en un nou tipus de dada definit pel programador, conformat per atributs i mètodes que s'apliquen sobre els primers.
A causa de l'existència de múltiples esquemes mentals per a un mateix problema, cada programador pot organitzar les classes de diferents maneres, segons la seva percepció personal. El que vol dir que l'abstracció de l'objecte és la capacitat dins el disseny del programa de crear dades definides per l'usuari.
Comprovació de l'tipus segons la jerarquia de les classes
Es tracta del moment que tria el llenguatge per fer comprovacions de tipus. Hi ha llenguatges que decideixen fer-ho durant la compilació, i altres durant l'execució. Altres llenguatges ni tan sols compilen, el que no dóna l'oportunitat de fer comprovacions de cap tipus, sinó fins al temps d'execució.
Quan la comprovació es fa en temps d'execució, es denomina comprovació dinàmica. Per contra, quan es realitza en temps de compilació, es diu comprovació estàtica.
A causa de que en la comprovació estàtica els errors sorgeixen d'entrada, sense arribar a el moment de l'execució, sol dir-se que aquest tipus de comprovació és més segura. No obstant això, la comprovació dinàmica permet realitzar implementacions parcials, sense la necessitat de reescriure el codi recurridamente.
Com funciona?
El primer pas per a resoldre un problema sota aquest paradigma és trobar els objectes o entitats de l'domini de el problema. Després cal trobar la manera com aquestes entitats interactuen per resoldre el problema, establint els missatges que els objectes s'envien, en quin ordre i sota quines condicions ho fan. Finalment, cal implementar el comportament dels objectes, referent a la resposta que ells donen pel que fa als missatges.
En resum, quan s'executa un programa sota el paradigma de la programació orientada a objectes, succeeixen tres coses: es creen els objectes segons es necessitin, els missatges circulen d'un objecte a un altre paral·lel a el processament de la informació per part de el programa, i quan els objectes ja no són requerits, s'esborren per alliberar memòria en el sistema.
conceptes claus
Per poder entendre una mica més sobre què és la programació orientada a objectes, Cal que esmentem els següents conceptes bàsics:
- Objecte: Es refereix a l'entitat que pot ser receptora de missatges, alhora que pot respondre a ells i enviar missatges a altres objectes. És l'entitat que té comportament.
- Identitat: És l'aspecte que distingeix a un objecte d'un altre.
- Missatge: Es tracta de la interacció resultant entre una entitat que sol·licita un servei i una altra que el proporciona.
- Objecte client: És qui envia el missatge.
- Objecte receptor: És l'objecte que rep el missatge.
- Delegació: dit de l'enviament de missatges des d'un objecte cap a altres objectes. Quan un objecte necessita la col·laboració d'altres per poder respondre als missatges.
- Comportament: Són les respostes als missatges rebuts per un objecte receptor.
- Estat: dit de la situació actual de cada objecte.
- Responsabilitat: És la interacció entre l'estat i el comportament d'un objecte.
- Mètode: Es refereix a la implementació de la resposta donada per un objecte a un missatge rebut.
- Polimorfisme: Es tracta de la capacitat que posseeixen alguns objectes de respondre a un mateix missatge, però de diverses formes diferents.
- Classes: Són conjunts d'objectes que es comporten de la mateixa manera. Poden ser definides pel programador. Són esquemes mentals que permeten abstreure els objectes i determinar la forma de relacionar-se entre ells.
- Atribut: Es refereix a una variable interna de l'objecte creat per emmagatzemar part de l'estat de la mateixa.
- Contracte: dit de el coneixement del que ofereix cada component i la manera de connectar-nos amb ell.
Solució de problemes segons la programació orientada a objectes
Un cop identificat el problema i es té el plantejament de la possible solució, es requereix transcriure a un llenguatge de programació perquè la mateixa pugui ser executada per un ordinador, mitjançant l'ús d'un programa. Sota la metodologia de la programació orientada a objectes, es defineixen les següents etapes:
- Definició de el programa: Tracta de la descripció esquemàtica de el problema, de manera clara, comprensible i ben definida. Comporta la identificació de l'origen i l'aspecte de les dades a processar, així com la descripció dels resultats i la forma en la qual seran presentats.
- Anàlisi i disseny orientat a objectes: Es refereix a la identificació i descripció dels objectes en el domini de el problema. Després de tot això, s'estableixen els atributs, relacions i mètodes a seguir, això amb la finalitat de definir les classes que seran implementades en un llenguatge de programació específic.
- Programació: Bàsicament, es refereix a la transcripció de el programa, la qual cosa inclou redactar correctament el codi en un llenguatge de programació, utilitzant un estil de desenvolupament capaç de garantir la qualitat del producte, la qual ocasionarà la deguda resolució de el problema. Aquesta etapa implica la construcció d'algoritmes, l'elaboració de diagrames de flux i la programació final, passant per les proves d'escriptori, la codificació, compilació i execució de el programa.
- Documentació: Comporta la descripció de la seqüència de passos necessaris per arribar a la resolució d'un problema. Implica la incorporació de línies de comentaris que aclareixin o expliquin el significat de les línies de codis que puguin resultar confuses, sobretot les referents als identificadors i les estructures de dades declarades, les estructures de control i els mètodes i els seus paràmetres. Aquesta etapa és essencial per a l'èxit del producte final, ja que si falla la documentació dels programes resulten difícils de llegir i de depurar, més encara es fa gairebé impossible la seva modificació i manteniment.
En un altre ordre d'idees, podem dir que la funcionalitat dels llenguatges de programació ha augmentat amb els anys, degut principalment a l'aparició de nous i variats camps d'aplicació. Si bé és cert que a el principi aquests llenguatges eren empleats, bàsicament, per manejar grans quantitats de dades i realitzar determinats càlculs numèrics.
Ara els llenguatges de programació són utilitzats gairebé en qualsevol camp de la societat que inclogui el maneig de bases de dades, la generació d'imatges i, fins i tot, la intel·ligència artificial, entre molts altres aspectes.
Principalment, el naixement de noves tecnologies d'enginyeria de programari ha ocasionat l'auge dels llenguatges de programació que veurem a continuació.
Llenguatges de programació orientada a objectes
Són llenguatges dissenyats per integrar les dades i els subprogrames en classes. Aquestes poden heretar propietats d'altres codis transformats i donar lloc a noves característiques, que comportin també a una nova metodologia de programació.
Classificació
Com veurem més endavant, hi ha múltiples llenguatges de programació que responen a el paradigma d'orientació a objectes. D'acord amb la seva manera d'implementació, es classifiquen en:
- Segons implementen el comportament: Abasta els llenguatges que es troben basats en classes i en prototips o exemples.
- Segons implementen la creació d'objectes: Es basen en el temps d'execució en l'àrea de memòria dinàmica o en el temps de compilació de la pila.
- Segons la verificació de tipus: referits a la verificació en temps de compilació o en la verificació en temps d'execució.
Dins dels principals llenguatges orientats a objectes tenim:
Petita xerrada
Només pot ser programat sota el paradigma de la programació orientada a objectes. És un llenguatge basat en classes, que dissenya objectes a l'àrea de memòria dinàmica en temps d'execució. Només fa verificacions de tipus en temps d'execució, és a dir, és un llenguatge de comprovació dinàmica.
Java
És un dels llenguatges més usats en l'actualitat, està completament orientat a objectes, amb sintaxi similar a C i C ++. És independent de la plataforma.
A l'igual que Smalltalk és un llenguatge basat en classes, que crea els objectes a l'àrea de memòria dinàmica en temps d'execució, però no fa revisions de tipus en temps d'execució, sinó en temps de compilació, amb la diferència que crea un codi intermedi no executable, provinent d'una precompilación. Això el converteix en un llenguatge de comprovació estàtica.
La programació orientada a objectes Java corren sobre una màquina virtual especialitzada en aquest tipus de llenguatge, el qual funciona com si fos un ordinador i, per tant, permet l'execució dels mateixos sense que sigui necessària la modificació d'ells. Aquest tipus de màquines és el que s'anomena un intèrpret.
JavaScript
A diferència de Smalltalk i Java, és un llenguatge que es basa en la creació de prototips o exemples. És interpretat i sense tipus, és a dir, no realitza revisions mèdiques de tipus ni en temps d'execució ni en temps de compilació. Crea objectes en l'àrea de la memòria dinàmica en temps d'execució. Com no té compilació, es converteix en un llenguatge amb comprovació dinàmica.
És un llenguatge d'alt abast, gràcies a la seva portabilitat i integració, així com a les seves tècniques de programació estàndards i senzilles. En altres paraules, JavaScript és un codi que es troba immers en una pàgina web, la finalitat és millorar el dinamisme d'aquesta pàgina.
C + +
Constitueix un increment a l'tradicional llenguatge C, mitjançant l'absorció de les bondats d'aquest llenguatge i la incorporació de suports per a objectes. Encara que abasta tres paradigmes de programació diferents, com ho són: la programació estructurada, la programació genèrica i la programació orientada a objectes, va ser ell qui va propiciar el pas de l'paradigma estructurat a el paradigma orientat a objectes.
És un llenguatge versàtil, usat molt freqüentment entre els programadors d'aplicacions, tant en Windows com en GNU Linux. Crea objectes a la memòria dinàmica en temps d'execució. Se centra bàsicament en l'acompliment, la portabilitat i l'abstracció. El seu principal desavantatge és que a l'compilar, es genera un fitxer executable el codi és vàlid únicament per a la plataforma on es va realitzar la compilació. D'altra banda, a l'ésser un llenguatge executable, no és independent de la plataforma.
C#
És un llenguatge de programació que corre en temps d'execució i es troba inclòs dins la plataforma .NET, la qual cosa li permet compartir i reconèixer-ne les llibreries. És totalment orientat a objectes, permet la creació de tot tipus d'aplicacions.
Constitueix una evolució dels llenguatges C i C ++, eliminant la complexitat d'aquest últim, ja que és més fàcil d'utilitzar i disminueix el marge d'error durant el seu funcionament, a causa de l'acceptació de la precompilación.
Pitó
És un llenguatge multiplataforma, principalment orientat a objectes, però abasta altres paradigmes com la programació imperativa, la programació funcional i la programació orientada a aspectes.
La seva sintaxi neta, molt propera a l'llenguatge natural, afavoreix la lectura del seu codi. És altament recomanat per iniciar-se al món de la programació.
S'executa mitjançant un programa intermedi, és a dir, a través d'un intèrpret. Per tractar-se d'un llenguatge semi interpretat és flexible i portable. És de tipus dinàmics, el que vol dir que el tipus de dada es determina en temps d'execució.
Pascal
En l'actualitat, és el llenguatge usat per excel·lència en l'ensenyament de la programació. És de sintaxi senzilla, amb un llenguatge molt estructurat, el que facilita la lectura i interpretació dels programes. La seva compilació es pot fer en qualsevol màquina que tingui un compilador Pascal.
Tot i ser un llenguatge estructurat, permet la programació orientada a objectes mitjançant la seva versió Turbo Pascal. Aquest posseeix un entorn integrat, des del qual és possible escriure els programes i provar-los. En definitiva, Pascal és un llenguatge de propòsit general.
Si el tema que t'interessa està relacionat amb programació, et convido a llegir Què és un algoritme en programació?