JavaRush /Java Blog /Random-TK /Obýekte gönükdirilen programmirleme (makalanyň terjimesi)...
Exidnus
Dereje
Санкт-Петербург

Obýekte gönükdirilen programmirleme (makalanyň terjimesi)

Toparda çap edildi
Terjimeçiden: Gynansagam, iňlis dilinden köp okasam-da, iňlis dilinden terjime etmekde düýpli tejribäm ýok. Readingöne okamak we terjime etmek iki dürli zat boldy. Mundan başga-da, gynansagam, programmirleme tejribäm ýok (ýaňy-ýakynda Bahar MVC we Gibernate-de ýönekeý web programmasy ýasadym). Şonuň üçin terjime edil öňküsinden has erbet boldy. Makalada berlen kod mysallaryny azajyk düzetmek azatlygyny aldym, sebäbi Java-da at dakmak konwensiýalaryna laýyk gelmeýär. Käbir nagyşlaryň atlaryny terjime etmegiň peýdasy ýok bolsa gerek (beýle terjime kän bir düşünje bermeýär), ýöne munuň has erbetdigini pikir etdim. “Highokarky jebislik” hakda “ýokary jebislik” terjimesi hökmünde aýratyn bellemelidiris. Iň oňat terjime däl-de, razy. “Öne“ güýçli baglanyşyk ”“ ýokary birikdirme ”(başga bir möhüm düşünje) we bu ýerde“ sazlaşykly ”bolmagy mümkin däl. Tankyt üçin açyk we makaladaky teswirleri islendik görnüşde kabul ederin. Obýekte gönükdirilen programmirleme, programma görnüşidir, onda bir programma hakyky dünýädäki zatlara gabat gelýän komponentlerden durýar. Islendik hakyky obýektiň käbir häsiýetleri bar (wagtyň geçmegi bilen üýtgäp biler ýa-da üýtgemez) we özüni alyp barşy (bolup biler ýa-da bolmazlygy). başgalaryna baglylykda üýtgetmek) şertleri). Mysal üçin, galam aşakdaky häsiýetlere eýe bolan hakyky dünýä obýektidir:
  • Gyzyl (wagtyň geçmegi bilen üýtgemeýär).
  • Uzynlygy 10 santimetr (galam ýitileşse bu üýtgäp biler).
Munuň aşakdaky häsiýeti bar:
  • Dogry ulanylsa yz galdyrýar.
  • Yz basyşa (daşarky faktorlara baglylykda) üýtgäp biler.
  • Onuň uzynlygy ýitileşýär (hemişelik hereket).
