Әрбір әзірлеуші ​​білуі тиіс 10 нысанға бағытталған бағдарламалау қағидалары

Әрбір әзірлеуші ​​білуі тиіс 10 нысанға бағытталған бағдарламалау қағидалары

Мен SOLID принциптері туралы естімеген әзірлеушілерді жиі кездестіремін (біз мұнда олар туралы егжей-тегжейлі айтты. — Transl.) немесе объектіге бағытталған бағдарламалау (OOP) немесе олар туралы естідім, бірақ оларды іс жүзінде қолданбаңыз. Бұл мақалада әзірлеушіге күнделікті жұмысында көмектесетін OOP принциптерінің артықшылықтары сипатталған. Олардың кейбіреулері жақсы белгілі, басқалары соншалықты көп емес, сондықтан мақала жаңадан бастағандар үшін де, тәжірибелі бағдарламашылар үшін де пайдалы болады.

Біз еске саламыз: барлық Habr оқырмандары үшін - Habr жарнамалық кодын пайдаланып кез келген Skillbox курсына жазылу кезінде 10 000 рубль жеңілдік.

Skillbox ұсынады: Білім беру онлайн курсы «Java әзірлеушісі».

ҚҰРҒАҚ (Өзіңізді қайталамаңыз)

Қарапайым қағида, оның мәні атауынан түсінікті: «Өзіңді қайталама». Бағдарламашы үшін бұл қайталанатын кодты болдырмау қажеттілігін, сондай-ақ өз жұмысында абстракцияны пайдалану мүмкіндігін білдіреді.

Егер кодта екі қайталанатын бөлім болса, оларды бір әдіске біріктіру керек. Егер қатты кодталған мән бірнеше рет пайдаланылса, оны жалпы константаға түрлендіру керек.

Бұл кодты жеңілдету және оған қызмет көрсетуді жеңілдету үшін қажет, бұл OOP негізгі мақсаты болып табылады. Бір кодты тапсырыс идентификаторымен де, SSN-мен де тексеруден өтпейтіндіктен, одақты асыра пайдаланбауыңыз керек.

Инкапсуляциялық өзгерістер

Көптеген компаниялардың бағдарламалық өнімдері үнемі дамып отырады. Бұл кодқа өзгертулер енгізу керек дегенді білдіреді, оған қолдау көрсету керек. Инкапсуляцияны қолдану арқылы өміріңізді жеңілдетуге болады. Бұл қолданыстағы код базасын тиімдірек тексеруге және қолдауға мүмкіндік береді. Міне, бір мысал.

Егер сіз Java тілінде жазсаңыз, онда әдепкі бойынша жеке әдістер мен айнымалы мәндерді тағайындаңыз.

Ашық/жабық принцип

Бұл принципті келесі мәлімдемені оқу арқылы оңай есте сақтауға болады: «Бағдарламалық қамтамасыз ету нысандары (сыныптар, модульдер, функциялар және т.б.) кеңейту үшін ашық, бірақ өзгерту үшін жабық болуы керек». Іс жүзінде бұл олардың мінез-құлқын бастапқы кодты өзгертпестен өзгертуге мүмкіндік беретінін білдіреді.

Бастапқы кодқа өзгертулер кодты қайта қарауды, бірлік тестілеуді және басқа процедураларды қажет еткенде принцип маңызды. Ашық/жабық принципін ұстанатын код ұзартылған кезде өзгермейді, сондықтан онымен проблемалар әлдеқайда аз.

Міне, осы принципті бұзатын кодтың мысалы.

Әрбір әзірлеуші ​​білуі тиіс 10 нысанға бағытталған бағдарламалау қағидалары

Ондағы бір нәрсені өзгерту қажет болса, бұл көп уақытты алады, өйткені кодтың қажетті фрагментпен байланысы бар барлық бөлімдерін өзгерту керек болады.

Айтпақшы, ашықтық-тұйықтық - SOLID қағидаларының бірі.

Бірыңғай жауапкершілік қағидасы (SRP)

SOLID жиынтығының тағы бір принципі. Онда «сыныптың өзгеруіне себеп болатын бір ғана себеп бар» делінген. Сынып бір ғана есепті шешеді. Оның бірнеше әдістері болуы мүмкін, бірақ олардың әрқайсысы жалпы мәселені шешу үшін ғана қолданылады. Барлық әдістер мен қасиеттер тек осыған қызмет етуі керек.

Әрбір әзірлеуші ​​білуі тиіс 10 нысанға бағытталған бағдарламалау қағидалары

Бұл принциптің құндылығы жеке бағдарламалық құрал құрамдас бөлігі мен код арасындағы байланысты босатады. Егер сыныпқа бірнеше функция қоссаңыз, ол екі функция арасындағы қатынасты енгізеді. Осылайша, егер сіз олардың біреуін өзгертсеңіз, біріншіге жалғанған екіншісін бұзу мүмкіндігі жоғары. Және бұл барлық мәселелерді алдын ала анықтау үшін тестілеу циклдерін көбейтуді білдіреді.

Тәуелділіктің инверсия принципі (DIP)

Әрбір әзірлеуші ​​білуі тиіс 10 нысанға бағытталған бағдарламалау қағидалары

Жоғарыда AppManager EventLogWriter-ге тәуелді болатын код мысалы берілген, ол өз кезегінде AppManager-пен тығыз байланысты. Хабарландыруды көрсетудің басқа жолы қажет болса, ол push, SMS немесе электрондық пошта болсын, AppManager сыныбын өзгертуіңіз керек.

Мәселені DIP көмегімен шешуге болады. Сонымен, AppManager орнына біз рамка арқылы енгізілетін EventLogWriter сұраймыз.

