Почетен курс

Цврсти кои се 5-те принципи на објектно-ориентираното програмирање

SOLID е кратенка, повикувајќи се на петте принципи на објектно-ориентиран дизајн (OOD или OOP). Овие се упатства што програмерите можат да ги користат за да создадат софтвер што е лесен за управување, одржување и проширување. Разбирањето на овие концепти ќе ве направи подобар развивач и ќе ви помогне да избегнете проблеми со управувањето со софтверот. Што значи да се биде добар програмер?

Секој со одредено искуство во софтверско програмирање суди за софтверски код напишан од други, користејќи параметри за проценка засновани врз нивниот пат во кариерата.

Во текот на мојата професионална кариера, познавав многу развивачи и видов илјадници редови на кодови и кога треба да ја проценам вештината на инвеститорот, главно разгледувам два фактори:

  • Едноставност во читањето на кодот;
  • Колку е веројатно нивниот код да работи и да се развива со текот на времето.

За среќа, постојат некои основи или принципи што го олеснуваат подобриот кодирање.

кратенката SOLID се залага за:
S: принцип на единствена одговорност
O: принцип отворено затворено
L: Принцип на замена на Лисков
I: Принцип на поделба на интерфејсот
D: Принцип на превртување на зависностите

Да започнеме со навлегување во првиот принцип на СОЛИД, имено

Принцип на единствена одговорност

Класа (или модул) треба да има само една причина да се менува, да се развива.

Самиот концепт е многу едноставен, но за да се постигне оваа едноставност, патот за спроведување може да биде многу комплициран. Часот треба да има само една причина да се промени.

Но зошто? 

Зошто е толку важно да се има само една причина да се промени?

