10 Принсипҳои барномасозии ба объект нигаронидашуда, ки ҳар як таҳиягар бояд дар бораи он донад

10 Принсипҳои барномасозии ба объект нигаронидашуда, ки ҳар як таҳиягар бояд дар бораи он донад

Бисёр вақт ман бо таҳиягароне вомехӯрам, ки дар бораи принсипҳои SOLID нашунидаанд (мо дар ин чо дар бораи онхо муфассал сухан ронд. — Transl.) ё барномасозии ба объект нигаронидашуда (OOP), ё дар бораи онҳо шунидаам, аммо онҳоро дар амал истифода набаред. Ин мақола бартариҳои принсипҳои OOP-ро тавсиф мекунад, ки ба таҳиякунанда дар кори ҳаррӯзаи худ кӯмак мекунанд. Баъзеи онҳо хуб маълуманд, дигарон на он қадар зиёд, бинобар ин мақола ҳам барои шурӯъкунандагон ва ҳам барномасозони ботаҷриба муфид хоҳад буд.

Мо ба шумо хотиррасон мекунем: барои ҳамаи хонандагони Habr - тахфифи 10 000 рубл ҳангоми дохил шудан ба курсҳои Skillbox бо истифода аз рамзи таблиғотии Habr.

Skillbox тавсия медиҳад: Курси онлайни таълимӣ "Таҳиягари Java".

ХУШК (худро такрор накунед)

Принсипи хеле содда, ки моҳияти он аз ном равшан аст: "Худро такрор накунед." Барои барномасоз, ин маънои зарурати пешгирӣ кардани рамзи такрорӣ ва инчунин имконияти истифодаи абстраксияро дар кори худ дорад.

Агар дар код ду фасли такроршаванда мавҷуд бошад, онҳо бояд дар як усул муттаҳид карда шаванд. Агар арзиши рамзбандишуда зиёда аз як маротиба истифода шавад, онро ба константи умумӣ табдил додан меарзад.

Ин барои содда кардани код ва осон кардани нигоҳдории он зарур аст, ки ҳадафи асосии OOP мебошад. Шумо набояд иттифоқро аз ҳад зиёд истифода набаред, зеро ҳамон код ҳам бо OrderId ва ҳам SSN аз санҷиш намегузарад.

Тағйироти фарогир

Маҳсулоти нармафзори аксари ширкатҳо пайваста такмил меёбанд. Ин маънои онро дорад, ки бояд ба код тағйирот ворид карда шавад, он бояд дастгирӣ карда шавад. Бо истифода аз инкапсуляция шумо метавонед ҳаёти худро осонтар кунед. Ин ба шумо имкон медиҳад, ки базаи коди мавҷудаи худро самараноктар санҷед ва нигоҳ доред. Ана як мисол.

Агар шумо дар Java нависед, пас ба таври нобаёнӣ усулҳо ва тағирёбандаҳои хусусиро таъин кунед.

Принсипи кушода / пӯшида

Ин принсипро бо хондани изҳороти зерин ба осонӣ ба ёд овардан мумкин аст: "Абъектҳои нармафзор (синфҳо, модулҳо, функсияҳо ва ғайра) бояд барои васеъшавӣ кушода бошанд, аммо барои тағир додан баста шаванд." Дар амал, ин маънои онро дорад, ки онҳо метавонанд бидуни тағир додани коди ибтидоӣ рафтори худро тағир диҳанд.

Принсип вақте муҳим аст, ки тағирот ба коди сарчашма таҷдиди код, санҷиши воҳидҳо ва дигар расмиёти дигарро талаб мекунад. Коде, ки принсипи кушода/пўшидаро риоя мекунад, ҳангоми васеъшавӣ тағир намеёбад, бинобар ин бо он мушкилот хеле камтаранд.

Дар ин ҷо як мисоли кодексест, ки ин принсипро вайрон мекунад.

10 Принсипҳои барномасозии ба объект нигаронидашуда, ки ҳар як таҳиягар бояд дар бораи он донад

Агар ба шумо лозим ояд, ки чизе дар он тағир диҳед, он вақти зиёдро мегирад, зеро ҳамаи қисматҳои код, ки бо фрагменти дилхоҳ алоқаманданд, бояд тағир дода шаванд.

