10 Egwyddor Rhaglennu Sy'n Canolbwyntio ar Wrthrychau y Dylai Pob Datblygwr Wybod

10 Egwyddor Rhaglennu Sy'n Canolbwyntio ar Wrthrychau y Dylai Pob Datblygwr Wybod

Yn aml iawn rwy'n cwrdd Γ’ datblygwyr nad ydyn nhw wedi clywed am yr egwyddorion SOLID (ni wedi siarad am danynt yn fanwl yma. β€” Transl.) neu raglennu gwrthrych-gyfeiriadol (OOP), neu wedi clywed amdanynt, ond peidiwch Γ’'u defnyddio'n ymarferol. Mae'r erthygl hon yn disgrifio manteision egwyddorion OOP sy'n helpu'r datblygwr yn ei waith bob dydd. Mae rhai ohonynt yn adnabyddus, eraill ddim cymaint, felly bydd yr erthygl yn ddefnyddiol i ddechreuwyr a rhaglenwyr profiadol.

Rydym yn atgoffa: i holl ddarllenwyr Habr - gostyngiad o 10 rwbl wrth gofrestru ar unrhyw gwrs Skillbox gan ddefnyddio cod hyrwyddo Habr.

Mae Skillsbox yn argymell: Cwrs addysgol ar-lein "datblygwr Java".

SYCH (Peidiwch ag Ailadrodd Eich Hun)

Egwyddor eithaf syml, y mae ei hanfod yn glir o'r enw: "Peidiwch ag ailadrodd eich hun." Ar gyfer rhaglennydd, mae hyn yn golygu'r angen i osgoi cod dyblyg, yn ogystal Γ’'r cyfle i ddefnyddio tynnu yn eu gwaith.

Os oes dwy adran ailadroddus yn y cod, dylid eu cyfuno mewn un dull. Os defnyddir gwerth cod caled fwy nag unwaith, mae'n werth ei drosi'n gysonyn cyhoeddus.

Mae hyn yn angenrheidiol er mwyn symleiddio'r cod a'i wneud yn haws i'w gynnal, sef prif nod OOP. Ni ddylech orddefnyddio'r undeb ychwaith, gan na fydd yr un cod yn trosglwyddo dilysiad gyda'r OrderId a'r SSN.

AmgΓ‘u Newidiadau

Mae cynhyrchion meddalwedd y rhan fwyaf o gwmnΓ―au yn esblygu'n gyson. Mae hyn yn golygu bod angen gwneud newidiadau i'r cod, mae angen ei gefnogi. Gallwch chi wneud eich bywyd yn haws trwy ddefnyddio amgΓ‘u. Bydd hyn yn caniatΓ‘u ichi brofi a chynnal eich sylfaen cod presennol yn fwy effeithlon. Dyma un enghraifft.

Os ydych chi'n ysgrifennu yn Java, yna aseinio dulliau preifat a newidynnau yn ddiofyn.

Egwyddor agored/caeedig

Gellir cofio'r egwyddor hon yn hawdd trwy ddarllen y datganiad canlynol: "Dylai endidau meddalwedd (dosbarthiadau, modiwlau, swyddogaethau, ac ati) fod yn agored i'w hymestyn, ond ar gau i'w haddasu." Yn ymarferol, mae hyn yn golygu y gallant ganiatΓ‘u i'w hymddygiad gael ei newid heb newid y cod ffynhonnell.

Mae'r egwyddor yn bwysig pan fydd newidiadau i'r cod ffynhonnell yn gofyn am adolygu cod, profi uned, a gweithdrefnau eraill. Nid yw cod sy'n dilyn yr egwyddor agored/caeedig yn newid pan gaiff ei ymestyn, felly mae llawer llai o broblemau ag ef.

Dyma enghraifft o god sy'n torri'r egwyddor hon.

10 Egwyddor Rhaglennu Sy'n Canolbwyntio ar Wrthrychau y Dylai Pob Datblygwr Wybod

Os oes angen i chi newid rhywbeth ynddo, bydd yn cymryd llawer o amser, oherwydd bydd yn rhaid newid pob rhan o'r cod sydd Γ’ chysylltiad Γ’'r darn a ddymunir.

Gyda llaw, bod yn agored-cau yw un o egwyddorion SOLID.