На пример, ако има две различни причини за промена, може да се замисли дека два различни тима би можеле да работат на ист код од две различни причини. Секој ќе мора да имплементира свое решение, што во случај на компилиран јазик (како C ++, C # или Java), може да доведе до модули што не се компатибилни со други тимови или други делови од апликацијата.

Друг пример, ако користите толкуван јазик, можеби ќе треба повторно да ја тестирате истата класа или модул од различни причини. Ова значи повеќе работа, време и напор за контрола на квалитетот.

Идентификувањето на единствената карактеристика што треба да ја има класа или модул е ​​многу покомплексно отколку едноставно гледање во список за проверка за извршување тестови. 

Но, ајде да се обидеме да размислиме од помалку техничка гледна точка, односно, да се обидеме да го анализираме корисникот на нашата класа или модул, односно кој ќе го користи. Основен аспект што секогаш мора да го имаме во предвид, е фактот дека корисниците на апликацијата или системот што ги развиваме, а на кои им служи одреден модул, ќе бидат оние што бараат измени во истиот. Оние што се опслужуваат ќе побараат промена на класата или модулот. 

Неколку примери на модули и нивна употреба:

  • Модул за одржување: корисникот е составен од администратори на бази на податоци и архитекти на софтвер.
  • Модул за известување: корисникот се состои од канцелариски работници, сметководители и производство.
  • Модул за пресметка на плаќање за систем за управување со платен список: корисниците можат да вклучуваат адвокати, менаџери и сметководители.
  • Модул за пребарување текст за систем за управување со библиотека: корисникот може да биде претставен од библиотекарот или од посетителите и клиентите на самата библиотека.

Значи, ако првиот чекор е да се бараат актерите или актерот кој има улога на соговорник со модулот, асоцијацијата на поединци со сите улоги може да биде тешко. Во мала компанија, едно лице може да игра повеќе улоги, додека во голема компанија може да има повеќе луѓе кои имаат единствена улога. 

Се чини поразумно да се идентификуваат улогите, наместо луѓето или корисниците.

Затоа:

  • користењето на софтверскиот систем defiги објаснува причините за промената;
  • одговорност е семејство на функции што ги задоволува потребите на одреден актер, односно на корисникот на системот;
  • актерите, корисникот станува извор на промени за семејството на функционалности што мора да ја задоволат потребата на корисникот;
  • еволуцијата на потребите на корисникот, ја води еволуцијата на функционалноста;

Ајде да видиме неколку примери

Да претпоставиме дека имаме класа Книга што ги содржи концептот на книга и нејзината функционалност.

класа Книга {

    функција getTitle () {

        вратете „Одлична книга“;

    }

    функција getAuthor () {

        вратете го „Алесандро Барико“;

    }

    функција на следната страница () {

        // Следна Страна

    }

    функција за печатење Тековна страница () {

        ехо „содржина на тековната страница“;

    }

}

Ова е многу нормална класа. Имаме книга, а часот може да ни го даде насловот, тие да ни го дадат авторот и да продолжат понатаму. Конечно, тој е исто така способен да ја печати тековната страница на екранот. 

Сепак, постои мал проблем. 

Размислувајќи за актерите вклучени во управувањето со објектот Книга, кои би можеле да бидат тие? 

Лесно можеме да помислиме на двајца различни актери тука: Управување со книги (како библиотекар) И Механизам за доставување податоци (како тоа како сакаме да му доставиме содржина на корисникот: на екранот, графички кориснички интерфејс, кориснички интерфејс само за текст, можеби и печатење). 

Затоа, имаме двајца многу различни актери кои комуницираат со часот.

Накратко, оваа класа се меша помеѓу:

  • деловна логика со 
  • презентацијата 

ова може да биде проблем затоа што го крши принципот на единствена одговорност (СРП). 

Како можеме да се промениме, како можеме да го подобриме овој кодекс за да го почитуваме принципот на единствена одговорност?

Погледнете го следниот код:

класа Книга {

    функција getTitle () {

        вратете „Океано Маре“;

    }

    функција getAuthor () {

        вратете го „Алесандро Барико“;

    }

    функција за свртување страница () {

        // Следна Страна

    }

    функција getCurrentPage () {

        ехо „содржина на тековната страница“;

    }

}

интерфејс печатач {

    функција за печатење Страна ($ страница);

Билтен за иновации
Не пропуштајте ги најважните вести за иновациите. Пријавете се за да ги добивате по е-пошта.

}

класа StampaLibro спроведува печатач {

    функција за печатење страници ($ страница) {

        ехо $ страница;

    }

}

 

класа HtmlPrinter спроведува печатач {

    функција за печатење страници ($ страница) {

        ехо ' ' страница $. ' ';

    }

}

Овој многу едноставен пример покажува како да се оддели презентацијата од деловната логика, а во согласност со СРП нуди големи предности во флексибилноста на нашиот проект.

Да разгледаме друг пример:

Пример сличен на горенаведениот е кога некој предмет може да заштеди и да се извлече од презентацијата.

класа Книга {

    функција getTitle () {

        вратете „Океано Маре“;

    }

    функција getAuthor () {

        вратете го „Алесандро Барико“;

    }

    функција за свртување страница () {

        // Следна Страна

    }

    функција getCurrentPage () {

        вратете ја „содржината на тековната страница“;

    }

    функција зачувување () {

        $ filename = '/ документи /'. $ ова-> getTitolo (). '-'. $ ова-> getAuthor ();

        file_put_contents ($ name of file, serialize ($ this));

    }

}

Како и порано, и тука можеме да идентификуваме различни актери, како што е Управување со книги (како библиотекар) И упорност. Кога и да сакаме да го смениме начинот на кој одиме од страница на страница, треба да ја смениме оваа класа. Можеме да имаме неколку причини за промена.

класа Книга {

    функција getTitle () {

        вратете „Океано Маре“;

    }

    функција getAuthor () {

        вратете го „Алесандро Барико“;

    }

    функција за свртување страница () {

        // Следна Страна

    }

    функција getCurrentPage () {

        вратете ја „содржината на тековната страница“;

    }

}

класа SimpleFilePersistence {

    функција зачувај (Резервирај $ книга) {

        $ filename = '/ документи /'. $ книга-> getTitle (). '-'. $ книга-> getAuthor ();

        file_put_contents ($ name of file, serialize ($ book));

    }

}

Преместувањето на операцијата за упорност во друга класа јасно ќе ги оддели одговорностите и ќе можеме слободно да разменуваме методи на упорност без да влијаеме на нашиот час на Книга. На пример, спроведувањето на класата DatabasePersistence би било тривијално, а нашата деловна логика изградена околу работењето на книги нема да се промени.

Продолжете да го читате вториот принцип Отворено / затворено ->

Ercole Palmeri

Билтен за иновации
Не пропуштајте ги најважните вести за иновациите. Пријавете се за да ги добивате по е-пошта.

Последни написи

Истражување на модуларната архитектура на Ларавел

Ларавел, познат по својата елегантна синтакса и моќните карактеристики, исто така обезбедува цврста основа за модуларна архитектура. Таму…

9 мај 2024

Cisco Hypershield и стекнување на Splunk Започнува новата ера на безбедност

Cisco и Splunk им помагаат на клиентите да го забрзаат своето патување до Центарот за безбедносни операции (SOC) на иднината со…

8 мај 2024

Надвор од економската страна: неочигледната цена на откупниот софтвер

Ransomware доминира во вестите во последните две години. Повеќето луѓе се свесни дека нападите…

6 мај 2024

Иновативна интервенција во зголемена реалност, со гледач на Apple во поликлиниката Катанија

Операција на офталмопластика со помош на комерцијалниот прегледувач на Apple Vision Pro беше извршена во поликлиниката Катанија…

3 мај 2024

Придобивките од боење страници за деца - свет на магија за сите возрасти

Развивањето на фини моторни вештини преку боење ги подготвува децата за посложени вештини како пишување. Да обои…

2 мај 2024

Иднината е тука: Како бродската индустрија ја револуционизира глобалната економија

Поморскиот сектор е вистинска глобална економска сила, која навигираше кон пазар од 150 милијарди ...

1 мај 2024

Издавачите и OpenAI потпишуваат договори за регулирање на протокот на информации обработени од вештачката интелигенција

Минатиот понеделник, Financial Times објави договор со OpenAI. ФТ го лиценцира своето новинарство од светска класа…

Април 30 2024

Плаќања преку Интернет: Еве како услугите за стриминг ве натераат да плаќате засекогаш

Милиони луѓе плаќаат за стриминг услуги, плаќајќи месечна претплата. Општо е мислењето дека вие…

Април 29 2024

Читајте иновации на вашиот јазик

Билтен за иновации
Не пропуштајте ги најважните вести за иновациите. Пријавете се за да ги добивате по е-пошта.

Следете нас