Lankide:Guskikalola/Proba orria

Wikipedia, Entziklopedia askea
UML notazioan definitutako klase bat. Klase hau butoi bat irudikatzen du. Butoi klase honek eremuetan informazioa gordetzen du eta metodoetan funtzionalitatea. Herentziaren bitartez butoi mota desberdinak sortu daitezke. Objektuak klasearen instantziak dira.

Objektuei Bideratutako Programazioa (OBP) (ingelesez, Object-Oriented Programming edo OOP) programazio paradigma bat da, oinarri moduan objektuen kontzeptua erabiltzen duena. Objektuak klaseen instantzia moduan sortzen diren datu-mota abstraktu bat dira. Objektuetan informazioa (datuak) eta haiek atzitzeko funtzioak (kodea) kapsulatuta daude: informazioa eremuetan (atributuetan, propietateetan) eta kodea metodoetan (prozeduretan).

OBP-ren funtsezko ezaugarri batzuk hauek dira: herentzia, kohesioa, abstrakzioa, polimorfismoa, akoplamendua eta kapsulazioa.

Gaur egun OBP onartzen duten hainbat programazio-lengoaia daude, batzuk aipatzearren: C++, Objective-C, Smalltalk, Delphi, Java, Javascript, C#, Perl, Python, Ruby eta PHP.

Sarrera[aldatu | aldatu iturburu kodea]

Programazio egituratu tradizionalean datuak eta prozedurak bereizita daude eta ez dute harremanik. Sarrera-datuak prozesatuz irteerako datuak lortzea da helburua. Objektuei Bideratutako Programazioan, aldiz, objektuak erabiltzen dira.

Objektuak identitate, egoera eta portaera jakin bat duten entitateak dira. Identitatea identifikatzaile moduko bat da, objektuak haien artean bereizten dituena. Objektuaren eremuetan dagoen informazioaren bidez egoera definitzen da eta metodoen bidez portaera. Mundu errealeko elementuei erreferentzia egin diezaiekete objektuek.[1]

Objektuak diseinatzean eta sortzean klase-hierarkia erabiltzen da. Klaseak eta azpiklaseak, logika matematikoko multzoen eta azpimultzoen parekoak dira. Klaseek metodoak behar dituzte eremuak atzitzeko.

Datuak eta metodoak egitura berean antolatzeko mekanismo gisa kapsulazioa erabiltzen da. Haren bidez informazioa ezkutatzea lortzen dela esaten da. Horrela, klase bat erabili behar duen programatzaileak objektua nola antolatuta dagoen (datuak, metodoen inplementazioa) jakin beharrik ez du. Datuen integritatea bermatzeko, beharrezkoa da erabiltzaileari objektuaren eremuetan dagoen informazioa zuzenean aldatzen ez uztea. Hori lortzeko, kapsulazioan hiru atzipen-maila zehazten dira: publikoa, babestua eta pribatua.

Historia[aldatu | aldatu iturburu kodea]

Objektuei Bideratutako Programazioaren (OBP) kontzeptuak 50eko hamarkadaren amaieran eta 60koaren hasiera agertu ziren lehen aldiz. MITko Adimen Artifizialeko sailean "objektu"aren kontzeptua erabiltzen hasi zirenean propietateak (atributuak) dituzten elementuei (LISP atomoei) egiten zieten erreferentzia.[2] Kontzeptu horien erabilera erakusten duen garai hartako beste adibide bat MITko Sketchpad konputagailu-programa da. Ivan Sutherland-ek sortu zuen 1960an doktore-tesia egiten ari zenean.[3] Sketchpad-i buruzko txosten teknikoaren glosarioan, Sutherlandek "objektua" eta "instantzia" kontzeptuak definitu zituen eta klasearen kontzeptua "master" eta "definition" terminoen bidez erabili zuen.[4] Interfaze grafikoen garapenean garrantzia handia izan zuen Sketchpad konputagailu-programak. Egindako lanagatik Turing saria jaso zuen Sutherlandek 1988an.[5] OBPko kontzeptuen lehen erabileren beste adibide bat MITko ALGOL bertsio bat da (AED-0 bertsioa). Datu-egituren ("plexes" terminoaz izendatuak bertsio hartan) eta prozeduren artean lotura zuzena ezarri zen. Gerora "metodo" kontzeptua izango zenaren aurrekari moduan har daiteke.[6]

OBParen kontzeptua 60ko hamarkadan formalizatu zen, Simula programazio-lengoaiak (Simula 67) klasea, objektua, herentzia, instantzia eta lotura dinamikoa moduko kontzeptuak inplementatu zituenean. [7][8] Simula I (1961–1965) eta Simula 67 (1965–1968) bertsioak garatu ziren. Ole-Johan Dahl-ek eta Kristen Nygaard-ek sortu zuten Simula, Oslo-n kokatuta dagoen Norvegiako Konputazio-Zentruan. Simulazioak egiteko helburuarekin sortu zen, portuetan itsasontzien eta haiek garraiatutako kargen mugimendua aztertzeko eta hobetzeko ereduak sortu ahal izateko. Dagoeneko LISP programazio-lengoaia funtzionalean inplementatuta zegoen "zabor-bilketa automatikoa" (ingelesez, automatic garbage collection) ere erabiltzen zuen. Simula 67 programazio-lengoaian inplementatutako kontzeptu horiek eragina izan zuten gerora garatutako beste programazio-lengoaia batzuetan, hala nola, Smalltalk, Object Pascal, C++, Ada eta BASIC.

