10 principer för objektorienterad programmering som varje utvecklare bör veta

10 principer för objektorienterad programmering som varje utvecklare bör veta

Jag stöter ganska ofta pĂ„ utvecklare som inte har hört talas om SOLID-principerna (vi berĂ€ttade detaljerat om dem hĂ€r. — Anm.) eller objektorienterad programmering (OOP), eller har hört talas om dem men inte anvĂ€nder dem i praktiken. I den hĂ€r artikeln beskrivs fördelarna med OOP-principerna som hjĂ€lper utvecklare i deras dagliga arbete. Vissa av dem Ă€r vĂ€lkĂ€nda, andra Ă€r mindre kĂ€nda, sĂ„ artikeln kommer att vara anvĂ€ndbar bĂ„de för nybörjare och erfarna programmerare.

PĂ„minnelse: Till alla lĂ€sare av "Habr" — rabatt pĂ„ 10 000 rubel vid registrering till vilken kurs som helst pĂ„ Skillbox med rabattkoden "Habr".

Skillbox rekommenderar: Utbildningskurs online Java-utvecklare.

DRY (Don’t Repeat Yourself)

En ganska enkel princip, vars innebörd framgÄr av namnet: "Upprepa dig inte". För en programmerare innebÀr detta att undvika duplicerad kod samt möjligheten att anvÀnda abstraktion i sitt arbete.

Om det finns tvÄ upprepande sektioner i koden, bör de slÄs samman till en metod. Om ett fast vÀrde anvÀnds mer Àn en gÄng, bör det omvandlas till en offentlig konstant.

Detta görs för att förenkla koden och göra dess underhÄll enklare, vilket Àr syftet med OOP. Man bör dock inte missbruka sammanslagning, eftersom samma kod inte klarar tester bÄde med OrderId och med SSN.

InkapselförÀndringar

Programvaruprodukterna hos de flesta företag utvecklas stÀndigt. Det innebÀr att koden mÄste Àndras och stödjas. Man kan förenkla sitt liv genom inkapsling. Detta gör det möjligt att testa och underhÄlla den befintliga kodbasen mer effektivt. HÀr Àr ett av exemplen.

Om du skriver i Java, ska du som standard tilldela private till metoder och variabler.

Öppen/stĂ€ngd princip

Denna princip Àr lÀtt att komma ihÄg genom att lÀsa följande uttalande: "Programvaruenheter (klasser, moduler, funktioner etc.) bör vara öppna för utvidgning men stÀngda för förÀndring". I praktiken innebÀr detta att de kan tillÄta att deras beteende Àndras utan att Àndra kÀllkoden.

Principen Àr viktig nÀr förÀndringar i kÀllkoden krÀver att den granskas, genomgÄr enhetstestning och andra procedurer. Kod som följer den öppna/stÀngda principen Àndras inte vid utvidgning, vilket gör att man fÄr fÀrre problem med den.

HÀr Àr ett kodexempel som bryter mot denna princip.

10 principer för objektorienterad programmering som varje utvecklare bör veta

Om det behövs nÄgra Àndringar i den, kommer det att ta mycket tid eftersom alla kodavsnitt som har kopplingar till det nödvÀndiga fragmentet mÄste Àndras.

Förresten, öppenhet-stÀngdhet Àr en av principerna i SOLID.

Principen om enskild ansvarighet (SRP)

En annan princip frÄn SOLID-setet. Den sÀger att "det finns bara en anledning till att en klass kan Àndras". En klass löser bara en uppgift. Den kan ha flera metoder, men var och en av dem anvÀnds endast för att lösa den övergripande uppgiften. Alla metoder och egenskaper ska endast tjÀna detta syfte.

10 principer för objektorienterad programmering som varje utvecklare bör veta

VÀrdet av denna princip Àr att den minskar kopplingen mellan enskilda mjukvarukomponenter och koden. Om man lÀgger till mer Àn en funktionalitet i en klass, introducerar det en koppling mellan tvÄ funktioner. SÄledes, om man Àndrar en av dem, finns det stor risk att förstöra den andra, som Àr kopplad till den första. Det innebÀr en ökning av testcykler för att upptÀcka alla problem i förvÀg.

Principen om beroendeinversion (DIP)

10 principer för objektorienterad programmering som varje utvecklare bör veta

Exemplet ovan visar koden dÀr AppManager Àr beroende av EventLogWriter, som i sin tur Àr nÀra kopplad till AppManager. Om ett annat sÀtt behövs för att visa en avisering, vare sig det Àr en push, SMS eller e-post, mÄste klassen AppManager Àndras.

Problemet kan lösas med hjÀlp av DIP. IstÀllet för AppManager, begÀr vi EventLogWriter, som kommer att introduceras genom ramverket.

