Хөгжүүлэгч бүрийн мэдэх ёстой объект хандалтат програмчлалын 10 зарчим

Хөгжүүлэгч бүрийн мэдэх ёстой объект хандалтат програмчлалын 10 зарчим

Би SOLID зарчмуудын талаар сонсоогүй хөгжүүлэгчидтэй ихэвчлэн уулздаг (бид энд тэдний талаар дэлгэрэнгүй ярьсан. — Transl.) эсвэл объект хандалтат програмчлал (OOP) эсвэл тэдгээрийн талаар сонссон боловч практикт ашиглахгүй. Энэ нийтлэлд хөгжүүлэгчийн өдөр тутмын ажилд тусалдаг OOP зарчмуудын ашиг тусыг тайлбарласан болно. Тэдний зарим нь сайн мэддэг, бусад нь тийм ч их биш тул нийтлэл нь эхлэгч болон туршлагатай програмистуудад хэрэгтэй болно.

Бид танд сануулж байна: Хабрын бүх уншигчдад - Habr сурталчилгааны кодыг ашиглан Skillbox-ын аль ч курст бүртгүүлэхдээ 10 рублийн хөнгөлөлт.

Skillbox зөвлөж байна: Боловсролын онлайн курс "Java хөгжүүлэгч".

ХУУРАЙ (Өөрийгөө бүү давт)

"Өөрийгөө бүү давт." гэсэн нэрнээс нь харахад маш энгийн зарчим. Програмистын хувьд энэ нь давхардсан кодоос зайлсхийх хэрэгцээ, түүнчлэн ажилдаа хийсвэрлэх боломжийг ашиглах гэсэн үг юм.

Хэрэв кодонд давтагдах хоёр хэсэг байгаа бол тэдгээрийг нэг аргад нэгтгэх хэрэгтэй. Хэрэв хатуу кодлогдсон утгыг нэгээс олон удаа ашигласан бол үүнийг нийтийн тогтмол руу хөрвүүлэх нь зүйтэй.

Энэ нь кодыг хялбарчлах, засвар үйлчилгээ хийхэд хялбар болгоход зайлшгүй шаардлагатай бөгөөд энэ нь OOP-ийн гол зорилго юм. Нэг код нь OrderId болон SSN хоёрын аль алиных нь баталгаажуулалтыг давахгүй тул та нэгдлийг хэтрүүлэн ашиглах ёсгүй.

Өөрчлөлтүүдийг багтаах

Ихэнх компаниудын програм хангамжийн бүтээгдэхүүнүүд байнга шинэчлэгдэж байдаг. Энэ нь кодонд өөрчлөлт оруулах шаардлагатай, үүнийг дэмжих шаардлагатай гэсэн үг юм. Та капсулыг ашиглан амьдралаа хөнгөвчлөх боломжтой. Энэ нь танд одоо байгаа кодын баазыг илүү үр дүнтэй туршиж үзэх боломжийг олгоно. Энд нэг жишээ байна.

Хэрэв та Java хэл дээр бичдэг бол өгөгдмөлөөр хувийн аргууд болон хувьсагчдыг оноох.

Нээлттэй/хаалттай зарчим

"Програм хангамжийн нэгжүүд (анги, модуль, функц гэх мэт) өргөтгөл хийх боломжтой, харин өөрчлөхөд хаалттай байх ёстой" гэсэн мэдэгдлийг уншаад энэ зарчмыг амархан санаж болно. Практикт энэ нь эх кодыг өөрчлөхгүйгээр тэдний зан төлөвийг өөрчлөх боломжийг олгодог гэсэн үг юм.

Эх кодод өөрчлөлт оруулахад кодын засвар, нэгжийн туршилт болон бусад процедур шаардлагатай үед энэ зарчим чухал юм. Нээлттэй/хаалттай зарчмыг баримталдаг код нь өргөтгөх үед өөрчлөгддөггүй тул үүнтэй холбоотой асуудал хамаагүй бага байдаг.

Энэ зарчмыг зөрчсөн кодын жишээ энд байна.

Хөгжүүлэгч бүрийн мэдэх ёстой объект хандалтат програмчлалын 10 зарчим

Хэрэв та ямар нэг зүйлийг өөрчлөх шаардлагатай бол хүссэн фрагменттэй холбоотой кодын бүх хэсгийг өөрчлөх шаардлагатай тул маш их цаг хугацаа шаардагдана.

