10 Object-Oriented Programming Principles Txhua tus tsim tawm yuav tsum paub

10 Object-Oriented Programming Principles Txhua tus tsim tawm yuav tsum paub

Feem ntau kuv ntsib cov neeg tsim khoom uas tsis tau hnov ​​​​txog cov ntsiab lus SOLID (peb tham txog lawv kom ntxaws ntawm no. - Kev txhais lus) lossis qhov kev qhia ua haujlwm (OOP), lossis tau hnov ​​​​txog lawv, tab sis tsis txhob siv lawv hauv kev xyaum. Kab lus no piav qhia txog cov txiaj ntsig ntawm OOP cov hauv paus ntsiab lus uas pab tus tsim tawm hauv nws txoj haujlwm niaj hnub. Qee tus paub zoo, lwm tus tsis yog ntau, yog li tsab xov xwm yuav muaj txiaj ntsig zoo rau ob qho tib si pib thiab cov neeg paub txog programmers.

Peb nco qab: rau tag nrho cov neeg nyeem Habr - 10 ruble luv nqi thaum tso npe rau hauv ib chav kawm Skillbox siv Habr promotional code.

Skillbox pom zoo: Kev kawm online chav kawm "Java developer".

DRY (Tsis txhob rov hais dua koj tus kheej)

Lub hauv paus ntsiab lus yooj yooj yim, qhov tseem ceeb ntawm qhov tseeb ntawm lub npe: "Tsis txhob rov hais dua koj tus kheej." Rau ib tus programmer, qhov no txhais tau tias yuav tsum tsis txhob muaj cov lej sib npaug, nrog rau lub sijhawm los siv abstraction hauv lawv txoj haujlwm.

Yog tias muaj ob ntu rov ua dua hauv cov cai, lawv yuav tsum muab tso ua ke rau hauv ib txoj kev. Yog tias tus nqi hardcoded siv ntau dua ib zaug, nws tsim nyog hloov nws mus rau qhov qub.

Qhov no yog qhov tsim nyog txhawm rau ua kom yooj yim cov cai thiab ua kom yooj yim rau kev tswj hwm, uas yog lub hom phiaj tseem ceeb ntawm OOP. Koj yuav tsum tsis txhob siv lub union ntau dhau lawm, vim tib txoj cai yuav tsis dhau kev pov thawj nrog rau OrderId thiab SSN.

Encapsulating Hloov

Feem ntau cov tuam txhab 'cov khoom lag luam software tau hloov pauv tas li. Qhov no txhais tau hais tias kev hloov pauv yuav tsum tau ua rau cov cai, nws yuav tsum tau txais kev txhawb nqa. Koj tuaj yeem ua rau koj lub neej yooj yim dua los ntawm kev siv encapsulation. Qhov no yuav tso cai rau koj kom ua tau zoo dua sim thiab tswj koj tus lej code uas twb muaj lawm. Nov yog ib qho piv txwv.

Yog tias koj sau hauv Java, ces muab cov txheej txheem ntiag tug thiab hloov pauv los ntawm lub neej ntawd.

Qhib/kaw txoj cai

Lub hauv paus ntsiab lus no tuaj yeem nco tau yooj yim los ntawm kev nyeem cov lus hauv qab no: "Software entities (chav kawm, modules, functions, thiab lwm yam) yuav tsum qhib rau ncua, tab sis kaw rau kev hloov kho." Hauv kev xyaum, qhov no txhais tau hais tias lawv tuaj yeem tso cai rau lawv tus cwj pwm hloov yam tsis tau hloov pauv qhov chaws.

Lub hauv paus ntsiab lus tseem ceeb yog thaum hloov pauv mus rau qhov chaws yuav tsum tau hloov kho code, ntsuas chav ntsuas, thiab lwm yam txheej txheem. Code uas ua raws li txoj cai qhib / kaw tsis hloov thaum txuas ntxiv, yog li muaj teeb meem tsawg dua nrog nws.

Nov yog ib qho piv txwv ntawm cov cai uas ua txhaum txoj cai no.

10 Object-Oriented Programming Principles Txhua tus tsim tawm yuav tsum paub

Yog tias koj yuav tsum tau hloov qee yam hauv nws, nws yuav siv sijhawm ntau, txij li txhua ntu ntawm cov cai uas muaj kev sib txuas nrog cov seem uas xav tau yuav tsum tau hloov.