Зимнан, ошкорбаёнӣ-пӯшиш яке аз принсипҳои СОЛИД мебошад.

Принсипи масъулияти ягона (SRP)

Принсипи дигар аз маҷмӯи SOLID. Дар он гуфта мешавад, ки "танҳо як сабабе вуҷуд дорад, ки боиси тағирёбии синф мегардад". Синф танҳо як масъаларо ҳал мекунад. Он метавонад якчанд усул дошта бошад, аммо ҳар яки онҳо танҳо барои ҳалли як масъалаи умумӣ истифода мешаванд. Ҳама усулҳо ва хосиятҳо бояд танҳо ба ин хидмат кунанд.

10 Принсипҳои барномасозии ба объект нигаронидашуда, ки ҳар як таҳиягар бояд дар бораи он донад

Арзиши ин принсип дар он аст, ки он пайвастагии байни ҷузъи инфиродии нармафзор ва кодро суст мекунад. Агар шумо ба синф зиёда аз як функсия илова кунед, он муносибати байни ду функсияро ҷорӣ мекунад. Ҳамин тариқ, агар шумо яке аз онҳоро иваз кунед, эҳтимолияти вайрон кардани дуюмаш, ки ба якум пайваст аст, зиёд аст. Ва ин маънои зиёд кардани давраҳои санҷишро дорад, то ҳама мушкилотро пешакӣ муайян кунад.

Принсипи инверсияи вобастагӣ (DIP)

10 Принсипҳои барномасозии ба объект нигаронидашуда, ки ҳар як таҳиягар бояд дар бораи он донад

Дар боло як мисоли рамзест, ки AppManager аз EventLogWriter вобаста аст, ки дар навбати худ бо AppManager зич алоқаманд аст. Агар ба шумо роҳи дигари нишон додани огоҳинома лозим бошад, хоҳ он push, SMS ё почтаи электронӣ, шумо бояд синфи AppManager-ро тағир диҳед.

Мушкилотро бо истифода аз DIP ҳал кардан мумкин аст. Ҳамин тавр, ба ҷои AppManager, мо як EventLogWriter дархост мекунем, ки бо истифода аз чаҳорчӯба ворид карда мешавад.

DIP имкон медиҳад, ки бо иваз кардани модули вобастагӣ модулҳои инфиродӣ бо дигарон ба осонӣ иваз карда шаванд. Ин имкон медиҳад, ки як модул бе таъсир ба дигарон иваз карда шавад.

Таркиб ба ҷои мерос

10 Принсипҳои барномасозии ба объект нигаронидашуда, ки ҳар як таҳиягар бояд дар бораи он донадДу роҳи асосии дубора истифода бурдани код вуҷуд дорад: мерос ва таркиб, ки ҳардуи онҳо бартарӣ ва нуқсонҳои худро доранд. Одатан дуюмаш бартарӣ дорад, зеро он чандиртар аст.

Таркиб ба шумо имкон медиҳад, ки рафтори синфро дар вақти корӣ бо гузоштани хосиятҳои он тағир диҳед. Ҳангоми татбиқи интерфейсҳо полиморфизм истифода мешавад, ки татбиқи чандиртарро медиҳад.

Ҳатто Java-и самараноки Ҷошуа Блок маслиҳат медиҳад, ки таркибро аз мерос интихоб кунед.

Принсипи ивазкунии Барбара Лисков (LSP)

Принсипи дигар аз асбоби SOLID. Дар он гуфта мешавад, ки зернамудҳо бояд ба супертип иваз карда шаванд. Яъне, усулҳо ва функсияҳое, ки бо суперкласс кор мекунанд, бояд бо зерсинфҳои он бе мушкилот кор кунанд.

LSP ҳам бо принсипи ягонаи масъулият ва ҳам бо принсипи масъулияти муштарак алоқаманд аст. Агар синф назар ба зерсинф функсияҳои бештарро таъмин кунад, он гоҳ охирин баъзе функсияҳоро дастгирӣ намекунад ва ин принсипро вайрон мекунад.

Ин аст як пораи код, ки хилофи LSP аст.