Дашрамд хэлэхэд нээлттэй-хаалттай байх нь SOLID-ийн нэг зарчим юм.

Ганц хариуцлагын зарчим (SRP)

SOLID багцын өөр нэг зарчим. Энэ нь "Анги солигдоход ганцхан шалтгаан бий" гэж заасан байдаг. Анги нь зөвхөн нэг асуудлыг шийддэг. Энэ нь хэд хэдэн аргатай байж болох ч тус бүрийг зөвхөн нийтлэг асуудлыг шийдвэрлэхэд ашигладаг. Бүх арга, шинж чанарууд нь зөвхөн үүнд л үйлчлэх ёстой.

Хөгжүүлэгч бүрийн мэдэх ёстой объект хандалтат програмчлалын 10 зарчим

Энэ зарчмын үнэ цэнэ нь тус тусдаа програм хангамжийн бүрэлдэхүүн хэсэг болон код хоорондын уялдаа холбоог сулруулдагт оршино. Хэрэв та ангид нэгээс олон функц нэмбэл энэ нь хоёр функцийн хоорондын хамаарлыг танилцуулна. Тиймээс, хэрэв та тэдгээрийн аль нэгийг нь солих юм бол эхнийхтэй холбогдсон хоёр дахь нь сүйрэх магадлал өндөр байна. Энэ нь бүх асуудлыг урьдчилан тодорхойлохын тулд туршилтын мөчлөгийг нэмэгдүүлэх гэсэн үг юм.

Хараат байдлын урвуу зарчим (DIP)

Хөгжүүлэгч бүрийн мэдэх ёстой объект хандалтат програмчлалын 10 зарчим

Дээрх нь AppManager нь EventLogWriter-ээс хамаардаг кодын жишээ бөгөөд энэ нь эргээд AppManager-тай нягт холбоотой байдаг. Хэрэв танд push, SMS эсвэл имэйл гэх мэт мэдэгдлийг харуулах өөр арга хэрэгтэй бол AppManager ангиллыг өөрчлөх хэрэгтэй.

Асуудлыг DIP ашиглан шийдэж болно. Тиймээс, AppManager-ийн оронд бид EventLogWriter-ийг хүсч байгаа бөгөөд үүнийг хүрээ ашиглан оруулах болно.

DIP нь хамаарлын модулийг өөрчилснөөр тусдаа модулиудыг бусадтай хялбараар солих боломжийг олгодог. Энэ нь нэг модулийг бусдад нөлөөлөхгүйгээр өөрчлөх боломжтой болгодог.

Өв залгамжлалын оронд найрлага

Хөгжүүлэгч бүрийн мэдэх ёстой объект хандалтат програмчлалын 10 зарчимКодыг дахин ашиглах хоёр үндсэн арга байдаг: өв залгамжлал ба бүтэц, хоёулаа өөрийн гэсэн давуу болон сул талуудтай. Ихэвчлэн хоёр дахь нь илүү уян хатан байдаг тул илүүд үздэг.

Бүрэлдэхүүн нь тухайн ангийн шинж чанарыг тохируулах замаар ажиллах үеийн горимыг өөрчлөх боломжийг танд олгоно. Интерфейсийг хэрэгжүүлэхдээ полиморфизмыг ашигладаг бөгөөд энэ нь илүү уян хатан хэрэгжилтийг өгдөг.

Joshua Bloch-ийн Effective Java хүртэл өв залгамжлалаас илүү найрлагыг сонгохыг зөвлөж байна.

Барбара Лисковын орлуулах зарчим (LSP)

SOLID хэрэгслийн өөр нэг зарчим. Энэ нь дэд төрлүүдийг супер төрлөөр орлуулах ёстой гэж заасан. Өөрөөр хэлбэл, супер ангитай ажилладаг арга, функцууд нь түүний дэд ангиудтай ямар ч асуудалгүйгээр ажиллах боломжтой байх ёстой.

LSP нь нэг хариуцлагын зарчим болон хамтын хариуцлагын зарчимтай холбоотой. Хэрэв анги нь дэд ангиас илүү функцээр хангадаг бол сүүлийнх нь зарим функцийг дэмжихгүй бөгөөд энэ зарчмыг зөрчинө.

Энд LSP-тэй зөрчилдөж буй кодын хэсэг байна.

Хөгжүүлэгч бүрийн мэдэх ёстой объект хандалтат програмчлалын 10 зарчим