Egwyddor Cyfrifoldeb Sengl (SRP)

Egwyddor arall o'r set SOLID. Mae’n nodi β€œnad oes ond un achos sy’n achosi newid dosbarth.” Dim ond un broblem y mae'r dosbarth yn ei datrys. Efallai bod ganddo sawl dull, ond dim ond i ddatrys problem gyffredin y defnyddir pob un ohonynt. Dylai pob dull ac eiddo wasanaethu hyn yn unig.

10 Egwyddor Rhaglennu Sy'n Canolbwyntio ar Wrthrychau y Dylai Pob Datblygwr Wybod

Gwerth yr egwyddor hon yw ei fod yn llacio'r cyplydd rhwng y gydran meddalwedd unigol a'r cod. Os ydych chi'n ychwanegu mwy nag un swyddogaeth i ddosbarth, mae'n cyflwyno perthynas rhwng y ddwy swyddogaeth. Felly, os byddwch chi'n newid un ohonyn nhw, mae siawns uchel o ddifetha'r ail un, sy'n gysylltiedig Γ’'r un cyntaf. Ac mae hyn yn golygu cynyddu cylchoedd profi er mwyn nodi pob problem ymlaen llaw.

Egwyddor Gwrthdroad Dibyniaeth (DIP)

10 Egwyddor Rhaglennu Sy'n Canolbwyntio ar Wrthrychau y Dylai Pob Datblygwr Wybod

Uchod mae enghraifft cod lle mae AppManager yn dibynnu ar EventLogWriter, sydd yn ei dro wedi'i gysylltu'n agos ag AppManager. Os oes angen ffordd wahanol arnoch i ddangos hysbysiad, boed yn gwthio, SMS neu e-bost, mae angen i chi newid y dosbarth AppManager.

Gellir datrys y broblem gan ddefnyddio DIP. Felly, yn lle AppManager, rydym yn gofyn am EventLogWriter, a fydd yn cael ei gofnodi gan ddefnyddio'r fframwaith.

Mae DIP yn ei gwneud hi'n bosibl disodli modiwlau unigol ag eraill yn hawdd trwy newid y modiwl dibyniaeth. Mae hyn yn ei gwneud hi'n bosibl newid un modiwl heb effeithio ar y lleill.

Cyfansoddiad yn lle etifeddiaeth

10 Egwyddor Rhaglennu Sy'n Canolbwyntio ar Wrthrychau y Dylai Pob Datblygwr WybodMae dwy brif ffordd o ailddefnyddio cod: etifeddiaeth a chyfansoddiad, ac mae gan y ddau ohonynt eu manteision a'u hanfanteision eu hunain. Fel arfer mae'r ail yn cael ei ffafrio oherwydd ei fod yn fwy hyblyg.

Mae cyfansoddi yn rhoi'r gallu i chi newid ymddygiad dosbarth ar amser rhedeg trwy osod ei briodweddau. Wrth weithredu rhyngwynebau, defnyddir polymorphism, sy'n rhoi gweithrediad mwy hyblyg.

Mae Hyd yn oed Java Effeithiol gan Joshua Bloch yn cynghori dewis cyfansoddiad dros etifeddiaeth.

Egwyddor Amnewid Barbara Liskov (LSP)

Egwyddor arall o becyn cymorth SOLID. Mae'n nodi bod yn rhaid i isdeipiau fod yn lle'r uwchdeip. Hynny yw, dylai dulliau a swyddogaethau sy'n gweithio gydag uwchddosbarth allu gweithio heb broblemau gyda'i is-ddosbarthiadau.

Mae LSP yn gysylltiedig Γ’'r egwyddor cyfrifoldeb sengl a'r egwyddor cyfrifoldeb a rennir. Os yw dosbarth yn darparu mwy o ymarferoldeb nag is-ddosbarth, yna ni fydd yr olaf yn cefnogi rhywfaint o'r swyddogaeth, gan dorri'r egwyddor hon.

Dyma ddarn o god sy'n gwrth-ddweud LSP.

10 Egwyddor Rhaglennu Sy'n Canolbwyntio ar Wrthrychau y Dylai Pob Datblygwr Wybod