10 Принсипҳои барномасозии ба объект нигаронидашуда, ки ҳар як таҳиягар бояд дар бораи он донад

Усули майдони (Ректоркунҷа r) майдони росткунҷаро ҳисоб мекунад. Барнома пас аз иҷро кардани Square садама хоҳад кард, зеро Square дар ин ҷо росткунҷа нест. Тибқи принсипи LSP, функсияҳое, ки истинод ба синфҳои асосиро истифода мебаранд, бояд объектҳои синфҳои ҳосилшударо бидуни дастурҳои иловагӣ истифода баранд.

Ин принсип, ки таърифи мушаххаси зергурӯҳҳо мебошад, аз ҷониби Барбара Лисков дар конфронси асосии соли 1987 бо номи «Абстраксияи маълумот ва иерархия» пешниҳод шуда буд, аз ин рӯ номи он.

Принсипи ҷудокунии интерфейс (ISP)

Принсипи дигари SOLID. Мувофиқи он, интерфейси истифоданашуда набояд татбиқ карда шавад. Риояи ин принсип ба система кӯмак мекунад, ки ҳангоми тағирот ба мантиқи амалиётӣ чандир ва барои рефакторинг мувофиқ боқӣ монад.

Аксар вақт, ин ҳолат вақте рух медиҳад, ки интерфейс якбора якчанд функсияро дар бар мегирад ва муштарӣ танҳо яке аз онҳо лозим аст.

Азбаски навиштани интерфейс кори душвор аст, тағир додани он пас аз анҷоми кор бидуни вайрон кардани чизе душвор хоҳад буд.

Бартарии принсипи ISP дар Java дар он аст, ки ҳама усулҳо бояд аввал татбиқ карда шаванд ва танҳо пас аз он онҳо метавонанд аз ҷониби синфҳо истифода шаванд. Бинобар ин, принцип имконият медихад, ки шумораи усулхо кам карда шавад.

10 Принсипҳои барномасозии ба объект нигаронидашуда, ки ҳар як таҳиягар бояд дар бораи он донад

Барномасозӣ барои интерфейс, на татбиқ

Дар ин ҷо ҳама чиз аз ном равшан аст. Татбиқи ин принсип боиси эҷоди коди чандир мегардад, ки метавонад бо ҳама гуна татбиқи нави интерфейс кор кунад.

Шумо бояд навъи интерфейсро барои тағирёбандаҳо, намудҳои баргардонидан ё навъи аргументи метод истифода баред. Намунаи истифодаи SuperClass, на SubClass.

Ин аст:

Рӯйхати рақамҳо = getNumbers ();

Аммо не:

Рақамҳои ArrayList = getNumbers();

Дар ин ҷо татбиқи амалии он чизест, ки дар боло муҳокима карда мешавад.

10 Принсипҳои барномасозии ба объект нигаронидашуда, ки ҳар як таҳиягар бояд дар бораи он донад

Принсипи намояндагӣ

Мисоли маъмул усулҳои equals() ва hashCode() дар Java мебошад. Ҳангоми муқоисаи ду объект зарур аст, ин амал ба ҷои як муштарӣ ба синфи мувофиқ дода мешавад.

Бартарии принсип дар он аст, ки такрори код вуҷуд надорад ва тағир додани рафтор нисбатан осон аст. Он инчунин ба ҳайати чорабиниҳо дахл дорад.

10 Принсипҳои барномасозии ба объект нигаронидашуда, ки ҳар як таҳиягар бояд дар бораи он донад

Ҳамаи ин принсипҳо ба шумо имкон медиҳанд, ки рамзи бештар фасеҳ, зебо ва боэътимодро бо ҳамбастагии баланд ва пайвасти паст нависед. Албатта, назария хуб аст, аммо барои таҳиякунанда воқеан дониши гирифтаашро истифода мебарад, амалия лозим аст. Пас аз он ки шумо принсипҳои OOP-ро азхуд кардед, қадами навбатии шумо метавонад омӯзиши намунаҳои тарроҳӣ барои ҳалли мушкилоти умумии таҳияи нармафзор бошад.

Skillbox тавсия медиҳад:

Манбаъ: will.com

Илова Эзоҳ