70eko hamarkadan, Alan Kay-k, Dan Ingalls-ek eta Adele Goldberg-ek Smalltalk programazio-lengoaiaren lehen bertsioa garatu zuten Xerox PARC enpresan. Lengoaiak objektuetara bideratutako kontzeptuak erabiltzen zituelako eta garapenerako ingurune grafikoa erabiltzen zuelako nabarmendu zen. Hainbat bertsio sortu ziren, eta komunitatearen interesa piztu zen. Smalltalk-ek Simula 67 lengoaiaren eragina jaso zuen arren, sistema guztiz dinamikoa izateko diseinatu zen. Horrela, klaseak modu dinamikoan sortu eta aldatu zitezkeen.[9][10]

70eko hamarkadan, Smalltalk-ek eragina izan zuen Lisp-eko komunitatean, eta garatzaileek objektuei bideratutako teknikak txertatu zituzten Lisp makinetan exekutatzeko. Egindako esperimentuetatik LOOPS (Lisp Object-Oriented Programming System) eta Flavors moduko Lisp-en hedapenak sortu ziren. Azkenean, CLOS (Common Lisp Object System) garatzea lortu zen, objektu-sistema dinamiko ahaltsua, programazio funtzionala eta objektuetara bideratutakoa bateratzen dituena.

80ko hamarkadan zehar, OBP garrantzia hartzen joan zen. 1981ean, Goldbergek Smalltalk-i eta OBPari buruzko artikulu bat argitaratu zuen "Byte Magazine" aldizkarian, eta publiko zabalagoarengana iristea lortu zuen. 1986an, ACM (Association for Computing Machinery) elkarteak "Conference on Object-Oriented Programming, Systems, Languages, and Applications" (OOPSLA) biltzarra antolatu zuen lehen aldiz, eta espero baino parte-hartzaile gehiago izan zen bertan. 80ko hamarkadaren erdialdean, Brad Cox-ek "Objective-C" garatu zuen, C programazio-lengoaiari Smalltalk-en estiloko mezu-trukea erantsi zion OBP lengoaia. Azkenean, Bjarne Stroustrup-ek objektuei bideratutako C++ programazio-lengoaia sortu zuen. 1985ean, Bertrand Meyerrek Eiffel programazio-lengoaiaren lehen diseinua egin zuen. Softwarearen kalitatearen ikuspuntutik, Eiffel objektuei bideratutako programazio-lengoaia purua da.

90eko hamarkadan, OBParen erabilera asko zabaldu zen, batez ere OBP tekniketan oinarritutako programazio-lengoaien erabilera (C++, Visual FoxPro[11], Delphi) orokortu zenean. Interfaze grafikoen erabileraren gorakadak ere eragina izan zuen arrakastan. Lehendik existitzen ziren lengoaia askotan OBP ezaugarriak gehitu ziren, Ada, BASIC, Fortran, Pascal eta COBOL lengoaietan, besteak beste. Hasieran OBP paradigmarako diseinatu ez ziren lengoaiei OBP ezaugarriak gehitzeak, askotan, bateragarritasun- eta mantentze-arazoak ekarri zituen.

Gerora, neurri handi batean OBP paradigmari jarraitzen dioten baina programazio funtzionalarekin ere bateragarriak diren lengoaiak sortu dira. Horietako bi Python eta Ruby dira. Segur aski, ikuspegi komertzialetik garrantzitsuenak Java (Sun Microsystems-ek garatua), C# eta Visual Basic (Microsoften .NET plataformarako diseinatutakoak) dira.

Oinarrizko kontzeptuak[aldatu | aldatu iturburu kodea]

Klasea

Klase bat "plantilla" moduko zerbait da non eremuak eta metodoak definitzen dira objektu mota baterako. Plantilla honen helburua objektu berrien sorkuntza erreztea da. Klase batetik abiatuta objektu berrien sorkuntzari instantziazioa deritzo.

Objektua

Metodo eta eremuen multzoa da. Klase baten instantzia da. Mundu errealeko edo sistemaren barneko elementuei dagokie.

Eremua

Objektu bateri lotutako datu mota bat gordetzen duen edukiontzia. Objektuaren ezaugarriak bezala ulertu daiteke. Hauen balioa metodo baten exekuzioaren bidez aldatu daiteke.

Metodoa

Objektu bateri lotutako algoritmoa da. Honen exekuzioa mezu bat jasotzearen ondorioa da. Metodo batek objektuaren eremuetan aldaketak eragin ditzake edo beste objektu batentzako mezua sortu ditzake.

Gertaera