DIP gör det möjligt att problemfritt byta ut enskilda moduler mot andra, genom att Àndra beroendemodulen. Det gör det möjligt att Àndra en modul utan att pÄverka de andra.

Komposition istÀllet för arv

10 principer för objektorienterad programmering som varje utvecklare bör vetaDe tvÄ huvudmetoderna för att ÄteranvÀnda kod Àr arv och komposition, och bÄda har sina fördelar och nackdelar. Vanligtvis föredras den andra eftersom den Àr mer flexibel.

Komposition möjliggör förÀndring av klassens beteende under körning genom att stÀlla in dess egenskaper. Vid implementering av grÀnssnitt anvÀnds polymorfism, vilket ger en mer flexibel implementation.

Även "Effective Java" av Joshua Bloch rekommenderar att man föredrar komposition framför arv.

Principen om Barbara Liskovs substitutionsprincip (LSP)

Ännu en princip frĂ„n SOLID-verktygen. Den sĂ€ger att underklasser ska kunna ersĂ€tta sin superklass. Det vill sĂ€ga metoder och funktioner som arbetar med superklassen mĂ„ste kunna fungera utan problem med dess underklasser.

LSP Àr kopplad bÄde till principen om enhetligt ansvar och principiell delning av ansvar. Om en klass erbjuder mer funktionalitet Àn en underklass, kommer den senare inte att stödja vissa funktioner, vilket bryter mot denna princip.

HÀr Àr en kodsnutt som bryter mot LSP.

10 principer för objektorienterad programmering som varje utvecklare bör veta

Metoden area(Rectangle r) berÀknar arean av Rectangle. Programmet kommer att krascha efter att ha kört Square, eftersom Square hÀr inte Àr en Rectangle. Enligt principen LSP bör funktioner som anvÀnder referenser till bas-klasser kunna anvÀnda Àven objekt av underklasser utan ytterligare instruktioner.

Denna princip, som Àr en specifik definition av underklass, föreslogs av Barbara Liskov 1987 vid en konferens dÀr hon hÄllit en huvudförelÀsning med titeln "DatabasfrÄgor och hierarkier" - dÀrav namnet.

Principen om interface-separation (ISP)

Ytterligare en princip frÄn SOLID. Enligt den bör ett interface som inte anvÀnds inte implementeras. Att följa denna princip hjÀlper systemet att förbli flexibelt och redo för refactoring nÀr förÀndringar görs i logiken.

Denna situation uppstÄr ofta nÀr ett interface innehÄller flera funktionaliteter, men kunden behöver bara en av dem.

Eftersom det Àr en komplex uppgift att skriva ett interface, kommer det att bli problematiskt att Àndra det efter att det slutförts utan att bryta nÄgot.

En fördel med ISP-principen i Java Àr att man först mÄste implementera alla metoder, och först dÀrefter kan de anvÀndas av klasser. DÀrför ger principen möjlighet att minska antalet metoder.

10 principer för objektorienterad programmering som varje utvecklare bör veta

Programmering för interface, inte implementation

HÀr Àr det tydligt frÄn namnet. TillÀmpningen av denna princip leder till skapandet av flexibel kod som kan fungera med vilken ny implementation av ett interface som helst.

Man bör anvĂ€nda interface-typ för variabler, returtyper eller argumenttyp i metoden. Exempel — anvĂ€ndning av SuperClass istĂ€llet för SubClass.

Det vill sÀga:

List numbers = getNumbers();

Och inte:

ArrayList numbers = getNumbers();

HÀr Àr en praktisk implementation av det som nÀmnts ovan.

10 principer för objektorienterad programmering som varje utvecklare bör veta

Delegationsprincipen

Ett vanligt exempel Àr metoderna equals() och hashCode() i Java. NÀr tvÄ objekt ska jÀmföras, delegeras denna ÄtgÀrd till den aktuella klassen istÀllet för klienten.

Fördelen med principen Àr avsaknaden av kodduplicering och relativt enkel förÀndring av beteende. Den Àr ocksÄ tillÀmpbar pÄ hÀndelsedelegation.

10 principer för objektorienterad programmering som varje utvecklare bör veta

Alla dessa principer gör det möjligt att skriva mer flexibel, vacker och pÄlitlig kod med hög koppling och lÄg beroende. SjÀlvklart Àr teorin bra, men för att utvecklaren verkligen ska börja anvÀnda de förvÀrvade kunskaperna, behövs praktik. NÀsta steg efter att ha behÀrskat OOP-principerna kan vara att studera designmönster för att lösa vanliga problem inom mjukvaruutveckling.

Skillbox rekommenderar:

KĂ€lla: habr.com

Köp pĂ„litlig webbhotell med DDoS-skydd, VPS VDS-servrar đŸ”„ Köp pĂ„litlig webbhotell med DDoS-skydd, VPS VDS-servrar | ProHoster