Талбай(Тэгш өнцөгт r) арга нь тэгш өнцөгтийн талбайг тооцдог. Квадрат нь тэгш өнцөгт биш учраас программ талбайг ажиллуулсны дараа гацах болно. LSP зарчмын дагуу үндсэн ангиудын лавлагаа ашигладаг функцууд нь нэмэлт зааваргүйгээр үүсмэл ангийн объектуудыг ашиглах боломжтой байх ёстой.

Дэд хэлбэрийн тодорхой тодорхойлолт болох энэхүү зарчмыг Барбара Лисков 1987 онд болсон "Өгөгдлийн хийсвэрлэл ба шатлал" гэсэн гарчигтай бага хурлын үндсэн илтгэлдээ дэвшүүлсэн тул нэрлэсэн.

Интерфэйсийг салгах зарчим (ISP)

Өөр нэг SOLID зарчим. Үүний дагуу ашиглагдаагүй интерфейсийг хэрэгжүүлэх ёсгүй. Энэ зарчмыг дагаж мөрдөх нь үйлдлийн логикт өөрчлөлт оруулах үед систем нь уян хатан, рефактор хийхэд тохиромжтой хэвээр байхад тусалдаг.

Ихэнх тохиолдолд интерфэйс нь хэд хэдэн функцийг агуулж байдаг бөгөөд үйлчлүүлэгчид тэдгээрийн зөвхөн нэг нь л шаардлагатай үед ийм нөхцөл байдал үүсдэг.

Интерфейс бичих нь хэцүү ажил тул ажил дууссаны дараа юуг ч эвдэхгүйгээр өөрчлөх нь хэцүү байх болно.

Java хэл дээрх ISP зарчмын давуу тал нь бүх аргуудыг эхлээд хэрэгжүүлэх ёстой бөгөөд зөвхөн дараа нь тэдгээрийг ангиудад ашиглаж болно. Тиймээс зарчим нь аргын тоог багасгах боломжтой болгодог.

Хөгжүүлэгч бүрийн мэдэх ёстой объект хандалтат програмчлалын 10 зарчим

Интерфэйсэд зориулсан програмчлал, хэрэгжилт биш

Энд бүх зүйл гарчигнаас тодорхой харагдаж байна. Энэ зарчмыг хэрэгжүүлэх нь интерфэйсийн аливаа шинэ хэрэгжилттэй ажиллах боломжтой уян хатан кодыг бий болгоход хүргэдэг.

Та хувьсагч, буцаах төрөл эсвэл аргументын төрөлд интерфейсийн төрлийг ашиглах ёстой. Жишээ нь дэд анги биш харин SuperClass ашиглаж байна.

Энэ нь:

Жагсаалтын тоо= getNumbers();

Гэхдээ биш:

ArrayList тоо = getNumbers();

Дээр дурдсан зүйлийн бодит хэрэгжилт энд байна.

Хөгжүүлэгч бүрийн мэдэх ёстой объект хандалтат програмчлалын 10 зарчим

Төлөөлөх зарчим

Нийтлэг жишээ бол Java дахь equals() болон hashCode() аргууд юм. Хоёр объектыг харьцуулах шаардлагатай бол энэ үйлдлийг үйлчлүүлэгчийн оронд харгалзах ангид шилжүүлнэ.

Зарчмын давуу тал нь кодын давхардал байхгүй бөгөөд зан төлөвийг өөрчлөхөд харьцангуй хялбар байдаг. Энэ нь арга хэмжээний төлөөлөгчдөд ч хамаатай.

Хөгжүүлэгч бүрийн мэдэх ёстой объект хандалтат програмчлалын 10 зарчим

Эдгээр бүх зарчмууд нь өндөр уялдаатай, бага холболттой илүү уян хатан, үзэсгэлэнтэй, найдвартай код бичих боломжийг олгодог. Мэдээжийн хэрэг, онол сайн, гэхдээ хөгжүүлэгчид олж авсан мэдлэгээ бодитоор ашиглахын тулд дадлага хийх шаардлагатай. Та OOP зарчмуудыг эзэмшсэн бол дараагийн алхам нь програм хангамж хөгжүүлэх нийтлэг асуудлуудыг шийдвэрлэх дизайны загварт суралцах явдал юм.

Skillbox зөвлөж байна:

Эх сурвалж: www.habr.com

сэтгэгдэл нэмэх