Los ntawm txoj kev, qhib-kaw yog ib qho ntawm cov hauv paus ntsiab lus ntawm SOLID.

Ib Txoj Cai Lij Choj Ib Leeg (SRP)

Lwm txoj hauv kev los ntawm SOLID teeb. Nws hais tias "tseem muaj ib qho laj thawj uas ua rau muaj kev hloov pauv hauv chav kawm." Cov chav kawm tsuas daws tau ib qho teeb meem xwb. Tej zaum nws yuav muaj ntau txoj hauv kev, tab sis lawv txhua tus tsuas yog siv los daws qhov teeb meem. Txhua txoj kev thiab cov khoom yuav tsum ua haujlwm tsuas yog qhov no.

10 Object-Oriented Programming Principles Txhua tus tsim tawm yuav tsum paub

Tus nqi ntawm txoj cai no yog tias nws loosens cov coupling ntawm tus kheej software tivthaiv thiab cov cai. Yog tias koj ntxiv ntau dua ib qho kev ua haujlwm rau hauv chav kawm, nws qhia txog kev sib raug zoo ntawm ob txoj haujlwm. Yog li, yog tias koj hloov ib qho ntawm lawv, muaj feem ntau ntawm kev puas tsuaj rau qhov thib ob, uas txuas nrog thawj tus. Thiab qhov no txhais tau tias nce kev xeem mus rau txhawm rau txheeb xyuas txhua yam teeb meem ua ntej.

Tswvyim Inversion Dependency (DIP)

10 Object-Oriented Programming Principles Txhua tus tsim tawm yuav tsum paub

Saum toj no yog ib qho piv txwv code uas AppManager nyob ntawm EventLogWriter, uas nyob rau hauv lem yog sib txuas nrog AppManager. Yog tias koj xav tau lwm txoj hauv kev los qhia kev ceeb toom, yog nws thawb, SMS lossis email, koj yuav tsum hloov chav AppManager.

Qhov teeb meem tuaj yeem daws tau siv DIP. Yog li, es tsis txhob AppManager, peb thov kom muaj EventLogWriter, uas yuav nkag mus siv lub moj khaum.

DIP ua rau nws tuaj yeem hloov tau yooj yim ntawm tus kheej modules nrog lwm tus los ntawm kev hloov pauv qhov kev vam khom module. Qhov no ua rau nws muaj peev xwm hloov ib qho module yam tsis muaj kev cuam tshuam rau lwm tus.

Kev sib xyaw ua ke tsis yog qhov qub txeeg qub teg

10 Object-Oriented Programming Principles Txhua tus tsim tawm yuav tsum paubMuaj ob txoj hauv kev tseem ceeb los rov siv cov cai: qub txeeg qub teg thiab kev sib xyaw, ob qho tib si muaj lawv tus kheej qhov zoo thiab qhov tsis zoo. Feem ntau qhov thib ob yog qhov nyiam vim nws hloov tau ntau dua.

Composition muab koj lub peev xwm los hloov tus cwj pwm ntawm chav kawm ntawm lub sijhawm ua haujlwm los ntawm kev teeb tsa nws cov khoom. Thaum siv cov kev sib tshuam, polymorphism yog siv, uas muab kev siv tau yooj yim dua.

Txawm tias Siv Tau Java los ntawm Joshua Bloch qhia kev xaiv qhov sib xyaw ua ke ntawm qub txeeg qub teg.

Barbara Liskov Hloov Txoj Cai (LSP)

Lwm txoj hauv kev los ntawm SOLID toolkit. Nws hais tias subtypes yuav tsum hloov pauv rau supertypes. Ntawd yog, txoj hauv kev thiab kev ua haujlwm uas ua haujlwm nrog superclass yuav tsum tuaj yeem ua haujlwm yam tsis muaj teeb meem nrog nws cov subclasses.

LSP yog txuam nrog ob qho tib si lub luag hauj lwm hauv paus ntsiab lus thiab lub luag hauj lwm hauv paus ntsiab lus. Yog tias ib chav kawm muab kev ua haujlwm ntau dua li subclass, tom kawg yuav tsis txhawb qee qhov kev ua haujlwm, ua txhaum txoj cai no.

Ntawm no yog ib qho ntawm cov cai uas cuam tshuam LSP.

10 Object-Oriented Programming Principles Txhua tus tsim tawm yuav tsum paub