Bu mysalda bolşy ýaly, hakyky dünýä obýektleri köp häsiýetlere eýe bolup biler, ýöne programmalar ýazylanda diňe zerur häsiýetleri göz öňünde tutýarys. Obýekte gönükdirilen programmirlemegiň artykmaçlyklary bar. Mysal üçin, garaşylýan görnüşde hakyky dünýä obýekti bilen programmanyň arasynda baglanyşyk gurmagy aňsatlaşdyrýar. Programma ulaldygyça we köp obýekt biri-biri bilen täsirleşende bu hakykatdanam kömek edýär. Bu, programma arkaly pikirlenmäge üns bermäge mümkinçilik berýän obýektiw dünýäde jogapkärçiligi paýlamaga kömek edýär. OOP (Obýekt gönükdirilen programmirleme) bilen baglanyşykly başga bir möhüm aýratynlyk, obýektleriň klassifikasiýasydyr. Dünýä (hakyky / wirtual) obýektlerden doly bolansoň, olary aýratyn dolandyrmak kyn. Bize dürli zatlary we gara galam ýaly häsiýetleri birleşdirmäge kömek etjek bu zatlary klassifikasiýa etmegiň usuly gerek. Öňki mysalda ulanylsa tapawudy bolmaz (şol bir?), Itöne başga zat. Bothöne ikisi hem galam bolansoň, şol bir "Galam" synpyna degişlidir. Galam bilen gaty meňzeş ruçka başga bir klasa degişlidir. Şeýle-de bolsa, ruçka we galam ikisi hem “itingazuw gurallary”. Obýekte gönükdirilen programmirlemegiň aşakdaky ýörelgeleri bar:
Abstraksiýa
Abstraksiýa wakalara däl -de, başgaça aýdylanda, wekilçilik häsiýetlerinden azatlyga däl-de , pikirler bilen täsiriň hili hökmünde kesgitlenýär . Bu, programmistlere nädip programma bermelidigine däl-de, nämäni programma etmelidigine ünsi jemlemäge mümkinçilik berýär . Abstraksiýa, işlemegi üpjün edýän şertnama hökmünde pikir edilip bilner. Bu düşünjäni ulananyňyzda durmuşa geçiriş jikme-jiklikleri gizlenip bilner. Mysal üçin, bize ýazýan synp gerek bolsa, onda "ýazmak" usulynyň bardygyna göz ýetirmeli. Näme etdik? Abstrakt bolan ýokary derejeli synpy taýýarladyk, başgaça aýdylanda, haýsy funksiýa mätäçligimizi bilýär, ýöne ony nädip durmuşa geçirmelidigi bu synpyň çäginden çykmaýar. Bu köp peýdany hödürleýär: abstract class writer { write (); }
  • Daşarky guramalar üçin zerur bolan iň az maglumaty aýan edýäris, bu bize programma arkaly pikirlenmäge ünsi jemlemäge mümkinçilik berýär (bu ünsi jemlemäge mümkinçilik berýär), bulaşyklykdan gaça durmaga we garaşylmadyk wadalardan gaça durmaga mümkinçilik berýär.
  • Geljekdäki gowulaşmalar üçin ýer goýýarys, durmuşa geçiriş jikme-jiklikleri aýan edilse mümkin bolmaz.
Miras
Umumy iňlis dilinde "Miras" "gazanmak we geçmek" manysyny berýär. Bu söz biziň medeniýetimizde uzak wagt bäri bar. Atalar zähmet çekmek arkaly ýer alypdyrlar we çagalaryna beripdirler, hatda tebigat mirasa-da goldaw berýär. Boý, deri / göz / saç reňki we ş.m. ýaly bedeniň ähli häsiýetleri. ene-atamyzdan miras alýan genlerimize baglydyr. Miras tigiriň täzeden dikeldilmeginiň öňüni alýar we ösüşi çaltlaşdyrýar. OOP-da edil şonuň ýaly. Birnäçe esasy häsiýetleri / özüni alyp barşy bilen ene-atalar synpyny döredýäris. Bu ene-atadan miras galan ähli synplarda ene-atasy ýaly häsiýetler / häsiýetler bolar. Şeýle-de bolsa, miras galan synplar has köp häsiýetlere / özüni alyp barşyna ýa-da özüni alyp barşyny üýtgedip biler. class WritingInstrument { colour; write() { } } class Pen (child of parent) { inkcolour; } Aboveokardaky mysalda esasy synpda (WritingInstrument) “reňk” häsiýeti we “ýazmak” häsiýeti bar. Nesil synpy (tutawajy) yglan edilende, "reňk" häsiýeti we "ýazmak" häsiýeti gaýtadan yglan edilmeli däl. Miras sebäpli "tutawaç" synpynda bar. Şeýle-de bolsa, nesil synpy goşmaça häsiýetlerini / özüni alyp barşyny yglan edip biler. Muny iş ýüzünde nädip ulanyp bileris? Biz döredijiler gaty ýalta. Bir zady gaýtalap çap etmek islemeýäris. Aşakdaky pikirler sebäpli şol bir koduň birnäçe nusgasynyň bolmagy ruhdan düşýär:
  • Kodyň nusgalary näçe az bolsa, şonça-da saklamak aňsat.
  • Kodyň köp nusgasy ýok bolsa, bir ýerde üýtgeşiklik hemme ýerde görünýär.
  • Kod az, ýalňyşlyklar az.
  • Köp ýerde bir kod ulanylsa, umumylaşdyrma gazanylýar.
  • Kod ýazmaga üns berýäris.
  • Synaglara üns berýäris.
