Programimit object-oriented ( OOP ) është një paradigmë të programimit duke përdorur " objekte ", - strukturat e të dhënave që përbëhet nga të dhënat e fushave dhe metodat e së bashku me ndërveprimet e tyre - për të hartuar aplikacioneve dhe programeve kompjuterike.Teknikat e programimit mund të përfshijnë tipare të tilla si të dhënat e abstraksionit , encapsulation , mesazheve , modularity , polymorphism, dhe trashëgimi . Shumë moderne gjuhë programimi tani mbështetjen e OOP, të paktën si një opsion.
Thjeshtë, jo OOP programs mund të jetë një "të gjatë" listën e deklaratave (ose commands). Programeve më komplekse, shpesh grup seksione më të vogla të këtyre pasqyrave në funksione apo subroutines secila prej të cilave mund të kryejë një detyrë të veçantë. Me dizajne të këtij lloji, është e zakonshme për disa të dhënave të programit të 'global', dmth të arritshme nga çdo pjesë e programit. Si programe të rriten në madhësi, duke lejuar çdo funksion të ndryshojë çdo pjesë të të dhënave do të thotë se mete mund të ketë një shtrirje të gjerë efekte.
Në të kundërt, object-oriented qasje inkurajon ose eshte programues në vendin e të dhënave, ku ajo nuk është drejtpërdrejt i kapshëm nga pjesa tjetër e programit. Në vend të kësaj, të dhënat është në disponim duke thirrur funksione të shkruar posaçërisht, i quajtur zakonisht metoda , të cilat janë të bundled ose në me të dhënat apo të trashëguara nga "objektet e klasës." Këto të veprojë si ndërmjetës për retrieving ose ndryshimin e të dhënave që ata të kontrollit. Ndërtimin e programimit që kombinon të dhënat me një grup të metodave për të hyrë dhe menaxhimin e këtyre të dhënave është quajtur një objekt. Praktika e përdorimit të subroutines për të shqyrtuar apo modifikojë llojeve të caktuara të të dhënave, megjithatë, ishte edhe mjaft i zakonshëm që përdoret në jo-OOP programimit modulare , edhe para se të përdorim ne gjerësin e programimit object-oriented.
Një object-oriented program do të zakonisht përmbajnë lloje të ndryshme të objekteve, çdo lloj i korrespondon një lloj të veçantë të të dhënave komplekse që do të menaxhohet ose ndoshta për një objekt të vërtetë të botës apo koncept të tilla si një llogari bankare , një lojtar hokej , ose një buldozer . Një program mund të përmbajë kopje të shumta të çdo lloji të objektit, një për secilin nga objektet e botës reale programi është që kanë të bëjnë me të. Për shembull, mund të ketë një llogari bankare objekt për çdo llogari të vërtetë të botës në një bankë të veçantë. Çdo kopje e objektit llogari bankare do të jenë njësoj në metodat që ajo ofron për manipulimin apo leximin e të dhënave të saj, por të dhënat brenda çdo objekt do të ndryshojnë duke pasqyruar historinë e ndryshme të secilës llogari.
Objektet mund të mendohet si i dhënë të dhënat e tyre brenda një sërë funksionesh projektuar për të siguruar që të dhënat janë përdorur siç duhet, dhe për të ndihmuar në këtë përdorim. Metodat e objektit do të zakonisht përfshijnë kontrolle dhe masa mbrojtëse që janë specifike për lloje të të dhënave objekti i përmban. Një objekt mund të ofrojnë të thjeshtë për ta përdorur, metoda të standardizuara për kryerjen e operacioneve të veçantë në të dhënat e saj, ndërsa fshehjen specifikat se si këto detyra janë kryer. Në këtë mënyrë ndryshimet mund të bëhen në strukturën e brendshme ose metodat e një objekti pa kërkuar se pjesa tjetër e programit të ndryshohet. Kjo qasje mund të përdoret gjithashtu për të ofruar metodave të standardizuara të gjithë llojet e ndryshme të objekteve. Si shembull, disa lloje të ndryshme të objekteve mund të ofrojnë metoda të shtypura. Çdo lloj i objektit të zbatuar këtë metodë mund të shtypura në një mënyrë të ndryshme, duke reflektuar lloje të ndryshme të të dhënave secila përmban, por të gjitha metodat e ndryshme të shtypura mund të quhet në të njëjtën mënyrë të standardizuar nga vende të tjera në program. Këto karakteristika të bëhet veçanërisht e dobishme kur më shumë se një programues kodi është duke kontribuar për një projekt ose kur qëllimi është për të reuse kodin mes projekteve.
Programimit object-oriented i ka rrënjët që mund të gjurmohen të 1960. Si hardware dhe software u bë gjithnjë e më komplekse, shpesh përshtatshmëri u bë një shqetësim. Hulumtuesit studiuar mënyra për të ruajtur cilësinë software dhe zhvilluar programimit object-oriented pjesërisht për të adresuar problemet e përbashkëta duke theksuar me forcë diskrete, njësitë reusable e logjikës programimit [ citim i duhur ] .Teknologjia fokusohet në të dhënat se sa procese, me programet e përbërë nga të vetë-mjaftueshme module ("klasa"), çdo rast nga të cilat ("objekte") përmban të gjitha informatat e nevojshme për të manipuluar strukturën e saj të të dhënave ("anëtarë"). Kjo është në kontrast të ekzistuese programet modulare që kishin qenë mbizotëruese për shumë vite që u përqëndrua në funksionin e një moduli, në vend se në mënyrë specifike të dhëna, por me kusht në mënyrë të barabartë për të reuse kodin , dhe vetë-mjaftueshme njësive reusable e logjikës programimit, duke bërë të mundur bashkëpuniminnëpërmjet përdorimit të moduleve të lidhura ( subroutines ). Kjo qasje më konvencionale, i cili ende vazhdon, tenton të marrin në konsideratë të dhënat dhe sjelljen e veç e veç.
Një object-oriented program mund në këtë mënyrë të shikohet si një koleksion të bashkëveprojmë objekte , në krahasim me modelin konvencional, në të cilin një program është parë si një listë të detyrave ( subroutines ) për të kryer. Në OOP, çdo objekt është i aftë të marrë mesazhe, përpunimin e të dhënave, dhe dërgimin e mesazheve me objekte të tjera. Çdo objekt mund të shihet si një "makinë" të pavarur me një rol të veçantë apo përgjegjësi. Veprimet (ose " metoda ") mbi këto objekte
Historia
Termat "objekte" dhe "orientuar" në diçka si kuptimin modern e programimit object-oriented duket për të bërë paraqitjen e tyre të parë në MIT në fund të viteve 1950 dhe fillim të viteve 1960. Në mjedisin e inteligjencës artificiale grupit, në fillim të 1960, "objekti" mund t'i referohet artikujve të identifikuar ( Lisp atomet) me pronat (atributet); Alan Kay ishte vonë për të përmendin një kuptim të detajuar të internals Lisp si një ndikim të fortë në të menduarit e tij në vitin 1966. Një tjetër shembull i hershëm MIT u Sketchpad krijuar nga Ivan Sutherland në 1960-61, në spjegim të raportit 1963 teknike bazuar në disertacionin e tij për Sketchpad, Sutherland përcaktuar nocionet e "objektit" dhe "shembull" (me konceptin e klasës i mbuluar nga "master" ose "përkufizim"), megjithëse të specializuar për ndërveprim grafike. Gjithashtu, nje MIT ALGOL version, AED-0, lidhur me të dhënat e strukturave ("plexes", në atë dialekt) direkt me procedurat, prefiguring cilat ishin quajtur më vonë "mesazhe", "metoda" dhe "funksionet anëtare".
Objektet si koncept formale në programimin u futur në 1960 në Simula 67, një rishikim i madh i Simula unë, një gjuhë programimi i dizajnuar për simulim ngjarje të veçantë , krijuar ngaOle-Johan Dahl dhe Kristen Nygaard e Qendrës Computing norvegjeze në Oslo . Simula 67 u ndikuar nga SIMSCRIPT dhe Hoare i propozoi "klasa rekord".Simula paraqiti idenë e klasave dhe raste ose objekte (si dhe subclasses, metoda virtuale, coroutines, dhe simulimi diskrete ngjarje) si pjesë e një paradigmë të qartë programimit. Gjuha e përdorur edhe automatike mbledhjen e mbeturinave që ishin shpikur më parë për programimit funksional gjuhën Lisp . Simula është përdorur për modelimin fizike, të tilla si modele për të studiuar dhe për të përmirësuar lëvizjen e anijeve dhe të përmbajtjes së tyre nëpërmjet porteve të ngarkesave. Idetë e Simula 67 ndikuar shumë gjuhë më vonë, duke përfshirë Smalltalk, derivatet e Lisp ( CLOS ), Object Pascal , dhe C + + .
Smalltalk gjuhës, e cila u zhvillua në Xerox Parc (nga Alan Kay dhe të tjerët) në vitet 1970, futur termi programimit object-oriented për të përfaqësuar përdorimin e përhapur të objekteve dhe mesazheve si bazë për llogaritje. Krijuesit Smalltalk u ndikuar nga idetë e futur në Simula 67, por Smalltalk është projektuar të jetë një sistem plotësisht dinamik në të cilin klasa mund të jetë krijuar dhe modifikuar dinamike dhe jo statike si në Simula 67.Smalltalk dhe me të OOP u njohën me një audiencë më të gjerë nga çështja gusht 1981 të revistës Byte.
Në vitin 1970, puna Smalltalk Kay kishte ndikuar komunitetit Lisp për të përfshirë objektin bazuar në teknikat që u prezantua për zhvilluesit nëpërmjet makinës Lisp . Eksperimentimi me zgjerime të ndryshme për të Lisp (si unazore dhe Flavors futjen e trashëgimisë të shumta dhe mixins ), çoi përfundimisht në sistemin e përbashkët Lisp Object (CLOS, një pjesë e gjuhës standardizuar e parë e programimit object-oriented, ANSI Common Lisp ), e cila integron programimit funksional dhe programimin object-oriented dhe lejon vazhdimin nëpërmjet njëprotokoll Meta-objekt . Në vitet 1980, ka qenë një përpjekje për të hartuar disa arkitektura procesor që përfshiu mbështetjen e hardware për objektet në kujtesë, por këto nuk ishin të suksesshme. Shembujt përfshijnë iAPX Intel 432 dhe zgjuar Lin Rekursiv .
Programimit object-oriented zhvilluar si metodologjia e programimit dominuese në fillim të viteve 1990 dhe në mes të gjuhëve programuese, kur në mbështetje të teknikave u bë gjerësisht i disponueshëm. Këto përfshinin Visual FOXPRO 3,0+, dhe Delphi. Dominimi i saj ishte rritur më tej nga popullariteti në rritje i user interfaces grafike , të cilat mbështeten kryesisht mbi të object-oriented teknikat e programimit. Një shembull i një biblioteke të lidhur ngushtë dinamike GUI dhe gjuhë OOP mund të gjenden në kakao kornizat për Mac OS X , të shkruara në Objective-C , një object-oriented, extension dinamike mesazheve të C në bazë të Smalltalk. OOP toolkits rritur gjithashtu popullaritetin e -shtyrë ngjarje programimit (edhe pse ky koncept nuk është i kufizuar në OOP). Disa mendojnë se bashku me GUIs (reale apo të perceptuar) ishte ajo lëvizje OOP në rrjedhë programimit.
Në ETH Zürich , Niklaus Wirth dhe kolegët e tij kishte qenë edhe hetuar tema të tilla si të dhënat e abstraksionit dhe programeve modulare (edhe pse kjo kishte qenë në përdorim të përbashkët në 1960 ose më herët). Modula-2 (1978) përfshinte të dyja, dhe e pasuar të projektimit, Oberon , përfshirë një qasje të veçantë të orientimit të objektit, klasa, dhe të tilla.Qasja është ndryshe nga Smalltalk, dhe shumë ndryshe nga C + +.
Object-oriented features janë shtuar në shumë gjuhë ekzistuese gjatë asaj kohe, duke përfshirë edhe Ada , BASIC , Fortran , Pascal , dhe të tjerët. Duke shtuar këto karakteristika të gjuhëve të cilat nuk ishin projektuar fillimisht për ato shpesh çoi në probleme me pajtueshmërinë dhe maintainability të kodit.
Kohët e fundit, një numër gjuhësh të kanë dalë që janë kryesisht object-oriented ende në përputhje me metodologjinë procedurale, të tilla si Python dhe Ruby . Ndoshta më të komercialisht të rëndësishme të kohëve të fundit object-oriented gjuhë Visual Basic.NET (VB.NET) dhe C # , të dy të dizajnuara për të Microsoft-it . NET platformë, dhe Java , të zhvilluar nga Sun Microsystems . Të dy kornizat e tregojnë të mirën e përdorimit të OOP, duke krijuar një abstraksion nga zbatimi në mënyrën e vet. VB.NET dhe C # mbështetjen ndër-gjuha trashëgimi, duke lejuar klasat e përcaktuara në një gjuhë në klasat e subclass përcaktuara në gjuhë tjetër. Zhvilluesit zakonisht hartojnë Java që bytecode , Java lejuar për të kandiduar në çdo sistem operativ për të cilat një Java makinë virtuale është në dispozicion. VB.NET dhe C # e bëjnë përdorimin e modelit Strategjisë për të kryer ndër gjuhën trashëgimi, ndërsa Java e bën përdorimin e modelit Adapter
Ashtu si programimin procedural çoi në përmirësimet e teknikave të tilla si programimit të strukturuar , moderne object-oriented metodat design software përfshijnë përmirësime të tilla si përdorimi i modeleve të dizajnit , të projektimit me kontratë , dhe gjuhët e modelimit (të tilla si UML ).