Lub cheeb tsam (Rectangle r) txoj kev xam cov cheeb tsam ntawm lub Rectangle. Qhov kev zov me nyuam yuav poob tom qab ua Square vim Square tsis yog Rectangle ntawm no. Raws li txoj cai LSP, cov haujlwm uas siv cov ntaub ntawv xa mus rau cov chav kawm hauv paus yuav tsum muaj peev xwm siv cov khoom ntawm cov chav kawm uas tau txais yam tsis muaj cov lus qhia ntxiv.

Lub hauv paus ntsiab lus no, uas yog lub ntsiab lus tshwj xeeb ntawm ib hom subtype, tau hais los ntawm Barbara Liskov hauv xyoo 1987 lub rooj sib tham tseem ceeb hu ua "Data Abstraction thiab Hierarchy," yog li nws lub npe.

Interface Split Principle (ISP)

Lwm txoj cai SOLID. Raws li nws, lub interface uas tsis siv yuav tsum tsis txhob siv. Ua raws li lub hauv paus ntsiab lus no pab kom lub kaw lus nyob twj ywm thiab tsim nyog rau refactoring thaum hloov pauv rau kev khiav hauj lwm logic.

Feem ntau, qhov xwm txheej no tshwm sim thaum lub interface muaj ob peb lub luag haujlwm ib zaug, thiab cov neeg siv khoom xav tau tsuas yog ib qho ntawm lawv.

Txij li thaum sau ib qho kev sib txuas yog ib txoj haujlwm nyuaj, hloov nws tom qab ua tiav yam tsis muaj kev cuam tshuam dab tsi yuav yog qhov nyuaj.

Qhov zoo ntawm ISP txoj cai hauv Java yog tias txhua txoj hauv kev yuav tsum tau ua ua ntej, thiab tsuas yog tom qab ntawd lawv tuaj yeem siv los ntawm cov chav kawm. Yog li ntawd, lub hauv paus ntsiab lus ua rau nws muaj peev xwm txo tus naj npawb ntawm txoj kev.

10 Object-Oriented Programming Principles Txhua tus tsim tawm yuav tsum paub

Programming rau lub interface, tsis yog siv

Txhua yam ntawm no yog qhov tseeb ntawm lub npe. Kev siv lub hauv paus ntsiab lus no ua rau kev tsim cov cai hloov tau yooj yim uas tuaj yeem ua haujlwm nrog txhua qhov kev siv tshiab ntawm lub interface.

Koj yuav tsum siv hom kev sib txuas rau qhov sib txawv, hom rov qab, lossis hom kev sib cav hom. Ib qho piv txwv yog siv SuperClass es tsis yog SubClass.

Ntawd yog:

Sau tus lej = getNumbers();

Tab sis tsis yog:

ArrayList cov lej = getNumbers();

Ntawm no yog ib qho kev ua tau zoo ntawm qhov tau tham saum toj no.

10 Object-Oriented Programming Principles Txhua tus tsim tawm yuav tsum paub

Txoj cai ntawm delegation

Ib qho piv txwv yog qhov sib npaug () thiab hashCode() txoj hauv kev Java. Thaum nws yog ib qho tsim nyog los sib piv ob yam khoom, qhov kev txiav txim no raug xa mus rau cov chav kawm sib xws es tsis yog tus neeg siv khoom.

Qhov zoo ntawm lub hauv paus ntsiab lus yog tias tsis muaj qhov sib npaug ntawm cov cai thiab nws yog qhov yooj yim los hloov tus cwj pwm. Nws kuj tseem siv tau rau cov xwm txheej delegation.

10 Object-Oriented Programming Principles Txhua tus tsim tawm yuav tsum paub

Tag nrho cov hauv paus ntsiab lus no tso cai rau koj sau cov lej hloov tau yooj yim, zoo nkauj thiab txhim khu kev qha nrog kev sib koom ua ke siab thiab qis qis. Tau kawg, txoj kev xav yog qhov zoo, tab sis rau tus tsim tawm kom siv tau qhov kev paub, kev xyaum yog xav tau. Thaum koj tau paub OOP cov hauv paus ntsiab lus, koj cov kauj ruam tom ntej yuav yog kawm cov qauv tsim los daws cov teeb meem kev txhim kho software.

Skillbox pom zoo:

Tau qhov twg los: www.hab.com

Ntxiv ib saib