Java-da miras "giňeldilýär" we "gurallar" açar sözleri ulanyp gazanylýar. class WritingInstrument { } class Pen extends WritingInstrument { }
Polimorfizm
“Polimorfizm” sözi iki sözden gelýär: “Poli” , ýagny “Köp” / “birden köp” “morf” , ýagny “Form” Göçme manyda “Polimorfizm” sözi obýektleriň şertlere baglylykda dürli hereket etmek ukybyny aňladýar. Programmirlemekde polimorfizm birnäçe ýerde amala aşyrylyp bilner:
  • Sapaklar
  • Usullar
  • Operatorlar
Aboveokardakylaryň hemmesi, ulanylýan şertlere, belki-de, kontekstine baglylykda başgaça hereket edip biler. Bu peýdaly, sebäbi müşderi (kitaphanalaryňyzy ulanýan programmist) köp inçelikleri bilmeli däl we islenýän funksiýa kontekstden zerur maglumatlary saýlamak arkaly amala aşyrylýar. Class WritingObject { wrire() { // пишем, используя стандартные (по дефолту) цвета } } class Pencil extends WritingObject { write() { // пишем, используя серый цвет, написанный текст можно стереть } } class Pen extends WritingObject { write() { // пишем, используя голубой цвет, написанный текст нельзя стереть } } class Main { main() { WritingObject wr = new WritingObject(); wr.write(); // первый вызов WritingObject wr = new Pen(); wr.write(); // второй вызов WritingObject wr2 = new Pencil(); wr2.write(); // третий вызов } } Aboveokardaky mysal, nesil synplary ruçka we ruçka bilen uzaldylan / ýokaşdyrylan WritingObject-de deslapky ýerine ýetiriş bar. Writeazmak () usuly Esasy synpda üç gezek diýilýär. Her gezek usulyň haýsy obýekte çagyrylýandygyna baglylykda başga bir ýerine ýetiriş diýilýär. Bu ýagdaýda ýazmak () usuly polimorf bolany üçin özüni alyp barşyň köp görnüşine eýe.
Enkapsulýasiýa
Enkapsulýasiýa degişli birligi / funksiýany bir bölümde ýygnamak hökmünde kesgitlenýär. Bu maglumatlara elýeterliligi / üýtgetmegi aňsatlaşdyrýar. Mysal üçin, berlen ulanyjynyň ähli häsiýetlerini çap etmeli bolsa, aşakdaky saýlawlarymyz bar: printUserProperties(userName, userId, firstname, lastname, email, phone, … … ….) thehli häsiýetleri alýan we biri-birine çap edýän usul döretdik. Sanawdaky elementleriň sany artdygyça, dogry meýdanlary kesgitlemek mümkin bolmaz we bir meýdany goşmak / aýyrmak usulyň goluny üýtgeder. Şonuň üçin bu usulyň ähli ulanyjylaryny täze goşulan meýdanlara zerurlyk bolmasa-da çalyşmaly. Kody has okalmagy we geljekdäki üýtgeşmeleri aňsatlaşdyrmak üçin häsiýetleri bir synpda jemleýäris we köpçülikleýin obýekte öwürýäris. class User { userName userId firstname lastname email phone .. .. .. } printUserProperties(user) {} Obýekt üýtgeýänleriň we baglanyşykly usullaryň programma üpjünçiligi toplumydyr. Programma obýektlerini ulanyp, hakyky dünýä obýektlerini görkezip bilersiňiz. Animasiýa programmasynda hakyky itleri ýa-da maşk welosipediniň içindäki programma üpjünçiligi hökmünde hakyky tigir göz öňüne getirip bilersiňiz. OOP-da synp, obýektleri döretmek, başlangyç ýagdaýy (üýtgeýjiler) bilen üpjün etmek we özüni alyp barşyny (funksiýalary, usullary) amala aşyrmak üçin giňeldilýän şablon (programma-kod-şablon). SOLID gysgaldylyşy Maýkl Feather tarapyndan 2000-nji ýyllaryň başynda Robert C. Martin tarapyndan atlandyrylan “ilkinji bäş ýörelge” üçin döredilipdi. Principlesörelgeleriň maksady, bilelikde durmuşa geçirilende, programmistiň saklamak we giňeltmek aňsat bir ulgam döretmek ähtimallygyny ýokarlandyrmakdyr. SOLID ýörelgeleri programmany işläp düzmekde görkezmeler bolup, “çüýrük” kody gaýtadan işlemek arkaly aýyrmak zerurdyr, netijede kod aňsat okalýar we giňelýär. Bu çalt we uýgunlaşdyrylan programmirleme strategiýasynyň bir bölegi.
Leeke-täk jogapkärçilik ýörelgesi
OOP-da ýeke-täk jogapkärçilik ýörelgesi, her bir synpyň programma bilen üpjün edilen funksiýanyň bir bölegi üçin jogapkär bolmalydygyny we jogapkärçiligiň şol synp tarapyndan doly özleşdirilmelidigini aýdýar. Onuň ähli işlemegi bu jogapkärçilik bilen ýakyndan baglanyşykly bolmalydyr.
Açyk / ýapyk ýörelge
OOP-da açyk / ýapyk ýörelge “programma üpjünçiligi guramalary (synplar, modullar, usullar we ş.m.) giňeltmek üçin açyk, ýöne üýtgetmek üçin ýapyk bolmaly diýilýär. Başgaça aýdylanda, edara deslapky kody üýtgetmän özüni alyp barşynyň giňelmegine ýol bermeli.
Liskowyň ornuny tutmak ýörelgesi
Çalyşmak OOP-da prinsipdir. Kompýuter programmasyndaky S-iň T görnüşi bolsa, onda T görnüşindäki obýektleriň S görnüşindäki obýektler bilen çalşyljakdygy (ýagny S görnüşindäki obýektler T görnüşli obýektler bilen çalşyrylyp bilinjekdigi) aýdylýar. zerur häsiýet programmalary (takyklyk, meseläni tamamlamak we ş.m.).
Interfeýs bölüniş ýörelgesi
Interfeýsi bölmek ýörelgesi, müşderi programmistiniň ulanmaýan usullaryna bagly bolmaly däldigini aýdýar. Bu ýörelge laýyklykda, müşderi programmistiniň diňe özüne gyzykly usullary bilmegi üçin uly interfeýsleri kiçi we has anyklara bölmek zerur. Interfeýsi bölmek ýörelgesiniň maksady ulgamy gaýtadan işlemegi, üýtgetmegi we gaýtadan işlemegi aňsatlaşdyrjak ulgamy iki esse saklamakdyr.
Baglylyk öwrülişigi ýörelgesi
OOP-da garaşlylygyň tersligi prinsipi programma modullarynyň arasynda kesilmegiň belli bir görnüşini aňladýar. Bu ýörelgä eýerip, amaly arhitekturany (syýasaty düzmek) emele getirýän ýokary derejeli modullardan garaşly pes derejeli modullara çenli döredilen adaty garaşlylyk gatnaşyklary tersine (tersine) üýtgedilýär, şeýlelik bilen üýtgedilen ýokary derejeli modullar durmuşa geçiriş jikme-jikliklerinden garaşsyz bolýar; pes derejeli modullar. Bu ýörelge şeýle diýýär:
  • Levelokary derejeli modullar pes derejeli modullara bagly bolmaly däldir. Modullaryň iki görnüşi hem abstraksiýa bagly bolmaly.
  • Abstraktlar durmuşa geçiriş jikme-jikliklerine bagly bolmaly däldir. Jikme-jiklikler abstraktlara bagly bolmaly.
Principleörelge, ýokary we pes derejeli obýektleriň şol bir abstraksiýa bagly bolmalydygyny öňe sürüp, obýekte gönükdirilen dizaýn hakda pikirleniş usulyny üýtgedýär.

GRASP ýörelgeleri

Umumy jogapkärçiligi bellemek programma üpjünçiligi nagyşlary (GRASP), obýekte gönükdirilen dizaýnda synplara we obýektlere jogapkärçiligi bellemek üçin görkezmeler berýär.
Dolandyryjy
Dolandyryjy nagşy, tutuş ulgamy görkezýän ýa-da iş ssenarisini ulanýan GUI däl synplara ulgam hadysalary bilen täsirleşmek jogapkärçiligini berýär. Dolandyryjy:
  • Bu ulanyjy bilen gönüden-göni täsir etmeýän we ulgam hadysalaryny kabul etmek we jogap bermek üçin jogapkär obýektdir.
  • Bir (ýa-da köp baglanyşykly) ulanylyş hadysalarynyň ähli ulgam hadysalaryny çözmek üçin ulanylmaly.
  • Ulgam amallaryna gözegçilik edýän GUI-iň arkasyndaky ilkinji obýekt.
  • Işiň özi etmeli däl, wezipesi wakalaryň akymyna gözegçilik etmek.
Creatoraradyjy
Dörediji synpyň wezipesi, soňraky ulanmak üçin obýektleri döretmek we başlamak. Başlangyç parametrlerini, haýsy obýektiň dörediljekdigini bilýär. Käwagt dörediji synp obýektleri işjeň ýagdaýda döredýär we keş görnüşine ýerleşdirýär we zerur bolanda bir mysal berýär.
Highokary jebislik
Highokary jebislik, baha beriş nagşy bolup, onuň maksady obýektleri bir anyk işi ýerine ýetirmäge gönükdirilen, aňsat gözegçilikde saklanýar we düşünilýär. “High Coupling” adatça pes jübütligi goldamak üçin ulanylýar. Cookary utgaşyklyk, berlen elementiň jogapkärçiliginiň takyk kesgitlenendigini aňladýar (berk baglanyşykly we ýokary derejede gönükdirilen). Programmany synplara we kiçi ulgamlara bölmek ulgam häsiýetleriniň bitewiligini ýokarlandyrýan hereketleriň mysalydyr. Beýleki tarapdan, gowşak birikdirme, bir elementiň gaty köp baglanyşykly bolmadyk wezipeleri bolan ýagdaýdyr. Birleşdirilen elementlere düşünmek kyn, gaýtadan ulanylýan, saklamak kyn we üýtgetmek kyn.
Gytaklaýyn
“Tegelek ýol” nagşy, aralyk obýektiň arasyndaky özara täsir üçin jogapkärçiligi ýükläp, iki elementiň arasynda boş birleşmegi (we gaýtadan ulanmagy) saklaýar. Mysal üçin, Model (View-Controller) (MVC) görnüşinde maglumatlar (model) bilen onuň görkezilişi (görnüşi) arasynda araçylyk etmek üçin kontrolleýjiniň girizilmegi mysal bolup biler.
Maglumat hünärmeni
Maglumat hünärmeni (şeýle hem bilermen ýa-da bilermen ýörelgesi) jogapkärçiligi kime bermelidigini kesgitlemek üçin ulanylýan ýörelge. Jogapkärçilikler usullary, hasaplanan meýdanlary we ş.m. Jogapkärçiligi belläniňizde bu ýörelgäni ulananyňyzda esasy çemeleşme aşakdaky hereketleriň yzygiderliligidir: jogapkärçiligi seljermek, ony ýerine ýetirmek üçin zerur maglumatlary kesgitlemek we ahyrynda bu maglumatlaryň nirededigini kesgitlemek. Maglumat hünärmeni ýörelgesini ulanmak, ony ýerine ýetirmek üçin iň köp maglumaty bolan synpa jogapkärçiligi berýär.
Pes jübütlik
Boş birikdirme, jogapkärçiligi nädip bermelidigini kesgitleýän baha beriş usulydyr: synplaryň arasynda boş birleşmek, birini üýtgetmek beýlekisine minimal täsir etmeli, gaýtadan ulanylmagyny ýokarlandyrmaly.
Polimorfizm
Polimorfizme görä, görnüşiň esasynda özüni alyp barşyň üýtgemegi, bu üýtgeşmäniň bolup geçýän görnüşlerine berilýär. Bu polimorf amallary ulanmak arkaly gazanylýar.
Goragly üýtgeýişler
Goragly üýtgeşmeler nagşy, elementleri beýleki elementlere (obýektler, ulgamlar, kiçi ulgamlar) üýtgemelerden goraýar, durnuksyzlygyň merkezini interfeýsde gurşap alýar we şol interfeýsiň dürli amallaryny döretmek üçin polimorfizmi ulanýar.
Arassa önümçilik
Arassa gurluşyk, mesele meýdanyndaky düşünjäni görkezmeýän we ýumşak birikdirmäni, ýokary birikdirmäni we şonuň üçin maksimal gaýtadan ulanmak mümkinçiligini gazanmak üçin döredilen synpy öz içine alýar (Maglumat hünärmeni tarapyndan hödürlenýän çözgüt muny amala aşyrmaýar). Şeýle klasa, adatça, Domain tarapyndan dolandyrylýan dizaýnda “Hyzmat” diýilýär.

Tankyt

Potok we başgalaryň geçiren gözlegleri, OOP bilen prosessual çemeleşmeleriň arasynda düýpli tapawudy görkezmedi.
OOP-yň beýleki tehnologiýalar, esasanam baglanyşyk tehnologiýalary bilen tankydy deňeşdirilmegi, berk we giňden kabul edilen OOP kesgitlemesiniň ýoklugy sebäpli kyn (Kristofer J. Sene)
Beýleki diller (LISP şiweleri, işleýän diller we ş.m.) bilen deňeşdirilende, OOP dilleriniň özboluşly artykmaçlygy ýok we gereksiz çylşyrymlylygy döredýär. (Lawrens Krubner)
Tehniki taýdan obýekte gönükdirilen programmirleme tapýaryn. Dünýäni bir görnüşde üýtgeýän interfeýsler taýdan dünýäni böleklere bölmäge synanyşýar. Hakyky kynçylyklary çözmek üçin köp görnüşli algebralar - köp görnüşlere ýaýran interfeýs maşgalalary gerek. Filosofiki taýdan obýekte gönükdirilen programmirleme tapýaryn. Hemme zadyň bir zatdygyny aýdýar. Bu hakykat bolsa-da, gaty gyzykly däl: hemme zadyň bir zatdygyny aýtmak asla hiç zat diýmezlikdir. (Aleksandr Stepanow)
Uly kompaniýalaryň arasynda OOP-yň meşhurlygy "uly (we ýygy-ýygydan üýtgeýän) orta programmaçylaryň toparlary" bilen baglanyşykly. OOP tarapyndan girizilen düzgün, programmistiň “aşa köp zyýan” etmeginiň öňüni alýar. (Pol Graham)
Obýekte gönükdirilen programmirlemek atlary ilkinji nobatda goýýar. Näme üçin beýle aşa çärelere baryp, sözüň bir bölegini pyýada goýmaly? Näme üçin bir düşünje beýlekisinden ileri tutulýar? OOP-yň işlikleri birden pikirimiz üçin ähmiýeti pes edip bilmez. Bu geň galdyryjy garaýyş. (Stiw geegge)
“Clojure” -niň döredijisi Rik Hikki obýekt ulgamlaryny hakyky dünýäniň aşa ýönekeýleşdirilen modelleri hökmünde häsiýetlendirdi. OOP-yň wagty dogry düzüp bilmejekdigine ünsi çekdi, bu programmalarda köp okamak köp bolanda uly kynçylyklary döredýär. “Unix” programmisti we açyk çeşmeli programma üpjünçiliginiň tarapdary Erik S.Raýmond, OOP-nyň “Theeke-täk çözgüt” bolandygyny öňe sürdi we OOP-nyň aç-açanlyga päsgel berýän köp gatly programmalary höweslendirýändigini ýazdy. Munuň tersine çemeleşme hökmünde Reýmond Unix we C mysallaryny berdi.

Salgylar

Margaret Rous @ WhatIs.com Wikipediýa tarapyndan! ( Rus görnüşi ) miras polimorfizm SOLID (Obýekte gönükdirilen dizaýn) ( rus wersiýasy ) OOPS-a garşy ýeke-täk jogapkärçilik ýörelgesi ( rus wersiýasy ) OOPS näme (seslenmesiz) Terjime: Varygin D.V.
Teswirler
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION