Programimi i orientuar në objekte
Programimi i orientuar në objekte ose shkurtimisht POO (ang. Object-oriented programming ose shkurtimisht OOP) është një paradigmë programore e cila e shfrytëzon konceptin e objektit si dhe ndërveprimeve e tija për të dizajnuar programe kompjuterike. Në këtë paradigmë programore përfshihen tipare të ndryshme si kapsulimi (ang. encapsulation), modulariteti (ang. modulariteti), polimorfizmi (ang. polymorphism), dhe trashëgimi (ang. inheritance). Popullariteti i kësaj paradigme pa rritjen e tij të parë tek në fillim të viteve 1990, mirëpo në ditën e sotme shumica e gjuhëve programuese e përkrahin këtë paradigmë.
Përmbajtja |
Përmbledhje [redakto]
Zanafilla e POO-së daton që nga vitet e 1960-ta. Në atë kohë, shpesh herë kualiteti komprometohej, si pasojë e rritjes të kompleksitetit të harduerit dhe softuerit. Hulumtuesit duke studiuar mënyra të ndryshme për mirëmbajtje të kualitetit të softuerit përfunduan duke e krijuar POO nëpërmjet së cilën e theksuan në veçanti vetinë e saj për rishfrytëzimin e njësive të logjikës programuese. Pra, në POO metodologjia është e përqendruar në të dhëna e jo në procese; ku programet janë të përbërë nga module të pavarura (objekte) që përmbajnë të gjitha të dhënat që janë të nevojshme për manipulimin e strukturave vetanake të të dhënave. Gjuha e parë programuese që konsiderohet si gjuhë e cila plotësisht e përvetëson paradigmën programuese POO është Smalltalk[1].
POO mund të perceptohet si një grumbull objektesh ndërvepruese, ku secili objekt është i aftë që të pranoj mesazhe, të procesoj të dhëna, si dhe t'i dërgoj mesazhe objekteve tjera. Pra, çdo objekt mund të konsiderohet si një makinë e pavarur me një rol dhe përgjegjësi të veçantë.
Historia [redakto]
Koncepti i objekteve dhe instancave për herë të parë arriti të depërtoj në fushën e informatikës nëpërmjet PDP-1 sistemit në MIT. Objektet u paraqitën si entitete programimi në vitet e 1960-ta në gjuhën programuese Simula 67 e cila ishte dizajnuar për krijimin e simulacioneve. Kjo gjuhë ishte krijuar nga Ole-Johan Dahl dhe Kristen Nygaardnë Qendrën Kompjuterike Norvegjeze në Oslo. Simula nuk e paraqiti vetëm nocioni ne klasave, por edhe atë të instancave të klasave. Konceptet që u paraqitën nëpërmjet Simula 67 patën ndikim në gjuhë të ndryshme programuese, e sidomos në Smalltalk si dhe gjuhët tjera që rrjedhën nga ai, si Lisp dhe Pascal.
Gjuha programuese Smalltalk, e cila u zhvillua në Xerox PARC gjatë viteve të 1970-ta, e paraqiti termin "programimi i orientuar në objekte" në mënyrë që ta përshkruante vetinë e shfrytëzimit të objekteve dhe mesazheve si baza të llogaritjes. Duhet veçuar që krijuesit e Smalltalk ishin të ndikuar nga idetë e paraqitura në Simula 67, por megjithatë ata e dizajnuan Smalltalk në atë mënyrë që të ishte sistem dinamik, ku klasat mund të krijohen dhe ndryshohen në mënyrë dinamike (në vend të mënyrës statike si që ishte bërë në Simula 67)[2]. Smalltalk, e me gjithë te edhe POO iu paraqitën një audience të gjerë më Gusht të 1981 nëpërmjet revistës Byte.
Si pasojë e ndikimit nga gjuha programuese C++, programi i orientuar në objekte arriti që të bëhej metodologjia dominante programuese gjatë mesit të viteve 1990-ta[3]. Më pas, dominimi i POO-së u fuqizua edhe më shumë pasi që ishte shumë i përshtatshëm për zhvillimin e interfejsëve grafik për shfrytëzues që ishin duke përjetuar rritje të popullaritetit.
Më vitin 1995 shfaqet gjuha programuese Java[4] e cila ka sintaksë të derivuar nga gjuhët programuese C dhe C++, mirëpo vetia kryesore që e dallon nga këto është makina virtuale e saj. Java si një gjuhë e cila plotësisht e përkrah POO-në, me anë të makinës virtuale që i ofron veti ndër-platformike arriti që edhe më tej ta fuqizonte dhe në të njëjtën kohë të zgjeronte dominancën e programimit të orientuar në objekte.
Rishtazi ka sipërfaqësuar një numër i gjuhëve programuese që edhe pse janë të orientuara në objekte ato përkrahin edhe metodologjinë procedurale, si p.sh. Python ose Ruby. Në përjashtim të Java, gjuhë tjera që kanë sipërfaqësuar rishtazi, dhe kanë rëndësi për botën komerciale janë Visual Basic .NET (VB.NET) dhe C# ku të dyja janë të dizajnuara për platformën .NET të Microsoft. Duhet veçuar që VB.NET dhe C# përkrahin trashëgimin ndër-gjuhësor, ku kjo e bën të mundshme që p.sh. klasat e definuar në VB.NET të trashëgohen në C# dhe anasjelltas.
Konceptet Thelbësore [redakto]
Deborah J. Armstrong nëpërmjet studimit të saj pothuajse 40-vjeçar të literaturës kompjuterike ka përpiluar listën vijuese e koncepteve thelbësore të cilat janë të përfshira në shumicën e definicioneve të POO-së[5]:
- Klasa
- Definon tiparet dhe sjelljet (metodat) e objektit. Pra, klasa mund të konsiderohet si një kallëp për objekte. Nëse e marrim rastin e klasës
Qenishohim që kjo klasë do t'i përmbaj tiparet thelbësore për të gjithë qentë, si p.sh. lloji, ngjyra e qimes, etj. Klasa gjithashtu do të përmbaj edhe sjelljet (metodat) si p.sh. aftësia për të lehur dhe për t'u ulur. Këto tipare si dhe metoda që përfshihen nga klasa janë të njohura si anëtarë të klasës. - Objekti
- Është një ekzemplar i klasës. Pra, klasa
Qeniparaqet kallëpin për qenë të ndryshëm, ndërsa objektiAresiparaqet një qenë të veçantë, me veti dhe sjellje të veçanta të trashëguara nga klasaQenisi p.sh. lloji për objektinAresiështëpit bullndërsa ngjyra e qimes ështëe zezë. - Instanca
- Instanca paraqet objektin të krijuar nga klasa. Pra, duke u bazuar në rastin e lartpërmendur objekti
Aresiështë instancë e klasësQeni. Grumbulli i vlerave dhe atributeve të një objekti njihet si gjendje, ku kjo d.t.th. që objekti përbehet nga gjendja dhe sjelljet që janë të definuara në klasën e objektit. - Metoda
- Paraqet sjelljet dhe aftësitë e një objekti.Metodat mund t'i shohim si procedura ose funksione. Procedurat jane metodat qe nuk kane vlere kthese, ndersa funksionet jane metoda qe kthejne dicka si rezultat i ekzekutimit te asaj metode. Pra, objekti
Aresika aftësinë për të lehur, dhe për atë arsye ky objekt përmban metodënleh(). ObjektiAresimund të përmbaj edhe metoda tjera si p.sh.ulu(),ec(), etj. - Dërgimi i mesazhit
- Procesi me anë të cilit objekti dërgon të dhëna një objekti tjetër, ose kërkon nga një objekt tjetër që ta thërras një metodë[5].
- Trashëgimi
- Nënklasat paraqesin versione të veçanta të klasave, ku këto i trashëgojnë tiparet dhe sjelljet nga klasat e tyre prindërore. Nënklasat mund të përmbajnë tipare dhe sjellje shtesë, përsipër atyre që i kanë trashëguar nga klasat prindërore. Për shembull, klasa
Qenimundet ti ketë nënklasatPitBull,Doberman, etj. ku objektiAresido t'ishte instancë e nënklasësPitBull. Nëse në klasënQenie kemi të definuar metodënleh()atëherë të dy nënklasatPitBulldheDobermando ta trashëgojnë këtë metodë, ku kjo e bën të mundshme që programori ta shkruaj vetëm një herë këtë metodë.
Çdo nënklasë mund t'i ndryshoj tiparet dhe sjelljet e trashëguara. Për shembull, nënklasaDobermanmund ta ndryshon tiparinngjyraQimesqë ta ketë vlerënzi-dhe-kafe; ose nënklasaPitBullmund ta ndryshon metodënleh()që lehja të jetë më e fuqishme tek instancat e kësaj nënklase.
Trashëgimia e shumëfishtë paraqet rastin kur trashëgimia bëhet nga më shumë se një klasë, përderisa asnjëra nga klasat prindërore nuk është e trashëguar nga njëra tjetra. - Abstraksioni
- Është procesi i thjeshtëzimit dhe faktorizimit të detajeve me qëllim të përqendrimit në disa koncepte në krahasim prej përqendrimit në të gjitha konceptet përnjëheri. Pra, abstraksioni paraqet procesin në të cilin bëhet modelimi i klasave të përshtatshme për problemin, si dhe punimi me nivelin e përshtatshmën të trashëgimisë prej një aspekti specifik të problemit.
- Kapsulimi
- Është njëri nga tre konceptet themelore të programimit të orientuar në objekte (dy të tjerët janë Trashëgimi dhe Polimorfizmi)[6]. Ky koncept paraqet fshehjen e detajeve të implementimit të klasës si dhe ofrimin e qasjes vetëm nëpërmjet interfejsit të dokumentuar ( metodave qasëse dhe metodave ndryshuese)[7].
- Polimorfizmi
- Polimorfizmi në programimin e orientuar në objekte e bën të mundshëm që objektet që përkasin tipeve të dhënave të ndryshme t'i përgjigjen thirrjeve të metodave me emër të njëjtë në përputhshmëri me specifikat e tipit të tyre. Për shembull, nëse kemi klasën
Njerie cila e ka metodënpershendet(), dhe më pas kemi dy nënklasaShqiptardheAnglezatëherë ato do të trashëgojnë dhe e mbishkruajnë strukturën dhe funksionalitetin e metodëspershendet()sipas specifikave të tipit. Ky mbishkrim do ta bën të mundshme që kur të thirret metodapershendet()në instancat (objektet) e nënklasaveShqiptardheAngleztë dy instancat do të reagojnë sipas specifikave të tipit të tyre, pra:shqiptar.pershendet()do të kthenPërshëndetje!ndërsaanglez.pershendet()do të kthenHello!. - Shçiftëzimi
- Shçiftëzimi (ang. decoupling) paraqet procesin e minimalizimit të sasisë dhe fuqisë të varshmërive në mes të pjesëve të ndryshme të programit. Nëpërmjet këtij procesi bëhet lokalizimi i operimeve të ndryshme në entitete të vetme ku këto kanë varshmëri minimale ndaj entiteteve tjera. Kjo veti e POO-së është shumë e dobishme, sidomos për programe të mëdha, pasi që nëse është bë shçiftëzimi, atëherë në rast të ndonjë problemi, programori mund të përqendrohet në një entitet të vetëm e jo në tërë programin[8].
Referencat [redakto]
- ^ Narang, Rajesh (2004-08-15). Object Oriented Interfaces and Databases. Prentice-Hall of India Pvt. Ltd., 9. ISBN 8-1203-1920-6. - (Anglisht)
- ^ Alan Kay (1993): The Early History of Smalltalk. Vizituar në 25. Janar 2009. - (Anglisht)
- ^ John K Waters (17. Mars 2008): Stroustrup and Sutter: C++ to run and run. The Register, Situation Publishing Ltd.. Vizituar në 25. Janar 2009. - (Anglisht)
- ^ The History of Java Technology. Sun Microsystems, Inc. (2008-04-14). Vizituar në 26. Janar 2009. - (Anglisht)
- ^ a b J Armstrong, Deborah (February 2006). "The Quarks of Object-Oriented Development". Communications of the ACM 49 (2): 123–128. doi:10.1145/1113034.1113040. ISSN 0001-0782. Retrieved on 2009-01-26. - (Anglisht)
- ^ (07 2003) "Chapter 1: Implementing Object-Oriented Programming Techniques", Pocket PowerBuilder Resource Guide and Reference. Sybase, Inc.. - (Anglisht)
- ^ Java Interview Questions: What is Encapsulation?. Vizituar në 27. Janar 2009. - (Anglisht)
- ^ Jackson, Daniel (2008). "A Direct Path To Dependable Software" (PDF). Communications of the ACM. Retrieved on 2009-01-27. - (Anglisht)

