Jump to content

Programimi i orientuar në objekte

Nga Wikipedia, enciklopedia e lirë
(Përcjellë nga POO)

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ë.

Zanafilla e POOP-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ë.

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 .NETMicrosoft. 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 | Redakto nëpërmjet kodit]

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
Përcakton 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 Qeni shohim 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 Qeni paraqet kallëpin për qenë të ndryshëm, ndërsa objekti paraqet një qenë të veçantë, me veti dhe sjellje të veçanta të trashëguara nga klasa Qeni si p.sh. lloji për objektin Peofi është pit bull ndë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 është instancë e klasës Qeni. Grumbulli i vlerave dhe atributeve të një objekti njihet si gjendje, ku kjo nenkupton që objekti përbehet nga gjendja dhe sjelljet që janë të percaktuara 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 ka aftësinë për të lehur, dhe për atë arsye ky objekt përmban metodën leh(). Objekti mund 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 Qeni mundet ti ketë nënklasat PitBull, Doberman, etj. ku objekti Peofi do t'ishte instancë e nënklasës PitBull. Nëse në klasën Qeni e kemi të definuar metodën leh() atëherë të dy nënklasat PitBull dhe Doberman do ta trashëgojnë këtë metodë, ku kjo e bën të mundshme që programuesi 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ënklasa Doberman mund ta ndryshon tiparin ngjyraQimes që ta ketë vlerën zi-dhe-kafe; ose nënklasa PitBull mund ta ndryshon metodën leh() 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 Njeri e cila e ka metodën pershendet(), dhe më pas kemi dy nënklasa Shqiptar dhe Anglez atëherë ato do të trashëgojnë dhe e mbishkruajnë strukturën dhe funksionalitetin e metodës pershendet() sipas specifikave të tipit. Ky mbishkrim do ta bën të mundshme që kur të thirret metoda pershendet() në instancat (objektet) e nënklasave Shqiptar dhe Anglez të dy instancat do të reagojnë sipas specifikave të tipit të tyre, pra: shqiptar.pershendet() do të kthen Përshëndetje! ndërsa anglez.pershendet() do të kthen Hello!.
Shçiftëzimi
Shçiftëzimi (ang. decoupling) paraqet procesin e minimalizimit të sasisë dhe fuqisë të varesive 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ë varesive 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ëre shçiftëzimi, atëherë në rast të ndonjë problemi, programuesi mund të përqendrohet në një entitet të vetëm e jo në tërë programin[8].
  1. ^ Narang, Rajesh (2004-08-15). Object Oriented Interfaces and Databases. Prentice-Hall of India Pvt. Ltd. fq. 9. ISBN 8-1203-1920-6. {{cite book}}: Mungon ose është bosh parametri |language= (Ndihmë!) - Transclusion error: {{En}} is only for use in File namespace. Use {{lang-en}} or {{in lang|en}} instead.
  2. ^ Kay, Alan (1993). "The Early History of Smalltalk". Marrë më 2009-01-25. {{cite web}}: Mungon ose është bosh parametri |language= (Ndihmë!) - Transclusion error: {{En}} is only for use in File namespace. Use {{lang-en}} or {{in lang|en}} instead.
  3. ^ K Waters, John (2008-03-17). "Stroustrup and Sutter: C++ to run and run". The Register, Situation Publishing Ltd. Marrë më 2009-01-25. {{cite web}}: Mungon ose është bosh parametri |language= (Ndihmë!) - Transclusion error: {{En}} is only for use in File namespace. Use {{lang-en}} or {{in lang|en}} instead.
  4. ^ "The History of Java Technology". Sun Microsystems, Inc. 2008-04-14. Marrë më 2009-01-26. {{cite web}}: Mungon ose është bosh parametri |language= (Ndihmë!) - Transclusion error: {{En}} is only for use in File namespace. Use {{lang-en}} or {{in lang|en}} instead.
  5. ^ a b J Armstrong, Deborah (2006). "The Quarks of Object-Oriented Development". Communications of the ACM. 49 (2): 123–128. doi:10.1145/1113034.1113040. ISSN 0001-0782. Marrë më 2009-01-26. {{cite journal}}: Mungon ose është bosh parametri |language= (Ndihmë!) - Transclusion error: {{En}} is only for use in File namespace. Use {{lang-en}} or {{in lang|en}} instead.
  6. ^ "Chapter 1: Implementing Object-Oriented Programming Techniques". Pocket PowerBuilder Resource Guide and Reference. Sybase, Inc. 2003. Arkivuar nga origjinali më 24 janar 2007. Marrë më 2009-01-27. {{cite book}}: Mungon ose është bosh parametri |language= (Ndihmë!) - Transclusion error: {{En}} is only for use in File namespace. Use {{lang-en}} or {{in lang|en}} instead.
  7. ^ "Java Interview Questions: What is Encapsulation?". Arkivuar nga origjinali më 24 janar 2009. Marrë më 2009-01-27. {{cite web}}: Mungon ose është bosh parametri |language= (Ndihmë!) - Transclusion error: {{En}} is only for use in File namespace. Use {{lang-en}} or {{in lang|en}} instead.
  8. ^ Jackson, Daniel (2008). "A Direct Path To Dependable Software" (PDF). Communications of the ACM. Arkivuar nga origjinali (PDF) më 19 qershor 2010. Marrë më 2009-01-27. {{cite journal}}: Mungon ose është bosh parametri |language= (Ndihmë!) - Transclusion error: {{En}} is only for use in File namespace. Use {{lang-en}} or {{in lang|en}} instead.