DIP тәуелділік модулін өзгерту арқылы жеке модульдерді басқалармен оңай ауыстыруға мүмкіндік береді. Бұл бір модульді басқаларына әсер етпей өзгертуге мүмкіндік береді.

Мұрагерлік орнына композиция

Әрбір әзірлеуші ​​білуі тиіс 10 нысанға бағытталған бағдарламалау қағидаларыКодты қайта пайдаланудың екі негізгі жолы бар: мұра және құрам, екеуінің де өз артықшылықтары мен кемшіліктері бар. Әдетте екіншісіне артықшылық беріледі, себебі ол икемді.

Құрам сізге оның сипаттарын орнату арқылы орындалу уақытында сыныптың әрекетін өзгерту мүмкіндігін береді. Интерфейстерді іске асыру кезінде икемді іске асыруды беретін полиморфизм қолданылады.

Тіпті Джошуа Блоктың тиімді Java нұсқасы мұраға емес, композицияны таңдауға кеңес береді.

Барбара Лисков ауыстыру принципі (LSP)

SOLID құралдар жинағының тағы бір қағидасы. Онда қосалқы түрлер супертүрге ауыстырылатын болуы керек делінген. Яғни, суперкласспен жұмыс істейтін әдістер мен функциялар оның ішкі сыныптарымен проблемасыз жұмыс істей алуы керек.

LSP бір жауапкершілік қағидасымен де, ортақ жауапкершілік қағидасымен де байланысты. Егер сынып ішкі сыныпқа қарағанда көбірек функционалдылықты қамтамасыз етсе, онда соңғысы осы принципті бұза отырып, кейбір функционалдылықты қолдамайды.

Мұнда LSP-ке қайшы келетін код бөлігі берілген.

Әрбір әзірлеуші ​​білуі тиіс 10 нысанға бағытталған бағдарламалау қағидалары

Аудан(Тіктөртбұрыш r) әдісі тіктөртбұрыштың ауданын есептейді. Шаршы орындалғаннан кейін бағдарлама бұзылады, себебі шаршы бұл жерде тіктөртбұрыш емес. LSP принципіне сәйкес, негізгі сыныптарға сілтемелерді пайдаланатын функциялар туынды сыныптардың объектілерін қосымша нұсқауларсыз пайдалана алуы керек.

Ішкі түрдің нақты анықтамасы болып табылатын бұл принципті 1987 жылы «Деректерді абстракциялау және иерархия» деп аталатын конференцияның негізгі баяндамасында Барбара Лисков ұсынған, сондықтан оның атауы.

Интерфейсті бөлу принципі (ISP)

Тағы бір SOLID принципі. Оған сәйкес, пайдаланылмайтын интерфейс іске асырылмауы керек. Бұл принципті ұстану жүйенің икемді болып қалуына және операциялық логикаға өзгертулер енгізілген кезде рефакторингке жарамды болуына көмектеседі.

Көбінесе бұл жағдай интерфейсте бірден бірнеше функциялар болған кезде орын алады және клиент олардың біреуін ғана қажет етеді.

Интерфейс жазу қиын тапсырма болғандықтан, жұмыс аяқталғаннан кейін ештеңені бұзбай өзгерту қиын болады.

Java тіліндегі ISP принципінің артықшылығы мынада: барлық әдістер алдымен жүзеге асырылуы керек, содан кейін ғана оларды сыныптар пайдалана алады. Сондықтан принцип әдістердің санын азайтуға мүмкіндік береді.

Әрбір әзірлеуші ​​білуі тиіс 10 нысанға бағытталған бағдарламалау қағидалары

Интерфейс үшін бағдарламалау, іске асыру емес

Мұнда бәрі аты-жөнінен түсінікті. Бұл принципті қолдану интерфейстің кез келген жаңа іске асырылуымен жұмыс істей алатын икемді кодты жасауға әкеледі.

Айнымалылар, қайтару түрлері немесе әдіс аргумент түрі үшін интерфейс түрін пайдалану керек. Мысал SubClass емес, SuperClass пайдалану болып табылады.

Яғни:

Тізім сандары= getNumbers();

Бірақ жоқ:

ArrayList сандары = getNumbers();

Міне, жоғарыда талқыланған нәрсені іс жүзінде жүзеге асыру.

Әрбір әзірлеуші ​​білуі тиіс 10 нысанға бағытталған бағдарламалау қағидалары

Өкілдік принципі

Жалпы мысал Java тіліндегі equals() және hashCode() әдістері болып табылады. Екі нысанды салыстыру қажет болғанда, бұл әрекет клиенттің орнына сәйкес сыныпқа беріледі.

Принциптің артықшылығы - кодтың қайталануы жоқ және мінез-құлықты өзгерту салыстырмалы түрде қарапайым. Бұл іс-шара делегациясына да қатысты.

Әрбір әзірлеуші ​​білуі тиіс 10 нысанға бағытталған бағдарламалау қағидалары

Барлық осы принциптер жоғары үйлесімділікпен және төмен байланыспен икемді, әдемі және сенімді кодты жазуға мүмкіндік береді. Әрине, теория жақсы, бірақ әзірлеушіге алған білімін нақты пайдалану үшін тәжірибе қажет. OOP принциптерін меңгергеннен кейін, сіздің келесі қадамыңыз бағдарламалық жасақтаманы әзірлеудің жалпы мәселелерін шешу үшін дизайн үлгілерін үйрену болуы мүмкін.

Skillbox ұсынады:

Ақпарат көзі: www.habr.com

пікір қалдыру