Sistemaren ekintza bat adierazten dute. Gertaerak elkarrekintzaren ondorioz agerten dira, hala nola, erabiltzailearen eraginez edo beste objektu batek bidalitako mezu baten eraginez. Gertaera baten ondorioz sistemak mezu bat bidaliko dio dagokion objektuari.

Mezua

Objektu bateri bideratutako komunikazioa, agintzen diona honen metodoren bat exekutatzea gertaerak adierazitako parametroekin.

Ezaugarriak[aldatu | aldatu iturburu kodea]

Herentzia

Klase berri bat sortzea existitzen den beste klase batetik. Klase berria, azpi-klasea, oinarrizko klasearen eremu eta metodoak izango ditu. Honi esker klaseen egitura hierarkiko bat antolatu daiteke, klaseak gero eta espezializatuagoak eginda eta horrela hasieratik hasi behar izatea aurrezten.

Kapsulazioa

Entitare berdinari dagokien elementuak biltzea, abtrakzio maila berdinean, kohesio maila handiagoa ahalbidetuz.

Abstrakzioa

Arazo baten zeregin zehatz batean zentratzea, gainontzekoak alde batera utzita. Programatzeko garaian aktore abstraktuak irudikatzen dituzten objektuak definitzea ahalbidetzen du, aktore honek zeregin bat beteko du, zerbaitetaz informatuko du edo bere egoera aldatuko du baino ez du azalduko nola inplementatuta daude ataza hauek.

Polimorfismoa

Entitate desberdinentzat interfaze komun bat eskeitzea da. Adibidez, Java-n klase guztiak Object klasetik heredatzen dute. Hortaz, Object motako aldagai bat sortu daiteke eta edozein klaseko instantzia esleitu.

Modularitatea

Aplikazio bat atal txikietan, modulu izenekoak, banatzea ahalbidetzen duen ezaugarria da. Atal bakoitza ahal den independentzia handiena izan behar du.

Informazioaren ezkutaketa

Objektu bakoitza kanpoaldetik isolatuta dago. Beste objektuek honekin komunikatzeko interfaze bat eskeintzen du. Isolamendua objektuaren eremuak babesten ditu baimenik gabeko aldaketatik. Honek bermatzen du objektu baten barneko egoera ez dela ezusteko moduan aldatuko, sahiestuz albo-ondorioak eta ezusteko interakzioak.

Zaborraren bilketa

Zaborraren bilketa ( garbage collection, ingelesez ) objektuen zuntziketa automatikoaz arduratzen den teknika da, honeri lotutako memoria askatuz. Erreferentziarik gabeko objektuak ( dagoeneko erabiltzen ez direnak ) zuntzitzeko bezala markatzen dira. Honi esker programatzaileak ez da arduratu behar memoriaren kudeaketaz ( objektu berri bateri memoria atal bat esleitzea eta dagoeneko erabiltzen ez den objektuaren memoria atala askatzea ). OBP onartzeko luzatu ziren programazio lengoai gehienak ez dute ezaugarri hau inplementatzen, hala nola, C++ eta Object Pascal.

Erreferentziak[aldatu | aldatu iturburu kodea]

  1. Booch, Grady. (1994). Software engineering with Ada. (3rd ed. argitaraldia) Benjamin/Cummings, 220 or. ISBN 0-8053-0608-0. PMC 28293653. (Noiz kontsultatua: 2022-11-07).
  2. Levin, Michael I.. (1965). LISP 1.5 programmer's manual : the Computation Center and Research Laboratory of Electronics, Massachusetts Institute of Technology. (2d ed. argitaraldia) M.I.T. Press ISBN 0-262-13011-4. PMC 1841373. (Noiz kontsultatua: 2022-11-07).
  3. (Ingelesez) Sutherland, Ivan Edward. (1963). Sketchpad, a man-machine graphical communication system. Massachusetts Institute of Technology (Noiz kontsultatua: 2022-11-18).
  4. Sutherland, Ivan Edward. (1963). «Sketchpad, a man-machine graphical communication system» web.archive.org (Noiz kontsultatua: 2022-11-18).
  5. (Ingelesez) «A.M. Turing Award» amturing.acm.org (Noiz kontsultatua: 2022-11-18).
  6. (Ingelesez) Introduction to Software Engineering with the AED-0 Language,. (Noiz kontsultatua: 2022-11-18).
  7. Holmevik, J.R.. (1994). «Compiling SIMULA: a historical study of technological genesis» web.archive.org (Internet Archive) (Noiz kontsultatua: 2022-11-18).
  8. Holmevik, J.R.. (1994). «Compiling SIMULA: a historical study of technological genesis» IEEE Annals of the History of Computing 16 (4): 25–37.  doi:10.1109/85.329756. ISSN 1934-1547. (Noiz kontsultatua: 2022-11-18).
  9. «The Early History of Smalltalk» gagne.homedns.org (Noiz kontsultatua: 2022-11-18).
  10. «The Early History of Smalltalk» web.archive.org 2008-07-10 (Noiz kontsultatua: 2022-11-18).
  11. «Visual FoxPro 3.0 Reviewers Guide» www.dfpug.de (Noiz kontsultatua: 2022-11-18).