Mae'r dull arwynebedd (Petryal r) yn cyfrifo arwynebedd Petryal. Bydd y rhaglen yn chwalu ar Γ΄l gweithredu Square oherwydd nid yw SgwΓ’r yn Petryal yma. Yn Γ΄l egwyddor LSP, dylai swyddogaethau sy'n defnyddio cyfeiriadau at ddosbarthiadau sylfaen allu defnyddio gwrthrychau o ddosbarthiadau deilliadol heb gyfarwyddiadau ychwanegol.

Cynigiwyd yr egwyddor hon, sy’n ddiffiniad penodol o isdeip, gan Barbara Liskov mewn cyweirnod cynhadledd ym 1987 o’r enw β€œTynnu Data a Hierarchaeth,” dyna pam ei henw.

Egwyddor Hollti Rhyngwyneb (ISP)

Egwyddor SOLID arall. Yn Γ΄l iddo, ni ddylid gweithredu rhyngwyneb nad yw'n cael ei ddefnyddio. Mae dilyn yr egwyddor hon yn helpu'r system i aros yn hyblyg ac yn addas ar gyfer ailffactorio pan wneir newidiadau i'r rhesymeg weithredu.

Yn fwyaf aml, mae'r sefyllfa hon yn digwydd pan fydd y rhyngwyneb yn cynnwys sawl swyddogaeth ar unwaith, a dim ond un ohonynt sydd ei angen ar y cleient.

Gan fod ysgrifennu rhyngwyneb yn dasg anodd, bydd ei newid ar Γ΄l i'r gwaith gael ei gwblhau heb dorri unrhyw beth yn her.

Mantais egwyddor ISP yn Java yw bod yn rhaid gweithredu pob dull yn gyntaf, a dim ond wedyn y gellir eu defnyddio gan ddosbarthiadau. Felly, mae'r egwyddor yn ei gwneud hi'n bosibl lleihau nifer y dulliau.

10 Egwyddor Rhaglennu Sy'n Canolbwyntio ar Wrthrychau y Dylai Pob Datblygwr Wybod

Rhaglennu ar gyfer y rhyngwyneb, nid y gweithredu

Mae popeth yma yn glir o'r teitl. Mae cymhwyso'r egwyddor hon yn arwain at greu cod hyblyg a all weithio gydag unrhyw weithrediad newydd o'r rhyngwyneb.

Dylech ddefnyddio'r math o ryngwyneb ar gyfer newidynnau, mathau o ddychweliadau, neu'r math o ddadl dull. Un enghraifft yw defnyddio SuperClass yn hytrach nag Is-ddosbarth.

Hynny yw:

Rhifau rhestr = getNumbers();

Ond nid:

Rhifau ArrayList = getNumbers();

Dyma weithrediad ymarferol o'r hyn a drafodir uchod.

10 Egwyddor Rhaglennu Sy'n Canolbwyntio ar Wrthrychau y Dylai Pob Datblygwr Wybod

Egwyddor dirprwyo

Enghraifft gyffredin yw'r dulliau hafal() a hashCode() yn Java. Pan fydd angen cymharu dau wrthrych, caiff y cam hwn ei ddirprwyo i'r dosbarth cyfatebol yn lle'r un cleient.

Mantais yr egwyddor yw nad oes unrhyw ddyblygu cod ac mae'n gymharol syml newid ymddygiad. Mae hefyd yn berthnasol i ddirprwyo digwyddiadau.

10 Egwyddor Rhaglennu Sy'n Canolbwyntio ar Wrthrychau y Dylai Pob Datblygwr Wybod

Mae'r holl egwyddorion hyn yn caniatΓ‘u ichi ysgrifennu cod mwy hyblyg, hardd a dibynadwy gyda chydlyniad uchel a chyplu isel. Wrth gwrs, mae theori yn dda, ond er mwyn i ddatblygwr ddefnyddio'r wybodaeth a gaffaelwyd mewn gwirionedd, mae angen ymarfer. Unwaith y byddwch wedi meistroli egwyddorion OOP, efallai mai eich cam nesaf fydd dysgu patrymau dylunio i ddatrys problemau datblygu meddalwedd cyffredin.

Mae Skillsbox yn argymell:

Ffynhonnell: hab.com

Ychwanegu sylw